From d8be576c1640b48cbdde9d842cd3e5db8d0297b7 Mon Sep 17 00:00:00 2001 From: Levi Blackstone Date: Wed, 1 Feb 2023 10:10:31 -0700 Subject: [PATCH] Upgrade terraform-provider-google-beta to v4.51.0 (#983) * Upgrade terraform-provider-google-beta to v4.51.0 * .NET SDK * Go SDK * Java SDK * Node SDK * Python SDK --- provider/cmd/pulumi-resource-gcp/schema.json | 3625 +++++++++++++---- provider/go.mod | 2 +- provider/go.sum | 4 +- provider/resources.go | 20 +- .../AccessLevelCondition.cs | 88 - sdk/dotnet/ApiGateway/Api.cs | 8 - sdk/dotnet/ApiGateway/ApiConfig.cs | 8 - sdk/dotnet/ApiGateway/ApiConfigIamBinding.cs | 96 - sdk/dotnet/ApiGateway/ApiConfigIamMember.cs | 96 - sdk/dotnet/ApiGateway/ApiConfigIamPolicy.cs | 96 - sdk/dotnet/ApiGateway/ApiIamBinding.cs | 96 - sdk/dotnet/ApiGateway/ApiIamMember.cs | 96 - sdk/dotnet/ApiGateway/ApiIamPolicy.cs | 96 - sdk/dotnet/ApiGateway/Gateway.cs | 8 - sdk/dotnet/ApiGateway/GatewayIamBinding.cs | 99 - sdk/dotnet/ApiGateway/GatewayIamMember.cs | 99 - sdk/dotnet/ApiGateway/GatewayIamPolicy.cs | 99 - sdk/dotnet/Apigee/EnvGroup.cs | 55 - sdk/dotnet/Apigee/EnvGroupAttachment.cs | 108 - sdk/dotnet/Apigee/Environment.cs | 53 - sdk/dotnet/Apigee/Instance.cs | 246 -- sdk/dotnet/Apigee/InstanceAttachment.cs | 105 - sdk/dotnet/Apigee/Organization.cs | 2 +- sdk/dotnet/AppEngine/FlexibleAppVersion.cs | 9 +- sdk/dotnet/BigQuery/Connection.cs | 7 +- .../BigQuery/Inputs/ConnectionAzureArgs.cs | 12 + .../BigQuery/Inputs/ConnectionAzureGetArgs.cs | 12 + .../Inputs/ConnectionCloudSpannerArgs.cs | 6 + .../Inputs/ConnectionCloudSpannerGetArgs.cs | 6 + .../BigQuery/Inputs/ConnectionCloudSqlArgs.cs | 6 + .../Inputs/ConnectionCloudSqlGetArgs.cs | 6 + sdk/dotnet/BigQuery/Inputs/JobLoadArgs.cs | 4 +- sdk/dotnet/BigQuery/Inputs/JobLoadGetArgs.cs | 4 +- ...ExternalDataConfigurationCsvOptionsArgs.cs | 9 - ...ernalDataConfigurationCsvOptionsGetArgs.cs | 9 - .../BigQuery/Outputs/ConnectionAzure.cs | 14 + .../Outputs/ConnectionCloudSpanner.cs | 9 +- .../BigQuery/Outputs/ConnectionCloudSql.cs | 7 + sdk/dotnet/BigQuery/Outputs/JobLoad.cs | 4 +- ...ableExternalDataConfigurationCsvOptions.cs | 9 - sdk/dotnet/BigQuery/ReservationAssignment.cs | 25 - sdk/dotnet/BigQuery/Routine.cs | 92 - sdk/dotnet/BigQuery/Table.cs | 20 +- sdk/dotnet/BigTable/Instance.cs | 28 +- sdk/dotnet/BigTable/InstanceIamBinding.cs | 12 - sdk/dotnet/BigTable/InstanceIamMember.cs | 12 - sdk/dotnet/BigTable/InstanceIamPolicy.cs | 12 - sdk/dotnet/BigTable/Table.cs | 19 +- sdk/dotnet/BigTable/TableIamBinding.cs | 12 - sdk/dotnet/BigTable/TableIamMember.cs | 12 - sdk/dotnet/BigTable/TableIamPolicy.cs | 12 - sdk/dotnet/Billing/SubAccount.cs | 35 - sdk/dotnet/CertificateManager/Certificate.cs | 29 +- .../Inputs/CertificateSelfManagedArgs.cs | 1 - .../Inputs/CertificateSelfManagedGetArgs.cs | 1 - .../Outputs/CertificateSelfManaged.cs | 1 - sdk/dotnet/CloudBuild/GetTrigger.cs | 4 + .../Inputs/TriggerGitFileSourceArgs.cs | 7 + .../Inputs/TriggerGitFileSourceGetArgs.cs | 7 + .../TriggerRepositoryEventConfigArgs.cs | 40 + .../TriggerRepositoryEventConfigGetArgs.cs | 40 + ...gerRepositoryEventConfigPullRequestArgs.cs | 39 + ...RepositoryEventConfigPullRequestGetArgs.cs | 39 + .../TriggerRepositoryEventConfigPushArgs.cs | 38 + ...TriggerRepositoryEventConfigPushGetArgs.cs | 38 + .../Inputs/TriggerSourceToBuildArgs.cs | 7 + .../Inputs/TriggerSourceToBuildGetArgs.cs | 7 + .../Outputs/GetTriggerGitFileSourceResult.cs | 4 + ...rRepositoryEventConfigPullRequestResult.cs | 33 + ...tTriggerRepositoryEventConfigPushResult.cs | 33 + .../GetTriggerRepositoryEventConfigResult.cs | 33 + .../Outputs/GetTriggerSourceToBuildResult.cs | 4 + .../Outputs/TriggerGitFileSource.cs | 8 + .../Outputs/TriggerRepositoryEventConfig.cs | 44 + ...TriggerRepositoryEventConfigPullRequest.cs | 43 + .../TriggerRepositoryEventConfigPush.cs | 42 + .../Outputs/TriggerSourceToBuild.cs | 8 + sdk/dotnet/CloudBuild/Trigger.cs | 101 + sdk/dotnet/CloudBuildV2/Connection.cs | 372 ++ .../Inputs/ConnectionGithubConfigArgs.cs | 32 + ...ionGithubConfigAuthorizerCredentialArgs.cs | 32 + ...GithubConfigAuthorizerCredentialGetArgs.cs | 32 + .../Inputs/ConnectionGithubConfigGetArgs.cs | 32 + .../ConnectionGithubEnterpriseConfigArgs.cs | 68 + ...ConnectionGithubEnterpriseConfigGetArgs.cs | 68 + ...erpriseConfigServiceDirectoryConfigArgs.cs | 26 + ...riseConfigServiceDirectoryConfigGetArgs.cs | 26 + .../Inputs/ConnectionInstallationStateArgs.cs | 29 + .../ConnectionInstallationStateGetArgs.cs | 29 + .../Outputs/ConnectionGithubConfig.cs | 35 + ...nectionGithubConfigAuthorizerCredential.cs | 35 + .../ConnectionGithubEnterpriseConfig.cs | 77 + ...bEnterpriseConfigServiceDirectoryConfig.cs | 27 + .../Outputs/ConnectionInstallationState.cs | 33 + sdk/dotnet/CloudBuildV2/README.md | 1 + sdk/dotnet/CloudBuildV2/Repository.cs | 334 ++ sdk/dotnet/CloudFunctions/Function.cs | 2 +- sdk/dotnet/CloudFunctions/GetFunction.cs | 2 +- sdk/dotnet/CloudIdentity/GroupMembership.cs | 3 - .../Inputs/DomainMappingMetadataArgs.cs | 9 - .../Inputs/DomainMappingMetadataGetArgs.cs | 9 - .../CloudRun/Inputs/ServiceMetadataArgs.cs | 12 - .../CloudRun/Inputs/ServiceMetadataGetArgs.cs | 12 - .../Inputs/ServiceTemplateMetadataArgs.cs | 12 - .../Inputs/ServiceTemplateMetadataGetArgs.cs | 12 - .../ServiceTemplateSpecContainerArgs.cs | 5 - .../ServiceTemplateSpecContainerGetArgs.cs | 5 - .../CloudRun/Outputs/DomainMappingMetadata.cs | 8 - .../CloudRun/Outputs/ServiceMetadata.cs | 11 - .../Outputs/ServiceTemplateMetadata.cs | 11 - .../Outputs/ServiceTemplateSpecContainer.cs | 5 - sdk/dotnet/CloudRun/Service.cs | 84 +- .../JobTemplateTemplateContainerArgs.cs | 4 + .../JobTemplateTemplateContainerGetArgs.cs | 4 + ...rviceTemplateContainerLivenessProbeArgs.cs | 5 +- ...ceTemplateContainerLivenessProbeGetArgs.cs | 5 +- sdk/dotnet/CloudRunV2/Job.cs | 48 - .../Outputs/JobTemplateTemplateContainer.cs | 4 + .../ServiceTemplateContainerLivenessProbe.cs | 5 +- sdk/dotnet/CloudScheduler/Job.cs | 6 +- sdk/dotnet/Composer/GetEnvironment.cs | 3 - .../EnvironmentConfigSoftwareConfigArgs.cs | 3 + ...reConfigCloudDataLineageIntegrationArgs.cs | 23 + ...onfigCloudDataLineageIntegrationGetArgs.cs | 23 + .../EnvironmentConfigSoftwareConfigGetArgs.cs | 3 + .../EnvironmentConfigSoftwareConfig.cs | 4 + ...ftwareConfigCloudDataLineageIntegration.cs | 24 + ...ConfigCloudDataLineageIntegrationResult.cs | 24 + ...etEnvironmentConfigSoftwareConfigResult.cs | 4 + sdk/dotnet/Compute/Address.cs | 6 +- sdk/dotnet/Compute/AttachedDisk.cs | 14 - .../Compute/BackendBucketSignedUrlKey.cs | 11 - sdk/dotnet/Compute/BackendService.cs | 64 +- .../Compute/BackendServiceSignedUrlKey.cs | 11 - sdk/dotnet/Compute/Disk.cs | 97 +- .../Compute/DiskResourcePolicyAttachment.cs | 5 - sdk/dotnet/Compute/ForwardingRule.cs | 6 +- sdk/dotnet/Compute/GetBackendService.cs | 4 + sdk/dotnet/Compute/GetInstance.cs | 2 + sdk/dotnet/Compute/GetInstanceTemplate.cs | 4 - sdk/dotnet/Compute/GetResourcePolicy.cs | 38 - sdk/dotnet/Compute/GetRouterNat.cs | 4 + sdk/dotnet/Compute/GlobalAddress.cs | 51 +- sdk/dotnet/Compute/GlobalForwardingRule.cs | 120 +- .../Inputs/AutoscalarAutoscalingPolicyArgs.cs | 5 - .../AutoscalarAutoscalingPolicyGetArgs.cs | 5 - .../AutoscalarAutoscalingPolicyMetricArgs.cs | 45 - ...utoscalarAutoscalingPolicyMetricGetArgs.cs | 45 - .../Inputs/AutoscalerAutoscalingPolicyArgs.cs | 5 - .../AutoscalerAutoscalingPolicyGetArgs.cs | 5 - .../AutoscalerAutoscalingPolicyMetricArgs.cs | 45 - ...utoscalerAutoscalingPolicyMetricGetArgs.cs | 45 - .../BackendServiceCircuitBreakersArgs.cs | 4 - .../BackendServiceCircuitBreakersGetArgs.cs | 4 - .../BackendServiceLocalityLbPolicyArgs.cs | 35 + ...ServiceLocalityLbPolicyCustomPolicyArgs.cs | 39 + ...viceLocalityLbPolicyCustomPolicyGetArgs.cs | 39 + .../BackendServiceLocalityLbPolicyGetArgs.cs | 35 + ...ackendServiceLocalityLbPolicyPolicyArgs.cs | 33 + ...endServiceLocalityLbPolicyPolicyGetArgs.cs | 33 + .../Inputs/InstanceAttachedDiskArgs.cs | 2 +- .../Inputs/InstanceAttachedDiskGetArgs.cs | 2 +- .../Compute/Inputs/InstanceBootDiskArgs.cs | 2 +- .../Compute/Inputs/InstanceBootDiskGetArgs.cs | 2 +- .../Inputs/InstanceNetworkInterfaceArgs.cs | 9 - .../Inputs/InstanceNetworkInterfaceGetArgs.cs | 9 - .../Compute/Inputs/InstanceSchedulingArgs.cs | 2 +- .../Inputs/InstanceSchedulingGetArgs.cs | 2 +- .../InstanceTemplateNetworkInterfaceArgs.cs | 13 - ...InstanceTemplateNetworkInterfaceGetArgs.cs | 13 - .../Inputs/InstanceTemplateSchedulingArgs.cs | 3 - .../InstanceTemplateSchedulingGetArgs.cs | 3 - .../Inputs/NodeGroupShareSettingsArgs.cs | 40 + .../Inputs/NodeGroupShareSettingsGetArgs.cs | 40 + .../NodeGroupShareSettingsProjectMapArgs.cs | 32 + ...NodeGroupShareSettingsProjectMapGetArgs.cs | 32 + .../RegionAutoscalerAutoscalingPolicyArgs.cs | 5 - ...egionAutoscalerAutoscalingPolicyGetArgs.cs | 5 - ...onAutoscalerAutoscalingPolicyMetricArgs.cs | 45 - ...utoscalerAutoscalingPolicyMetricGetArgs.cs | 45 - ...rviceCdnPolicyNegativeCachingPolicyArgs.cs | 4 - ...ceCdnPolicyNegativeCachingPolicyGetArgs.cs | 4 - ...RegionBackendServiceCircuitBreakersArgs.cs | 4 - ...ionBackendServiceCircuitBreakersGetArgs.cs | 4 - ...gionDiskSourceSnapshotEncryptionKeyArgs.cs | 3 - ...nDiskSourceSnapshotEncryptionKeyGetArgs.cs | 3 - ...urityPolicyAdaptiveProtectionConfigArgs.cs | 6 + ...iveProtectionConfigAutoDeployConfigArgs.cs | 44 + ...ProtectionConfigAutoDeployConfigGetArgs.cs | 44 + ...tyPolicyAdaptiveProtectionConfigGetArgs.cs | 6 + sdk/dotnet/Compute/Instance.cs | 63 +- .../Compute/InstanceFromMachineImage.cs | 9 - sdk/dotnet/Compute/InstanceFromTemplate.cs | 9 +- sdk/dotnet/Compute/InstanceGroup.cs | 59 - sdk/dotnet/Compute/InstanceGroupManager.cs | 15 +- sdk/dotnet/Compute/InstanceTemplate.cs | 187 +- sdk/dotnet/Compute/MachineImage.cs | 10 - sdk/dotnet/Compute/MachineImageIamBinding.cs | 199 - sdk/dotnet/Compute/MachineImageIamMember.cs | 199 - sdk/dotnet/Compute/MachineImageIamPolicy.cs | 199 - sdk/dotnet/Compute/NodeGroup.cs | 85 +- .../Compute/OrganizationSecurityPolicy.cs | 28 - .../OrganizationSecurityPolicyAssociation.cs | 84 - .../Compute/OrganizationSecurityPolicyRule.cs | 66 - .../Outputs/AutoscalarAutoscalingPolicy.cs | 5 - .../AutoscalarAutoscalingPolicyMetric.cs | 45 - .../Outputs/AutoscalerAutoscalingPolicy.cs | 5 - .../AutoscalerAutoscalingPolicyMetric.cs | 45 - .../Outputs/BackendServiceCircuitBreakers.cs | 4 - .../Outputs/BackendServiceLocalityLbPolicy.cs | 38 + ...kendServiceLocalityLbPolicyCustomPolicy.cs | 42 + .../BackendServiceLocalityLbPolicyPolicy.cs | 34 + ...rviceLocalityLbPolicyCustomPolicyResult.cs | 32 + ...kendServiceLocalityLbPolicyPolicyResult.cs | 27 + ...GetBackendServiceLocalityLbPolicyResult.cs | 29 + ...tInstanceTemplateNetworkInterfaceResult.cs | 8 - .../Compute/Outputs/InstanceAttachedDisk.cs | 2 +- .../Compute/Outputs/InstanceBootDisk.cs | 2 +- .../Outputs/InstanceNetworkInterface.cs | 8 - .../Compute/Outputs/InstanceScheduling.cs | 2 +- .../InstanceTemplateNetworkInterface.cs | 12 - .../Outputs/InstanceTemplateScheduling.cs | 3 - .../Compute/Outputs/NodeGroupShareSettings.cs | 37 + .../NodeGroupShareSettingsProjectMap.cs | 35 + .../RegionAutoscalerAutoscalingPolicy.cs | 5 - ...RegionAutoscalerAutoscalingPolicyMetric.cs | 45 - ...ndServiceCdnPolicyNegativeCachingPolicy.cs | 4 - .../RegionBackendServiceCircuitBreakers.cs | 4 - .../RegionDiskSourceSnapshotEncryptionKey.cs | 3 - .../SecurityPolicyAdaptiveProtectionConfig.cs | 10 +- ...daptiveProtectionConfigAutoDeployConfig.cs | 49 + sdk/dotnet/Compute/PerInstanceConfig.cs | 100 - sdk/dotnet/Compute/ProjectMetadataItem.cs | 5 - sdk/dotnet/Compute/RegionBackendService.cs | 18 +- sdk/dotnet/Compute/RegionDisk.cs | 25 - .../RegionDiskResourcePolicyAttachment.cs | 5 - .../Compute/RegionInstanceGroupManager.cs | 15 +- .../Compute/RegionNetworkEndpointGroup.cs | 4 + sdk/dotnet/Compute/RegionPerInstanceConfig.cs | 106 - sdk/dotnet/Compute/RegionSslCertificate.cs | 13 - sdk/dotnet/Compute/RouterNat.cs | 21 + sdk/dotnet/Compute/SSLCertificate.cs | 13 - sdk/dotnet/Compute/SecurityPolicy.cs | 26 +- sdk/dotnet/Compute/SecurityScanConfig.cs | 12 +- sdk/dotnet/Compute/Snapshot.cs | 22 - sdk/dotnet/Compute/Subnetwork.cs | 33 +- sdk/dotnet/Compute/TargetInstance.cs | 9 +- sdk/dotnet/Compute/TargetPool.cs | 24 +- sdk/dotnet/Compute/VPNTunnel.cs | 12 - sdk/dotnet/Config/Config.cs | 35 +- sdk/dotnet/Container/AttachedCluster.cs | 55 + sdk/dotnet/Container/Cluster.cs | 177 +- sdk/dotnet/Container/GetEngineVersions.cs | 16 - .../Inputs/ClusterAddonsConfigArgs.cs | 4 +- .../Inputs/ClusterAddonsConfigGetArgs.cs | 4 +- ...AutoscalingAutoProvisioningDefaultsArgs.cs | 1 + ...oscalingAutoProvisioningDefaultsGetArgs.cs | 1 + .../Container/Inputs/ClusterNodeConfigArgs.cs | 30 +- .../Inputs/ClusterNodeConfigGetArgs.cs | 30 +- ...terNodeConfigWorkloadMetadataConfigArgs.cs | 2 +- ...NodeConfigWorkloadMetadataConfigGetArgs.cs | 2 +- .../Container/Inputs/ClusterNodePoolArgs.cs | 11 - .../Inputs/ClusterNodePoolGetArgs.cs | 11 - .../ClusterNodePoolNetworkConfigArgs.cs | 9 - .../ClusterNodePoolNetworkConfigGetArgs.cs | 9 - .../Inputs/ClusterNodePoolNodeConfigArgs.cs | 30 +- .../ClusterNodePoolNodeConfigGetArgs.cs | 30 +- ...oolNodeConfigWorkloadMetadataConfigArgs.cs | 2 +- ...NodeConfigWorkloadMetadataConfigGetArgs.cs | 2 +- .../Inputs/ClusterPrivateClusterConfigArgs.cs | 5 - .../ClusterPrivateClusterConfigGetArgs.cs | 5 - sdk/dotnet/Container/NodePool.cs | 115 +- .../Container/Outputs/ClusterAddonsConfig.cs | 4 +- ...sterAutoscalingAutoProvisioningDefaults.cs | 1 + .../Container/Outputs/ClusterNodeConfig.cs | 27 +- ...ClusterNodeConfigWorkloadMetadataConfig.cs | 2 +- .../Container/Outputs/ClusterNodePool.cs | 11 - .../Outputs/ClusterNodePoolNetworkConfig.cs | 9 - .../Outputs/ClusterNodePoolNodeConfig.cs | 27 +- ...odePoolNodeConfigWorkloadMetadataConfig.cs | 2 +- .../Outputs/ClusterPrivateClusterConfig.cs | 5 - sdk/dotnet/DataCatalog/EntryGroup.cs | 4 +- sdk/dotnet/DataCatalog/PolicyTag.cs | 8 - sdk/dotnet/DataCatalog/PolicyTagIamBinding.cs | 93 - sdk/dotnet/DataCatalog/PolicyTagIamMember.cs | 93 - sdk/dotnet/DataCatalog/PolicyTagIamPolicy.cs | 93 - sdk/dotnet/DataCatalog/Taxonomy.cs | 8 - sdk/dotnet/DataCatalog/TaxonomyIamBinding.cs | 93 - sdk/dotnet/DataCatalog/TaxonomyIamMember.cs | 93 - sdk/dotnet/DataCatalog/TaxonomyIamPolicy.cs | 93 - sdk/dotnet/DataFusion/Instance.cs | 44 +- ...reventionJobTriggerInspectJobActionArgs.cs | 14 +- ...entionJobTriggerInspectJobActionGetArgs.cs | 14 +- ...onPublishFindingsToCloudDataCatalogArgs.cs | 20 + ...ublishFindingsToCloudDataCatalogGetArgs.cs | 20 + ...nspectJobActionPublishSummaryToCsccArgs.cs | 20 + ...ectJobActionPublishSummaryToCsccGetArgs.cs | 20 + .../PreventionJobTriggerInspectJobAction.cs | 16 +- ...ActionPublishFindingsToCloudDataCatalog.cs | 21 + ...gerInspectJobActionPublishSummaryToCscc.cs | 21 + sdk/dotnet/Dataflow/FlexTemplateJob.cs | 21 +- sdk/dotnet/Dataflow/Job.cs | 18 +- sdk/dotnet/Dataproc/ClusterIAMBinding.cs | 24 - sdk/dotnet/Dataproc/ClusterIAMMember.cs | 24 - sdk/dotnet/Dataproc/ClusterIAMPolicy.cs | 24 - ...lusterClusterConfigGceClusterConfigArgs.cs | 12 + ...terClusterConfigGceClusterConfigGetArgs.cs | 12 + ...igGceClusterConfigNodeGroupAffinityArgs.cs | 26 + ...ceClusterConfigNodeGroupAffinityGetArgs.cs | 26 + ...GceClusterConfigReservationAffinityArgs.cs | 44 + ...ClusterConfigReservationAffinityGetArgs.cs | 44 + ...lusterConfigPreemptibleWorkerConfigArgs.cs | 1 + ...terConfigPreemptibleWorkerConfigGetArgs.cs | 1 + sdk/dotnet/Dataproc/JobIAMBinding.cs | 24 - sdk/dotnet/Dataproc/JobIAMMember.cs | 24 - sdk/dotnet/Dataproc/JobIAMPolicy.cs | 24 - .../ClusterClusterConfigGceClusterConfig.cs | 14 + ...ConfigGceClusterConfigNodeGroupAffinity.cs | 27 + ...nfigGceClusterConfigReservationAffinity.cs | 42 + ...terClusterConfigPreemptibleWorkerConfig.cs | 1 + ...rceHierarchyDatasetsDatasetTemplateArgs.cs | 9 + ...HierarchyDatasetsDatasetTemplateGetArgs.cs | 9 + ...gSourceHierarchyDatasetsDatasetTemplate.cs | 10 + sdk/dotnet/Datastream/Stream.cs | 173 + sdk/dotnet/DeploymentManager/Deployment.cs | 50 +- sdk/dotnet/Diagflow/Agent.cs | 33 +- sdk/dotnet/Diagflow/Intent.cs | 75 - sdk/dotnet/Dns/GetManagedZone.cs | 3 - sdk/dotnet/Dns/ManagedZone.cs | 46 +- sdk/dotnet/Dns/Policy.cs | 6 +- sdk/dotnet/Firebase/GetWebApp.cs | 6 - sdk/dotnet/Firebase/GetWebAppConfig.cs | 18 - sdk/dotnet/Firebase/Project.cs | 39 - sdk/dotnet/Firebase/ProjectLocation.cs | 52 - sdk/dotnet/Firebase/WebApp.cs | 92 - sdk/dotnet/Firestore/Document.cs | 4 +- sdk/dotnet/Folder/IAMBinding.cs | 108 +- sdk/dotnet/Folder/IAMMember.cs | 221 - sdk/dotnet/Folder/IAMPolicy.cs | 221 - sdk/dotnet/Folder/IamAuditConfig.cs | 221 - .../Folder/Inputs/IAMBindingConditionArgs.cs | 9 + .../Inputs/IAMBindingConditionGetArgs.cs | 9 + .../Folder/Outputs/IAMBindingCondition.cs | 9 + sdk/dotnet/Healthcare/DatasetIamBinding.cs | 84 - sdk/dotnet/Healthcare/DatasetIamMember.cs | 84 - sdk/dotnet/Healthcare/DatasetIamPolicy.cs | 84 - sdk/dotnet/Healthcare/DicomStore.cs | 18 +- sdk/dotnet/Healthcare/DicomStoreIamBinding.cs | 84 - sdk/dotnet/Healthcare/DicomStoreIamMember.cs | 84 - sdk/dotnet/Healthcare/DicomStoreIamPolicy.cs | 84 - sdk/dotnet/Healthcare/FhirStore.cs | 23 + sdk/dotnet/Healthcare/FhirStoreIamBinding.cs | 84 - sdk/dotnet/Healthcare/FhirStoreIamMember.cs | 84 - sdk/dotnet/Healthcare/FhirStoreIamPolicy.cs | 84 - sdk/dotnet/Healthcare/Hl7StoreIamBinding.cs | 84 - sdk/dotnet/Healthcare/Hl7StoreIamMember.cs | 84 - sdk/dotnet/Healthcare/Hl7StoreIamPolicy.cs | 84 - sdk/dotnet/Iam/AccessBoundaryPolicy.cs | 188 + sdk/dotnet/Iam/GetWorkloadIdentityPool.cs | 4 - .../Iam/GetWorkloadIdentityPoolProvider.cs | 4 - ...oundaryPolicyRuleAccessBoundaryRuleArgs.cs | 45 + ...ssBoundaryRuleAvailabilityConditionArgs.cs | 47 + ...oundaryRuleAvailabilityConditionGetArgs.cs | 47 + ...daryPolicyRuleAccessBoundaryRuleGetArgs.cs | 45 + .../Inputs/AccessBoundaryPolicyRuleArgs.cs | 33 + .../Inputs/AccessBoundaryPolicyRuleGetArgs.cs | 33 + .../Iam/Outputs/AccessBoundaryPolicyRule.cs | 36 + ...essBoundaryPolicyRuleAccessBoundaryRule.cs | 43 + ...AccessBoundaryRuleAvailabilityCondition.cs | 52 + sdk/dotnet/Iam/WorkforcePoolProvider.cs | 4 +- sdk/dotnet/Iap/Brand.cs | 45 - sdk/dotnet/Iap/Client.cs | 51 - sdk/dotnet/Kms/CryptoKey.cs | 16 - sdk/dotnet/Kms/CryptoKeyIAMBinding.cs | 175 - sdk/dotnet/Kms/CryptoKeyIAMMember.cs | 175 - sdk/dotnet/Kms/CryptoKeyIAMPolicy.cs | 175 - sdk/dotnet/Kms/KeyRing.cs | 12 - sdk/dotnet/Kms/KeyRingIAMBinding.cs | 186 - sdk/dotnet/Kms/KeyRingIAMMember.cs | 186 - sdk/dotnet/Kms/KeyRingIAMPolicy.cs | 186 - sdk/dotnet/Kms/KeyRingImportJob.cs | 15 - sdk/dotnet/Kms/SecretCiphertext.cs | 15 - .../Logging/BillingAccountBucketConfig.cs | 6 - sdk/dotnet/Logging/BillingAccountSink.cs | 9 - sdk/dotnet/Logging/FolderBucketConfig.cs | 6 - sdk/dotnet/Logging/FolderExclusion.cs | 8 - .../Logging/OrganizationBucketConfig.cs | 6 - sdk/dotnet/Logging/OrganizationExclusion.cs | 8 - sdk/dotnet/Logging/ProjectBucketConfig.cs | 6 - sdk/dotnet/Logging/ProjectExclusion.cs | 8 - sdk/dotnet/Monitoring/NotificationChannel.cs | 57 +- sdk/dotnet/Monitoring/Slo.cs | 4 +- sdk/dotnet/Monitoring/UptimeCheckConfig.cs | 11 - sdk/dotnet/Notebooks/Instance.cs | 5 + sdk/dotnet/Organizations/Folder.cs | 14 - sdk/dotnet/Organizations/IAMBinding.cs | 94 +- sdk/dotnet/Organizations/IAMCustomRole.cs | 12 - sdk/dotnet/Organizations/IAMMember.cs | 224 - sdk/dotnet/Organizations/IAMPolicy.cs | 224 - sdk/dotnet/Organizations/IamAuditConfig.cs | 73 +- .../Inputs/IAMBindingConditionArgs.cs | 9 + .../Inputs/IAMBindingConditionGetArgs.cs | 9 + .../IamAuditConfigAuditLogConfigArgs.cs | 7 +- .../IamAuditConfigAuditLogConfigGetArgs.cs | 7 +- .../Outputs/IAMBindingCondition.cs | 9 + .../Outputs/IamAuditConfigAuditLogConfig.cs | 7 +- sdk/dotnet/Organizations/Project.cs | 72 +- sdk/dotnet/OsConfig/GuestPolicies.cs | 10 - sdk/dotnet/Projects/IAMAuditConfig.cs | 221 - sdk/dotnet/Projects/IAMBinding.cs | 221 - sdk/dotnet/Projects/IAMCustomRole.cs | 12 - sdk/dotnet/Projects/IAMMember.cs | 221 - sdk/dotnet/Projects/IAMPolicy.cs | 221 - sdk/dotnet/Projects/Service.cs | 9 - sdk/dotnet/Projects/ServiceIdentity.cs | 13 - sdk/dotnet/Projects/UsageExportBucket.cs | 18 - sdk/dotnet/Provider.cs | 27 +- .../Inputs/InstancePersistenceConfigArgs.cs | 2 +- .../InstancePersistenceConfigGetArgs.cs | 2 +- sdk/dotnet/Redis/Instance.cs | 4 +- .../Outputs/InstancePersistenceConfig.cs | 2 +- .../SecretManager/GetSecretVersionAccess.cs | 169 + sdk/dotnet/SecretManager/SecretVersion.cs | 5 - .../SecurityCenter/InstanceIamBinding.cs | 2 +- .../SecurityCenter/InstanceIamMember.cs | 2 +- .../SecurityCenter/InstanceIamPolicy.cs | 2 +- sdk/dotnet/ServiceAccount/Account.cs | 12 - .../ServiceAccount/GetAccountIdToken.cs | 112 - sdk/dotnet/ServiceAccount/IAMBinding.cs | 15 +- sdk/dotnet/ServiceAccount/IAMMember.cs | 15 +- sdk/dotnet/ServiceAccount/IAMPolicy.cs | 15 +- sdk/dotnet/ServiceDirectory/Endpoint.cs | 8 - sdk/dotnet/ServiceDirectory/Namespace.cs | 9 - .../ServiceDirectory/NamespaceIamBinding.cs | 90 - .../ServiceDirectory/NamespaceIamMember.cs | 90 - .../ServiceDirectory/NamespaceIamPolicy.cs | 90 - sdk/dotnet/ServiceDirectory/Service.cs | 8 - .../ServiceDirectory/ServiceIamBinding.cs | 90 - .../ServiceDirectory/ServiceIamMember.cs | 90 - .../ServiceDirectory/ServiceIamPolicy.cs | 90 - .../ServiceUsage/ConsumerQuotaOverride.cs | 10 - sdk/dotnet/Spanner/Database.cs | 22 +- sdk/dotnet/Sql/DatabaseInstance.cs | 123 +- .../Sql/SourceRepresentationInstance.cs | 44 +- sdk/dotnet/Sql/SslCert.cs | 4 - sdk/dotnet/Sql/User.cs | 4 - sdk/dotnet/Storage/Bucket.cs | 15 +- sdk/dotnet/Storage/BucketACL.cs | 11 - sdk/dotnet/Storage/BucketAccessControl.cs | 23 - sdk/dotnet/Storage/BucketObject.cs | 6 +- .../Storage/GetProjectServiceAccount.cs | 66 - sdk/dotnet/Storage/HmacKey.cs | 18 +- sdk/dotnet/Tags/LocationTagBinding.cs | 206 + sdk/dotnet/Tpu/Node.cs | 54 - .../Inputs/WorkstationClusterConditionArgs.cs | 44 + .../WorkstationClusterConditionGetArgs.cs | 44 + ...kstationClusterPrivateClusterConfigArgs.cs | 42 + ...ationClusterPrivateClusterConfigGetArgs.cs | 42 + .../Outputs/WorkstationClusterCondition.cs | 42 + .../WorkstationClusterPrivateClusterConfig.cs | 46 + sdk/dotnet/Workstations/README.md | 1 + sdk/dotnet/Workstations/WorkstationCluster.cs | 483 +++ .../accessLevelCondition.go | 94 - sdk/go/gcp/apigateway/api.go | 8 - sdk/go/gcp/apigateway/apiConfig.go | 8 - sdk/go/gcp/apigateway/apiConfigIamBinding.go | 112 - sdk/go/gcp/apigateway/apiConfigIamMember.go | 112 - sdk/go/gcp/apigateway/apiConfigIamPolicy.go | 112 - sdk/go/gcp/apigateway/apiIamBinding.go | 112 - sdk/go/gcp/apigateway/apiIamMember.go | 112 - sdk/go/gcp/apigateway/apiIamPolicy.go | 112 - sdk/go/gcp/apigateway/gateway.go | 8 - sdk/go/gcp/apigateway/gatewayIamBinding.go | 115 - sdk/go/gcp/apigateway/gatewayIamMember.go | 115 - sdk/go/gcp/apigateway/gatewayIamPolicy.go | 115 - sdk/go/gcp/apigee/envGroup.go | 68 - sdk/go/gcp/apigee/envGroupAttachment.go | 117 - sdk/go/gcp/apigee/environment.go | 67 - sdk/go/gcp/apigee/instance.go | 308 -- sdk/go/gcp/apigee/instanceAttachment.go | 115 - sdk/go/gcp/apigee/organization.go | 2 +- sdk/go/gcp/appengine/flexibleAppVersion.go | 18 +- sdk/go/gcp/bigquery/connection.go | 15 +- sdk/go/gcp/bigquery/pulumiTypes.go | 124 +- sdk/go/gcp/bigquery/reservationAssignment.go | 35 - sdk/go/gcp/bigquery/routine.go | 112 - sdk/go/gcp/bigquery/table.go | 32 +- sdk/go/gcp/bigtable/instance.go | 42 +- sdk/go/gcp/bigtable/instanceIamBinding.go | 22 +- sdk/go/gcp/bigtable/instanceIamMember.go | 26 +- sdk/go/gcp/bigtable/instanceIamPolicy.go | 24 +- sdk/go/gcp/bigtable/table.go | 34 +- sdk/go/gcp/bigtable/tableIamBinding.go | 22 +- sdk/go/gcp/bigtable/tableIamMember.go | 26 +- sdk/go/gcp/bigtable/tableIamPolicy.go | 24 +- sdk/go/gcp/billing/subAccount.go | 55 +- sdk/go/gcp/certificatemanager/certificate.go | 40 +- sdk/go/gcp/certificatemanager/pulumiTypes.go | 4 - sdk/go/gcp/cloudbuild/getTrigger.go | 35 +- sdk/go/gcp/cloudbuild/pulumiTypes.go | 1083 ++++- sdk/go/gcp/cloudbuild/trigger.go | 104 + sdk/go/gcp/cloudbuildv2/connection.go | 465 +++ sdk/go/gcp/cloudbuildv2/init.go | 51 + sdk/go/gcp/cloudbuildv2/pulumiTypes.go | 863 ++++ sdk/go/gcp/cloudbuildv2/repository.go | 439 ++ sdk/go/gcp/cloudfunctions/function.go | 6 +- sdk/go/gcp/cloudfunctions/getFunction.go | 4 +- sdk/go/gcp/cloudidentity/groupMembership.go | 6 - sdk/go/gcp/cloudrun/pulumiTypes.go | 109 +- sdk/go/gcp/cloudrun/service.go | 99 +- sdk/go/gcp/cloudrunv2/job.go | 49 - sdk/go/gcp/cloudrunv2/pulumiTypes.go | 52 +- sdk/go/gcp/cloudscheduler/job.go | 12 +- sdk/go/gcp/composer/getEnvironment.go | 2 - sdk/go/gcp/composer/pulumiTypes.go | 308 +- sdk/go/gcp/compute/address.go | 12 +- sdk/go/gcp/compute/attachedDisk.go | 14 - .../gcp/compute/backendBucketSignedUrlKey.go | 11 - sdk/go/gcp/compute/backendService.go | 67 +- .../gcp/compute/backendServiceSignedUrlKey.go | 11 - sdk/go/gcp/compute/disk.go | 169 +- .../compute/diskResourcePolicyAttachment.go | 5 - sdk/go/gcp/compute/forwardingRule.go | 12 +- sdk/go/gcp/compute/getBackendService.go | 5 + sdk/go/gcp/compute/getInstanceTemplate.go | 10 +- sdk/go/gcp/compute/getResourcePolicy.go | 26 - sdk/go/gcp/compute/getRouterNat.go | 5 + sdk/go/gcp/compute/globalAddress.go | 76 +- sdk/go/gcp/compute/globalForwardingRule.go | 237 +- sdk/go/gcp/compute/instance.go | 126 +- .../gcp/compute/instanceFromMachineImage.go | 9 - sdk/go/gcp/compute/instanceFromTemplate.go | 18 +- sdk/go/gcp/compute/instanceGroup.go | 73 - sdk/go/gcp/compute/instanceGroupManager.go | 30 +- sdk/go/gcp/compute/instanceTemplate.go | 219 +- sdk/go/gcp/compute/machineImage.go | 10 - sdk/go/gcp/compute/machineImageIamBinding.go | 228 -- sdk/go/gcp/compute/machineImageIamMember.go | 228 -- sdk/go/gcp/compute/machineImageIamPolicy.go | 228 -- sdk/go/gcp/compute/nodeGroup.go | 94 +- .../gcp/compute/organizationSecurityPolicy.go | 34 - .../organizationSecurityPolicyAssociation.go | 78 - .../compute/organizationSecurityPolicyRule.go | 63 - sdk/go/gcp/compute/perInstanceConfig.go | 100 - sdk/go/gcp/compute/projectMetadataItem.go | 5 - sdk/go/gcp/compute/pulumiTypes.go | 2921 ++++++------- sdk/go/gcp/compute/pulumiTypes1.go | 1113 ++++- sdk/go/gcp/compute/regionBackendService.go | 36 +- sdk/go/gcp/compute/regionDisk.go | 25 - .../regionDiskResourcePolicyAttachment.go | 5 - .../gcp/compute/regionInstanceGroupManager.go | 30 +- .../gcp/compute/regionNetworkEndpointGroup.go | 4 + sdk/go/gcp/compute/regionPerInstanceConfig.go | 105 - sdk/go/gcp/compute/regionSslCertificate.go | 13 - sdk/go/gcp/compute/routerNat.go | 21 + sdk/go/gcp/compute/securityPolicy.go | 36 +- sdk/go/gcp/compute/securityScanConfig.go | 12 +- sdk/go/gcp/compute/snapshot.go | 22 - sdk/go/gcp/compute/sslcertificate.go | 13 - sdk/go/gcp/compute/subnetwork.go | 66 +- sdk/go/gcp/compute/targetInstance.go | 18 +- sdk/go/gcp/compute/targetPool.go | 48 +- sdk/go/gcp/compute/vpntunnel.go | 12 - sdk/go/gcp/config/config.go | 15 +- sdk/go/gcp/container/attachedCluster.go | 65 + sdk/go/gcp/container/cluster.go | 332 +- sdk/go/gcp/container/getEngineVersions.go | 16 +- sdk/go/gcp/container/nodePool.go | 194 +- sdk/go/gcp/container/pulumiTypes.go | 309 +- sdk/go/gcp/datacatalog/entryGroup.go | 4 +- sdk/go/gcp/datacatalog/policyTag.go | 8 - sdk/go/gcp/datacatalog/policyTagIamBinding.go | 109 - sdk/go/gcp/datacatalog/policyTagIamMember.go | 109 - sdk/go/gcp/datacatalog/policyTagIamPolicy.go | 109 - sdk/go/gcp/datacatalog/taxonomy.go | 8 - sdk/go/gcp/datacatalog/taxonomyIamBinding.go | 109 - sdk/go/gcp/datacatalog/taxonomyIamMember.go | 109 - sdk/go/gcp/datacatalog/taxonomyIamPolicy.go | 109 - sdk/go/gcp/dataflow/flexTemplateJob.go | 40 +- sdk/go/gcp/dataflow/job.go | 36 +- sdk/go/gcp/datafusion/instance.go | 78 +- sdk/go/gcp/dataloss/pulumiTypes.go | 272 +- sdk/go/gcp/dataproc/clusterIAMBinding.go | 42 +- sdk/go/gcp/dataproc/clusterIAMMember.go | 50 +- sdk/go/gcp/dataproc/clusterIAMPolicy.go | 46 +- sdk/go/gcp/dataproc/jobIAMBinding.go | 42 +- sdk/go/gcp/dataproc/jobIAMMember.go | 56 +- sdk/go/gcp/dataproc/jobIAMPolicy.go | 46 +- sdk/go/gcp/dataproc/pulumiTypes.go | 368 ++ sdk/go/gcp/datastream/pulumiTypes.go | 33 + sdk/go/gcp/datastream/stream.go | 178 + sdk/go/gcp/deploymentmanager/deployment.go | 86 +- sdk/go/gcp/diagflow/agent.go | 66 +- sdk/go/gcp/diagflow/intent.go | 91 - sdk/go/gcp/dns/getManagedZone.go | 4 +- sdk/go/gcp/dns/managedZone.go | 87 +- sdk/go/gcp/dns/policy.go | 12 +- sdk/go/gcp/firebase/getWebApp.go | 1 - sdk/go/gcp/firebase/getWebAppConfig.go | 7 - sdk/go/gcp/firebase/project.go | 44 - sdk/go/gcp/firebase/projectLocation.go | 55 - sdk/go/gcp/firebase/webApp.go | 8 - sdk/go/gcp/firestore/document.go | 6 +- sdk/go/gcp/folder/iamAuditConfig.go | 275 -- sdk/go/gcp/folder/iambinding.go | 149 +- sdk/go/gcp/folder/iammember.go | 275 -- sdk/go/gcp/folder/iampolicy.go | 275 -- sdk/go/gcp/folder/pulumiTypes.go | 20 +- sdk/go/gcp/healthcare/datasetIamBinding.go | 109 - sdk/go/gcp/healthcare/datasetIamMember.go | 109 - sdk/go/gcp/healthcare/datasetIamPolicy.go | 109 - sdk/go/gcp/healthcare/dicomStore.go | 36 +- sdk/go/gcp/healthcare/dicomStoreIamBinding.go | 109 - sdk/go/gcp/healthcare/dicomStoreIamMember.go | 109 - sdk/go/gcp/healthcare/dicomStoreIamPolicy.go | 109 - sdk/go/gcp/healthcare/fhirStore.go | 27 +- sdk/go/gcp/healthcare/fhirStoreIamBinding.go | 109 - sdk/go/gcp/healthcare/fhirStoreIamMember.go | 109 - sdk/go/gcp/healthcare/fhirStoreIamPolicy.go | 109 - sdk/go/gcp/healthcare/hl7StoreIamBinding.go | 109 - sdk/go/gcp/healthcare/hl7StoreIamMember.go | 109 - sdk/go/gcp/healthcare/hl7StoreIamPolicy.go | 109 - sdk/go/gcp/iam/accessBoundaryPolicy.go | 296 ++ sdk/go/gcp/iam/getWorkloadIdentityPool.go | 2 - .../iam/getWorkloadIdentityPoolProvider.go | 2 - sdk/go/gcp/iam/init.go | 7 + sdk/go/gcp/iam/pulumiTypes.go | 510 +++ sdk/go/gcp/iam/workforcePoolProvider.go | 4 +- sdk/go/gcp/iap/brand.go | 58 - sdk/go/gcp/iap/client.go | 65 - sdk/go/gcp/kms/cryptoKey.go | 16 - sdk/go/gcp/kms/cryptoKeyIAMBinding.go | 222 - sdk/go/gcp/kms/cryptoKeyIAMMember.go | 222 - sdk/go/gcp/kms/cryptoKeyIAMPolicy.go | 222 - sdk/go/gcp/kms/keyRing.go | 12 - sdk/go/gcp/kms/keyRingIAMBinding.go | 235 -- sdk/go/gcp/kms/keyRingIAMMember.go | 235 -- sdk/go/gcp/kms/keyRingIAMPolicy.go | 235 -- sdk/go/gcp/kms/keyRingImportJob.go | 15 - sdk/go/gcp/kms/secretCiphertext.go | 15 - .../gcp/logging/billingAccountBucketConfig.go | 6 - sdk/go/gcp/logging/billingAccountSink.go | 9 - sdk/go/gcp/logging/folderBucketConfig.go | 6 - sdk/go/gcp/logging/folderExclusion.go | 8 - .../gcp/logging/organizationBucketConfig.go | 6 - sdk/go/gcp/logging/organizationExclusion.go | 8 - sdk/go/gcp/logging/projectBucketConfig.go | 6 - sdk/go/gcp/logging/projectExclusion.go | 8 - sdk/go/gcp/monitoring/notificationChannel.go | 87 +- sdk/go/gcp/monitoring/slo.go | 4 +- sdk/go/gcp/monitoring/uptimeCheckConfig.go | 11 - sdk/go/gcp/notebooks/instance.go | 4 + sdk/go/gcp/organizations/folder.go | 14 - sdk/go/gcp/organizations/iamAuditConfig.go | 97 +- sdk/go/gcp/organizations/iambinding.go | 127 +- sdk/go/gcp/organizations/iamcustomRole.go | 13 - sdk/go/gcp/organizations/iammember.go | 275 -- sdk/go/gcp/organizations/iampolicy.go | 275 -- sdk/go/gcp/organizations/project.go | 126 +- sdk/go/gcp/organizations/pulumiTypes.go | 41 +- sdk/go/gcp/osconfig/guestPolicies.go | 10 - sdk/go/gcp/projects/iamauditConfig.go | 275 -- sdk/go/gcp/projects/iambinding.go | 275 -- sdk/go/gcp/projects/iamcustomRole.go | 13 - sdk/go/gcp/projects/iammember.go | 275 -- sdk/go/gcp/projects/iampolicy.go | 275 -- sdk/go/gcp/projects/service.go | 16 +- sdk/go/gcp/projects/serviceIdentity.go | 13 - sdk/go/gcp/projects/usageExportBucket.go | 18 - sdk/go/gcp/provider.go | 30 +- sdk/go/gcp/redis/instance.go | 4 +- sdk/go/gcp/redis/pulumiTypes.go | 8 +- .../secretmanager/getSecretVersionAccess.go | 149 + sdk/go/gcp/secretmanager/secretVersion.go | 5 - sdk/go/gcp/serviceaccount/account.go | 12 - .../gcp/serviceaccount/getAccountIdToken.go | 17 - sdk/go/gcp/serviceaccount/iambinding.go | 15 +- sdk/go/gcp/serviceaccount/iammember.go | 15 +- sdk/go/gcp/serviceaccount/iampolicy.go | 15 +- sdk/go/gcp/servicedirectory/endpoint.go | 8 - sdk/go/gcp/servicedirectory/namespace.go | 9 - .../servicedirectory/namespaceIamBinding.go | 106 - .../servicedirectory/namespaceIamMember.go | 106 - .../servicedirectory/namespaceIamPolicy.go | 106 - sdk/go/gcp/servicedirectory/service.go | 8 - .../gcp/servicedirectory/serviceIamBinding.go | 106 - .../gcp/servicedirectory/serviceIamMember.go | 106 - .../gcp/servicedirectory/serviceIamPolicy.go | 106 - .../gcp/serviceusage/consumerQuotaOverride.go | 10 - sdk/go/gcp/spanner/database.go | 34 +- sdk/go/gcp/sql/databaseInstance.go | 226 +- .../gcp/sql/sourceRepresentationInstance.go | 22 +- sdk/go/gcp/sql/sslCert.go | 4 - sdk/go/gcp/sql/user.go | 4 - sdk/go/gcp/storage/bucket.go | 30 +- sdk/go/gcp/storage/bucketACL.go | 11 - sdk/go/gcp/storage/bucketAccessControl.go | 23 - sdk/go/gcp/storage/bucketObject.go | 12 +- .../gcp/storage/getProjectServiceAccount.go | 34 - sdk/go/gcp/storage/hmacKey.go | 16 - sdk/go/gcp/tags/init.go | 7 + sdk/go/gcp/tags/locationTagBinding.go | 349 ++ sdk/go/gcp/tpu/node.go | 67 - sdk/go/gcp/workstations/init.go | 44 + sdk/go/gcp/workstations/pulumiTypes.go | 328 ++ sdk/go/gcp/workstations/workstationCluster.go | 586 +++ .../src/main/java/com/pulumi/gcp/Config.java | 15 +- .../main/java/com/pulumi/gcp/Provider.java | 24 +- .../java/com/pulumi/gcp/ProviderArgs.java | 85 +- .../AccessLevelCondition.java | 82 - .../java/com/pulumi/gcp/apigateway/Api.java | 8 - .../com/pulumi/gcp/apigateway/ApiConfig.java | 8 - .../gcp/apigateway/ApiConfigIamBinding.java | 126 - .../gcp/apigateway/ApiConfigIamMember.java | 126 - .../gcp/apigateway/ApiConfigIamPolicy.java | 126 - .../pulumi/gcp/apigateway/ApiIamBinding.java | 126 - .../pulumi/gcp/apigateway/ApiIamMember.java | 126 - .../pulumi/gcp/apigateway/ApiIamPolicy.java | 126 - .../com/pulumi/gcp/apigateway/Gateway.java | 8 - .../gcp/apigateway/GatewayIamBinding.java | 129 - .../gcp/apigateway/GatewayIamMember.java | 129 - .../gcp/apigateway/GatewayIamPolicy.java | 129 - .../java/com/pulumi/gcp/apigee/EnvGroup.java | 64 - .../pulumi/gcp/apigee/EnvGroupAttachment.java | 111 - .../com/pulumi/gcp/apigee/Environment.java | 65 - .../java/com/pulumi/gcp/apigee/Instance.java | 295 -- .../pulumi/gcp/apigee/InstanceAttachment.java | 111 - .../com/pulumi/gcp/apigee/Organization.java | 2 +- .../gcp/appengine/FlexibleAppVersion.java | 6 +- .../gcp/appengine/FlexibleAppVersionArgs.java | 12 +- .../inputs/FlexibleAppVersionState.java | 12 +- .../com/pulumi/gcp/bigquery/Connection.java | 5 +- .../pulumi/gcp/bigquery/ConnectionArgs.java | 8 +- .../gcp/bigquery/ReservationAssignment.java | 40 - .../java/com/pulumi/gcp/bigquery/Routine.java | 110 - .../java/com/pulumi/gcp/bigquery/Table.java | 16 +- .../com/pulumi/gcp/bigquery/TableArgs.java | 16 +- .../bigquery/inputs/ConnectionAzureArgs.java | 74 + .../inputs/ConnectionCloudSpannerArgs.java | 37 + .../inputs/ConnectionCloudSqlArgs.java | 39 + .../gcp/bigquery/inputs/ConnectionState.java | 8 +- .../gcp/bigquery/inputs/JobLoadArgs.java | 16 +- ...ternalDataConfigurationCsvOptionsArgs.java | 44 - .../gcp/bigquery/inputs/TableState.java | 16 +- .../gcp/bigquery/outputs/ConnectionAzure.java | 40 + .../outputs/ConnectionCloudSpanner.java | 20 + .../bigquery/outputs/ConnectionCloudSql.java | 22 + .../pulumi/gcp/bigquery/outputs/JobLoad.java | 8 +- ...leExternalDataConfigurationCsvOptions.java | 20 - .../com/pulumi/gcp/bigtable/Instance.java | 24 +- .../com/pulumi/gcp/bigtable/InstanceArgs.java | 16 +- .../gcp/bigtable/InstanceIamBinding.java | 10 - .../gcp/bigtable/InstanceIamBindingArgs.java | 24 - .../gcp/bigtable/InstanceIamMember.java | 10 - .../gcp/bigtable/InstanceIamMemberArgs.java | 24 - .../gcp/bigtable/InstanceIamPolicy.java | 10 - .../gcp/bigtable/InstanceIamPolicyArgs.java | 24 - .../java/com/pulumi/gcp/bigtable/Table.java | 14 +- .../com/pulumi/gcp/bigtable/TableArgs.java | 25 +- .../pulumi/gcp/bigtable/TableIamBinding.java | 10 - .../gcp/bigtable/TableIamBindingArgs.java | 24 - .../pulumi/gcp/bigtable/TableIamMember.java | 10 - .../gcp/bigtable/TableIamMemberArgs.java | 24 - .../pulumi/gcp/bigtable/TableIamPolicy.java | 10 - .../gcp/bigtable/TableIamPolicyArgs.java | 24 - .../inputs/InstanceIamBindingState.java | 24 - .../inputs/InstanceIamMemberState.java | 24 - .../inputs/InstanceIamPolicyState.java | 24 - .../gcp/bigtable/inputs/InstanceState.java | 16 +- .../bigtable/inputs/TableIamBindingState.java | 24 - .../bigtable/inputs/TableIamMemberState.java | 24 - .../bigtable/inputs/TableIamPolicyState.java | 24 - .../gcp/bigtable/inputs/TableState.java | 25 +- .../com/pulumi/gcp/billing/SubAccount.java | 45 - .../pulumi/gcp/billing/SubAccountArgs.java | 28 - .../gcp/billing/inputs/SubAccountState.java | 28 - .../gcp/certificatemanager/Certificate.java | 26 +- .../inputs/CertificateSelfManagedArgs.java | 4 - .../outputs/CertificateSelfManaged.java | 2 - .../com/pulumi/gcp/cloudbuild/Trigger.java | 124 + .../pulumi/gcp/cloudbuild/TriggerArgs.java | 38 + .../inputs/TriggerGitFileSourceArgs.java | 41 + .../TriggerRepositoryEventConfigArgs.java | 167 + ...rRepositoryEventConfigPullRequestArgs.java | 162 + .../TriggerRepositoryEventConfigPushArgs.java | 158 + .../inputs/TriggerSourceToBuildArgs.java | 43 + .../gcp/cloudbuild/inputs/TriggerState.java | 38 + .../outputs/GetTriggerGitFileSource.java | 12 + .../GetTriggerRepositoryEventConfig.java | 79 + ...iggerRepositoryEventConfigPullRequest.java | 71 + .../GetTriggerRepositoryEventConfigPush.java | 71 + .../cloudbuild/outputs/GetTriggerResult.java | 16 + .../outputs/GetTriggerSourceToBuild.java | 12 + .../outputs/TriggerGitFileSource.java | 22 + .../outputs/TriggerRepositoryEventConfig.java | 102 + ...iggerRepositoryEventConfigPullRequest.java | 99 + .../TriggerRepositoryEventConfigPush.java | 97 + .../outputs/TriggerSourceToBuild.java | 24 + .../pulumi/gcp/cloudbuildv2/Connection.java | 344 ++ .../gcp/cloudbuildv2/ConnectionArgs.java | 310 ++ .../pulumi/gcp/cloudbuildv2/Repository.java | 307 ++ .../gcp/cloudbuildv2/RepositoryArgs.java | 271 ++ .../inputs/ConnectionGithubConfigArgs.java | 121 + ...nGithubConfigAuthorizerCredentialArgs.java | 120 + .../ConnectionGithubEnterpriseConfigArgs.java | 345 ++ ...priseConfigServiceDirectoryConfigArgs.java | 82 + .../ConnectionInstallationStateArgs.java | 97 + .../cloudbuildv2/inputs/ConnectionState.java | 506 +++ .../cloudbuildv2/inputs/RepositoryState.java | 380 ++ .../outputs/ConnectionGithubConfig.java | 77 + ...ctionGithubConfigAuthorizerCredential.java | 76 + .../ConnectionGithubEnterpriseConfig.java | 198 + ...nterpriseConfigServiceDirectoryConfig.java | 54 + .../outputs/ConnectionInstallationState.java | 72 + .../pulumi/gcp/cloudfunctions/Function.java | 6 +- .../outputs/GetFunctionResult.java | 4 +- .../gcp/cloudidentity/GroupMembership.java | 2 - .../cloudidentity/GroupMembershipArgs.java | 4 - .../inputs/GroupMembershipState.java | 4 - .../java/com/pulumi/gcp/cloudrun/Service.java | 86 +- .../inputs/DomainMappingMetadataArgs.java | 40 - .../cloudrun/inputs/ServiceMetadataArgs.java | 52 - .../inputs/ServiceTemplateMetadataArgs.java | 52 - .../ServiceTemplateSpecContainerArgs.java | 28 - .../outputs/DomainMappingMetadata.java | 18 - .../gcp/cloudrun/outputs/ServiceMetadata.java | 24 - .../outputs/ServiceTemplateMetadata.java | 24 - .../outputs/ServiceTemplateSpecContainer.java | 12 - .../java/com/pulumi/gcp/cloudrunv2/Job.java | 53 - .../JobTemplateTemplateContainerArgs.java | 60 +- ...iceTemplateContainerLivenessProbeArgs.java | 36 +- .../outputs/JobTemplateTemplateContainer.java | 32 +- ...ServiceTemplateContainerLivenessProbe.java | 18 +- .../com/pulumi/gcp/cloudscheduler/Job.java | 4 +- .../pulumi/gcp/cloudscheduler/JobArgs.java | 8 +- .../gcp/cloudscheduler/inputs/JobState.java | 8 +- .../EnvironmentConfigSoftwareConfigArgs.java | 18 + ...ConfigCloudDataLineageIntegrationArgs.java | 62 + .../EnvironmentConfigSoftwareConfig.java | 13 + ...wareConfigCloudDataLineageIntegration.java | 46 + .../GetEnvironmentConfigSoftwareConfig.java | 17 + ...wareConfigCloudDataLineageIntegration.java | 46 + .../outputs/GetEnvironmentResult.java | 8 - .../java/com/pulumi/gcp/compute/Address.java | 4 +- .../com/pulumi/gcp/compute/AddressArgs.java | 8 +- .../com/pulumi/gcp/compute/AttachedDisk.java | 14 - .../compute/BackendBucketSignedUrlKey.java | 11 - .../pulumi/gcp/compute/BackendService.java | 43 +- .../gcp/compute/BackendServiceArgs.java | 78 + .../compute/BackendServiceSignedUrlKey.java | 11 - .../pulumi/gcp/compute/ComputeFunctions.java | 132 - .../java/com/pulumi/gcp/compute/Disk.java | 73 +- .../java/com/pulumi/gcp/compute/DiskArgs.java | 104 +- .../compute/DiskResourcePolicyAttachment.java | 5 - .../pulumi/gcp/compute/ForwardingRule.java | 4 +- .../gcp/compute/ForwardingRuleArgs.java | 8 +- .../com/pulumi/gcp/compute/GlobalAddress.java | 57 +- .../pulumi/gcp/compute/GlobalAddressArgs.java | 28 +- .../gcp/compute/GlobalForwardingRule.java | 81 +- .../gcp/compute/GlobalForwardingRuleArgs.java | 156 +- .../java/com/pulumi/gcp/compute/Instance.java | 42 +- .../com/pulumi/gcp/compute/InstanceArgs.java | 87 +- .../gcp/compute/InstanceFromMachineImage.java | 9 - .../gcp/compute/InstanceFromTemplate.java | 6 +- .../gcp/compute/InstanceFromTemplateArgs.java | 15 +- .../com/pulumi/gcp/compute/InstanceGroup.java | 167 - .../gcp/compute/InstanceGroupManager.java | 10 +- .../gcp/compute/InstanceGroupManagerArgs.java | 20 +- .../pulumi/gcp/compute/InstanceTemplate.java | 368 +- .../gcp/compute/InstanceTemplateArgs.java | 12 +- .../com/pulumi/gcp/compute/MachineImage.java | 10 - .../gcp/compute/MachineImageIamBinding.java | 258 -- .../gcp/compute/MachineImageIamMember.java | 258 -- .../gcp/compute/MachineImageIamPolicy.java | 258 -- .../com/pulumi/gcp/compute/NodeGroup.java | 92 +- .../com/pulumi/gcp/compute/NodeGroupArgs.java | 42 + .../compute/OrganizationSecurityPolicy.java | 41 - ...OrganizationSecurityPolicyAssociation.java | 88 - .../OrganizationSecurityPolicyRule.java | 70 - .../pulumi/gcp/compute/PerInstanceConfig.java | 99 - .../gcp/compute/ProjectMetadataItem.java | 5 - .../gcp/compute/RegionBackendService.java | 12 +- .../gcp/compute/RegionBackendServiceArgs.java | 24 +- .../com/pulumi/gcp/compute/RegionDisk.java | 25 - .../RegionDiskResourcePolicyAttachment.java | 5 - .../compute/RegionInstanceGroupManager.java | 10 +- .../RegionInstanceGroupManagerArgs.java | 20 +- .../compute/RegionNetworkEndpointGroup.java | 4 + .../gcp/compute/RegionPerInstanceConfig.java | 105 - .../gcp/compute/RegionSslCertificate.java | 13 - .../com/pulumi/gcp/compute/RouterNat.java | 16 + .../com/pulumi/gcp/compute/RouterNatArgs.java | 41 + .../pulumi/gcp/compute/SSLCertificate.java | 13 - .../pulumi/gcp/compute/SecurityPolicy.java | 26 +- .../gcp/compute/SecurityScanConfig.java | 12 +- .../java/com/pulumi/gcp/compute/Snapshot.java | 22 - .../com/pulumi/gcp/compute/Subnetwork.java | 22 +- .../pulumi/gcp/compute/SubnetworkArgs.java | 55 +- .../pulumi/gcp/compute/TargetInstance.java | 6 +- .../gcp/compute/TargetInstanceArgs.java | 12 +- .../com/pulumi/gcp/compute/TargetPool.java | 16 +- .../pulumi/gcp/compute/TargetPoolArgs.java | 40 +- .../com/pulumi/gcp/compute/VPNTunnel.java | 12 - .../gcp/compute/inputs/AddressState.java | 8 +- .../AutoscalarAutoscalingPolicyArgs.java | 28 - ...AutoscalarAutoscalingPolicyMetricArgs.java | 196 - .../AutoscalerAutoscalingPolicyArgs.java | 28 - ...AutoscalerAutoscalingPolicyMetricArgs.java | 196 - .../BackendServiceCircuitBreakersArgs.java | 24 - .../BackendServiceLocalityLbPolicyArgs.java | 133 + ...rviceLocalityLbPolicyCustomPolicyArgs.java | 149 + ...kendServiceLocalityLbPolicyPolicyArgs.java | 110 + .../compute/inputs/BackendServiceState.java | 78 + .../pulumi/gcp/compute/inputs/DiskState.java | 104 +- .../compute/inputs/ForwardingRuleState.java | 8 +- .../compute/inputs/GlobalAddressState.java | 28 +- .../inputs/GlobalForwardingRuleState.java | 156 +- .../inputs/InstanceAttachedDiskArgs.java | 8 +- .../compute/inputs/InstanceBootDiskArgs.java | 8 +- .../inputs/InstanceFromTemplateState.java | 15 +- .../inputs/InstanceGroupManagerState.java | 20 +- .../inputs/InstanceNetworkInterfaceArgs.java | 51 - .../gcp/compute/inputs/InstanceState.java | 87 +- .../InstanceTemplateNetworkInterfaceArgs.java | 75 - .../InstanceTemplateSchedulingArgs.java | 20 - .../compute/inputs/InstanceTemplateState.java | 12 +- .../inputs/NodeGroupShareSettingsArgs.java | 142 + .../NodeGroupShareSettingsProjectMapArgs.java | 120 + .../gcp/compute/inputs/NodeGroupState.java | 42 + ...RegionAutoscalerAutoscalingPolicyArgs.java | 28 - ...AutoscalerAutoscalingPolicyMetricArgs.java | 196 - ...iceCdnPolicyNegativeCachingPolicyArgs.java | 24 - ...gionBackendServiceCircuitBreakersArgs.java | 24 - .../inputs/RegionBackendServiceState.java | 24 +- ...onDiskSourceSnapshotEncryptionKeyArgs.java | 20 - .../RegionInstanceGroupManagerState.java | 20 +- .../gcp/compute/inputs/RouterNatState.java | 41 + ...ityPolicyAdaptiveProtectionConfigArgs.java | 38 + ...eProtectionConfigAutoDeployConfigArgs.java | 195 + .../compute/inputs/SecurityPolicyState.java | 8 +- .../gcp/compute/inputs/SubnetworkState.java | 55 +- .../compute/inputs/TargetInstanceState.java | 12 +- .../gcp/compute/inputs/TargetPoolState.java | 40 +- .../outputs/AutoscalarAutoscalingPolicy.java | 12 - .../AutoscalarAutoscalingPolicyMetric.java | 94 - .../outputs/AutoscalerAutoscalingPolicy.java | 12 - .../AutoscalerAutoscalingPolicyMetric.java | 94 - .../BackendServiceCircuitBreakers.java | 10 - .../BackendServiceLocalityLbPolicy.java | 83 + ...ndServiceLocalityLbPolicyCustomPolicy.java | 90 + .../BackendServiceLocalityLbPolicyPolicy.java | 68 + .../GetBackendServiceLocalityLbPolicy.java | 66 + ...ndServiceLocalityLbPolicyCustomPolicy.java | 66 + ...tBackendServiceLocalityLbPolicyPolicy.java | 54 + .../outputs/GetBackendServiceResult.java | 16 + .../GetInstanceTemplateNetworkInterface.java | 18 - .../outputs/GetInstanceTemplateResult.java | 10 - .../compute/outputs/GetRouterNatResult.java | 12 + .../compute/outputs/InstanceAttachedDisk.java | 4 +- .../gcp/compute/outputs/InstanceBootDisk.java | 4 +- .../outputs/InstanceNetworkInterface.java | 18 - .../InstanceTemplateNetworkInterface.java | 28 - .../outputs/InstanceTemplateScheduling.java | 8 - .../outputs/NodeGroupShareSettings.java | 84 + .../NodeGroupShareSettingsProjectMap.java | 74 + .../RegionAutoscalerAutoscalingPolicy.java | 12 - ...gionAutoscalerAutoscalingPolicyMetric.java | 94 - ...ServiceCdnPolicyNegativeCachingPolicy.java | 10 - .../RegionBackendServiceCircuitBreakers.java | 10 - ...RegionDiskSourceSnapshotEncryptionKey.java | 8 - ...ecurityPolicyAdaptiveProtectionConfig.java | 21 + ...ptiveProtectionConfigAutoDeployConfig.java | 117 + .../pulumi/gcp/container/AttachedCluster.java | 67 + .../gcp/container/AttachedClusterArgs.java | 37 + .../com/pulumi/gcp/container/Cluster.java | 145 +- .../com/pulumi/gcp/container/ClusterArgs.java | 198 +- .../com/pulumi/gcp/container/NodePool.java | 165 +- .../pulumi/gcp/container/NodePoolArgs.java | 92 +- .../inputs/AttachedClusterState.java | 37 + .../inputs/ClusterAddonsConfigArgs.java | 16 +- ...toscalingAutoProvisioningDefaultsArgs.java | 10 +- .../inputs/ClusterNodeConfigArgs.java | 160 +- ...rNodeConfigWorkloadMetadataConfigArgs.java | 8 +- .../container/inputs/ClusterNodePoolArgs.java | 60 - .../ClusterNodePoolNetworkConfigArgs.java | 60 - .../inputs/ClusterNodePoolNodeConfigArgs.java | 160 +- ...lNodeConfigWorkloadMetadataConfigArgs.java | 8 +- .../ClusterPrivateClusterConfigArgs.java | 28 - .../gcp/container/inputs/ClusterState.java | 198 +- .../inputs/GetEngineVersionsArgs.java | 40 - .../inputs/GetEngineVersionsPlainArgs.java | 29 - .../gcp/container/inputs/NodePoolState.java | 92 +- .../outputs/ClusterAddonsConfig.java | 8 +- ...erAutoscalingAutoProvisioningDefaults.java | 6 +- .../container/outputs/ClusterNodeConfig.java | 62 +- ...usterNodeConfigWorkloadMetadataConfig.java | 4 +- .../container/outputs/ClusterNodePool.java | 26 - .../outputs/ClusterNodePoolNetworkConfig.java | 24 - .../outputs/ClusterNodePoolNodeConfig.java | 62 +- ...ePoolNodeConfigWorkloadMetadataConfig.java | 4 +- .../outputs/ClusterPrivateClusterConfig.java | 12 - .../pulumi/gcp/datacatalog/EntryGroup.java | 4 +- .../com/pulumi/gcp/datacatalog/PolicyTag.java | 8 - .../gcp/datacatalog/PolicyTagIamBinding.java | 123 - .../gcp/datacatalog/PolicyTagIamMember.java | 123 - .../gcp/datacatalog/PolicyTagIamPolicy.java | 123 - .../com/pulumi/gcp/datacatalog/Taxonomy.java | 8 - .../gcp/datacatalog/TaxonomyIamBinding.java | 123 - .../gcp/datacatalog/TaxonomyIamMember.java | 123 - .../gcp/datacatalog/TaxonomyIamPolicy.java | 123 - .../pulumi/gcp/dataflow/FlexTemplateJob.java | 16 +- .../gcp/dataflow/FlexTemplateJobArgs.java | 36 +- .../java/com/pulumi/gcp/dataflow/Job.java | 12 +- .../java/com/pulumi/gcp/dataflow/JobArgs.java | 24 +- .../dataflow/inputs/FlexTemplateJobState.java | 36 +- .../pulumi/gcp/dataflow/inputs/JobState.java | 24 +- .../com/pulumi/gcp/datafusion/Instance.java | 38 +- .../pulumi/gcp/datafusion/InstanceArgs.java | 24 +- .../gcp/datafusion/inputs/InstanceState.java | 72 +- ...ventionJobTriggerInspectJobActionArgs.java | 84 +- ...PublishFindingsToCloudDataCatalogArgs.java | 28 + ...pectJobActionPublishSummaryToCsccArgs.java | 28 + .../PreventionJobTriggerInspectJobAction.java | 46 +- ...tionPublishFindingsToCloudDataCatalog.java | 32 + ...rInspectJobActionPublishSummaryToCscc.java | 32 + .../gcp/dataproc/ClusterIAMBinding.java | 20 - .../gcp/dataproc/ClusterIAMBindingArgs.java | 48 - .../pulumi/gcp/dataproc/ClusterIAMMember.java | 20 - .../gcp/dataproc/ClusterIAMMemberArgs.java | 48 - .../pulumi/gcp/dataproc/ClusterIAMPolicy.java | 20 - .../gcp/dataproc/ClusterIAMPolicyArgs.java | 48 - .../pulumi/gcp/dataproc/JobIAMBinding.java | 20 - .../gcp/dataproc/JobIAMBindingArgs.java | 48 - .../com/pulumi/gcp/dataproc/JobIAMMember.java | 20 - .../pulumi/gcp/dataproc/JobIAMMemberArgs.java | 48 - .../com/pulumi/gcp/dataproc/JobIAMPolicy.java | 20 - .../pulumi/gcp/dataproc/JobIAMPolicyArgs.java | 48 - ...sterClusterConfigGceClusterConfigArgs.java | 76 + ...GceClusterConfigNodeGroupAffinityArgs.java | 82 + ...eClusterConfigReservationAffinityArgs.java | 168 + ...sterConfigPreemptibleWorkerConfigArgs.java | 4 + .../inputs/ClusterIAMBindingState.java | 48 - .../inputs/ClusterIAMMemberState.java | 48 - .../inputs/ClusterIAMPolicyState.java | 48 - .../dataproc/inputs/JobIAMBindingState.java | 48 - .../dataproc/inputs/JobIAMMemberState.java | 48 - .../dataproc/inputs/JobIAMPolicyState.java | 48 - .../ClusterClusterConfigGceClusterConfig.java | 42 + ...nfigGceClusterConfigNodeGroupAffinity.java | 54 + ...igGceClusterConfigReservationAffinity.java | 100 + ...rClusterConfigPreemptibleWorkerConfig.java | 2 + .../com/pulumi/gcp/datastream/Stream.java | 180 + .../com/pulumi/gcp/datastream/StreamArgs.java | 41 + ...eHierarchyDatasetsDatasetTemplateArgs.java | 49 + .../gcp/datastream/inputs/StreamState.java | 41 + ...ourceHierarchyDatasetsDatasetTemplate.java | 26 + .../gcp/deploymentmanager/Deployment.java | 38 +- .../gcp/deploymentmanager/DeploymentArgs.java | 48 +- .../inputs/DeploymentState.java | 48 +- .../java/com/pulumi/gcp/diagflow/Agent.java | 22 +- .../com/pulumi/gcp/diagflow/AgentArgs.java | 44 +- .../java/com/pulumi/gcp/diagflow/Intent.java | 82 - .../gcp/diagflow/inputs/AgentState.java | 44 +- .../java/com/pulumi/gcp/dns/ManagedZone.java | 34 +- .../com/pulumi/gcp/dns/ManagedZoneArgs.java | 48 +- .../main/java/com/pulumi/gcp/dns/Policy.java | 4 +- .../java/com/pulumi/gcp/dns/PolicyArgs.java | 8 +- .../gcp/dns/inputs/ManagedZoneState.java | 48 +- .../pulumi/gcp/dns/inputs/PolicyState.java | 8 +- .../gcp/dns/outputs/GetManagedZoneResult.java | 8 - .../gcp/firebase/FirebaseFunctions.java | 56 - .../java/com/pulumi/gcp/firebase/Project.java | 52 - .../pulumi/gcp/firebase/ProjectLocation.java | 65 - .../java/com/pulumi/gcp/firebase/WebApp.java | 102 - .../com/pulumi/gcp/firestore/Document.java | 4 +- .../com/pulumi/gcp/folder/IAMBinding.java | 106 +- .../com/pulumi/gcp/folder/IAMBindingArgs.java | 88 +- .../java/com/pulumi/gcp/folder/IAMMember.java | 287 -- .../java/com/pulumi/gcp/folder/IAMPolicy.java | 287 -- .../com/pulumi/gcp/folder/IamAuditConfig.java | 287 -- .../inputs/IAMBindingConditionArgs.java | 60 + .../gcp/folder/inputs/IAMBindingState.java | 88 +- .../folder/outputs/IAMBindingCondition.java | 24 + .../gcp/healthcare/DatasetIamBinding.java | 114 - .../gcp/healthcare/DatasetIamMember.java | 114 - .../gcp/healthcare/DatasetIamPolicy.java | 114 - .../com/pulumi/gcp/healthcare/DicomStore.java | 12 +- .../pulumi/gcp/healthcare/DicomStoreArgs.java | 30 +- .../gcp/healthcare/DicomStoreIamBinding.java | 114 - .../gcp/healthcare/DicomStoreIamMember.java | 114 - .../gcp/healthcare/DicomStoreIamPolicy.java | 114 - .../com/pulumi/gcp/healthcare/FhirStore.java | 27 +- .../gcp/healthcare/FhirStoreIamBinding.java | 114 - .../gcp/healthcare/FhirStoreIamMember.java | 114 - .../gcp/healthcare/FhirStoreIamPolicy.java | 114 - .../gcp/healthcare/Hl7StoreIamBinding.java | 114 - .../gcp/healthcare/Hl7StoreIamMember.java | 114 - .../gcp/healthcare/Hl7StoreIamPolicy.java | 114 - .../healthcare/inputs/DicomStoreState.java | 30 +- .../pulumi/gcp/iam/AccessBoundaryPolicy.java | 158 + .../gcp/iam/AccessBoundaryPolicyArgs.java | 213 + .../java/com/pulumi/gcp/iam/IamFunctions.java | 16 - .../pulumi/gcp/iam/WorkforcePoolProvider.java | 4 +- ...ndaryPolicyRuleAccessBoundaryRuleArgs.java | 173 + ...BoundaryRuleAvailabilityConditionArgs.java | 207 + .../inputs/AccessBoundaryPolicyRuleArgs.java | 125 + .../iam/inputs/AccessBoundaryPolicyState.java | 248 ++ .../iam/outputs/AccessBoundaryPolicyRule.java | 79 + ...sBoundaryPolicyRuleAccessBoundaryRule.java | 103 + ...cessBoundaryRuleAvailabilityCondition.java | 122 + .../main/java/com/pulumi/gcp/iap/Brand.java | 60 - .../main/java/com/pulumi/gcp/iap/Client.java | 67 - .../java/com/pulumi/gcp/kms/CryptoKey.java | 16 - .../pulumi/gcp/kms/CryptoKeyIAMBinding.java | 235 -- .../pulumi/gcp/kms/CryptoKeyIAMMember.java | 235 -- .../pulumi/gcp/kms/CryptoKeyIAMPolicy.java | 235 -- .../main/java/com/pulumi/gcp/kms/KeyRing.java | 12 - .../com/pulumi/gcp/kms/KeyRingIAMBinding.java | 247 -- .../com/pulumi/gcp/kms/KeyRingIAMMember.java | 247 -- .../com/pulumi/gcp/kms/KeyRingIAMPolicy.java | 247 -- .../com/pulumi/gcp/kms/KeyRingImportJob.java | 15 - .../com/pulumi/gcp/kms/SecretCiphertext.java | 15 - .../logging/BillingAccountBucketConfig.java | 6 - .../gcp/logging/BillingAccountSink.java | 9 - .../gcp/logging/FolderBucketConfig.java | 6 - .../pulumi/gcp/logging/FolderExclusion.java | 8 - .../gcp/logging/OrganizationBucketConfig.java | 6 - .../gcp/logging/OrganizationExclusion.java | 8 - .../gcp/logging/ProjectBucketConfig.java | 6 - .../pulumi/gcp/logging/ProjectExclusion.java | 8 - .../gcp/monitoring/NotificationChannel.java | 47 +- .../monitoring/NotificationChannelArgs.java | 40 +- .../java/com/pulumi/gcp/monitoring/Slo.java | 4 +- .../gcp/monitoring/UptimeCheckConfig.java | 11 - .../inputs/NotificationChannelState.java | 40 +- .../com/pulumi/gcp/notebooks/Instance.java | 6 +- .../com/pulumi/gcp/organizations/Folder.java | 14 - .../pulumi/gcp/organizations/IAMBinding.java | 93 +- .../gcp/organizations/IAMBindingArgs.java | 72 +- .../gcp/organizations/IAMCustomRole.java | 12 - .../pulumi/gcp/organizations/IAMMember.java | 290 -- .../pulumi/gcp/organizations/IAMPolicy.java | 290 -- .../gcp/organizations/IamAuditConfig.java | 74 +- .../gcp/organizations/IamAuditConfigArgs.java | 16 +- .../com/pulumi/gcp/organizations/Project.java | 54 +- .../pulumi/gcp/organizations/ProjectArgs.java | 72 +- .../inputs/IAMBindingConditionArgs.java | 60 + .../organizations/inputs/IAMBindingState.java | 74 +- .../IamAuditConfigAuditLogConfigArgs.java | 35 +- .../inputs/IamAuditConfigState.java | 24 +- .../organizations/inputs/ProjectState.java | 72 +- .../outputs/IAMBindingCondition.java | 24 + .../outputs/IamAuditConfigAuditLogConfig.java | 14 +- .../pulumi/gcp/osconfig/GuestPolicies.java | 10 - .../pulumi/gcp/projects/IAMAuditConfig.java | 287 -- .../com/pulumi/gcp/projects/IAMBinding.java | 287 -- .../pulumi/gcp/projects/IAMCustomRole.java | 12 - .../com/pulumi/gcp/projects/IAMMember.java | 287 -- .../com/pulumi/gcp/projects/IAMPolicy.java | 287 -- .../java/com/pulumi/gcp/projects/Service.java | 8 - .../com/pulumi/gcp/projects/ServiceArgs.java | 20 - .../pulumi/gcp/projects/ServiceIdentity.java | 13 - .../gcp/projects/UsageExportBucket.java | 18 - .../gcp/projects/inputs/ServiceState.java | 20 - .../java/com/pulumi/gcp/redis/Instance.java | 4 +- .../inputs/InstancePersistenceConfigArgs.java | 8 +- .../outputs/InstancePersistenceConfig.java | 4 +- .../gcp/secretmanager/SecretVersion.java | 5 - .../secretmanager/SecretmanagerFunctions.java | 151 + .../inputs/GetSecretVersionAccessArgs.java | 166 + .../GetSecretVersionAccessPlainArgs.java | 133 + .../outputs/GetSecretVersionAccessResult.java | 132 + .../securitycenter/InstanceIamBinding.java | 2 +- .../gcp/securitycenter/InstanceIamMember.java | 2 +- .../gcp/securitycenter/InstanceIamPolicy.java | 2 +- .../pulumi/gcp/serviceAccount/Account.java | 12 - .../pulumi/gcp/serviceAccount/IAMBinding.java | 15 +- .../pulumi/gcp/serviceAccount/IAMMember.java | 15 +- .../pulumi/gcp/serviceAccount/IAMPolicy.java | 15 +- .../ServiceAccountFunctions.java | 72 - .../pulumi/gcp/servicedirectory/Endpoint.java | 8 - .../gcp/servicedirectory/Namespace.java | 9 - .../servicedirectory/NamespaceIamBinding.java | 120 - .../servicedirectory/NamespaceIamMember.java | 120 - .../servicedirectory/NamespaceIamPolicy.java | 120 - .../pulumi/gcp/servicedirectory/Service.java | 8 - .../servicedirectory/ServiceIamBinding.java | 120 - .../servicedirectory/ServiceIamMember.java | 120 - .../servicedirectory/ServiceIamPolicy.java | 120 - .../serviceusage/ConsumerQuotaOverride.java | 10 - .../java/com/pulumi/gcp/spanner/Database.java | 18 +- .../com/pulumi/gcp/spanner/DatabaseArgs.java | 16 +- .../gcp/spanner/inputs/DatabaseState.java | 16 +- .../com/pulumi/gcp/sql/DatabaseInstance.java | 96 +- .../pulumi/gcp/sql/DatabaseInstanceArgs.java | 140 +- .../gcp/sql/SourceRepresentationInstance.java | 15 +- .../sql/SourceRepresentationInstanceArgs.java | 4 + .../main/java/com/pulumi/gcp/sql/SslCert.java | 4 - .../main/java/com/pulumi/gcp/sql/User.java | 4 - .../gcp/sql/inputs/DatabaseInstanceState.java | 176 +- .../SourceRepresentationInstanceState.java | 4 + .../java/com/pulumi/gcp/storage/Bucket.java | 10 +- .../com/pulumi/gcp/storage/BucketACL.java | 11 - .../gcp/storage/BucketAccessControl.java | 23 - .../com/pulumi/gcp/storage/BucketArgs.java | 20 +- .../com/pulumi/gcp/storage/BucketObject.java | 4 +- .../pulumi/gcp/storage/BucketObjectArgs.java | 8 +- .../java/com/pulumi/gcp/storage/HmacKey.java | 16 - .../pulumi/gcp/storage/StorageFunctions.java | 198 - .../gcp/storage/inputs/BucketObjectState.java | 8 +- .../gcp/storage/inputs/BucketState.java | 20 +- .../pulumi/gcp/tags/LocationTagBinding.java | 207 + .../gcp/tags/LocationTagBindingArgs.java | 159 + .../tags/inputs/LocationTagBindingState.java | 194 + .../main/java/com/pulumi/gcp/tpu/Node.java | 66 - .../gcp/workstations/WorkstationCluster.java | 443 ++ .../workstations/WorkstationClusterArgs.java | 400 ++ .../WorkstationClusterConditionArgs.java | 171 + ...tationClusterPrivateClusterConfigArgs.java | 175 + .../inputs/WorkstationClusterState.java | 645 +++ .../outputs/WorkstationClusterCondition.java | 100 + ...orkstationClusterPrivateClusterConfig.java | 105 + .../accessLevelCondition.ts | 53 - sdk/nodejs/apigateway/api.ts | 8 - sdk/nodejs/apigateway/apiConfig.ts | 8 - sdk/nodejs/apigateway/apiConfigIamBinding.ts | 63 - sdk/nodejs/apigateway/apiConfigIamMember.ts | 63 - sdk/nodejs/apigateway/apiConfigIamPolicy.ts | 63 - sdk/nodejs/apigateway/apiIamBinding.ts | 63 - sdk/nodejs/apigateway/apiIamMember.ts | 63 - sdk/nodejs/apigateway/apiIamPolicy.ts | 63 - sdk/nodejs/apigateway/gateway.ts | 8 - sdk/nodejs/apigateway/gatewayIamBinding.ts | 66 - sdk/nodejs/apigateway/gatewayIamMember.ts | 66 - sdk/nodejs/apigateway/gatewayIamPolicy.ts | 66 - sdk/nodejs/apigee/envGroup.ts | 31 - sdk/nodejs/apigee/envGroupAttachment.ts | 64 - sdk/nodejs/apigee/environment.ts | 32 - sdk/nodejs/apigee/instance.ts | 148 - sdk/nodejs/apigee/instanceAttachment.ts | 64 - sdk/nodejs/apigee/organization.ts | 2 +- sdk/nodejs/appengine/flexibleAppVersion.ts | 9 +- sdk/nodejs/bigquery/connection.ts | 7 +- sdk/nodejs/bigquery/reservationAssignment.ts | 17 - sdk/nodejs/bigquery/routine.ts | 56 - sdk/nodejs/bigquery/table.ts | 20 +- sdk/nodejs/bigtable/instance.ts | 28 +- sdk/nodejs/bigtable/instanceIamBinding.ts | 12 - sdk/nodejs/bigtable/instanceIamMember.ts | 12 - sdk/nodejs/bigtable/instanceIamPolicy.ts | 12 - sdk/nodejs/bigtable/table.ts | 19 +- sdk/nodejs/bigtable/tableIamBinding.ts | 12 - sdk/nodejs/bigtable/tableIamMember.ts | 12 - sdk/nodejs/bigtable/tableIamPolicy.ts | 12 - sdk/nodejs/billing/subAccount.ts | 29 - sdk/nodejs/certificatemanager/certificate.ts | 23 +- sdk/nodejs/cloudbuild/getTrigger.ts | 1 + sdk/nodejs/cloudbuild/trigger.ts | 72 + sdk/nodejs/cloudbuildv2/connection.ts | 286 ++ sdk/nodejs/cloudbuildv2/index.ts | 33 + sdk/nodejs/cloudbuildv2/repository.ts | 260 ++ sdk/nodejs/cloudfunctions/function.ts | 2 +- sdk/nodejs/cloudfunctions/getFunction.ts | 2 +- sdk/nodejs/cloudidentity/groupMembership.ts | 3 - sdk/nodejs/cloudrun/service.ts | 50 +- sdk/nodejs/cloudrunv2/job.ts | 32 - sdk/nodejs/cloudscheduler/job.ts | 6 +- sdk/nodejs/composer/getEnvironment.ts | 3 - sdk/nodejs/compute/address.ts | 6 +- sdk/nodejs/compute/attachedDisk.ts | 14 - .../compute/backendBucketSignedUrlKey.ts | 11 - sdk/nodejs/compute/backendService.ts | 48 +- .../compute/backendServiceSignedUrlKey.ts | 11 - sdk/nodejs/compute/disk.ts | 97 +- .../compute/diskResourcePolicyAttachment.ts | 5 - sdk/nodejs/compute/forwardingRule.ts | 6 +- sdk/nodejs/compute/getBackendService.ts | 1 + sdk/nodejs/compute/getInstanceTemplate.ts | 4 - sdk/nodejs/compute/getResourcePolicy.ts | 26 - sdk/nodejs/compute/getRouterNat.ts | 1 + sdk/nodejs/compute/globalAddress.ts | 39 +- sdk/nodejs/compute/globalForwardingRule.ts | 120 +- sdk/nodejs/compute/instance.ts | 63 +- .../compute/instanceFromMachineImage.ts | 9 - sdk/nodejs/compute/instanceFromTemplate.ts | 9 +- sdk/nodejs/compute/instanceGroup.ts | 43 - sdk/nodejs/compute/instanceGroupManager.ts | 15 +- sdk/nodejs/compute/instanceTemplate.ts | 140 +- sdk/nodejs/compute/machineImage.ts | 10 - sdk/nodejs/compute/machineImageIamBinding.ts | 130 - sdk/nodejs/compute/machineImageIamMember.ts | 130 - sdk/nodejs/compute/machineImageIamPolicy.ts | 130 - sdk/nodejs/compute/nodeGroup.ts | 66 +- .../compute/organizationSecurityPolicy.ts | 21 - .../organizationSecurityPolicyAssociation.ts | 59 - .../compute/organizationSecurityPolicyRule.ts | 47 - sdk/nodejs/compute/perInstanceConfig.ts | 65 - sdk/nodejs/compute/projectMetadataItem.ts | 5 - sdk/nodejs/compute/regionBackendService.ts | 18 +- sdk/nodejs/compute/regionDisk.ts | 25 - .../regionDiskResourcePolicyAttachment.ts | 5 - .../compute/regionInstanceGroupManager.ts | 15 +- .../compute/regionNetworkEndpointGroup.ts | 4 + sdk/nodejs/compute/regionPerInstanceConfig.ts | 70 - sdk/nodejs/compute/regionSslCertificate.ts | 13 - sdk/nodejs/compute/routerNat.ts | 17 + sdk/nodejs/compute/securityPolicy.ts | 26 +- sdk/nodejs/compute/securityScanConfig.ts | 12 +- sdk/nodejs/compute/snapshot.ts | 22 - sdk/nodejs/compute/sslcertificate.ts | 13 - sdk/nodejs/compute/subnetwork.ts | 33 +- sdk/nodejs/compute/targetInstance.ts | 9 +- sdk/nodejs/compute/targetPool.ts | 24 +- sdk/nodejs/compute/vpntunnel.ts | 12 - sdk/nodejs/config/vars.ts | 40 +- sdk/nodejs/container/attachedCluster.ts | 40 + sdk/nodejs/container/cluster.ts | 169 +- sdk/nodejs/container/getEngineVersions.ts | 16 - sdk/nodejs/container/nodePool.ts | 101 +- sdk/nodejs/datacatalog/entryGroup.ts | 4 +- sdk/nodejs/datacatalog/policyTag.ts | 8 - sdk/nodejs/datacatalog/policyTagIamBinding.ts | 60 - sdk/nodejs/datacatalog/policyTagIamMember.ts | 60 - sdk/nodejs/datacatalog/policyTagIamPolicy.ts | 60 - sdk/nodejs/datacatalog/taxonomy.ts | 8 - sdk/nodejs/datacatalog/taxonomyIamBinding.ts | 60 - sdk/nodejs/datacatalog/taxonomyIamMember.ts | 60 - sdk/nodejs/datacatalog/taxonomyIamPolicy.ts | 60 - sdk/nodejs/dataflow/flexTemplateJob.ts | 21 +- sdk/nodejs/dataflow/job.ts | 18 +- sdk/nodejs/datafusion/instance.ts | 44 +- sdk/nodejs/dataproc/clusterIAMBinding.ts | 24 - sdk/nodejs/dataproc/clusterIAMMember.ts | 24 - sdk/nodejs/dataproc/clusterIAMPolicy.ts | 24 - sdk/nodejs/dataproc/jobIAMBinding.ts | 24 - sdk/nodejs/dataproc/jobIAMMember.ts | 24 - sdk/nodejs/dataproc/jobIAMPolicy.ts | 24 - sdk/nodejs/datastream/stream.ts | 120 + sdk/nodejs/deploymentmanager/deployment.ts | 50 +- sdk/nodejs/diagflow/agent.ts | 33 +- sdk/nodejs/diagflow/intent.ts | 46 - sdk/nodejs/dns/getManagedZone.ts | 3 - sdk/nodejs/dns/managedZone.ts | 42 +- sdk/nodejs/dns/policy.ts | 6 +- sdk/nodejs/firebase/getWebApp.ts | 6 - sdk/nodejs/firebase/getWebAppConfig.ts | 18 - sdk/nodejs/firebase/project.ts | 27 - sdk/nodejs/firebase/projectLocation.ts | 37 - sdk/nodejs/firebase/webApp.ts | 52 - sdk/nodejs/firestore/document.ts | 4 +- sdk/nodejs/folder/iamAuditConfig.ts | 146 - sdk/nodejs/folder/iambinding.ts | 97 +- sdk/nodejs/folder/iammember.ts | 146 - sdk/nodejs/folder/iampolicy.ts | 146 - sdk/nodejs/healthcare/datasetIamBinding.ts | 54 - sdk/nodejs/healthcare/datasetIamMember.ts | 54 - sdk/nodejs/healthcare/datasetIamPolicy.ts | 54 - sdk/nodejs/healthcare/dicomStore.ts | 18 +- sdk/nodejs/healthcare/dicomStoreIamBinding.ts | 54 - sdk/nodejs/healthcare/dicomStoreIamMember.ts | 54 - sdk/nodejs/healthcare/dicomStoreIamPolicy.ts | 54 - sdk/nodejs/healthcare/fhirStore.ts | 16 + sdk/nodejs/healthcare/fhirStoreIamBinding.ts | 54 - sdk/nodejs/healthcare/fhirStoreIamMember.ts | 54 - sdk/nodejs/healthcare/fhirStoreIamPolicy.ts | 54 - sdk/nodejs/healthcare/hl7StoreIamBinding.ts | 54 - sdk/nodejs/healthcare/hl7StoreIamMember.ts | 54 - sdk/nodejs/healthcare/hl7StoreIamPolicy.ts | 54 - sdk/nodejs/iam/accessBoundaryPolicy.ts | 159 + sdk/nodejs/iam/getWorkloadIdentityPool.ts | 4 - .../iam/getWorkloadIdentityPoolProvider.ts | 4 - sdk/nodejs/iam/index.ts | 8 + sdk/nodejs/iam/workforcePoolProvider.ts | 4 +- sdk/nodejs/iap/brand.ts | 35 - sdk/nodejs/iap/client.ts | 39 - sdk/nodejs/index.ts | 4 + sdk/nodejs/kms/cryptoKey.ts | 16 - sdk/nodejs/kms/cryptoKeyIAMBinding.ts | 108 - sdk/nodejs/kms/cryptoKeyIAMMember.ts | 108 - sdk/nodejs/kms/cryptoKeyIAMPolicy.ts | 108 - sdk/nodejs/kms/keyRing.ts | 12 - sdk/nodejs/kms/keyRingIAMBinding.ts | 115 - sdk/nodejs/kms/keyRingIAMMember.ts | 115 - sdk/nodejs/kms/keyRingIAMPolicy.ts | 115 - sdk/nodejs/kms/keyRingImportJob.ts | 15 - sdk/nodejs/kms/secretCiphertext.ts | 15 - .../logging/billingAccountBucketConfig.ts | 6 - sdk/nodejs/logging/billingAccountSink.ts | 9 - sdk/nodejs/logging/folderBucketConfig.ts | 6 - sdk/nodejs/logging/folderExclusion.ts | 8 - .../logging/organizationBucketConfig.ts | 6 - sdk/nodejs/logging/organizationExclusion.ts | 8 - sdk/nodejs/logging/projectBucketConfig.ts | 6 - sdk/nodejs/logging/projectExclusion.ts | 8 - sdk/nodejs/monitoring/notificationChannel.ts | 57 +- sdk/nodejs/monitoring/slo.ts | 4 +- sdk/nodejs/monitoring/uptimeCheckConfig.ts | 11 - sdk/nodejs/notebooks/instance.ts | 4 + sdk/nodejs/organizations/folder.ts | 14 - sdk/nodejs/organizations/iamAuditConfig.ts | 62 +- sdk/nodejs/organizations/iambinding.ts | 83 +- sdk/nodejs/organizations/iamcustomRole.ts | 12 - sdk/nodejs/organizations/iammember.ts | 149 - sdk/nodejs/organizations/iampolicy.ts | 149 - sdk/nodejs/organizations/project.ts | 72 +- sdk/nodejs/osconfig/guestPolicies.ts | 10 - sdk/nodejs/projects/iamauditConfig.ts | 146 - sdk/nodejs/projects/iambinding.ts | 146 - sdk/nodejs/projects/iamcustomRole.ts | 12 - sdk/nodejs/projects/iammember.ts | 146 - sdk/nodejs/projects/iampolicy.ts | 146 - sdk/nodejs/projects/service.ts | 9 - sdk/nodejs/projects/serviceIdentity.ts | 13 - sdk/nodejs/projects/usageExportBucket.ts | 18 - sdk/nodejs/provider.ts | 14 +- sdk/nodejs/redis/instance.ts | 4 +- .../secretmanager/getSecretVersionAccess.ts | 108 + sdk/nodejs/secretmanager/index.ts | 5 + sdk/nodejs/secretmanager/secretVersion.ts | 5 - .../securitycenter/instanceIamBinding.ts | 2 +- .../securitycenter/instanceIamMember.ts | 2 +- .../securitycenter/instanceIamPolicy.ts | 2 +- sdk/nodejs/serviceaccount/account.ts | 12 - .../serviceaccount/getAccountIdToken.ts | 34 - sdk/nodejs/serviceaccount/iambinding.ts | 15 +- sdk/nodejs/serviceaccount/iammember.ts | 15 +- sdk/nodejs/serviceaccount/iampolicy.ts | 15 +- sdk/nodejs/servicedirectory/endpoint.ts | 8 - sdk/nodejs/servicedirectory/namespace.ts | 9 - .../servicedirectory/namespaceIamBinding.ts | 55 - .../servicedirectory/namespaceIamMember.ts | 55 - .../servicedirectory/namespaceIamPolicy.ts | 55 - sdk/nodejs/servicedirectory/service.ts | 8 - .../servicedirectory/serviceIamBinding.ts | 55 - .../servicedirectory/serviceIamMember.ts | 55 - .../servicedirectory/serviceIamPolicy.ts | 55 - .../serviceusage/consumerQuotaOverride.ts | 10 - sdk/nodejs/spanner/database.ts | 22 +- sdk/nodejs/sql/databaseInstance.ts | 123 +- .../sql/sourceRepresentationInstance.ts | 16 +- sdk/nodejs/sql/sslCert.ts | 4 - sdk/nodejs/sql/user.ts | 4 - sdk/nodejs/storage/bucket.ts | 15 +- sdk/nodejs/storage/bucketACL.ts | 11 - sdk/nodejs/storage/bucketAccessControl.ts | 23 - sdk/nodejs/storage/bucketObject.ts | 6 +- .../storage/getProjectServiceAccount.ts | 66 - sdk/nodejs/storage/hmacKey.ts | 18 +- sdk/nodejs/tags/index.ts | 8 + sdk/nodejs/tags/locationTagBinding.ts | 179 + sdk/nodejs/tpu/node.ts | 36 - sdk/nodejs/tsconfig.json | 10 +- sdk/nodejs/types/input.ts | 757 ++-- sdk/nodejs/types/output.ts | 812 ++-- sdk/nodejs/workstations/index.ts | 25 + sdk/nodejs/workstations/workstationCluster.ts | 372 ++ sdk/python/pulumi_gcp/__init__.py | 46 + .../access_level_condition.py | 100 - sdk/python/pulumi_gcp/apigateway/api.py | 16 - .../pulumi_gcp/apigateway/api_config.py | 16 - .../apigateway/api_config_iam_binding.py | 110 - .../apigateway/api_config_iam_member.py | 110 - .../apigateway/api_config_iam_policy.py | 110 - .../pulumi_gcp/apigateway/api_iam_binding.py | 110 - .../pulumi_gcp/apigateway/api_iam_member.py | 110 - .../pulumi_gcp/apigateway/api_iam_policy.py | 110 - sdk/python/pulumi_gcp/apigateway/gateway.py | 16 - .../apigateway/gateway_iam_binding.py | 116 - .../apigateway/gateway_iam_member.py | 116 - .../apigateway/gateway_iam_policy.py | 116 - sdk/python/pulumi_gcp/apigee/env_group.py | 52 - .../pulumi_gcp/apigee/env_group_attachment.py | 102 - sdk/python/pulumi_gcp/apigee/environment.py | 54 - sdk/python/pulumi_gcp/apigee/instance.py | 250 -- .../pulumi_gcp/apigee/instance_attachment.py | 102 - sdk/python/pulumi_gcp/apigee/organization.py | 4 +- .../appengine/flexible_app_version.py | 21 +- sdk/python/pulumi_gcp/bigquery/_inputs.py | 92 +- sdk/python/pulumi_gcp/bigquery/connection.py | 16 +- sdk/python/pulumi_gcp/bigquery/outputs.py | 82 +- .../bigquery/reservation_assignment.py | 30 - sdk/python/pulumi_gcp/bigquery/routine.py | 110 - sdk/python/pulumi_gcp/bigquery/table.py | 44 +- sdk/python/pulumi_gcp/bigtable/instance.py | 60 +- .../bigtable/instance_iam_binding.py | 20 - .../bigtable/instance_iam_member.py | 20 - .../bigtable/instance_iam_policy.py | 20 - sdk/python/pulumi_gcp/bigtable/table.py | 43 +- .../pulumi_gcp/bigtable/table_iam_binding.py | 20 - .../pulumi_gcp/bigtable/table_iam_member.py | 20 - .../pulumi_gcp/bigtable/table_iam_policy.py | 20 - sdk/python/pulumi_gcp/billing/sub_account.py | 53 - .../pulumi_gcp/certificatemanager/_inputs.py | 2 - .../certificatemanager/certificate.py | 40 +- .../pulumi_gcp/certificatemanager/outputs.py | 2 - sdk/python/pulumi_gcp/cloudbuild/_inputs.py | 212 +- .../pulumi_gcp/cloudbuild/get_trigger.py | 12 +- sdk/python/pulumi_gcp/cloudbuild/outputs.py | 320 +- sdk/python/pulumi_gcp/cloudbuild/trigger.py | 149 + .../pulumi_gcp/cloudbuildv2/__init__.py | 11 + sdk/python/pulumi_gcp/cloudbuildv2/_inputs.py | 294 ++ .../pulumi_gcp/cloudbuildv2/connection.py | 674 +++ sdk/python/pulumi_gcp/cloudbuildv2/outputs.py | 315 ++ .../pulumi_gcp/cloudbuildv2/repository.py | 580 +++ .../pulumi_gcp/cloudfunctions/function.py | 2 +- .../pulumi_gcp/cloudfunctions/get_function.py | 2 +- .../cloudidentity/group_membership.py | 7 - sdk/python/pulumi_gcp/cloudrun/_inputs.py | 62 - sdk/python/pulumi_gcp/cloudrun/outputs.py | 62 - sdk/python/pulumi_gcp/cloudrun/service.py | 90 +- sdk/python/pulumi_gcp/cloudrunv2/_inputs.py | 31 +- sdk/python/pulumi_gcp/cloudrunv2/job.py | 62 - sdk/python/pulumi_gcp/cloudrunv2/outputs.py | 22 +- sdk/python/pulumi_gcp/cloudscheduler/job.py | 14 +- sdk/python/pulumi_gcp/composer/_inputs.py | 29 + .../pulumi_gcp/composer/get_environment.py | 3 - sdk/python/pulumi_gcp/composer/outputs.py | 43 + sdk/python/pulumi_gcp/compute/_inputs.py | 659 ++- sdk/python/pulumi_gcp/compute/address.py | 14 +- .../pulumi_gcp/compute/attached_disk.py | 28 - .../compute/backend_bucket_signed_url_key.py | 22 - .../pulumi_gcp/compute/backend_service.py | 121 +- .../compute/backend_service_signed_url_key.py | 22 - sdk/python/pulumi_gcp/compute/disk.py | 218 +- .../disk_resource_policy_attachment.py | 10 - .../pulumi_gcp/compute/forwarding_rule.py | 14 +- .../pulumi_gcp/compute/get_backend_service.py | 12 +- .../compute/get_instance_template.py | 4 - .../pulumi_gcp/compute/get_resource_policy.py | 22 +- .../pulumi_gcp/compute/get_router_nat.py | 12 +- .../pulumi_gcp/compute/global_address.py | 79 +- .../compute/global_forwarding_rule.py | 279 +- sdk/python/pulumi_gcp/compute/instance.py | 147 +- .../compute/instance_from_machine_image.py | 18 - .../compute/instance_from_template.py | 21 +- .../pulumi_gcp/compute/instance_group.py | 82 - .../compute/instance_group_manager.py | 35 +- .../pulumi_gcp/compute/instance_template.py | 269 +- .../pulumi_gcp/compute/machine_image.py | 20 - .../compute/machine_image_iam_binding.py | 228 -- .../compute/machine_image_iam_member.py | 228 -- .../compute/machine_image_iam_policy.py | 228 -- sdk/python/pulumi_gcp/compute/node_group.py | 146 +- .../compute/organization_security_policy.py | 38 - ...rganization_security_policy_association.py | 102 - .../organization_security_policy_rule.py | 86 - sdk/python/pulumi_gcp/compute/outputs.py | 762 ++-- .../pulumi_gcp/compute/per_instance_config.py | 118 - .../compute/project_metadata_item.py | 10 - .../compute/region_backend_service.py | 42 +- sdk/python/pulumi_gcp/compute/region_disk.py | 50 - .../region_disk_resource_policy_attachment.py | 10 - .../compute/region_instance_group_manager.py | 35 +- .../compute/region_network_endpoint_group.py | 8 + .../compute/region_per_instance_config.py | 128 - .../compute/region_ssl_certificate.py | 26 - sdk/python/pulumi_gcp/compute/router_nat.py | 54 + .../pulumi_gcp/compute/security_policy.py | 52 +- .../compute/security_scan_config.py | 24 +- sdk/python/pulumi_gcp/compute/snapshot.py | 44 - .../pulumi_gcp/compute/ssl_certificate.py | 26 - sdk/python/pulumi_gcp/compute/subnetwork.py | 77 +- .../pulumi_gcp/compute/target_instance.py | 21 +- sdk/python/pulumi_gcp/compute/target_pool.py | 56 +- sdk/python/pulumi_gcp/compute/vpn_tunnel.py | 24 - sdk/python/pulumi_gcp/config/__init__.pyi | 10 +- sdk/python/pulumi_gcp/config/vars.py | 20 +- sdk/python/pulumi_gcp/container/_inputs.py | 150 +- .../pulumi_gcp/container/attached_cluster.py | 93 + sdk/python/pulumi_gcp/container/cluster.py | 390 +- .../container/get_engine_versions.py | 12 - sdk/python/pulumi_gcp/container/node_pool.py | 219 +- sdk/python/pulumi_gcp/container/outputs.py | 150 +- .../pulumi_gcp/datacatalog/entry_group.py | 8 +- .../pulumi_gcp/datacatalog/policy_tag.py | 16 - .../datacatalog/policy_tag_iam_binding.py | 104 - .../datacatalog/policy_tag_iam_member.py | 104 - .../datacatalog/policy_tag_iam_policy.py | 104 - sdk/python/pulumi_gcp/datacatalog/taxonomy.py | 16 - .../datacatalog/taxonomy_iam_binding.py | 104 - .../datacatalog/taxonomy_iam_member.py | 104 - .../datacatalog/taxonomy_iam_policy.py | 104 - .../pulumi_gcp/dataflow/flex_template_job.py | 41 +- sdk/python/pulumi_gcp/dataflow/job.py | 42 +- sdk/python/pulumi_gcp/datafusion/instance.py | 94 +- sdk/python/pulumi_gcp/dataloss/_inputs.py | 50 +- sdk/python/pulumi_gcp/dataloss/outputs.py | 46 +- sdk/python/pulumi_gcp/dataproc/_inputs.py | 113 + .../dataproc/cluster_iam_binding.py | 40 - .../pulumi_gcp/dataproc/cluster_iam_member.py | 40 - .../pulumi_gcp/dataproc/cluster_iam_policy.py | 40 - .../pulumi_gcp/dataproc/job_iam_binding.py | 40 - .../pulumi_gcp/dataproc/job_iam_member.py | 40 - .../pulumi_gcp/dataproc/job_iam_policy.py | 40 - sdk/python/pulumi_gcp/dataproc/outputs.py | 127 + sdk/python/pulumi_gcp/datastream/_inputs.py | 24 +- sdk/python/pulumi_gcp/datastream/outputs.py | 22 +- sdk/python/pulumi_gcp/datastream/stream.py | 240 ++ .../deploymentmanager/deployment.py | 112 +- sdk/python/pulumi_gcp/diagflow/agent.py | 77 +- sdk/python/pulumi_gcp/diagflow/intent.py | 80 - sdk/python/pulumi_gcp/dns/get_managed_zone.py | 3 - sdk/python/pulumi_gcp/dns/managed_zone.py | 96 +- sdk/python/pulumi_gcp/dns/policy.py | 14 +- sdk/python/pulumi_gcp/firebase/get_web_app.py | 6 +- .../pulumi_gcp/firebase/get_web_app_config.py | 18 +- sdk/python/pulumi_gcp/firebase/project.py | 48 - .../pulumi_gcp/firebase/project_location.py | 64 - sdk/python/pulumi_gcp/firebase/web_app.py | 86 - sdk/python/pulumi_gcp/firestore/document.py | 8 +- sdk/python/pulumi_gcp/folder/_inputs.py | 14 + .../pulumi_gcp/folder/iam_audit_config.py | 270 -- sdk/python/pulumi_gcp/folder/iam_binding.py | 189 +- sdk/python/pulumi_gcp/folder/iam_member.py | 270 -- sdk/python/pulumi_gcp/folder/iam_policy.py | 270 -- sdk/python/pulumi_gcp/folder/outputs.py | 14 + .../healthcare/dataset_iam_binding.py | 98 - .../healthcare/dataset_iam_member.py | 98 - .../healthcare/dataset_iam_policy.py | 98 - .../pulumi_gcp/healthcare/dicom_store.py | 42 +- .../healthcare/dicom_store_iam_binding.py | 98 - .../healthcare/dicom_store_iam_member.py | 98 - .../healthcare/dicom_store_iam_policy.py | 98 - .../pulumi_gcp/healthcare/fhir_store.py | 30 +- .../healthcare/fhir_store_iam_binding.py | 98 - .../healthcare/fhir_store_iam_member.py | 98 - .../healthcare/fhir_store_iam_policy.py | 98 - .../healthcare/hl7_store_iam_binding.py | 98 - .../healthcare/hl7_store_iam_member.py | 98 - .../healthcare/hl7_store_iam_policy.py | 98 - sdk/python/pulumi_gcp/iam/__init__.py | 1 + sdk/python/pulumi_gcp/iam/_inputs.py | 177 + .../pulumi_gcp/iam/access_boundary_policy.py | 349 ++ .../iam/get_workload_identity_pool.py | 4 - .../get_workload_identity_pool_provider.py | 4 - sdk/python/pulumi_gcp/iam/outputs.py | 179 + .../pulumi_gcp/iam/workforce_pool_provider.py | 8 +- sdk/python/pulumi_gcp/iap/brand.py | 64 - sdk/python/pulumi_gcp/iap/client.py | 70 - sdk/python/pulumi_gcp/kms/crypto_key.py | 32 - .../pulumi_gcp/kms/crypto_key_iam_binding.py | 196 - .../pulumi_gcp/kms/crypto_key_iam_member.py | 196 - .../pulumi_gcp/kms/crypto_key_iam_policy.py | 196 - sdk/python/pulumi_gcp/kms/key_ring.py | 24 - .../pulumi_gcp/kms/key_ring_iam_binding.py | 210 - .../pulumi_gcp/kms/key_ring_iam_member.py | 210 - .../pulumi_gcp/kms/key_ring_iam_policy.py | 210 - .../pulumi_gcp/kms/key_ring_import_job.py | 30 - .../pulumi_gcp/kms/secret_ciphertext.py | 30 - .../logging/billing_account_bucket_config.py | 12 - .../logging/billing_account_sink.py | 18 - .../logging/folder_bucket_config.py | 12 - .../pulumi_gcp/logging/folder_exclusion.py | 16 - .../logging/organization_bucket_config.py | 12 - .../logging/organization_exclusion.py | 16 - .../logging/project_bucket_config.py | 12 - .../pulumi_gcp/logging/project_exclusion.py | 16 - .../monitoring/notification_channel.py | 124 +- sdk/python/pulumi_gcp/monitoring/slo.py | 8 +- .../monitoring/uptime_check_config.py | 22 - sdk/python/pulumi_gcp/notebooks/instance.py | 8 + .../pulumi_gcp/organizations/_inputs.py | 28 +- sdk/python/pulumi_gcp/organizations/folder.py | 28 - .../organizations/iam_audit_config.py | 126 +- .../pulumi_gcp/organizations/iam_binding.py | 165 +- .../organizations/iam_custom_role.py | 24 - .../pulumi_gcp/organizations/iam_member.py | 276 -- .../pulumi_gcp/organizations/iam_policy.py | 276 -- .../pulumi_gcp/organizations/outputs.py | 28 +- .../pulumi_gcp/organizations/project.py | 162 +- .../pulumi_gcp/osconfig/guest_policies.py | 20 - .../pulumi_gcp/projects/iam_audit_config.py | 270 -- sdk/python/pulumi_gcp/projects/iam_binding.py | 270 -- .../pulumi_gcp/projects/iam_custom_role.py | 24 - sdk/python/pulumi_gcp/projects/iam_member.py | 270 -- sdk/python/pulumi_gcp/projects/iam_policy.py | 270 -- sdk/python/pulumi_gcp/projects/service.py | 13 - .../pulumi_gcp/projects/service_identity.py | 26 - .../projects/usage_export_bucket.py | 36 - sdk/python/pulumi_gcp/provider.py | 95 +- sdk/python/pulumi_gcp/redis/_inputs.py | 4 +- sdk/python/pulumi_gcp/redis/instance.py | 8 +- sdk/python/pulumi_gcp/redis/outputs.py | 4 +- .../pulumi_gcp/secretmanager/__init__.py | 1 + .../get_secret_version_access.py | 162 + .../secretmanager/secret_version.py | 10 - .../securitycenter/instance_iam_binding.py | 4 +- .../securitycenter/instance_iam_member.py | 4 +- .../securitycenter/instance_iam_policy.py | 4 +- .../pulumi_gcp/serviceaccount/account.py | 24 - .../serviceaccount/get_account_id_token.py | 34 +- .../pulumi_gcp/serviceaccount/iam_binding.py | 30 +- .../pulumi_gcp/serviceaccount/iam_member.py | 30 +- .../pulumi_gcp/serviceaccount/iam_policy.py | 30 +- .../pulumi_gcp/servicedirectory/endpoint.py | 16 - .../pulumi_gcp/servicedirectory/namespace.py | 18 - .../servicedirectory/namespace_iam_binding.py | 96 - .../servicedirectory/namespace_iam_member.py | 96 - .../servicedirectory/namespace_iam_policy.py | 96 - .../pulumi_gcp/servicedirectory/service.py | 16 - .../servicedirectory/service_iam_binding.py | 96 - .../servicedirectory/service_iam_member.py | 96 - .../servicedirectory/service_iam_policy.py | 96 - .../serviceusage/consumer_quota_override.py | 20 - sdk/python/pulumi_gcp/spanner/database.py | 48 +- .../pulumi_gcp/sql/database_instance.py | 261 +- .../sql/source_representation_instance.py | 33 +- sdk/python/pulumi_gcp/sql/ssl_cert.py | 8 - sdk/python/pulumi_gcp/sql/user.py | 8 - sdk/python/pulumi_gcp/storage/bucket.py | 35 +- .../storage/bucket_access_control.py | 46 - sdk/python/pulumi_gcp/storage/bucket_acl.py | 22 - .../pulumi_gcp/storage/bucket_object.py | 14 +- .../storage/get_project_service_account.py | 66 - sdk/python/pulumi_gcp/storage/hmac_key.py | 36 +- sdk/python/pulumi_gcp/tags/__init__.py | 1 + .../pulumi_gcp/tags/location_tag_binding.py | 363 ++ sdk/python/pulumi_gcp/tpu/node.py | 62 - .../pulumi_gcp/workstations/__init__.py | 10 + sdk/python/pulumi_gcp/workstations/_inputs.py | 133 + sdk/python/pulumi_gcp/workstations/outputs.py | 130 + .../workstations/workstation_cluster.py | 888 ++++ 1722 files changed, 47152 insertions(+), 70900 deletions(-) create mode 100644 sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigArgs.cs create mode 100644 sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigGetArgs.cs create mode 100644 sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPullRequestArgs.cs create mode 100644 sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPullRequestGetArgs.cs create mode 100644 sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPushArgs.cs create mode 100644 sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPushGetArgs.cs create mode 100644 sdk/dotnet/CloudBuild/Outputs/GetTriggerRepositoryEventConfigPullRequestResult.cs create mode 100644 sdk/dotnet/CloudBuild/Outputs/GetTriggerRepositoryEventConfigPushResult.cs create mode 100644 sdk/dotnet/CloudBuild/Outputs/GetTriggerRepositoryEventConfigResult.cs create mode 100644 sdk/dotnet/CloudBuild/Outputs/TriggerRepositoryEventConfig.cs create mode 100644 sdk/dotnet/CloudBuild/Outputs/TriggerRepositoryEventConfigPullRequest.cs create mode 100644 sdk/dotnet/CloudBuild/Outputs/TriggerRepositoryEventConfigPush.cs create mode 100644 sdk/dotnet/CloudBuildV2/Connection.cs create mode 100644 sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigArgs.cs create mode 100644 sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigAuthorizerCredentialArgs.cs create mode 100644 sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigAuthorizerCredentialGetArgs.cs create mode 100644 sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigGetArgs.cs create mode 100644 sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigArgs.cs create mode 100644 sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigGetArgs.cs create mode 100644 sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs.cs create mode 100644 sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfigGetArgs.cs create mode 100644 sdk/dotnet/CloudBuildV2/Inputs/ConnectionInstallationStateArgs.cs create mode 100644 sdk/dotnet/CloudBuildV2/Inputs/ConnectionInstallationStateGetArgs.cs create mode 100644 sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubConfig.cs create mode 100644 sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubConfigAuthorizerCredential.cs create mode 100644 sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubEnterpriseConfig.cs create mode 100644 sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfig.cs create mode 100644 sdk/dotnet/CloudBuildV2/Outputs/ConnectionInstallationState.cs create mode 100644 sdk/dotnet/CloudBuildV2/README.md create mode 100644 sdk/dotnet/CloudBuildV2/Repository.cs create mode 100644 sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs.cs create mode 100644 sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationGetArgs.cs create mode 100644 sdk/dotnet/Composer/Outputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegration.cs create mode 100644 sdk/dotnet/Composer/Outputs/GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationResult.cs create mode 100644 sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyCustomPolicyArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyCustomPolicyGetArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyGetArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyPolicyArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyPolicyGetArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsGetArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsProjectMapArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsProjectMapGetArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs.cs create mode 100644 sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigGetArgs.cs create mode 100644 sdk/dotnet/Compute/Outputs/BackendServiceLocalityLbPolicy.cs create mode 100644 sdk/dotnet/Compute/Outputs/BackendServiceLocalityLbPolicyCustomPolicy.cs create mode 100644 sdk/dotnet/Compute/Outputs/BackendServiceLocalityLbPolicyPolicy.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetBackendServiceLocalityLbPolicyCustomPolicyResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetBackendServiceLocalityLbPolicyPolicyResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/GetBackendServiceLocalityLbPolicyResult.cs create mode 100644 sdk/dotnet/Compute/Outputs/NodeGroupShareSettings.cs create mode 100644 sdk/dotnet/Compute/Outputs/NodeGroupShareSettingsProjectMap.cs create mode 100644 sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.cs create mode 100644 sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs.cs create mode 100644 sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogGetArgs.cs create mode 100644 sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs.cs create mode 100644 sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishSummaryToCsccGetArgs.cs create mode 100644 sdk/dotnet/DataLoss/Outputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog.cs create mode 100644 sdk/dotnet/DataLoss/Outputs/PreventionJobTriggerInspectJobActionPublishSummaryToCscc.cs create mode 100644 sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs.cs create mode 100644 sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinityGetArgs.cs create mode 100644 sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigReservationAffinityArgs.cs create mode 100644 sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigReservationAffinityGetArgs.cs create mode 100644 sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinity.cs create mode 100644 sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfigReservationAffinity.cs create mode 100644 sdk/dotnet/Iam/AccessBoundaryPolicy.cs create mode 100644 sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleArgs.cs create mode 100644 sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs.cs create mode 100644 sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionGetArgs.cs create mode 100644 sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleGetArgs.cs create mode 100644 sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleArgs.cs create mode 100644 sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleGetArgs.cs create mode 100644 sdk/dotnet/Iam/Outputs/AccessBoundaryPolicyRule.cs create mode 100644 sdk/dotnet/Iam/Outputs/AccessBoundaryPolicyRuleAccessBoundaryRule.cs create mode 100644 sdk/dotnet/Iam/Outputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition.cs create mode 100644 sdk/dotnet/SecretManager/GetSecretVersionAccess.cs create mode 100644 sdk/dotnet/Tags/LocationTagBinding.cs create mode 100644 sdk/dotnet/Workstations/Inputs/WorkstationClusterConditionArgs.cs create mode 100644 sdk/dotnet/Workstations/Inputs/WorkstationClusterConditionGetArgs.cs create mode 100644 sdk/dotnet/Workstations/Inputs/WorkstationClusterPrivateClusterConfigArgs.cs create mode 100644 sdk/dotnet/Workstations/Inputs/WorkstationClusterPrivateClusterConfigGetArgs.cs create mode 100644 sdk/dotnet/Workstations/Outputs/WorkstationClusterCondition.cs create mode 100644 sdk/dotnet/Workstations/Outputs/WorkstationClusterPrivateClusterConfig.cs create mode 100644 sdk/dotnet/Workstations/README.md create mode 100644 sdk/dotnet/Workstations/WorkstationCluster.cs create mode 100644 sdk/go/gcp/cloudbuildv2/connection.go create mode 100644 sdk/go/gcp/cloudbuildv2/init.go create mode 100644 sdk/go/gcp/cloudbuildv2/pulumiTypes.go create mode 100644 sdk/go/gcp/cloudbuildv2/repository.go create mode 100644 sdk/go/gcp/iam/accessBoundaryPolicy.go create mode 100644 sdk/go/gcp/secretmanager/getSecretVersionAccess.go create mode 100644 sdk/go/gcp/tags/locationTagBinding.go create mode 100644 sdk/go/gcp/workstations/init.go create mode 100644 sdk/go/gcp/workstations/pulumiTypes.go create mode 100644 sdk/go/gcp/workstations/workstationCluster.go create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerRepositoryEventConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerRepositoryEventConfigPullRequestArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerRepositoryEventConfigPushArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerRepositoryEventConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerRepositoryEventConfigPullRequest.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerRepositoryEventConfigPush.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerRepositoryEventConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerRepositoryEventConfigPullRequest.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerRepositoryEventConfigPush.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/Connection.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/ConnectionArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/Repository.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/RepositoryArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubConfigAuthorizerCredentialArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubEnterpriseConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionInstallationStateArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/RepositoryState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubConfigAuthorizerCredential.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubEnterpriseConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionInstallationState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/composer/inputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegration.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceLocalityLbPolicyArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceLocalityLbPolicyCustomPolicyArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceLocalityLbPolicyPolicyArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NodeGroupShareSettingsArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NodeGroupShareSettingsProjectMapArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceLocalityLbPolicy.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceLocalityLbPolicyCustomPolicy.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceLocalityLbPolicyPolicy.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceLocalityLbPolicy.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceLocalityLbPolicyCustomPolicy.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceLocalityLbPolicyPolicy.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/NodeGroupShareSettings.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/NodeGroupShareSettingsProjectMap.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionJobTriggerInspectJobActionPublishSummaryToCscc.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigReservationAffinityArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinity.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfigReservationAffinity.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/iam/AccessBoundaryPolicy.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/iam/AccessBoundaryPolicyArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyRuleArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/AccessBoundaryPolicyRule.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/AccessBoundaryPolicyRuleAccessBoundaryRule.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/GetSecretVersionAccessArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/GetSecretVersionAccessPlainArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/secretmanager/outputs/GetSecretVersionAccessResult.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/tags/LocationTagBinding.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/tags/LocationTagBindingArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/tags/inputs/LocationTagBindingState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/workstations/WorkstationCluster.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/workstations/WorkstationClusterArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationClusterConditionArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationClusterPrivateClusterConfigArgs.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationClusterState.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/workstations/outputs/WorkstationClusterCondition.java create mode 100644 sdk/java/src/main/java/com/pulumi/gcp/workstations/outputs/WorkstationClusterPrivateClusterConfig.java create mode 100644 sdk/nodejs/cloudbuildv2/connection.ts create mode 100644 sdk/nodejs/cloudbuildv2/index.ts create mode 100644 sdk/nodejs/cloudbuildv2/repository.ts create mode 100644 sdk/nodejs/iam/accessBoundaryPolicy.ts create mode 100644 sdk/nodejs/secretmanager/getSecretVersionAccess.ts create mode 100644 sdk/nodejs/tags/locationTagBinding.ts create mode 100644 sdk/nodejs/workstations/index.ts create mode 100644 sdk/nodejs/workstations/workstationCluster.ts create mode 100644 sdk/python/pulumi_gcp/cloudbuildv2/__init__.py create mode 100644 sdk/python/pulumi_gcp/cloudbuildv2/_inputs.py create mode 100644 sdk/python/pulumi_gcp/cloudbuildv2/connection.py create mode 100644 sdk/python/pulumi_gcp/cloudbuildv2/outputs.py create mode 100644 sdk/python/pulumi_gcp/cloudbuildv2/repository.py create mode 100644 sdk/python/pulumi_gcp/iam/access_boundary_policy.py create mode 100644 sdk/python/pulumi_gcp/secretmanager/get_secret_version_access.py create mode 100644 sdk/python/pulumi_gcp/tags/location_tag_binding.py create mode 100644 sdk/python/pulumi_gcp/workstations/__init__.py create mode 100644 sdk/python/pulumi_gcp/workstations/_inputs.py create mode 100644 sdk/python/pulumi_gcp/workstations/outputs.py create mode 100644 sdk/python/pulumi_gcp/workstations/workstation_cluster.py diff --git a/provider/cmd/pulumi-resource-gcp/schema.json b/provider/cmd/pulumi-resource-gcp/schema.json index bc6ca7f0c1..0cc73940e8 100644 --- a/provider/cmd/pulumi-resource-gcp/schema.json +++ b/provider/cmd/pulumi-resource-gcp/schema.json @@ -36,6 +36,7 @@ "certificatemanager": "CertificateManager", "cloudasset": "CloudAsset", "cloudbuild": "CloudBuild", + "cloudbuildv2": "CloudBuildV2", "clouddeploy": "CloudDeploy", "cloudfunctions": "CloudFunctions", "cloudfunctionsv2": "CloudFunctionsV2", @@ -111,7 +112,8 @@ "tpu": "Tpu", "vertex": "Vertex", "vpcaccess": "VpcAccess", - "workflows": "Workflows" + "workflows": "Workflows", + "workstations": "Workstations" }, "packageReferences": { "Pulumi": "3.*" @@ -259,6 +261,9 @@ "cloudTasksCustomEndpoint": { "type": "string" }, + "cloudbuildv2CustomEndpoint": { + "type": "string" + }, "clouddeployCustomEndpoint": { "type": "string" }, @@ -328,9 +333,6 @@ "dialogflowCxCustomEndpoint": { "type": "string" }, - "disableGooglePartnerName": { - "type": "boolean" - }, "dnsCustomEndpoint": { "type": "string" }, @@ -376,9 +378,6 @@ "gkehubFeatureCustomEndpoint": { "type": "string" }, - "googlePartnerName": { - "type": "string" - }, "healthcareCustomEndpoint": { "type": "string" }, @@ -547,6 +546,9 @@ "tagsCustomEndpoint": { "type": "string" }, + "tagsLocationCustomEndpoint": { + "type": "string" + }, "tpuCustomEndpoint": { "type": "string" }, @@ -562,6 +564,9 @@ "workflowsCustomEndpoint": { "type": "string" }, + "workstationsCustomEndpoint": { + "type": "string" + }, "zone": { "type": "string", "defaultInfo": { @@ -6199,6 +6204,24 @@ } } }, + "federatedApplicationClientId": { + "type": "string", + "description": "The Azure Application (client) ID where the federated credentials will be hosted.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "identity": { + "type": "string", + "description": "A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application.\n", + "language": { + "python": { + "mapCase": false + } + } + }, "objectId": { "type": "string", "description": "The object id of the Azure Active Directory Application.\n", @@ -6228,6 +6251,7 @@ "application", "clientId", "customerTenantId", + "identity", "objectId", "redirectUri" ] @@ -6274,6 +6298,15 @@ "mapCase": false } } + }, + "useServerlessAnalytics": { + "type": "boolean", + "description": "If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics\n", + "language": { + "python": { + "mapCase": false + } + } } }, "type": "object", @@ -6310,6 +6343,15 @@ } } }, + "serviceAccountId": { + "type": "string", + "description": "When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection.\n", + "language": { + "python": { + "mapCase": false + } + } + }, "type": { "type": "string", "description": "Type of the Cloud SQL database.\nPossible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`.\n", @@ -6326,7 +6368,18 @@ "database", "instanceId", "type" - ] + ], + "language": { + "nodejs": { + "requiredOutputs": [ + "credential", + "database", + "instanceId", + "serviceAccountId", + "type" + ] + } + } }, "gcp:bigquery/ConnectionCloudSqlCredential:ConnectionCloudSqlCredential": { "properties": { @@ -7428,7 +7481,7 @@ }, "nullMarker": { "type": "string", - "description": "Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this\nproperty to a custom value, BigQuery throws an error if an\nempty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as\nan empty value.\n", + "description": "Specifies a string that represents a null value in a CSV file. For example, if you specify \"\\N\", BigQuery interprets \"\\N\" as a null value\nwhen loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an\nempty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as\nan empty value.\n", "language": { "python": { "mapCase": false @@ -8416,7 +8469,6 @@ }, "quote": { "type": "string", - "description": "The value that is used to quote data sections in a\nCSV file. If your data does not contain quoted sections, set the\nproperty value to an empty string. If your data contains quoted newline\ncharacters, you must also set the `allow_quoted_newlines` property to true.\nThe API-side default is `\"`, specified in the provider escaped as `\\\"`. Due to\nlimitations with default values, this value is required to be\nexplicitly set.\n", "language": { "python": { "mapCase": false @@ -15010,7 +15062,7 @@ }, "pemCertificate": { "type": "string", - "description": "The certificate chain in PEM-encoded form.\nLeaf certificate comes first, followed by intermediate ones if any.\n**Note**: This property is sensitive and will not be displayed in the plan.\n", + "description": "The certificate chain in PEM-encoded form.\nLeaf certificate comes first, followed by intermediate ones if any.\n", "language": { "python": { "mapCase": false @@ -16192,6 +16244,15 @@ }, "gcp:cloudbuild/TriggerGitFileSource:TriggerGitFileSource": { "properties": { + "githubEnterpriseConfig": { + "type": "string", + "description": "The full resource name of the github enterprise config.\nFormat: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}.\n", + "language": { + "python": { + "mapCase": false + } + } + }, "path": { "type": "string", "description": "The path of the file, with the repo root as the root of the path.\n", @@ -16396,8 +16457,113 @@ } } }, + "gcp:cloudbuild/TriggerRepositoryEventConfig:TriggerRepositoryEventConfig": { + "properties": { + "pullRequest": { + "$ref": "#/types/gcp:cloudbuild/TriggerRepositoryEventConfigPullRequest:TriggerRepositoryEventConfigPullRequest", + "description": "Contains filter properties for matching Pull Requests.\nStructure is documented below.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "push": { + "$ref": "#/types/gcp:cloudbuild/TriggerRepositoryEventConfigPush:TriggerRepositoryEventConfigPush", + "description": "Contains filter properties for matching git pushes.\nStructure is documented below.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "repository": { + "type": "string", + "description": "The resource name of the Repo API resource.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, + "gcp:cloudbuild/TriggerRepositoryEventConfigPullRequest:TriggerRepositoryEventConfigPullRequest": { + "properties": { + "branch": { + "type": "string", + "description": "Regex of branches to match.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "commentControl": { + "type": "string", + "description": "Whether to block builds on a \"/gcbrun\" comment from a repository owner or collaborator.\nPossible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "invertRegex": { + "type": "boolean", + "description": "If true, branches that do NOT match the git_ref will trigger a build.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, + "gcp:cloudbuild/TriggerRepositoryEventConfigPush:TriggerRepositoryEventConfigPush": { + "properties": { + "branch": { + "type": "string", + "description": "Regex of branches to match. Specify only one of branch or tag.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "invertRegex": { + "type": "boolean", + "description": "When true, only trigger a build if the revision regex does NOT match the git_ref regex.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "tag": { + "type": "string", + "description": "Regex of tags to match. Specify only one of branch or tag.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, "gcp:cloudbuild/TriggerSourceToBuild:TriggerSourceToBuild": { "properties": { + "githubEnterpriseConfig": { + "type": "string", + "description": "The full resource name of the github enterprise config.\nFormat: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}.\n", + "language": { + "python": { + "mapCase": false + } + } + }, "ref": { "type": "string", "description": "The branch or tag to use. Must start with \"refs/\" (required).\n", @@ -17457,6 +17623,14 @@ }, "gcp:cloudbuild/getTriggerGitFileSource:getTriggerGitFileSource": { "properties": { + "githubEnterpriseConfig": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, "path": { "type": "string", "language": { @@ -17492,6 +17666,7 @@ }, "type": "object", "required": [ + "githubEnterpriseConfig", "path", "repoType", "revision", @@ -17683,8 +17858,139 @@ } } }, + "gcp:cloudbuild/getTriggerRepositoryEventConfig:getTriggerRepositoryEventConfig": { + "properties": { + "pullRequests": { + "type": "array", + "items": { + "$ref": "#/types/gcp:cloudbuild/getTriggerRepositoryEventConfigPullRequest:getTriggerRepositoryEventConfigPullRequest" + }, + "language": { + "python": { + "mapCase": false + } + } + }, + "pushes": { + "type": "array", + "items": { + "$ref": "#/types/gcp:cloudbuild/getTriggerRepositoryEventConfigPush:getTriggerRepositoryEventConfigPush" + }, + "language": { + "python": { + "mapCase": false + } + } + }, + "repository": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "pullRequests", + "pushes", + "repository" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:cloudbuild/getTriggerRepositoryEventConfigPullRequest:getTriggerRepositoryEventConfigPullRequest": { + "properties": { + "branch": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "commentControl": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "invertRegex": { + "type": "boolean", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "branch", + "commentControl", + "invertRegex" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:cloudbuild/getTriggerRepositoryEventConfigPush:getTriggerRepositoryEventConfigPush": { + "properties": { + "branch": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "invertRegex": { + "type": "boolean", + "language": { + "python": { + "mapCase": false + } + } + }, + "tag": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "branch", + "invertRegex", + "tag" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:cloudbuild/getTriggerSourceToBuild:getTriggerSourceToBuild": { "properties": { + "githubEnterpriseConfig": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, "ref": { "type": "string", "language": { @@ -17712,6 +18018,7 @@ }, "type": "object", "required": [ + "githubEnterpriseConfig", "ref", "repoType", "uri" @@ -17827,6 +18134,194 @@ } } }, + "gcp:cloudbuildv2/ConnectionGithubConfig:ConnectionGithubConfig": { + "properties": { + "appInstallationId": { + "type": "integer", + "description": "GitHub App installation id.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "authorizerCredential": { + "$ref": "#/types/gcp:cloudbuildv2/ConnectionGithubConfigAuthorizerCredential:ConnectionGithubConfigAuthorizerCredential", + "description": "OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, + "gcp:cloudbuildv2/ConnectionGithubConfigAuthorizerCredential:ConnectionGithubConfigAuthorizerCredential": { + "properties": { + "oauthTokenSecretVersion": { + "type": "string", + "description": "A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "username": { + "type": "string", + "description": "The username associated to this token.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "username" + ] + } + } + }, + "gcp:cloudbuildv2/ConnectionGithubEnterpriseConfig:ConnectionGithubEnterpriseConfig": { + "properties": { + "appId": { + "type": "integer", + "description": "Id of the GitHub App created from the manifest.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "appInstallationId": { + "type": "integer", + "description": "ID of the installation of the GitHub App.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "appSlug": { + "type": "string", + "description": "The URL-friendly name of the GitHub App.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "hostUri": { + "type": "string", + "description": "Required. The URI of the GitHub Enterprise host this connection is for.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "privateKeySecretVersion": { + "type": "string", + "description": "SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "serviceDirectoryConfig": { + "$ref": "#/types/gcp:cloudbuildv2/ConnectionGithubEnterpriseConfigServiceDirectoryConfig:ConnectionGithubEnterpriseConfigServiceDirectoryConfig", + "description": "Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "sslCa": { + "type": "string", + "description": "SSL certificate to use for requests to GitHub Enterprise.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "webhookSecretSecretVersion": { + "type": "string", + "description": "SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "hostUri" + ] + }, + "gcp:cloudbuildv2/ConnectionGithubEnterpriseConfigServiceDirectoryConfig:ConnectionGithubEnterpriseConfigServiceDirectoryConfig": { + "properties": { + "service": { + "type": "string", + "description": "Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "service" + ] + }, + "gcp:cloudbuildv2/ConnectionInstallationState:ConnectionInstallationState": { + "properties": { + "actionUri": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "message": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "stage": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "actionUri", + "message", + "stage" + ] + } + } + }, "gcp:clouddeploy/DeliveryPipelineCondition:DeliveryPipelineCondition": { "properties": { "pipelineReadyConditions": { @@ -20452,7 +20947,6 @@ "additionalProperties": { "type": "string" }, - "description": "Annotations is a key value map stored with a resource that\nmay be set by external tools to store and retrieve arbitrary metadata. More\ninfo: http://kubernetes.io/docs/user-guide/annotations\n**Note**: The Cloud Run API may add additional annotations that were not provided in your config.\nIf the provider plan shows a diff where a server-side annotation is added, you can add it to your config\nor apply the lifecycle.ignore_changes rule to the metadata.0.annotations field.\n", "language": { "python": { "mapCase": false @@ -20802,7 +21296,6 @@ "additionalProperties": { "type": "string" }, - "description": "Annotations is a key value map stored with a resource that\nmay be set by external tools to store and retrieve arbitrary metadata. More\ninfo: http://kubernetes.io/docs/user-guide/annotations\n**Note**: The Cloud Run API may add additional annotations that were not provided in your config.\nIf the provider plan shows a diff where a server-side annotation is added, you can add it to your config\nor apply the lifecycle.ignore_changes rule to the metadata.0.annotations field.\nCloud Run (fully managed) uses the following annotation keys to configure features on a Service:\n- `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress)\nfor the Service. For example, `\"run.googleapis.com/ingress\" = \"all\"`.\n", "language": { "python": { "mapCase": false @@ -21035,7 +21528,6 @@ "additionalProperties": { "type": "string" }, - "description": "Annotations is a key value map stored with a resource that\nmay be set by external tools to store and retrieve arbitrary metadata. More\ninfo: http://kubernetes.io/docs/user-guide/annotations\n**Note**: The Cloud Run API may add additional annotations that were not provided in your config.\nIf the provider plan shows a diff where a server-side annotation is added, you can add it to your config\nor apply the lifecycle.ignore_changes rule to the metadata.0.annotations field.\nCloud Run (fully managed) uses the following annotation keys to configure features on a Service:\n- `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress)\nfor the Service. For example, `\"run.googleapis.com/ingress\" = \"all\"`.\n", "language": { "python": { "mapCase": false @@ -21264,7 +21756,6 @@ }, "livenessProbe": { "$ref": "#/types/gcp:cloudrun/ServiceTemplateSpecContainerLivenessProbe:ServiceTemplateSpecContainerLivenessProbe", - "description": "Periodic probe of container liveness. Container will be restarted if the probe fails. More info:\nhttps://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\nStructure is documented below.\n", "language": { "python": { "mapCase": false @@ -23952,7 +24443,8 @@ }, "livenessProbe": { "$ref": "#/types/gcp:cloudrunv2/JobTemplateTemplateContainerLivenessProbe:JobTemplateTemplateContainerLivenessProbe", - "description": "Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\nStructure is documented below.\n", + "description": "(Optional, Deprecated)\nPeriodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\nThis field is not supported in Cloud Run Job currently.\nStructure is documented below.\n", + "deprecationMessage": "Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release.", "language": { "python": { "mapCase": false @@ -23991,7 +24483,8 @@ }, "startupProbe": { "$ref": "#/types/gcp:cloudrunv2/JobTemplateTemplateContainerStartupProbe:JobTemplateTemplateContainerStartupProbe", - "description": "Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\nStructure is documented below.\n", + "description": "(Optional, Deprecated)\nStartup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes\nThis field is not supported in Cloud Run Job currently.\nStructure is documented below.\n", + "deprecationMessage": "Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release.", "language": { "python": { "mapCase": false @@ -25223,7 +25716,7 @@ }, "httpGet": { "$ref": "#/types/gcp:cloudrunv2/ServiceTemplateContainerLivenessProbeHttpGet:ServiceTemplateContainerLivenessProbeHttpGet", - "description": "HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified.\nStructure is documented below.\n", + "description": "HTTPGet specifies the http request to perform.\nStructure is documented below.\n", "language": { "python": { "mapCase": false @@ -25250,7 +25743,8 @@ }, "tcpSocket": { "$ref": "#/types/gcp:cloudrunv2/ServiceTemplateContainerLivenessProbeTcpSocket:ServiceTemplateContainerLivenessProbeTcpSocket", - "description": "TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified.\nStructure is documented below.\n", + "description": "(Optional, Deprecated)\nTCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently.\nStructure is documented below.\n", + "deprecationMessage": "Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release.", "language": { "python": { "mapCase": false @@ -27065,6 +27559,14 @@ } } }, + "cloudDataLineageIntegration": { + "$ref": "#/types/gcp:composer/EnvironmentConfigSoftwareConfigCloudDataLineageIntegration:EnvironmentConfigSoftwareConfigCloudDataLineageIntegration", + "language": { + "python": { + "mapCase": false + } + } + }, "envVariables": { "type": "object", "additionalProperties": { @@ -27117,6 +27619,7 @@ "language": { "nodejs": { "requiredOutputs": [ + "cloudDataLineageIntegration", "imageVersion", "pythonVersion", "schedulerCount" @@ -27124,6 +27627,22 @@ } } }, + "gcp:composer/EnvironmentConfigSoftwareConfigCloudDataLineageIntegration:EnvironmentConfigSoftwareConfigCloudDataLineageIntegration": { + "properties": { + "enabled": { + "type": "boolean", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "enabled" + ] + }, "gcp:composer/EnvironmentConfigWebServerConfig:EnvironmentConfigWebServerConfig": { "properties": { "machineType": { @@ -28039,6 +28558,17 @@ } } }, + "cloudDataLineageIntegrations": { + "type": "array", + "items": { + "$ref": "#/types/gcp:composer/getEnvironmentConfigSoftwareConfigCloudDataLineageIntegration:getEnvironmentConfigSoftwareConfigCloudDataLineageIntegration" + }, + "language": { + "python": { + "mapCase": false + } + } + }, "envVariables": { "type": "object", "additionalProperties": { @@ -28089,6 +28619,7 @@ "type": "object", "required": [ "airflowConfigOverrides", + "cloudDataLineageIntegrations", "envVariables", "imageVersion", "pypiPackages", @@ -28101,6 +28632,27 @@ } } }, + "gcp:composer/getEnvironmentConfigSoftwareConfigCloudDataLineageIntegration:getEnvironmentConfigSoftwareConfigCloudDataLineageIntegration": { + "properties": { + "enabled": { + "type": "boolean", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "enabled" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:composer/getEnvironmentConfigWebServerConfig:getEnvironmentConfigWebServerConfig": { "properties": { "machineType": { @@ -28524,7 +29076,6 @@ }, "scaleDownControl": { "$ref": "#/types/gcp:compute/AutoscalarAutoscalingPolicyScaleDownControl:AutoscalarAutoscalingPolicyScaleDownControl", - "description": "Defines scale down controls to reduce the risk of response latency\nand outages due to abrupt scale-in events\nStructure is documented below.\n", "language": { "python": { "mapCase": false @@ -28616,7 +29167,6 @@ "properties": { "filter": { "type": "string", - "description": "A filter string to be used as the filter string for\na Stackdriver Monitoring TimeSeries.list API call.\nThis filter is used to select a specific TimeSeries for\nthe purpose of autoscaling and to determine whether the metric\nis exporting per-instance or per-group data.\nYou can only use the AND operator for joining selectors.\nYou can only use direct equality comparison operator (=) without\nany functions for each selector.\nYou can specify the metric in both the filter string and in the\nmetric field. However, if specified in both places, the metric must\nbe identical.\nThe monitored resource type determines what kind of values are\nexpected for the metric. If it is a gce_instance, the autoscaler\nexpects the metric to include a separate TimeSeries for each\ninstance in a group. In such a case, you cannot filter on resource\nlabels.\nIf the resource type is any other value, the autoscaler expects\nthis metric to contain values that apply to the entire autoscaled\ninstance group and resource label filtering can be performed to\npoint autoscaler at the correct TimeSeries to scale upon.\nThis is called a per-group metric for the purpose of autoscaling.\nIf not specified, the type defaults to gce_instance.\nYou should provide a filter that is selective enough to pick just\none TimeSeries for the autoscaled group or for each of the instances\n(if you are using gce_instance resource type). If multiple\nTimeSeries are returned upon the query execution, the autoscaler\nwill sum their respective values to obtain its scaling value.\n", "language": { "python": { "mapCase": false @@ -28634,7 +29184,6 @@ }, "singleInstanceAssignment": { "type": "number", - "description": "If scaling is based on a per-group metric value that represents the\ntotal amount of work to be done or resource usage, set this value to\nan amount assigned for a single instance of the scaled group.\nThe autoscaler will keep the number of instances proportional to the\nvalue of this metric, the metric itself should not change value due\nto group resizing.\nFor example, a good metric to use with the target is\n`pubsub.googleapis.com/subscription/num_undelivered_messages`\nor a custom metric exporting the total number of requests coming to\nyour instances.\nA bad example would be a metric exporting an average or median\nlatency, since this value can't include a chunk assignable to a\nsingle instance, it could be better used with utilization_target\ninstead.\n", "language": { "python": { "mapCase": false @@ -28901,7 +29450,6 @@ }, "scaleDownControl": { "$ref": "#/types/gcp:compute/AutoscalerAutoscalingPolicyScaleDownControl:AutoscalerAutoscalingPolicyScaleDownControl", - "description": "Defines scale down controls to reduce the risk of response latency\nand outages due to abrupt scale-in events\nStructure is documented below.\n", "language": { "python": { "mapCase": false @@ -28993,7 +29541,6 @@ "properties": { "filter": { "type": "string", - "description": "A filter string to be used as the filter string for\na Stackdriver Monitoring TimeSeries.list API call.\nThis filter is used to select a specific TimeSeries for\nthe purpose of autoscaling and to determine whether the metric\nis exporting per-instance or per-group data.\nYou can only use the AND operator for joining selectors.\nYou can only use direct equality comparison operator (=) without\nany functions for each selector.\nYou can specify the metric in both the filter string and in the\nmetric field. However, if specified in both places, the metric must\nbe identical.\nThe monitored resource type determines what kind of values are\nexpected for the metric. If it is a gce_instance, the autoscaler\nexpects the metric to include a separate TimeSeries for each\ninstance in a group. In such a case, you cannot filter on resource\nlabels.\nIf the resource type is any other value, the autoscaler expects\nthis metric to contain values that apply to the entire autoscaled\ninstance group and resource label filtering can be performed to\npoint autoscaler at the correct TimeSeries to scale upon.\nThis is called a per-group metric for the purpose of autoscaling.\nIf not specified, the type defaults to gce_instance.\nYou should provide a filter that is selective enough to pick just\none TimeSeries for the autoscaled group or for each of the instances\n(if you are using gce_instance resource type). If multiple\nTimeSeries are returned upon the query execution, the autoscaler\nwill sum their respective values to obtain its scaling value.\n", "language": { "python": { "mapCase": false @@ -29011,7 +29558,6 @@ }, "singleInstanceAssignment": { "type": "number", - "description": "If scaling is based on a per-group metric value that represents the\ntotal amount of work to be done or resource usage, set this value to\nan amount assigned for a single instance of the scaled group.\nThe autoscaler will keep the number of instances proportional to the\nvalue of this metric, the metric itself should not change value due\nto group resizing.\nFor example, a good metric to use with the target is\n`pubsub.googleapis.com/subscription/num_undelivered_messages`\nor a custom metric exporting the total number of requests coming to\nyour instances.\nA bad example would be a metric exporting an average or median\nlatency, since this value can't include a chunk assignable to a\nsingle instance, it could be better used with utilization_target\ninstead.\n", "language": { "python": { "mapCase": false @@ -29797,7 +30343,6 @@ "properties": { "connectTimeout": { "$ref": "#/types/gcp:compute/BackendServiceCircuitBreakersConnectTimeout:BackendServiceCircuitBreakersConnectTimeout", - "description": "The timeout for new network connections to hosts.\nStructure is documented below.\n", "language": { "python": { "mapCase": false @@ -30093,6 +30638,72 @@ } } }, + "gcp:compute/BackendServiceLocalityLbPolicy:BackendServiceLocalityLbPolicy": { + "properties": { + "customPolicy": { + "$ref": "#/types/gcp:compute/BackendServiceLocalityLbPolicyCustomPolicy:BackendServiceLocalityLbPolicyCustomPolicy", + "description": "The configuration for a custom policy implemented by the user and\ndeployed with the client.\nStructure is documented below.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "policy": { + "$ref": "#/types/gcp:compute/BackendServiceLocalityLbPolicyPolicy:BackendServiceLocalityLbPolicyPolicy", + "description": "The configuration for a built-in load balancing policy.\nStructure is documented below.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, + "gcp:compute/BackendServiceLocalityLbPolicyCustomPolicy:BackendServiceLocalityLbPolicyCustomPolicy": { + "properties": { + "data": { + "type": "string", + "description": "An optional, arbitrary JSON object with configuration data, understood\nby a locally installed custom policy implementation.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "name": { + "type": "string", + "description": "Identifies the custom policy.\nThe value should match the type the custom implementation is registered\nwith on the gRPC clients. It should follow protocol buffer\nmessage naming conventions and include the full path (e.g.\nmyorg.CustomLbPolicy). The maximum length is 256 characters.\nNote that specifying the same custom policy more than once for a\nbackend is not a valid configuration and will be rejected.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "name" + ] + }, + "gcp:compute/BackendServiceLocalityLbPolicyPolicy:BackendServiceLocalityLbPolicyPolicy": { + "properties": { + "name": { + "type": "string", + "description": "The name of a locality load balancer policy to be used. The value\nshould be one of the predefined ones as supported by localityLbPolicy,\nalthough at the moment only ROUND_ROBIN is supported.\nThis field should only be populated when the customPolicy field is not\nused.\nNote that specifying the same policy more than once for a backend is\nnot a valid configuration and will be rejected.\nThe possible values are:\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "name" + ] + }, "gcp:compute/BackendServiceLogConfig:BackendServiceLogConfig": { "properties": { "enable": { @@ -31416,7 +32027,7 @@ }, "diskEncryptionKeyRaw": { "type": "string", - "description": "A 256-bit [customer-supplied encryption key]\n(\u003chttps://cloud.google.com/compute/docs/disks/customer-supplied-encryption\u003e),\nencoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4)\nto encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set.\n", + "description": "A 256-bit [customer-supplied encryption key]\n(https://cloud.google.com/compute/docs/disks/customer-supplied-encryption),\nencoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4)\nto encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set.\n", "language": { "python": { "mapCase": false @@ -31499,7 +32110,7 @@ }, "diskEncryptionKeyRaw": { "type": "string", - "description": "A 256-bit [customer-supplied encryption key]\n(\u003chttps://cloud.google.com/compute/docs/disks/customer-supplied-encryption\u003e),\nencoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4)\nto encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw`\nmay be set.\n", + "description": "A 256-bit [customer-supplied encryption key]\n(https://cloud.google.com/compute/docs/disks/customer-supplied-encryption),\nencoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4)\nto encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw`\nmay be set.\n", "language": { "python": { "mapCase": false @@ -34004,7 +34615,6 @@ "items": { "$ref": "#/types/gcp:compute/InstanceNetworkInterfaceAccessConfig:InstanceNetworkInterfaceAccessConfig" }, - "description": "Access configurations, i.e. IPs via which this\ninstance can be accessed via the Internet. Omit to ensure that the instance\nis not accessible from the Internet. If omitted, ssh will not\nwork unless this provider can send traffic to the instance's network (e.g. via\ntunnel or because it is running on another cloud instance on that network).\nThis block can be repeated multiple times. Structure documented below.\n", "language": { "python": { "mapCase": false @@ -34400,7 +35010,7 @@ }, "provisioningModel": { "type": "string", - "description": "Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`,\n`preemptible` should be `true` and `auto_restart` should be\n`false`. For more info about\n`SPOT`, read [here](https://cloud.google.com/compute/docs/instances/spot)\n", + "description": "Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, \n`preemptible` should be `true` and `auto_restart` should be\n`false`. For more info about\n`SPOT`, read [here](https://cloud.google.com/compute/docs/instances/spot)\n", "language": { "python": { "mapCase": false @@ -34928,7 +35538,6 @@ "items": { "$ref": "#/types/gcp:compute/InstanceTemplateNetworkInterfaceAccessConfig:InstanceTemplateNetworkInterfaceAccessConfig" }, - "description": "Access configurations, i.e. IPs via which this\ninstance can be accessed via the Internet. Omit to ensure that the instance\nis not accessible from the Internet (this means that ssh provisioners will\nnot work unless you can send traffic to the instance's\nnetwork (e.g. via tunnel or because it is running on another cloud instance\non that network). This block can be repeated multiple times. Structure documented below.\n", "language": { "python": { "mapCase": false @@ -34971,7 +35580,6 @@ }, "name": { "type": "string", - "description": "The name of the instance template. If you leave\nthis blank, the provider will auto-generate a unique name.\n", "language": { "python": { "mapCase": false @@ -35285,7 +35893,6 @@ }, "maxRunDuration": { "$ref": "#/types/gcp:compute/InstanceTemplateSchedulingMaxRunDuration:InstanceTemplateSchedulingMaxRunDuration", - "description": "Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below.\n", "language": { "python": { "mapCase": false @@ -35904,6 +36511,66 @@ "startTime" ] }, + "gcp:compute/NodeGroupShareSettings:NodeGroupShareSettings": { + "properties": { + "projectMaps": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/NodeGroupShareSettingsProjectMap:NodeGroupShareSettingsProjectMap" + }, + "description": "A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS.\nStructure is documented below.\n", + "language": { + "python": { + "mapCase": false + } + }, + "willReplaceOnChanges": true + }, + "shareType": { + "type": "string", + "description": "Node group sharing type.\nPossible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`.\n", + "language": { + "python": { + "mapCase": false + } + }, + "willReplaceOnChanges": true + } + }, + "type": "object", + "required": [ + "shareType" + ] + }, + "gcp:compute/NodeGroupShareSettingsProjectMap:NodeGroupShareSettingsProjectMap": { + "properties": { + "id": { + "type": "string", + "description": "The identifier for this object. Format specified above.\n", + "language": { + "python": { + "mapCase": false + } + }, + "willReplaceOnChanges": true + }, + "projectId": { + "type": "string", + "description": "The project id/number should be the same as the key of this project config in the project map.\n", + "language": { + "python": { + "mapCase": false + } + }, + "willReplaceOnChanges": true + } + }, + "type": "object", + "required": [ + "id", + "projectId" + ] + }, "gcp:compute/NodeTemplateNodeTypeFlexibility:NodeTemplateNodeTypeFlexibility": { "properties": { "cpus": { @@ -36363,7 +37030,6 @@ }, "scaleDownControl": { "$ref": "#/types/gcp:compute/RegionAutoscalerAutoscalingPolicyScaleDownControl:RegionAutoscalerAutoscalingPolicyScaleDownControl", - "description": "Defines scale down controls to reduce the risk of response latency\nand outages due to abrupt scale-in events\nStructure is documented below.\n", "language": { "python": { "mapCase": false @@ -36454,7 +37120,6 @@ "properties": { "filter": { "type": "string", - "description": "A filter string to be used as the filter string for\na Stackdriver Monitoring TimeSeries.list API call.\nThis filter is used to select a specific TimeSeries for\nthe purpose of autoscaling and to determine whether the metric\nis exporting per-instance or per-group data.\nYou can only use the AND operator for joining selectors.\nYou can only use direct equality comparison operator (=) without\nany functions for each selector.\nYou can specify the metric in both the filter string and in the\nmetric field. However, if specified in both places, the metric must\nbe identical.\nThe monitored resource type determines what kind of values are\nexpected for the metric. If it is a gce_instance, the autoscaler\nexpects the metric to include a separate TimeSeries for each\ninstance in a group. In such a case, you cannot filter on resource\nlabels.\nIf the resource type is any other value, the autoscaler expects\nthis metric to contain values that apply to the entire autoscaled\ninstance group and resource label filtering can be performed to\npoint autoscaler at the correct TimeSeries to scale upon.\nThis is called a per-group metric for the purpose of autoscaling.\nIf not specified, the type defaults to gce_instance.\nYou should provide a filter that is selective enough to pick just\none TimeSeries for the autoscaled group or for each of the instances\n(if you are using gce_instance resource type). If multiple\nTimeSeries are returned upon the query execution, the autoscaler\nwill sum their respective values to obtain its scaling value.\n", "language": { "python": { "mapCase": false @@ -36472,7 +37137,6 @@ }, "singleInstanceAssignment": { "type": "number", - "description": "If scaling is based on a per-group metric value that represents the\ntotal amount of work to be done or resource usage, set this value to\nan amount assigned for a single instance of the scaled group.\nThe autoscaler will keep the number of instances proportional to the\nvalue of this metric, the metric itself should not change value due\nto group resizing.\nFor example, a good metric to use with the target is\n`pubsub.googleapis.com/subscription/num_undelivered_messages`\nor a custom metric exporting the total number of requests coming to\nyour instances.\nA bad example would be a metric exporting an average or median\nlatency, since this value can't include a chunk assignable to a\nsingle instance, it could be better used with utilization_target\ninstead.\n", "language": { "python": { "mapCase": false @@ -36975,7 +37639,6 @@ }, "ttl": { "type": "integer", - "description": "The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s\n(30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL.\n", "language": { "python": { "mapCase": false @@ -36989,7 +37652,6 @@ "properties": { "connectTimeout": { "$ref": "#/types/gcp:compute/RegionBackendServiceCircuitBreakersConnectTimeout:RegionBackendServiceCircuitBreakersConnectTimeout", - "description": "The timeout for new network connections to hosts.\nStructure is documented below.\n", "language": { "python": { "mapCase": false @@ -37670,7 +38332,6 @@ "properties": { "kmsKeyName": { "type": "string", - "description": "The name of the encryption key that is stored in Google Cloud KMS.\n", "language": { "python": { "mapCase": false @@ -42708,6 +43369,15 @@ }, "gcp:compute/SecurityPolicyAdaptiveProtectionConfig:SecurityPolicyAdaptiveProtectionConfig": { "properties": { + "autoDeployConfig": { + "$ref": "#/types/gcp:compute/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig:SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig", + "description": ") Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below.\n", + "language": { + "python": { + "mapCase": false + } + } + }, "layer7DdosDefenseConfig": { "$ref": "#/types/gcp:compute/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig:SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig", "description": "Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below.\n", @@ -42720,6 +43390,47 @@ }, "type": "object" }, + "gcp:compute/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig:SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig": { + "properties": { + "confidenceThreshold": { + "type": "number", + "description": "Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "expirationSec": { + "type": "integer", + "description": "Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "impactedBaselineThreshold": { + "type": "number", + "description": "Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "loadThreshold": { + "type": "number", + "description": "Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, "gcp:compute/SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig:SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig": { "properties": { "enable": { @@ -48157,6 +48868,95 @@ } } }, + "gcp:compute/getBackendServiceLocalityLbPolicy:getBackendServiceLocalityLbPolicy": { + "properties": { + "customPolicies": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getBackendServiceLocalityLbPolicyCustomPolicy:getBackendServiceLocalityLbPolicyCustomPolicy" + }, + "language": { + "python": { + "mapCase": false + } + } + }, + "policies": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getBackendServiceLocalityLbPolicyPolicy:getBackendServiceLocalityLbPolicyPolicy" + }, + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "customPolicies", + "policies" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getBackendServiceLocalityLbPolicyCustomPolicy:getBackendServiceLocalityLbPolicyCustomPolicy": { + "properties": { + "data": { + "type": "string", + "language": { + "python": { + "mapCase": false + } + } + }, + "name": { + "type": "string", + "description": "The name of the Backend Service.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "data", + "name" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, + "gcp:compute/getBackendServiceLocalityLbPolicyPolicy:getBackendServiceLocalityLbPolicyPolicy": { + "properties": { + "name": { + "type": "string", + "description": "The name of the Backend Service.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "name" + ], + "language": { + "nodejs": { + "requiredInputs": [] + } + } + }, "gcp:compute/getBackendServiceLogConfig:getBackendServiceLogConfig": { "properties": { "enable": { @@ -50938,7 +51738,6 @@ "items": { "$ref": "#/types/gcp:compute/getInstanceTemplateNetworkInterfaceAccessConfig:getInstanceTemplateNetworkInterfaceAccessConfig" }, - "description": "Access configurations, i.e. IPs via which this\ninstance can be accessed via the Internet. Omit to ensure that the instance\nis not accessible from the Internet (this means that ssh provisioners will\nnot work unless you are running the prvovider can send traffic to the instance's\nnetwork (e.g. via tunnel or because it is running on another cloud instance\non that network). This block can be repeated multiple times. Structure documented below.\n", "language": { "python": { "mapCase": false @@ -54801,7 +55600,7 @@ }, "istioConfig": { "$ref": "#/types/gcp:container/ClusterAddonsConfigIstioConfig:ClusterAddonsConfigIstioConfig", - "description": ".\nStructure is documented below.\n", + "description": ").\nStructure is documented below.\n", "language": { "python": { "mapCase": false @@ -54810,7 +55609,7 @@ }, "kalmConfig": { "$ref": "#/types/gcp:container/ClusterAddonsConfigKalmConfig:ClusterAddonsConfigKalmConfig", - "description": ".\nConfiguration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable.\n", + "description": ").\nConfiguration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable.\n", "language": { "python": { "mapCase": false @@ -55194,7 +55993,7 @@ }, "minCpuPlatform": { "type": "string", - "description": "Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the\nspecified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such\nas \"Intel Haswell\" or \"Intel Sandy Bridge\".\n", + "description": ")\nMinimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the\nspecified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such\nas \"Intel Haswell\" or \"Intel Sandy Bridge\".\n", "language": { "python": { "mapCase": false @@ -56124,7 +56923,7 @@ "properties": { "bootDiskKmsKey": { "type": "string", - "description": "The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: \u003chttps://cloud.google.com/compute/docs/disks/customer-managed-encryption\u003e\n", + "description": "The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption\n", "language": { "python": { "mapCase": false @@ -56177,7 +56976,6 @@ "items": { "$ref": "#/types/gcp:container/ClusterNodeConfigGuestAccelerator:ClusterNodeConfigGuestAccelerator" }, - "description": "List of the type and count of accelerator cards attached to the instance.\nStructure documented below.\n", "language": { "python": { "mapCase": false @@ -56269,7 +57067,6 @@ "additionalProperties": { "type": "string" }, - "description": "The metadata key/value pairs assigned to instances in\nthe cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to\n`true` by the API; if `metadata` is set but that default value is not\nincluded, the provider will attempt to unset the value. To avoid this, set the\nvalue in your config.\n", "language": { "python": { "mapCase": false @@ -56344,6 +57141,7 @@ }, "sandboxConfig": { "$ref": "#/types/gcp:container/ClusterNodeConfigSandboxConfig:ClusterNodeConfigSandboxConfig", + "description": ") [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = \"COS_CONTAINERD\"` and `node_version = \"1.12.7-gke.17\"` or later to use it.\nStructure is documented below.\n", "language": { "python": { "mapCase": false @@ -56398,7 +57196,6 @@ "items": { "$ref": "#/types/gcp:container/ClusterNodeConfigTaint:ClusterNodeConfigTaint" }, - "description": "A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)\nto apply to nodes. GKE's API can only set this field on cluster creation.\nHowever, GKE will add taints to your nodes if you enable certain features such\nas GPUs. If this field is set, any diffs on this field will cause the provider to\nrecreate the underlying resource. Taint values can be updated safely in\nKubernetes (eg. through `kubectl`), and it's recommended that you do not use\nthis field to manage taints. If you do, `lifecycle.ignore_changes` is\nrecommended. Structure is documented below.\n", "language": { "python": { "mapCase": false @@ -56753,7 +57550,7 @@ "properties": { "mode": { "type": "string", - "description": "How to expose the node metadata to the workload running on the node.\nAccepted values are:\n* UNSPECIFIED: Not Set\n* GCE_METADATA: Expose all Compute Engine metadata to pods.\n* GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level.\n", + "description": "How to expose the node metadata to the workload running on the node.\nAccepted values are:\n* MODE_UNSPECIFIED: Not Set\n* GCE_METADATA: Expose all Compute Engine metadata to pods.\n* GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level.\n", "language": { "python": { "mapCase": false @@ -56847,7 +57644,6 @@ }, "networkConfig": { "$ref": "#/types/gcp:container/ClusterNodePoolNetworkConfig:ClusterNodePoolNetworkConfig", - "description": "Configuration for\n[Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below\n", "language": { "python": { "mapCase": false @@ -56856,7 +57652,6 @@ }, "nodeConfig": { "$ref": "#/types/gcp:container/ClusterNodePoolNodeConfig:ClusterNodePoolNodeConfig", - "description": "Parameters used in creating the default node pool.\nGenerally, this field should not be used at the same time as a\n`gcp.container.NodePool` or a `node_pool` block; this configuration\nmanages the default node pool, which isn't recommended to be used.\nStructure is documented below.\n", "language": { "python": { "mapCase": false @@ -57096,7 +57891,6 @@ "properties": { "createPodRange": { "type": "boolean", - "description": "Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified.\n", "language": { "python": { "mapCase": false @@ -57115,7 +57909,6 @@ }, "podIpv4CidrBlock": { "type": "string", - "description": "The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use.\n", "language": { "python": { "mapCase": false @@ -57125,7 +57918,6 @@ }, "podRange": { "type": "string", - "description": "The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID.\n", "language": { "python": { "mapCase": false @@ -57148,7 +57940,7 @@ "properties": { "bootDiskKmsKey": { "type": "string", - "description": "The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: \u003chttps://cloud.google.com/compute/docs/disks/customer-managed-encryption\u003e\n", + "description": "The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption\n", "language": { "python": { "mapCase": false @@ -57201,7 +57993,6 @@ "items": { "$ref": "#/types/gcp:container/ClusterNodePoolNodeConfigGuestAccelerator:ClusterNodePoolNodeConfigGuestAccelerator" }, - "description": "List of the type and count of accelerator cards attached to the instance.\nStructure documented below.\n", "language": { "python": { "mapCase": false @@ -57292,7 +58083,6 @@ "additionalProperties": { "type": "string" }, - "description": "The metadata key/value pairs assigned to instances in\nthe cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to\n`true` by the API; if `metadata` is set but that default value is not\nincluded, the provider will attempt to unset the value. To avoid this, set the\nvalue in your config.\n", "language": { "python": { "mapCase": false @@ -57367,6 +58157,7 @@ }, "sandboxConfig": { "$ref": "#/types/gcp:container/ClusterNodePoolNodeConfigSandboxConfig:ClusterNodePoolNodeConfigSandboxConfig", + "description": ") [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = \"COS_CONTAINERD\"` and `node_version = \"1.12.7-gke.17\"` or later to use it.\nStructure is documented below.\n", "language": { "python": { "mapCase": false @@ -57421,7 +58212,6 @@ "items": { "$ref": "#/types/gcp:container/ClusterNodePoolNodeConfigTaint:ClusterNodePoolNodeConfigTaint" }, - "description": "A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/)\nto apply to nodes. GKE's API can only set this field on cluster creation.\nHowever, GKE will add taints to your nodes if you enable certain features such\nas GPUs. If this field is set, any diffs on this field will cause the provider to\nrecreate the underlying resource. Taint values can be updated safely in\nKubernetes (eg. through `kubectl`), and it's recommended that you do not use\nthis field to manage taints. If you do, `lifecycle.ignore_changes` is\nrecommended. Structure is documented below.\n", "language": { "python": { "mapCase": false @@ -57775,7 +58565,7 @@ "properties": { "mode": { "type": "string", - "description": "How to expose the node metadata to the workload running on the node.\nAccepted values are:\n* UNSPECIFIED: Not Set\n* GCE_METADATA: Expose all Compute Engine metadata to pods.\n* GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level.\n", + "description": "How to expose the node metadata to the workload running on the node.\nAccepted values are:\n* MODE_UNSPECIFIED: Not Set\n* GCE_METADATA: Expose all Compute Engine metadata to pods.\n* GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level.\n", "language": { "python": { "mapCase": false @@ -58042,7 +58832,6 @@ }, "masterGlobalAccessConfig": { "$ref": "#/types/gcp:container/ClusterPrivateClusterConfigMasterGlobalAccessConfig:ClusterPrivateClusterConfigMasterGlobalAccessConfig", - "description": "Controls cluster master global\naccess settings. If unset, the provider will no longer manage this field and will\nnot modify the previously-set value. Structure is documented below.\n", "language": { "python": { "mapCase": false @@ -67994,9 +68783,27 @@ } } }, + "publishFindingsToCloudDataCatalog": { + "$ref": "#/types/gcp:dataloss/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog:PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog", + "description": "Publish findings of a DlpJob to Data Catalog.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "publishSummaryToCscc": { + "$ref": "#/types/gcp:dataloss/PreventionJobTriggerInspectJobActionPublishSummaryToCscc:PreventionJobTriggerInspectJobActionPublishSummaryToCscc", + "description": "Publish the result summary of a DlpJob to the Cloud Security Command Center.\n", + "language": { + "python": { + "mapCase": false + } + } + }, "saveFindings": { "$ref": "#/types/gcp:dataloss/PreventionJobTriggerInspectJobActionSaveFindings:PreventionJobTriggerInspectJobActionSaveFindings", - "description": "Schedule for triggered jobs\nStructure is documented below.\n", + "description": "If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk\nStructure is documented below.\n", "language": { "python": { "mapCase": false @@ -68023,6 +68830,12 @@ "topic" ] }, + "gcp:dataloss/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog:PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog": { + "type": "object" + }, + "gcp:dataloss/PreventionJobTriggerInspectJobActionPublishSummaryToCscc:PreventionJobTriggerInspectJobActionPublishSummaryToCscc": { + "type": "object" + }, "gcp:dataloss/PreventionJobTriggerInspectJobActionSaveFindings:PreventionJobTriggerInspectJobActionSaveFindings": { "properties": { "outputConfig": { @@ -69993,6 +70806,24 @@ }, "willReplaceOnChanges": true }, + "nodeGroupAffinity": { + "$ref": "#/types/gcp:dataproc/ClusterClusterConfigGceClusterConfigNodeGroupAffinity:ClusterClusterConfigGceClusterConfigNodeGroupAffinity", + "description": "Node Group Affinity for sole-tenant clusters.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "reservationAffinity": { + "$ref": "#/types/gcp:dataproc/ClusterClusterConfigGceClusterConfigReservationAffinity:ClusterClusterConfigGceClusterConfigReservationAffinity", + "description": "Reservation Affinity for consuming zonal reservation.\n", + "language": { + "python": { + "mapCase": false + } + } + }, "serviceAccount": { "type": "string", "description": "The service account to be used by the Node VMs.\nIf not specified, the \"default\" service account is used.\n", @@ -70064,6 +70895,8 @@ "nodejs": { "requiredOutputs": [ "network", + "nodeGroupAffinity", + "reservationAffinity", "serviceAccountScopes", "shieldedInstanceConfig", "zone" @@ -70071,6 +70904,62 @@ } } }, + "gcp:dataproc/ClusterClusterConfigGceClusterConfigNodeGroupAffinity:ClusterClusterConfigGceClusterConfigNodeGroupAffinity": { + "properties": { + "nodeGroupUri": { + "type": "string", + "description": "The URI of a sole-tenant node group resource that the cluster will be created on.\n", + "language": { + "python": { + "mapCase": false + } + }, + "willReplaceOnChanges": true + } + }, + "type": "object", + "required": [ + "nodeGroupUri" + ] + }, + "gcp:dataproc/ClusterClusterConfigGceClusterConfigReservationAffinity:ClusterClusterConfigGceClusterConfigReservationAffinity": { + "properties": { + "consumeReservationType": { + "type": "string", + "description": "Corresponds to the type of reservation consumption.\n", + "language": { + "python": { + "mapCase": false + } + }, + "willReplaceOnChanges": true + }, + "key": { + "type": "string", + "description": "Corresponds to the label key of reservation resource.\n", + "language": { + "python": { + "mapCase": false + } + }, + "willReplaceOnChanges": true + }, + "values": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Corresponds to the label values of reservation resource.\n", + "language": { + "python": { + "mapCase": false + } + }, + "willReplaceOnChanges": true + } + }, + "type": "object" + }, "gcp:dataproc/ClusterClusterConfigGceClusterConfigShieldedInstanceConfig:ClusterClusterConfigGceClusterConfigShieldedInstanceConfig": { "properties": { "enableIntegrityMonitoring": { @@ -70384,7 +71273,7 @@ }, "preemptibility": { "type": "string", - "description": "Specifies the preemptibility of the secondary workers. The default value is `PREEMPTIBLE`\nAccepted values are:\n* PREEMPTIBILITY_UNSPECIFIED\n* NON_PREEMPTIBLE\n* PREEMPTIBLE\n", + "description": "Specifies the preemptibility of the secondary workers. The default value is `PREEMPTIBLE`\nAccepted values are:\n* PREEMPTIBILITY_UNSPECIFIED\n* NON_PREEMPTIBLE\n* PREEMPTIBLE\n* SPOT\n", "language": { "python": { "mapCase": false @@ -76236,6 +77125,16 @@ } } }, + "kmsKeyName": { + "type": "string", + "description": "Describes the Cloud KMS encryption key that will be used to protect destination BigQuery\ntable. The BigQuery Service Account associated with your project requires access to this\nencryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}.\nSee https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information.\n", + "language": { + "python": { + "mapCase": false + } + }, + "willReplaceOnChanges": true + }, "location": { "type": "string", "description": "The geographic location where the dataset should reside.\nSee https://cloud.google.com/bigquery/docs/locations for supported locations.\n", @@ -80394,6 +81293,7 @@ "properties": { "description": { "type": "string", + "description": "An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n", "language": { "python": { "mapCase": false @@ -80403,6 +81303,7 @@ }, "expression": { "type": "string", + "description": "Textual representation of an expression in Common Expression Language syntax.\n", "language": { "python": { "mapCase": false @@ -80412,6 +81313,7 @@ }, "title": { "type": "string", + "description": "A title for the expression, i.e. a short string describing its purpose.\n", "language": { "python": { "mapCase": false @@ -82640,6 +83542,108 @@ }, "type": "object" }, + "gcp:iam/AccessBoundaryPolicyRule:AccessBoundaryPolicyRule": { + "properties": { + "accessBoundaryRule": { + "$ref": "#/types/gcp:iam/AccessBoundaryPolicyRuleAccessBoundaryRule:AccessBoundaryPolicyRuleAccessBoundaryRule", + "description": "An access boundary rule in an IAM policy.\nStructure is documented below.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "description": { + "type": "string", + "description": "The description of the rule.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, + "gcp:iam/AccessBoundaryPolicyRuleAccessBoundaryRule:AccessBoundaryPolicyRuleAccessBoundaryRule": { + "properties": { + "availabilityCondition": { + "$ref": "#/types/gcp:iam/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition:AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition", + "description": "The availability condition further constrains the access allowed by the access boundary rule.\nStructure is documented below.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "availablePermissions": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of permissions that may be allowed for use on the specified resource.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "availableResource": { + "type": "string", + "description": "The full resource name of a Google Cloud resource entity.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object" + }, + "gcp:iam/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition:AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition": { + "properties": { + "description": { + "type": "string", + "description": "Description of the expression. This is a longer text which describes the expression,\ne.g. when hovered over it in a UI.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "expression": { + "type": "string", + "description": "Textual representation of an expression in Common Expression Language syntax.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "location": { + "type": "string", + "description": "String indicating the location of the expression for error reporting,\ne.g. a file name and a position in the file.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "title": { + "type": "string", + "description": "Title for the expression, i.e. a short string describing its purpose.\nThis can be used e.g. in UIs which allow to enter the expression.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "expression" + ] + }, "gcp:iam/DenyPolicyRule:DenyPolicyRule": { "properties": { "denyRule": { @@ -90292,6 +91296,7 @@ "properties": { "description": { "type": "string", + "description": "An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI.\n", "language": { "python": { "mapCase": false @@ -90301,6 +91306,7 @@ }, "expression": { "type": "string", + "description": "Textual representation of an expression in Common Expression Language syntax.\n", "language": { "python": { "mapCase": false @@ -90310,6 +91316,7 @@ }, "title": { "type": "string", + "description": "A title for the expression, i.e. a short string describing its purpose.\n", "language": { "python": { "mapCase": false @@ -90370,7 +91377,7 @@ "items": { "type": "string" }, - "description": "Identities that do not cause logging for this type of permission.\nEach entry can have one of the following values:\n* **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n", + "description": "Identities that do not cause logging for this type of permission. The format is the same as that for `members`.\n", "language": { "python": { "mapCase": false @@ -96712,7 +97719,7 @@ }, "rdbSnapshotPeriod": { "type": "string", - "description": "Optional. Available snapshot periods for scheduling.\n- ONE_HOUR:\tSnapshot every 1 hour.\n- SIX_HOURS:\tSnapshot every 6 hours.\n- TWELVE_HOURS:\tSnapshot every 12 hours.\n- TWENTY_FOUR_HOURS:\tSnapshot every 24 horus.\nPossible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`.\n", + "description": "Optional. Available snapshot periods for scheduling.\n- ONE_HOUR:\tSnapshot every 1 hour.\n- SIX_HOURS:\tSnapshot every 6 hours.\n- TWELVE_HOURS:\tSnapshot every 12 hours.\n- TWENTY_FOUR_HOURS:\tSnapshot every 24 hours.\nPossible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`.\n", "language": { "python": { "mapCase": false @@ -104771,6 +105778,98 @@ "requiredInputs": [] } } + }, + "gcp:workstations/WorkstationClusterCondition:WorkstationClusterCondition": { + "properties": { + "code": { + "type": "integer", + "description": "The status code, which should be an enum value of google.rpc.Code.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "details": { + "type": "array", + "items": { + "type": "object", + "additionalProperties": { + "$ref": "pulumi.json#/Any" + } + }, + "description": "A list of messages that carry the error details.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "message": { + "type": "string", + "description": "Human readable message indicating details about the current status.\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "language": { + "nodejs": { + "requiredOutputs": [ + "code", + "details", + "message" + ] + } + } + }, + "gcp:workstations/WorkstationClusterPrivateClusterConfig:WorkstationClusterPrivateClusterConfig": { + "properties": { + "clusterHostname": { + "type": "string", + "description": "Hostname for the workstation cluster.\nThis field will be populated only when private endpoint is enabled.\nTo access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment.\n", + "language": { + "python": { + "mapCase": false + } + } + }, + "enablePrivateEndpoint": { + "type": "boolean", + "description": "Whether Workstations endpoint is private.\n", + "language": { + "python": { + "mapCase": false + } + }, + "willReplaceOnChanges": true + }, + "serviceAttachmentUri": { + "type": "string", + "description": "Service attachment URI for the workstation cluster.\nThe service attachemnt is created when private endpoint is enabled.\nTo access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services].\n", + "language": { + "python": { + "mapCase": false + } + } + } + }, + "type": "object", + "required": [ + "enablePrivateEndpoint" + ], + "language": { + "nodejs": { + "requiredOutputs": [ + "clusterHostname", + "enablePrivateEndpoint", + "serviceAttachmentUri" + ] + } + } } }, "provider": { @@ -104887,6 +105986,9 @@ "cloudTasksCustomEndpoint": { "type": "string" }, + "cloudbuildv2CustomEndpoint": { + "type": "string" + }, "clouddeployCustomEndpoint": { "type": "string" }, @@ -104956,9 +106058,6 @@ "dialogflowCxCustomEndpoint": { "type": "string" }, - "disableGooglePartnerName": { - "type": "boolean" - }, "dnsCustomEndpoint": { "type": "string" }, @@ -105004,9 +106103,6 @@ "gkehubFeatureCustomEndpoint": { "type": "string" }, - "googlePartnerName": { - "type": "string" - }, "healthcareCustomEndpoint": { "type": "string" }, @@ -105160,6 +106256,9 @@ "tagsCustomEndpoint": { "type": "string" }, + "tagsLocationCustomEndpoint": { + "type": "string" + }, "tpuCustomEndpoint": { "type": "string" }, @@ -105175,6 +106274,9 @@ "workflowsCustomEndpoint": { "type": "string" }, + "workstationsCustomEndpoint": { + "type": "string" + }, "zone": { "type": "string" } @@ -105291,6 +106393,9 @@ "cloudTasksCustomEndpoint": { "type": "string" }, + "cloudbuildv2CustomEndpoint": { + "type": "string" + }, "clouddeployCustomEndpoint": { "type": "string" }, @@ -105360,9 +106465,6 @@ "dialogflowCxCustomEndpoint": { "type": "string" }, - "disableGooglePartnerName": { - "type": "boolean" - }, "dnsCustomEndpoint": { "type": "string" }, @@ -105408,9 +106510,6 @@ "gkehubFeatureCustomEndpoint": { "type": "string" }, - "googlePartnerName": { - "type": "string" - }, "healthcareCustomEndpoint": { "type": "string" }, @@ -105579,6 +106678,9 @@ "tagsCustomEndpoint": { "type": "string" }, + "tagsLocationCustomEndpoint": { + "type": "string" + }, "tpuCustomEndpoint": { "type": "string" }, @@ -105594,6 +106696,9 @@ "workflowsCustomEndpoint": { "type": "string" }, + "workstationsCustomEndpoint": { + "type": "string" + }, "zone": { "type": "string", "defaultInfo": { @@ -105706,7 +106811,7 @@ } }, "gcp:accesscontextmanager/accessLevelCondition:AccessLevelCondition": { - "description": "Allows configuring a single access level condition to be appended to an access level's conditions.\nThis resource is intended to be used in cases where it is not possible to compile a full list\nof conditions to include in a `gcp.accesscontextmanager.AccessLevel` resource,\nto enable them to be added separately.\n\n\u003e **Note:** If this resource is used alongside a `gcp.accesscontextmanager.AccessLevel` resource,\nthe access level resource must have a `lifecycle` block with `ignore_changes = [basic[0].conditions]` so\nthey don't fight over which service accounts should be included.\n\n\nTo get more information about AccessLevelCondition, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.accessLevels)\n* How-to Guides\n * [Access Policy Quickstart](https://cloud.google.com/access-context-manager/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{{% examples %}}\n## Example Usage\n{{% example %}}\n### Access Context Manager Access Level Condition Basic\n\n\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 access_level_service_account = new gcp.accesscontextmanager.AccessLevel(\"access-level-service-account\", {\n parent: pulumi.interpolate`accessPolicies/${access_policy.name}`,\n title: \"tf_test_chromeos_no_lock\",\n basic: {\n conditions: [{\n devicePolicy: {\n requireScreenLock: true,\n osConstraints: [{\n osType: \"DESKTOP_CHROME_OS\",\n }],\n },\n regions: [\n \"CH\",\n \"IT\",\n \"US\",\n ],\n }],\n },\n});\nconst created_later = new gcp.serviceaccount.Account(\"created-later\", {accountId: \"tf-test\"});\nconst access_level_conditions = new gcp.accesscontextmanager.AccessLevelCondition(\"access-level-conditions\", {\n accessLevel: access_level_service_account.name,\n ipSubnetworks: [\"192.0.4.0/24\"],\n members: [\n \"user:test@google.com\",\n \"user:test2@google.com\",\n pulumi.interpolate`serviceAccount:${created_later.email}`,\n ],\n negate: false,\n devicePolicy: {\n requireScreenLock: false,\n requireAdminApproval: false,\n requireCorpOwned: true,\n osConstraints: [{\n osType: \"DESKTOP_CHROME_OS\",\n }],\n },\n regions: [\n \"IT\",\n \"US\",\n ],\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\")\naccess_level_service_account = gcp.accesscontextmanager.AccessLevel(\"access-level-service-account\",\n parent=access_policy.name.apply(lambda name: f\"accessPolicies/{name}\"),\n title=\"tf_test_chromeos_no_lock\",\n basic=gcp.accesscontextmanager.AccessLevelBasicArgs(\n conditions=[gcp.accesscontextmanager.AccessLevelBasicConditionArgs(\n device_policy=gcp.accesscontextmanager.AccessLevelBasicConditionDevicePolicyArgs(\n require_screen_lock=True,\n os_constraints=[gcp.accesscontextmanager.AccessLevelBasicConditionDevicePolicyOsConstraintArgs(\n os_type=\"DESKTOP_CHROME_OS\",\n )],\n ),\n regions=[\n \"CH\",\n \"IT\",\n \"US\",\n ],\n )],\n ))\ncreated_later = gcp.service_account.Account(\"created-later\", account_id=\"tf-test\")\naccess_level_conditions = gcp.accesscontextmanager.AccessLevelCondition(\"access-level-conditions\",\n access_level=access_level_service_account.name,\n ip_subnetworks=[\"192.0.4.0/24\"],\n members=[\n \"user:test@google.com\",\n \"user:test2@google.com\",\n created_later.email.apply(lambda email: f\"serviceAccount:{email}\"),\n ],\n negate=False,\n device_policy=gcp.accesscontextmanager.AccessLevelConditionDevicePolicyArgs(\n require_screen_lock=False,\n require_admin_approval=False,\n require_corp_owned=True,\n os_constraints=[gcp.accesscontextmanager.AccessLevelConditionDevicePolicyOsConstraintArgs(\n os_type=\"DESKTOP_CHROME_OS\",\n )],\n ),\n regions=[\n \"IT\",\n \"US\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\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 access_level_service_account = new Gcp.AccessContextManager.AccessLevel(\"access-level-service-account\", new()\n {\n Parent = access_policy.Name.Apply(name =\u003e $\"accessPolicies/{name}\"),\n Title = \"tf_test_chromeos_no_lock\",\n Basic = new Gcp.AccessContextManager.Inputs.AccessLevelBasicArgs\n {\n Conditions = new[]\n {\n new Gcp.AccessContextManager.Inputs.AccessLevelBasicConditionArgs\n {\n DevicePolicy = new Gcp.AccessContextManager.Inputs.AccessLevelBasicConditionDevicePolicyArgs\n {\n RequireScreenLock = true,\n OsConstraints = new[]\n {\n new Gcp.AccessContextManager.Inputs.AccessLevelBasicConditionDevicePolicyOsConstraintArgs\n {\n OsType = \"DESKTOP_CHROME_OS\",\n },\n },\n },\n Regions = new[]\n {\n \"CH\",\n \"IT\",\n \"US\",\n },\n },\n },\n },\n });\n\n var created_later = new Gcp.ServiceAccount.Account(\"created-later\", new()\n {\n AccountId = \"tf-test\",\n });\n\n var access_level_conditions = new Gcp.AccessContextManager.AccessLevelCondition(\"access-level-conditions\", new()\n {\n AccessLevel = access_level_service_account.Name,\n IpSubnetworks = new[]\n {\n \"192.0.4.0/24\",\n },\n Members = new[]\n {\n \"user:test@google.com\",\n \"user:test2@google.com\",\n created_later.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n },\n Negate = false,\n DevicePolicy = new Gcp.AccessContextManager.Inputs.AccessLevelConditionDevicePolicyArgs\n {\n RequireScreenLock = false,\n RequireAdminApproval = false,\n RequireCorpOwned = true,\n OsConstraints = new[]\n {\n new Gcp.AccessContextManager.Inputs.AccessLevelConditionDevicePolicyOsConstraintArgs\n {\n OsType = \"DESKTOP_CHROME_OS\",\n },\n },\n },\n Regions = new[]\n {\n \"IT\",\n \"US\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/accesscontextmanager\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := 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.NewAccessLevel(ctx, \"access-level-service-account\", \u0026accesscontextmanager.AccessLevelArgs{\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\tTitle: pulumi.String(\"tf_test_chromeos_no_lock\"),\n\t\t\tBasic: \u0026accesscontextmanager.AccessLevelBasicArgs{\n\t\t\t\tConditions: accesscontextmanager.AccessLevelBasicConditionArray{\n\t\t\t\t\t\u0026accesscontextmanager.AccessLevelBasicConditionArgs{\n\t\t\t\t\t\tDevicePolicy: \u0026accesscontextmanager.AccessLevelBasicConditionDevicePolicyArgs{\n\t\t\t\t\t\t\tRequireScreenLock: pulumi.Bool(true),\n\t\t\t\t\t\t\tOsConstraints: accesscontextmanager.AccessLevelBasicConditionDevicePolicyOsConstraintArray{\n\t\t\t\t\t\t\t\t\u0026accesscontextmanager.AccessLevelBasicConditionDevicePolicyOsConstraintArgs{\n\t\t\t\t\t\t\t\t\tOsType: pulumi.String(\"DESKTOP_CHROME_OS\"),\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\tRegions: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"CH\"),\n\t\t\t\t\t\t\tpulumi.String(\"IT\"),\n\t\t\t\t\t\t\tpulumi.String(\"US\"),\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\t_, err = serviceAccount.NewAccount(ctx, \"created-later\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"tf-test\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = accesscontextmanager.NewAccessLevelCondition(ctx, \"access-level-conditions\", \u0026accesscontextmanager.AccessLevelConditionArgs{\n\t\t\tAccessLevel: access_level_service_account.Name,\n\t\t\tIpSubnetworks: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"192.0.4.0/24\"),\n\t\t\t},\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:test@google.com\"),\n\t\t\t\tpulumi.String(\"user:test2@google.com\"),\n\t\t\t\tcreated_later.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tNegate: pulumi.Bool(false),\n\t\t\tDevicePolicy: \u0026accesscontextmanager.AccessLevelConditionDevicePolicyArgs{\n\t\t\t\tRequireScreenLock: pulumi.Bool(false),\n\t\t\t\tRequireAdminApproval: pulumi.Bool(false),\n\t\t\t\tRequireCorpOwned: pulumi.Bool(true),\n\t\t\t\tOsConstraints: accesscontextmanager.AccessLevelConditionDevicePolicyOsConstraintArray{\n\t\t\t\t\t\u0026accesscontextmanager.AccessLevelConditionDevicePolicyOsConstraintArgs{\n\t\t\t\t\t\tOsType: pulumi.String(\"DESKTOP_CHROME_OS\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tRegions: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"IT\"),\n\t\t\t\tpulumi.String(\"US\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.AccessLevel;\nimport com.pulumi.gcp.accesscontextmanager.AccessLevelArgs;\nimport com.pulumi.gcp.accesscontextmanager.inputs.AccessLevelBasicArgs;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.accesscontextmanager.AccessLevelCondition;\nimport com.pulumi.gcp.accesscontextmanager.AccessLevelConditionArgs;\nimport com.pulumi.gcp.accesscontextmanager.inputs.AccessLevelConditionDevicePolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 access_level_service_account = new AccessLevel(\"access-level-service-account\", AccessLevelArgs.builder() \n .parent(access_policy.name().applyValue(name -\u003e String.format(\"accessPolicies/%s\", name)))\n .title(\"tf_test_chromeos_no_lock\")\n .basic(AccessLevelBasicArgs.builder()\n .conditions(AccessLevelBasicConditionArgs.builder()\n .devicePolicy(AccessLevelBasicConditionDevicePolicyArgs.builder()\n .requireScreenLock(true)\n .osConstraints(AccessLevelBasicConditionDevicePolicyOsConstraintArgs.builder()\n .osType(\"DESKTOP_CHROME_OS\")\n .build())\n .build())\n .regions( \n \"CH\",\n \"IT\",\n \"US\")\n .build())\n .build())\n .build());\n\n var created_later = new Account(\"created-later\", AccountArgs.builder() \n .accountId(\"tf-test\")\n .build());\n\n var access_level_conditions = new AccessLevelCondition(\"access-level-conditions\", AccessLevelConditionArgs.builder() \n .accessLevel(access_level_service_account.name())\n .ipSubnetworks(\"192.0.4.0/24\")\n .members( \n \"user:test@google.com\",\n \"user:test2@google.com\",\n created_later.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .negate(false)\n .devicePolicy(AccessLevelConditionDevicePolicyArgs.builder()\n .requireScreenLock(false)\n .requireAdminApproval(false)\n .requireCorpOwned(true)\n .osConstraints(AccessLevelConditionDevicePolicyOsConstraintArgs.builder()\n .osType(\"DESKTOP_CHROME_OS\")\n .build())\n .build())\n .regions( \n \"IT\",\n \"US\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n access-level-service-account:\n type: gcp:accesscontextmanager:AccessLevel\n properties:\n parent: accessPolicies/${[\"access-policy\"].name}\n title: tf_test_chromeos_no_lock\n basic:\n conditions:\n - devicePolicy:\n requireScreenLock: true\n osConstraints:\n - osType: DESKTOP_CHROME_OS\n regions:\n - CH\n - IT\n - US\n created-later:\n type: gcp:serviceAccount:Account\n properties:\n accountId: tf-test\n access-level-conditions:\n type: gcp:accesscontextmanager:AccessLevelCondition\n properties:\n accessLevel: ${[\"access-level-service-account\"].name}\n ipSubnetworks:\n - 192.0.4.0/24\n members:\n - user:test@google.com\n - user:test2@google.com\n - serviceAccount:${[\"created-later\"].email}\n negate: false\n devicePolicy:\n requireScreenLock: false\n requireAdminApproval: false\n requireCorpOwned: true\n osConstraints:\n - osType: DESKTOP_CHROME_OS\n regions:\n - IT\n - US\n access-policy:\n type: gcp:accesscontextmanager:AccessPolicy\n properties:\n parent: organizations/123456789\n title: my policy\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource does not support import. ", + "description": "Allows configuring a single access level condition to be appended to an access level's conditions.\nThis resource is intended to be used in cases where it is not possible to compile a full list\nof conditions to include in a `gcp.accesscontextmanager.AccessLevel` resource,\nto enable them to be added separately.\n\n\u003e **Note:** If this resource is used alongside a `gcp.accesscontextmanager.AccessLevel` resource,\nthe access level resource must have a `lifecycle` block with `ignore_changes = [basic[0].conditions]` so\nthey don't fight over which service accounts should be included.\n\n\nTo get more information about AccessLevelCondition, see:\n\n* [API documentation](https://cloud.google.com/access-context-manager/docs/reference/rest/v1/accessPolicies.accessLevels)\n* How-to Guides\n * [Access Policy Quickstart](https://cloud.google.com/access-context-manager/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{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nThis resource does not support import. ", "properties": { "accessLevel": { "type": "string", @@ -107636,7 +108741,7 @@ } }, "gcp:apigateway/api:Api": { - "description": "A consumable API that can be used by multiple Gateways.\n\nTo get more information about Api, see:\n\n* [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Apigateway Api Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst api = new gcp.apigateway.Api(\"api\", {apiId: \"api\"}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\napi = gcp.apigateway.Api(\"api\", api_id=\"api\",\nopts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var api = new Gcp.ApiGateway.Api(\"api\", new()\n {\n ApiId = \"api\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApi(ctx, \"api\", \u0026apigateway.ApiArgs{\n\t\t\tApiId: pulumi.String(\"api\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.Api;\nimport com.pulumi.gcp.apigateway.ApiArgs;\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 api = new Api(\"api\", ApiArgs.builder() \n .apiId(\"api\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n api:\n type: gcp:apigateway:Api\n properties:\n apiId: api\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nApi can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigateway/api:Api default projects/{{project}}/locations/global/apis/{{api_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/api:Api default {{project}}/{{api_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/api:Api default {{api_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Apigateway Api Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst api = new gcp.apigateway.Api(\"api\", {apiId: \"api\"}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\napi = gcp.apigateway.Api(\"api\", api_id=\"api\",\nopts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var api = new Gcp.ApiGateway.Api(\"api\", new()\n {\n ApiId = \"api\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApi(ctx, \"api\", \u0026apigateway.ApiArgs{\n\t\t\tApiId: pulumi.String(\"api\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.Api;\nimport com.pulumi.gcp.apigateway.ApiArgs;\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 api = new Api(\"api\", ApiArgs.builder() \n .apiId(\"api\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n api:\n type: gcp:apigateway:Api\n properties:\n apiId: api\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nApi can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigateway/api:Api default projects/{{project}}/locations/global/apis/{{api_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/api:Api default {{project}}/{{api_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/api:Api default {{api_id}}\n```\n\n ", "properties": { "apiId": { "type": "string", @@ -107751,7 +108856,7 @@ } }, "gcp:apigateway/apiConfig:ApiConfig": { - "description": "An API Configuration is an association of an API Controller Config and a Gateway Config\n\nTo get more information about ApiConfig, see:\n\n* [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis.configs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/api-gateway/docs/creating-api-config)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Apigateway Api Config Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst apiCfgApi = new gcp.apigateway.Api(\"apiCfgApi\", {apiId: \"api-cfg\"}, {\n provider: google_beta,\n});\nconst apiCfgApiConfig = new gcp.apigateway.ApiConfig(\"apiCfgApiConfig\", {\n api: apiCfgApi.apiId,\n apiConfigId: \"cfg\",\n openapiDocuments: [{\n document: {\n path: \"spec.yaml\",\n contents: Buffer.from(fs.readFileSync(\"test-fixtures/apigateway/openapi.yaml\"), 'binary').toString('base64'),\n },\n }],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport base64\nimport pulumi_gcp as gcp\n\napi_cfg_api = gcp.apigateway.Api(\"apiCfgApi\", api_id=\"api-cfg\",\nopts=pulumi.ResourceOptions(provider=google_beta))\napi_cfg_api_config = gcp.apigateway.ApiConfig(\"apiCfgApiConfig\",\n api=api_cfg_api.api_id,\n api_config_id=\"cfg\",\n openapi_documents=[gcp.apigateway.ApiConfigOpenapiDocumentArgs(\n document=gcp.apigateway.ApiConfigOpenapiDocumentDocumentArgs(\n path=\"spec.yaml\",\n contents=(lambda path: base64.b64encode(open(path).read().encode()).decode())(\"test-fixtures/apigateway/openapi.yaml\"),\n ),\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\n\tprivate static string ReadFileBase64(string path) {\n\t\treturn Convert.ToBase64String(Encoding.UTF8.GetBytes(File.ReadAllText(path)))\n\t}\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var apiCfgApi = new Gcp.ApiGateway.Api(\"apiCfgApi\", new()\n {\n ApiId = \"api-cfg\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var apiCfgApiConfig = new Gcp.ApiGateway.ApiConfig(\"apiCfgApiConfig\", new()\n {\n Api = apiCfgApi.ApiId,\n ApiConfigId = \"cfg\",\n OpenapiDocuments = new[]\n {\n new Gcp.ApiGateway.Inputs.ApiConfigOpenapiDocumentArgs\n {\n Document = new Gcp.ApiGateway.Inputs.ApiConfigOpenapiDocumentDocumentArgs\n {\n Path = \"spec.yaml\",\n Contents = ReadFileBase64(\"test-fixtures/apigateway/openapi.yaml\"),\n },\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/base64\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := os.ReadFile(path); err == nil {\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(fileData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tapiCfgApi, err := apigateway.NewApi(ctx, \"apiCfgApi\", \u0026apigateway.ApiArgs{\n\t\t\tApiId: pulumi.String(\"api-cfg\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewApiConfig(ctx, \"apiCfgApiConfig\", \u0026apigateway.ApiConfigArgs{\n\t\t\tApi: apiCfgApi.ApiId,\n\t\t\tApiConfigId: pulumi.String(\"cfg\"),\n\t\t\tOpenapiDocuments: apigateway.ApiConfigOpenapiDocumentArray{\n\t\t\t\t\u0026apigateway.ApiConfigOpenapiDocumentArgs{\n\t\t\t\t\tDocument: \u0026apigateway.ApiConfigOpenapiDocumentDocumentArgs{\n\t\t\t\t\t\tPath: pulumi.String(\"spec.yaml\"),\n\t\t\t\t\t\tContents: filebase64OrPanic(\"test-fixtures/apigateway/openapi.yaml\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.Api;\nimport com.pulumi.gcp.apigateway.ApiArgs;\nimport com.pulumi.gcp.apigateway.ApiConfig;\nimport com.pulumi.gcp.apigateway.ApiConfigArgs;\nimport com.pulumi.gcp.apigateway.inputs.ApiConfigOpenapiDocumentArgs;\nimport com.pulumi.gcp.apigateway.inputs.ApiConfigOpenapiDocumentDocumentArgs;\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 apiCfgApi = new Api(\"apiCfgApi\", ApiArgs.builder() \n .apiId(\"api-cfg\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var apiCfgApiConfig = new ApiConfig(\"apiCfgApiConfig\", ApiConfigArgs.builder() \n .api(apiCfgApi.apiId())\n .apiConfigId(\"cfg\")\n .openapiDocuments(ApiConfigOpenapiDocumentArgs.builder()\n .document(ApiConfigOpenapiDocumentDocumentArgs.builder()\n .path(\"spec.yaml\")\n .contents(Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(\"test-fixtures/apigateway/openapi.yaml\"))))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nApiConfig can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigateway/apiConfig:ApiConfig default projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/apiConfig:ApiConfig default {{project}}/{{api}}/{{api_config_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/apiConfig:ApiConfig default {{api}}/{{api_config_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Apigateway Api Config Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst apiCfgApi = new gcp.apigateway.Api(\"apiCfgApi\", {apiId: \"api-cfg\"}, {\n provider: google_beta,\n});\nconst apiCfgApiConfig = new gcp.apigateway.ApiConfig(\"apiCfgApiConfig\", {\n api: apiCfgApi.apiId,\n apiConfigId: \"cfg\",\n openapiDocuments: [{\n document: {\n path: \"spec.yaml\",\n contents: Buffer.from(fs.readFileSync(\"test-fixtures/apigateway/openapi.yaml\"), 'binary').toString('base64'),\n },\n }],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport base64\nimport pulumi_gcp as gcp\n\napi_cfg_api = gcp.apigateway.Api(\"apiCfgApi\", api_id=\"api-cfg\",\nopts=pulumi.ResourceOptions(provider=google_beta))\napi_cfg_api_config = gcp.apigateway.ApiConfig(\"apiCfgApiConfig\",\n api=api_cfg_api.api_id,\n api_config_id=\"cfg\",\n openapi_documents=[gcp.apigateway.ApiConfigOpenapiDocumentArgs(\n document=gcp.apigateway.ApiConfigOpenapiDocumentDocumentArgs(\n path=\"spec.yaml\",\n contents=(lambda path: base64.b64encode(open(path).read().encode()).decode())(\"test-fixtures/apigateway/openapi.yaml\"),\n ),\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\n\tprivate static string ReadFileBase64(string path) {\n\t\treturn Convert.ToBase64String(Encoding.UTF8.GetBytes(File.ReadAllText(path)))\n\t}\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var apiCfgApi = new Gcp.ApiGateway.Api(\"apiCfgApi\", new()\n {\n ApiId = \"api-cfg\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var apiCfgApiConfig = new Gcp.ApiGateway.ApiConfig(\"apiCfgApiConfig\", new()\n {\n Api = apiCfgApi.ApiId,\n ApiConfigId = \"cfg\",\n OpenapiDocuments = new[]\n {\n new Gcp.ApiGateway.Inputs.ApiConfigOpenapiDocumentArgs\n {\n Document = new Gcp.ApiGateway.Inputs.ApiConfigOpenapiDocumentDocumentArgs\n {\n Path = \"spec.yaml\",\n Contents = ReadFileBase64(\"test-fixtures/apigateway/openapi.yaml\"),\n },\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/base64\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := os.ReadFile(path); err == nil {\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(fileData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tapiCfgApi, err := apigateway.NewApi(ctx, \"apiCfgApi\", \u0026apigateway.ApiArgs{\n\t\t\tApiId: pulumi.String(\"api-cfg\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewApiConfig(ctx, \"apiCfgApiConfig\", \u0026apigateway.ApiConfigArgs{\n\t\t\tApi: apiCfgApi.ApiId,\n\t\t\tApiConfigId: pulumi.String(\"cfg\"),\n\t\t\tOpenapiDocuments: apigateway.ApiConfigOpenapiDocumentArray{\n\t\t\t\t\u0026apigateway.ApiConfigOpenapiDocumentArgs{\n\t\t\t\t\tDocument: \u0026apigateway.ApiConfigOpenapiDocumentDocumentArgs{\n\t\t\t\t\t\tPath: pulumi.String(\"spec.yaml\"),\n\t\t\t\t\t\tContents: filebase64OrPanic(\"test-fixtures/apigateway/openapi.yaml\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.Api;\nimport com.pulumi.gcp.apigateway.ApiArgs;\nimport com.pulumi.gcp.apigateway.ApiConfig;\nimport com.pulumi.gcp.apigateway.ApiConfigArgs;\nimport com.pulumi.gcp.apigateway.inputs.ApiConfigOpenapiDocumentArgs;\nimport com.pulumi.gcp.apigateway.inputs.ApiConfigOpenapiDocumentDocumentArgs;\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 apiCfgApi = new Api(\"apiCfgApi\", ApiArgs.builder() \n .apiId(\"api-cfg\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var apiCfgApiConfig = new ApiConfig(\"apiCfgApiConfig\", ApiConfigArgs.builder() \n .api(apiCfgApi.apiId())\n .apiConfigId(\"cfg\")\n .openapiDocuments(ApiConfigOpenapiDocumentArgs.builder()\n .document(ApiConfigOpenapiDocumentDocumentArgs.builder()\n .path(\"spec.yaml\")\n .contents(Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(\"test-fixtures/apigateway/openapi.yaml\"))))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nApiConfig can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigateway/apiConfig:ApiConfig default projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/apiConfig:ApiConfig default {{project}}/{{api}}/{{api_config_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/apiConfig:ApiConfig default {{api}}/{{api_config_id}}\n```\n\n ", "properties": { "api": { "type": "string", @@ -107958,7 +109063,7 @@ } }, "gcp:apigateway/apiConfigIamBinding:ApiConfigIamBinding": { - "description": "Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case:\n\n* `gcp.apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached.\n* `gcp.apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved.\n* `gcp.apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved.\n\n\u003e **Note:** `gcp.apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiConfigIamBinding` and `gcp.apigateway.ApiConfigIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## google\\_api\\_gateway\\_api\\_config\\_iam\\_policy\n\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/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.apigateway.ApiConfigIamPolicy(\"policy\", {\n api: google_api_gateway_api_config.api_cfg.api,\n apiConfig: google_api_gateway_api_config.api_cfg.api_config_id,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.apigateway.ApiConfigIamPolicy(\"policy\",\n api=google_api_gateway_api_config[\"api_cfg\"][\"api\"],\n api_config=google_api_gateway_api_config[\"api_cfg\"][\"api_config_id\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ApiGateway.ApiConfigIamPolicy(\"policy\", new()\n {\n Api = google_api_gateway_api_config.Api_cfg.Api,\n ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/apigateway.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 = apigateway.NewApiConfigIamPolicy(ctx, \"policy\", \u0026apigateway.ApiConfigIamPolicyArgs{\n\t\t\tApi: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api),\n\t\t\tApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.apigateway.ApiConfigIamPolicy;\nimport com.pulumi.gcp.apigateway.ApiConfigIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new ApiConfigIamPolicy(\"policy\", ApiConfigIamPolicyArgs.builder() \n .api(google_api_gateway_api_config.api_cfg().api())\n .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:apigateway:ApiConfigIamPolicy\n properties:\n api: ${google_api_gateway_api_config.api_cfg.api}\n apiConfig: ${google_api_gateway_api_config.api_cfg.api_config_id}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_api\\_gateway\\_api\\_config\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.apigateway.ApiConfigIamBinding(\"binding\", {\n api: google_api_gateway_api_config.api_cfg.api,\n apiConfig: google_api_gateway_api_config.api_cfg.api_config_id,\n role: \"roles/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.apigateway.ApiConfigIamBinding(\"binding\",\n api=google_api_gateway_api_config[\"api_cfg\"][\"api\"],\n api_config=google_api_gateway_api_config[\"api_cfg\"][\"api_config_id\"],\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ApiGateway.ApiConfigIamBinding(\"binding\", new()\n {\n Api = google_api_gateway_api_config.Api_cfg.Api,\n ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id,\n Role = \"roles/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApiConfigIamBinding(ctx, \"binding\", \u0026apigateway.ApiConfigIamBindingArgs{\n\t\t\tApi: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api),\n\t\t\tApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.ApiConfigIamBinding;\nimport com.pulumi.gcp.apigateway.ApiConfigIamBindingArgs;\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 binding = new ApiConfigIamBinding(\"binding\", ApiConfigIamBindingArgs.builder() \n .api(google_api_gateway_api_config.api_cfg().api())\n .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id())\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:apigateway:ApiConfigIamBinding\n properties:\n api: ${google_api_gateway_api_config.api_cfg.api}\n apiConfig: ${google_api_gateway_api_config.api_cfg.api_config_id}\n role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_api\\_gateway\\_api\\_config\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.apigateway.ApiConfigIamMember(\"member\", {\n api: google_api_gateway_api_config.api_cfg.api,\n apiConfig: google_api_gateway_api_config.api_cfg.api_config_id,\n role: \"roles/apigateway.viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.apigateway.ApiConfigIamMember(\"member\",\n api=google_api_gateway_api_config[\"api_cfg\"][\"api\"],\n api_config=google_api_gateway_api_config[\"api_cfg\"][\"api_config_id\"],\n role=\"roles/apigateway.viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ApiGateway.ApiConfigIamMember(\"member\", new()\n {\n Api = google_api_gateway_api_config.Api_cfg.Api,\n ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id,\n Role = \"roles/apigateway.viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApiConfigIamMember(ctx, \"member\", \u0026apigateway.ApiConfigIamMemberArgs{\n\t\t\tApi: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api),\n\t\t\tApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.ApiConfigIamMember;\nimport com.pulumi.gcp.apigateway.ApiConfigIamMemberArgs;\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 member = new ApiConfigIamMember(\"member\", ApiConfigIamMemberArgs.builder() \n .api(google_api_gateway_api_config.api_cfg().api())\n .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id())\n .role(\"roles/apigateway.viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:apigateway:ApiConfigIamMember\n properties:\n api: ${google_api_gateway_api_config.api_cfg.api}\n apiConfig: ${google_api_gateway_api_config.api_cfg.api_config_id}\n role: roles/apigateway.viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamBinding:ApiConfigIamBinding editor \"projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamBinding:ApiConfigIamBinding editor \"projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamBinding:ApiConfigIamBinding editor projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamBinding:ApiConfigIamBinding editor \"projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamBinding:ApiConfigIamBinding editor \"projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamBinding:ApiConfigIamBinding editor projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "api": { "type": "string", @@ -108075,7 +109180,7 @@ } }, "gcp:apigateway/apiConfigIamMember:ApiConfigIamMember": { - "description": "Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case:\n\n* `gcp.apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached.\n* `gcp.apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved.\n* `gcp.apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved.\n\n\u003e **Note:** `gcp.apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiConfigIamBinding` and `gcp.apigateway.ApiConfigIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## google\\_api\\_gateway\\_api\\_config\\_iam\\_policy\n\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/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.apigateway.ApiConfigIamPolicy(\"policy\", {\n api: google_api_gateway_api_config.api_cfg.api,\n apiConfig: google_api_gateway_api_config.api_cfg.api_config_id,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.apigateway.ApiConfigIamPolicy(\"policy\",\n api=google_api_gateway_api_config[\"api_cfg\"][\"api\"],\n api_config=google_api_gateway_api_config[\"api_cfg\"][\"api_config_id\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ApiGateway.ApiConfigIamPolicy(\"policy\", new()\n {\n Api = google_api_gateway_api_config.Api_cfg.Api,\n ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/apigateway.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 = apigateway.NewApiConfigIamPolicy(ctx, \"policy\", \u0026apigateway.ApiConfigIamPolicyArgs{\n\t\t\tApi: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api),\n\t\t\tApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.apigateway.ApiConfigIamPolicy;\nimport com.pulumi.gcp.apigateway.ApiConfigIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new ApiConfigIamPolicy(\"policy\", ApiConfigIamPolicyArgs.builder() \n .api(google_api_gateway_api_config.api_cfg().api())\n .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:apigateway:ApiConfigIamPolicy\n properties:\n api: ${google_api_gateway_api_config.api_cfg.api}\n apiConfig: ${google_api_gateway_api_config.api_cfg.api_config_id}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_api\\_gateway\\_api\\_config\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.apigateway.ApiConfigIamBinding(\"binding\", {\n api: google_api_gateway_api_config.api_cfg.api,\n apiConfig: google_api_gateway_api_config.api_cfg.api_config_id,\n role: \"roles/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.apigateway.ApiConfigIamBinding(\"binding\",\n api=google_api_gateway_api_config[\"api_cfg\"][\"api\"],\n api_config=google_api_gateway_api_config[\"api_cfg\"][\"api_config_id\"],\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ApiGateway.ApiConfigIamBinding(\"binding\", new()\n {\n Api = google_api_gateway_api_config.Api_cfg.Api,\n ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id,\n Role = \"roles/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApiConfigIamBinding(ctx, \"binding\", \u0026apigateway.ApiConfigIamBindingArgs{\n\t\t\tApi: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api),\n\t\t\tApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.ApiConfigIamBinding;\nimport com.pulumi.gcp.apigateway.ApiConfigIamBindingArgs;\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 binding = new ApiConfigIamBinding(\"binding\", ApiConfigIamBindingArgs.builder() \n .api(google_api_gateway_api_config.api_cfg().api())\n .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id())\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:apigateway:ApiConfigIamBinding\n properties:\n api: ${google_api_gateway_api_config.api_cfg.api}\n apiConfig: ${google_api_gateway_api_config.api_cfg.api_config_id}\n role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_api\\_gateway\\_api\\_config\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.apigateway.ApiConfigIamMember(\"member\", {\n api: google_api_gateway_api_config.api_cfg.api,\n apiConfig: google_api_gateway_api_config.api_cfg.api_config_id,\n role: \"roles/apigateway.viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.apigateway.ApiConfigIamMember(\"member\",\n api=google_api_gateway_api_config[\"api_cfg\"][\"api\"],\n api_config=google_api_gateway_api_config[\"api_cfg\"][\"api_config_id\"],\n role=\"roles/apigateway.viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ApiGateway.ApiConfigIamMember(\"member\", new()\n {\n Api = google_api_gateway_api_config.Api_cfg.Api,\n ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id,\n Role = \"roles/apigateway.viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApiConfigIamMember(ctx, \"member\", \u0026apigateway.ApiConfigIamMemberArgs{\n\t\t\tApi: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api),\n\t\t\tApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.ApiConfigIamMember;\nimport com.pulumi.gcp.apigateway.ApiConfigIamMemberArgs;\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 member = new ApiConfigIamMember(\"member\", ApiConfigIamMemberArgs.builder() \n .api(google_api_gateway_api_config.api_cfg().api())\n .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id())\n .role(\"roles/apigateway.viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:apigateway:ApiConfigIamMember\n properties:\n api: ${google_api_gateway_api_config.api_cfg.api}\n apiConfig: ${google_api_gateway_api_config.api_cfg.api_config_id}\n role: roles/apigateway.viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamMember:ApiConfigIamMember editor \"projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamMember:ApiConfigIamMember editor \"projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamMember:ApiConfigIamMember editor projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamMember:ApiConfigIamMember editor \"projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamMember:ApiConfigIamMember editor \"projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamMember:ApiConfigIamMember editor projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "api": { "type": "string", @@ -108185,7 +109290,7 @@ } }, "gcp:apigateway/apiConfigIamPolicy:ApiConfigIamPolicy": { - "description": "Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case:\n\n* `gcp.apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached.\n* `gcp.apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved.\n* `gcp.apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved.\n\n\u003e **Note:** `gcp.apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiConfigIamBinding` and `gcp.apigateway.ApiConfigIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## google\\_api\\_gateway\\_api\\_config\\_iam\\_policy\n\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/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.apigateway.ApiConfigIamPolicy(\"policy\", {\n api: google_api_gateway_api_config.api_cfg.api,\n apiConfig: google_api_gateway_api_config.api_cfg.api_config_id,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.apigateway.ApiConfigIamPolicy(\"policy\",\n api=google_api_gateway_api_config[\"api_cfg\"][\"api\"],\n api_config=google_api_gateway_api_config[\"api_cfg\"][\"api_config_id\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ApiGateway.ApiConfigIamPolicy(\"policy\", new()\n {\n Api = google_api_gateway_api_config.Api_cfg.Api,\n ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/apigateway.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 = apigateway.NewApiConfigIamPolicy(ctx, \"policy\", \u0026apigateway.ApiConfigIamPolicyArgs{\n\t\t\tApi: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api),\n\t\t\tApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.apigateway.ApiConfigIamPolicy;\nimport com.pulumi.gcp.apigateway.ApiConfigIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new ApiConfigIamPolicy(\"policy\", ApiConfigIamPolicyArgs.builder() \n .api(google_api_gateway_api_config.api_cfg().api())\n .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:apigateway:ApiConfigIamPolicy\n properties:\n api: ${google_api_gateway_api_config.api_cfg.api}\n apiConfig: ${google_api_gateway_api_config.api_cfg.api_config_id}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_api\\_gateway\\_api\\_config\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.apigateway.ApiConfigIamBinding(\"binding\", {\n api: google_api_gateway_api_config.api_cfg.api,\n apiConfig: google_api_gateway_api_config.api_cfg.api_config_id,\n role: \"roles/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.apigateway.ApiConfigIamBinding(\"binding\",\n api=google_api_gateway_api_config[\"api_cfg\"][\"api\"],\n api_config=google_api_gateway_api_config[\"api_cfg\"][\"api_config_id\"],\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ApiGateway.ApiConfigIamBinding(\"binding\", new()\n {\n Api = google_api_gateway_api_config.Api_cfg.Api,\n ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id,\n Role = \"roles/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApiConfigIamBinding(ctx, \"binding\", \u0026apigateway.ApiConfigIamBindingArgs{\n\t\t\tApi: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api),\n\t\t\tApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.ApiConfigIamBinding;\nimport com.pulumi.gcp.apigateway.ApiConfigIamBindingArgs;\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 binding = new ApiConfigIamBinding(\"binding\", ApiConfigIamBindingArgs.builder() \n .api(google_api_gateway_api_config.api_cfg().api())\n .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id())\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:apigateway:ApiConfigIamBinding\n properties:\n api: ${google_api_gateway_api_config.api_cfg.api}\n apiConfig: ${google_api_gateway_api_config.api_cfg.api_config_id}\n role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_api\\_gateway\\_api\\_config\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.apigateway.ApiConfigIamMember(\"member\", {\n api: google_api_gateway_api_config.api_cfg.api,\n apiConfig: google_api_gateway_api_config.api_cfg.api_config_id,\n role: \"roles/apigateway.viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.apigateway.ApiConfigIamMember(\"member\",\n api=google_api_gateway_api_config[\"api_cfg\"][\"api\"],\n api_config=google_api_gateway_api_config[\"api_cfg\"][\"api_config_id\"],\n role=\"roles/apigateway.viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ApiGateway.ApiConfigIamMember(\"member\", new()\n {\n Api = google_api_gateway_api_config.Api_cfg.Api,\n ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id,\n Role = \"roles/apigateway.viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApiConfigIamMember(ctx, \"member\", \u0026apigateway.ApiConfigIamMemberArgs{\n\t\t\tApi: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api),\n\t\t\tApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.ApiConfigIamMember;\nimport com.pulumi.gcp.apigateway.ApiConfigIamMemberArgs;\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 member = new ApiConfigIamMember(\"member\", ApiConfigIamMemberArgs.builder() \n .api(google_api_gateway_api_config.api_cfg().api())\n .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id())\n .role(\"roles/apigateway.viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:apigateway:ApiConfigIamMember\n properties:\n api: ${google_api_gateway_api_config.api_cfg.api}\n apiConfig: ${google_api_gateway_api_config.api_cfg.api_config_id}\n role: roles/apigateway.viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamPolicy:ApiConfigIamPolicy editor \"projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamPolicy:ApiConfigIamPolicy editor \"projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamPolicy:ApiConfigIamPolicy editor projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamPolicy:ApiConfigIamPolicy editor \"projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamPolicy:ApiConfigIamPolicy editor \"projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiConfigIamPolicy:ApiConfigIamPolicy editor projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "api": { "type": "string", @@ -108269,7 +109374,7 @@ } }, "gcp:apigateway/apiIamBinding:ApiIamBinding": { - "description": "Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case:\n\n* `gcp.apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached.\n* `gcp.apigateway.ApiIamBinding`: 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 api are preserved.\n* `gcp.apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved.\n\n\u003e **Note:** `gcp.apigateway.ApiIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiIamBinding` and `gcp.apigateway.ApiIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.apigateway.ApiIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## google\\_api\\_gateway\\_api\\_iam\\_policy\n\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/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.apigateway.ApiIamPolicy(\"policy\", {\n project: google_api_gateway_api.api.project,\n api: google_api_gateway_api.api.api_id,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.apigateway.ApiIamPolicy(\"policy\",\n project=google_api_gateway_api[\"api\"][\"project\"],\n api=google_api_gateway_api[\"api\"][\"api_id\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ApiGateway.ApiIamPolicy(\"policy\", new()\n {\n Project = google_api_gateway_api.Api.Project,\n Api = google_api_gateway_api.Api.Api_id,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/apigateway.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 = apigateway.NewApiIamPolicy(ctx, \"policy\", \u0026apigateway.ApiIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_api.Api.Project),\n\t\t\tApi: pulumi.Any(google_api_gateway_api.Api.Api_id),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.apigateway.ApiIamPolicy;\nimport com.pulumi.gcp.apigateway.ApiIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new ApiIamPolicy(\"policy\", ApiIamPolicyArgs.builder() \n .project(google_api_gateway_api.api().project())\n .api(google_api_gateway_api.api().api_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:apigateway:ApiIamPolicy\n properties:\n project: ${google_api_gateway_api.api.project}\n api: ${google_api_gateway_api.api.api_id}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_api\\_gateway\\_api\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.apigateway.ApiIamBinding(\"binding\", {\n project: google_api_gateway_api.api.project,\n api: google_api_gateway_api.api.api_id,\n role: \"roles/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.apigateway.ApiIamBinding(\"binding\",\n project=google_api_gateway_api[\"api\"][\"project\"],\n api=google_api_gateway_api[\"api\"][\"api_id\"],\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ApiGateway.ApiIamBinding(\"binding\", new()\n {\n Project = google_api_gateway_api.Api.Project,\n Api = google_api_gateway_api.Api.Api_id,\n Role = \"roles/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApiIamBinding(ctx, \"binding\", \u0026apigateway.ApiIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_api.Api.Project),\n\t\t\tApi: pulumi.Any(google_api_gateway_api.Api.Api_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.ApiIamBinding;\nimport com.pulumi.gcp.apigateway.ApiIamBindingArgs;\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 binding = new ApiIamBinding(\"binding\", ApiIamBindingArgs.builder() \n .project(google_api_gateway_api.api().project())\n .api(google_api_gateway_api.api().api_id())\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:apigateway:ApiIamBinding\n properties:\n project: ${google_api_gateway_api.api.project}\n api: ${google_api_gateway_api.api.api_id}\n role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_api\\_gateway\\_api\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.apigateway.ApiIamMember(\"member\", {\n project: google_api_gateway_api.api.project,\n api: google_api_gateway_api.api.api_id,\n role: \"roles/apigateway.viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.apigateway.ApiIamMember(\"member\",\n project=google_api_gateway_api[\"api\"][\"project\"],\n api=google_api_gateway_api[\"api\"][\"api_id\"],\n role=\"roles/apigateway.viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ApiGateway.ApiIamMember(\"member\", new()\n {\n Project = google_api_gateway_api.Api.Project,\n Api = google_api_gateway_api.Api.Api_id,\n Role = \"roles/apigateway.viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApiIamMember(ctx, \"member\", \u0026apigateway.ApiIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_api.Api.Project),\n\t\t\tApi: pulumi.Any(google_api_gateway_api.Api.Api_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.ApiIamMember;\nimport com.pulumi.gcp.apigateway.ApiIamMemberArgs;\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 member = new ApiIamMember(\"member\", ApiIamMemberArgs.builder() \n .project(google_api_gateway_api.api().project())\n .api(google_api_gateway_api.api().api_id())\n .role(\"roles/apigateway.viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:apigateway:ApiIamMember\n properties:\n project: ${google_api_gateway_api.api.project}\n api: ${google_api_gateway_api.api.api_id}\n role: roles/apigateway.viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamBinding:ApiIamBinding editor \"projects/{{project}}/locations/global/apis/{{api}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamBinding:ApiIamBinding editor \"projects/{{project}}/locations/global/apis/{{api}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamBinding:ApiIamBinding editor projects/{{project}}/locations/global/apis/{{api}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamBinding:ApiIamBinding editor \"projects/{{project}}/locations/global/apis/{{api}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamBinding:ApiIamBinding editor \"projects/{{project}}/locations/global/apis/{{api}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamBinding:ApiIamBinding editor projects/{{project}}/locations/global/apis/{{api}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "api": { "type": "string" @@ -108370,7 +109475,7 @@ } }, "gcp:apigateway/apiIamMember:ApiIamMember": { - "description": "Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case:\n\n* `gcp.apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached.\n* `gcp.apigateway.ApiIamBinding`: 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 api are preserved.\n* `gcp.apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved.\n\n\u003e **Note:** `gcp.apigateway.ApiIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiIamBinding` and `gcp.apigateway.ApiIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.apigateway.ApiIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## google\\_api\\_gateway\\_api\\_iam\\_policy\n\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/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.apigateway.ApiIamPolicy(\"policy\", {\n project: google_api_gateway_api.api.project,\n api: google_api_gateway_api.api.api_id,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.apigateway.ApiIamPolicy(\"policy\",\n project=google_api_gateway_api[\"api\"][\"project\"],\n api=google_api_gateway_api[\"api\"][\"api_id\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ApiGateway.ApiIamPolicy(\"policy\", new()\n {\n Project = google_api_gateway_api.Api.Project,\n Api = google_api_gateway_api.Api.Api_id,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/apigateway.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 = apigateway.NewApiIamPolicy(ctx, \"policy\", \u0026apigateway.ApiIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_api.Api.Project),\n\t\t\tApi: pulumi.Any(google_api_gateway_api.Api.Api_id),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.apigateway.ApiIamPolicy;\nimport com.pulumi.gcp.apigateway.ApiIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new ApiIamPolicy(\"policy\", ApiIamPolicyArgs.builder() \n .project(google_api_gateway_api.api().project())\n .api(google_api_gateway_api.api().api_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:apigateway:ApiIamPolicy\n properties:\n project: ${google_api_gateway_api.api.project}\n api: ${google_api_gateway_api.api.api_id}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_api\\_gateway\\_api\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.apigateway.ApiIamBinding(\"binding\", {\n project: google_api_gateway_api.api.project,\n api: google_api_gateway_api.api.api_id,\n role: \"roles/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.apigateway.ApiIamBinding(\"binding\",\n project=google_api_gateway_api[\"api\"][\"project\"],\n api=google_api_gateway_api[\"api\"][\"api_id\"],\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ApiGateway.ApiIamBinding(\"binding\", new()\n {\n Project = google_api_gateway_api.Api.Project,\n Api = google_api_gateway_api.Api.Api_id,\n Role = \"roles/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApiIamBinding(ctx, \"binding\", \u0026apigateway.ApiIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_api.Api.Project),\n\t\t\tApi: pulumi.Any(google_api_gateway_api.Api.Api_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.ApiIamBinding;\nimport com.pulumi.gcp.apigateway.ApiIamBindingArgs;\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 binding = new ApiIamBinding(\"binding\", ApiIamBindingArgs.builder() \n .project(google_api_gateway_api.api().project())\n .api(google_api_gateway_api.api().api_id())\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:apigateway:ApiIamBinding\n properties:\n project: ${google_api_gateway_api.api.project}\n api: ${google_api_gateway_api.api.api_id}\n role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_api\\_gateway\\_api\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.apigateway.ApiIamMember(\"member\", {\n project: google_api_gateway_api.api.project,\n api: google_api_gateway_api.api.api_id,\n role: \"roles/apigateway.viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.apigateway.ApiIamMember(\"member\",\n project=google_api_gateway_api[\"api\"][\"project\"],\n api=google_api_gateway_api[\"api\"][\"api_id\"],\n role=\"roles/apigateway.viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ApiGateway.ApiIamMember(\"member\", new()\n {\n Project = google_api_gateway_api.Api.Project,\n Api = google_api_gateway_api.Api.Api_id,\n Role = \"roles/apigateway.viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApiIamMember(ctx, \"member\", \u0026apigateway.ApiIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_api.Api.Project),\n\t\t\tApi: pulumi.Any(google_api_gateway_api.Api.Api_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.ApiIamMember;\nimport com.pulumi.gcp.apigateway.ApiIamMemberArgs;\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 member = new ApiIamMember(\"member\", ApiIamMemberArgs.builder() \n .project(google_api_gateway_api.api().project())\n .api(google_api_gateway_api.api().api_id())\n .role(\"roles/apigateway.viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:apigateway:ApiIamMember\n properties:\n project: ${google_api_gateway_api.api.project}\n api: ${google_api_gateway_api.api.api_id}\n role: roles/apigateway.viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamMember:ApiIamMember editor \"projects/{{project}}/locations/global/apis/{{api}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamMember:ApiIamMember editor \"projects/{{project}}/locations/global/apis/{{api}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamMember:ApiIamMember editor projects/{{project}}/locations/global/apis/{{api}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamMember:ApiIamMember editor \"projects/{{project}}/locations/global/apis/{{api}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamMember:ApiIamMember editor \"projects/{{project}}/locations/global/apis/{{api}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamMember:ApiIamMember editor projects/{{project}}/locations/global/apis/{{api}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "api": { "type": "string" @@ -108464,7 +109569,7 @@ } }, "gcp:apigateway/apiIamPolicy:ApiIamPolicy": { - "description": "Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case:\n\n* `gcp.apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached.\n* `gcp.apigateway.ApiIamBinding`: 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 api are preserved.\n* `gcp.apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved.\n\n\u003e **Note:** `gcp.apigateway.ApiIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiIamBinding` and `gcp.apigateway.ApiIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.apigateway.ApiIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## google\\_api\\_gateway\\_api\\_iam\\_policy\n\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/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.apigateway.ApiIamPolicy(\"policy\", {\n project: google_api_gateway_api.api.project,\n api: google_api_gateway_api.api.api_id,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.apigateway.ApiIamPolicy(\"policy\",\n project=google_api_gateway_api[\"api\"][\"project\"],\n api=google_api_gateway_api[\"api\"][\"api_id\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ApiGateway.ApiIamPolicy(\"policy\", new()\n {\n Project = google_api_gateway_api.Api.Project,\n Api = google_api_gateway_api.Api.Api_id,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/apigateway.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 = apigateway.NewApiIamPolicy(ctx, \"policy\", \u0026apigateway.ApiIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_api.Api.Project),\n\t\t\tApi: pulumi.Any(google_api_gateway_api.Api.Api_id),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.apigateway.ApiIamPolicy;\nimport com.pulumi.gcp.apigateway.ApiIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new ApiIamPolicy(\"policy\", ApiIamPolicyArgs.builder() \n .project(google_api_gateway_api.api().project())\n .api(google_api_gateway_api.api().api_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:apigateway:ApiIamPolicy\n properties:\n project: ${google_api_gateway_api.api.project}\n api: ${google_api_gateway_api.api.api_id}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_api\\_gateway\\_api\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.apigateway.ApiIamBinding(\"binding\", {\n project: google_api_gateway_api.api.project,\n api: google_api_gateway_api.api.api_id,\n role: \"roles/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.apigateway.ApiIamBinding(\"binding\",\n project=google_api_gateway_api[\"api\"][\"project\"],\n api=google_api_gateway_api[\"api\"][\"api_id\"],\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ApiGateway.ApiIamBinding(\"binding\", new()\n {\n Project = google_api_gateway_api.Api.Project,\n Api = google_api_gateway_api.Api.Api_id,\n Role = \"roles/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApiIamBinding(ctx, \"binding\", \u0026apigateway.ApiIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_api.Api.Project),\n\t\t\tApi: pulumi.Any(google_api_gateway_api.Api.Api_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.ApiIamBinding;\nimport com.pulumi.gcp.apigateway.ApiIamBindingArgs;\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 binding = new ApiIamBinding(\"binding\", ApiIamBindingArgs.builder() \n .project(google_api_gateway_api.api().project())\n .api(google_api_gateway_api.api().api_id())\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:apigateway:ApiIamBinding\n properties:\n project: ${google_api_gateway_api.api.project}\n api: ${google_api_gateway_api.api.api_id}\n role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_api\\_gateway\\_api\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.apigateway.ApiIamMember(\"member\", {\n project: google_api_gateway_api.api.project,\n api: google_api_gateway_api.api.api_id,\n role: \"roles/apigateway.viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.apigateway.ApiIamMember(\"member\",\n project=google_api_gateway_api[\"api\"][\"project\"],\n api=google_api_gateway_api[\"api\"][\"api_id\"],\n role=\"roles/apigateway.viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ApiGateway.ApiIamMember(\"member\", new()\n {\n Project = google_api_gateway_api.Api.Project,\n Api = google_api_gateway_api.Api.Api_id,\n Role = \"roles/apigateway.viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewApiIamMember(ctx, \"member\", \u0026apigateway.ApiIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_api.Api.Project),\n\t\t\tApi: pulumi.Any(google_api_gateway_api.Api.Api_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.ApiIamMember;\nimport com.pulumi.gcp.apigateway.ApiIamMemberArgs;\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 member = new ApiIamMember(\"member\", ApiIamMemberArgs.builder() \n .project(google_api_gateway_api.api().project())\n .api(google_api_gateway_api.api().api_id())\n .role(\"roles/apigateway.viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:apigateway:ApiIamMember\n properties:\n project: ${google_api_gateway_api.api.project}\n api: ${google_api_gateway_api.api.api_id}\n role: roles/apigateway.viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamPolicy:ApiIamPolicy editor \"projects/{{project}}/locations/global/apis/{{api}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamPolicy:ApiIamPolicy editor \"projects/{{project}}/locations/global/apis/{{api}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamPolicy:ApiIamPolicy editor projects/{{project}}/locations/global/apis/{{api}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamPolicy:ApiIamPolicy editor \"projects/{{project}}/locations/global/apis/{{api}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamPolicy:ApiIamPolicy editor \"projects/{{project}}/locations/global/apis/{{api}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/apiIamPolicy:ApiIamPolicy editor projects/{{project}}/locations/global/apis/{{api}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "api": { "type": "string" @@ -108532,7 +109637,7 @@ } }, "gcp:apigateway/gateway:Gateway": { - "description": "A consumable API that can be used by multiple Gateways.\n\nTo get more information about Gateway, see:\n\n* [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Apigateway Gateway Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst apiGwApi = new gcp.apigateway.Api(\"apiGwApi\", {apiId: \"api-gw\"}, {\n provider: google_beta,\n});\nconst apiGwApiConfig = new gcp.apigateway.ApiConfig(\"apiGwApiConfig\", {\n api: apiGwApi.apiId,\n apiConfigId: \"config\",\n openapiDocuments: [{\n document: {\n path: \"spec.yaml\",\n contents: Buffer.from(fs.readFileSync(\"test-fixtures/apigateway/openapi.yaml\"), 'binary').toString('base64'),\n },\n }],\n}, {\n provider: google_beta,\n});\nconst apiGwGateway = new gcp.apigateway.Gateway(\"apiGwGateway\", {\n apiConfig: apiGwApiConfig.id,\n gatewayId: \"api-gw\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport base64\nimport pulumi_gcp as gcp\n\napi_gw_api = gcp.apigateway.Api(\"apiGwApi\", api_id=\"api-gw\",\nopts=pulumi.ResourceOptions(provider=google_beta))\napi_gw_api_config = gcp.apigateway.ApiConfig(\"apiGwApiConfig\",\n api=api_gw_api.api_id,\n api_config_id=\"config\",\n openapi_documents=[gcp.apigateway.ApiConfigOpenapiDocumentArgs(\n document=gcp.apigateway.ApiConfigOpenapiDocumentDocumentArgs(\n path=\"spec.yaml\",\n contents=(lambda path: base64.b64encode(open(path).read().encode()).decode())(\"test-fixtures/apigateway/openapi.yaml\"),\n ),\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\napi_gw_gateway = gcp.apigateway.Gateway(\"apiGwGateway\",\n api_config=api_gw_api_config.id,\n gateway_id=\"api-gw\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\n\tprivate static string ReadFileBase64(string path) {\n\t\treturn Convert.ToBase64String(Encoding.UTF8.GetBytes(File.ReadAllText(path)))\n\t}\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var apiGwApi = new Gcp.ApiGateway.Api(\"apiGwApi\", new()\n {\n ApiId = \"api-gw\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var apiGwApiConfig = new Gcp.ApiGateway.ApiConfig(\"apiGwApiConfig\", new()\n {\n Api = apiGwApi.ApiId,\n ApiConfigId = \"config\",\n OpenapiDocuments = new[]\n {\n new Gcp.ApiGateway.Inputs.ApiConfigOpenapiDocumentArgs\n {\n Document = new Gcp.ApiGateway.Inputs.ApiConfigOpenapiDocumentDocumentArgs\n {\n Path = \"spec.yaml\",\n Contents = ReadFileBase64(\"test-fixtures/apigateway/openapi.yaml\"),\n },\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var apiGwGateway = new Gcp.ApiGateway.Gateway(\"apiGwGateway\", new()\n {\n ApiConfig = apiGwApiConfig.Id,\n GatewayId = \"api-gw\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/base64\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := os.ReadFile(path); err == nil {\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(fileData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tapiGwApi, err := apigateway.NewApi(ctx, \"apiGwApi\", \u0026apigateway.ApiArgs{\n\t\t\tApiId: pulumi.String(\"api-gw\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapiGwApiConfig, err := apigateway.NewApiConfig(ctx, \"apiGwApiConfig\", \u0026apigateway.ApiConfigArgs{\n\t\t\tApi: apiGwApi.ApiId,\n\t\t\tApiConfigId: pulumi.String(\"config\"),\n\t\t\tOpenapiDocuments: apigateway.ApiConfigOpenapiDocumentArray{\n\t\t\t\t\u0026apigateway.ApiConfigOpenapiDocumentArgs{\n\t\t\t\t\tDocument: \u0026apigateway.ApiConfigOpenapiDocumentDocumentArgs{\n\t\t\t\t\t\tPath: pulumi.String(\"spec.yaml\"),\n\t\t\t\t\t\tContents: filebase64OrPanic(\"test-fixtures/apigateway/openapi.yaml\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewGateway(ctx, \"apiGwGateway\", \u0026apigateway.GatewayArgs{\n\t\t\tApiConfig: apiGwApiConfig.ID(),\n\t\t\tGatewayId: pulumi.String(\"api-gw\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.Api;\nimport com.pulumi.gcp.apigateway.ApiArgs;\nimport com.pulumi.gcp.apigateway.ApiConfig;\nimport com.pulumi.gcp.apigateway.ApiConfigArgs;\nimport com.pulumi.gcp.apigateway.inputs.ApiConfigOpenapiDocumentArgs;\nimport com.pulumi.gcp.apigateway.inputs.ApiConfigOpenapiDocumentDocumentArgs;\nimport com.pulumi.gcp.apigateway.Gateway;\nimport com.pulumi.gcp.apigateway.GatewayArgs;\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 apiGwApi = new Api(\"apiGwApi\", ApiArgs.builder() \n .apiId(\"api-gw\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var apiGwApiConfig = new ApiConfig(\"apiGwApiConfig\", ApiConfigArgs.builder() \n .api(apiGwApi.apiId())\n .apiConfigId(\"config\")\n .openapiDocuments(ApiConfigOpenapiDocumentArgs.builder()\n .document(ApiConfigOpenapiDocumentDocumentArgs.builder()\n .path(\"spec.yaml\")\n .contents(Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(\"test-fixtures/apigateway/openapi.yaml\"))))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var apiGwGateway = new Gateway(\"apiGwGateway\", GatewayArgs.builder() \n .apiConfig(apiGwApiConfig.id())\n .gatewayId(\"api-gw\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGateway can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigateway/gateway:Gateway default projects/{{project}}/locations/{{region}}/gateways/{{gateway_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/gateway:Gateway default {{project}}/{{region}}/{{gateway_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/gateway:Gateway default {{region}}/{{gateway_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/gateway:Gateway default {{gateway_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Apigateway Gateway Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst apiGwApi = new gcp.apigateway.Api(\"apiGwApi\", {apiId: \"api-gw\"}, {\n provider: google_beta,\n});\nconst apiGwApiConfig = new gcp.apigateway.ApiConfig(\"apiGwApiConfig\", {\n api: apiGwApi.apiId,\n apiConfigId: \"config\",\n openapiDocuments: [{\n document: {\n path: \"spec.yaml\",\n contents: Buffer.from(fs.readFileSync(\"test-fixtures/apigateway/openapi.yaml\"), 'binary').toString('base64'),\n },\n }],\n}, {\n provider: google_beta,\n});\nconst apiGwGateway = new gcp.apigateway.Gateway(\"apiGwGateway\", {\n apiConfig: apiGwApiConfig.id,\n gatewayId: \"api-gw\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport base64\nimport pulumi_gcp as gcp\n\napi_gw_api = gcp.apigateway.Api(\"apiGwApi\", api_id=\"api-gw\",\nopts=pulumi.ResourceOptions(provider=google_beta))\napi_gw_api_config = gcp.apigateway.ApiConfig(\"apiGwApiConfig\",\n api=api_gw_api.api_id,\n api_config_id=\"config\",\n openapi_documents=[gcp.apigateway.ApiConfigOpenapiDocumentArgs(\n document=gcp.apigateway.ApiConfigOpenapiDocumentDocumentArgs(\n path=\"spec.yaml\",\n contents=(lambda path: base64.b64encode(open(path).read().encode()).decode())(\"test-fixtures/apigateway/openapi.yaml\"),\n ),\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\napi_gw_gateway = gcp.apigateway.Gateway(\"apiGwGateway\",\n api_config=api_gw_api_config.id,\n gateway_id=\"api-gw\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\n\tprivate static string ReadFileBase64(string path) {\n\t\treturn Convert.ToBase64String(Encoding.UTF8.GetBytes(File.ReadAllText(path)))\n\t}\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var apiGwApi = new Gcp.ApiGateway.Api(\"apiGwApi\", new()\n {\n ApiId = \"api-gw\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var apiGwApiConfig = new Gcp.ApiGateway.ApiConfig(\"apiGwApiConfig\", new()\n {\n Api = apiGwApi.ApiId,\n ApiConfigId = \"config\",\n OpenapiDocuments = new[]\n {\n new Gcp.ApiGateway.Inputs.ApiConfigOpenapiDocumentArgs\n {\n Document = new Gcp.ApiGateway.Inputs.ApiConfigOpenapiDocumentDocumentArgs\n {\n Path = \"spec.yaml\",\n Contents = ReadFileBase64(\"test-fixtures/apigateway/openapi.yaml\"),\n },\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var apiGwGateway = new Gcp.ApiGateway.Gateway(\"apiGwGateway\", new()\n {\n ApiConfig = apiGwApiConfig.Id,\n GatewayId = \"api-gw\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/base64\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := os.ReadFile(path); err == nil {\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(fileData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tapiGwApi, err := apigateway.NewApi(ctx, \"apiGwApi\", \u0026apigateway.ApiArgs{\n\t\t\tApiId: pulumi.String(\"api-gw\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapiGwApiConfig, err := apigateway.NewApiConfig(ctx, \"apiGwApiConfig\", \u0026apigateway.ApiConfigArgs{\n\t\t\tApi: apiGwApi.ApiId,\n\t\t\tApiConfigId: pulumi.String(\"config\"),\n\t\t\tOpenapiDocuments: apigateway.ApiConfigOpenapiDocumentArray{\n\t\t\t\t\u0026apigateway.ApiConfigOpenapiDocumentArgs{\n\t\t\t\t\tDocument: \u0026apigateway.ApiConfigOpenapiDocumentDocumentArgs{\n\t\t\t\t\t\tPath: pulumi.String(\"spec.yaml\"),\n\t\t\t\t\t\tContents: filebase64OrPanic(\"test-fixtures/apigateway/openapi.yaml\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigateway.NewGateway(ctx, \"apiGwGateway\", \u0026apigateway.GatewayArgs{\n\t\t\tApiConfig: apiGwApiConfig.ID(),\n\t\t\tGatewayId: pulumi.String(\"api-gw\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.Api;\nimport com.pulumi.gcp.apigateway.ApiArgs;\nimport com.pulumi.gcp.apigateway.ApiConfig;\nimport com.pulumi.gcp.apigateway.ApiConfigArgs;\nimport com.pulumi.gcp.apigateway.inputs.ApiConfigOpenapiDocumentArgs;\nimport com.pulumi.gcp.apigateway.inputs.ApiConfigOpenapiDocumentDocumentArgs;\nimport com.pulumi.gcp.apigateway.Gateway;\nimport com.pulumi.gcp.apigateway.GatewayArgs;\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 apiGwApi = new Api(\"apiGwApi\", ApiArgs.builder() \n .apiId(\"api-gw\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var apiGwApiConfig = new ApiConfig(\"apiGwApiConfig\", ApiConfigArgs.builder() \n .api(apiGwApi.apiId())\n .apiConfigId(\"config\")\n .openapiDocuments(ApiConfigOpenapiDocumentArgs.builder()\n .document(ApiConfigOpenapiDocumentDocumentArgs.builder()\n .path(\"spec.yaml\")\n .contents(Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(\"test-fixtures/apigateway/openapi.yaml\"))))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var apiGwGateway = new Gateway(\"apiGwGateway\", GatewayArgs.builder() \n .apiConfig(apiGwApiConfig.id())\n .gatewayId(\"api-gw\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGateway can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigateway/gateway:Gateway default projects/{{project}}/locations/{{region}}/gateways/{{gateway_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/gateway:Gateway default {{project}}/{{region}}/{{gateway_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/gateway:Gateway default {{region}}/{{gateway_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigateway/gateway:Gateway default {{gateway_id}}\n```\n\n ", "properties": { "apiConfig": { "type": "string", @@ -108661,7 +109766,7 @@ } }, "gcp:apigateway/gatewayIamBinding:GatewayIamBinding": { - "description": "Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case:\n\n* `gcp.apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached.\n* `gcp.apigateway.GatewayIamBinding`: 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 gateway are preserved.\n* `gcp.apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved.\n\n\u003e **Note:** `gcp.apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.GatewayIamBinding` and `gcp.apigateway.GatewayIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.apigateway.GatewayIamBinding` resources **can be** used in conjunction with `gcp.apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n## google\\_api\\_gateway\\_gateway\\_iam\\_policy\n\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/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.apigateway.GatewayIamPolicy(\"policy\", {\n project: google_api_gateway_gateway.api_gw.project,\n region: google_api_gateway_gateway.api_gw.region,\n gateway: google_api_gateway_gateway.api_gw.gateway_id,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.apigateway.GatewayIamPolicy(\"policy\",\n project=google_api_gateway_gateway[\"api_gw\"][\"project\"],\n region=google_api_gateway_gateway[\"api_gw\"][\"region\"],\n gateway=google_api_gateway_gateway[\"api_gw\"][\"gateway_id\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ApiGateway.GatewayIamPolicy(\"policy\", new()\n {\n Project = google_api_gateway_gateway.Api_gw.Project,\n Region = google_api_gateway_gateway.Api_gw.Region,\n Gateway = google_api_gateway_gateway.Api_gw.Gateway_id,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/apigateway.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 = apigateway.NewGatewayIamPolicy(ctx, \"policy\", \u0026apigateway.GatewayIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_gateway.Api_gw.Project),\n\t\t\tRegion: pulumi.Any(google_api_gateway_gateway.Api_gw.Region),\n\t\t\tGateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.apigateway.GatewayIamPolicy;\nimport com.pulumi.gcp.apigateway.GatewayIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new GatewayIamPolicy(\"policy\", GatewayIamPolicyArgs.builder() \n .project(google_api_gateway_gateway.api_gw().project())\n .region(google_api_gateway_gateway.api_gw().region())\n .gateway(google_api_gateway_gateway.api_gw().gateway_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:apigateway:GatewayIamPolicy\n properties:\n project: ${google_api_gateway_gateway.api_gw.project}\n region: ${google_api_gateway_gateway.api_gw.region}\n gateway: ${google_api_gateway_gateway.api_gw.gateway_id}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_api\\_gateway\\_gateway\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.apigateway.GatewayIamBinding(\"binding\", {\n project: google_api_gateway_gateway.api_gw.project,\n region: google_api_gateway_gateway.api_gw.region,\n gateway: google_api_gateway_gateway.api_gw.gateway_id,\n role: \"roles/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.apigateway.GatewayIamBinding(\"binding\",\n project=google_api_gateway_gateway[\"api_gw\"][\"project\"],\n region=google_api_gateway_gateway[\"api_gw\"][\"region\"],\n gateway=google_api_gateway_gateway[\"api_gw\"][\"gateway_id\"],\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ApiGateway.GatewayIamBinding(\"binding\", new()\n {\n Project = google_api_gateway_gateway.Api_gw.Project,\n Region = google_api_gateway_gateway.Api_gw.Region,\n Gateway = google_api_gateway_gateway.Api_gw.Gateway_id,\n Role = \"roles/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewGatewayIamBinding(ctx, \"binding\", \u0026apigateway.GatewayIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_gateway.Api_gw.Project),\n\t\t\tRegion: pulumi.Any(google_api_gateway_gateway.Api_gw.Region),\n\t\t\tGateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.GatewayIamBinding;\nimport com.pulumi.gcp.apigateway.GatewayIamBindingArgs;\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 binding = new GatewayIamBinding(\"binding\", GatewayIamBindingArgs.builder() \n .project(google_api_gateway_gateway.api_gw().project())\n .region(google_api_gateway_gateway.api_gw().region())\n .gateway(google_api_gateway_gateway.api_gw().gateway_id())\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:apigateway:GatewayIamBinding\n properties:\n project: ${google_api_gateway_gateway.api_gw.project}\n region: ${google_api_gateway_gateway.api_gw.region}\n gateway: ${google_api_gateway_gateway.api_gw.gateway_id}\n role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_api\\_gateway\\_gateway\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.apigateway.GatewayIamMember(\"member\", {\n project: google_api_gateway_gateway.api_gw.project,\n region: google_api_gateway_gateway.api_gw.region,\n gateway: google_api_gateway_gateway.api_gw.gateway_id,\n role: \"roles/apigateway.viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.apigateway.GatewayIamMember(\"member\",\n project=google_api_gateway_gateway[\"api_gw\"][\"project\"],\n region=google_api_gateway_gateway[\"api_gw\"][\"region\"],\n gateway=google_api_gateway_gateway[\"api_gw\"][\"gateway_id\"],\n role=\"roles/apigateway.viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ApiGateway.GatewayIamMember(\"member\", new()\n {\n Project = google_api_gateway_gateway.Api_gw.Project,\n Region = google_api_gateway_gateway.Api_gw.Region,\n Gateway = google_api_gateway_gateway.Api_gw.Gateway_id,\n Role = \"roles/apigateway.viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewGatewayIamMember(ctx, \"member\", \u0026apigateway.GatewayIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_gateway.Api_gw.Project),\n\t\t\tRegion: pulumi.Any(google_api_gateway_gateway.Api_gw.Region),\n\t\t\tGateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.GatewayIamMember;\nimport com.pulumi.gcp.apigateway.GatewayIamMemberArgs;\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 member = new GatewayIamMember(\"member\", GatewayIamMemberArgs.builder() \n .project(google_api_gateway_gateway.api_gw().project())\n .region(google_api_gateway_gateway.api_gw().region())\n .gateway(google_api_gateway_gateway.api_gw().gateway_id())\n .role(\"roles/apigateway.viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:apigateway:GatewayIamMember\n properties:\n project: ${google_api_gateway_gateway.api_gw.project}\n region: ${google_api_gateway_gateway.api_gw.region}\n gateway: ${google_api_gateway_gateway.api_gw.gateway_id}\n role: roles/apigateway.viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamBinding:GatewayIamBinding editor \"projects/{{project}}/locations/{{region}}/gateways/{{gateway}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamBinding:GatewayIamBinding editor \"projects/{{project}}/locations/{{region}}/gateways/{{gateway}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamBinding:GatewayIamBinding editor projects/{{project}}/locations/{{region}}/gateways/{{gateway}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamBinding:GatewayIamBinding editor \"projects/{{project}}/locations/{{region}}/gateways/{{gateway}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamBinding:GatewayIamBinding editor \"projects/{{project}}/locations/{{region}}/gateways/{{gateway}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamBinding:GatewayIamBinding editor projects/{{project}}/locations/{{region}}/gateways/{{gateway}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:apigateway/GatewayIamBindingCondition:GatewayIamBindingCondition" @@ -108777,7 +109882,7 @@ } }, "gcp:apigateway/gatewayIamMember:GatewayIamMember": { - "description": "Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case:\n\n* `gcp.apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached.\n* `gcp.apigateway.GatewayIamBinding`: 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 gateway are preserved.\n* `gcp.apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved.\n\n\u003e **Note:** `gcp.apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.GatewayIamBinding` and `gcp.apigateway.GatewayIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.apigateway.GatewayIamBinding` resources **can be** used in conjunction with `gcp.apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n## google\\_api\\_gateway\\_gateway\\_iam\\_policy\n\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/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.apigateway.GatewayIamPolicy(\"policy\", {\n project: google_api_gateway_gateway.api_gw.project,\n region: google_api_gateway_gateway.api_gw.region,\n gateway: google_api_gateway_gateway.api_gw.gateway_id,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.apigateway.GatewayIamPolicy(\"policy\",\n project=google_api_gateway_gateway[\"api_gw\"][\"project\"],\n region=google_api_gateway_gateway[\"api_gw\"][\"region\"],\n gateway=google_api_gateway_gateway[\"api_gw\"][\"gateway_id\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ApiGateway.GatewayIamPolicy(\"policy\", new()\n {\n Project = google_api_gateway_gateway.Api_gw.Project,\n Region = google_api_gateway_gateway.Api_gw.Region,\n Gateway = google_api_gateway_gateway.Api_gw.Gateway_id,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/apigateway.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 = apigateway.NewGatewayIamPolicy(ctx, \"policy\", \u0026apigateway.GatewayIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_gateway.Api_gw.Project),\n\t\t\tRegion: pulumi.Any(google_api_gateway_gateway.Api_gw.Region),\n\t\t\tGateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.apigateway.GatewayIamPolicy;\nimport com.pulumi.gcp.apigateway.GatewayIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new GatewayIamPolicy(\"policy\", GatewayIamPolicyArgs.builder() \n .project(google_api_gateway_gateway.api_gw().project())\n .region(google_api_gateway_gateway.api_gw().region())\n .gateway(google_api_gateway_gateway.api_gw().gateway_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:apigateway:GatewayIamPolicy\n properties:\n project: ${google_api_gateway_gateway.api_gw.project}\n region: ${google_api_gateway_gateway.api_gw.region}\n gateway: ${google_api_gateway_gateway.api_gw.gateway_id}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_api\\_gateway\\_gateway\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.apigateway.GatewayIamBinding(\"binding\", {\n project: google_api_gateway_gateway.api_gw.project,\n region: google_api_gateway_gateway.api_gw.region,\n gateway: google_api_gateway_gateway.api_gw.gateway_id,\n role: \"roles/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.apigateway.GatewayIamBinding(\"binding\",\n project=google_api_gateway_gateway[\"api_gw\"][\"project\"],\n region=google_api_gateway_gateway[\"api_gw\"][\"region\"],\n gateway=google_api_gateway_gateway[\"api_gw\"][\"gateway_id\"],\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ApiGateway.GatewayIamBinding(\"binding\", new()\n {\n Project = google_api_gateway_gateway.Api_gw.Project,\n Region = google_api_gateway_gateway.Api_gw.Region,\n Gateway = google_api_gateway_gateway.Api_gw.Gateway_id,\n Role = \"roles/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewGatewayIamBinding(ctx, \"binding\", \u0026apigateway.GatewayIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_gateway.Api_gw.Project),\n\t\t\tRegion: pulumi.Any(google_api_gateway_gateway.Api_gw.Region),\n\t\t\tGateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.GatewayIamBinding;\nimport com.pulumi.gcp.apigateway.GatewayIamBindingArgs;\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 binding = new GatewayIamBinding(\"binding\", GatewayIamBindingArgs.builder() \n .project(google_api_gateway_gateway.api_gw().project())\n .region(google_api_gateway_gateway.api_gw().region())\n .gateway(google_api_gateway_gateway.api_gw().gateway_id())\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:apigateway:GatewayIamBinding\n properties:\n project: ${google_api_gateway_gateway.api_gw.project}\n region: ${google_api_gateway_gateway.api_gw.region}\n gateway: ${google_api_gateway_gateway.api_gw.gateway_id}\n role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_api\\_gateway\\_gateway\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.apigateway.GatewayIamMember(\"member\", {\n project: google_api_gateway_gateway.api_gw.project,\n region: google_api_gateway_gateway.api_gw.region,\n gateway: google_api_gateway_gateway.api_gw.gateway_id,\n role: \"roles/apigateway.viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.apigateway.GatewayIamMember(\"member\",\n project=google_api_gateway_gateway[\"api_gw\"][\"project\"],\n region=google_api_gateway_gateway[\"api_gw\"][\"region\"],\n gateway=google_api_gateway_gateway[\"api_gw\"][\"gateway_id\"],\n role=\"roles/apigateway.viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ApiGateway.GatewayIamMember(\"member\", new()\n {\n Project = google_api_gateway_gateway.Api_gw.Project,\n Region = google_api_gateway_gateway.Api_gw.Region,\n Gateway = google_api_gateway_gateway.Api_gw.Gateway_id,\n Role = \"roles/apigateway.viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewGatewayIamMember(ctx, \"member\", \u0026apigateway.GatewayIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_gateway.Api_gw.Project),\n\t\t\tRegion: pulumi.Any(google_api_gateway_gateway.Api_gw.Region),\n\t\t\tGateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.GatewayIamMember;\nimport com.pulumi.gcp.apigateway.GatewayIamMemberArgs;\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 member = new GatewayIamMember(\"member\", GatewayIamMemberArgs.builder() \n .project(google_api_gateway_gateway.api_gw().project())\n .region(google_api_gateway_gateway.api_gw().region())\n .gateway(google_api_gateway_gateway.api_gw().gateway_id())\n .role(\"roles/apigateway.viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:apigateway:GatewayIamMember\n properties:\n project: ${google_api_gateway_gateway.api_gw.project}\n region: ${google_api_gateway_gateway.api_gw.region}\n gateway: ${google_api_gateway_gateway.api_gw.gateway_id}\n role: roles/apigateway.viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamMember:GatewayIamMember editor \"projects/{{project}}/locations/{{region}}/gateways/{{gateway}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamMember:GatewayIamMember editor \"projects/{{project}}/locations/{{region}}/gateways/{{gateway}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamMember:GatewayIamMember editor projects/{{project}}/locations/{{region}}/gateways/{{gateway}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamMember:GatewayIamMember editor \"projects/{{project}}/locations/{{region}}/gateways/{{gateway}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamMember:GatewayIamMember editor \"projects/{{project}}/locations/{{region}}/gateways/{{gateway}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamMember:GatewayIamMember editor projects/{{project}}/locations/{{region}}/gateways/{{gateway}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:apigateway/GatewayIamMemberCondition:GatewayIamMemberCondition" @@ -108886,7 +109991,7 @@ } }, "gcp:apigateway/gatewayIamPolicy:GatewayIamPolicy": { - "description": "Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case:\n\n* `gcp.apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached.\n* `gcp.apigateway.GatewayIamBinding`: 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 gateway are preserved.\n* `gcp.apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved.\n\n\u003e **Note:** `gcp.apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.GatewayIamBinding` and `gcp.apigateway.GatewayIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.apigateway.GatewayIamBinding` resources **can be** used in conjunction with `gcp.apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n## google\\_api\\_gateway\\_gateway\\_iam\\_policy\n\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/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.apigateway.GatewayIamPolicy(\"policy\", {\n project: google_api_gateway_gateway.api_gw.project,\n region: google_api_gateway_gateway.api_gw.region,\n gateway: google_api_gateway_gateway.api_gw.gateway_id,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.apigateway.GatewayIamPolicy(\"policy\",\n project=google_api_gateway_gateway[\"api_gw\"][\"project\"],\n region=google_api_gateway_gateway[\"api_gw\"][\"region\"],\n gateway=google_api_gateway_gateway[\"api_gw\"][\"gateway_id\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ApiGateway.GatewayIamPolicy(\"policy\", new()\n {\n Project = google_api_gateway_gateway.Api_gw.Project,\n Region = google_api_gateway_gateway.Api_gw.Region,\n Gateway = google_api_gateway_gateway.Api_gw.Gateway_id,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/apigateway.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 = apigateway.NewGatewayIamPolicy(ctx, \"policy\", \u0026apigateway.GatewayIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_gateway.Api_gw.Project),\n\t\t\tRegion: pulumi.Any(google_api_gateway_gateway.Api_gw.Region),\n\t\t\tGateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.apigateway.GatewayIamPolicy;\nimport com.pulumi.gcp.apigateway.GatewayIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new GatewayIamPolicy(\"policy\", GatewayIamPolicyArgs.builder() \n .project(google_api_gateway_gateway.api_gw().project())\n .region(google_api_gateway_gateway.api_gw().region())\n .gateway(google_api_gateway_gateway.api_gw().gateway_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:apigateway:GatewayIamPolicy\n properties:\n project: ${google_api_gateway_gateway.api_gw.project}\n region: ${google_api_gateway_gateway.api_gw.region}\n gateway: ${google_api_gateway_gateway.api_gw.gateway_id}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_api\\_gateway\\_gateway\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.apigateway.GatewayIamBinding(\"binding\", {\n project: google_api_gateway_gateway.api_gw.project,\n region: google_api_gateway_gateway.api_gw.region,\n gateway: google_api_gateway_gateway.api_gw.gateway_id,\n role: \"roles/apigateway.viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.apigateway.GatewayIamBinding(\"binding\",\n project=google_api_gateway_gateway[\"api_gw\"][\"project\"],\n region=google_api_gateway_gateway[\"api_gw\"][\"region\"],\n gateway=google_api_gateway_gateway[\"api_gw\"][\"gateway_id\"],\n role=\"roles/apigateway.viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ApiGateway.GatewayIamBinding(\"binding\", new()\n {\n Project = google_api_gateway_gateway.Api_gw.Project,\n Region = google_api_gateway_gateway.Api_gw.Region,\n Gateway = google_api_gateway_gateway.Api_gw.Gateway_id,\n Role = \"roles/apigateway.viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewGatewayIamBinding(ctx, \"binding\", \u0026apigateway.GatewayIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_gateway.Api_gw.Project),\n\t\t\tRegion: pulumi.Any(google_api_gateway_gateway.Api_gw.Region),\n\t\t\tGateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.GatewayIamBinding;\nimport com.pulumi.gcp.apigateway.GatewayIamBindingArgs;\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 binding = new GatewayIamBinding(\"binding\", GatewayIamBindingArgs.builder() \n .project(google_api_gateway_gateway.api_gw().project())\n .region(google_api_gateway_gateway.api_gw().region())\n .gateway(google_api_gateway_gateway.api_gw().gateway_id())\n .role(\"roles/apigateway.viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:apigateway:GatewayIamBinding\n properties:\n project: ${google_api_gateway_gateway.api_gw.project}\n region: ${google_api_gateway_gateway.api_gw.region}\n gateway: ${google_api_gateway_gateway.api_gw.gateway_id}\n role: roles/apigateway.viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_api\\_gateway\\_gateway\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.apigateway.GatewayIamMember(\"member\", {\n project: google_api_gateway_gateway.api_gw.project,\n region: google_api_gateway_gateway.api_gw.region,\n gateway: google_api_gateway_gateway.api_gw.gateway_id,\n role: \"roles/apigateway.viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.apigateway.GatewayIamMember(\"member\",\n project=google_api_gateway_gateway[\"api_gw\"][\"project\"],\n region=google_api_gateway_gateway[\"api_gw\"][\"region\"],\n gateway=google_api_gateway_gateway[\"api_gw\"][\"gateway_id\"],\n role=\"roles/apigateway.viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ApiGateway.GatewayIamMember(\"member\", new()\n {\n Project = google_api_gateway_gateway.Api_gw.Project,\n Region = google_api_gateway_gateway.Api_gw.Region,\n Gateway = google_api_gateway_gateway.Api_gw.Gateway_id,\n Role = \"roles/apigateway.viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := apigateway.NewGatewayIamMember(ctx, \"member\", \u0026apigateway.GatewayIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_api_gateway_gateway.Api_gw.Project),\n\t\t\tRegion: pulumi.Any(google_api_gateway_gateway.Api_gw.Region),\n\t\t\tGateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id),\n\t\t\tRole: pulumi.String(\"roles/apigateway.viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.apigateway.GatewayIamMember;\nimport com.pulumi.gcp.apigateway.GatewayIamMemberArgs;\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 member = new GatewayIamMember(\"member\", GatewayIamMemberArgs.builder() \n .project(google_api_gateway_gateway.api_gw().project())\n .region(google_api_gateway_gateway.api_gw().region())\n .gateway(google_api_gateway_gateway.api_gw().gateway_id())\n .role(\"roles/apigateway.viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:apigateway:GatewayIamMember\n properties:\n project: ${google_api_gateway_gateway.api_gw.project}\n region: ${google_api_gateway_gateway.api_gw.region}\n gateway: ${google_api_gateway_gateway.api_gw.gateway_id}\n role: roles/apigateway.viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamPolicy:GatewayIamPolicy editor \"projects/{{project}}/locations/{{region}}/gateways/{{gateway}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamPolicy:GatewayIamPolicy editor \"projects/{{project}}/locations/{{region}}/gateways/{{gateway}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamPolicy:GatewayIamPolicy editor projects/{{project}}/locations/{{region}}/gateways/{{gateway}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamPolicy:GatewayIamPolicy editor \"projects/{{project}}/locations/{{region}}/gateways/{{gateway}} roles/apigateway.viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamPolicy:GatewayIamPolicy editor \"projects/{{project}}/locations/{{region}}/gateways/{{gateway}} roles/apigateway.viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:apigateway/gatewayIamPolicy:GatewayIamPolicy editor projects/{{project}}/locations/{{region}}/gateways/{{gateway}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "etag": { "type": "string", @@ -109077,7 +110182,7 @@ } }, "gcp:apigee/envGroup:EnvGroup": { - "description": "An `Environment group` in Apigee.\n\n\nTo get more information about Envgroup, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.envgroups/create)\n* How-to Guides\n * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Apigee Environment Group Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst current = gcp.organizations.getClientConfig({});\nconst apigeeNetwork = new gcp.compute.Network(\"apigeeNetwork\", {});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigeeRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: apigeeNetwork.id,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigeeVpcConnection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n});\nconst apigeeOrg = new gcp.apigee.Organization(\"apigeeOrg\", {\n analyticsRegion: \"us-central1\",\n projectId: current.then(current =\u003e current.project),\n authorizedNetwork: apigeeNetwork.id,\n}, {\n dependsOn: [apigeeVpcConnection],\n});\nconst envGrp = new gcp.apigee.EnvGroup(\"envGrp\", {\n hostnames: [\"abc.foo.com\"],\n orgId: apigeeOrg.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncurrent = gcp.organizations.get_client_config()\napigee_network = gcp.compute.Network(\"apigeeNetwork\")\napigee_range = gcp.compute.GlobalAddress(\"apigeeRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=apigee_network.id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigeeVpcConnection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name])\napigee_org = gcp.apigee.Organization(\"apigeeOrg\",\n analytics_region=\"us-central1\",\n project_id=current.project,\n authorized_network=apigee_network.id,\n opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection]))\nenv_grp = gcp.apigee.EnvGroup(\"envGrp\",\n hostnames=[\"abc.foo.com\"],\n org_id=apigee_org.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var current = Gcp.Organizations.GetClientConfig.Invoke();\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigeeNetwork\");\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigeeRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = apigeeNetwork.Id,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigeeVpcConnection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n });\n\n var apigeeOrg = new Gcp.Apigee.Organization(\"apigeeOrg\", new()\n {\n AnalyticsRegion = \"us-central1\",\n ProjectId = current.Apply(getClientConfigResult =\u003e getClientConfigResult.Project),\n AuthorizedNetwork = apigeeNetwork.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n apigeeVpcConnection,\n },\n });\n\n var envGrp = new Gcp.Apigee.EnvGroup(\"envGrp\", new()\n {\n Hostnames = new[]\n {\n \"abc.foo.com\",\n },\n OrgId = apigeeOrg.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tcurrent, err := organizations.GetClientConfig(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigeeNetwork\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigeeRange\", \u0026compute.GlobalAddressArgs{\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: apigeeNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigeeVpcConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeOrg, err := apigee.NewOrganization(ctx, \"apigeeOrg\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tProjectId: *pulumi.String(current.Project),\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigee.NewEnvGroup(ctx, \"envGrp\", \u0026apigee.EnvGroupArgs{\n\t\t\tHostnames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"abc.foo.com\"),\n\t\t\t},\n\t\t\tOrgId: apigeeOrg.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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.compute.Network;\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.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\nimport com.pulumi.gcp.apigee.EnvGroup;\nimport com.pulumi.gcp.apigee.EnvGroupArgs;\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 current = OrganizationsFunctions.getClientConfig();\n\n var apigeeNetwork = new Network(\"apigeeNetwork\");\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(apigeeNetwork.id())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder() \n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build());\n\n var apigeeOrg = new Organization(\"apigeeOrg\", OrganizationArgs.builder() \n .analyticsRegion(\"us-central1\")\n .projectId(current.applyValue(getClientConfigResult -\u003e getClientConfigResult.project()))\n .authorizedNetwork(apigeeNetwork.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn(apigeeVpcConnection)\n .build());\n\n var envGrp = new EnvGroup(\"envGrp\", EnvGroupArgs.builder() \n .hostnames(\"abc.foo.com\")\n .orgId(apigeeOrg.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n apigeeNetwork:\n type: gcp:compute:Network\n apigeeRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${apigeeNetwork.id}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n apigeeOrg:\n type: gcp:apigee:Organization\n properties:\n analyticsRegion: us-central1\n projectId: ${current.project}\n authorizedNetwork: ${apigeeNetwork.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\n envGrp:\n type: gcp:apigee:EnvGroup\n properties:\n hostnames:\n - abc.foo.com\n orgId: ${apigeeOrg.id}\nvariables:\n current:\n fn::invoke:\n Function: gcp:organizations:getClientConfig\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nEnvgroup can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigee/envGroup:EnvGroup default {{org_id}}/envgroups/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigee/envGroup:EnvGroup default {{org_id}}/{{name}}\n```\n\n ", + "description": "An `Environment group` in Apigee.\n\n\nTo get more information about Envgroup, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.envgroups/create)\n* How-to Guides\n * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment)\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nEnvgroup can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigee/envGroup:EnvGroup default {{org_id}}/envgroups/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigee/envGroup:EnvGroup default {{org_id}}/{{name}}\n```\n\n ", "properties": { "hostnames": { "type": "array", @@ -109146,7 +110251,7 @@ } }, "gcp:apigee/envGroupAttachment:EnvGroupAttachment": { - "description": "An `Environment Group attachment` in Apigee.\n\n\nTo get more information about EnvgroupAttachment, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.envgroups.attachments/create)\n* How-to Guides\n * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Apigee Environment Group Attachment Basic\n\n\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\",\n orgId: \"\",\n billingAccount: \"\",\n});\nconst apigee = new gcp.projects.Service(\"apigee\", {\n project: project.projectId,\n service: \"apigee.googleapis.com\",\n});\nconst compute = new gcp.projects.Service(\"compute\", {\n project: project.projectId,\n service: \"compute.googleapis.com\",\n});\nconst servicenetworking = new gcp.projects.Service(\"servicenetworking\", {\n project: project.projectId,\n service: \"servicenetworking.googleapis.com\",\n});\nconst apigeeNetwork = new gcp.compute.Network(\"apigeeNetwork\", {project: project.projectId}, {\n dependsOn: [compute],\n});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigeeRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: apigeeNetwork.id,\n project: project.projectId,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigeeVpcConnection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n}, {\n dependsOn: [servicenetworking],\n});\nconst apigeeOrg = new gcp.apigee.Organization(\"apigeeOrg\", {\n analyticsRegion: \"us-central1\",\n projectId: project.projectId,\n authorizedNetwork: apigeeNetwork.id,\n}, {\n dependsOn: [\n apigeeVpcConnection,\n apigee,\n ],\n});\nconst apigeeEnvgroup = new gcp.apigee.EnvGroup(\"apigeeEnvgroup\", {\n orgId: apigeeOrg.id,\n hostnames: [\"abc.foo.com\"],\n});\nconst apigeeEnv = new gcp.apigee.Environment(\"apigeeEnv\", {\n orgId: apigeeOrg.id,\n description: \"Apigee Environment\",\n displayName: \"tf-test\",\n});\nconst envGroupAttachment = new gcp.apigee.EnvGroupAttachment(\"envGroupAttachment\", {\n envgroupId: apigeeEnvgroup.id,\n environment: apigeeEnv.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.Project(\"project\",\n project_id=\"tf-test\",\n org_id=\"\",\n billing_account=\"\")\napigee = gcp.projects.Service(\"apigee\",\n project=project.project_id,\n service=\"apigee.googleapis.com\")\ncompute = gcp.projects.Service(\"compute\",\n project=project.project_id,\n service=\"compute.googleapis.com\")\nservicenetworking = gcp.projects.Service(\"servicenetworking\",\n project=project.project_id,\n service=\"servicenetworking.googleapis.com\")\napigee_network = gcp.compute.Network(\"apigeeNetwork\", project=project.project_id,\nopts=pulumi.ResourceOptions(depends_on=[compute]))\napigee_range = gcp.compute.GlobalAddress(\"apigeeRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=apigee_network.id,\n project=project.project_id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigeeVpcConnection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name],\n opts=pulumi.ResourceOptions(depends_on=[servicenetworking]))\napigee_org = gcp.apigee.Organization(\"apigeeOrg\",\n analytics_region=\"us-central1\",\n project_id=project.project_id,\n authorized_network=apigee_network.id,\n opts=pulumi.ResourceOptions(depends_on=[\n apigee_vpc_connection,\n apigee,\n ]))\napigee_envgroup = gcp.apigee.EnvGroup(\"apigeeEnvgroup\",\n org_id=apigee_org.id,\n hostnames=[\"abc.foo.com\"])\napigee_env = gcp.apigee.Environment(\"apigeeEnv\",\n org_id=apigee_org.id,\n description=\"Apigee Environment\",\n display_name=\"tf-test\")\nenv_group_attachment = gcp.apigee.EnvGroupAttachment(\"envGroupAttachment\",\n envgroup_id=apigee_envgroup.id,\n environment=apigee_env.name)\n```\n```csharp\nusing System.Collections.Generic;\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\",\n OrgId = \"\",\n BillingAccount = \"\",\n });\n\n var apigee = new Gcp.Projects.Service(\"apigee\", new()\n {\n Project = project.ProjectId,\n ServiceName = \"apigee.googleapis.com\",\n });\n\n var compute = new Gcp.Projects.Service(\"compute\", new()\n {\n Project = project.ProjectId,\n ServiceName = \"compute.googleapis.com\",\n });\n\n var servicenetworking = new Gcp.Projects.Service(\"servicenetworking\", new()\n {\n Project = project.ProjectId,\n ServiceName = \"servicenetworking.googleapis.com\",\n });\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigeeNetwork\", new()\n {\n Project = project.ProjectId,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n compute,\n },\n });\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigeeRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = apigeeNetwork.Id,\n Project = project.ProjectId,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigeeVpcConnection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n servicenetworking,\n },\n });\n\n var apigeeOrg = new Gcp.Apigee.Organization(\"apigeeOrg\", new()\n {\n AnalyticsRegion = \"us-central1\",\n ProjectId = project.ProjectId,\n AuthorizedNetwork = apigeeNetwork.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n apigeeVpcConnection,\n apigee,\n },\n });\n\n var apigeeEnvgroup = new Gcp.Apigee.EnvGroup(\"apigeeEnvgroup\", new()\n {\n OrgId = apigeeOrg.Id,\n Hostnames = new[]\n {\n \"abc.foo.com\",\n },\n });\n\n var apigeeEnv = new Gcp.Apigee.Environment(\"apigeeEnv\", new()\n {\n OrgId = apigeeOrg.Id,\n Description = \"Apigee Environment\",\n DisplayName = \"tf-test\",\n });\n\n var envGroupAttachment = new Gcp.Apigee.EnvGroupAttachment(\"envGroupAttachment\", new()\n {\n EnvgroupId = apigeeEnvgroup.Id,\n Environment = apigeeEnv.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test\"),\n\t\t\tOrgId: pulumi.String(\"\"),\n\t\t\tBillingAccount: pulumi.String(\"\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigee, err := projects.NewService(ctx, \"apigee\", \u0026projects.ServiceArgs{\n\t\t\tProject: project.ProjectId,\n\t\t\tService: pulumi.String(\"apigee.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: project.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\tservicenetworking, err := projects.NewService(ctx, \"servicenetworking\", \u0026projects.ServiceArgs{\n\t\t\tProject: project.ProjectId,\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigeeNetwork\", \u0026compute.NetworkArgs{\n\t\t\tProject: project.ProjectId,\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\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigeeRange\", \u0026compute.GlobalAddressArgs{\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: apigeeNetwork.ID(),\n\t\t\tProject: project.ProjectId,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigeeVpcConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.Name,\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tservicenetworking,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeOrg, err := apigee.NewOrganization(ctx, \"apigeeOrg\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tProjectId: project.ProjectId,\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t\tapigee,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeEnvgroup, err := apigee.NewEnvGroup(ctx, \"apigeeEnvgroup\", \u0026apigee.EnvGroupArgs{\n\t\t\tOrgId: apigeeOrg.ID(),\n\t\t\tHostnames: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"abc.foo.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeEnv, err := apigee.NewEnvironment(ctx, \"apigeeEnv\", \u0026apigee.EnvironmentArgs{\n\t\t\tOrgId: apigeeOrg.ID(),\n\t\t\tDescription: pulumi.String(\"Apigee Environment\"),\n\t\t\tDisplayName: pulumi.String(\"tf-test\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigee.NewEnvGroupAttachment(ctx, \"envGroupAttachment\", \u0026apigee.EnvGroupAttachmentArgs{\n\t\t\tEnvgroupId: apigeeEnvgroup.ID(),\n\t\t\tEnvironment: apigeeEnv.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.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\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.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\nimport com.pulumi.gcp.apigee.EnvGroup;\nimport com.pulumi.gcp.apigee.EnvGroupArgs;\nimport com.pulumi.gcp.apigee.Environment;\nimport com.pulumi.gcp.apigee.EnvironmentArgs;\nimport com.pulumi.gcp.apigee.EnvGroupAttachment;\nimport com.pulumi.gcp.apigee.EnvGroupAttachmentArgs;\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 project = new Project(\"project\", ProjectArgs.builder() \n .projectId(\"tf-test\")\n .orgId(\"\")\n .billingAccount(\"\")\n .build());\n\n var apigee = new Service(\"apigee\", ServiceArgs.builder() \n .project(project.projectId())\n .service(\"apigee.googleapis.com\")\n .build());\n\n var compute = new Service(\"compute\", ServiceArgs.builder() \n .project(project.projectId())\n .service(\"compute.googleapis.com\")\n .build());\n\n var servicenetworking = new Service(\"servicenetworking\", ServiceArgs.builder() \n .project(project.projectId())\n .service(\"servicenetworking.googleapis.com\")\n .build());\n\n var apigeeNetwork = new Network(\"apigeeNetwork\", NetworkArgs.builder() \n .project(project.projectId())\n .build(), CustomResourceOptions.builder()\n .dependsOn(compute)\n .build());\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(apigeeNetwork.id())\n .project(project.projectId())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder() \n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build(), CustomResourceOptions.builder()\n .dependsOn(servicenetworking)\n .build());\n\n var apigeeOrg = new Organization(\"apigeeOrg\", OrganizationArgs.builder() \n .analyticsRegion(\"us-central1\")\n .projectId(project.projectId())\n .authorizedNetwork(apigeeNetwork.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n apigeeVpcConnection,\n apigee)\n .build());\n\n var apigeeEnvgroup = new EnvGroup(\"apigeeEnvgroup\", EnvGroupArgs.builder() \n .orgId(apigeeOrg.id())\n .hostnames(\"abc.foo.com\")\n .build());\n\n var apigeeEnv = new Environment(\"apigeeEnv\", EnvironmentArgs.builder() \n .orgId(apigeeOrg.id())\n .description(\"Apigee Environment\")\n .displayName(\"tf-test\")\n .build());\n\n var envGroupAttachment = new EnvGroupAttachment(\"envGroupAttachment\", EnvGroupAttachmentArgs.builder() \n .envgroupId(apigeeEnvgroup.id())\n .environment(apigeeEnv.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test\n orgId:\n billingAccount:\n apigee:\n type: gcp:projects:Service\n properties:\n project: ${project.projectId}\n service: apigee.googleapis.com\n compute:\n type: gcp:projects:Service\n properties:\n project: ${project.projectId}\n service: compute.googleapis.com\n servicenetworking:\n type: gcp:projects:Service\n properties:\n project: ${project.projectId}\n service: servicenetworking.googleapis.com\n apigeeNetwork:\n type: gcp:compute:Network\n properties:\n project: ${project.projectId}\n options:\n dependson:\n - ${compute}\n apigeeRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${apigeeNetwork.id}\n project: ${project.projectId}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n options:\n dependson:\n - ${servicenetworking}\n apigeeOrg:\n type: gcp:apigee:Organization\n properties:\n analyticsRegion: us-central1\n projectId: ${project.projectId}\n authorizedNetwork: ${apigeeNetwork.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\n - ${apigee}\n apigeeEnvgroup:\n type: gcp:apigee:EnvGroup\n properties:\n orgId: ${apigeeOrg.id}\n hostnames:\n - abc.foo.com\n apigeeEnv:\n type: gcp:apigee:Environment\n properties:\n orgId: ${apigeeOrg.id}\n description: Apigee Environment\n displayName: tf-test\n envGroupAttachment:\n type: gcp:apigee:EnvGroupAttachment\n properties:\n envgroupId: ${apigeeEnvgroup.id}\n environment: ${apigeeEnv.name}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nEnvgroupAttachment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigee/envGroupAttachment:EnvGroupAttachment default {{envgroup_id}}/attachments/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigee/envGroupAttachment:EnvGroupAttachment default {{envgroup_id}}/{{name}}\n```\n\n ", + "description": "An `Environment Group attachment` in Apigee.\n\n\nTo get more information about EnvgroupAttachment, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.envgroups.attachments/create)\n* How-to Guides\n * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment)\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nEnvgroupAttachment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigee/envGroupAttachment:EnvGroupAttachment default {{envgroup_id}}/attachments/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigee/envGroupAttachment:EnvGroupAttachment default {{envgroup_id}}/{{name}}\n```\n\n ", "properties": { "envgroupId": { "type": "string", @@ -109204,7 +110309,7 @@ } }, "gcp:apigee/environment:Environment": { - "description": "An `Environment` in Apigee.\n\n\nTo get more information about Environment, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.environments/create)\n* How-to Guides\n * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Apigee Environment Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst current = gcp.organizations.getClientConfig({});\nconst apigeeNetwork = new gcp.compute.Network(\"apigeeNetwork\", {});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigeeRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: apigeeNetwork.id,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigeeVpcConnection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n});\nconst apigeeOrg = new gcp.apigee.Organization(\"apigeeOrg\", {\n analyticsRegion: \"us-central1\",\n projectId: current.then(current =\u003e current.project),\n authorizedNetwork: apigeeNetwork.id,\n}, {\n dependsOn: [apigeeVpcConnection],\n});\nconst env = new gcp.apigee.Environment(\"env\", {\n description: \"Apigee Environment\",\n displayName: \"environment-1\",\n orgId: apigeeOrg.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncurrent = gcp.organizations.get_client_config()\napigee_network = gcp.compute.Network(\"apigeeNetwork\")\napigee_range = gcp.compute.GlobalAddress(\"apigeeRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=apigee_network.id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigeeVpcConnection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name])\napigee_org = gcp.apigee.Organization(\"apigeeOrg\",\n analytics_region=\"us-central1\",\n project_id=current.project,\n authorized_network=apigee_network.id,\n opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection]))\nenv = gcp.apigee.Environment(\"env\",\n description=\"Apigee Environment\",\n display_name=\"environment-1\",\n org_id=apigee_org.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var current = Gcp.Organizations.GetClientConfig.Invoke();\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigeeNetwork\");\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigeeRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = apigeeNetwork.Id,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigeeVpcConnection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n });\n\n var apigeeOrg = new Gcp.Apigee.Organization(\"apigeeOrg\", new()\n {\n AnalyticsRegion = \"us-central1\",\n ProjectId = current.Apply(getClientConfigResult =\u003e getClientConfigResult.Project),\n AuthorizedNetwork = apigeeNetwork.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n apigeeVpcConnection,\n },\n });\n\n var env = new Gcp.Apigee.Environment(\"env\", new()\n {\n Description = \"Apigee Environment\",\n DisplayName = \"environment-1\",\n OrgId = apigeeOrg.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tcurrent, err := organizations.GetClientConfig(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigeeNetwork\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigeeRange\", \u0026compute.GlobalAddressArgs{\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: apigeeNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigeeVpcConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeOrg, err := apigee.NewOrganization(ctx, \"apigeeOrg\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tProjectId: *pulumi.String(current.Project),\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigee.NewEnvironment(ctx, \"env\", \u0026apigee.EnvironmentArgs{\n\t\t\tDescription: pulumi.String(\"Apigee Environment\"),\n\t\t\tDisplayName: pulumi.String(\"environment-1\"),\n\t\t\tOrgId: apigeeOrg.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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.compute.Network;\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.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\nimport com.pulumi.gcp.apigee.Environment;\nimport com.pulumi.gcp.apigee.EnvironmentArgs;\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 current = OrganizationsFunctions.getClientConfig();\n\n var apigeeNetwork = new Network(\"apigeeNetwork\");\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(apigeeNetwork.id())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder() \n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build());\n\n var apigeeOrg = new Organization(\"apigeeOrg\", OrganizationArgs.builder() \n .analyticsRegion(\"us-central1\")\n .projectId(current.applyValue(getClientConfigResult -\u003e getClientConfigResult.project()))\n .authorizedNetwork(apigeeNetwork.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn(apigeeVpcConnection)\n .build());\n\n var env = new Environment(\"env\", EnvironmentArgs.builder() \n .description(\"Apigee Environment\")\n .displayName(\"environment-1\")\n .orgId(apigeeOrg.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n apigeeNetwork:\n type: gcp:compute:Network\n apigeeRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${apigeeNetwork.id}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n apigeeOrg:\n type: gcp:apigee:Organization\n properties:\n analyticsRegion: us-central1\n projectId: ${current.project}\n authorizedNetwork: ${apigeeNetwork.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\n env:\n type: gcp:apigee:Environment\n properties:\n description: Apigee Environment\n displayName: environment-1\n orgId: ${apigeeOrg.id}\nvariables:\n current:\n fn::invoke:\n Function: gcp:organizations:getClientConfig\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nEnvironment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigee/environment:Environment default {{org_id}}/environments/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigee/environment:Environment default {{org_id}}/{{name}}\n```\n\n ", + "description": "An `Environment` in Apigee.\n\n\nTo get more information about Environment, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.environments/create)\n* How-to Guides\n * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment)\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nEnvironment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigee/environment:Environment default {{org_id}}/environments/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigee/environment:Environment default {{org_id}}/{{name}}\n```\n\n ", "properties": { "apiProxyType": { "type": "string", @@ -109589,7 +110694,7 @@ } }, "gcp:apigee/instance:Instance": { - "description": "An `Instance` is the runtime dataplane in Apigee.\n\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.instances/create)\n* How-to Guides\n * [Creating a runtime instance](https://cloud.google.com/apigee/docs/api-platform/get-started/create-instance)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Apigee Instance Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst current = gcp.organizations.getClientConfig({});\nconst apigeeNetwork = new gcp.compute.Network(\"apigeeNetwork\", {});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigeeRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: apigeeNetwork.id,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigeeVpcConnection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n});\nconst apigeeOrg = new gcp.apigee.Organization(\"apigeeOrg\", {\n analyticsRegion: \"us-central1\",\n projectId: current.then(current =\u003e current.project),\n authorizedNetwork: apigeeNetwork.id,\n}, {\n dependsOn: [apigeeVpcConnection],\n});\nconst apigeeInstance = new gcp.apigee.Instance(\"apigeeInstance\", {\n location: \"us-central1\",\n orgId: apigeeOrg.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncurrent = gcp.organizations.get_client_config()\napigee_network = gcp.compute.Network(\"apigeeNetwork\")\napigee_range = gcp.compute.GlobalAddress(\"apigeeRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=apigee_network.id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigeeVpcConnection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name])\napigee_org = gcp.apigee.Organization(\"apigeeOrg\",\n analytics_region=\"us-central1\",\n project_id=current.project,\n authorized_network=apigee_network.id,\n opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection]))\napigee_instance = gcp.apigee.Instance(\"apigeeInstance\",\n location=\"us-central1\",\n org_id=apigee_org.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var current = Gcp.Organizations.GetClientConfig.Invoke();\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigeeNetwork\");\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigeeRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = apigeeNetwork.Id,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigeeVpcConnection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n });\n\n var apigeeOrg = new Gcp.Apigee.Organization(\"apigeeOrg\", new()\n {\n AnalyticsRegion = \"us-central1\",\n ProjectId = current.Apply(getClientConfigResult =\u003e getClientConfigResult.Project),\n AuthorizedNetwork = apigeeNetwork.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n apigeeVpcConnection,\n },\n });\n\n var apigeeInstance = new Gcp.Apigee.Instance(\"apigeeInstance\", new()\n {\n Location = \"us-central1\",\n OrgId = apigeeOrg.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tcurrent, err := organizations.GetClientConfig(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigeeNetwork\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigeeRange\", \u0026compute.GlobalAddressArgs{\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: apigeeNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigeeVpcConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeOrg, err := apigee.NewOrganization(ctx, \"apigeeOrg\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tProjectId: *pulumi.String(current.Project),\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigee.NewInstance(ctx, \"apigeeInstance\", \u0026apigee.InstanceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tOrgId: apigeeOrg.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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.compute.Network;\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.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\nimport com.pulumi.gcp.apigee.Instance;\nimport com.pulumi.gcp.apigee.InstanceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var current = OrganizationsFunctions.getClientConfig();\n\n var apigeeNetwork = new Network(\"apigeeNetwork\");\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(apigeeNetwork.id())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder() \n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build());\n\n var apigeeOrg = new Organization(\"apigeeOrg\", OrganizationArgs.builder() \n .analyticsRegion(\"us-central1\")\n .projectId(current.applyValue(getClientConfigResult -\u003e getClientConfigResult.project()))\n .authorizedNetwork(apigeeNetwork.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn(apigeeVpcConnection)\n .build());\n\n var apigeeInstance = new Instance(\"apigeeInstance\", InstanceArgs.builder() \n .location(\"us-central1\")\n .orgId(apigeeOrg.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n apigeeNetwork:\n type: gcp:compute:Network\n apigeeRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${apigeeNetwork.id}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n apigeeOrg:\n type: gcp:apigee:Organization\n properties:\n analyticsRegion: us-central1\n projectId: ${current.project}\n authorizedNetwork: ${apigeeNetwork.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\n apigeeInstance:\n type: gcp:apigee:Instance\n properties:\n location: us-central1\n orgId: ${apigeeOrg.id}\nvariables:\n current:\n fn::invoke:\n Function: gcp:organizations:getClientConfig\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Apigee Instance Cidr Range\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst current = gcp.organizations.getClientConfig({});\nconst apigeeNetwork = new gcp.compute.Network(\"apigeeNetwork\", {});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigeeRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 22,\n network: apigeeNetwork.id,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigeeVpcConnection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n});\nconst apigeeOrg = new gcp.apigee.Organization(\"apigeeOrg\", {\n analyticsRegion: \"us-central1\",\n projectId: current.then(current =\u003e current.project),\n authorizedNetwork: apigeeNetwork.id,\n}, {\n dependsOn: [apigeeVpcConnection],\n});\nconst apigeeInstance = new gcp.apigee.Instance(\"apigeeInstance\", {\n location: \"us-central1\",\n orgId: apigeeOrg.id,\n peeringCidrRange: \"SLASH_22\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncurrent = gcp.organizations.get_client_config()\napigee_network = gcp.compute.Network(\"apigeeNetwork\")\napigee_range = gcp.compute.GlobalAddress(\"apigeeRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=22,\n network=apigee_network.id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigeeVpcConnection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name])\napigee_org = gcp.apigee.Organization(\"apigeeOrg\",\n analytics_region=\"us-central1\",\n project_id=current.project,\n authorized_network=apigee_network.id,\n opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection]))\napigee_instance = gcp.apigee.Instance(\"apigeeInstance\",\n location=\"us-central1\",\n org_id=apigee_org.id,\n peering_cidr_range=\"SLASH_22\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var current = Gcp.Organizations.GetClientConfig.Invoke();\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigeeNetwork\");\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigeeRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 22,\n Network = apigeeNetwork.Id,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigeeVpcConnection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n });\n\n var apigeeOrg = new Gcp.Apigee.Organization(\"apigeeOrg\", new()\n {\n AnalyticsRegion = \"us-central1\",\n ProjectId = current.Apply(getClientConfigResult =\u003e getClientConfigResult.Project),\n AuthorizedNetwork = apigeeNetwork.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n apigeeVpcConnection,\n },\n });\n\n var apigeeInstance = new Gcp.Apigee.Instance(\"apigeeInstance\", new()\n {\n Location = \"us-central1\",\n OrgId = apigeeOrg.Id,\n PeeringCidrRange = \"SLASH_22\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tcurrent, err := organizations.GetClientConfig(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigeeNetwork\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigeeRange\", \u0026compute.GlobalAddressArgs{\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(22),\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigeeVpcConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeOrg, err := apigee.NewOrganization(ctx, \"apigeeOrg\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tProjectId: *pulumi.String(current.Project),\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigee.NewInstance(ctx, \"apigeeInstance\", \u0026apigee.InstanceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tOrgId: apigeeOrg.ID(),\n\t\t\tPeeringCidrRange: pulumi.String(\"SLASH_22\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.Network;\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.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\nimport com.pulumi.gcp.apigee.Instance;\nimport com.pulumi.gcp.apigee.InstanceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var current = OrganizationsFunctions.getClientConfig();\n\n var apigeeNetwork = new Network(\"apigeeNetwork\");\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(22)\n .network(apigeeNetwork.id())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder() \n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build());\n\n var apigeeOrg = new Organization(\"apigeeOrg\", OrganizationArgs.builder() \n .analyticsRegion(\"us-central1\")\n .projectId(current.applyValue(getClientConfigResult -\u003e getClientConfigResult.project()))\n .authorizedNetwork(apigeeNetwork.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn(apigeeVpcConnection)\n .build());\n\n var apigeeInstance = new Instance(\"apigeeInstance\", InstanceArgs.builder() \n .location(\"us-central1\")\n .orgId(apigeeOrg.id())\n .peeringCidrRange(\"SLASH_22\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n apigeeNetwork:\n type: gcp:compute:Network\n apigeeRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 22\n network: ${apigeeNetwork.id}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n apigeeOrg:\n type: gcp:apigee:Organization\n properties:\n analyticsRegion: us-central1\n projectId: ${current.project}\n authorizedNetwork: ${apigeeNetwork.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\n apigeeInstance:\n type: gcp:apigee:Instance\n properties:\n location: us-central1\n orgId: ${apigeeOrg.id}\n peeringCidrRange: SLASH_22\nvariables:\n current:\n fn::invoke:\n Function: gcp:organizations:getClientConfig\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Apigee Instance Ip Range\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst current = gcp.organizations.getClientConfig({});\nconst apigeeNetwork = new gcp.compute.Network(\"apigeeNetwork\", {});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigeeRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 22,\n network: apigeeNetwork.id,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigeeVpcConnection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n});\nconst apigeeOrg = new gcp.apigee.Organization(\"apigeeOrg\", {\n analyticsRegion: \"us-central1\",\n projectId: current.then(current =\u003e current.project),\n authorizedNetwork: apigeeNetwork.id,\n}, {\n dependsOn: [apigeeVpcConnection],\n});\nconst apigeeInstance = new gcp.apigee.Instance(\"apigeeInstance\", {\n location: \"us-central1\",\n orgId: apigeeOrg.id,\n ipRange: \"10.87.8.0/22\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncurrent = gcp.organizations.get_client_config()\napigee_network = gcp.compute.Network(\"apigeeNetwork\")\napigee_range = gcp.compute.GlobalAddress(\"apigeeRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=22,\n network=apigee_network.id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigeeVpcConnection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name])\napigee_org = gcp.apigee.Organization(\"apigeeOrg\",\n analytics_region=\"us-central1\",\n project_id=current.project,\n authorized_network=apigee_network.id,\n opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection]))\napigee_instance = gcp.apigee.Instance(\"apigeeInstance\",\n location=\"us-central1\",\n org_id=apigee_org.id,\n ip_range=\"10.87.8.0/22\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var current = Gcp.Organizations.GetClientConfig.Invoke();\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigeeNetwork\");\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigeeRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 22,\n Network = apigeeNetwork.Id,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigeeVpcConnection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n });\n\n var apigeeOrg = new Gcp.Apigee.Organization(\"apigeeOrg\", new()\n {\n AnalyticsRegion = \"us-central1\",\n ProjectId = current.Apply(getClientConfigResult =\u003e getClientConfigResult.Project),\n AuthorizedNetwork = apigeeNetwork.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n apigeeVpcConnection,\n },\n });\n\n var apigeeInstance = new Gcp.Apigee.Instance(\"apigeeInstance\", new()\n {\n Location = \"us-central1\",\n OrgId = apigeeOrg.Id,\n IpRange = \"10.87.8.0/22\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tcurrent, err := organizations.GetClientConfig(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigeeNetwork\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigeeRange\", \u0026compute.GlobalAddressArgs{\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPrefixLength: pulumi.Int(22),\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigeeVpcConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeOrg, err := apigee.NewOrganization(ctx, \"apigeeOrg\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tProjectId: *pulumi.String(current.Project),\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigee.NewInstance(ctx, \"apigeeInstance\", \u0026apigee.InstanceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tOrgId: apigeeOrg.ID(),\n\t\t\tIpRange: pulumi.String(\"10.87.8.0/22\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.Network;\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.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\nimport com.pulumi.gcp.apigee.Instance;\nimport com.pulumi.gcp.apigee.InstanceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var current = OrganizationsFunctions.getClientConfig();\n\n var apigeeNetwork = new Network(\"apigeeNetwork\");\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(22)\n .network(apigeeNetwork.id())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder() \n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build());\n\n var apigeeOrg = new Organization(\"apigeeOrg\", OrganizationArgs.builder() \n .analyticsRegion(\"us-central1\")\n .projectId(current.applyValue(getClientConfigResult -\u003e getClientConfigResult.project()))\n .authorizedNetwork(apigeeNetwork.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn(apigeeVpcConnection)\n .build());\n\n var apigeeInstance = new Instance(\"apigeeInstance\", InstanceArgs.builder() \n .location(\"us-central1\")\n .orgId(apigeeOrg.id())\n .ipRange(\"10.87.8.0/22\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n apigeeNetwork:\n type: gcp:compute:Network\n apigeeRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 22\n network: ${apigeeNetwork.id}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n apigeeOrg:\n type: gcp:apigee:Organization\n properties:\n analyticsRegion: us-central1\n projectId: ${current.project}\n authorizedNetwork: ${apigeeNetwork.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\n apigeeInstance:\n type: gcp:apigee:Instance\n properties:\n location: us-central1\n orgId: ${apigeeOrg.id}\n ipRange: 10.87.8.0/22\nvariables:\n current:\n fn::invoke:\n Function: gcp:organizations:getClientConfig\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Apigee Instance Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst current = gcp.organizations.getClientConfig({});\nconst apigeeNetwork = new gcp.compute.Network(\"apigeeNetwork\", {});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigeeRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: apigeeNetwork.id,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigeeVpcConnection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n});\nconst apigeeKeyring = new gcp.kms.KeyRing(\"apigeeKeyring\", {location: \"us-central1\"});\nconst apigeeKey = new gcp.kms.CryptoKey(\"apigeeKey\", {keyRing: apigeeKeyring.id});\nconst apigeeSa = new gcp.projects.ServiceIdentity(\"apigeeSa\", {\n project: google_project.project.project_id,\n service: google_project_service.apigee.service,\n}, {\n provider: google_beta,\n});\nconst apigeeSaKeyuser = new gcp.kms.CryptoKeyIAMBinding(\"apigeeSaKeyuser\", {\n cryptoKeyId: apigeeKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [pulumi.interpolate`serviceAccount:${apigeeSa.email}`],\n});\nconst apigeeOrg = new gcp.apigee.Organization(\"apigeeOrg\", {\n analyticsRegion: \"us-central1\",\n displayName: \"apigee-org\",\n description: \"Auto-provisioned Apigee Org.\",\n projectId: current.then(current =\u003e current.project),\n authorizedNetwork: apigeeNetwork.id,\n runtimeDatabaseEncryptionKeyName: apigeeKey.id,\n}, {\n dependsOn: [\n apigeeVpcConnection,\n apigeeSaKeyuser,\n ],\n});\nconst apigeeInstance = new gcp.apigee.Instance(\"apigeeInstance\", {\n location: \"us-central1\",\n description: \"Auto-managed Apigee Runtime Instance\",\n displayName: \"tf-test\",\n orgId: apigeeOrg.id,\n diskEncryptionKeyName: apigeeKey.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncurrent = gcp.organizations.get_client_config()\napigee_network = gcp.compute.Network(\"apigeeNetwork\")\napigee_range = gcp.compute.GlobalAddress(\"apigeeRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=apigee_network.id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigeeVpcConnection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name])\napigee_keyring = gcp.kms.KeyRing(\"apigeeKeyring\", location=\"us-central1\")\napigee_key = gcp.kms.CryptoKey(\"apigeeKey\", key_ring=apigee_keyring.id)\napigee_sa = gcp.projects.ServiceIdentity(\"apigeeSa\",\n project=google_project[\"project\"][\"project_id\"],\n service=google_project_service[\"apigee\"][\"service\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\napigee_sa_keyuser = gcp.kms.CryptoKeyIAMBinding(\"apigeeSaKeyuser\",\n crypto_key_id=apigee_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[apigee_sa.email.apply(lambda email: f\"serviceAccount:{email}\")])\napigee_org = gcp.apigee.Organization(\"apigeeOrg\",\n analytics_region=\"us-central1\",\n display_name=\"apigee-org\",\n description=\"Auto-provisioned Apigee Org.\",\n project_id=current.project,\n authorized_network=apigee_network.id,\n runtime_database_encryption_key_name=apigee_key.id,\n opts=pulumi.ResourceOptions(depends_on=[\n apigee_vpc_connection,\n apigee_sa_keyuser,\n ]))\napigee_instance = gcp.apigee.Instance(\"apigeeInstance\",\n location=\"us-central1\",\n description=\"Auto-managed Apigee Runtime Instance\",\n display_name=\"tf-test\",\n org_id=apigee_org.id,\n disk_encryption_key_name=apigee_key.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var current = Gcp.Organizations.GetClientConfig.Invoke();\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigeeNetwork\");\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigeeRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = apigeeNetwork.Id,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigeeVpcConnection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n });\n\n var apigeeKeyring = new Gcp.Kms.KeyRing(\"apigeeKeyring\", new()\n {\n Location = \"us-central1\",\n });\n\n var apigeeKey = new Gcp.Kms.CryptoKey(\"apigeeKey\", new()\n {\n KeyRing = apigeeKeyring.Id,\n });\n\n var apigeeSa = new Gcp.Projects.ServiceIdentity(\"apigeeSa\", new()\n {\n Project = google_project.Project.Project_id,\n Service = google_project_service.Apigee.Service,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var apigeeSaKeyuser = new Gcp.Kms.CryptoKeyIAMBinding(\"apigeeSaKeyuser\", new()\n {\n CryptoKeyId = apigeeKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n apigeeSa.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n },\n });\n\n var apigeeOrg = new Gcp.Apigee.Organization(\"apigeeOrg\", new()\n {\n AnalyticsRegion = \"us-central1\",\n DisplayName = \"apigee-org\",\n Description = \"Auto-provisioned Apigee Org.\",\n ProjectId = current.Apply(getClientConfigResult =\u003e getClientConfigResult.Project),\n AuthorizedNetwork = apigeeNetwork.Id,\n RuntimeDatabaseEncryptionKeyName = apigeeKey.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n apigeeVpcConnection,\n apigeeSaKeyuser,\n },\n });\n\n var apigeeInstance = new Gcp.Apigee.Instance(\"apigeeInstance\", new()\n {\n Location = \"us-central1\",\n Description = \"Auto-managed Apigee Runtime Instance\",\n DisplayName = \"tf-test\",\n OrgId = apigeeOrg.Id,\n DiskEncryptionKeyName = apigeeKey.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tcurrent, err := organizations.GetClientConfig(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigeeNetwork\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigeeRange\", \u0026compute.GlobalAddressArgs{\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: apigeeNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigeeVpcConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeKeyring, err := kms.NewKeyRing(ctx, \"apigeeKeyring\", \u0026kms.KeyRingArgs{\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\tapigeeKey, err := kms.NewCryptoKey(ctx, \"apigeeKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: apigeeKeyring.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeSa, err := projects.NewServiceIdentity(ctx, \"apigeeSa\", \u0026projects.ServiceIdentityArgs{\n\t\t\tProject: pulumi.Any(google_project.Project.Project_id),\n\t\t\tService: pulumi.Any(google_project_service.Apigee.Service),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeSaKeyuser, err := kms.NewCryptoKeyIAMBinding(ctx, \"apigeeSaKeyuser\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: apigeeKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tapigeeSa.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), 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\tapigeeOrg, err := apigee.NewOrganization(ctx, \"apigeeOrg\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tDisplayName: pulumi.String(\"apigee-org\"),\n\t\t\tDescription: pulumi.String(\"Auto-provisioned Apigee Org.\"),\n\t\t\tProjectId: *pulumi.String(current.Project),\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t\tRuntimeDatabaseEncryptionKeyName: apigeeKey.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t\tapigeeSaKeyuser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigee.NewInstance(ctx, \"apigeeInstance\", \u0026apigee.InstanceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"Auto-managed Apigee Runtime Instance\"),\n\t\t\tDisplayName: pulumi.String(\"tf-test\"),\n\t\t\tOrgId: apigeeOrg.ID(),\n\t\t\tDiskEncryptionKeyName: apigeeKey.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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.compute.Network;\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.projects.ServiceIdentity;\nimport com.pulumi.gcp.projects.ServiceIdentityArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\nimport com.pulumi.gcp.apigee.Instance;\nimport com.pulumi.gcp.apigee.InstanceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var current = OrganizationsFunctions.getClientConfig();\n\n var apigeeNetwork = new Network(\"apigeeNetwork\");\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(apigeeNetwork.id())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder() \n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build());\n\n var apigeeKeyring = new KeyRing(\"apigeeKeyring\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var apigeeKey = new CryptoKey(\"apigeeKey\", CryptoKeyArgs.builder() \n .keyRing(apigeeKeyring.id())\n .build());\n\n var apigeeSa = new ServiceIdentity(\"apigeeSa\", ServiceIdentityArgs.builder() \n .project(google_project.project().project_id())\n .service(google_project_service.apigee().service())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var apigeeSaKeyuser = new CryptoKeyIAMBinding(\"apigeeSaKeyuser\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(apigeeKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(apigeeSa.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var apigeeOrg = new Organization(\"apigeeOrg\", OrganizationArgs.builder() \n .analyticsRegion(\"us-central1\")\n .displayName(\"apigee-org\")\n .description(\"Auto-provisioned Apigee Org.\")\n .projectId(current.applyValue(getClientConfigResult -\u003e getClientConfigResult.project()))\n .authorizedNetwork(apigeeNetwork.id())\n .runtimeDatabaseEncryptionKeyName(apigeeKey.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n apigeeVpcConnection,\n apigeeSaKeyuser)\n .build());\n\n var apigeeInstance = new Instance(\"apigeeInstance\", InstanceArgs.builder() \n .location(\"us-central1\")\n .description(\"Auto-managed Apigee Runtime Instance\")\n .displayName(\"tf-test\")\n .orgId(apigeeOrg.id())\n .diskEncryptionKeyName(apigeeKey.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n apigeeNetwork:\n type: gcp:compute:Network\n apigeeRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${apigeeNetwork.id}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n apigeeKeyring:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n apigeeKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${apigeeKeyring.id}\n apigeeSa:\n type: gcp:projects:ServiceIdentity\n properties:\n project: ${google_project.project.project_id}\n service: ${google_project_service.apigee.service}\n options:\n provider: ${[\"google-beta\"]}\n apigeeSaKeyuser:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${apigeeKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:${apigeeSa.email}\n apigeeOrg:\n type: gcp:apigee:Organization\n properties:\n analyticsRegion: us-central1\n displayName: apigee-org\n description: Auto-provisioned Apigee Org.\n projectId: ${current.project}\n authorizedNetwork: ${apigeeNetwork.id}\n runtimeDatabaseEncryptionKeyName: ${apigeeKey.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\n - ${apigeeSaKeyuser}\n apigeeInstance:\n type: gcp:apigee:Instance\n properties:\n location: us-central1\n description: Auto-managed Apigee Runtime Instance\n displayName: tf-test\n orgId: ${apigeeOrg.id}\n diskEncryptionKeyName: ${apigeeKey.id}\nvariables:\n current:\n fn::invoke:\n Function: gcp:organizations:getClientConfig\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigee/instance:Instance default {{org_id}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigee/instance:Instance default {{org_id}}/{{name}}\n```\n\n ", + "description": "An `Instance` is the runtime dataplane in Apigee.\n\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.instances/create)\n* How-to Guides\n * [Creating a runtime instance](https://cloud.google.com/apigee/docs/api-platform/get-started/create-instance)\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigee/instance:Instance default {{org_id}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigee/instance:Instance default {{org_id}}/{{name}}\n```\n\n ", "properties": { "consumerAcceptLists": { "type": "array", @@ -109775,7 +110880,7 @@ } }, "gcp:apigee/instanceAttachment:InstanceAttachment": { - "description": "An `Instance attachment` in Apigee.\n\n\nTo get more information about InstanceAttachment, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.instances.attachments/create)\n* How-to Guides\n * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Apigee Instance Attachment Basic\n\n\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\",\n orgId: \"\",\n billingAccount: \"\",\n});\nconst apigee = new gcp.projects.Service(\"apigee\", {\n project: project.projectId,\n service: \"apigee.googleapis.com\",\n});\nconst compute = new gcp.projects.Service(\"compute\", {\n project: project.projectId,\n service: \"compute.googleapis.com\",\n});\nconst servicenetworking = new gcp.projects.Service(\"servicenetworking\", {\n project: project.projectId,\n service: \"servicenetworking.googleapis.com\",\n});\nconst apigeeNetwork = new gcp.compute.Network(\"apigeeNetwork\", {project: project.projectId}, {\n dependsOn: [compute],\n});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigeeRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: apigeeNetwork.id,\n project: project.projectId,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigeeVpcConnection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n}, {\n dependsOn: [servicenetworking],\n});\nconst apigeeOrg = new gcp.apigee.Organization(\"apigeeOrg\", {\n analyticsRegion: \"us-central1\",\n projectId: project.projectId,\n authorizedNetwork: apigeeNetwork.id,\n}, {\n dependsOn: [\n apigeeVpcConnection,\n apigee,\n ],\n});\nconst apigeeIns = new gcp.apigee.Instance(\"apigeeIns\", {\n location: \"us-central1\",\n orgId: apigeeOrg.id,\n});\nconst apigeeEnv = new gcp.apigee.Environment(\"apigeeEnv\", {\n orgId: apigeeOrg.id,\n description: \"Apigee Environment\",\n displayName: \"environment-1\",\n});\nconst instanceAttachment = new gcp.apigee.InstanceAttachment(\"instanceAttachment\", {\n instanceId: google_apigee_instance.apigee_instance.id,\n environment: apigeeEnv.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.Project(\"project\",\n project_id=\"tf-test\",\n org_id=\"\",\n billing_account=\"\")\napigee = gcp.projects.Service(\"apigee\",\n project=project.project_id,\n service=\"apigee.googleapis.com\")\ncompute = gcp.projects.Service(\"compute\",\n project=project.project_id,\n service=\"compute.googleapis.com\")\nservicenetworking = gcp.projects.Service(\"servicenetworking\",\n project=project.project_id,\n service=\"servicenetworking.googleapis.com\")\napigee_network = gcp.compute.Network(\"apigeeNetwork\", project=project.project_id,\nopts=pulumi.ResourceOptions(depends_on=[compute]))\napigee_range = gcp.compute.GlobalAddress(\"apigeeRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=apigee_network.id,\n project=project.project_id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigeeVpcConnection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name],\n opts=pulumi.ResourceOptions(depends_on=[servicenetworking]))\napigee_org = gcp.apigee.Organization(\"apigeeOrg\",\n analytics_region=\"us-central1\",\n project_id=project.project_id,\n authorized_network=apigee_network.id,\n opts=pulumi.ResourceOptions(depends_on=[\n apigee_vpc_connection,\n apigee,\n ]))\napigee_ins = gcp.apigee.Instance(\"apigeeIns\",\n location=\"us-central1\",\n org_id=apigee_org.id)\napigee_env = gcp.apigee.Environment(\"apigeeEnv\",\n org_id=apigee_org.id,\n description=\"Apigee Environment\",\n display_name=\"environment-1\")\ninstance_attachment = gcp.apigee.InstanceAttachment(\"instanceAttachment\",\n instance_id=google_apigee_instance[\"apigee_instance\"][\"id\"],\n environment=apigee_env.name)\n```\n```csharp\nusing System.Collections.Generic;\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\",\n OrgId = \"\",\n BillingAccount = \"\",\n });\n\n var apigee = new Gcp.Projects.Service(\"apigee\", new()\n {\n Project = project.ProjectId,\n ServiceName = \"apigee.googleapis.com\",\n });\n\n var compute = new Gcp.Projects.Service(\"compute\", new()\n {\n Project = project.ProjectId,\n ServiceName = \"compute.googleapis.com\",\n });\n\n var servicenetworking = new Gcp.Projects.Service(\"servicenetworking\", new()\n {\n Project = project.ProjectId,\n ServiceName = \"servicenetworking.googleapis.com\",\n });\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigeeNetwork\", new()\n {\n Project = project.ProjectId,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n compute,\n },\n });\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigeeRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = apigeeNetwork.Id,\n Project = project.ProjectId,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigeeVpcConnection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n servicenetworking,\n },\n });\n\n var apigeeOrg = new Gcp.Apigee.Organization(\"apigeeOrg\", new()\n {\n AnalyticsRegion = \"us-central1\",\n ProjectId = project.ProjectId,\n AuthorizedNetwork = apigeeNetwork.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n apigeeVpcConnection,\n apigee,\n },\n });\n\n var apigeeIns = new Gcp.Apigee.Instance(\"apigeeIns\", new()\n {\n Location = \"us-central1\",\n OrgId = apigeeOrg.Id,\n });\n\n var apigeeEnv = new Gcp.Apigee.Environment(\"apigeeEnv\", new()\n {\n OrgId = apigeeOrg.Id,\n Description = \"Apigee Environment\",\n DisplayName = \"environment-1\",\n });\n\n var instanceAttachment = new Gcp.Apigee.InstanceAttachment(\"instanceAttachment\", new()\n {\n InstanceId = google_apigee_instance.Apigee_instance.Id,\n Environment = apigeeEnv.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test\"),\n\t\t\tOrgId: pulumi.String(\"\"),\n\t\t\tBillingAccount: pulumi.String(\"\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigee, err := projects.NewService(ctx, \"apigee\", \u0026projects.ServiceArgs{\n\t\t\tProject: project.ProjectId,\n\t\t\tService: pulumi.String(\"apigee.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: project.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\tservicenetworking, err := projects.NewService(ctx, \"servicenetworking\", \u0026projects.ServiceArgs{\n\t\t\tProject: project.ProjectId,\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigeeNetwork\", \u0026compute.NetworkArgs{\n\t\t\tProject: project.ProjectId,\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\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigeeRange\", \u0026compute.GlobalAddressArgs{\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: apigeeNetwork.ID(),\n\t\t\tProject: project.ProjectId,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigeeVpcConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.Name,\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tservicenetworking,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeOrg, err := apigee.NewOrganization(ctx, \"apigeeOrg\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tProjectId: project.ProjectId,\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t\tapigee,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigee.NewInstance(ctx, \"apigeeIns\", \u0026apigee.InstanceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tOrgId: apigeeOrg.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeEnv, err := apigee.NewEnvironment(ctx, \"apigeeEnv\", \u0026apigee.EnvironmentArgs{\n\t\t\tOrgId: apigeeOrg.ID(),\n\t\t\tDescription: pulumi.String(\"Apigee Environment\"),\n\t\t\tDisplayName: pulumi.String(\"environment-1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = apigee.NewInstanceAttachment(ctx, \"instanceAttachment\", \u0026apigee.InstanceAttachmentArgs{\n\t\t\tInstanceId: pulumi.Any(google_apigee_instance.Apigee_instance.Id),\n\t\t\tEnvironment: apigeeEnv.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.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\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.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\nimport com.pulumi.gcp.apigee.Instance;\nimport com.pulumi.gcp.apigee.InstanceArgs;\nimport com.pulumi.gcp.apigee.Environment;\nimport com.pulumi.gcp.apigee.EnvironmentArgs;\nimport com.pulumi.gcp.apigee.InstanceAttachment;\nimport com.pulumi.gcp.apigee.InstanceAttachmentArgs;\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 project = new Project(\"project\", ProjectArgs.builder() \n .projectId(\"tf-test\")\n .orgId(\"\")\n .billingAccount(\"\")\n .build());\n\n var apigee = new Service(\"apigee\", ServiceArgs.builder() \n .project(project.projectId())\n .service(\"apigee.googleapis.com\")\n .build());\n\n var compute = new Service(\"compute\", ServiceArgs.builder() \n .project(project.projectId())\n .service(\"compute.googleapis.com\")\n .build());\n\n var servicenetworking = new Service(\"servicenetworking\", ServiceArgs.builder() \n .project(project.projectId())\n .service(\"servicenetworking.googleapis.com\")\n .build());\n\n var apigeeNetwork = new Network(\"apigeeNetwork\", NetworkArgs.builder() \n .project(project.projectId())\n .build(), CustomResourceOptions.builder()\n .dependsOn(compute)\n .build());\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(apigeeNetwork.id())\n .project(project.projectId())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder() \n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build(), CustomResourceOptions.builder()\n .dependsOn(servicenetworking)\n .build());\n\n var apigeeOrg = new Organization(\"apigeeOrg\", OrganizationArgs.builder() \n .analyticsRegion(\"us-central1\")\n .projectId(project.projectId())\n .authorizedNetwork(apigeeNetwork.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n apigeeVpcConnection,\n apigee)\n .build());\n\n var apigeeIns = new Instance(\"apigeeIns\", InstanceArgs.builder() \n .location(\"us-central1\")\n .orgId(apigeeOrg.id())\n .build());\n\n var apigeeEnv = new Environment(\"apigeeEnv\", EnvironmentArgs.builder() \n .orgId(apigeeOrg.id())\n .description(\"Apigee Environment\")\n .displayName(\"environment-1\")\n .build());\n\n var instanceAttachment = new InstanceAttachment(\"instanceAttachment\", InstanceAttachmentArgs.builder() \n .instanceId(google_apigee_instance.apigee_instance().id())\n .environment(apigeeEnv.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test\n orgId:\n billingAccount:\n apigee:\n type: gcp:projects:Service\n properties:\n project: ${project.projectId}\n service: apigee.googleapis.com\n compute:\n type: gcp:projects:Service\n properties:\n project: ${project.projectId}\n service: compute.googleapis.com\n servicenetworking:\n type: gcp:projects:Service\n properties:\n project: ${project.projectId}\n service: servicenetworking.googleapis.com\n apigeeNetwork:\n type: gcp:compute:Network\n properties:\n project: ${project.projectId}\n options:\n dependson:\n - ${compute}\n apigeeRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${apigeeNetwork.id}\n project: ${project.projectId}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n options:\n dependson:\n - ${servicenetworking}\n apigeeOrg:\n type: gcp:apigee:Organization\n properties:\n analyticsRegion: us-central1\n projectId: ${project.projectId}\n authorizedNetwork: ${apigeeNetwork.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\n - ${apigee}\n apigeeIns:\n type: gcp:apigee:Instance\n properties:\n location: us-central1\n orgId: ${apigeeOrg.id}\n apigeeEnv:\n type: gcp:apigee:Environment\n properties:\n orgId: ${apigeeOrg.id}\n description: Apigee Environment\n displayName: environment-1\n instanceAttachment:\n type: gcp:apigee:InstanceAttachment\n properties:\n instanceId: ${google_apigee_instance.apigee_instance.id}\n environment: ${apigeeEnv.name}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstanceAttachment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigee/instanceAttachment:InstanceAttachment default {{instance_id}}/attachments/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigee/instanceAttachment:InstanceAttachment default {{instance_id}}/{{name}}\n```\n\n ", + "description": "An `Instance attachment` in Apigee.\n\n\nTo get more information about InstanceAttachment, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations.instances.attachments/create)\n* How-to Guides\n * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment)\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nInstanceAttachment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigee/instanceAttachment:InstanceAttachment default {{instance_id}}/attachments/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigee/instanceAttachment:InstanceAttachment default {{instance_id}}/{{name}}\n```\n\n ", "properties": { "environment": { "type": "string", @@ -109899,7 +111004,7 @@ } }, "gcp:apigee/organization:Organization": { - "description": "An `Organization` is the top-level container in Apigee.\n\n\nTo get more information about Organization, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations)\n* How-to Guides\n * [Creating an API organization](https://cloud.google.com/apigee/docs/api-platform/get-started/create-org)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Apigee Organization Cloud Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst current = gcp.organizations.getClientConfig({});\nconst apigeeNetwork = new gcp.compute.Network(\"apigeeNetwork\", {});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigeeRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: apigeeNetwork.id,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigeeVpcConnection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n});\nconst org = new gcp.apigee.Organization(\"org\", {\n analyticsRegion: \"us-central1\",\n projectId: current.then(current =\u003e current.project),\n authorizedNetwork: apigeeNetwork.id,\n}, {\n dependsOn: [apigeeVpcConnection],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncurrent = gcp.organizations.get_client_config()\napigee_network = gcp.compute.Network(\"apigeeNetwork\")\napigee_range = gcp.compute.GlobalAddress(\"apigeeRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=apigee_network.id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigeeVpcConnection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name])\norg = gcp.apigee.Organization(\"org\",\n analytics_region=\"us-central1\",\n project_id=current.project,\n authorized_network=apigee_network.id,\n opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var current = Gcp.Organizations.GetClientConfig.Invoke();\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigeeNetwork\");\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigeeRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = apigeeNetwork.Id,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigeeVpcConnection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n });\n\n var org = new Gcp.Apigee.Organization(\"org\", new()\n {\n AnalyticsRegion = \"us-central1\",\n ProjectId = current.Apply(getClientConfigResult =\u003e getClientConfigResult.Project),\n AuthorizedNetwork = apigeeNetwork.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n apigeeVpcConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tcurrent, err := organizations.GetClientConfig(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigeeNetwork\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigeeRange\", \u0026compute.GlobalAddressArgs{\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: apigeeNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigeeVpcConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.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 = apigee.NewOrganization(ctx, \"org\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tProjectId: *pulumi.String(current.Project),\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.Network;\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.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\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 current = OrganizationsFunctions.getClientConfig();\n\n var apigeeNetwork = new Network(\"apigeeNetwork\");\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(apigeeNetwork.id())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder() \n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build());\n\n var org = new Organization(\"org\", OrganizationArgs.builder() \n .analyticsRegion(\"us-central1\")\n .projectId(current.applyValue(getClientConfigResult -\u003e getClientConfigResult.project()))\n .authorizedNetwork(apigeeNetwork.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn(apigeeVpcConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n apigeeNetwork:\n type: gcp:compute:Network\n apigeeRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${apigeeNetwork.id}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n org:\n type: gcp:apigee:Organization\n properties:\n analyticsRegion: us-central1\n projectId: ${current.project}\n authorizedNetwork: ${apigeeNetwork.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\nvariables:\n current:\n fn::invoke:\n Function: gcp:organizations:getClientConfig\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Apigee Organization Cloud Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst current = gcp.organizations.getClientConfig({});\nconst apigeeNetwork = new gcp.compute.Network(\"apigeeNetwork\", {});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigeeRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: apigeeNetwork.id,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigeeVpcConnection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n});\nconst apigeeKeyring = new gcp.kms.KeyRing(\"apigeeKeyring\", {location: \"us-central1\"});\nconst apigeeKey = new gcp.kms.CryptoKey(\"apigeeKey\", {keyRing: apigeeKeyring.id});\nconst apigeeSa = new gcp.projects.ServiceIdentity(\"apigeeSa\", {\n project: google_project.project.project_id,\n service: google_project_service.apigee.service,\n}, {\n provider: google_beta,\n});\nconst apigeeSaKeyuser = new gcp.kms.CryptoKeyIAMBinding(\"apigeeSaKeyuser\", {\n cryptoKeyId: apigeeKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [pulumi.interpolate`serviceAccount:${apigeeSa.email}`],\n});\nconst org = new gcp.apigee.Organization(\"org\", {\n analyticsRegion: \"us-central1\",\n displayName: \"apigee-org\",\n description: \"Auto-provisioned Apigee Org.\",\n projectId: current.then(current =\u003e current.project),\n authorizedNetwork: apigeeNetwork.id,\n runtimeDatabaseEncryptionKeyName: apigeeKey.id,\n}, {\n dependsOn: [\n apigeeVpcConnection,\n apigeeSaKeyuser,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncurrent = gcp.organizations.get_client_config()\napigee_network = gcp.compute.Network(\"apigeeNetwork\")\napigee_range = gcp.compute.GlobalAddress(\"apigeeRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=apigee_network.id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigeeVpcConnection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name])\napigee_keyring = gcp.kms.KeyRing(\"apigeeKeyring\", location=\"us-central1\")\napigee_key = gcp.kms.CryptoKey(\"apigeeKey\", key_ring=apigee_keyring.id)\napigee_sa = gcp.projects.ServiceIdentity(\"apigeeSa\",\n project=google_project[\"project\"][\"project_id\"],\n service=google_project_service[\"apigee\"][\"service\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\napigee_sa_keyuser = gcp.kms.CryptoKeyIAMBinding(\"apigeeSaKeyuser\",\n crypto_key_id=apigee_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[apigee_sa.email.apply(lambda email: f\"serviceAccount:{email}\")])\norg = gcp.apigee.Organization(\"org\",\n analytics_region=\"us-central1\",\n display_name=\"apigee-org\",\n description=\"Auto-provisioned Apigee Org.\",\n project_id=current.project,\n authorized_network=apigee_network.id,\n runtime_database_encryption_key_name=apigee_key.id,\n opts=pulumi.ResourceOptions(depends_on=[\n apigee_vpc_connection,\n apigee_sa_keyuser,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var current = Gcp.Organizations.GetClientConfig.Invoke();\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigeeNetwork\");\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigeeRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = apigeeNetwork.Id,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigeeVpcConnection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n });\n\n var apigeeKeyring = new Gcp.Kms.KeyRing(\"apigeeKeyring\", new()\n {\n Location = \"us-central1\",\n });\n\n var apigeeKey = new Gcp.Kms.CryptoKey(\"apigeeKey\", new()\n {\n KeyRing = apigeeKeyring.Id,\n });\n\n var apigeeSa = new Gcp.Projects.ServiceIdentity(\"apigeeSa\", new()\n {\n Project = google_project.Project.Project_id,\n Service = google_project_service.Apigee.Service,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var apigeeSaKeyuser = new Gcp.Kms.CryptoKeyIAMBinding(\"apigeeSaKeyuser\", new()\n {\n CryptoKeyId = apigeeKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n apigeeSa.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n },\n });\n\n var org = new Gcp.Apigee.Organization(\"org\", new()\n {\n AnalyticsRegion = \"us-central1\",\n DisplayName = \"apigee-org\",\n Description = \"Auto-provisioned Apigee Org.\",\n ProjectId = current.Apply(getClientConfigResult =\u003e getClientConfigResult.Project),\n AuthorizedNetwork = apigeeNetwork.Id,\n RuntimeDatabaseEncryptionKeyName = apigeeKey.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n apigeeVpcConnection,\n apigeeSaKeyuser,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tcurrent, err := organizations.GetClientConfig(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigeeNetwork\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigeeRange\", \u0026compute.GlobalAddressArgs{\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: apigeeNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigeeVpcConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeKeyring, err := kms.NewKeyRing(ctx, \"apigeeKeyring\", \u0026kms.KeyRingArgs{\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\tapigeeKey, err := kms.NewCryptoKey(ctx, \"apigeeKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: apigeeKeyring.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeSa, err := projects.NewServiceIdentity(ctx, \"apigeeSa\", \u0026projects.ServiceIdentityArgs{\n\t\t\tProject: pulumi.Any(google_project.Project.Project_id),\n\t\t\tService: pulumi.Any(google_project_service.Apigee.Service),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeSaKeyuser, err := kms.NewCryptoKeyIAMBinding(ctx, \"apigeeSaKeyuser\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: apigeeKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tapigeeSa.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), 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 = apigee.NewOrganization(ctx, \"org\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tDisplayName: pulumi.String(\"apigee-org\"),\n\t\t\tDescription: pulumi.String(\"Auto-provisioned Apigee Org.\"),\n\t\t\tProjectId: *pulumi.String(current.Project),\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t\tRuntimeDatabaseEncryptionKeyName: apigeeKey.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t\tapigeeSaKeyuser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.Network;\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.projects.ServiceIdentity;\nimport com.pulumi.gcp.projects.ServiceIdentityArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\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 current = OrganizationsFunctions.getClientConfig();\n\n var apigeeNetwork = new Network(\"apigeeNetwork\");\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(apigeeNetwork.id())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder() \n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build());\n\n var apigeeKeyring = new KeyRing(\"apigeeKeyring\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var apigeeKey = new CryptoKey(\"apigeeKey\", CryptoKeyArgs.builder() \n .keyRing(apigeeKeyring.id())\n .build());\n\n var apigeeSa = new ServiceIdentity(\"apigeeSa\", ServiceIdentityArgs.builder() \n .project(google_project.project().project_id())\n .service(google_project_service.apigee().service())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var apigeeSaKeyuser = new CryptoKeyIAMBinding(\"apigeeSaKeyuser\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(apigeeKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(apigeeSa.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var org = new Organization(\"org\", OrganizationArgs.builder() \n .analyticsRegion(\"us-central1\")\n .displayName(\"apigee-org\")\n .description(\"Auto-provisioned Apigee Org.\")\n .projectId(current.applyValue(getClientConfigResult -\u003e getClientConfigResult.project()))\n .authorizedNetwork(apigeeNetwork.id())\n .runtimeDatabaseEncryptionKeyName(apigeeKey.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n apigeeVpcConnection,\n apigeeSaKeyuser)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n apigeeNetwork:\n type: gcp:compute:Network\n apigeeRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${apigeeNetwork.id}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n apigeeKeyring:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n apigeeKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${apigeeKeyring.id}\n apigeeSa:\n type: gcp:projects:ServiceIdentity\n properties:\n project: ${google_project.project.project_id}\n service: ${google_project_service.apigee.service}\n options:\n provider: ${[\"google-beta\"]}\n apigeeSaKeyuser:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${apigeeKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:${apigeeSa.email}\n org:\n type: gcp:apigee:Organization\n properties:\n analyticsRegion: us-central1\n displayName: apigee-org\n description: Auto-provisioned Apigee Org.\n projectId: ${current.project}\n authorizedNetwork: ${apigeeNetwork.id}\n runtimeDatabaseEncryptionKeyName: ${apigeeKey.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\n - ${apigeeSaKeyuser}\nvariables:\n current:\n fn::invoke:\n Function: gcp:organizations:getClientConfig\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nOrganization can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigee/organization:Organization default organizations/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigee/organization:Organization default {{name}}\n```\n\n ", + "description": "An `Organization` is the top-level container in Apigee.\n\n\nTo get more information about Organization, see:\n\n* [API documentation](https://cloud.google.com/apigee/docs/reference/apis/apigee/rest/v1/organizations)\n* How-to Guides\n * [Creating an API organization](https://cloud.google.com/apigee/docs/api-platform/get-started/create-org)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Apigee Organization Cloud Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst current = gcp.organizations.getClientConfig({});\nconst apigeeNetwork = new gcp.compute.Network(\"apigeeNetwork\", {});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigeeRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: apigeeNetwork.id,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigeeVpcConnection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n});\nconst org = new gcp.apigee.Organization(\"org\", {\n analyticsRegion: \"us-central1\",\n projectId: current.then(current =\u003e current.project),\n authorizedNetwork: apigeeNetwork.id,\n}, {\n dependsOn: [apigeeVpcConnection],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncurrent = gcp.organizations.get_client_config()\napigee_network = gcp.compute.Network(\"apigeeNetwork\")\napigee_range = gcp.compute.GlobalAddress(\"apigeeRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=apigee_network.id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigeeVpcConnection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name])\norg = gcp.apigee.Organization(\"org\",\n analytics_region=\"us-central1\",\n project_id=current.project,\n authorized_network=apigee_network.id,\n opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var current = Gcp.Organizations.GetClientConfig.Invoke();\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigeeNetwork\");\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigeeRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = apigeeNetwork.Id,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigeeVpcConnection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n });\n\n var org = new Gcp.Apigee.Organization(\"org\", new()\n {\n AnalyticsRegion = \"us-central1\",\n ProjectId = current.Apply(getClientConfigResult =\u003e getClientConfigResult.Project),\n AuthorizedNetwork = apigeeNetwork.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n apigeeVpcConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tcurrent, err := organizations.GetClientConfig(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigeeNetwork\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigeeRange\", \u0026compute.GlobalAddressArgs{\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: apigeeNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigeeVpcConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.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 = apigee.NewOrganization(ctx, \"org\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tProjectId: *pulumi.String(current.Project),\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.Network;\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.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\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 current = OrganizationsFunctions.getClientConfig();\n\n var apigeeNetwork = new Network(\"apigeeNetwork\");\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(apigeeNetwork.id())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder() \n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build());\n\n var org = new Organization(\"org\", OrganizationArgs.builder() \n .analyticsRegion(\"us-central1\")\n .projectId(current.applyValue(getClientConfigResult -\u003e getClientConfigResult.project()))\n .authorizedNetwork(apigeeNetwork.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn(apigeeVpcConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n apigeeNetwork:\n type: gcp:compute:Network\n apigeeRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${apigeeNetwork.id}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n org:\n type: gcp:apigee:Organization\n properties:\n analyticsRegion: us-central1\n projectId: ${current.project}\n authorizedNetwork: ${apigeeNetwork.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\nvariables:\n current:\n fn::invoke:\n Function: gcp:organizations:getClientConfig\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Apigee Organization Cloud Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst current = gcp.organizations.getClientConfig({});\nconst apigeeNetwork = new gcp.compute.Network(\"apigeeNetwork\", {});\nconst apigeeRange = new gcp.compute.GlobalAddress(\"apigeeRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: apigeeNetwork.id,\n});\nconst apigeeVpcConnection = new gcp.servicenetworking.Connection(\"apigeeVpcConnection\", {\n network: apigeeNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [apigeeRange.name],\n});\nconst apigeeKeyring = new gcp.kms.KeyRing(\"apigeeKeyring\", {location: \"us-central1\"});\nconst apigeeKey = new gcp.kms.CryptoKey(\"apigeeKey\", {keyRing: apigeeKeyring.id});\nconst apigeeSa = new gcp.projects.ServiceIdentity(\"apigeeSa\", {\n project: google_project.project.project_id,\n service: google_project_service.apigee.service,\n}, {\n provider: google_beta,\n});\nconst apigeeSaKeyuser = new gcp.kms.CryptoKeyIAMBinding(\"apigeeSaKeyuser\", {\n cryptoKeyId: apigeeKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [pulumi.interpolate`serviceAccount:${apigeeSa.email}`],\n});\nconst org = new gcp.apigee.Organization(\"org\", {\n analyticsRegion: \"us-central1\",\n displayName: \"apigee-org\",\n description: \"Terraform-provisioned Apigee Org.\",\n projectId: current.then(current =\u003e current.project),\n authorizedNetwork: apigeeNetwork.id,\n runtimeDatabaseEncryptionKeyName: apigeeKey.id,\n}, {\n dependsOn: [\n apigeeVpcConnection,\n apigeeSaKeyuser,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncurrent = gcp.organizations.get_client_config()\napigee_network = gcp.compute.Network(\"apigeeNetwork\")\napigee_range = gcp.compute.GlobalAddress(\"apigeeRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=apigee_network.id)\napigee_vpc_connection = gcp.servicenetworking.Connection(\"apigeeVpcConnection\",\n network=apigee_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[apigee_range.name])\napigee_keyring = gcp.kms.KeyRing(\"apigeeKeyring\", location=\"us-central1\")\napigee_key = gcp.kms.CryptoKey(\"apigeeKey\", key_ring=apigee_keyring.id)\napigee_sa = gcp.projects.ServiceIdentity(\"apigeeSa\",\n project=google_project[\"project\"][\"project_id\"],\n service=google_project_service[\"apigee\"][\"service\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\napigee_sa_keyuser = gcp.kms.CryptoKeyIAMBinding(\"apigeeSaKeyuser\",\n crypto_key_id=apigee_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[apigee_sa.email.apply(lambda email: f\"serviceAccount:{email}\")])\norg = gcp.apigee.Organization(\"org\",\n analytics_region=\"us-central1\",\n display_name=\"apigee-org\",\n description=\"Terraform-provisioned Apigee Org.\",\n project_id=current.project,\n authorized_network=apigee_network.id,\n runtime_database_encryption_key_name=apigee_key.id,\n opts=pulumi.ResourceOptions(depends_on=[\n apigee_vpc_connection,\n apigee_sa_keyuser,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var current = Gcp.Organizations.GetClientConfig.Invoke();\n\n var apigeeNetwork = new Gcp.Compute.Network(\"apigeeNetwork\");\n\n var apigeeRange = new Gcp.Compute.GlobalAddress(\"apigeeRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = apigeeNetwork.Id,\n });\n\n var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection(\"apigeeVpcConnection\", new()\n {\n Network = apigeeNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n apigeeRange.Name,\n },\n });\n\n var apigeeKeyring = new Gcp.Kms.KeyRing(\"apigeeKeyring\", new()\n {\n Location = \"us-central1\",\n });\n\n var apigeeKey = new Gcp.Kms.CryptoKey(\"apigeeKey\", new()\n {\n KeyRing = apigeeKeyring.Id,\n });\n\n var apigeeSa = new Gcp.Projects.ServiceIdentity(\"apigeeSa\", new()\n {\n Project = google_project.Project.Project_id,\n Service = google_project_service.Apigee.Service,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var apigeeSaKeyuser = new Gcp.Kms.CryptoKeyIAMBinding(\"apigeeSaKeyuser\", new()\n {\n CryptoKeyId = apigeeKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n apigeeSa.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n },\n });\n\n var org = new Gcp.Apigee.Organization(\"org\", new()\n {\n AnalyticsRegion = \"us-central1\",\n DisplayName = \"apigee-org\",\n Description = \"Terraform-provisioned Apigee Org.\",\n ProjectId = current.Apply(getClientConfigResult =\u003e getClientConfigResult.Project),\n AuthorizedNetwork = apigeeNetwork.Id,\n RuntimeDatabaseEncryptionKeyName = apigeeKey.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n apigeeVpcConnection,\n apigeeSaKeyuser,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tcurrent, err := organizations.GetClientConfig(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeNetwork, err := compute.NewNetwork(ctx, \"apigeeNetwork\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeRange, err := compute.NewGlobalAddress(ctx, \"apigeeRange\", \u0026compute.GlobalAddressArgs{\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: apigeeNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeVpcConnection, err := servicenetworking.NewConnection(ctx, \"apigeeVpcConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: apigeeNetwork.ID(),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tapigeeRange.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeKeyring, err := kms.NewKeyRing(ctx, \"apigeeKeyring\", \u0026kms.KeyRingArgs{\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\tapigeeKey, err := kms.NewCryptoKey(ctx, \"apigeeKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: apigeeKeyring.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeSa, err := projects.NewServiceIdentity(ctx, \"apigeeSa\", \u0026projects.ServiceIdentityArgs{\n\t\t\tProject: pulumi.Any(google_project.Project.Project_id),\n\t\t\tService: pulumi.Any(google_project_service.Apigee.Service),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tapigeeSaKeyuser, err := kms.NewCryptoKeyIAMBinding(ctx, \"apigeeSaKeyuser\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: apigeeKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tapigeeSa.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), 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 = apigee.NewOrganization(ctx, \"org\", \u0026apigee.OrganizationArgs{\n\t\t\tAnalyticsRegion: pulumi.String(\"us-central1\"),\n\t\t\tDisplayName: pulumi.String(\"apigee-org\"),\n\t\t\tDescription: pulumi.String(\"Terraform-provisioned Apigee Org.\"),\n\t\t\tProjectId: *pulumi.String(current.Project),\n\t\t\tAuthorizedNetwork: apigeeNetwork.ID(),\n\t\t\tRuntimeDatabaseEncryptionKeyName: apigeeKey.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tapigeeVpcConnection,\n\t\t\tapigeeSaKeyuser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.Network;\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.projects.ServiceIdentity;\nimport com.pulumi.gcp.projects.ServiceIdentityArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.apigee.Organization;\nimport com.pulumi.gcp.apigee.OrganizationArgs;\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 current = OrganizationsFunctions.getClientConfig();\n\n var apigeeNetwork = new Network(\"apigeeNetwork\");\n\n var apigeeRange = new GlobalAddress(\"apigeeRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(apigeeNetwork.id())\n .build());\n\n var apigeeVpcConnection = new Connection(\"apigeeVpcConnection\", ConnectionArgs.builder() \n .network(apigeeNetwork.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(apigeeRange.name())\n .build());\n\n var apigeeKeyring = new KeyRing(\"apigeeKeyring\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var apigeeKey = new CryptoKey(\"apigeeKey\", CryptoKeyArgs.builder() \n .keyRing(apigeeKeyring.id())\n .build());\n\n var apigeeSa = new ServiceIdentity(\"apigeeSa\", ServiceIdentityArgs.builder() \n .project(google_project.project().project_id())\n .service(google_project_service.apigee().service())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var apigeeSaKeyuser = new CryptoKeyIAMBinding(\"apigeeSaKeyuser\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(apigeeKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(apigeeSa.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var org = new Organization(\"org\", OrganizationArgs.builder() \n .analyticsRegion(\"us-central1\")\n .displayName(\"apigee-org\")\n .description(\"Terraform-provisioned Apigee Org.\")\n .projectId(current.applyValue(getClientConfigResult -\u003e getClientConfigResult.project()))\n .authorizedNetwork(apigeeNetwork.id())\n .runtimeDatabaseEncryptionKeyName(apigeeKey.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n apigeeVpcConnection,\n apigeeSaKeyuser)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n apigeeNetwork:\n type: gcp:compute:Network\n apigeeRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${apigeeNetwork.id}\n apigeeVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${apigeeNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${apigeeRange.name}\n apigeeKeyring:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n apigeeKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${apigeeKeyring.id}\n apigeeSa:\n type: gcp:projects:ServiceIdentity\n properties:\n project: ${google_project.project.project_id}\n service: ${google_project_service.apigee.service}\n options:\n provider: ${[\"google-beta\"]}\n apigeeSaKeyuser:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${apigeeKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:${apigeeSa.email}\n org:\n type: gcp:apigee:Organization\n properties:\n analyticsRegion: us-central1\n displayName: apigee-org\n description: Terraform-provisioned Apigee Org.\n projectId: ${current.project}\n authorizedNetwork: ${apigeeNetwork.id}\n runtimeDatabaseEncryptionKeyName: ${apigeeKey.id}\n options:\n dependson:\n - ${apigeeVpcConnection}\n - ${apigeeSaKeyuser}\nvariables:\n current:\n fn::invoke:\n Function: gcp:organizations:getClientConfig\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nOrganization can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:apigee/organization:Organization default organizations/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:apigee/organization:Organization default {{name}}\n```\n\n ", "properties": { "analyticsRegion": { "type": "string", @@ -110670,7 +111775,7 @@ "additionalProperties": { "type": "string" }, - "description": "Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config.\n" + "description": "Environment variables available to the application. As these are not returned in the API request, Terraform will not\ndetect any changes made outside of the Terraform config.\n" }, "handlers": { "type": "array", @@ -110815,7 +111920,7 @@ "additionalProperties": { "type": "string" }, - "description": "Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config.\n" + "description": "Environment variables available to the application. As these are not returned in the API request, Terraform will not\ndetect any changes made outside of the Terraform config.\n" }, "handlers": { "type": "array", @@ -110955,7 +112060,7 @@ "additionalProperties": { "type": "string" }, - "description": "Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config.\n" + "description": "Environment variables available to the application. As these are not returned in the API request, Terraform will not\ndetect any changes made outside of the Terraform config.\n" }, "handlers": { "type": "array", @@ -111444,7 +112549,7 @@ } }, "gcp:artifactregistry/repository:Repository": { - "description": "A repository for storing artifacts\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{{% examples %}}\n## Example Usage\n{{% example %}}\n### Artifact Registry Repository Basic\n\n\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 description: \"example docker repository\",\n format: \"DOCKER\",\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n description=\"example docker repository\",\n format=\"DOCKER\",\n location=\"us-central1\",\n repository_id=\"my-repository\")\n```\n```csharp\nusing System.Collections.Generic;\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 Description = \"example docker repository\",\n Format = \"DOCKER\",\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tDescription: pulumi.String(\"example docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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 .description(\"example docker repository\")\n .format(\"DOCKER\")\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n description: example docker repository\n format: DOCKER\n location: us-central1\n repositoryId: my-repository\n```\n{{% /example %}}\n{{% example %}}\n### Artifact Registry Repository Cmek\n\n\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(\"cryptoKey\", {\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(\"cryptoKey\",\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 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(\"cryptoKey\", 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 = new[]\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/v6/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKeyIAMMember(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"kms-key\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.String(fmt.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 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{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRepository can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:artifactregistry/repository:Repository default projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:artifactregistry/repository:Repository default {{project}}/{{location}}/{{repository_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:artifactregistry/repository:Repository default {{location}}/{{repository_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:artifactregistry/repository:Repository default {{repository_id}}\n```\n\n ", + "description": "A repository for storing artifacts\n\n\nTo get more information about Repository, see:\n\n* [API documentation](https://cloud.google.com/artifact-registry/docs/reference/rest/v1/projects.locations.repositories)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/artifact-registry/docs/overview)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Artifact Registry Repository Basic\n\n\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 description: \"example docker repository\",\n format: \"DOCKER\",\n location: \"us-central1\",\n repositoryId: \"my-repository\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_repo = gcp.artifactregistry.Repository(\"my-repo\",\n description=\"example docker repository\",\n format=\"DOCKER\",\n location=\"us-central1\",\n repository_id=\"my-repository\")\n```\n```csharp\nusing System.Collections.Generic;\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 Description = \"example docker repository\",\n Format = \"DOCKER\",\n Location = \"us-central1\",\n RepositoryId = \"my-repository\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tDescription: pulumi.String(\"example docker repository\"),\n\t\t\tFormat: pulumi.String(\"DOCKER\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryId: pulumi.String(\"my-repository\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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 .description(\"example docker repository\")\n .format(\"DOCKER\")\n .location(\"us-central1\")\n .repositoryId(\"my-repository\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-repo:\n type: gcp:artifactregistry:Repository\n properties:\n description: example docker repository\n format: DOCKER\n location: us-central1\n repositoryId: my-repository\n```\n{{% /example %}}\n{{% example %}}\n### Artifact Registry Repository Cmek\n\n\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(\"cryptoKey\", {\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(\"cryptoKey\",\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 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(\"cryptoKey\", 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 = new[]\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/v6/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKeyIAMMember(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"kms-key\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.String(fmt.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 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{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRepository can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:artifactregistry/repository:Repository default projects/{{project}}/locations/{{location}}/repositories/{{repository_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:artifactregistry/repository:Repository default {{project}}/{{location}}/{{repository_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:artifactregistry/repository:Repository default {{location}}/{{repository_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:artifactregistry/repository:Repository default {{repository_id}}\n```\n\n ", "properties": { "createTime": { "type": "string", @@ -111609,7 +112714,7 @@ } }, "gcp:artifactregistry/repositoryIamBinding:RepositoryIamBinding": { - "description": "Three different resources help you manage your IAM policy for Artifact Registry Repository. Each of these resources serves a different use case:\n\n* `gcp.artifactregistry.RepositoryIamPolicy`: Authoritative. Sets the IAM policy for the repository and replaces any existing policy already attached.\n* `gcp.artifactregistry.RepositoryIamBinding`: 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 repository are preserved.\n* `gcp.artifactregistry.RepositoryIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the repository are preserved.\n\n\u003e **Note:** `gcp.artifactregistry.RepositoryIamPolicy` **cannot** be used in conjunction with `gcp.artifactregistry.RepositoryIamBinding` and `gcp.artifactregistry.RepositoryIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.artifactregistry.RepositoryIamBinding` resources **can be** used in conjunction with `gcp.artifactregistry.RepositoryIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_policy\n\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/artifactregistry.reader\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.artifactregistry.RepositoryIamPolicy(\"policy\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/artifactregistry.reader\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.artifactregistry.RepositoryIamPolicy(\"policy\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/artifactregistry.reader\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ArtifactRegistry.RepositoryIamPolicy(\"policy\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.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/v6/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/artifactregistry.reader\",\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 = artifactregistry.NewRepositoryIamPolicy(ctx, \"policy\", \u0026artifactregistry.RepositoryIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.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.artifactregistry.RepositoryIamPolicy;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/artifactregistry.reader\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RepositoryIamPolicy(\"policy\", RepositoryIamPolicyArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:artifactregistry:RepositoryIamPolicy\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/artifactregistry.reader\n members:\n - user:jane@example.com\n```\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.artifactregistry.RepositoryIamBinding(\"binding\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].name,\n role: \"roles/artifactregistry.reader\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.artifactregistry.RepositoryIamBinding(\"binding\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n role=\"roles/artifactregistry.reader\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ArtifactRegistry.RepositoryIamBinding(\"binding\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.Name,\n Role = \"roles/artifactregistry.reader\",\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/v6/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.NewRepositoryIamBinding(ctx, \"binding\", \u0026artifactregistry.RepositoryIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.Name),\n\t\t\tRole: pulumi.String(\"roles/artifactregistry.reader\"),\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.artifactregistry.RepositoryIamBinding;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RepositoryIamBinding(\"binding\", RepositoryIamBindingArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .role(\"roles/artifactregistry.reader\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:artifactregistry:RepositoryIamBinding\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n role: roles/artifactregistry.reader\n members:\n - user:jane@example.com\n```\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.artifactregistry.RepositoryIamMember(\"member\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].name,\n role: \"roles/artifactregistry.reader\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.artifactregistry.RepositoryIamMember(\"member\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n role=\"roles/artifactregistry.reader\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ArtifactRegistry.RepositoryIamMember(\"member\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.Name,\n Role = \"roles/artifactregistry.reader\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewRepositoryIamMember(ctx, \"member\", \u0026artifactregistry.RepositoryIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.Name),\n\t\t\tRole: pulumi.String(\"roles/artifactregistry.reader\"),\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.artifactregistry.RepositoryIamMember;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RepositoryIamMember(\"member\", RepositoryIamMemberArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .role(\"roles/artifactregistry.reader\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:artifactregistry:RepositoryIamMember\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n role: roles/artifactregistry.reader\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/repositories/{{repository}} * {{project}}/{{location}}/{{repository}} * {{location}}/{{repository}} * {{repository}} Any variables not passed in the import command will be taken from the provider configuration. Artifact Registry repository IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamBinding:RepositoryIamBinding editor \"projects/{{project}}/locations/{{location}}/repositories/{{repository}} roles/artifactregistry.reader user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamBinding:RepositoryIamBinding editor \"projects/{{project}}/locations/{{location}}/repositories/{{repository}} roles/artifactregistry.reader\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamBinding:RepositoryIamBinding editor projects/{{project}}/locations/{{location}}/repositories/{{repository}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "Three different resources help you manage your IAM policy for Artifact Registry Repository. Each of these resources serves a different use case:\n\n* `gcp.artifactregistry.RepositoryIamPolicy`: Authoritative. Sets the IAM policy for the repository and replaces any existing policy already attached.\n* `gcp.artifactregistry.RepositoryIamBinding`: 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 repository are preserved.\n* `gcp.artifactregistry.RepositoryIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the repository are preserved.\n\n\u003e **Note:** `gcp.artifactregistry.RepositoryIamPolicy` **cannot** be used in conjunction with `gcp.artifactregistry.RepositoryIamBinding` and `gcp.artifactregistry.RepositoryIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.artifactregistry.RepositoryIamBinding` resources **can be** used in conjunction with `gcp.artifactregistry.RepositoryIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_policy\n\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/artifactregistry.reader\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.artifactregistry.RepositoryIamPolicy(\"policy\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/artifactregistry.reader\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.artifactregistry.RepositoryIamPolicy(\"policy\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/artifactregistry.reader\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ArtifactRegistry.RepositoryIamPolicy(\"policy\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.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/v6/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/artifactregistry.reader\",\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 = artifactregistry.NewRepositoryIamPolicy(ctx, \"policy\", \u0026artifactregistry.RepositoryIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.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.artifactregistry.RepositoryIamPolicy;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/artifactregistry.reader\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RepositoryIamPolicy(\"policy\", RepositoryIamPolicyArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:artifactregistry:RepositoryIamPolicy\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/artifactregistry.reader\n members:\n - user:jane@example.com\n```\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.artifactregistry.RepositoryIamBinding(\"binding\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].name,\n role: \"roles/artifactregistry.reader\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.artifactregistry.RepositoryIamBinding(\"binding\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n role=\"roles/artifactregistry.reader\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ArtifactRegistry.RepositoryIamBinding(\"binding\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.Name,\n Role = \"roles/artifactregistry.reader\",\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/v6/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.NewRepositoryIamBinding(ctx, \"binding\", \u0026artifactregistry.RepositoryIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.Name),\n\t\t\tRole: pulumi.String(\"roles/artifactregistry.reader\"),\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.artifactregistry.RepositoryIamBinding;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RepositoryIamBinding(\"binding\", RepositoryIamBindingArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .role(\"roles/artifactregistry.reader\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:artifactregistry:RepositoryIamBinding\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n role: roles/artifactregistry.reader\n members:\n - user:jane@example.com\n```\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.artifactregistry.RepositoryIamMember(\"member\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].name,\n role: \"roles/artifactregistry.reader\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.artifactregistry.RepositoryIamMember(\"member\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n role=\"roles/artifactregistry.reader\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ArtifactRegistry.RepositoryIamMember(\"member\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.Name,\n Role = \"roles/artifactregistry.reader\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewRepositoryIamMember(ctx, \"member\", \u0026artifactregistry.RepositoryIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.Name),\n\t\t\tRole: pulumi.String(\"roles/artifactregistry.reader\"),\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.artifactregistry.RepositoryIamMember;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RepositoryIamMember(\"member\", RepositoryIamMemberArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .role(\"roles/artifactregistry.reader\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:artifactregistry:RepositoryIamMember\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n role: roles/artifactregistry.reader\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/repositories/{{repository}} * {{project}}/{{location}}/{{repository}} * {{location}}/{{repository}} * {{repository}} Any variables not passed in the import command will be taken from the provider configuration. Artifact Registry repository IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamBinding:RepositoryIamBinding editor \"projects/{{project}}/locations/{{location}}/repositories/{{repository}} roles/artifactregistry.reader user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamBinding:RepositoryIamBinding editor \"projects/{{project}}/locations/{{location}}/repositories/{{repository}} roles/artifactregistry.reader\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamBinding:RepositoryIamBinding editor projects/{{project}}/locations/{{location}}/repositories/{{repository}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:artifactregistry/RepositoryIamBindingCondition:RepositoryIamBindingCondition" @@ -111728,7 +112833,7 @@ } }, "gcp:artifactregistry/repositoryIamMember:RepositoryIamMember": { - "description": "Three different resources help you manage your IAM policy for Artifact Registry Repository. Each of these resources serves a different use case:\n\n* `gcp.artifactregistry.RepositoryIamPolicy`: Authoritative. Sets the IAM policy for the repository and replaces any existing policy already attached.\n* `gcp.artifactregistry.RepositoryIamBinding`: 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 repository are preserved.\n* `gcp.artifactregistry.RepositoryIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the repository are preserved.\n\n\u003e **Note:** `gcp.artifactregistry.RepositoryIamPolicy` **cannot** be used in conjunction with `gcp.artifactregistry.RepositoryIamBinding` and `gcp.artifactregistry.RepositoryIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.artifactregistry.RepositoryIamBinding` resources **can be** used in conjunction with `gcp.artifactregistry.RepositoryIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_policy\n\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/artifactregistry.reader\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.artifactregistry.RepositoryIamPolicy(\"policy\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/artifactregistry.reader\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.artifactregistry.RepositoryIamPolicy(\"policy\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/artifactregistry.reader\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ArtifactRegistry.RepositoryIamPolicy(\"policy\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.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/v6/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/artifactregistry.reader\",\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 = artifactregistry.NewRepositoryIamPolicy(ctx, \"policy\", \u0026artifactregistry.RepositoryIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.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.artifactregistry.RepositoryIamPolicy;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/artifactregistry.reader\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RepositoryIamPolicy(\"policy\", RepositoryIamPolicyArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:artifactregistry:RepositoryIamPolicy\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/artifactregistry.reader\n members:\n - user:jane@example.com\n```\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.artifactregistry.RepositoryIamBinding(\"binding\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].name,\n role: \"roles/artifactregistry.reader\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.artifactregistry.RepositoryIamBinding(\"binding\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n role=\"roles/artifactregistry.reader\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ArtifactRegistry.RepositoryIamBinding(\"binding\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.Name,\n Role = \"roles/artifactregistry.reader\",\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/v6/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.NewRepositoryIamBinding(ctx, \"binding\", \u0026artifactregistry.RepositoryIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.Name),\n\t\t\tRole: pulumi.String(\"roles/artifactregistry.reader\"),\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.artifactregistry.RepositoryIamBinding;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RepositoryIamBinding(\"binding\", RepositoryIamBindingArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .role(\"roles/artifactregistry.reader\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:artifactregistry:RepositoryIamBinding\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n role: roles/artifactregistry.reader\n members:\n - user:jane@example.com\n```\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.artifactregistry.RepositoryIamMember(\"member\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].name,\n role: \"roles/artifactregistry.reader\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.artifactregistry.RepositoryIamMember(\"member\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n role=\"roles/artifactregistry.reader\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ArtifactRegistry.RepositoryIamMember(\"member\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.Name,\n Role = \"roles/artifactregistry.reader\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewRepositoryIamMember(ctx, \"member\", \u0026artifactregistry.RepositoryIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.Name),\n\t\t\tRole: pulumi.String(\"roles/artifactregistry.reader\"),\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.artifactregistry.RepositoryIamMember;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RepositoryIamMember(\"member\", RepositoryIamMemberArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .role(\"roles/artifactregistry.reader\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:artifactregistry:RepositoryIamMember\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n role: roles/artifactregistry.reader\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/repositories/{{repository}} * {{project}}/{{location}}/{{repository}} * {{location}}/{{repository}} * {{repository}} Any variables not passed in the import command will be taken from the provider configuration. Artifact Registry repository IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamMember:RepositoryIamMember editor \"projects/{{project}}/locations/{{location}}/repositories/{{repository}} roles/artifactregistry.reader user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamMember:RepositoryIamMember editor \"projects/{{project}}/locations/{{location}}/repositories/{{repository}} roles/artifactregistry.reader\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamMember:RepositoryIamMember editor projects/{{project}}/locations/{{location}}/repositories/{{repository}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "Three different resources help you manage your IAM policy for Artifact Registry Repository. Each of these resources serves a different use case:\n\n* `gcp.artifactregistry.RepositoryIamPolicy`: Authoritative. Sets the IAM policy for the repository and replaces any existing policy already attached.\n* `gcp.artifactregistry.RepositoryIamBinding`: 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 repository are preserved.\n* `gcp.artifactregistry.RepositoryIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the repository are preserved.\n\n\u003e **Note:** `gcp.artifactregistry.RepositoryIamPolicy` **cannot** be used in conjunction with `gcp.artifactregistry.RepositoryIamBinding` and `gcp.artifactregistry.RepositoryIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.artifactregistry.RepositoryIamBinding` resources **can be** used in conjunction with `gcp.artifactregistry.RepositoryIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_policy\n\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/artifactregistry.reader\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.artifactregistry.RepositoryIamPolicy(\"policy\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/artifactregistry.reader\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.artifactregistry.RepositoryIamPolicy(\"policy\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/artifactregistry.reader\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ArtifactRegistry.RepositoryIamPolicy(\"policy\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.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/v6/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/artifactregistry.reader\",\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 = artifactregistry.NewRepositoryIamPolicy(ctx, \"policy\", \u0026artifactregistry.RepositoryIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.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.artifactregistry.RepositoryIamPolicy;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/artifactregistry.reader\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RepositoryIamPolicy(\"policy\", RepositoryIamPolicyArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:artifactregistry:RepositoryIamPolicy\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/artifactregistry.reader\n members:\n - user:jane@example.com\n```\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.artifactregistry.RepositoryIamBinding(\"binding\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].name,\n role: \"roles/artifactregistry.reader\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.artifactregistry.RepositoryIamBinding(\"binding\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n role=\"roles/artifactregistry.reader\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ArtifactRegistry.RepositoryIamBinding(\"binding\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.Name,\n Role = \"roles/artifactregistry.reader\",\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/v6/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.NewRepositoryIamBinding(ctx, \"binding\", \u0026artifactregistry.RepositoryIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.Name),\n\t\t\tRole: pulumi.String(\"roles/artifactregistry.reader\"),\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.artifactregistry.RepositoryIamBinding;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RepositoryIamBinding(\"binding\", RepositoryIamBindingArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .role(\"roles/artifactregistry.reader\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:artifactregistry:RepositoryIamBinding\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n role: roles/artifactregistry.reader\n members:\n - user:jane@example.com\n```\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.artifactregistry.RepositoryIamMember(\"member\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].name,\n role: \"roles/artifactregistry.reader\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.artifactregistry.RepositoryIamMember(\"member\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n role=\"roles/artifactregistry.reader\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ArtifactRegistry.RepositoryIamMember(\"member\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.Name,\n Role = \"roles/artifactregistry.reader\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewRepositoryIamMember(ctx, \"member\", \u0026artifactregistry.RepositoryIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.Name),\n\t\t\tRole: pulumi.String(\"roles/artifactregistry.reader\"),\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.artifactregistry.RepositoryIamMember;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RepositoryIamMember(\"member\", RepositoryIamMemberArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .role(\"roles/artifactregistry.reader\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:artifactregistry:RepositoryIamMember\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n role: roles/artifactregistry.reader\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/repositories/{{repository}} * {{project}}/{{location}}/{{repository}} * {{location}}/{{repository}} * {{repository}} Any variables not passed in the import command will be taken from the provider configuration. Artifact Registry repository IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamMember:RepositoryIamMember editor \"projects/{{project}}/locations/{{location}}/repositories/{{repository}} roles/artifactregistry.reader user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamMember:RepositoryIamMember editor \"projects/{{project}}/locations/{{location}}/repositories/{{repository}} roles/artifactregistry.reader\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamMember:RepositoryIamMember editor projects/{{project}}/locations/{{location}}/repositories/{{repository}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:artifactregistry/RepositoryIamMemberCondition:RepositoryIamMemberCondition" @@ -111840,7 +112945,7 @@ } }, "gcp:artifactregistry/repositoryIamPolicy:RepositoryIamPolicy": { - "description": "Three different resources help you manage your IAM policy for Artifact Registry Repository. Each of these resources serves a different use case:\n\n* `gcp.artifactregistry.RepositoryIamPolicy`: Authoritative. Sets the IAM policy for the repository and replaces any existing policy already attached.\n* `gcp.artifactregistry.RepositoryIamBinding`: 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 repository are preserved.\n* `gcp.artifactregistry.RepositoryIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the repository are preserved.\n\n\u003e **Note:** `gcp.artifactregistry.RepositoryIamPolicy` **cannot** be used in conjunction with `gcp.artifactregistry.RepositoryIamBinding` and `gcp.artifactregistry.RepositoryIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.artifactregistry.RepositoryIamBinding` resources **can be** used in conjunction with `gcp.artifactregistry.RepositoryIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_policy\n\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/artifactregistry.reader\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.artifactregistry.RepositoryIamPolicy(\"policy\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/artifactregistry.reader\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.artifactregistry.RepositoryIamPolicy(\"policy\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/artifactregistry.reader\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ArtifactRegistry.RepositoryIamPolicy(\"policy\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.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/v6/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/artifactregistry.reader\",\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 = artifactregistry.NewRepositoryIamPolicy(ctx, \"policy\", \u0026artifactregistry.RepositoryIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.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.artifactregistry.RepositoryIamPolicy;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/artifactregistry.reader\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RepositoryIamPolicy(\"policy\", RepositoryIamPolicyArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:artifactregistry:RepositoryIamPolicy\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/artifactregistry.reader\n members:\n - user:jane@example.com\n```\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.artifactregistry.RepositoryIamBinding(\"binding\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].name,\n role: \"roles/artifactregistry.reader\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.artifactregistry.RepositoryIamBinding(\"binding\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n role=\"roles/artifactregistry.reader\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ArtifactRegistry.RepositoryIamBinding(\"binding\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.Name,\n Role = \"roles/artifactregistry.reader\",\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/v6/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.NewRepositoryIamBinding(ctx, \"binding\", \u0026artifactregistry.RepositoryIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.Name),\n\t\t\tRole: pulumi.String(\"roles/artifactregistry.reader\"),\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.artifactregistry.RepositoryIamBinding;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RepositoryIamBinding(\"binding\", RepositoryIamBindingArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .role(\"roles/artifactregistry.reader\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:artifactregistry:RepositoryIamBinding\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n role: roles/artifactregistry.reader\n members:\n - user:jane@example.com\n```\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.artifactregistry.RepositoryIamMember(\"member\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].name,\n role: \"roles/artifactregistry.reader\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.artifactregistry.RepositoryIamMember(\"member\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n role=\"roles/artifactregistry.reader\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ArtifactRegistry.RepositoryIamMember(\"member\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.Name,\n Role = \"roles/artifactregistry.reader\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewRepositoryIamMember(ctx, \"member\", \u0026artifactregistry.RepositoryIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.Name),\n\t\t\tRole: pulumi.String(\"roles/artifactregistry.reader\"),\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.artifactregistry.RepositoryIamMember;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RepositoryIamMember(\"member\", RepositoryIamMemberArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .role(\"roles/artifactregistry.reader\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:artifactregistry:RepositoryIamMember\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n role: roles/artifactregistry.reader\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/repositories/{{repository}} * {{project}}/{{location}}/{{repository}} * {{location}}/{{repository}} * {{repository}} Any variables not passed in the import command will be taken from the provider configuration. Artifact Registry repository IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamPolicy:RepositoryIamPolicy editor \"projects/{{project}}/locations/{{location}}/repositories/{{repository}} roles/artifactregistry.reader user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamPolicy:RepositoryIamPolicy editor \"projects/{{project}}/locations/{{location}}/repositories/{{repository}} roles/artifactregistry.reader\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamPolicy:RepositoryIamPolicy editor projects/{{project}}/locations/{{location}}/repositories/{{repository}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "Three different resources help you manage your IAM policy for Artifact Registry Repository. Each of these resources serves a different use case:\n\n* `gcp.artifactregistry.RepositoryIamPolicy`: Authoritative. Sets the IAM policy for the repository and replaces any existing policy already attached.\n* `gcp.artifactregistry.RepositoryIamBinding`: 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 repository are preserved.\n* `gcp.artifactregistry.RepositoryIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the repository are preserved.\n\n\u003e **Note:** `gcp.artifactregistry.RepositoryIamPolicy` **cannot** be used in conjunction with `gcp.artifactregistry.RepositoryIamBinding` and `gcp.artifactregistry.RepositoryIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.artifactregistry.RepositoryIamBinding` resources **can be** used in conjunction with `gcp.artifactregistry.RepositoryIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_policy\n\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/artifactregistry.reader\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.artifactregistry.RepositoryIamPolicy(\"policy\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/artifactregistry.reader\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.artifactregistry.RepositoryIamPolicy(\"policy\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/artifactregistry.reader\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.ArtifactRegistry.RepositoryIamPolicy(\"policy\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.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/v6/go/gcp/artifactregistry\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/artifactregistry.reader\",\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 = artifactregistry.NewRepositoryIamPolicy(ctx, \"policy\", \u0026artifactregistry.RepositoryIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.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.artifactregistry.RepositoryIamPolicy;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/artifactregistry.reader\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new RepositoryIamPolicy(\"policy\", RepositoryIamPolicyArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:artifactregistry:RepositoryIamPolicy\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/artifactregistry.reader\n members:\n - user:jane@example.com\n```\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.artifactregistry.RepositoryIamBinding(\"binding\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].name,\n role: \"roles/artifactregistry.reader\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.artifactregistry.RepositoryIamBinding(\"binding\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n role=\"roles/artifactregistry.reader\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ArtifactRegistry.RepositoryIamBinding(\"binding\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.Name,\n Role = \"roles/artifactregistry.reader\",\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/v6/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.NewRepositoryIamBinding(ctx, \"binding\", \u0026artifactregistry.RepositoryIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.Name),\n\t\t\tRole: pulumi.String(\"roles/artifactregistry.reader\"),\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.artifactregistry.RepositoryIamBinding;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RepositoryIamBinding(\"binding\", RepositoryIamBindingArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .role(\"roles/artifactregistry.reader\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:artifactregistry:RepositoryIamBinding\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n role: roles/artifactregistry.reader\n members:\n - user:jane@example.com\n```\n\n## google\\_artifact\\_registry\\_repository\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.artifactregistry.RepositoryIamMember(\"member\", {\n project: google_artifact_registry_repository[\"my-repo\"].project,\n location: google_artifact_registry_repository[\"my-repo\"].location,\n repository: google_artifact_registry_repository[\"my-repo\"].name,\n role: \"roles/artifactregistry.reader\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.artifactregistry.RepositoryIamMember(\"member\",\n project=google_artifact_registry_repository[\"my-repo\"][\"project\"],\n location=google_artifact_registry_repository[\"my-repo\"][\"location\"],\n repository=google_artifact_registry_repository[\"my-repo\"][\"name\"],\n role=\"roles/artifactregistry.reader\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ArtifactRegistry.RepositoryIamMember(\"member\", new()\n {\n Project = google_artifact_registry_repository.My_repo.Project,\n Location = google_artifact_registry_repository.My_repo.Location,\n Repository = google_artifact_registry_repository.My_repo.Name,\n Role = \"roles/artifactregistry.reader\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewRepositoryIamMember(ctx, \"member\", \u0026artifactregistry.RepositoryIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_artifact_registry_repository.MyRepo.Project),\n\t\t\tLocation: pulumi.Any(google_artifact_registry_repository.MyRepo.Location),\n\t\t\tRepository: pulumi.Any(google_artifact_registry_repository.MyRepo.Name),\n\t\t\tRole: pulumi.String(\"roles/artifactregistry.reader\"),\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.artifactregistry.RepositoryIamMember;\nimport com.pulumi.gcp.artifactregistry.RepositoryIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RepositoryIamMember(\"member\", RepositoryIamMemberArgs.builder() \n .project(google_artifact_registry_repository.my-repo().project())\n .location(google_artifact_registry_repository.my-repo().location())\n .repository(google_artifact_registry_repository.my-repo().name())\n .role(\"roles/artifactregistry.reader\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:artifactregistry:RepositoryIamMember\n properties:\n project: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].project}\n location: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].location}\n repository: ${google_artifact_registry_repository\"my-repo\"[%!s(MISSING)].name}\n role: roles/artifactregistry.reader\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/repositories/{{repository}} * {{project}}/{{location}}/{{repository}} * {{location}}/{{repository}} * {{repository}} Any variables not passed in the import command will be taken from the provider configuration. Artifact Registry repository IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamPolicy:RepositoryIamPolicy editor \"projects/{{project}}/locations/{{location}}/repositories/{{repository}} roles/artifactregistry.reader user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamPolicy:RepositoryIamPolicy editor \"projects/{{project}}/locations/{{location}}/repositories/{{repository}} roles/artifactregistry.reader\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:artifactregistry/repositoryIamPolicy:RepositoryIamPolicy editor projects/{{project}}/locations/{{location}}/repositories/{{repository}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "etag": { "type": "string", @@ -112696,7 +113801,7 @@ } }, "gcp:bigquery/connection:Connection": { - "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Bigquery Connection Cloud Resource\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n cloudResource: {},\n connectionId: \"my-connection\",\n description: \"a riveting description\",\n friendlyName: \"👋\",\n location: \"US\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n cloud_resource=gcp.bigquery.ConnectionCloudResourceArgs(),\n connection_id=\"my-connection\",\n description=\"a riveting description\",\n friendly_name=\"👋\",\n location=\"US\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n CloudResource = null,\n ConnectionId = \"my-connection\",\n Description = \"a riveting description\",\n FriendlyName = \"👋\",\n Location = \"US\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tCloudResource: nil,\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\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\treturn nil\n\t})\n}\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 .cloudResource()\n .connectionId(\"my-connection\")\n .description(\"a riveting description\")\n .friendlyName(\"👋\")\n .location(\"US\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n cloudResource: {}\n connectionId: my-connection\n description: a riveting description\n friendlyName: \"\\U0001F44B\"\n location: US\n```\n{{% /example %}}\n{{% example %}}\n### Bigquery Connection Basic\n\n\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 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\", {instance: instance.name});\nconst pwd = new random.RandomPassword(\"pwd\", {\n length: 16,\n special: false,\n});\nconst user = new gcp.sql.User(\"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 database_version=\"POSTGRES_11\",\n region=\"us-central1\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ),\n deletion_protection=True)\ndb = gcp.sql.Database(\"db\", instance=instance.name)\npwd = random.RandomPassword(\"pwd\",\n length=16,\n special=False)\nuser = gcp.sql.User(\"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=gcp.bigquery.ConnectionCloudSqlArgs(\n instance_id=instance.connection_name,\n database=db.name,\n type=\"POSTGRES\",\n credential=gcp.bigquery.ConnectionCloudSqlCredentialArgs(\n username=user.name,\n password=user.password,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\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 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 });\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 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/v6/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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})\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\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 .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 .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 .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 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 pwd:\n type: random:RandomPassword\n properties:\n length: 16\n special: false\n user:\n type: gcp:sql:User\n properties:\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{{% /example %}}\n{{% example %}}\n### Bigquery Connection Full\n\n\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 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\", {instance: instance.name});\nconst pwd = new random.RandomPassword(\"pwd\", {\n length: 16,\n special: false,\n});\nconst user = new gcp.sql.User(\"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 database_version=\"POSTGRES_11\",\n region=\"us-central1\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ),\n deletion_protection=True)\ndb = gcp.sql.Database(\"db\", instance=instance.name)\npwd = random.RandomPassword(\"pwd\",\n length=16,\n special=False)\nuser = gcp.sql.User(\"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=gcp.bigquery.ConnectionCloudSqlArgs(\n instance_id=instance.connection_name,\n database=db.name,\n type=\"POSTGRES\",\n credential=gcp.bigquery.ConnectionCloudSqlCredentialArgs(\n username=user.name,\n password=user.password,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\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 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 });\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 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/v6/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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})\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\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 .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 .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 .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 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 pwd:\n type: random:RandomPassword\n properties:\n length: 16\n special: false\n user:\n type: gcp:sql:User\n properties:\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{{% /example %}}\n{{% example %}}\n### Bigquery Connection Aws\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n aws: {\n accessRole: {\n iamRoleId: \"arn:aws:iam::999999999999:role/omnirole\",\n },\n },\n connectionId: \"my-connection\",\n description: \"a riveting description\",\n friendlyName: \"👋\",\n location: \"aws-us-east-1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n aws=gcp.bigquery.ConnectionAwsArgs(\n access_role=gcp.bigquery.ConnectionAwsAccessRoleArgs(\n iam_role_id=\"arn:aws:iam::999999999999:role/omnirole\",\n ),\n ),\n connection_id=\"my-connection\",\n description=\"a riveting description\",\n friendly_name=\"👋\",\n location=\"aws-us-east-1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\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 ConnectionId = \"my-connection\",\n Description = \"a riveting description\",\n FriendlyName = \"👋\",\n Location = \"aws-us-east-1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tLocation: pulumi.String(\"aws-us-east-1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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 .aws(ConnectionAwsArgs.builder()\n .accessRole(ConnectionAwsAccessRoleArgs.builder()\n .iamRoleId(\"arn:aws:iam::999999999999:role/omnirole\")\n .build())\n .build())\n .connectionId(\"my-connection\")\n .description(\"a riveting description\")\n .friendlyName(\"👋\")\n .location(\"aws-us-east-1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n aws:\n accessRole:\n iamRoleId: arn:aws:iam::999999999999:role/omnirole\n connectionId: my-connection\n description: a riveting description\n friendlyName: \"\\U0001F44B\"\n location: aws-us-east-1\n```\n{{% /example %}}\n{{% example %}}\n### Bigquery Connection Azure\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n azure: {\n customerTenantId: \"customer-tenant-id\",\n },\n connectionId: \"my-connection\",\n description: \"a riveting description\",\n friendlyName: \"👋\",\n location: \"azure-eastus2\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n azure=gcp.bigquery.ConnectionAzureArgs(\n customer_tenant_id=\"customer-tenant-id\",\n ),\n connection_id=\"my-connection\",\n description=\"a riveting description\",\n friendly_name=\"👋\",\n location=\"azure-eastus2\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n Azure = new Gcp.BigQuery.Inputs.ConnectionAzureArgs\n {\n CustomerTenantId = \"customer-tenant-id\",\n },\n ConnectionId = \"my-connection\",\n Description = \"a riveting description\",\n FriendlyName = \"👋\",\n Location = \"azure-eastus2\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tAzure: \u0026bigquery.ConnectionAzureArgs{\n\t\t\t\tCustomerTenantId: pulumi.String(\"customer-tenant-id\"),\n\t\t\t},\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tLocation: pulumi.String(\"azure-eastus2\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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 .azure(ConnectionAzureArgs.builder()\n .customerTenantId(\"customer-tenant-id\")\n .build())\n .connectionId(\"my-connection\")\n .description(\"a riveting description\")\n .friendlyName(\"👋\")\n .location(\"azure-eastus2\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n azure:\n customerTenantId: customer-tenant-id\n connectionId: my-connection\n description: a riveting description\n friendlyName: \"\\U0001F44B\"\n location: azure-eastus2\n```\n{{% /example %}}\n{{% example %}}\n### Bigquery Connection Cloudspanner\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n cloudSpanner: {\n database: \"projects/project/instances/instance/databases/database\",\n },\n connectionId: \"my-connection\",\n description: \"a riveting description\",\n friendlyName: \"👋\",\n location: \"US\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n cloud_spanner=gcp.bigquery.ConnectionCloudSpannerArgs(\n database=\"projects/project/instances/instance/databases/database\",\n ),\n connection_id=\"my-connection\",\n description=\"a riveting description\",\n friendly_name=\"👋\",\n location=\"US\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n CloudSpanner = new Gcp.BigQuery.Inputs.ConnectionCloudSpannerArgs\n {\n Database = \"projects/project/instances/instance/databases/database\",\n },\n ConnectionId = \"my-connection\",\n Description = \"a riveting description\",\n FriendlyName = \"👋\",\n Location = \"US\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tCloudSpanner: \u0026bigquery.ConnectionCloudSpannerArgs{\n\t\t\t\tDatabase: pulumi.String(\"projects/project/instances/instance/databases/database\"),\n\t\t\t},\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\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\treturn nil\n\t})\n}\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 .cloudSpanner(ConnectionCloudSpannerArgs.builder()\n .database(\"projects/project/instances/instance/databases/database\")\n .build())\n .connectionId(\"my-connection\")\n .description(\"a riveting description\")\n .friendlyName(\"👋\")\n .location(\"US\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n cloudSpanner:\n database: projects/project/instances/instance/databases/database\n connectionId: my-connection\n description: a riveting description\n friendlyName: \"\\U0001F44B\"\n location: US\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nConnection can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigquery/connection:Connection default projects/{{project}}/locations/{{location}}/connections/{{connection_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/connection:Connection default {{project}}/{{location}}/{{connection_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/connection:Connection default {{location}}/{{connection_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Bigquery Connection Cloud Resource\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n cloudResource: {},\n connectionId: \"my-connection\",\n description: \"a riveting description\",\n friendlyName: \"👋\",\n location: \"US\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n cloud_resource=gcp.bigquery.ConnectionCloudResourceArgs(),\n connection_id=\"my-connection\",\n description=\"a riveting description\",\n friendly_name=\"👋\",\n location=\"US\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n CloudResource = null,\n ConnectionId = \"my-connection\",\n Description = \"a riveting description\",\n FriendlyName = \"👋\",\n Location = \"US\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tCloudResource: nil,\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\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\treturn nil\n\t})\n}\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 .cloudResource()\n .connectionId(\"my-connection\")\n .description(\"a riveting description\")\n .friendlyName(\"👋\")\n .location(\"US\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n cloudResource: {}\n connectionId: my-connection\n description: a riveting description\n friendlyName: \"\\U0001F44B\"\n location: US\n```\n{{% /example %}}\n{{% example %}}\n### Bigquery Connection Basic\n\n\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 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\", {instance: instance.name});\nconst pwd = new random.RandomPassword(\"pwd\", {\n length: 16,\n special: false,\n});\nconst user = new gcp.sql.User(\"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 database_version=\"POSTGRES_11\",\n region=\"us-central1\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ),\n deletion_protection=True)\ndb = gcp.sql.Database(\"db\", instance=instance.name)\npwd = random.RandomPassword(\"pwd\",\n length=16,\n special=False)\nuser = gcp.sql.User(\"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=gcp.bigquery.ConnectionCloudSqlArgs(\n instance_id=instance.connection_name,\n database=db.name,\n type=\"POSTGRES\",\n credential=gcp.bigquery.ConnectionCloudSqlCredentialArgs(\n username=user.name,\n password=user.password,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\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 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 });\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 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/v6/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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})\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\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 .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 .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 .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 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 pwd:\n type: random:RandomPassword\n properties:\n length: 16\n special: false\n user:\n type: gcp:sql:User\n properties:\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{{% /example %}}\n{{% example %}}\n### Bigquery Connection Full\n\n\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 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\", {instance: instance.name});\nconst pwd = new random.RandomPassword(\"pwd\", {\n length: 16,\n special: false,\n});\nconst user = new gcp.sql.User(\"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 database_version=\"POSTGRES_11\",\n region=\"us-central1\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ),\n deletion_protection=True)\ndb = gcp.sql.Database(\"db\", instance=instance.name)\npwd = random.RandomPassword(\"pwd\",\n length=16,\n special=False)\nuser = gcp.sql.User(\"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=gcp.bigquery.ConnectionCloudSqlArgs(\n instance_id=instance.connection_name,\n database=db.name,\n type=\"POSTGRES\",\n credential=gcp.bigquery.ConnectionCloudSqlCredentialArgs(\n username=user.name,\n password=user.password,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\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 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 });\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 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/v6/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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})\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\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 .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 .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 .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 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 pwd:\n type: random:RandomPassword\n properties:\n length: 16\n special: false\n user:\n type: gcp:sql:User\n properties:\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{{% /example %}}\n{{% example %}}\n### Bigquery Connection Aws\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n aws: {\n accessRole: {\n iamRoleId: \"arn:aws:iam::999999999999:role/omnirole\",\n },\n },\n connectionId: \"my-connection\",\n description: \"a riveting description\",\n friendlyName: \"👋\",\n location: \"aws-us-east-1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n aws=gcp.bigquery.ConnectionAwsArgs(\n access_role=gcp.bigquery.ConnectionAwsAccessRoleArgs(\n iam_role_id=\"arn:aws:iam::999999999999:role/omnirole\",\n ),\n ),\n connection_id=\"my-connection\",\n description=\"a riveting description\",\n friendly_name=\"👋\",\n location=\"aws-us-east-1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\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 ConnectionId = \"my-connection\",\n Description = \"a riveting description\",\n FriendlyName = \"👋\",\n Location = \"aws-us-east-1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tLocation: pulumi.String(\"aws-us-east-1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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 .aws(ConnectionAwsArgs.builder()\n .accessRole(ConnectionAwsAccessRoleArgs.builder()\n .iamRoleId(\"arn:aws:iam::999999999999:role/omnirole\")\n .build())\n .build())\n .connectionId(\"my-connection\")\n .description(\"a riveting description\")\n .friendlyName(\"👋\")\n .location(\"aws-us-east-1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n aws:\n accessRole:\n iamRoleId: arn:aws:iam::999999999999:role/omnirole\n connectionId: my-connection\n description: a riveting description\n friendlyName: \"\\U0001F44B\"\n location: aws-us-east-1\n```\n{{% /example %}}\n{{% example %}}\n### Bigquery Connection Azure\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n azure: {\n customerTenantId: \"customer-tenant-id\",\n federatedApplicationClientId: \"b43eeeee-eeee-eeee-eeee-a480155501ce\",\n },\n connectionId: \"my-connection\",\n description: \"a riveting description\",\n friendlyName: \"👋\",\n location: \"azure-eastus2\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n azure=gcp.bigquery.ConnectionAzureArgs(\n customer_tenant_id=\"customer-tenant-id\",\n federated_application_client_id=\"b43eeeee-eeee-eeee-eeee-a480155501ce\",\n ),\n connection_id=\"my-connection\",\n description=\"a riveting description\",\n friendly_name=\"👋\",\n location=\"azure-eastus2\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n Azure = new Gcp.BigQuery.Inputs.ConnectionAzureArgs\n {\n CustomerTenantId = \"customer-tenant-id\",\n FederatedApplicationClientId = \"b43eeeee-eeee-eeee-eeee-a480155501ce\",\n },\n ConnectionId = \"my-connection\",\n Description = \"a riveting description\",\n FriendlyName = \"👋\",\n Location = \"azure-eastus2\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\n\t\t\tLocation: pulumi.String(\"azure-eastus2\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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 .azure(ConnectionAzureArgs.builder()\n .customerTenantId(\"customer-tenant-id\")\n .federatedApplicationClientId(\"b43eeeee-eeee-eeee-eeee-a480155501ce\")\n .build())\n .connectionId(\"my-connection\")\n .description(\"a riveting description\")\n .friendlyName(\"👋\")\n .location(\"azure-eastus2\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n azure:\n customerTenantId: customer-tenant-id\n federatedApplicationClientId: b43eeeee-eeee-eeee-eeee-a480155501ce\n connectionId: my-connection\n description: a riveting description\n friendlyName: \"\\U0001F44B\"\n location: azure-eastus2\n```\n{{% /example %}}\n{{% example %}}\n### Bigquery Connection Cloudspanner\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst connection = new gcp.bigquery.Connection(\"connection\", {\n cloudSpanner: {\n database: \"projects/project/instances/instance/databases/database\",\n },\n connectionId: \"my-connection\",\n description: \"a riveting description\",\n friendlyName: \"👋\",\n location: \"US\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconnection = gcp.bigquery.Connection(\"connection\",\n cloud_spanner=gcp.bigquery.ConnectionCloudSpannerArgs(\n database=\"projects/project/instances/instance/databases/database\",\n ),\n connection_id=\"my-connection\",\n description=\"a riveting description\",\n friendly_name=\"👋\",\n location=\"US\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var connection = new Gcp.BigQuery.Connection(\"connection\", new()\n {\n CloudSpanner = new Gcp.BigQuery.Inputs.ConnectionCloudSpannerArgs\n {\n Database = \"projects/project/instances/instance/databases/database\",\n },\n ConnectionId = \"my-connection\",\n Description = \"a riveting description\",\n FriendlyName = \"👋\",\n Location = \"US\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tCloudSpanner: \u0026bigquery.ConnectionCloudSpannerArgs{\n\t\t\t\tDatabase: pulumi.String(\"projects/project/instances/instance/databases/database\"),\n\t\t\t},\n\t\t\tConnectionId: pulumi.String(\"my-connection\"),\n\t\t\tDescription: pulumi.String(\"a riveting description\"),\n\t\t\tFriendlyName: pulumi.String(\"👋\"),\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\treturn nil\n\t})\n}\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 .cloudSpanner(ConnectionCloudSpannerArgs.builder()\n .database(\"projects/project/instances/instance/databases/database\")\n .build())\n .connectionId(\"my-connection\")\n .description(\"a riveting description\")\n .friendlyName(\"👋\")\n .location(\"US\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n connection:\n type: gcp:bigquery:Connection\n properties:\n cloudSpanner:\n database: projects/project/instances/instance/databases/database\n connectionId: my-connection\n description: a riveting description\n friendlyName: \"\\U0001F44B\"\n location: US\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nConnection can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigquery/connection:Connection default projects/{{project}}/locations/{{location}}/connections/{{connection_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/connection:Connection default {{project}}/{{location}}/{{connection_id}}\n```\n\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", @@ -112716,7 +113821,7 @@ }, "cloudSql": { "$ref": "#/types/gcp:bigquery/ConnectionCloudSql:ConnectionCloudSql", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "Connection properties specific to the Cloud SQL.\nStructure is documented below.\n" }, "connectionId": { "type": "string", @@ -112772,7 +113877,7 @@ }, "cloudSql": { "$ref": "#/types/gcp:bigquery/ConnectionCloudSql:ConnectionCloudSql", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "Connection properties specific to the Cloud SQL.\nStructure is documented below.\n" }, "connectionId": { "type": "string", @@ -112819,7 +113924,7 @@ }, "cloudSql": { "$ref": "#/types/gcp:bigquery/ConnectionCloudSql:ConnectionCloudSql", - "description": "A nested object resource\nStructure is documented below.\n" + "description": "Connection properties specific to the Cloud SQL.\nStructure is documented below.\n" }, "connectionId": { "type": "string", @@ -114569,7 +115674,7 @@ } }, "gcp:bigquery/reservation:Reservation": { - "description": "A reservation is a mechanism used to guarantee BigQuery slots to users.\n\nTo get more information about Reservation, see:\n\n* [API documentation](https://cloud.google.com/bigquery/docs/reference/reservations/rest/v1/projects.locations.reservations/create)\n* How-to Guides\n * [Introduction to Reservations](https://cloud.google.com/bigquery/docs/reservations-intro)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Bigquery Reservation Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst reservation = new gcp.bigquery.Reservation(\"reservation\", {\n concurrency: 0,\n ignoreIdleSlots: false,\n location: \"asia-northeast1\",\n slotCapacity: 0,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nreservation = gcp.bigquery.Reservation(\"reservation\",\n concurrency=0,\n ignore_idle_slots=False,\n location=\"asia-northeast1\",\n slot_capacity=0)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var reservation = new Gcp.BigQuery.Reservation(\"reservation\", new()\n {\n Concurrency = 0,\n IgnoreIdleSlots = false,\n Location = \"asia-northeast1\",\n SlotCapacity = 0,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewReservation(ctx, \"reservation\", \u0026bigquery.ReservationArgs{\n\t\t\tConcurrency: pulumi.Int(0),\n\t\t\tIgnoreIdleSlots: pulumi.Bool(false),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t\tSlotCapacity: pulumi.Int(0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Reservation;\nimport com.pulumi.gcp.bigquery.ReservationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var reservation = new Reservation(\"reservation\", ReservationArgs.builder() \n .concurrency(0)\n .ignoreIdleSlots(false)\n .location(\"asia-northeast1\")\n .slotCapacity(0)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n reservation:\n type: gcp:bigquery:Reservation\n properties:\n concurrency: 0\n ignoreIdleSlots: false\n location: asia-northeast1\n # Set to 0 for testing purposes\n # // In reality this would be larger than zero\n slotCapacity: 0\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nReservation can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigquery/reservation:Reservation default projects/{{project}}/locations/{{location}}/reservations/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/reservation:Reservation default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/reservation:Reservation default {{location}}/{{name}}\n```\n\n ", + "description": "A reservation is a mechanism used to guarantee BigQuery slots to users.\n\n\nTo get more information about Reservation, see:\n\n* [API documentation](https://cloud.google.com/bigquery/docs/reference/reservations/rest/v1/projects.locations.reservations/create)\n* How-to Guides\n * [Introduction to Reservations](https://cloud.google.com/bigquery/docs/reservations-intro)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Bigquery Reservation Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst reservation = new gcp.bigquery.Reservation(\"reservation\", {\n concurrency: 0,\n ignoreIdleSlots: false,\n location: \"asia-northeast1\",\n slotCapacity: 0,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nreservation = gcp.bigquery.Reservation(\"reservation\",\n concurrency=0,\n ignore_idle_slots=False,\n location=\"asia-northeast1\",\n slot_capacity=0)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var reservation = new Gcp.BigQuery.Reservation(\"reservation\", new()\n {\n Concurrency = 0,\n IgnoreIdleSlots = false,\n Location = \"asia-northeast1\",\n SlotCapacity = 0,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewReservation(ctx, \"reservation\", \u0026bigquery.ReservationArgs{\n\t\t\tConcurrency: pulumi.Int(0),\n\t\t\tIgnoreIdleSlots: pulumi.Bool(false),\n\t\t\tLocation: pulumi.String(\"asia-northeast1\"),\n\t\t\tSlotCapacity: pulumi.Int(0),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigquery.Reservation;\nimport com.pulumi.gcp.bigquery.ReservationArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var reservation = new Reservation(\"reservation\", ReservationArgs.builder() \n .concurrency(0)\n .ignoreIdleSlots(false)\n .location(\"asia-northeast1\")\n .slotCapacity(0)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n reservation:\n type: gcp:bigquery:Reservation\n properties:\n concurrency: 0\n ignoreIdleSlots: false\n location: asia-northeast1\n # Set to 0 for testing purposes\n # // In reality this would be larger than zero\n slotCapacity: 0\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nReservation can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigquery/reservation:Reservation default projects/{{project}}/locations/{{location}}/reservations/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/reservation:Reservation default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/reservation:Reservation default {{location}}/{{name}}\n```\n\n ", "properties": { "concurrency": { "type": "integer", @@ -114680,7 +115785,7 @@ } }, "gcp:bigquery/reservationAssignment:ReservationAssignment": { - "description": "The BigqueryReservation Assignment resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Basic\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.bigquery.Reservation(\"basic\", {\n project: \"my-project-name\",\n location: \"us-central1\",\n slotCapacity: 0,\n ignoreIdleSlots: false,\n});\nconst primary = new gcp.bigquery.ReservationAssignment(\"primary\", {\n assignee: \"projects/my-project-name\",\n jobType: \"PIPELINE\",\n reservation: basic.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.bigquery.Reservation(\"basic\",\n project=\"my-project-name\",\n location=\"us-central1\",\n slot_capacity=0,\n ignore_idle_slots=False)\nprimary = gcp.bigquery.ReservationAssignment(\"primary\",\n assignee=\"projects/my-project-name\",\n job_type=\"PIPELINE\",\n reservation=basic.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.BigQuery.Reservation(\"basic\", new()\n {\n Project = \"my-project-name\",\n Location = \"us-central1\",\n SlotCapacity = 0,\n IgnoreIdleSlots = false,\n });\n\n var primary = new Gcp.BigQuery.ReservationAssignment(\"primary\", new()\n {\n Assignee = \"projects/my-project-name\",\n JobType = \"PIPELINE\",\n Reservation = basic.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tbasic, err := bigquery.NewReservation(ctx, \"basic\", \u0026bigquery.ReservationArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tSlotCapacity: pulumi.Int(0),\n\t\t\tIgnoreIdleSlots: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewReservationAssignment(ctx, \"primary\", \u0026bigquery.ReservationAssignmentArgs{\n\t\t\tAssignee: pulumi.String(\"projects/my-project-name\"),\n\t\t\tJobType: pulumi.String(\"PIPELINE\"),\n\t\t\tReservation: basic.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.bigquery.Reservation;\nimport com.pulumi.gcp.bigquery.ReservationArgs;\nimport com.pulumi.gcp.bigquery.ReservationAssignment;\nimport com.pulumi.gcp.bigquery.ReservationAssignmentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Reservation(\"basic\", ReservationArgs.builder() \n .project(\"my-project-name\")\n .location(\"us-central1\")\n .slotCapacity(0)\n .ignoreIdleSlots(false)\n .build());\n\n var primary = new ReservationAssignment(\"primary\", ReservationAssignmentArgs.builder() \n .assignee(\"projects/my-project-name\")\n .jobType(\"PIPELINE\")\n .reservation(basic.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:bigquery:Reservation\n properties:\n project: my-project-name\n location: us-central1\n slotCapacity: 0\n ignoreIdleSlots: false\n primary:\n type: gcp:bigquery:ReservationAssignment\n properties:\n assignee: projects/my-project-name\n jobType: PIPELINE\n reservation: ${basic.id}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nAssignment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigquery/reservationAssignment:ReservationAssignment default projects/{{project}}/locations/{{location}}/reservations/{{reservation}}/assignments/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/reservationAssignment:ReservationAssignment default {{project}}/{{location}}/{{reservation}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/reservationAssignment:ReservationAssignment default {{location}}/{{reservation}}/{{name}}\n```\n\n ", + "description": "The BigqueryReservation Assignment resource\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nAssignment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigquery/reservationAssignment:ReservationAssignment default projects/{{project}}/locations/{{location}}/reservations/{{reservation}}/assignments/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/reservationAssignment:ReservationAssignment default {{project}}/{{location}}/{{reservation}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/reservationAssignment:ReservationAssignment default {{location}}/{{reservation}}/{{name}}\n```\n\n ", "properties": { "assignee": { "type": "string", @@ -114793,7 +115898,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{{% examples %}}\n## Example Usage\n{{% example %}}\n### Big Query Routine Basic\n\n\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 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/v6/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{{% /example %}}\n{{% example %}}\n### Big Query Routine Json\n\n\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: \"tf_test_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=\"tf_test_routine_id\",\n routine_type=\"SCALAR_FUNCTION\",\n language=\"JAVASCRIPT\",\n definition_body=\"CREATE FUNCTION multiplyInputs return x*y;\",\n arguments=[\n gcp.bigquery.RoutineArgumentArgs(\n name=\"x\",\n data_type=\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n ),\n gcp.bigquery.RoutineArgumentArgs(\n name=\"y\",\n data_type=\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\",\n ),\n ],\n return_type=\"{\\\"typeKind\\\" : \\\"FLOAT64\\\"}\")\n```\n```csharp\nusing System.Collections.Generic;\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 = \"tf_test_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/v6/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(\"tf_test_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(\"tf_test_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: tf_test_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{{% /example %}}\n{{% example %}}\n### Big Query Routine Tvf\n\n\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: \"tf_test_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=\"tf_test_routine_id\",\n routine_type=\"TABLE_VALUED_FUNCTION\",\n language=\"SQL\",\n definition_body=\"SELECT 1 + value AS value\\n\",\n arguments=[gcp.bigquery.RoutineArgumentArgs(\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.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 = \"tf_test_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/v6/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(\"tf_test_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(\"tf_test_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: tf_test_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{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRoutine can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigquery/routine:Routine default projects/{{project}}/datasets/{{dataset_id}}/routines/{{routine_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/routine:Routine default {{project}}/{{dataset_id}}/{{routine_id}}\n```\n\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{{% examples %}}\n## Example Usage\n{{% example %}}\n### Big Query Routine Basic\n\n\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 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/v6/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{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRoutine can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigquery/routine:Routine default projects/{{project}}/datasets/{{dataset_id}}/routines/{{routine_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/routine:Routine default {{project}}/{{dataset_id}}/{{routine_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/routine:Routine default {{dataset_id}}/{{routine_id}}\n```\n\n ", "properties": { "arguments": { "type": "array", @@ -115005,7 +116110,7 @@ } }, "gcp:bigquery/table:Table": { - "description": "Creates a table resource in a dataset for Google BigQuery. For more information see\n[the official documentation](https://cloud.google.com/bigquery/docs/) and\n[API](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables).\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.\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultDataset = new gcp.bigquery.Dataset(\"defaultDataset\", {\n datasetId: \"foo\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"EU\",\n defaultTableExpirationMs: 3600000,\n labels: {\n env: \"default\",\n },\n});\nconst defaultTable = new gcp.bigquery.Table(\"defaultTable\", {\n datasetId: defaultDataset.datasetId,\n tableId: \"bar\",\n timePartitioning: {\n type: \"DAY\",\n },\n labels: {\n env: \"default\",\n },\n schema: `[\n {\n \"name\": \"permalink\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The Permalink\"\n },\n {\n \"name\": \"state\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"State where the head office is located\"\n }\n]\n`,\n});\nconst sheet = new gcp.bigquery.Table(\"sheet\", {\n datasetId: defaultDataset.datasetId,\n tableId: \"sheet\",\n externalDataConfiguration: {\n autodetect: true,\n sourceFormat: \"GOOGLE_SHEETS\",\n googleSheetsOptions: {\n skipLeadingRows: 1,\n },\n sourceUris: [\"https://docs.google.com/spreadsheets/d/123456789012345\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_dataset = gcp.bigquery.Dataset(\"defaultDataset\",\n dataset_id=\"foo\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"EU\",\n default_table_expiration_ms=3600000,\n labels={\n \"env\": \"default\",\n })\ndefault_table = gcp.bigquery.Table(\"defaultTable\",\n dataset_id=default_dataset.dataset_id,\n table_id=\"bar\",\n time_partitioning=gcp.bigquery.TableTimePartitioningArgs(\n type=\"DAY\",\n ),\n labels={\n \"env\": \"default\",\n },\n schema=\"\"\"[\n {\n \"name\": \"permalink\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The Permalink\"\n },\n {\n \"name\": \"state\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"State where the head office is located\"\n }\n]\n\"\"\")\nsheet = gcp.bigquery.Table(\"sheet\",\n dataset_id=default_dataset.dataset_id,\n table_id=\"sheet\",\n external_data_configuration=gcp.bigquery.TableExternalDataConfigurationArgs(\n autodetect=True,\n source_format=\"GOOGLE_SHEETS\",\n google_sheets_options=gcp.bigquery.TableExternalDataConfigurationGoogleSheetsOptionsArgs(\n skip_leading_rows=1,\n ),\n source_uris=[\"https://docs.google.com/spreadsheets/d/123456789012345\"],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultDataset = new Gcp.BigQuery.Dataset(\"defaultDataset\", new()\n {\n DatasetId = \"foo\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"EU\",\n DefaultTableExpirationMs = 3600000,\n Labels = \n {\n { \"env\", \"default\" },\n },\n });\n\n var defaultTable = new Gcp.BigQuery.Table(\"defaultTable\", new()\n {\n DatasetId = defaultDataset.DatasetId,\n TableId = \"bar\",\n TimePartitioning = new Gcp.BigQuery.Inputs.TableTimePartitioningArgs\n {\n Type = \"DAY\",\n },\n Labels = \n {\n { \"env\", \"default\" },\n },\n Schema = @\"[\n {\n \"\"name\"\": \"\"permalink\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The Permalink\"\"\n },\n {\n \"\"name\"\": \"\"state\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"State where the head office is located\"\"\n }\n]\n\",\n });\n\n var sheet = new Gcp.BigQuery.Table(\"sheet\", new()\n {\n DatasetId = defaultDataset.DatasetId,\n TableId = \"sheet\",\n ExternalDataConfiguration = new Gcp.BigQuery.Inputs.TableExternalDataConfigurationArgs\n {\n Autodetect = true,\n SourceFormat = \"GOOGLE_SHEETS\",\n GoogleSheetsOptions = new Gcp.BigQuery.Inputs.TableExternalDataConfigurationGoogleSheetsOptionsArgs\n {\n SkipLeadingRows = 1,\n },\n SourceUris = new[]\n {\n \"https://docs.google.com/spreadsheets/d/123456789012345\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdefaultDataset, err := bigquery.NewDataset(ctx, \"defaultDataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"foo\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"EU\"),\n\t\t\tDefaultTableExpirationMs: pulumi.Int(3600000),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"default\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"defaultTable\", \u0026bigquery.TableArgs{\n\t\t\tDatasetId: defaultDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"bar\"),\n\t\t\tTimePartitioning: \u0026bigquery.TableTimePartitioningArgs{\n\t\t\t\tType: pulumi.String(\"DAY\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"default\"),\n\t\t\t},\n\t\t\tSchema: pulumi.String(fmt.Sprintf(`[\n {\n \"name\": \"permalink\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The Permalink\"\n },\n {\n \"name\": \"state\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"State where the head office is located\"\n }\n]\n`)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"sheet\", \u0026bigquery.TableArgs{\n\t\t\tDatasetId: defaultDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"sheet\"),\n\t\t\tExternalDataConfiguration: \u0026bigquery.TableExternalDataConfigurationArgs{\n\t\t\t\tAutodetect: pulumi.Bool(true),\n\t\t\t\tSourceFormat: pulumi.String(\"GOOGLE_SHEETS\"),\n\t\t\t\tGoogleSheetsOptions: \u0026bigquery.TableExternalDataConfigurationGoogleSheetsOptionsArgs{\n\t\t\t\t\tSkipLeadingRows: pulumi.Int(1),\n\t\t\t\t},\n\t\t\t\tSourceUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://docs.google.com/spreadsheets/d/123456789012345\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.bigquery.inputs.TableTimePartitioningArgs;\nimport com.pulumi.gcp.bigquery.inputs.TableExternalDataConfigurationArgs;\nimport com.pulumi.gcp.bigquery.inputs.TableExternalDataConfigurationGoogleSheetsOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultDataset = new Dataset(\"defaultDataset\", DatasetArgs.builder() \n .datasetId(\"foo\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"EU\")\n .defaultTableExpirationMs(3600000)\n .labels(Map.of(\"env\", \"default\"))\n .build());\n\n var defaultTable = new Table(\"defaultTable\", TableArgs.builder() \n .datasetId(defaultDataset.datasetId())\n .tableId(\"bar\")\n .timePartitioning(TableTimePartitioningArgs.builder()\n .type(\"DAY\")\n .build())\n .labels(Map.of(\"env\", \"default\"))\n .schema(\"\"\"\n[\n {\n \"name\": \"permalink\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The Permalink\"\n },\n {\n \"name\": \"state\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"State where the head office is located\"\n }\n]\n \"\"\")\n .build());\n\n var sheet = new Table(\"sheet\", TableArgs.builder() \n .datasetId(defaultDataset.datasetId())\n .tableId(\"sheet\")\n .externalDataConfiguration(TableExternalDataConfigurationArgs.builder()\n .autodetect(true)\n .sourceFormat(\"GOOGLE_SHEETS\")\n .googleSheetsOptions(TableExternalDataConfigurationGoogleSheetsOptionsArgs.builder()\n .skipLeadingRows(1)\n .build())\n .sourceUris(\"https://docs.google.com/spreadsheets/d/123456789012345\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultDataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: foo\n friendlyName: test\n description: This is a test description\n location: EU\n defaultTableExpirationMs: 3.6e+06\n labels:\n env: default\n defaultTable:\n type: gcp:bigquery:Table\n properties:\n datasetId: ${defaultDataset.datasetId}\n tableId: bar\n timePartitioning:\n type: DAY\n labels:\n env: default\n schema: |\n [\n {\n \"name\": \"permalink\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The Permalink\"\n },\n {\n \"name\": \"state\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"State where the head office is located\"\n }\n ]\n sheet:\n type: gcp:bigquery:Table\n properties:\n datasetId: ${defaultDataset.datasetId}\n tableId: sheet\n externalDataConfiguration:\n autodetect: true\n sourceFormat: GOOGLE_SHEETS\n googleSheetsOptions:\n skipLeadingRows: 1\n sourceUris:\n - https://docs.google.com/spreadsheets/d/123456789012345\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBigQuery tables imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigquery/table:Table default projects/{{project}}/datasets/{{dataset_id}}/tables/{{table_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/table:Table default {{project}}/{{dataset_id}}/{{table_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/table:Table default {{dataset_id}}/{{table_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultDataset = new gcp.bigquery.Dataset(\"defaultDataset\", {\n datasetId: \"foo\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"EU\",\n defaultTableExpirationMs: 3600000,\n labels: {\n env: \"default\",\n },\n});\nconst defaultTable = new gcp.bigquery.Table(\"defaultTable\", {\n datasetId: defaultDataset.datasetId,\n tableId: \"bar\",\n timePartitioning: {\n type: \"DAY\",\n },\n labels: {\n env: \"default\",\n },\n schema: `[\n {\n \"name\": \"permalink\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The Permalink\"\n },\n {\n \"name\": \"state\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"State where the head office is located\"\n }\n]\n`,\n});\nconst sheet = new gcp.bigquery.Table(\"sheet\", {\n datasetId: defaultDataset.datasetId,\n tableId: \"sheet\",\n externalDataConfiguration: {\n autodetect: true,\n sourceFormat: \"GOOGLE_SHEETS\",\n googleSheetsOptions: {\n skipLeadingRows: 1,\n },\n sourceUris: [\"https://docs.google.com/spreadsheets/d/123456789012345\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_dataset = gcp.bigquery.Dataset(\"defaultDataset\",\n dataset_id=\"foo\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"EU\",\n default_table_expiration_ms=3600000,\n labels={\n \"env\": \"default\",\n })\ndefault_table = gcp.bigquery.Table(\"defaultTable\",\n dataset_id=default_dataset.dataset_id,\n table_id=\"bar\",\n time_partitioning=gcp.bigquery.TableTimePartitioningArgs(\n type=\"DAY\",\n ),\n labels={\n \"env\": \"default\",\n },\n schema=\"\"\"[\n {\n \"name\": \"permalink\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The Permalink\"\n },\n {\n \"name\": \"state\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"State where the head office is located\"\n }\n]\n\"\"\")\nsheet = gcp.bigquery.Table(\"sheet\",\n dataset_id=default_dataset.dataset_id,\n table_id=\"sheet\",\n external_data_configuration=gcp.bigquery.TableExternalDataConfigurationArgs(\n autodetect=True,\n source_format=\"GOOGLE_SHEETS\",\n google_sheets_options=gcp.bigquery.TableExternalDataConfigurationGoogleSheetsOptionsArgs(\n skip_leading_rows=1,\n ),\n source_uris=[\"https://docs.google.com/spreadsheets/d/123456789012345\"],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultDataset = new Gcp.BigQuery.Dataset(\"defaultDataset\", new()\n {\n DatasetId = \"foo\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"EU\",\n DefaultTableExpirationMs = 3600000,\n Labels = \n {\n { \"env\", \"default\" },\n },\n });\n\n var defaultTable = new Gcp.BigQuery.Table(\"defaultTable\", new()\n {\n DatasetId = defaultDataset.DatasetId,\n TableId = \"bar\",\n TimePartitioning = new Gcp.BigQuery.Inputs.TableTimePartitioningArgs\n {\n Type = \"DAY\",\n },\n Labels = \n {\n { \"env\", \"default\" },\n },\n Schema = @\"[\n {\n \"\"name\"\": \"\"permalink\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"The Permalink\"\"\n },\n {\n \"\"name\"\": \"\"state\"\",\n \"\"type\"\": \"\"STRING\"\",\n \"\"mode\"\": \"\"NULLABLE\"\",\n \"\"description\"\": \"\"State where the head office is located\"\"\n }\n]\n\",\n });\n\n var sheet = new Gcp.BigQuery.Table(\"sheet\", new()\n {\n DatasetId = defaultDataset.DatasetId,\n TableId = \"sheet\",\n ExternalDataConfiguration = new Gcp.BigQuery.Inputs.TableExternalDataConfigurationArgs\n {\n Autodetect = true,\n SourceFormat = \"GOOGLE_SHEETS\",\n GoogleSheetsOptions = new Gcp.BigQuery.Inputs.TableExternalDataConfigurationGoogleSheetsOptionsArgs\n {\n SkipLeadingRows = 1,\n },\n SourceUris = new[]\n {\n \"https://docs.google.com/spreadsheets/d/123456789012345\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdefaultDataset, err := bigquery.NewDataset(ctx, \"defaultDataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"foo\"),\n\t\t\tFriendlyName: pulumi.String(\"test\"),\n\t\t\tDescription: pulumi.String(\"This is a test description\"),\n\t\t\tLocation: pulumi.String(\"EU\"),\n\t\t\tDefaultTableExpirationMs: pulumi.Int(3600000),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"default\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"defaultTable\", \u0026bigquery.TableArgs{\n\t\t\tDatasetId: defaultDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"bar\"),\n\t\t\tTimePartitioning: \u0026bigquery.TableTimePartitioningArgs{\n\t\t\t\tType: pulumi.String(\"DAY\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"env\": pulumi.String(\"default\"),\n\t\t\t},\n\t\t\tSchema: pulumi.String(fmt.Sprintf(`[\n {\n \"name\": \"permalink\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The Permalink\"\n },\n {\n \"name\": \"state\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"State where the head office is located\"\n }\n]\n`)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = bigquery.NewTable(ctx, \"sheet\", \u0026bigquery.TableArgs{\n\t\t\tDatasetId: defaultDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"sheet\"),\n\t\t\tExternalDataConfiguration: \u0026bigquery.TableExternalDataConfigurationArgs{\n\t\t\t\tAutodetect: pulumi.Bool(true),\n\t\t\t\tSourceFormat: pulumi.String(\"GOOGLE_SHEETS\"),\n\t\t\t\tGoogleSheetsOptions: \u0026bigquery.TableExternalDataConfigurationGoogleSheetsOptionsArgs{\n\t\t\t\t\tSkipLeadingRows: pulumi.Int(1),\n\t\t\t\t},\n\t\t\t\tSourceUris: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://docs.google.com/spreadsheets/d/123456789012345\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.Table;\nimport com.pulumi.gcp.bigquery.TableArgs;\nimport com.pulumi.gcp.bigquery.inputs.TableTimePartitioningArgs;\nimport com.pulumi.gcp.bigquery.inputs.TableExternalDataConfigurationArgs;\nimport com.pulumi.gcp.bigquery.inputs.TableExternalDataConfigurationGoogleSheetsOptionsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultDataset = new Dataset(\"defaultDataset\", DatasetArgs.builder() \n .datasetId(\"foo\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"EU\")\n .defaultTableExpirationMs(3600000)\n .labels(Map.of(\"env\", \"default\"))\n .build());\n\n var defaultTable = new Table(\"defaultTable\", TableArgs.builder() \n .datasetId(defaultDataset.datasetId())\n .tableId(\"bar\")\n .timePartitioning(TableTimePartitioningArgs.builder()\n .type(\"DAY\")\n .build())\n .labels(Map.of(\"env\", \"default\"))\n .schema(\"\"\"\n[\n {\n \"name\": \"permalink\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The Permalink\"\n },\n {\n \"name\": \"state\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"State where the head office is located\"\n }\n]\n \"\"\")\n .build());\n\n var sheet = new Table(\"sheet\", TableArgs.builder() \n .datasetId(defaultDataset.datasetId())\n .tableId(\"sheet\")\n .externalDataConfiguration(TableExternalDataConfigurationArgs.builder()\n .autodetect(true)\n .sourceFormat(\"GOOGLE_SHEETS\")\n .googleSheetsOptions(TableExternalDataConfigurationGoogleSheetsOptionsArgs.builder()\n .skipLeadingRows(1)\n .build())\n .sourceUris(\"https://docs.google.com/spreadsheets/d/123456789012345\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultDataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: foo\n friendlyName: test\n description: This is a test description\n location: EU\n defaultTableExpirationMs: 3.6e+06\n labels:\n env: default\n defaultTable:\n type: gcp:bigquery:Table\n properties:\n datasetId: ${defaultDataset.datasetId}\n tableId: bar\n timePartitioning:\n type: DAY\n labels:\n env: default\n schema: |\n [\n {\n \"name\": \"permalink\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"The Permalink\"\n },\n {\n \"name\": \"state\",\n \"type\": \"STRING\",\n \"mode\": \"NULLABLE\",\n \"description\": \"State where the head office is located\"\n }\n ]\n sheet:\n type: gcp:bigquery:Table\n properties:\n datasetId: ${defaultDataset.datasetId}\n tableId: sheet\n externalDataConfiguration:\n autodetect: true\n sourceFormat: GOOGLE_SHEETS\n googleSheetsOptions:\n skipLeadingRows: 1\n sourceUris:\n - https://docs.google.com/spreadsheets/d/123456789012345\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBigQuery tables imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigquery/table:Table default projects/{{project}}/datasets/{{dataset_id}}/tables/{{table_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/table:Table default {{project}}/{{dataset_id}}/{{table_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigquery/table:Table default {{dataset_id}}/{{table_id}}\n```\n\n ", "properties": { "clusterings": { "type": "array", @@ -115024,7 +116129,7 @@ }, "deletionProtection": { "type": "boolean", - "description": "Whether or not to allow the provider to destroy the instance. Unless this field is set to false\nin state, a `=destroy` or `=update` that would delete the instance will fail.\n" + "description": "Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a\nterraform destroy or terraform apply that would delete the instance will fail.\n" }, "description": { "type": "string", @@ -115145,7 +116250,7 @@ }, "deletionProtection": { "type": "boolean", - "description": "Whether or not to allow the provider to destroy the instance. Unless this field is set to false\nin state, a `=destroy` or `=update` that would delete the instance will fail.\n" + "description": "Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a\nterraform destroy or terraform apply that would delete the instance will fail.\n" }, "description": { "type": "string", @@ -115231,7 +116336,7 @@ }, "deletionProtection": { "type": "boolean", - "description": "Whether or not to allow the provider to destroy the instance. Unless this field is set to false\nin state, a `=destroy` or `=update` that would delete the instance will fail.\n" + "description": "Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a\nterraform destroy or terraform apply that would delete the instance will fail.\n" }, "description": { "type": "string", @@ -116952,7 +118057,7 @@ } }, "gcp:bigtable/instance:Instance": { - "description": "## +---\n\nsubcategory: \"Cloud Bigtable\"\npage_title: \"Google: gcp.bigtable.Instance\"\ndescription: |-\n Creates a Google Bigtable instance.\n---\n\n# gcp.bigtable.Instance\n\nCreates a Google Bigtable instance. For more information see:\n\n* [API documentation](https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/bigtable/docs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Simple Instance\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst production_instance = new gcp.bigtable.Instance(\"production-instance\", {\n clusters: [{\n clusterId: \"tf-instance-cluster\",\n numNodes: 1,\n storageType: \"HDD\",\n }],\n labels: {\n \"my-label\": \"prod-label\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproduction_instance = gcp.bigtable.Instance(\"production-instance\",\n clusters=[gcp.bigtable.InstanceClusterArgs(\n cluster_id=\"tf-instance-cluster\",\n num_nodes=1,\n storage_type=\"HDD\",\n )],\n labels={\n \"my-label\": \"prod-label\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var production_instance = new Gcp.BigTable.Instance(\"production-instance\", new()\n {\n Clusters = new[]\n {\n new Gcp.BigTable.Inputs.InstanceClusterArgs\n {\n ClusterId = \"tf-instance-cluster\",\n NumNodes = 1,\n StorageType = \"HDD\",\n },\n },\n Labels = \n {\n { \"my-label\", \"prod-label\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigtable\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigtable.NewInstance(ctx, \"production-instance\", \u0026bigtable.InstanceArgs{\n\t\t\tClusters: bigtable.InstanceClusterArray{\n\t\t\t\t\u0026bigtable.InstanceClusterArgs{\n\t\t\t\t\tClusterId: pulumi.String(\"tf-instance-cluster\"),\n\t\t\t\t\tNumNodes: pulumi.Int(1),\n\t\t\t\t\tStorageType: pulumi.String(\"HDD\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my-label\": pulumi.String(\"prod-label\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigtable.Instance;\nimport com.pulumi.gcp.bigtable.InstanceArgs;\nimport com.pulumi.gcp.bigtable.inputs.InstanceClusterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var production_instance = new Instance(\"production-instance\", InstanceArgs.builder() \n .clusters(InstanceClusterArgs.builder()\n .clusterId(\"tf-instance-cluster\")\n .numNodes(1)\n .storageType(\"HDD\")\n .build())\n .labels(Map.of(\"my-label\", \"prod-label\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n production-instance:\n type: gcp:bigtable:Instance\n properties:\n clusters:\n - clusterId: tf-instance-cluster\n numNodes: 1\n storageType: HDD\n labels:\n my-label: prod-label\n```\n{{% /example %}}\n{{% example %}}\n### Replicated Instance\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst production_instance = new gcp.bigtable.Instance(\"production-instance\", {\n clusters: [\n {\n clusterId: \"tf-instance-cluster1\",\n numNodes: 1,\n storageType: \"HDD\",\n zone: \"us-central1-c\",\n },\n {\n autoscalingConfig: {\n cpuTarget: 50,\n maxNodes: 3,\n minNodes: 1,\n },\n clusterId: \"tf-instance-cluster2\",\n storageType: \"HDD\",\n zone: \"us-central1-b\",\n },\n ],\n labels: {\n \"my-label\": \"prod-label\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproduction_instance = gcp.bigtable.Instance(\"production-instance\",\n clusters=[\n gcp.bigtable.InstanceClusterArgs(\n cluster_id=\"tf-instance-cluster1\",\n num_nodes=1,\n storage_type=\"HDD\",\n zone=\"us-central1-c\",\n ),\n gcp.bigtable.InstanceClusterArgs(\n autoscaling_config=gcp.bigtable.InstanceClusterAutoscalingConfigArgs(\n cpu_target=50,\n max_nodes=3,\n min_nodes=1,\n ),\n cluster_id=\"tf-instance-cluster2\",\n storage_type=\"HDD\",\n zone=\"us-central1-b\",\n ),\n ],\n labels={\n \"my-label\": \"prod-label\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var production_instance = new Gcp.BigTable.Instance(\"production-instance\", new()\n {\n Clusters = new[]\n {\n new Gcp.BigTable.Inputs.InstanceClusterArgs\n {\n ClusterId = \"tf-instance-cluster1\",\n NumNodes = 1,\n StorageType = \"HDD\",\n Zone = \"us-central1-c\",\n },\n new Gcp.BigTable.Inputs.InstanceClusterArgs\n {\n AutoscalingConfig = new Gcp.BigTable.Inputs.InstanceClusterAutoscalingConfigArgs\n {\n CpuTarget = 50,\n MaxNodes = 3,\n MinNodes = 1,\n },\n ClusterId = \"tf-instance-cluster2\",\n StorageType = \"HDD\",\n Zone = \"us-central1-b\",\n },\n },\n Labels = \n {\n { \"my-label\", \"prod-label\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigtable\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigtable.NewInstance(ctx, \"production-instance\", \u0026bigtable.InstanceArgs{\n\t\t\tClusters: bigtable.InstanceClusterArray{\n\t\t\t\t\u0026bigtable.InstanceClusterArgs{\n\t\t\t\t\tClusterId: pulumi.String(\"tf-instance-cluster1\"),\n\t\t\t\t\tNumNodes: pulumi.Int(1),\n\t\t\t\t\tStorageType: pulumi.String(\"HDD\"),\n\t\t\t\t\tZone: pulumi.String(\"us-central1-c\"),\n\t\t\t\t},\n\t\t\t\t\u0026bigtable.InstanceClusterArgs{\n\t\t\t\t\tAutoscalingConfig: \u0026bigtable.InstanceClusterAutoscalingConfigArgs{\n\t\t\t\t\t\tCpuTarget: pulumi.Int(50),\n\t\t\t\t\t\tMaxNodes: pulumi.Int(3),\n\t\t\t\t\t\tMinNodes: pulumi.Int(1),\n\t\t\t\t\t},\n\t\t\t\t\tClusterId: pulumi.String(\"tf-instance-cluster2\"),\n\t\t\t\t\tStorageType: pulumi.String(\"HDD\"),\n\t\t\t\t\tZone: pulumi.String(\"us-central1-b\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my-label\": pulumi.String(\"prod-label\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigtable.Instance;\nimport com.pulumi.gcp.bigtable.InstanceArgs;\nimport com.pulumi.gcp.bigtable.inputs.InstanceClusterArgs;\nimport com.pulumi.gcp.bigtable.inputs.InstanceClusterAutoscalingConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var production_instance = new Instance(\"production-instance\", InstanceArgs.builder() \n .clusters( \n InstanceClusterArgs.builder()\n .clusterId(\"tf-instance-cluster1\")\n .numNodes(1)\n .storageType(\"HDD\")\n .zone(\"us-central1-c\")\n .build(),\n InstanceClusterArgs.builder()\n .autoscalingConfig(InstanceClusterAutoscalingConfigArgs.builder()\n .cpuTarget(50)\n .maxNodes(3)\n .minNodes(1)\n .build())\n .clusterId(\"tf-instance-cluster2\")\n .storageType(\"HDD\")\n .zone(\"us-central1-b\")\n .build())\n .labels(Map.of(\"my-label\", \"prod-label\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n production-instance:\n type: gcp:bigtable:Instance\n properties:\n clusters:\n - clusterId: tf-instance-cluster1\n numNodes: 1\n storageType: HDD\n zone: us-central1-c\n - autoscalingConfig:\n cpuTarget: 50\n maxNodes: 3\n minNodes: 1\n clusterId: tf-instance-cluster2\n storageType: HDD\n zone: us-central1-b\n labels:\n my-label: prod-label\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBigtable Instances can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigtable/instance:Instance default projects/{{project}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigtable/instance:Instance default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigtable/instance:Instance default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Simple Instance\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst production_instance = new gcp.bigtable.Instance(\"production-instance\", {\n clusters: [{\n clusterId: \"tf-instance-cluster\",\n numNodes: 1,\n storageType: \"HDD\",\n }],\n labels: {\n \"my-label\": \"prod-label\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproduction_instance = gcp.bigtable.Instance(\"production-instance\",\n clusters=[gcp.bigtable.InstanceClusterArgs(\n cluster_id=\"tf-instance-cluster\",\n num_nodes=1,\n storage_type=\"HDD\",\n )],\n labels={\n \"my-label\": \"prod-label\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var production_instance = new Gcp.BigTable.Instance(\"production-instance\", new()\n {\n Clusters = new[]\n {\n new Gcp.BigTable.Inputs.InstanceClusterArgs\n {\n ClusterId = \"tf-instance-cluster\",\n NumNodes = 1,\n StorageType = \"HDD\",\n },\n },\n Labels = \n {\n { \"my-label\", \"prod-label\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigtable\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigtable.NewInstance(ctx, \"production-instance\", \u0026bigtable.InstanceArgs{\n\t\t\tClusters: bigtable.InstanceClusterArray{\n\t\t\t\t\u0026bigtable.InstanceClusterArgs{\n\t\t\t\t\tClusterId: pulumi.String(\"tf-instance-cluster\"),\n\t\t\t\t\tNumNodes: pulumi.Int(1),\n\t\t\t\t\tStorageType: pulumi.String(\"HDD\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my-label\": pulumi.String(\"prod-label\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigtable.Instance;\nimport com.pulumi.gcp.bigtable.InstanceArgs;\nimport com.pulumi.gcp.bigtable.inputs.InstanceClusterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var production_instance = new Instance(\"production-instance\", InstanceArgs.builder() \n .clusters(InstanceClusterArgs.builder()\n .clusterId(\"tf-instance-cluster\")\n .numNodes(1)\n .storageType(\"HDD\")\n .build())\n .labels(Map.of(\"my-label\", \"prod-label\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n production-instance:\n type: gcp:bigtable:Instance\n properties:\n clusters:\n - clusterId: tf-instance-cluster\n numNodes: 1\n storageType: HDD\n labels:\n my-label: prod-label\n```\n{{% /example %}}\n{{% example %}}\n### Replicated Instance\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst production_instance = new gcp.bigtable.Instance(\"production-instance\", {\n clusters: [\n {\n clusterId: \"tf-instance-cluster1\",\n numNodes: 1,\n storageType: \"HDD\",\n zone: \"us-central1-c\",\n },\n {\n autoscalingConfig: {\n cpuTarget: 50,\n maxNodes: 3,\n minNodes: 1,\n },\n clusterId: \"tf-instance-cluster2\",\n storageType: \"HDD\",\n zone: \"us-central1-b\",\n },\n ],\n labels: {\n \"my-label\": \"prod-label\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproduction_instance = gcp.bigtable.Instance(\"production-instance\",\n clusters=[\n gcp.bigtable.InstanceClusterArgs(\n cluster_id=\"tf-instance-cluster1\",\n num_nodes=1,\n storage_type=\"HDD\",\n zone=\"us-central1-c\",\n ),\n gcp.bigtable.InstanceClusterArgs(\n autoscaling_config=gcp.bigtable.InstanceClusterAutoscalingConfigArgs(\n cpu_target=50,\n max_nodes=3,\n min_nodes=1,\n ),\n cluster_id=\"tf-instance-cluster2\",\n storage_type=\"HDD\",\n zone=\"us-central1-b\",\n ),\n ],\n labels={\n \"my-label\": \"prod-label\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var production_instance = new Gcp.BigTable.Instance(\"production-instance\", new()\n {\n Clusters = new[]\n {\n new Gcp.BigTable.Inputs.InstanceClusterArgs\n {\n ClusterId = \"tf-instance-cluster1\",\n NumNodes = 1,\n StorageType = \"HDD\",\n Zone = \"us-central1-c\",\n },\n new Gcp.BigTable.Inputs.InstanceClusterArgs\n {\n AutoscalingConfig = new Gcp.BigTable.Inputs.InstanceClusterAutoscalingConfigArgs\n {\n CpuTarget = 50,\n MaxNodes = 3,\n MinNodes = 1,\n },\n ClusterId = \"tf-instance-cluster2\",\n StorageType = \"HDD\",\n Zone = \"us-central1-b\",\n },\n },\n Labels = \n {\n { \"my-label\", \"prod-label\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigtable\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := bigtable.NewInstance(ctx, \"production-instance\", \u0026bigtable.InstanceArgs{\n\t\t\tClusters: bigtable.InstanceClusterArray{\n\t\t\t\t\u0026bigtable.InstanceClusterArgs{\n\t\t\t\t\tClusterId: pulumi.String(\"tf-instance-cluster1\"),\n\t\t\t\t\tNumNodes: pulumi.Int(1),\n\t\t\t\t\tStorageType: pulumi.String(\"HDD\"),\n\t\t\t\t\tZone: pulumi.String(\"us-central1-c\"),\n\t\t\t\t},\n\t\t\t\t\u0026bigtable.InstanceClusterArgs{\n\t\t\t\t\tAutoscalingConfig: \u0026bigtable.InstanceClusterAutoscalingConfigArgs{\n\t\t\t\t\t\tCpuTarget: pulumi.Int(50),\n\t\t\t\t\t\tMaxNodes: pulumi.Int(3),\n\t\t\t\t\t\tMinNodes: pulumi.Int(1),\n\t\t\t\t\t},\n\t\t\t\t\tClusterId: pulumi.String(\"tf-instance-cluster2\"),\n\t\t\t\t\tStorageType: pulumi.String(\"HDD\"),\n\t\t\t\t\tZone: pulumi.String(\"us-central1-b\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my-label\": pulumi.String(\"prod-label\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigtable.Instance;\nimport com.pulumi.gcp.bigtable.InstanceArgs;\nimport com.pulumi.gcp.bigtable.inputs.InstanceClusterArgs;\nimport com.pulumi.gcp.bigtable.inputs.InstanceClusterAutoscalingConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var production_instance = new Instance(\"production-instance\", InstanceArgs.builder() \n .clusters( \n InstanceClusterArgs.builder()\n .clusterId(\"tf-instance-cluster1\")\n .numNodes(1)\n .storageType(\"HDD\")\n .zone(\"us-central1-c\")\n .build(),\n InstanceClusterArgs.builder()\n .autoscalingConfig(InstanceClusterAutoscalingConfigArgs.builder()\n .cpuTarget(50)\n .maxNodes(3)\n .minNodes(1)\n .build())\n .clusterId(\"tf-instance-cluster2\")\n .storageType(\"HDD\")\n .zone(\"us-central1-b\")\n .build())\n .labels(Map.of(\"my-label\", \"prod-label\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n production-instance:\n type: gcp:bigtable:Instance\n properties:\n clusters:\n - clusterId: tf-instance-cluster1\n numNodes: 1\n storageType: HDD\n zone: us-central1-c\n - autoscalingConfig:\n cpuTarget: 50\n maxNodes: 3\n minNodes: 1\n clusterId: tf-instance-cluster2\n storageType: HDD\n zone: us-central1-b\n labels:\n my-label: prod-label\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBigtable Instances can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigtable/instance:Instance default projects/{{project}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigtable/instance:Instance default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigtable/instance:Instance default {{name}}\n```\n\n ", "properties": { "clusters": { "type": "array", @@ -116963,7 +118068,7 @@ }, "deletionProtection": { "type": "boolean", - "description": "Whether or not to allow this provider to destroy the instance. Unless this field is set to false\nin the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail.\n" + "description": "Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a\nterraform destroy or terraform apply that would delete the instance will fail.\n" }, "displayName": { "type": "string", @@ -117006,7 +118111,7 @@ }, "deletionProtection": { "type": "boolean", - "description": "Whether or not to allow this provider to destroy the instance. Unless this field is set to false\nin the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail.\n" + "description": "Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a\nterraform destroy or terraform apply that would delete the instance will fail.\n" }, "displayName": { "type": "string", @@ -117047,7 +118152,7 @@ }, "deletionProtection": { "type": "boolean", - "description": "Whether or not to allow this provider to destroy the instance. Unless this field is set to false\nin the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail.\n" + "description": "Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a\nterraform destroy or terraform apply that would delete the instance will fail.\n" }, "displayName": { "type": "string", @@ -117100,8 +118205,7 @@ } }, "project": { - "type": "string", - "description": "The project in which the instance belongs. If it\nis not provided, a default will be supplied.\n" + "type": "string" }, "role": { "type": "string", @@ -117133,7 +118237,6 @@ }, "project": { "type": "string", - "description": "The project in which the instance belongs. If it\nis not provided, a default will be supplied.\n", "willReplaceOnChanges": true }, "role": { @@ -117171,7 +118274,6 @@ }, "project": { "type": "string", - "description": "The project in which the instance belongs. If it\nis not provided, a default will be supplied.\n", "willReplaceOnChanges": true }, "role": { @@ -117201,8 +118303,7 @@ "type": "string" }, "project": { - "type": "string", - "description": "The project in which the instance belongs. If it\nis not provided, a default will be supplied.\n" + "type": "string" }, "role": { "type": "string", @@ -117232,7 +118333,6 @@ }, "project": { "type": "string", - "description": "The project in which the instance belongs. If it\nis not provided, a default will be supplied.\n", "willReplaceOnChanges": true }, "role": { @@ -117268,7 +118368,6 @@ }, "project": { "type": "string", - "description": "The project in which the instance belongs. If it\nis not provided, a default will be supplied.\n", "willReplaceOnChanges": true }, "role": { @@ -117296,8 +118395,7 @@ "description": "The policy data generated by a `gcp.organizations.getIAMPolicy` data source.\n" }, "project": { - "type": "string", - "description": "The project in which the instance belongs. If it\nis not provided, a default will be supplied.\n" + "type": "string" } }, "required": [ @@ -117318,7 +118416,6 @@ }, "project": { "type": "string", - "description": "The project in which the instance belongs. If it\nis not provided, a default will be supplied.\n", "willReplaceOnChanges": true } }, @@ -117344,7 +118441,6 @@ }, "project": { "type": "string", - "description": "The project in which the instance belongs. If it\nis not provided, a default will be supplied.\n", "willReplaceOnChanges": true } }, @@ -117352,7 +118448,7 @@ } }, "gcp:bigtable/table:Table": { - "description": "Creates a Google Cloud Bigtable table inside an instance. For more information see\n[the official documentation](https://cloud.google.com/bigtable/) and\n[API](https://cloud.google.com/bigtable/docs/go/reference).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.bigtable.Instance(\"instance\", {clusters: [{\n clusterId: \"tf-instance-cluster\",\n zone: \"us-central1-b\",\n numNodes: 3,\n storageType: \"HDD\",\n}]});\nconst table = new gcp.bigtable.Table(\"table\", {\n instanceName: instance.name,\n splitKeys: [\n \"a\",\n \"b\",\n \"c\",\n ],\n columnFamilies: [\n {\n family: \"family-first\",\n },\n {\n family: \"family-second\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.bigtable.Instance(\"instance\", clusters=[gcp.bigtable.InstanceClusterArgs(\n cluster_id=\"tf-instance-cluster\",\n zone=\"us-central1-b\",\n num_nodes=3,\n storage_type=\"HDD\",\n)])\ntable = gcp.bigtable.Table(\"table\",\n instance_name=instance.name,\n split_keys=[\n \"a\",\n \"b\",\n \"c\",\n ],\n column_families=[\n gcp.bigtable.TableColumnFamilyArgs(\n family=\"family-first\",\n ),\n gcp.bigtable.TableColumnFamilyArgs(\n family=\"family-second\",\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.BigTable.Instance(\"instance\", new()\n {\n Clusters = new[]\n {\n new Gcp.BigTable.Inputs.InstanceClusterArgs\n {\n ClusterId = \"tf-instance-cluster\",\n Zone = \"us-central1-b\",\n NumNodes = 3,\n StorageType = \"HDD\",\n },\n },\n });\n\n var table = new Gcp.BigTable.Table(\"table\", new()\n {\n InstanceName = instance.Name,\n SplitKeys = new[]\n {\n \"a\",\n \"b\",\n \"c\",\n },\n ColumnFamilies = new[]\n {\n new Gcp.BigTable.Inputs.TableColumnFamilyArgs\n {\n Family = \"family-first\",\n },\n new Gcp.BigTable.Inputs.TableColumnFamilyArgs\n {\n Family = \"family-second\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigtable\"\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 := bigtable.NewInstance(ctx, \"instance\", \u0026bigtable.InstanceArgs{\n\t\t\tClusters: bigtable.InstanceClusterArray{\n\t\t\t\t\u0026bigtable.InstanceClusterArgs{\n\t\t\t\t\tClusterId: pulumi.String(\"tf-instance-cluster\"),\n\t\t\t\t\tZone: pulumi.String(\"us-central1-b\"),\n\t\t\t\t\tNumNodes: pulumi.Int(3),\n\t\t\t\t\tStorageType: pulumi.String(\"HDD\"),\n\t\t\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 = bigtable.NewTable(ctx, \"table\", \u0026bigtable.TableArgs{\n\t\t\tInstanceName: instance.Name,\n\t\t\tSplitKeys: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"a\"),\n\t\t\t\tpulumi.String(\"b\"),\n\t\t\t\tpulumi.String(\"c\"),\n\t\t\t},\n\t\t\tColumnFamilies: bigtable.TableColumnFamilyArray{\n\t\t\t\t\u0026bigtable.TableColumnFamilyArgs{\n\t\t\t\t\tFamily: pulumi.String(\"family-first\"),\n\t\t\t\t},\n\t\t\t\t\u0026bigtable.TableColumnFamilyArgs{\n\t\t\t\t\tFamily: pulumi.String(\"family-second\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigtable.Instance;\nimport com.pulumi.gcp.bigtable.InstanceArgs;\nimport com.pulumi.gcp.bigtable.inputs.InstanceClusterArgs;\nimport com.pulumi.gcp.bigtable.Table;\nimport com.pulumi.gcp.bigtable.TableArgs;\nimport com.pulumi.gcp.bigtable.inputs.TableColumnFamilyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Instance(\"instance\", InstanceArgs.builder() \n .clusters(InstanceClusterArgs.builder()\n .clusterId(\"tf-instance-cluster\")\n .zone(\"us-central1-b\")\n .numNodes(3)\n .storageType(\"HDD\")\n .build())\n .build());\n\n var table = new Table(\"table\", TableArgs.builder() \n .instanceName(instance.name())\n .splitKeys( \n \"a\",\n \"b\",\n \"c\")\n .columnFamilies( \n TableColumnFamilyArgs.builder()\n .family(\"family-first\")\n .build(),\n TableColumnFamilyArgs.builder()\n .family(\"family-second\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:bigtable:Instance\n properties:\n clusters:\n - clusterId: tf-instance-cluster\n zone: us-central1-b\n numNodes: 3\n storageType: HDD\n table:\n type: gcp:bigtable:Table\n properties:\n instanceName: ${instance.name}\n splitKeys:\n - a\n - b\n - c\n columnFamilies:\n - family: family-first\n - family: family-second\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBigtable Tables can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigtable/table:Table default projects/{{project}}/instances/{{instance_name}}/tables/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigtable/table:Table default {{project}}/{{instance_name}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigtable/table:Table default {{instance_name}}/{{name}}\n```\n\n The following fields can't be read and will show diffs if set in config when imported- `split_keys` ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.bigtable.Instance(\"instance\", {clusters: [{\n clusterId: \"tf-instance-cluster\",\n zone: \"us-central1-b\",\n numNodes: 3,\n storageType: \"HDD\",\n}]});\nconst table = new gcp.bigtable.Table(\"table\", {\n instanceName: instance.name,\n splitKeys: [\n \"a\",\n \"b\",\n \"c\",\n ],\n columnFamilies: [\n {\n family: \"family-first\",\n },\n {\n family: \"family-second\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.bigtable.Instance(\"instance\", clusters=[gcp.bigtable.InstanceClusterArgs(\n cluster_id=\"tf-instance-cluster\",\n zone=\"us-central1-b\",\n num_nodes=3,\n storage_type=\"HDD\",\n)])\ntable = gcp.bigtable.Table(\"table\",\n instance_name=instance.name,\n split_keys=[\n \"a\",\n \"b\",\n \"c\",\n ],\n column_families=[\n gcp.bigtable.TableColumnFamilyArgs(\n family=\"family-first\",\n ),\n gcp.bigtable.TableColumnFamilyArgs(\n family=\"family-second\",\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.BigTable.Instance(\"instance\", new()\n {\n Clusters = new[]\n {\n new Gcp.BigTable.Inputs.InstanceClusterArgs\n {\n ClusterId = \"tf-instance-cluster\",\n Zone = \"us-central1-b\",\n NumNodes = 3,\n StorageType = \"HDD\",\n },\n },\n });\n\n var table = new Gcp.BigTable.Table(\"table\", new()\n {\n InstanceName = instance.Name,\n SplitKeys = new[]\n {\n \"a\",\n \"b\",\n \"c\",\n },\n ColumnFamilies = new[]\n {\n new Gcp.BigTable.Inputs.TableColumnFamilyArgs\n {\n Family = \"family-first\",\n },\n new Gcp.BigTable.Inputs.TableColumnFamilyArgs\n {\n Family = \"family-second\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigtable\"\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 := bigtable.NewInstance(ctx, \"instance\", \u0026bigtable.InstanceArgs{\n\t\t\tClusters: bigtable.InstanceClusterArray{\n\t\t\t\t\u0026bigtable.InstanceClusterArgs{\n\t\t\t\t\tClusterId: pulumi.String(\"tf-instance-cluster\"),\n\t\t\t\t\tZone: pulumi.String(\"us-central1-b\"),\n\t\t\t\t\tNumNodes: pulumi.Int(3),\n\t\t\t\t\tStorageType: pulumi.String(\"HDD\"),\n\t\t\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 = bigtable.NewTable(ctx, \"table\", \u0026bigtable.TableArgs{\n\t\t\tInstanceName: instance.Name,\n\t\t\tSplitKeys: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"a\"),\n\t\t\t\tpulumi.String(\"b\"),\n\t\t\t\tpulumi.String(\"c\"),\n\t\t\t},\n\t\t\tColumnFamilies: bigtable.TableColumnFamilyArray{\n\t\t\t\t\u0026bigtable.TableColumnFamilyArgs{\n\t\t\t\t\tFamily: pulumi.String(\"family-first\"),\n\t\t\t\t},\n\t\t\t\t\u0026bigtable.TableColumnFamilyArgs{\n\t\t\t\t\tFamily: pulumi.String(\"family-second\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.bigtable.Instance;\nimport com.pulumi.gcp.bigtable.InstanceArgs;\nimport com.pulumi.gcp.bigtable.inputs.InstanceClusterArgs;\nimport com.pulumi.gcp.bigtable.Table;\nimport com.pulumi.gcp.bigtable.TableArgs;\nimport com.pulumi.gcp.bigtable.inputs.TableColumnFamilyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Instance(\"instance\", InstanceArgs.builder() \n .clusters(InstanceClusterArgs.builder()\n .clusterId(\"tf-instance-cluster\")\n .zone(\"us-central1-b\")\n .numNodes(3)\n .storageType(\"HDD\")\n .build())\n .build());\n\n var table = new Table(\"table\", TableArgs.builder() \n .instanceName(instance.name())\n .splitKeys( \n \"a\",\n \"b\",\n \"c\")\n .columnFamilies( \n TableColumnFamilyArgs.builder()\n .family(\"family-first\")\n .build(),\n TableColumnFamilyArgs.builder()\n .family(\"family-second\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:bigtable:Instance\n properties:\n clusters:\n - clusterId: tf-instance-cluster\n zone: us-central1-b\n numNodes: 3\n storageType: HDD\n table:\n type: gcp:bigtable:Table\n properties:\n instanceName: ${instance.name}\n splitKeys:\n - a\n - b\n - c\n columnFamilies:\n - family: family-first\n - family: family-second\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBigtable Tables can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:bigtable/table:Table default projects/{{project}}/instances/{{instance_name}}/tables/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigtable/table:Table default {{project}}/{{instance_name}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:bigtable/table:Table default {{instance_name}}/{{name}}\n```\n\n The following fields can't be read and will show diffs if set in config when imported- `split_keys` ", "properties": { "columnFamilies": { "type": "array", @@ -117382,7 +118478,7 @@ "items": { "type": "string" }, - "description": "A list of predefined keys to split the table on.\n!\u003e **Warning:** Modifying the `split_keys` of an existing table will cause the provider\nto delete/recreate the entire `gcp.bigtable.Table` resource.\n" + "description": "A list of predefined keys to split the table on. !\u003e Warning: Modifying the split_keys of an existing table will cause\nTerraform to delete/recreate the entire google_bigtable_table resource.\n" } }, "required": [ @@ -117423,7 +118519,7 @@ "items": { "type": "string" }, - "description": "A list of predefined keys to split the table on.\n!\u003e **Warning:** Modifying the `split_keys` of an existing table will cause the provider\nto delete/recreate the entire `gcp.bigtable.Table` resource.\n", + "description": "A list of predefined keys to split the table on. !\u003e Warning: Modifying the split_keys of an existing table will cause\nTerraform to delete/recreate the entire google_bigtable_table resource.\n", "willReplaceOnChanges": true } }, @@ -117464,7 +118560,7 @@ "items": { "type": "string" }, - "description": "A list of predefined keys to split the table on.\n!\u003e **Warning:** Modifying the `split_keys` of an existing table will cause the provider\nto delete/recreate the entire `gcp.bigtable.Table` resource.\n", + "description": "A list of predefined keys to split the table on. !\u003e Warning: Modifying the split_keys of an existing table will cause\nTerraform to delete/recreate the entire google_bigtable_table resource.\n", "willReplaceOnChanges": true } }, @@ -117492,8 +118588,7 @@ } }, "project": { - "type": "string", - "description": "The project in which the table belongs. If it\nis not provided, this provider will use the provider default.\n" + "type": "string" }, "role": { "type": "string", @@ -117530,7 +118625,6 @@ }, "project": { "type": "string", - "description": "The project in which the table belongs. If it\nis not provided, this provider will use the provider default.\n", "willReplaceOnChanges": true }, "role": { @@ -117574,7 +118668,6 @@ }, "project": { "type": "string", - "description": "The project in which the table belongs. If it\nis not provided, this provider will use the provider default.\n", "willReplaceOnChanges": true }, "role": { @@ -117609,8 +118702,7 @@ "type": "string" }, "project": { - "type": "string", - "description": "The project in which the table belongs. If it\nis not provided, this provider will use the provider default.\n" + "type": "string" }, "role": { "type": "string", @@ -117645,7 +118737,6 @@ }, "project": { "type": "string", - "description": "The project in which the table belongs. If it\nis not provided, this provider will use the provider default.\n", "willReplaceOnChanges": true }, "role": { @@ -117687,7 +118778,6 @@ }, "project": { "type": "string", - "description": "The project in which the table belongs. If it\nis not provided, this provider will use the provider default.\n", "willReplaceOnChanges": true }, "role": { @@ -117720,8 +118810,7 @@ "description": "The policy data generated by a `gcp.organizations.getIAMPolicy` data source.\n" }, "project": { - "type": "string", - "description": "The project in which the table belongs. If it\nis not provided, this provider will use the provider default.\n" + "type": "string" }, "table": { "type": "string", @@ -117747,7 +118836,6 @@ }, "project": { "type": "string", - "description": "The project in which the table belongs. If it\nis not provided, this provider will use the provider default.\n", "willReplaceOnChanges": true }, "table": { @@ -117779,7 +118867,6 @@ }, "project": { "type": "string", - "description": "The project in which the table belongs. If it\nis not provided, this provider will use the provider default.\n", "willReplaceOnChanges": true }, "table": { @@ -118019,7 +119106,7 @@ } }, "gcp:billing/budget:Budget": { - "description": "Budget configuration for a billing account.\n\nTo get more information about Budget, see:\n\n* [API documentation](https://cloud.google.com/billing/docs/reference/budget/rest/v1/billingAccounts.budgets)\n* How-to Guides\n * [Creating a budget](https://cloud.google.com/billing/docs/how-to/budgets)\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 Billing Budgets API will return a 403 error.\nYour account must have the `serviceusage.services.use` permission on the\n`billing_project` you defined.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Billing Budget Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst account = gcp.organizations.getBillingAccount({\n billingAccount: \"000000-0000000-0000000-000000\",\n});\nconst budget = new gcp.billing.Budget(\"budget\", {\n billingAccount: account.then(account =\u003e account.id),\n displayName: \"Example Billing Budget\",\n amount: {\n specifiedAmount: {\n currencyCode: \"USD\",\n units: \"100000\",\n },\n },\n thresholdRules: [{\n thresholdPercent: 0.5,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\naccount = gcp.organizations.get_billing_account(billing_account=\"000000-0000000-0000000-000000\")\nbudget = gcp.billing.Budget(\"budget\",\n billing_account=account.id,\n display_name=\"Example Billing Budget\",\n amount=gcp.billing.BudgetAmountArgs(\n specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(\n currency_code=\"USD\",\n units=\"100000\",\n ),\n ),\n threshold_rules=[gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=0.5,\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var account = Gcp.Organizations.GetBillingAccount.Invoke(new()\n {\n BillingAccount = \"000000-0000000-0000000-000000\",\n });\n\n var budget = new Gcp.Billing.Budget(\"budget\", new()\n {\n BillingAccount = account.Apply(getBillingAccountResult =\u003e getBillingAccountResult.Id),\n DisplayName = \"Example Billing Budget\",\n Amount = new Gcp.Billing.Inputs.BudgetAmountArgs\n {\n SpecifiedAmount = new Gcp.Billing.Inputs.BudgetAmountSpecifiedAmountArgs\n {\n CurrencyCode = \"USD\",\n Units = \"100000\",\n },\n },\n ThresholdRules = new[]\n {\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 0.5,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/billing\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\taccount, err := organizations.GetBillingAccount(ctx, \u0026organizations.GetBillingAccountArgs{\n\t\t\tBillingAccount: pulumi.StringRef(\"000000-0000000-0000000-000000\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = billing.NewBudget(ctx, \"budget\", \u0026billing.BudgetArgs{\n\t\t\tBillingAccount: *pulumi.String(account.Id),\n\t\t\tDisplayName: pulumi.String(\"Example Billing Budget\"),\n\t\t\tAmount: \u0026billing.BudgetAmountArgs{\n\t\t\t\tSpecifiedAmount: \u0026billing.BudgetAmountSpecifiedAmountArgs{\n\t\t\t\t\tCurrencyCode: pulumi.String(\"USD\"),\n\t\t\t\t\tUnits: pulumi.String(\"100000\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tThresholdRules: billing.BudgetThresholdRuleArray{\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(0.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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;\nimport com.pulumi.gcp.billing.Budget;\nimport com.pulumi.gcp.billing.BudgetArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()\n .billingAccount(\"000000-0000000-0000000-000000\")\n .build());\n\n var budget = new Budget(\"budget\", BudgetArgs.builder() \n .billingAccount(account.applyValue(getBillingAccountResult -\u003e getBillingAccountResult.id()))\n .displayName(\"Example Billing Budget\")\n .amount(BudgetAmountArgs.builder()\n .specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()\n .currencyCode(\"USD\")\n .units(\"100000\")\n .build())\n .build())\n .thresholdRules(BudgetThresholdRuleArgs.builder()\n .thresholdPercent(0.5)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n budget:\n type: gcp:billing:Budget\n properties:\n billingAccount: ${account.id}\n displayName: Example Billing Budget\n amount:\n specifiedAmount:\n currencyCode: USD\n units: '100000'\n thresholdRules:\n - thresholdPercent: 0.5\nvariables:\n account:\n fn::invoke:\n Function: gcp:organizations:getBillingAccount\n Arguments:\n billingAccount: 000000-0000000-0000000-000000\n```\n{{% /example %}}\n{{% example %}}\n### Billing Budget Lastperiod\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst account = gcp.organizations.getBillingAccount({\n billingAccount: \"000000-0000000-0000000-000000\",\n});\nconst project = gcp.organizations.getProject({});\nconst budget = new gcp.billing.Budget(\"budget\", {\n billingAccount: account.then(account =\u003e account.id),\n displayName: \"Example Billing Budget\",\n budgetFilter: {\n projects: [project.then(project =\u003e `projects/${project.number}`)],\n },\n amount: {\n lastPeriodAmount: true,\n },\n thresholdRules: [{\n thresholdPercent: 10,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\naccount = gcp.organizations.get_billing_account(billing_account=\"000000-0000000-0000000-000000\")\nproject = gcp.organizations.get_project()\nbudget = gcp.billing.Budget(\"budget\",\n billing_account=account.id,\n display_name=\"Example Billing Budget\",\n budget_filter=gcp.billing.BudgetBudgetFilterArgs(\n projects=[f\"projects/{project.number}\"],\n ),\n amount=gcp.billing.BudgetAmountArgs(\n last_period_amount=True,\n ),\n threshold_rules=[gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=10,\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var account = Gcp.Organizations.GetBillingAccount.Invoke(new()\n {\n BillingAccount = \"000000-0000000-0000000-000000\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var budget = new Gcp.Billing.Budget(\"budget\", new()\n {\n BillingAccount = account.Apply(getBillingAccountResult =\u003e getBillingAccountResult.Id),\n DisplayName = \"Example Billing Budget\",\n BudgetFilter = new Gcp.Billing.Inputs.BudgetBudgetFilterArgs\n {\n Projects = new[]\n {\n $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}\",\n },\n },\n Amount = new Gcp.Billing.Inputs.BudgetAmountArgs\n {\n LastPeriodAmount = true,\n },\n ThresholdRules = new[]\n {\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 10,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/billing\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\taccount, err := organizations.GetBillingAccount(ctx, \u0026organizations.GetBillingAccountArgs{\n\t\t\tBillingAccount: pulumi.StringRef(\"000000-0000000-0000000-000000\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = billing.NewBudget(ctx, \"budget\", \u0026billing.BudgetArgs{\n\t\t\tBillingAccount: *pulumi.String(account.Id),\n\t\t\tDisplayName: pulumi.String(\"Example Billing Budget\"),\n\t\t\tBudgetFilter: \u0026billing.BudgetBudgetFilterArgs{\n\t\t\t\tProjects: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(fmt.Sprintf(\"projects/%v\", project.Number)),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAmount: \u0026billing.BudgetAmountArgs{\n\t\t\t\tLastPeriodAmount: pulumi.Bool(true),\n\t\t\t},\n\t\t\tThresholdRules: billing.BudgetThresholdRuleArray{\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(10),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GetBillingAccountArgs;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.billing.Budget;\nimport com.pulumi.gcp.billing.BudgetArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()\n .billingAccount(\"000000-0000000-0000000-000000\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var budget = new Budget(\"budget\", BudgetArgs.builder() \n .billingAccount(account.applyValue(getBillingAccountResult -\u003e getBillingAccountResult.id()))\n .displayName(\"Example Billing Budget\")\n .budgetFilter(BudgetBudgetFilterArgs.builder()\n .projects(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build())\n .amount(BudgetAmountArgs.builder()\n .lastPeriodAmount(true)\n .build())\n .thresholdRules(BudgetThresholdRuleArgs.builder()\n .thresholdPercent(10)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n budget:\n type: gcp:billing:Budget\n properties:\n billingAccount: ${account.id}\n displayName: Example Billing Budget\n budgetFilter:\n projects:\n - projects/${project.number}\n amount:\n lastPeriodAmount: true\n thresholdRules:\n - thresholdPercent: 10\nvariables:\n account:\n fn::invoke:\n Function: gcp:organizations:getBillingAccount\n Arguments:\n billingAccount: 000000-0000000-0000000-000000\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Billing Budget Filter\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst account = gcp.organizations.getBillingAccount({\n billingAccount: \"000000-0000000-0000000-000000\",\n});\nconst project = gcp.organizations.getProject({});\nconst budget = new gcp.billing.Budget(\"budget\", {\n billingAccount: account.then(account =\u003e account.id),\n displayName: \"Example Billing Budget\",\n budgetFilter: {\n projects: [project.then(project =\u003e `projects/${project.number}`)],\n creditTypesTreatment: \"INCLUDE_SPECIFIED_CREDITS\",\n services: [\"services/24E6-581D-38E5\"],\n creditTypes: [\n \"PROMOTION\",\n \"FREE_TIER\",\n ],\n },\n amount: {\n specifiedAmount: {\n currencyCode: \"USD\",\n units: \"100000\",\n },\n },\n thresholdRules: [\n {\n thresholdPercent: 0.5,\n },\n {\n thresholdPercent: 0.9,\n spendBasis: \"FORECASTED_SPEND\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\naccount = gcp.organizations.get_billing_account(billing_account=\"000000-0000000-0000000-000000\")\nproject = gcp.organizations.get_project()\nbudget = gcp.billing.Budget(\"budget\",\n billing_account=account.id,\n display_name=\"Example Billing Budget\",\n budget_filter=gcp.billing.BudgetBudgetFilterArgs(\n projects=[f\"projects/{project.number}\"],\n credit_types_treatment=\"INCLUDE_SPECIFIED_CREDITS\",\n services=[\"services/24E6-581D-38E5\"],\n credit_types=[\n \"PROMOTION\",\n \"FREE_TIER\",\n ],\n ),\n amount=gcp.billing.BudgetAmountArgs(\n specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(\n currency_code=\"USD\",\n units=\"100000\",\n ),\n ),\n threshold_rules=[\n gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=0.5,\n ),\n gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=0.9,\n spend_basis=\"FORECASTED_SPEND\",\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var account = Gcp.Organizations.GetBillingAccount.Invoke(new()\n {\n BillingAccount = \"000000-0000000-0000000-000000\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var budget = new Gcp.Billing.Budget(\"budget\", new()\n {\n BillingAccount = account.Apply(getBillingAccountResult =\u003e getBillingAccountResult.Id),\n DisplayName = \"Example Billing Budget\",\n BudgetFilter = new Gcp.Billing.Inputs.BudgetBudgetFilterArgs\n {\n Projects = new[]\n {\n $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}\",\n },\n CreditTypesTreatment = \"INCLUDE_SPECIFIED_CREDITS\",\n Services = new[]\n {\n \"services/24E6-581D-38E5\",\n },\n CreditTypes = new[]\n {\n \"PROMOTION\",\n \"FREE_TIER\",\n },\n },\n Amount = new Gcp.Billing.Inputs.BudgetAmountArgs\n {\n SpecifiedAmount = new Gcp.Billing.Inputs.BudgetAmountSpecifiedAmountArgs\n {\n CurrencyCode = \"USD\",\n Units = \"100000\",\n },\n },\n ThresholdRules = new[]\n {\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 0.5,\n },\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 0.9,\n SpendBasis = \"FORECASTED_SPEND\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/billing\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\taccount, err := organizations.GetBillingAccount(ctx, \u0026organizations.GetBillingAccountArgs{\n\t\t\tBillingAccount: pulumi.StringRef(\"000000-0000000-0000000-000000\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = billing.NewBudget(ctx, \"budget\", \u0026billing.BudgetArgs{\n\t\t\tBillingAccount: *pulumi.String(account.Id),\n\t\t\tDisplayName: pulumi.String(\"Example Billing Budget\"),\n\t\t\tBudgetFilter: \u0026billing.BudgetBudgetFilterArgs{\n\t\t\t\tProjects: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(fmt.Sprintf(\"projects/%v\", project.Number)),\n\t\t\t\t},\n\t\t\t\tCreditTypesTreatment: pulumi.String(\"INCLUDE_SPECIFIED_CREDITS\"),\n\t\t\t\tServices: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"services/24E6-581D-38E5\"),\n\t\t\t\t},\n\t\t\t\tCreditTypes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"PROMOTION\"),\n\t\t\t\t\tpulumi.String(\"FREE_TIER\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAmount: \u0026billing.BudgetAmountArgs{\n\t\t\t\tSpecifiedAmount: \u0026billing.BudgetAmountSpecifiedAmountArgs{\n\t\t\t\t\tCurrencyCode: pulumi.String(\"USD\"),\n\t\t\t\t\tUnits: pulumi.String(\"100000\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tThresholdRules: billing.BudgetThresholdRuleArray{\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(0.5),\n\t\t\t\t},\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(0.9),\n\t\t\t\t\tSpendBasis: pulumi.String(\"FORECASTED_SPEND\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GetBillingAccountArgs;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.billing.Budget;\nimport com.pulumi.gcp.billing.BudgetArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()\n .billingAccount(\"000000-0000000-0000000-000000\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var budget = new Budget(\"budget\", BudgetArgs.builder() \n .billingAccount(account.applyValue(getBillingAccountResult -\u003e getBillingAccountResult.id()))\n .displayName(\"Example Billing Budget\")\n .budgetFilter(BudgetBudgetFilterArgs.builder()\n .projects(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .creditTypesTreatment(\"INCLUDE_SPECIFIED_CREDITS\")\n .services(\"services/24E6-581D-38E5\")\n .creditTypes( \n \"PROMOTION\",\n \"FREE_TIER\")\n .build())\n .amount(BudgetAmountArgs.builder()\n .specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()\n .currencyCode(\"USD\")\n .units(\"100000\")\n .build())\n .build())\n .thresholdRules( \n BudgetThresholdRuleArgs.builder()\n .thresholdPercent(0.5)\n .build(),\n BudgetThresholdRuleArgs.builder()\n .thresholdPercent(0.9)\n .spendBasis(\"FORECASTED_SPEND\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n budget:\n type: gcp:billing:Budget\n properties:\n billingAccount: ${account.id}\n displayName: Example Billing Budget\n budgetFilter:\n projects:\n - projects/${project.number}\n creditTypesTreatment: INCLUDE_SPECIFIED_CREDITS\n services:\n - services/24E6-581D-38E5\n creditTypes:\n - PROMOTION\n - FREE_TIER\n amount:\n specifiedAmount:\n currencyCode: USD\n units: '100000'\n thresholdRules:\n - thresholdPercent: 0.5\n - thresholdPercent: 0.9\n spendBasis: FORECASTED_SPEND\nvariables:\n account:\n fn::invoke:\n Function: gcp:organizations:getBillingAccount\n Arguments:\n billingAccount: 000000-0000000-0000000-000000\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Billing Budget Notify\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst account = gcp.organizations.getBillingAccount({\n billingAccount: \"000000-0000000-0000000-000000\",\n});\nconst project = gcp.organizations.getProject({});\nconst notificationChannel = new gcp.monitoring.NotificationChannel(\"notificationChannel\", {\n displayName: \"Example Notification Channel\",\n type: \"email\",\n labels: {\n email_address: \"address@example.com\",\n },\n});\nconst budget = new gcp.billing.Budget(\"budget\", {\n billingAccount: account.then(account =\u003e account.id),\n displayName: \"Example Billing Budget\",\n budgetFilter: {\n projects: [project.then(project =\u003e `projects/${project.number}`)],\n },\n amount: {\n specifiedAmount: {\n currencyCode: \"USD\",\n units: \"100000\",\n },\n },\n thresholdRules: [\n {\n thresholdPercent: 1,\n },\n {\n thresholdPercent: 1,\n spendBasis: \"FORECASTED_SPEND\",\n },\n ],\n allUpdatesRule: {\n monitoringNotificationChannels: [notificationChannel.id],\n disableDefaultIamRecipients: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\naccount = gcp.organizations.get_billing_account(billing_account=\"000000-0000000-0000000-000000\")\nproject = gcp.organizations.get_project()\nnotification_channel = gcp.monitoring.NotificationChannel(\"notificationChannel\",\n display_name=\"Example Notification Channel\",\n type=\"email\",\n labels={\n \"email_address\": \"address@example.com\",\n })\nbudget = gcp.billing.Budget(\"budget\",\n billing_account=account.id,\n display_name=\"Example Billing Budget\",\n budget_filter=gcp.billing.BudgetBudgetFilterArgs(\n projects=[f\"projects/{project.number}\"],\n ),\n amount=gcp.billing.BudgetAmountArgs(\n specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(\n currency_code=\"USD\",\n units=\"100000\",\n ),\n ),\n threshold_rules=[\n gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=1,\n ),\n gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=1,\n spend_basis=\"FORECASTED_SPEND\",\n ),\n ],\n all_updates_rule=gcp.billing.BudgetAllUpdatesRuleArgs(\n monitoring_notification_channels=[notification_channel.id],\n disable_default_iam_recipients=True,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var account = Gcp.Organizations.GetBillingAccount.Invoke(new()\n {\n BillingAccount = \"000000-0000000-0000000-000000\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var notificationChannel = new Gcp.Monitoring.NotificationChannel(\"notificationChannel\", new()\n {\n DisplayName = \"Example Notification Channel\",\n Type = \"email\",\n Labels = \n {\n { \"email_address\", \"address@example.com\" },\n },\n });\n\n var budget = new Gcp.Billing.Budget(\"budget\", new()\n {\n BillingAccount = account.Apply(getBillingAccountResult =\u003e getBillingAccountResult.Id),\n DisplayName = \"Example Billing Budget\",\n BudgetFilter = new Gcp.Billing.Inputs.BudgetBudgetFilterArgs\n {\n Projects = new[]\n {\n $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}\",\n },\n },\n Amount = new Gcp.Billing.Inputs.BudgetAmountArgs\n {\n SpecifiedAmount = new Gcp.Billing.Inputs.BudgetAmountSpecifiedAmountArgs\n {\n CurrencyCode = \"USD\",\n Units = \"100000\",\n },\n },\n ThresholdRules = new[]\n {\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 1,\n },\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 1,\n SpendBasis = \"FORECASTED_SPEND\",\n },\n },\n AllUpdatesRule = new Gcp.Billing.Inputs.BudgetAllUpdatesRuleArgs\n {\n MonitoringNotificationChannels = new[]\n {\n notificationChannel.Id,\n },\n DisableDefaultIamRecipients = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/billing\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\taccount, err := organizations.GetBillingAccount(ctx, \u0026organizations.GetBillingAccountArgs{\n\t\t\tBillingAccount: pulumi.StringRef(\"000000-0000000-0000000-000000\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnotificationChannel, err := monitoring.NewNotificationChannel(ctx, \"notificationChannel\", \u0026monitoring.NotificationChannelArgs{\n\t\t\tDisplayName: pulumi.String(\"Example Notification Channel\"),\n\t\t\tType: pulumi.String(\"email\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"email_address\": pulumi.String(\"address@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = billing.NewBudget(ctx, \"budget\", \u0026billing.BudgetArgs{\n\t\t\tBillingAccount: *pulumi.String(account.Id),\n\t\t\tDisplayName: pulumi.String(\"Example Billing Budget\"),\n\t\t\tBudgetFilter: \u0026billing.BudgetBudgetFilterArgs{\n\t\t\t\tProjects: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(fmt.Sprintf(\"projects/%v\", project.Number)),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAmount: \u0026billing.BudgetAmountArgs{\n\t\t\t\tSpecifiedAmount: \u0026billing.BudgetAmountSpecifiedAmountArgs{\n\t\t\t\t\tCurrencyCode: pulumi.String(\"USD\"),\n\t\t\t\t\tUnits: pulumi.String(\"100000\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tThresholdRules: billing.BudgetThresholdRuleArray{\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(1),\n\t\t\t\t},\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(1),\n\t\t\t\t\tSpendBasis: pulumi.String(\"FORECASTED_SPEND\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAllUpdatesRule: \u0026billing.BudgetAllUpdatesRuleArgs{\n\t\t\t\tMonitoringNotificationChannels: pulumi.StringArray{\n\t\t\t\t\tnotificationChannel.ID(),\n\t\t\t\t},\n\t\t\t\tDisableDefaultIamRecipients: 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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.monitoring.NotificationChannel;\nimport com.pulumi.gcp.monitoring.NotificationChannelArgs;\nimport com.pulumi.gcp.billing.Budget;\nimport com.pulumi.gcp.billing.BudgetArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAllUpdatesRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()\n .billingAccount(\"000000-0000000-0000000-000000\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var notificationChannel = new NotificationChannel(\"notificationChannel\", NotificationChannelArgs.builder() \n .displayName(\"Example Notification Channel\")\n .type(\"email\")\n .labels(Map.of(\"email_address\", \"address@example.com\"))\n .build());\n\n var budget = new Budget(\"budget\", BudgetArgs.builder() \n .billingAccount(account.applyValue(getBillingAccountResult -\u003e getBillingAccountResult.id()))\n .displayName(\"Example Billing Budget\")\n .budgetFilter(BudgetBudgetFilterArgs.builder()\n .projects(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build())\n .amount(BudgetAmountArgs.builder()\n .specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()\n .currencyCode(\"USD\")\n .units(\"100000\")\n .build())\n .build())\n .thresholdRules( \n BudgetThresholdRuleArgs.builder()\n .thresholdPercent(1)\n .build(),\n BudgetThresholdRuleArgs.builder()\n .thresholdPercent(1)\n .spendBasis(\"FORECASTED_SPEND\")\n .build())\n .allUpdatesRule(BudgetAllUpdatesRuleArgs.builder()\n .monitoringNotificationChannels(notificationChannel.id())\n .disableDefaultIamRecipients(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n budget:\n type: gcp:billing:Budget\n properties:\n billingAccount: ${account.id}\n displayName: Example Billing Budget\n budgetFilter:\n projects:\n - projects/${project.number}\n amount:\n specifiedAmount:\n currencyCode: USD\n units: '100000'\n thresholdRules:\n - thresholdPercent: 1\n - thresholdPercent: 1\n spendBasis: FORECASTED_SPEND\n allUpdatesRule:\n monitoringNotificationChannels:\n - ${notificationChannel.id}\n disableDefaultIamRecipients: true\n notificationChannel:\n type: gcp:monitoring:NotificationChannel\n properties:\n displayName: Example Notification Channel\n type: email\n labels:\n email_address: address@example.com\nvariables:\n account:\n fn::invoke:\n Function: gcp:organizations:getBillingAccount\n Arguments:\n billingAccount: 000000-0000000-0000000-000000\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Billing Budget Customperiod\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst account = gcp.organizations.getBillingAccount({\n billingAccount: \"000000-0000000-0000000-000000\",\n});\nconst project = gcp.organizations.getProject({});\nconst budget = new gcp.billing.Budget(\"budget\", {\n billingAccount: account.then(account =\u003e account.id),\n displayName: \"Example Billing Budget\",\n budgetFilter: {\n projects: [project.then(project =\u003e `projects/${project.number}`)],\n creditTypesTreatment: \"EXCLUDE_ALL_CREDITS\",\n services: [\"services/24E6-581D-38E5\"],\n customPeriod: {\n startDate: {\n year: 2022,\n month: 1,\n day: 1,\n },\n endDate: {\n year: 2023,\n month: 12,\n day: 31,\n },\n },\n },\n amount: {\n specifiedAmount: {\n currencyCode: \"USD\",\n units: \"100000\",\n },\n },\n thresholdRules: [\n {\n thresholdPercent: 0.5,\n },\n {\n thresholdPercent: 0.9,\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\naccount = gcp.organizations.get_billing_account(billing_account=\"000000-0000000-0000000-000000\")\nproject = gcp.organizations.get_project()\nbudget = gcp.billing.Budget(\"budget\",\n billing_account=account.id,\n display_name=\"Example Billing Budget\",\n budget_filter=gcp.billing.BudgetBudgetFilterArgs(\n projects=[f\"projects/{project.number}\"],\n credit_types_treatment=\"EXCLUDE_ALL_CREDITS\",\n services=[\"services/24E6-581D-38E5\"],\n custom_period=gcp.billing.BudgetBudgetFilterCustomPeriodArgs(\n start_date=gcp.billing.BudgetBudgetFilterCustomPeriodStartDateArgs(\n year=2022,\n month=1,\n day=1,\n ),\n end_date=gcp.billing.BudgetBudgetFilterCustomPeriodEndDateArgs(\n year=2023,\n month=12,\n day=31,\n ),\n ),\n ),\n amount=gcp.billing.BudgetAmountArgs(\n specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(\n currency_code=\"USD\",\n units=\"100000\",\n ),\n ),\n threshold_rules=[\n gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=0.5,\n ),\n gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=0.9,\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var account = Gcp.Organizations.GetBillingAccount.Invoke(new()\n {\n BillingAccount = \"000000-0000000-0000000-000000\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var budget = new Gcp.Billing.Budget(\"budget\", new()\n {\n BillingAccount = account.Apply(getBillingAccountResult =\u003e getBillingAccountResult.Id),\n DisplayName = \"Example Billing Budget\",\n BudgetFilter = new Gcp.Billing.Inputs.BudgetBudgetFilterArgs\n {\n Projects = new[]\n {\n $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}\",\n },\n CreditTypesTreatment = \"EXCLUDE_ALL_CREDITS\",\n Services = new[]\n {\n \"services/24E6-581D-38E5\",\n },\n CustomPeriod = new Gcp.Billing.Inputs.BudgetBudgetFilterCustomPeriodArgs\n {\n StartDate = new Gcp.Billing.Inputs.BudgetBudgetFilterCustomPeriodStartDateArgs\n {\n Year = 2022,\n Month = 1,\n Day = 1,\n },\n EndDate = new Gcp.Billing.Inputs.BudgetBudgetFilterCustomPeriodEndDateArgs\n {\n Year = 2023,\n Month = 12,\n Day = 31,\n },\n },\n },\n Amount = new Gcp.Billing.Inputs.BudgetAmountArgs\n {\n SpecifiedAmount = new Gcp.Billing.Inputs.BudgetAmountSpecifiedAmountArgs\n {\n CurrencyCode = \"USD\",\n Units = \"100000\",\n },\n },\n ThresholdRules = new[]\n {\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 0.5,\n },\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 0.9,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/billing\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\taccount, err := organizations.GetBillingAccount(ctx, \u0026organizations.GetBillingAccountArgs{\n\t\t\tBillingAccount: pulumi.StringRef(\"000000-0000000-0000000-000000\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = billing.NewBudget(ctx, \"budget\", \u0026billing.BudgetArgs{\n\t\t\tBillingAccount: *pulumi.String(account.Id),\n\t\t\tDisplayName: pulumi.String(\"Example Billing Budget\"),\n\t\t\tBudgetFilter: \u0026billing.BudgetBudgetFilterArgs{\n\t\t\t\tProjects: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(fmt.Sprintf(\"projects/%v\", project.Number)),\n\t\t\t\t},\n\t\t\t\tCreditTypesTreatment: pulumi.String(\"EXCLUDE_ALL_CREDITS\"),\n\t\t\t\tServices: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"services/24E6-581D-38E5\"),\n\t\t\t\t},\n\t\t\t\tCustomPeriod: \u0026billing.BudgetBudgetFilterCustomPeriodArgs{\n\t\t\t\t\tStartDate: \u0026billing.BudgetBudgetFilterCustomPeriodStartDateArgs{\n\t\t\t\t\t\tYear: pulumi.Int(2022),\n\t\t\t\t\t\tMonth: pulumi.Int(1),\n\t\t\t\t\t\tDay: pulumi.Int(1),\n\t\t\t\t\t},\n\t\t\t\t\tEndDate: \u0026billing.BudgetBudgetFilterCustomPeriodEndDateArgs{\n\t\t\t\t\t\tYear: pulumi.Int(2023),\n\t\t\t\t\t\tMonth: pulumi.Int(12),\n\t\t\t\t\t\tDay: pulumi.Int(31),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tAmount: \u0026billing.BudgetAmountArgs{\n\t\t\t\tSpecifiedAmount: \u0026billing.BudgetAmountSpecifiedAmountArgs{\n\t\t\t\t\tCurrencyCode: pulumi.String(\"USD\"),\n\t\t\t\t\tUnits: pulumi.String(\"100000\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tThresholdRules: billing.BudgetThresholdRuleArray{\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(0.5),\n\t\t\t\t},\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(0.9),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GetBillingAccountArgs;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.billing.Budget;\nimport com.pulumi.gcp.billing.BudgetArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterCustomPeriodArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterCustomPeriodStartDateArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterCustomPeriodEndDateArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()\n .billingAccount(\"000000-0000000-0000000-000000\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var budget = new Budget(\"budget\", BudgetArgs.builder() \n .billingAccount(account.applyValue(getBillingAccountResult -\u003e getBillingAccountResult.id()))\n .displayName(\"Example Billing Budget\")\n .budgetFilter(BudgetBudgetFilterArgs.builder()\n .projects(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .creditTypesTreatment(\"EXCLUDE_ALL_CREDITS\")\n .services(\"services/24E6-581D-38E5\")\n .customPeriod(BudgetBudgetFilterCustomPeriodArgs.builder()\n .startDate(BudgetBudgetFilterCustomPeriodStartDateArgs.builder()\n .year(2022)\n .month(1)\n .day(1)\n .build())\n .endDate(BudgetBudgetFilterCustomPeriodEndDateArgs.builder()\n .year(2023)\n .month(12)\n .day(31)\n .build())\n .build())\n .build())\n .amount(BudgetAmountArgs.builder()\n .specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()\n .currencyCode(\"USD\")\n .units(\"100000\")\n .build())\n .build())\n .thresholdRules( \n BudgetThresholdRuleArgs.builder()\n .thresholdPercent(0.5)\n .build(),\n BudgetThresholdRuleArgs.builder()\n .thresholdPercent(0.9)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n budget:\n type: gcp:billing:Budget\n properties:\n billingAccount: ${account.id}\n displayName: Example Billing Budget\n budgetFilter:\n projects:\n - projects/${project.number}\n creditTypesTreatment: EXCLUDE_ALL_CREDITS\n services:\n - services/24E6-581D-38E5\n customPeriod:\n startDate:\n year: 2022\n month: 1\n day: 1\n endDate:\n year: 2023\n month: 12\n day: 31\n amount:\n specifiedAmount:\n currencyCode: USD\n units: '100000'\n thresholdRules:\n - thresholdPercent: 0.5\n - thresholdPercent: 0.9\nvariables:\n account:\n fn::invoke:\n Function: gcp:organizations:getBillingAccount\n Arguments:\n billingAccount: 000000-0000000-0000000-000000\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBudget can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:billing/budget:Budget default billingAccounts/{{billing_account}}/budgets/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:billing/budget:Budget default {{billing_account}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:billing/budget:Budget default {{name}}\n```\n\n ", + "description": "Budget configuration for a billing account.\n\n\nTo get more information about Budget, see:\n\n* [API documentation](https://cloud.google.com/billing/docs/reference/budget/rest/v1/billingAccounts.budgets)\n* How-to Guides\n * [Creating a budget](https://cloud.google.com/billing/docs/how-to/budgets)\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 Billing Budgets API will return a 403 error.\nYour account must have the `serviceusage.services.use` permission on the\n`billing_project` you defined.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Billing Budget Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst account = gcp.organizations.getBillingAccount({\n billingAccount: \"000000-0000000-0000000-000000\",\n});\nconst budget = new gcp.billing.Budget(\"budget\", {\n billingAccount: account.then(account =\u003e account.id),\n displayName: \"Example Billing Budget\",\n amount: {\n specifiedAmount: {\n currencyCode: \"USD\",\n units: \"100000\",\n },\n },\n thresholdRules: [{\n thresholdPercent: 0.5,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\naccount = gcp.organizations.get_billing_account(billing_account=\"000000-0000000-0000000-000000\")\nbudget = gcp.billing.Budget(\"budget\",\n billing_account=account.id,\n display_name=\"Example Billing Budget\",\n amount=gcp.billing.BudgetAmountArgs(\n specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(\n currency_code=\"USD\",\n units=\"100000\",\n ),\n ),\n threshold_rules=[gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=0.5,\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var account = Gcp.Organizations.GetBillingAccount.Invoke(new()\n {\n BillingAccount = \"000000-0000000-0000000-000000\",\n });\n\n var budget = new Gcp.Billing.Budget(\"budget\", new()\n {\n BillingAccount = account.Apply(getBillingAccountResult =\u003e getBillingAccountResult.Id),\n DisplayName = \"Example Billing Budget\",\n Amount = new Gcp.Billing.Inputs.BudgetAmountArgs\n {\n SpecifiedAmount = new Gcp.Billing.Inputs.BudgetAmountSpecifiedAmountArgs\n {\n CurrencyCode = \"USD\",\n Units = \"100000\",\n },\n },\n ThresholdRules = new[]\n {\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 0.5,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/billing\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\taccount, err := organizations.GetBillingAccount(ctx, \u0026organizations.GetBillingAccountArgs{\n\t\t\tBillingAccount: pulumi.StringRef(\"000000-0000000-0000000-000000\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = billing.NewBudget(ctx, \"budget\", \u0026billing.BudgetArgs{\n\t\t\tBillingAccount: *pulumi.String(account.Id),\n\t\t\tDisplayName: pulumi.String(\"Example Billing Budget\"),\n\t\t\tAmount: \u0026billing.BudgetAmountArgs{\n\t\t\t\tSpecifiedAmount: \u0026billing.BudgetAmountSpecifiedAmountArgs{\n\t\t\t\t\tCurrencyCode: pulumi.String(\"USD\"),\n\t\t\t\t\tUnits: pulumi.String(\"100000\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tThresholdRules: billing.BudgetThresholdRuleArray{\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(0.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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;\nimport com.pulumi.gcp.billing.Budget;\nimport com.pulumi.gcp.billing.BudgetArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()\n .billingAccount(\"000000-0000000-0000000-000000\")\n .build());\n\n var budget = new Budget(\"budget\", BudgetArgs.builder() \n .billingAccount(account.applyValue(getBillingAccountResult -\u003e getBillingAccountResult.id()))\n .displayName(\"Example Billing Budget\")\n .amount(BudgetAmountArgs.builder()\n .specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()\n .currencyCode(\"USD\")\n .units(\"100000\")\n .build())\n .build())\n .thresholdRules(BudgetThresholdRuleArgs.builder()\n .thresholdPercent(0.5)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n budget:\n type: gcp:billing:Budget\n properties:\n billingAccount: ${account.id}\n displayName: Example Billing Budget\n amount:\n specifiedAmount:\n currencyCode: USD\n units: '100000'\n thresholdRules:\n - thresholdPercent: 0.5\nvariables:\n account:\n fn::invoke:\n Function: gcp:organizations:getBillingAccount\n Arguments:\n billingAccount: 000000-0000000-0000000-000000\n```\n{{% /example %}}\n{{% example %}}\n### Billing Budget Lastperiod\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst account = gcp.organizations.getBillingAccount({\n billingAccount: \"000000-0000000-0000000-000000\",\n});\nconst project = gcp.organizations.getProject({});\nconst budget = new gcp.billing.Budget(\"budget\", {\n billingAccount: account.then(account =\u003e account.id),\n displayName: \"Example Billing Budget\",\n budgetFilter: {\n projects: [project.then(project =\u003e `projects/${project.number}`)],\n },\n amount: {\n lastPeriodAmount: true,\n },\n thresholdRules: [{\n thresholdPercent: 10,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\naccount = gcp.organizations.get_billing_account(billing_account=\"000000-0000000-0000000-000000\")\nproject = gcp.organizations.get_project()\nbudget = gcp.billing.Budget(\"budget\",\n billing_account=account.id,\n display_name=\"Example Billing Budget\",\n budget_filter=gcp.billing.BudgetBudgetFilterArgs(\n projects=[f\"projects/{project.number}\"],\n ),\n amount=gcp.billing.BudgetAmountArgs(\n last_period_amount=True,\n ),\n threshold_rules=[gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=10,\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var account = Gcp.Organizations.GetBillingAccount.Invoke(new()\n {\n BillingAccount = \"000000-0000000-0000000-000000\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var budget = new Gcp.Billing.Budget(\"budget\", new()\n {\n BillingAccount = account.Apply(getBillingAccountResult =\u003e getBillingAccountResult.Id),\n DisplayName = \"Example Billing Budget\",\n BudgetFilter = new Gcp.Billing.Inputs.BudgetBudgetFilterArgs\n {\n Projects = new[]\n {\n $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}\",\n },\n },\n Amount = new Gcp.Billing.Inputs.BudgetAmountArgs\n {\n LastPeriodAmount = true,\n },\n ThresholdRules = new[]\n {\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 10,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/billing\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\taccount, err := organizations.GetBillingAccount(ctx, \u0026organizations.GetBillingAccountArgs{\n\t\t\tBillingAccount: pulumi.StringRef(\"000000-0000000-0000000-000000\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = billing.NewBudget(ctx, \"budget\", \u0026billing.BudgetArgs{\n\t\t\tBillingAccount: *pulumi.String(account.Id),\n\t\t\tDisplayName: pulumi.String(\"Example Billing Budget\"),\n\t\t\tBudgetFilter: \u0026billing.BudgetBudgetFilterArgs{\n\t\t\t\tProjects: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(fmt.Sprintf(\"projects/%v\", project.Number)),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAmount: \u0026billing.BudgetAmountArgs{\n\t\t\t\tLastPeriodAmount: pulumi.Bool(true),\n\t\t\t},\n\t\t\tThresholdRules: billing.BudgetThresholdRuleArray{\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(10),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GetBillingAccountArgs;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.billing.Budget;\nimport com.pulumi.gcp.billing.BudgetArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()\n .billingAccount(\"000000-0000000-0000000-000000\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var budget = new Budget(\"budget\", BudgetArgs.builder() \n .billingAccount(account.applyValue(getBillingAccountResult -\u003e getBillingAccountResult.id()))\n .displayName(\"Example Billing Budget\")\n .budgetFilter(BudgetBudgetFilterArgs.builder()\n .projects(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build())\n .amount(BudgetAmountArgs.builder()\n .lastPeriodAmount(true)\n .build())\n .thresholdRules(BudgetThresholdRuleArgs.builder()\n .thresholdPercent(10)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n budget:\n type: gcp:billing:Budget\n properties:\n billingAccount: ${account.id}\n displayName: Example Billing Budget\n budgetFilter:\n projects:\n - projects/${project.number}\n amount:\n lastPeriodAmount: true\n thresholdRules:\n - thresholdPercent: 10\nvariables:\n account:\n fn::invoke:\n Function: gcp:organizations:getBillingAccount\n Arguments:\n billingAccount: 000000-0000000-0000000-000000\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Billing Budget Filter\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst account = gcp.organizations.getBillingAccount({\n billingAccount: \"000000-0000000-0000000-000000\",\n});\nconst project = gcp.organizations.getProject({});\nconst budget = new gcp.billing.Budget(\"budget\", {\n billingAccount: account.then(account =\u003e account.id),\n displayName: \"Example Billing Budget\",\n budgetFilter: {\n projects: [project.then(project =\u003e `projects/${project.number}`)],\n creditTypesTreatment: \"INCLUDE_SPECIFIED_CREDITS\",\n services: [\"services/24E6-581D-38E5\"],\n creditTypes: [\n \"PROMOTION\",\n \"FREE_TIER\",\n ],\n },\n amount: {\n specifiedAmount: {\n currencyCode: \"USD\",\n units: \"100000\",\n },\n },\n thresholdRules: [\n {\n thresholdPercent: 0.5,\n },\n {\n thresholdPercent: 0.9,\n spendBasis: \"FORECASTED_SPEND\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\naccount = gcp.organizations.get_billing_account(billing_account=\"000000-0000000-0000000-000000\")\nproject = gcp.organizations.get_project()\nbudget = gcp.billing.Budget(\"budget\",\n billing_account=account.id,\n display_name=\"Example Billing Budget\",\n budget_filter=gcp.billing.BudgetBudgetFilterArgs(\n projects=[f\"projects/{project.number}\"],\n credit_types_treatment=\"INCLUDE_SPECIFIED_CREDITS\",\n services=[\"services/24E6-581D-38E5\"],\n credit_types=[\n \"PROMOTION\",\n \"FREE_TIER\",\n ],\n ),\n amount=gcp.billing.BudgetAmountArgs(\n specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(\n currency_code=\"USD\",\n units=\"100000\",\n ),\n ),\n threshold_rules=[\n gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=0.5,\n ),\n gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=0.9,\n spend_basis=\"FORECASTED_SPEND\",\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var account = Gcp.Organizations.GetBillingAccount.Invoke(new()\n {\n BillingAccount = \"000000-0000000-0000000-000000\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var budget = new Gcp.Billing.Budget(\"budget\", new()\n {\n BillingAccount = account.Apply(getBillingAccountResult =\u003e getBillingAccountResult.Id),\n DisplayName = \"Example Billing Budget\",\n BudgetFilter = new Gcp.Billing.Inputs.BudgetBudgetFilterArgs\n {\n Projects = new[]\n {\n $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}\",\n },\n CreditTypesTreatment = \"INCLUDE_SPECIFIED_CREDITS\",\n Services = new[]\n {\n \"services/24E6-581D-38E5\",\n },\n CreditTypes = new[]\n {\n \"PROMOTION\",\n \"FREE_TIER\",\n },\n },\n Amount = new Gcp.Billing.Inputs.BudgetAmountArgs\n {\n SpecifiedAmount = new Gcp.Billing.Inputs.BudgetAmountSpecifiedAmountArgs\n {\n CurrencyCode = \"USD\",\n Units = \"100000\",\n },\n },\n ThresholdRules = new[]\n {\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 0.5,\n },\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 0.9,\n SpendBasis = \"FORECASTED_SPEND\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/billing\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\taccount, err := organizations.GetBillingAccount(ctx, \u0026organizations.GetBillingAccountArgs{\n\t\t\tBillingAccount: pulumi.StringRef(\"000000-0000000-0000000-000000\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = billing.NewBudget(ctx, \"budget\", \u0026billing.BudgetArgs{\n\t\t\tBillingAccount: *pulumi.String(account.Id),\n\t\t\tDisplayName: pulumi.String(\"Example Billing Budget\"),\n\t\t\tBudgetFilter: \u0026billing.BudgetBudgetFilterArgs{\n\t\t\t\tProjects: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(fmt.Sprintf(\"projects/%v\", project.Number)),\n\t\t\t\t},\n\t\t\t\tCreditTypesTreatment: pulumi.String(\"INCLUDE_SPECIFIED_CREDITS\"),\n\t\t\t\tServices: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"services/24E6-581D-38E5\"),\n\t\t\t\t},\n\t\t\t\tCreditTypes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"PROMOTION\"),\n\t\t\t\t\tpulumi.String(\"FREE_TIER\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAmount: \u0026billing.BudgetAmountArgs{\n\t\t\t\tSpecifiedAmount: \u0026billing.BudgetAmountSpecifiedAmountArgs{\n\t\t\t\t\tCurrencyCode: pulumi.String(\"USD\"),\n\t\t\t\t\tUnits: pulumi.String(\"100000\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tThresholdRules: billing.BudgetThresholdRuleArray{\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(0.5),\n\t\t\t\t},\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(0.9),\n\t\t\t\t\tSpendBasis: pulumi.String(\"FORECASTED_SPEND\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GetBillingAccountArgs;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.billing.Budget;\nimport com.pulumi.gcp.billing.BudgetArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()\n .billingAccount(\"000000-0000000-0000000-000000\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var budget = new Budget(\"budget\", BudgetArgs.builder() \n .billingAccount(account.applyValue(getBillingAccountResult -\u003e getBillingAccountResult.id()))\n .displayName(\"Example Billing Budget\")\n .budgetFilter(BudgetBudgetFilterArgs.builder()\n .projects(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .creditTypesTreatment(\"INCLUDE_SPECIFIED_CREDITS\")\n .services(\"services/24E6-581D-38E5\")\n .creditTypes( \n \"PROMOTION\",\n \"FREE_TIER\")\n .build())\n .amount(BudgetAmountArgs.builder()\n .specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()\n .currencyCode(\"USD\")\n .units(\"100000\")\n .build())\n .build())\n .thresholdRules( \n BudgetThresholdRuleArgs.builder()\n .thresholdPercent(0.5)\n .build(),\n BudgetThresholdRuleArgs.builder()\n .thresholdPercent(0.9)\n .spendBasis(\"FORECASTED_SPEND\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n budget:\n type: gcp:billing:Budget\n properties:\n billingAccount: ${account.id}\n displayName: Example Billing Budget\n budgetFilter:\n projects:\n - projects/${project.number}\n creditTypesTreatment: INCLUDE_SPECIFIED_CREDITS\n services:\n - services/24E6-581D-38E5\n creditTypes:\n - PROMOTION\n - FREE_TIER\n amount:\n specifiedAmount:\n currencyCode: USD\n units: '100000'\n thresholdRules:\n - thresholdPercent: 0.5\n - thresholdPercent: 0.9\n spendBasis: FORECASTED_SPEND\nvariables:\n account:\n fn::invoke:\n Function: gcp:organizations:getBillingAccount\n Arguments:\n billingAccount: 000000-0000000-0000000-000000\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Billing Budget Notify\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst account = gcp.organizations.getBillingAccount({\n billingAccount: \"000000-0000000-0000000-000000\",\n});\nconst project = gcp.organizations.getProject({});\nconst notificationChannel = new gcp.monitoring.NotificationChannel(\"notificationChannel\", {\n displayName: \"Example Notification Channel\",\n type: \"email\",\n labels: {\n email_address: \"address@example.com\",\n },\n});\nconst budget = new gcp.billing.Budget(\"budget\", {\n billingAccount: account.then(account =\u003e account.id),\n displayName: \"Example Billing Budget\",\n budgetFilter: {\n projects: [project.then(project =\u003e `projects/${project.number}`)],\n },\n amount: {\n specifiedAmount: {\n currencyCode: \"USD\",\n units: \"100000\",\n },\n },\n thresholdRules: [\n {\n thresholdPercent: 1,\n },\n {\n thresholdPercent: 1,\n spendBasis: \"FORECASTED_SPEND\",\n },\n ],\n allUpdatesRule: {\n monitoringNotificationChannels: [notificationChannel.id],\n disableDefaultIamRecipients: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\naccount = gcp.organizations.get_billing_account(billing_account=\"000000-0000000-0000000-000000\")\nproject = gcp.organizations.get_project()\nnotification_channel = gcp.monitoring.NotificationChannel(\"notificationChannel\",\n display_name=\"Example Notification Channel\",\n type=\"email\",\n labels={\n \"email_address\": \"address@example.com\",\n })\nbudget = gcp.billing.Budget(\"budget\",\n billing_account=account.id,\n display_name=\"Example Billing Budget\",\n budget_filter=gcp.billing.BudgetBudgetFilterArgs(\n projects=[f\"projects/{project.number}\"],\n ),\n amount=gcp.billing.BudgetAmountArgs(\n specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(\n currency_code=\"USD\",\n units=\"100000\",\n ),\n ),\n threshold_rules=[\n gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=1,\n ),\n gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=1,\n spend_basis=\"FORECASTED_SPEND\",\n ),\n ],\n all_updates_rule=gcp.billing.BudgetAllUpdatesRuleArgs(\n monitoring_notification_channels=[notification_channel.id],\n disable_default_iam_recipients=True,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var account = Gcp.Organizations.GetBillingAccount.Invoke(new()\n {\n BillingAccount = \"000000-0000000-0000000-000000\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var notificationChannel = new Gcp.Monitoring.NotificationChannel(\"notificationChannel\", new()\n {\n DisplayName = \"Example Notification Channel\",\n Type = \"email\",\n Labels = \n {\n { \"email_address\", \"address@example.com\" },\n },\n });\n\n var budget = new Gcp.Billing.Budget(\"budget\", new()\n {\n BillingAccount = account.Apply(getBillingAccountResult =\u003e getBillingAccountResult.Id),\n DisplayName = \"Example Billing Budget\",\n BudgetFilter = new Gcp.Billing.Inputs.BudgetBudgetFilterArgs\n {\n Projects = new[]\n {\n $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}\",\n },\n },\n Amount = new Gcp.Billing.Inputs.BudgetAmountArgs\n {\n SpecifiedAmount = new Gcp.Billing.Inputs.BudgetAmountSpecifiedAmountArgs\n {\n CurrencyCode = \"USD\",\n Units = \"100000\",\n },\n },\n ThresholdRules = new[]\n {\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 1,\n },\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 1,\n SpendBasis = \"FORECASTED_SPEND\",\n },\n },\n AllUpdatesRule = new Gcp.Billing.Inputs.BudgetAllUpdatesRuleArgs\n {\n MonitoringNotificationChannels = new[]\n {\n notificationChannel.Id,\n },\n DisableDefaultIamRecipients = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/billing\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\taccount, err := organizations.GetBillingAccount(ctx, \u0026organizations.GetBillingAccountArgs{\n\t\t\tBillingAccount: pulumi.StringRef(\"000000-0000000-0000000-000000\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnotificationChannel, err := monitoring.NewNotificationChannel(ctx, \"notificationChannel\", \u0026monitoring.NotificationChannelArgs{\n\t\t\tDisplayName: pulumi.String(\"Example Notification Channel\"),\n\t\t\tType: pulumi.String(\"email\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"email_address\": pulumi.String(\"address@example.com\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = billing.NewBudget(ctx, \"budget\", \u0026billing.BudgetArgs{\n\t\t\tBillingAccount: *pulumi.String(account.Id),\n\t\t\tDisplayName: pulumi.String(\"Example Billing Budget\"),\n\t\t\tBudgetFilter: \u0026billing.BudgetBudgetFilterArgs{\n\t\t\t\tProjects: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(fmt.Sprintf(\"projects/%v\", project.Number)),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAmount: \u0026billing.BudgetAmountArgs{\n\t\t\t\tSpecifiedAmount: \u0026billing.BudgetAmountSpecifiedAmountArgs{\n\t\t\t\t\tCurrencyCode: pulumi.String(\"USD\"),\n\t\t\t\t\tUnits: pulumi.String(\"100000\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tThresholdRules: billing.BudgetThresholdRuleArray{\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(1),\n\t\t\t\t},\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(1),\n\t\t\t\t\tSpendBasis: pulumi.String(\"FORECASTED_SPEND\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tAllUpdatesRule: \u0026billing.BudgetAllUpdatesRuleArgs{\n\t\t\t\tMonitoringNotificationChannels: pulumi.StringArray{\n\t\t\t\t\tnotificationChannel.ID(),\n\t\t\t\t},\n\t\t\t\tDisableDefaultIamRecipients: 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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.monitoring.NotificationChannel;\nimport com.pulumi.gcp.monitoring.NotificationChannelArgs;\nimport com.pulumi.gcp.billing.Budget;\nimport com.pulumi.gcp.billing.BudgetArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAllUpdatesRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()\n .billingAccount(\"000000-0000000-0000000-000000\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var notificationChannel = new NotificationChannel(\"notificationChannel\", NotificationChannelArgs.builder() \n .displayName(\"Example Notification Channel\")\n .type(\"email\")\n .labels(Map.of(\"email_address\", \"address@example.com\"))\n .build());\n\n var budget = new Budget(\"budget\", BudgetArgs.builder() \n .billingAccount(account.applyValue(getBillingAccountResult -\u003e getBillingAccountResult.id()))\n .displayName(\"Example Billing Budget\")\n .budgetFilter(BudgetBudgetFilterArgs.builder()\n .projects(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build())\n .amount(BudgetAmountArgs.builder()\n .specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()\n .currencyCode(\"USD\")\n .units(\"100000\")\n .build())\n .build())\n .thresholdRules( \n BudgetThresholdRuleArgs.builder()\n .thresholdPercent(1)\n .build(),\n BudgetThresholdRuleArgs.builder()\n .thresholdPercent(1)\n .spendBasis(\"FORECASTED_SPEND\")\n .build())\n .allUpdatesRule(BudgetAllUpdatesRuleArgs.builder()\n .monitoringNotificationChannels(notificationChannel.id())\n .disableDefaultIamRecipients(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n budget:\n type: gcp:billing:Budget\n properties:\n billingAccount: ${account.id}\n displayName: Example Billing Budget\n budgetFilter:\n projects:\n - projects/${project.number}\n amount:\n specifiedAmount:\n currencyCode: USD\n units: '100000'\n thresholdRules:\n - thresholdPercent: 1\n - thresholdPercent: 1\n spendBasis: FORECASTED_SPEND\n allUpdatesRule:\n monitoringNotificationChannels:\n - ${notificationChannel.id}\n disableDefaultIamRecipients: true\n notificationChannel:\n type: gcp:monitoring:NotificationChannel\n properties:\n displayName: Example Notification Channel\n type: email\n labels:\n email_address: address@example.com\nvariables:\n account:\n fn::invoke:\n Function: gcp:organizations:getBillingAccount\n Arguments:\n billingAccount: 000000-0000000-0000000-000000\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Billing Budget Customperiod\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst account = gcp.organizations.getBillingAccount({\n billingAccount: \"000000-0000000-0000000-000000\",\n});\nconst project = gcp.organizations.getProject({});\nconst budget = new gcp.billing.Budget(\"budget\", {\n billingAccount: account.then(account =\u003e account.id),\n displayName: \"Example Billing Budget\",\n budgetFilter: {\n projects: [project.then(project =\u003e `projects/${project.number}`)],\n creditTypesTreatment: \"EXCLUDE_ALL_CREDITS\",\n services: [\"services/24E6-581D-38E5\"],\n customPeriod: {\n startDate: {\n year: 2022,\n month: 1,\n day: 1,\n },\n endDate: {\n year: 2023,\n month: 12,\n day: 31,\n },\n },\n },\n amount: {\n specifiedAmount: {\n currencyCode: \"USD\",\n units: \"100000\",\n },\n },\n thresholdRules: [\n {\n thresholdPercent: 0.5,\n },\n {\n thresholdPercent: 0.9,\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\naccount = gcp.organizations.get_billing_account(billing_account=\"000000-0000000-0000000-000000\")\nproject = gcp.organizations.get_project()\nbudget = gcp.billing.Budget(\"budget\",\n billing_account=account.id,\n display_name=\"Example Billing Budget\",\n budget_filter=gcp.billing.BudgetBudgetFilterArgs(\n projects=[f\"projects/{project.number}\"],\n credit_types_treatment=\"EXCLUDE_ALL_CREDITS\",\n services=[\"services/24E6-581D-38E5\"],\n custom_period=gcp.billing.BudgetBudgetFilterCustomPeriodArgs(\n start_date=gcp.billing.BudgetBudgetFilterCustomPeriodStartDateArgs(\n year=2022,\n month=1,\n day=1,\n ),\n end_date=gcp.billing.BudgetBudgetFilterCustomPeriodEndDateArgs(\n year=2023,\n month=12,\n day=31,\n ),\n ),\n ),\n amount=gcp.billing.BudgetAmountArgs(\n specified_amount=gcp.billing.BudgetAmountSpecifiedAmountArgs(\n currency_code=\"USD\",\n units=\"100000\",\n ),\n ),\n threshold_rules=[\n gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=0.5,\n ),\n gcp.billing.BudgetThresholdRuleArgs(\n threshold_percent=0.9,\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var account = Gcp.Organizations.GetBillingAccount.Invoke(new()\n {\n BillingAccount = \"000000-0000000-0000000-000000\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var budget = new Gcp.Billing.Budget(\"budget\", new()\n {\n BillingAccount = account.Apply(getBillingAccountResult =\u003e getBillingAccountResult.Id),\n DisplayName = \"Example Billing Budget\",\n BudgetFilter = new Gcp.Billing.Inputs.BudgetBudgetFilterArgs\n {\n Projects = new[]\n {\n $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}\",\n },\n CreditTypesTreatment = \"EXCLUDE_ALL_CREDITS\",\n Services = new[]\n {\n \"services/24E6-581D-38E5\",\n },\n CustomPeriod = new Gcp.Billing.Inputs.BudgetBudgetFilterCustomPeriodArgs\n {\n StartDate = new Gcp.Billing.Inputs.BudgetBudgetFilterCustomPeriodStartDateArgs\n {\n Year = 2022,\n Month = 1,\n Day = 1,\n },\n EndDate = new Gcp.Billing.Inputs.BudgetBudgetFilterCustomPeriodEndDateArgs\n {\n Year = 2023,\n Month = 12,\n Day = 31,\n },\n },\n },\n Amount = new Gcp.Billing.Inputs.BudgetAmountArgs\n {\n SpecifiedAmount = new Gcp.Billing.Inputs.BudgetAmountSpecifiedAmountArgs\n {\n CurrencyCode = \"USD\",\n Units = \"100000\",\n },\n },\n ThresholdRules = new[]\n {\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 0.5,\n },\n new Gcp.Billing.Inputs.BudgetThresholdRuleArgs\n {\n ThresholdPercent = 0.9,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/billing\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\taccount, err := organizations.GetBillingAccount(ctx, \u0026organizations.GetBillingAccountArgs{\n\t\t\tBillingAccount: pulumi.StringRef(\"000000-0000000-0000000-000000\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = billing.NewBudget(ctx, \"budget\", \u0026billing.BudgetArgs{\n\t\t\tBillingAccount: *pulumi.String(account.Id),\n\t\t\tDisplayName: pulumi.String(\"Example Billing Budget\"),\n\t\t\tBudgetFilter: \u0026billing.BudgetBudgetFilterArgs{\n\t\t\t\tProjects: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(fmt.Sprintf(\"projects/%v\", project.Number)),\n\t\t\t\t},\n\t\t\t\tCreditTypesTreatment: pulumi.String(\"EXCLUDE_ALL_CREDITS\"),\n\t\t\t\tServices: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"services/24E6-581D-38E5\"),\n\t\t\t\t},\n\t\t\t\tCustomPeriod: \u0026billing.BudgetBudgetFilterCustomPeriodArgs{\n\t\t\t\t\tStartDate: \u0026billing.BudgetBudgetFilterCustomPeriodStartDateArgs{\n\t\t\t\t\t\tYear: pulumi.Int(2022),\n\t\t\t\t\t\tMonth: pulumi.Int(1),\n\t\t\t\t\t\tDay: pulumi.Int(1),\n\t\t\t\t\t},\n\t\t\t\t\tEndDate: \u0026billing.BudgetBudgetFilterCustomPeriodEndDateArgs{\n\t\t\t\t\t\tYear: pulumi.Int(2023),\n\t\t\t\t\t\tMonth: pulumi.Int(12),\n\t\t\t\t\t\tDay: pulumi.Int(31),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tAmount: \u0026billing.BudgetAmountArgs{\n\t\t\t\tSpecifiedAmount: \u0026billing.BudgetAmountSpecifiedAmountArgs{\n\t\t\t\t\tCurrencyCode: pulumi.String(\"USD\"),\n\t\t\t\t\tUnits: pulumi.String(\"100000\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tThresholdRules: billing.BudgetThresholdRuleArray{\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(0.5),\n\t\t\t\t},\n\t\t\t\t\u0026billing.BudgetThresholdRuleArgs{\n\t\t\t\t\tThresholdPercent: pulumi.Float64(0.9),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GetBillingAccountArgs;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.billing.Budget;\nimport com.pulumi.gcp.billing.BudgetArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterCustomPeriodArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterCustomPeriodStartDateArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetBudgetFilterCustomPeriodEndDateArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetAmountSpecifiedAmountArgs;\nimport com.pulumi.gcp.billing.inputs.BudgetThresholdRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 account = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()\n .billingAccount(\"000000-0000000-0000000-000000\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var budget = new Budget(\"budget\", BudgetArgs.builder() \n .billingAccount(account.applyValue(getBillingAccountResult -\u003e getBillingAccountResult.id()))\n .displayName(\"Example Billing Budget\")\n .budgetFilter(BudgetBudgetFilterArgs.builder()\n .projects(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .creditTypesTreatment(\"EXCLUDE_ALL_CREDITS\")\n .services(\"services/24E6-581D-38E5\")\n .customPeriod(BudgetBudgetFilterCustomPeriodArgs.builder()\n .startDate(BudgetBudgetFilterCustomPeriodStartDateArgs.builder()\n .year(2022)\n .month(1)\n .day(1)\n .build())\n .endDate(BudgetBudgetFilterCustomPeriodEndDateArgs.builder()\n .year(2023)\n .month(12)\n .day(31)\n .build())\n .build())\n .build())\n .amount(BudgetAmountArgs.builder()\n .specifiedAmount(BudgetAmountSpecifiedAmountArgs.builder()\n .currencyCode(\"USD\")\n .units(\"100000\")\n .build())\n .build())\n .thresholdRules( \n BudgetThresholdRuleArgs.builder()\n .thresholdPercent(0.5)\n .build(),\n BudgetThresholdRuleArgs.builder()\n .thresholdPercent(0.9)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n budget:\n type: gcp:billing:Budget\n properties:\n billingAccount: ${account.id}\n displayName: Example Billing Budget\n budgetFilter:\n projects:\n - projects/${project.number}\n creditTypesTreatment: EXCLUDE_ALL_CREDITS\n services:\n - services/24E6-581D-38E5\n customPeriod:\n startDate:\n year: 2022\n month: 1\n day: 1\n endDate:\n year: 2023\n month: 12\n day: 31\n amount:\n specifiedAmount:\n currencyCode: USD\n units: '100000'\n thresholdRules:\n - thresholdPercent: 0.5\n - thresholdPercent: 0.9\nvariables:\n account:\n fn::invoke:\n Function: gcp:organizations:getBillingAccount\n Arguments:\n billingAccount: 000000-0000000-0000000-000000\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBudget can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:billing/budget:Budget default billingAccounts/{{billing_account}}/budgets/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:billing/budget:Budget default {{billing_account}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:billing/budget:Budget default {{name}}\n```\n\n ", "properties": { "allUpdatesRule": { "$ref": "#/types/gcp:billing/BudgetAllUpdatesRule:BudgetAllUpdatesRule", @@ -118133,15 +119220,14 @@ } }, "gcp:billing/subAccount:SubAccount": { - "description": "Allows creation and management of a Google Cloud Billing Subaccount.\n\n!\u003e **WARNING:** Deleting this resource will not delete or close the billing subaccount.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst subaccount = new gcp.billing.SubAccount(\"subaccount\", {\n displayName: \"My Billing Account\",\n masterBillingAccount: \"012345-567890-ABCDEF\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsubaccount = gcp.billing.SubAccount(\"subaccount\",\n display_name=\"My Billing Account\",\n master_billing_account=\"012345-567890-ABCDEF\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var subaccount = new Gcp.Billing.SubAccount(\"subaccount\", new()\n {\n DisplayName = \"My Billing Account\",\n MasterBillingAccount = \"012345-567890-ABCDEF\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/billing\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := billing.NewSubAccount(ctx, \"subaccount\", \u0026billing.SubAccountArgs{\n\t\t\tDisplayName: pulumi.String(\"My Billing Account\"),\n\t\t\tMasterBillingAccount: pulumi.String(\"012345-567890-ABCDEF\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.billing.SubAccount;\nimport com.pulumi.gcp.billing.SubAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var subaccount = new SubAccount(\"subaccount\", SubAccountArgs.builder() \n .displayName(\"My Billing Account\")\n .masterBillingAccount(\"012345-567890-ABCDEF\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n subaccount:\n type: gcp:billing:SubAccount\n properties:\n displayName: My Billing Account\n masterBillingAccount: 012345-567890-ABCDEF\n```\n\n\n## Import\n\nBilling Subaccounts can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:billing/subAccount:SubAccount default billingAccounts/{billing_account_id}\n```\n\n ", + "description": "\n\n\n## Import\n\nBilling Subaccounts can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:billing/subAccount:SubAccount default billingAccounts/{billing_account_id}\n```\n\n ", "properties": { "billingAccountId": { "type": "string", "description": "The billing account id.\n" }, "deletionPolicy": { - "type": "string", - "description": "If set to \"RENAME_ON_DESTROY\" the billing account display_name\nwill be changed to \"Destroyed\" along with a timestamp. If set to \"\" this will not occur.\nDefault is \"\".\n" + "type": "string" }, "displayName": { "type": "string", @@ -118169,8 +119255,7 @@ ], "inputProperties": { "deletionPolicy": { - "type": "string", - "description": "If set to \"RENAME_ON_DESTROY\" the billing account display_name\nwill be changed to \"Destroyed\" along with a timestamp. If set to \"\" this will not occur.\nDefault is \"\".\n" + "type": "string" }, "displayName": { "type": "string", @@ -118194,8 +119279,7 @@ "description": "The billing account id.\n" }, "deletionPolicy": { - "type": "string", - "description": "If set to \"RENAME_ON_DESTROY\" the billing account display_name\nwill be changed to \"Destroyed\" along with a timestamp. If set to \"\" this will not occur.\nDefault is \"\".\n" + "type": "string" }, "displayName": { "type": "string", @@ -119437,7 +120521,7 @@ } }, "gcp:certificateauthority/certificate:Certificate": { - "description": "A Certificate corresponds to a signed X.509 certificate issued by a Certificate.\n\n\n\u003e **Note:** The Certificate Authority that is referenced by this resource **must** be\n`tier = \"ENTERPRISE\"`\n\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Privateca Certificate Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test_ca = new gcp.certificateauthority.Authority(\"test-ca\", {\n certificateAuthorityId: \"my-certificate-authority\",\n location: \"us-central1\",\n pool: \"\",\n config: {\n subjectConfig: {\n subject: {\n organization: \"HashiCorp\",\n commonName: \"my-certificate-authority\",\n },\n subjectAltName: {\n dnsNames: [\"hashicorp.com\"],\n },\n },\n x509Config: {\n caOptions: {\n isCa: true,\n },\n keyUsage: {\n baseKeyUsage: {\n certSign: true,\n crlSign: true,\n },\n extendedKeyUsage: {\n serverAuth: true,\n },\n },\n },\n },\n keySpec: {\n algorithm: \"RSA_PKCS1_4096_SHA256\",\n },\n deletionProtection: false,\n skipGracePeriod: true,\n ignoreActiveCertificatesOnDeletion: true,\n});\nconst _default = new gcp.certificateauthority.Certificate(\"default\", {\n pool: \"\",\n location: \"us-central1\",\n certificateAuthority: test_ca.certificateAuthorityId,\n lifetime: \"860s\",\n config: {\n subjectConfig: {\n subject: {\n commonName: \"san1.example.com\",\n countryCode: \"us\",\n organization: \"google\",\n organizationalUnit: \"enterprise\",\n locality: \"mountain view\",\n province: \"california\",\n streetAddress: \"1600 amphitheatre parkway\",\n },\n subjectAltName: {\n emailAddresses: [\"email@example.com\"],\n ipAddresses: [\"127.0.0.1\"],\n uris: [\"http://www.ietf.org/rfc/rfc3986.txt\"],\n },\n },\n x509Config: {\n caOptions: {\n isCa: false,\n },\n keyUsage: {\n baseKeyUsage: {\n crlSign: false,\n decipherOnly: false,\n },\n extendedKeyUsage: {\n serverAuth: false,\n },\n },\n },\n publicKey: {\n format: \"PEM\",\n key: Buffer.from(fs.readFileSync(\"test-fixtures/rsa_public.pem\"), 'binary').toString('base64'),\n },\n },\n});\n```\n```python\nimport pulumi\nimport base64\nimport pulumi_gcp as gcp\n\ntest_ca = gcp.certificateauthority.Authority(\"test-ca\",\n certificate_authority_id=\"my-certificate-authority\",\n location=\"us-central1\",\n pool=\"\",\n config=gcp.certificateauthority.AuthorityConfigArgs(\n subject_config=gcp.certificateauthority.AuthorityConfigSubjectConfigArgs(\n subject=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectArgs(\n organization=\"HashiCorp\",\n common_name=\"my-certificate-authority\",\n ),\n subject_alt_name=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs(\n dns_names=[\"hashicorp.com\"],\n ),\n ),\n x509_config=gcp.certificateauthority.AuthorityConfigX509ConfigArgs(\n ca_options=gcp.certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs(\n is_ca=True,\n ),\n key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs(\n cert_sign=True,\n crl_sign=True,\n ),\n extended_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs(\n server_auth=True,\n ),\n ),\n ),\n ),\n key_spec=gcp.certificateauthority.AuthorityKeySpecArgs(\n algorithm=\"RSA_PKCS1_4096_SHA256\",\n ),\n deletion_protection=False,\n skip_grace_period=True,\n ignore_active_certificates_on_deletion=True)\ndefault = gcp.certificateauthority.Certificate(\"default\",\n pool=\"\",\n location=\"us-central1\",\n certificate_authority=test_ca.certificate_authority_id,\n lifetime=\"860s\",\n config=gcp.certificateauthority.CertificateConfigArgs(\n subject_config=gcp.certificateauthority.CertificateConfigSubjectConfigArgs(\n subject=gcp.certificateauthority.CertificateConfigSubjectConfigSubjectArgs(\n common_name=\"san1.example.com\",\n country_code=\"us\",\n organization=\"google\",\n organizational_unit=\"enterprise\",\n locality=\"mountain view\",\n province=\"california\",\n street_address=\"1600 amphitheatre parkway\",\n ),\n subject_alt_name=gcp.certificateauthority.CertificateConfigSubjectConfigSubjectAltNameArgs(\n email_addresses=[\"email@example.com\"],\n ip_addresses=[\"127.0.0.1\"],\n uris=[\"http://www.ietf.org/rfc/rfc3986.txt\"],\n ),\n ),\n x509_config=gcp.certificateauthority.CertificateConfigX509ConfigArgs(\n ca_options=gcp.certificateauthority.CertificateConfigX509ConfigCaOptionsArgs(\n is_ca=False,\n ),\n key_usage=gcp.certificateauthority.CertificateConfigX509ConfigKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs(\n crl_sign=False,\n decipher_only=False,\n ),\n extended_key_usage=gcp.certificateauthority.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs(\n server_auth=False,\n ),\n ),\n ),\n public_key=gcp.certificateauthority.CertificateConfigPublicKeyArgs(\n format=\"PEM\",\n key=(lambda path: base64.b64encode(open(path).read().encode()).decode())(\"test-fixtures/rsa_public.pem\"),\n ),\n ))\n```\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\n\tprivate static string ReadFileBase64(string path) {\n\t\treturn Convert.ToBase64String(Encoding.UTF8.GetBytes(File.ReadAllText(path)))\n\t}\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test_ca = new Gcp.CertificateAuthority.Authority(\"test-ca\", new()\n {\n CertificateAuthorityId = \"my-certificate-authority\",\n Location = \"us-central1\",\n Pool = \"\",\n Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigArgs\n {\n SubjectConfig = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigArgs\n {\n Subject = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectArgs\n {\n Organization = \"HashiCorp\",\n CommonName = \"my-certificate-authority\",\n },\n SubjectAltName = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs\n {\n DnsNames = new[]\n {\n \"hashicorp.com\",\n },\n },\n },\n X509Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigArgs\n {\n CaOptions = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigCaOptionsArgs\n {\n IsCa = true,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs\n {\n CertSign = true,\n CrlSign = true,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs\n {\n ServerAuth = true,\n },\n },\n },\n },\n KeySpec = new Gcp.CertificateAuthority.Inputs.AuthorityKeySpecArgs\n {\n Algorithm = \"RSA_PKCS1_4096_SHA256\",\n },\n DeletionProtection = false,\n SkipGracePeriod = true,\n IgnoreActiveCertificatesOnDeletion = true,\n });\n\n var @default = new Gcp.CertificateAuthority.Certificate(\"default\", new()\n {\n Pool = \"\",\n Location = \"us-central1\",\n CertificateAuthority = test_ca.CertificateAuthorityId,\n Lifetime = \"860s\",\n Config = new Gcp.CertificateAuthority.Inputs.CertificateConfigArgs\n {\n SubjectConfig = new Gcp.CertificateAuthority.Inputs.CertificateConfigSubjectConfigArgs\n {\n Subject = new Gcp.CertificateAuthority.Inputs.CertificateConfigSubjectConfigSubjectArgs\n {\n CommonName = \"san1.example.com\",\n CountryCode = \"us\",\n Organization = \"google\",\n OrganizationalUnit = \"enterprise\",\n Locality = \"mountain view\",\n Province = \"california\",\n StreetAddress = \"1600 amphitheatre parkway\",\n },\n SubjectAltName = new Gcp.CertificateAuthority.Inputs.CertificateConfigSubjectConfigSubjectAltNameArgs\n {\n EmailAddresses = new[]\n {\n \"email@example.com\",\n },\n IpAddresses = new[]\n {\n \"127.0.0.1\",\n },\n Uris = new[]\n {\n \"http://www.ietf.org/rfc/rfc3986.txt\",\n },\n },\n },\n X509Config = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigArgs\n {\n CaOptions = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigCaOptionsArgs\n {\n IsCa = false,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs\n {\n CrlSign = false,\n DecipherOnly = false,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs\n {\n ServerAuth = false,\n },\n },\n },\n PublicKey = new Gcp.CertificateAuthority.Inputs.CertificateConfigPublicKeyArgs\n {\n Format = \"PEM\",\n Key = ReadFileBase64(\"test-fixtures/rsa_public.pem\"),\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/base64\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/certificateauthority\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := os.ReadFile(path); err == nil {\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(fileData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := certificateauthority.NewAuthority(ctx, \"test-ca\", \u0026certificateauthority.AuthorityArgs{\n\t\t\tCertificateAuthorityId: pulumi.String(\"my-certificate-authority\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tConfig: \u0026certificateauthority.AuthorityConfigArgs{\n\t\t\t\tSubjectConfig: \u0026certificateauthority.AuthorityConfigSubjectConfigArgs{\n\t\t\t\t\tSubject: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectArgs{\n\t\t\t\t\t\tOrganization: pulumi.String(\"HashiCorp\"),\n\t\t\t\t\t\tCommonName: pulumi.String(\"my-certificate-authority\"),\n\t\t\t\t\t},\n\t\t\t\t\tSubjectAltName: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs{\n\t\t\t\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"hashicorp.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tX509Config: \u0026certificateauthority.AuthorityConfigX509ConfigArgs{\n\t\t\t\t\tCaOptions: \u0026certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs{\n\t\t\t\t\t\tIsCa: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs{\n\t\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\t\tCertSign: pulumi.Bool(true),\n\t\t\t\t\t\t\tCrlSign: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tServerAuth: 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\tKeySpec: \u0026certificateauthority.AuthorityKeySpecArgs{\n\t\t\t\tAlgorithm: pulumi.String(\"RSA_PKCS1_4096_SHA256\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tSkipGracePeriod: pulumi.Bool(true),\n\t\t\tIgnoreActiveCertificatesOnDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = certificateauthority.NewCertificate(ctx, \"default\", \u0026certificateauthority.CertificateArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tCertificateAuthority: test_ca.CertificateAuthorityId,\n\t\t\tLifetime: pulumi.String(\"860s\"),\n\t\t\tConfig: \u0026certificateauthority.CertificateConfigArgs{\n\t\t\t\tSubjectConfig: \u0026certificateauthority.CertificateConfigSubjectConfigArgs{\n\t\t\t\t\tSubject: \u0026certificateauthority.CertificateConfigSubjectConfigSubjectArgs{\n\t\t\t\t\t\tCommonName: pulumi.String(\"san1.example.com\"),\n\t\t\t\t\t\tCountryCode: pulumi.String(\"us\"),\n\t\t\t\t\t\tOrganization: pulumi.String(\"google\"),\n\t\t\t\t\t\tOrganizationalUnit: pulumi.String(\"enterprise\"),\n\t\t\t\t\t\tLocality: pulumi.String(\"mountain view\"),\n\t\t\t\t\t\tProvince: pulumi.String(\"california\"),\n\t\t\t\t\t\tStreetAddress: pulumi.String(\"1600 amphitheatre parkway\"),\n\t\t\t\t\t},\n\t\t\t\t\tSubjectAltName: \u0026certificateauthority.CertificateConfigSubjectConfigSubjectAltNameArgs{\n\t\t\t\t\t\tEmailAddresses: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"email@example.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tIpAddresses: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"127.0.0.1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"http://www.ietf.org/rfc/rfc3986.txt\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tX509Config: \u0026certificateauthority.CertificateConfigX509ConfigArgs{\n\t\t\t\t\tCaOptions: \u0026certificateauthority.CertificateConfigX509ConfigCaOptionsArgs{\n\t\t\t\t\t\tIsCa: pulumi.Bool(false),\n\t\t\t\t\t},\n\t\t\t\t\tKeyUsage: \u0026certificateauthority.CertificateConfigX509ConfigKeyUsageArgs{\n\t\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\t\tCrlSign: pulumi.Bool(false),\n\t\t\t\t\t\t\tDecipherOnly: pulumi.Bool(false),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tServerAuth: pulumi.Bool(false),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPublicKey: \u0026certificateauthority.CertificateConfigPublicKeyArgs{\n\t\t\t\t\tFormat: pulumi.String(\"PEM\"),\n\t\t\t\t\tKey: filebase64OrPanic(\"test-fixtures/rsa_public.pem\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.certificateauthority.Authority;\nimport com.pulumi.gcp.certificateauthority.AuthorityArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityKeySpecArgs;\nimport com.pulumi.gcp.certificateauthority.Certificate;\nimport com.pulumi.gcp.certificateauthority.CertificateArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigSubjectConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigSubjectConfigSubjectArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigSubjectConfigSubjectAltNameArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigPublicKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_ca = new Authority(\"test-ca\", AuthorityArgs.builder() \n .certificateAuthorityId(\"my-certificate-authority\")\n .location(\"us-central1\")\n .pool(\"\")\n .config(AuthorityConfigArgs.builder()\n .subjectConfig(AuthorityConfigSubjectConfigArgs.builder()\n .subject(AuthorityConfigSubjectConfigSubjectArgs.builder()\n .organization(\"HashiCorp\")\n .commonName(\"my-certificate-authority\")\n .build())\n .subjectAltName(AuthorityConfigSubjectConfigSubjectAltNameArgs.builder()\n .dnsNames(\"hashicorp.com\")\n .build())\n .build())\n .x509Config(AuthorityConfigX509ConfigArgs.builder()\n .caOptions(AuthorityConfigX509ConfigCaOptionsArgs.builder()\n .isCa(true)\n .build())\n .keyUsage(AuthorityConfigX509ConfigKeyUsageArgs.builder()\n .baseKeyUsage(AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs.builder()\n .certSign(true)\n .crlSign(true)\n .build())\n .extendedKeyUsage(AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs.builder()\n .serverAuth(true)\n .build())\n .build())\n .build())\n .build())\n .keySpec(AuthorityKeySpecArgs.builder()\n .algorithm(\"RSA_PKCS1_4096_SHA256\")\n .build())\n .deletionProtection(false)\n .skipGracePeriod(true)\n .ignoreActiveCertificatesOnDeletion(true)\n .build());\n\n var default_ = new Certificate(\"default\", CertificateArgs.builder() \n .pool(\"\")\n .location(\"us-central1\")\n .certificateAuthority(test_ca.certificateAuthorityId())\n .lifetime(\"860s\")\n .config(CertificateConfigArgs.builder()\n .subjectConfig(CertificateConfigSubjectConfigArgs.builder()\n .subject(CertificateConfigSubjectConfigSubjectArgs.builder()\n .commonName(\"san1.example.com\")\n .countryCode(\"us\")\n .organization(\"google\")\n .organizationalUnit(\"enterprise\")\n .locality(\"mountain view\")\n .province(\"california\")\n .streetAddress(\"1600 amphitheatre parkway\")\n .build())\n .subjectAltName(CertificateConfigSubjectConfigSubjectAltNameArgs.builder()\n .emailAddresses(\"email@example.com\")\n .ipAddresses(\"127.0.0.1\")\n .uris(\"http://www.ietf.org/rfc/rfc3986.txt\")\n .build())\n .build())\n .x509Config(CertificateConfigX509ConfigArgs.builder()\n .caOptions(CertificateConfigX509ConfigCaOptionsArgs.builder()\n .isCa(false)\n .build())\n .keyUsage(CertificateConfigX509ConfigKeyUsageArgs.builder()\n .baseKeyUsage(CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs.builder()\n .crlSign(false)\n .decipherOnly(false)\n .build())\n .extendedKeyUsage(CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs.builder()\n .serverAuth(false)\n .build())\n .build())\n .build())\n .publicKey(CertificateConfigPublicKeyArgs.builder()\n .format(\"PEM\")\n .key(Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(\"test-fixtures/rsa_public.pem\"))))\n .build())\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Privateca Certificate With Template\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst template = new gcp.certificateauthority.CertificateTemplate(\"template\", {\n location: \"us-central1\",\n description: \"An updated sample certificate template\",\n identityConstraints: {\n allowSubjectAltNamesPassthrough: true,\n allowSubjectPassthrough: true,\n celExpression: {\n description: \"Always true\",\n expression: \"true\",\n location: \"any.file.anywhere\",\n title: \"Sample expression\",\n },\n },\n passthroughExtensions: {\n additionalExtensions: [{\n objectIdPaths: [\n 1,\n 6,\n ],\n }],\n knownExtensions: [\"EXTENDED_KEY_USAGE\"],\n },\n predefinedValues: {\n additionalExtensions: [{\n objectId: {\n objectIdPaths: [\n 1,\n 6,\n ],\n },\n value: \"c3RyaW5nCg==\",\n critical: true,\n }],\n aiaOcspServers: [\"string\"],\n caOptions: {\n isCa: false,\n maxIssuerPathLength: 6,\n },\n keyUsage: {\n baseKeyUsage: {\n certSign: false,\n contentCommitment: true,\n crlSign: false,\n dataEncipherment: true,\n decipherOnly: true,\n digitalSignature: true,\n encipherOnly: true,\n keyAgreement: true,\n keyEncipherment: true,\n },\n extendedKeyUsage: {\n clientAuth: true,\n codeSigning: true,\n emailProtection: true,\n ocspSigning: true,\n serverAuth: true,\n timeStamping: true,\n },\n unknownExtendedKeyUsages: [{\n objectIdPaths: [\n 1,\n 6,\n ],\n }],\n },\n policyIds: [{\n objectIdPaths: [\n 1,\n 6,\n ],\n }],\n },\n});\nconst test_ca = new gcp.certificateauthority.Authority(\"test-ca\", {\n pool: \"\",\n certificateAuthorityId: \"my-certificate-authority\",\n location: \"us-central1\",\n config: {\n subjectConfig: {\n subject: {\n organization: \"HashiCorp\",\n commonName: \"my-certificate-authority\",\n },\n subjectAltName: {\n dnsNames: [\"hashicorp.com\"],\n },\n },\n x509Config: {\n caOptions: {\n isCa: true,\n },\n keyUsage: {\n baseKeyUsage: {\n certSign: true,\n crlSign: true,\n },\n extendedKeyUsage: {\n serverAuth: false,\n },\n },\n },\n },\n keySpec: {\n algorithm: \"RSA_PKCS1_4096_SHA256\",\n },\n deletionProtection: false,\n skipGracePeriod: true,\n ignoreActiveCertificatesOnDeletion: true,\n});\nconst _default = new gcp.certificateauthority.Certificate(\"default\", {\n pool: \"\",\n location: \"us-central1\",\n certificateAuthority: test_ca.certificateAuthorityId,\n lifetime: \"860s\",\n pemCsr: fs.readFileSync(\"test-fixtures/rsa_csr.pem\"),\n certificateTemplate: template.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntemplate = gcp.certificateauthority.CertificateTemplate(\"template\",\n location=\"us-central1\",\n description=\"An updated sample certificate template\",\n identity_constraints=gcp.certificateauthority.CertificateTemplateIdentityConstraintsArgs(\n allow_subject_alt_names_passthrough=True,\n allow_subject_passthrough=True,\n cel_expression=gcp.certificateauthority.CertificateTemplateIdentityConstraintsCelExpressionArgs(\n description=\"Always true\",\n expression=\"true\",\n location=\"any.file.anywhere\",\n title=\"Sample expression\",\n ),\n ),\n passthrough_extensions=gcp.certificateauthority.CertificateTemplatePassthroughExtensionsArgs(\n additional_extensions=[gcp.certificateauthority.CertificateTemplatePassthroughExtensionsAdditionalExtensionArgs(\n object_id_paths=[\n 1,\n 6,\n ],\n )],\n known_extensions=[\"EXTENDED_KEY_USAGE\"],\n ),\n predefined_values=gcp.certificateauthority.CertificateTemplatePredefinedValuesArgs(\n additional_extensions=[gcp.certificateauthority.CertificateTemplatePredefinedValuesAdditionalExtensionArgs(\n object_id=gcp.certificateauthority.CertificateTemplatePredefinedValuesAdditionalExtensionObjectIdArgs(\n object_id_paths=[\n 1,\n 6,\n ],\n ),\n value=\"c3RyaW5nCg==\",\n critical=True,\n )],\n aia_ocsp_servers=[\"string\"],\n ca_options=gcp.certificateauthority.CertificateTemplatePredefinedValuesCaOptionsArgs(\n is_ca=False,\n max_issuer_path_length=6,\n ),\n key_usage=gcp.certificateauthority.CertificateTemplatePredefinedValuesKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.CertificateTemplatePredefinedValuesKeyUsageBaseKeyUsageArgs(\n cert_sign=False,\n content_commitment=True,\n crl_sign=False,\n data_encipherment=True,\n decipher_only=True,\n digital_signature=True,\n encipher_only=True,\n key_agreement=True,\n key_encipherment=True,\n ),\n extended_key_usage=gcp.certificateauthority.CertificateTemplatePredefinedValuesKeyUsageExtendedKeyUsageArgs(\n client_auth=True,\n code_signing=True,\n email_protection=True,\n ocsp_signing=True,\n server_auth=True,\n time_stamping=True,\n ),\n unknown_extended_key_usages=[gcp.certificateauthority.CertificateTemplatePredefinedValuesKeyUsageUnknownExtendedKeyUsageArgs(\n object_id_paths=[\n 1,\n 6,\n ],\n )],\n ),\n policy_ids=[gcp.certificateauthority.CertificateTemplatePredefinedValuesPolicyIdArgs(\n object_id_paths=[\n 1,\n 6,\n ],\n )],\n ))\ntest_ca = gcp.certificateauthority.Authority(\"test-ca\",\n pool=\"\",\n certificate_authority_id=\"my-certificate-authority\",\n location=\"us-central1\",\n config=gcp.certificateauthority.AuthorityConfigArgs(\n subject_config=gcp.certificateauthority.AuthorityConfigSubjectConfigArgs(\n subject=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectArgs(\n organization=\"HashiCorp\",\n common_name=\"my-certificate-authority\",\n ),\n subject_alt_name=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs(\n dns_names=[\"hashicorp.com\"],\n ),\n ),\n x509_config=gcp.certificateauthority.AuthorityConfigX509ConfigArgs(\n ca_options=gcp.certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs(\n is_ca=True,\n ),\n key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs(\n cert_sign=True,\n crl_sign=True,\n ),\n extended_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs(\n server_auth=False,\n ),\n ),\n ),\n ),\n key_spec=gcp.certificateauthority.AuthorityKeySpecArgs(\n algorithm=\"RSA_PKCS1_4096_SHA256\",\n ),\n deletion_protection=False,\n skip_grace_period=True,\n ignore_active_certificates_on_deletion=True)\ndefault = gcp.certificateauthority.Certificate(\"default\",\n pool=\"\",\n location=\"us-central1\",\n certificate_authority=test_ca.certificate_authority_id,\n lifetime=\"860s\",\n pem_csr=(lambda path: open(path).read())(\"test-fixtures/rsa_csr.pem\"),\n certificate_template=template.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var template = new Gcp.CertificateAuthority.CertificateTemplate(\"template\", new()\n {\n Location = \"us-central1\",\n Description = \"An updated sample certificate template\",\n IdentityConstraints = new Gcp.CertificateAuthority.Inputs.CertificateTemplateIdentityConstraintsArgs\n {\n AllowSubjectAltNamesPassthrough = true,\n AllowSubjectPassthrough = true,\n CelExpression = new Gcp.CertificateAuthority.Inputs.CertificateTemplateIdentityConstraintsCelExpressionArgs\n {\n Description = \"Always true\",\n Expression = \"true\",\n Location = \"any.file.anywhere\",\n Title = \"Sample expression\",\n },\n },\n PassthroughExtensions = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePassthroughExtensionsArgs\n {\n AdditionalExtensions = new[]\n {\n new Gcp.CertificateAuthority.Inputs.CertificateTemplatePassthroughExtensionsAdditionalExtensionArgs\n {\n ObjectIdPaths = new[]\n {\n 1,\n 6,\n },\n },\n },\n KnownExtensions = new[]\n {\n \"EXTENDED_KEY_USAGE\",\n },\n },\n PredefinedValues = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesArgs\n {\n AdditionalExtensions = new[]\n {\n new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesAdditionalExtensionArgs\n {\n ObjectId = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesAdditionalExtensionObjectIdArgs\n {\n ObjectIdPaths = new[]\n {\n 1,\n 6,\n },\n },\n Value = \"c3RyaW5nCg==\",\n Critical = true,\n },\n },\n AiaOcspServers = new[]\n {\n \"string\",\n },\n CaOptions = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesCaOptionsArgs\n {\n IsCa = false,\n MaxIssuerPathLength = 6,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesKeyUsageBaseKeyUsageArgs\n {\n CertSign = false,\n ContentCommitment = true,\n CrlSign = false,\n DataEncipherment = true,\n DecipherOnly = true,\n DigitalSignature = true,\n EncipherOnly = true,\n KeyAgreement = true,\n KeyEncipherment = true,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesKeyUsageExtendedKeyUsageArgs\n {\n ClientAuth = true,\n CodeSigning = true,\n EmailProtection = true,\n OcspSigning = true,\n ServerAuth = true,\n TimeStamping = true,\n },\n UnknownExtendedKeyUsages = new[]\n {\n new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesKeyUsageUnknownExtendedKeyUsageArgs\n {\n ObjectIdPaths = new[]\n {\n 1,\n 6,\n },\n },\n },\n },\n PolicyIds = new[]\n {\n new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesPolicyIdArgs\n {\n ObjectIdPaths = new[]\n {\n 1,\n 6,\n },\n },\n },\n },\n });\n\n var test_ca = new Gcp.CertificateAuthority.Authority(\"test-ca\", new()\n {\n Pool = \"\",\n CertificateAuthorityId = \"my-certificate-authority\",\n Location = \"us-central1\",\n Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigArgs\n {\n SubjectConfig = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigArgs\n {\n Subject = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectArgs\n {\n Organization = \"HashiCorp\",\n CommonName = \"my-certificate-authority\",\n },\n SubjectAltName = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs\n {\n DnsNames = new[]\n {\n \"hashicorp.com\",\n },\n },\n },\n X509Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigArgs\n {\n CaOptions = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigCaOptionsArgs\n {\n IsCa = true,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs\n {\n CertSign = true,\n CrlSign = true,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs\n {\n ServerAuth = false,\n },\n },\n },\n },\n KeySpec = new Gcp.CertificateAuthority.Inputs.AuthorityKeySpecArgs\n {\n Algorithm = \"RSA_PKCS1_4096_SHA256\",\n },\n DeletionProtection = false,\n SkipGracePeriod = true,\n IgnoreActiveCertificatesOnDeletion = true,\n });\n\n var @default = new Gcp.CertificateAuthority.Certificate(\"default\", new()\n {\n Pool = \"\",\n Location = \"us-central1\",\n CertificateAuthority = test_ca.CertificateAuthorityId,\n Lifetime = \"860s\",\n PemCsr = File.ReadAllText(\"test-fixtures/rsa_csr.pem\"),\n CertificateTemplate = template.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/certificateauthority\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttemplate, err := certificateauthority.NewCertificateTemplate(ctx, \"template\", \u0026certificateauthority.CertificateTemplateArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"An updated sample certificate template\"),\n\t\t\tIdentityConstraints: \u0026certificateauthority.CertificateTemplateIdentityConstraintsArgs{\n\t\t\t\tAllowSubjectAltNamesPassthrough: pulumi.Bool(true),\n\t\t\t\tAllowSubjectPassthrough: pulumi.Bool(true),\n\t\t\t\tCelExpression: \u0026certificateauthority.CertificateTemplateIdentityConstraintsCelExpressionArgs{\n\t\t\t\t\tDescription: pulumi.String(\"Always true\"),\n\t\t\t\t\tExpression: pulumi.String(\"true\"),\n\t\t\t\t\tLocation: pulumi.String(\"any.file.anywhere\"),\n\t\t\t\t\tTitle: pulumi.String(\"Sample expression\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPassthroughExtensions: \u0026certificateauthority.CertificateTemplatePassthroughExtensionsArgs{\n\t\t\t\tAdditionalExtensions: certificateauthority.CertificateTemplatePassthroughExtensionsAdditionalExtensionArray{\n\t\t\t\t\t\u0026certificateauthority.CertificateTemplatePassthroughExtensionsAdditionalExtensionArgs{\n\t\t\t\t\t\tObjectIdPaths: pulumi.IntArray{\n\t\t\t\t\t\t\tpulumi.Int(1),\n\t\t\t\t\t\t\tpulumi.Int(6),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tKnownExtensions: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"EXTENDED_KEY_USAGE\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPredefinedValues: \u0026certificateauthority.CertificateTemplatePredefinedValuesArgs{\n\t\t\t\tAdditionalExtensions: certificateauthority.CertificateTemplatePredefinedValuesAdditionalExtensionArray{\n\t\t\t\t\t\u0026certificateauthority.CertificateTemplatePredefinedValuesAdditionalExtensionArgs{\n\t\t\t\t\t\tObjectId: \u0026certificateauthority.CertificateTemplatePredefinedValuesAdditionalExtensionObjectIdArgs{\n\t\t\t\t\t\t\tObjectIdPaths: pulumi.IntArray{\n\t\t\t\t\t\t\t\tpulumi.Int(1),\n\t\t\t\t\t\t\t\tpulumi.Int(6),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tValue: pulumi.String(\"c3RyaW5nCg==\"),\n\t\t\t\t\t\tCritical: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAiaOcspServers: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"string\"),\n\t\t\t\t},\n\t\t\t\tCaOptions: \u0026certificateauthority.CertificateTemplatePredefinedValuesCaOptionsArgs{\n\t\t\t\t\tIsCa: pulumi.Bool(false),\n\t\t\t\t\tMaxIssuerPathLength: pulumi.Int(6),\n\t\t\t\t},\n\t\t\t\tKeyUsage: \u0026certificateauthority.CertificateTemplatePredefinedValuesKeyUsageArgs{\n\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.CertificateTemplatePredefinedValuesKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\tCertSign: pulumi.Bool(false),\n\t\t\t\t\t\tContentCommitment: pulumi.Bool(true),\n\t\t\t\t\t\tCrlSign: pulumi.Bool(false),\n\t\t\t\t\t\tDataEncipherment: pulumi.Bool(true),\n\t\t\t\t\t\tDecipherOnly: pulumi.Bool(true),\n\t\t\t\t\t\tDigitalSignature: pulumi.Bool(true),\n\t\t\t\t\t\tEncipherOnly: pulumi.Bool(true),\n\t\t\t\t\t\tKeyAgreement: pulumi.Bool(true),\n\t\t\t\t\t\tKeyEncipherment: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.CertificateTemplatePredefinedValuesKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\tClientAuth: pulumi.Bool(true),\n\t\t\t\t\t\tCodeSigning: pulumi.Bool(true),\n\t\t\t\t\t\tEmailProtection: pulumi.Bool(true),\n\t\t\t\t\t\tOcspSigning: pulumi.Bool(true),\n\t\t\t\t\t\tServerAuth: pulumi.Bool(true),\n\t\t\t\t\t\tTimeStamping: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tUnknownExtendedKeyUsages: certificateauthority.CertificateTemplatePredefinedValuesKeyUsageUnknownExtendedKeyUsageArray{\n\t\t\t\t\t\t\u0026certificateauthority.CertificateTemplatePredefinedValuesKeyUsageUnknownExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tObjectIdPaths: pulumi.IntArray{\n\t\t\t\t\t\t\t\tpulumi.Int(1),\n\t\t\t\t\t\t\t\tpulumi.Int(6),\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\tPolicyIds: certificateauthority.CertificateTemplatePredefinedValuesPolicyIdArray{\n\t\t\t\t\t\u0026certificateauthority.CertificateTemplatePredefinedValuesPolicyIdArgs{\n\t\t\t\t\t\tObjectIdPaths: pulumi.IntArray{\n\t\t\t\t\t\t\tpulumi.Int(1),\n\t\t\t\t\t\t\tpulumi.Int(6),\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\t_, err = certificateauthority.NewAuthority(ctx, \"test-ca\", \u0026certificateauthority.AuthorityArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tCertificateAuthorityId: pulumi.String(\"my-certificate-authority\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026certificateauthority.AuthorityConfigArgs{\n\t\t\t\tSubjectConfig: \u0026certificateauthority.AuthorityConfigSubjectConfigArgs{\n\t\t\t\t\tSubject: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectArgs{\n\t\t\t\t\t\tOrganization: pulumi.String(\"HashiCorp\"),\n\t\t\t\t\t\tCommonName: pulumi.String(\"my-certificate-authority\"),\n\t\t\t\t\t},\n\t\t\t\t\tSubjectAltName: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs{\n\t\t\t\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"hashicorp.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tX509Config: \u0026certificateauthority.AuthorityConfigX509ConfigArgs{\n\t\t\t\t\tCaOptions: \u0026certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs{\n\t\t\t\t\t\tIsCa: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs{\n\t\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\t\tCertSign: pulumi.Bool(true),\n\t\t\t\t\t\t\tCrlSign: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tServerAuth: pulumi.Bool(false),\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\tKeySpec: \u0026certificateauthority.AuthorityKeySpecArgs{\n\t\t\t\tAlgorithm: pulumi.String(\"RSA_PKCS1_4096_SHA256\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tSkipGracePeriod: pulumi.Bool(true),\n\t\t\tIgnoreActiveCertificatesOnDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = certificateauthority.NewCertificate(ctx, \"default\", \u0026certificateauthority.CertificateArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tCertificateAuthority: test_ca.CertificateAuthorityId,\n\t\t\tLifetime: pulumi.String(\"860s\"),\n\t\t\tPemCsr: readFileOrPanic(\"test-fixtures/rsa_csr.pem\"),\n\t\t\tCertificateTemplate: template.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.certificateauthority.CertificateTemplate;\nimport com.pulumi.gcp.certificateauthority.CertificateTemplateArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplateIdentityConstraintsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplateIdentityConstraintsCelExpressionArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplatePassthroughExtensionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplatePredefinedValuesArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplatePredefinedValuesCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplatePredefinedValuesKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplatePredefinedValuesKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplatePredefinedValuesKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.Authority;\nimport com.pulumi.gcp.certificateauthority.AuthorityArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityKeySpecArgs;\nimport com.pulumi.gcp.certificateauthority.Certificate;\nimport com.pulumi.gcp.certificateauthority.CertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var template = new CertificateTemplate(\"template\", CertificateTemplateArgs.builder() \n .location(\"us-central1\")\n .description(\"An updated sample certificate template\")\n .identityConstraints(CertificateTemplateIdentityConstraintsArgs.builder()\n .allowSubjectAltNamesPassthrough(true)\n .allowSubjectPassthrough(true)\n .celExpression(CertificateTemplateIdentityConstraintsCelExpressionArgs.builder()\n .description(\"Always true\")\n .expression(\"true\")\n .location(\"any.file.anywhere\")\n .title(\"Sample expression\")\n .build())\n .build())\n .passthroughExtensions(CertificateTemplatePassthroughExtensionsArgs.builder()\n .additionalExtensions(CertificateTemplatePassthroughExtensionsAdditionalExtensionArgs.builder()\n .objectIdPaths( \n 1,\n 6)\n .build())\n .knownExtensions(\"EXTENDED_KEY_USAGE\")\n .build())\n .predefinedValues(CertificateTemplatePredefinedValuesArgs.builder()\n .additionalExtensions(CertificateTemplatePredefinedValuesAdditionalExtensionArgs.builder()\n .objectId(CertificateTemplatePredefinedValuesAdditionalExtensionObjectIdArgs.builder()\n .objectIdPaths( \n 1,\n 6)\n .build())\n .value(\"c3RyaW5nCg==\")\n .critical(true)\n .build())\n .aiaOcspServers(\"string\")\n .caOptions(CertificateTemplatePredefinedValuesCaOptionsArgs.builder()\n .isCa(false)\n .maxIssuerPathLength(6)\n .build())\n .keyUsage(CertificateTemplatePredefinedValuesKeyUsageArgs.builder()\n .baseKeyUsage(CertificateTemplatePredefinedValuesKeyUsageBaseKeyUsageArgs.builder()\n .certSign(false)\n .contentCommitment(true)\n .crlSign(false)\n .dataEncipherment(true)\n .decipherOnly(true)\n .digitalSignature(true)\n .encipherOnly(true)\n .keyAgreement(true)\n .keyEncipherment(true)\n .build())\n .extendedKeyUsage(CertificateTemplatePredefinedValuesKeyUsageExtendedKeyUsageArgs.builder()\n .clientAuth(true)\n .codeSigning(true)\n .emailProtection(true)\n .ocspSigning(true)\n .serverAuth(true)\n .timeStamping(true)\n .build())\n .unknownExtendedKeyUsages(CertificateTemplatePredefinedValuesKeyUsageUnknownExtendedKeyUsageArgs.builder()\n .objectIdPaths( \n 1,\n 6)\n .build())\n .build())\n .policyIds(CertificateTemplatePredefinedValuesPolicyIdArgs.builder()\n .objectIdPaths( \n 1,\n 6)\n .build())\n .build())\n .build());\n\n var test_ca = new Authority(\"test-ca\", AuthorityArgs.builder() \n .pool(\"\")\n .certificateAuthorityId(\"my-certificate-authority\")\n .location(\"us-central1\")\n .config(AuthorityConfigArgs.builder()\n .subjectConfig(AuthorityConfigSubjectConfigArgs.builder()\n .subject(AuthorityConfigSubjectConfigSubjectArgs.builder()\n .organization(\"HashiCorp\")\n .commonName(\"my-certificate-authority\")\n .build())\n .subjectAltName(AuthorityConfigSubjectConfigSubjectAltNameArgs.builder()\n .dnsNames(\"hashicorp.com\")\n .build())\n .build())\n .x509Config(AuthorityConfigX509ConfigArgs.builder()\n .caOptions(AuthorityConfigX509ConfigCaOptionsArgs.builder()\n .isCa(true)\n .build())\n .keyUsage(AuthorityConfigX509ConfigKeyUsageArgs.builder()\n .baseKeyUsage(AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs.builder()\n .certSign(true)\n .crlSign(true)\n .build())\n .extendedKeyUsage(AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs.builder()\n .serverAuth(false)\n .build())\n .build())\n .build())\n .build())\n .keySpec(AuthorityKeySpecArgs.builder()\n .algorithm(\"RSA_PKCS1_4096_SHA256\")\n .build())\n .deletionProtection(false)\n .skipGracePeriod(true)\n .ignoreActiveCertificatesOnDeletion(true)\n .build());\n\n var default_ = new Certificate(\"default\", CertificateArgs.builder() \n .pool(\"\")\n .location(\"us-central1\")\n .certificateAuthority(test_ca.certificateAuthorityId())\n .lifetime(\"860s\")\n .pemCsr(Files.readString(Paths.get(\"test-fixtures/rsa_csr.pem\")))\n .certificateTemplate(template.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n template:\n type: gcp:certificateauthority:CertificateTemplate\n properties:\n location: us-central1\n description: An updated sample certificate template\n identityConstraints:\n allowSubjectAltNamesPassthrough: true\n allowSubjectPassthrough: true\n celExpression:\n description: Always true\n expression: 'true'\n location: any.file.anywhere\n title: Sample expression\n passthroughExtensions:\n additionalExtensions:\n - objectIdPaths:\n - 1\n - 6\n knownExtensions:\n - EXTENDED_KEY_USAGE\n predefinedValues:\n additionalExtensions:\n - objectId:\n objectIdPaths:\n - 1\n - 6\n value: c3RyaW5nCg==\n critical: true\n aiaOcspServers:\n - string\n caOptions:\n isCa: false\n maxIssuerPathLength: 6\n keyUsage:\n baseKeyUsage:\n certSign: false\n contentCommitment: true\n crlSign: false\n dataEncipherment: true\n decipherOnly: true\n digitalSignature: true\n encipherOnly: true\n keyAgreement: true\n keyEncipherment: true\n extendedKeyUsage:\n clientAuth: true\n codeSigning: true\n emailProtection: true\n ocspSigning: true\n serverAuth: true\n timeStamping: true\n unknownExtendedKeyUsages:\n - objectIdPaths:\n - 1\n - 6\n policyIds:\n - objectIdPaths:\n - 1\n - 6\n test-ca:\n type: gcp:certificateauthority:Authority\n properties:\n pool:\n certificateAuthorityId: my-certificate-authority\n location: us-central1\n config:\n subjectConfig:\n subject:\n organization: HashiCorp\n commonName: my-certificate-authority\n subjectAltName:\n dnsNames:\n - hashicorp.com\n x509Config:\n caOptions:\n isCa: true\n keyUsage:\n baseKeyUsage:\n certSign: true\n crlSign: true\n extendedKeyUsage:\n serverAuth: false\n keySpec:\n algorithm: RSA_PKCS1_4096_SHA256\n # Disable CA deletion related safe checks for easier cleanup.\n deletionProtection: false\n skipGracePeriod: true\n ignoreActiveCertificatesOnDeletion: true\n default:\n type: gcp:certificateauthority:Certificate\n properties:\n pool:\n location: us-central1\n certificateAuthority: ${[\"test-ca\"].certificateAuthorityId}\n lifetime: 860s\n pemCsr:\n fn::readFile: test-fixtures/rsa_csr.pem\n certificateTemplate: ${template.id}\n```\n{{% /example %}}\n{{% example %}}\n### Privateca Certificate Csr\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test_ca = new gcp.certificateauthority.Authority(\"test-ca\", {\n pool: \"\",\n certificateAuthorityId: \"my-certificate-authority\",\n location: \"us-central1\",\n config: {\n subjectConfig: {\n subject: {\n organization: \"HashiCorp\",\n commonName: \"my-certificate-authority\",\n },\n subjectAltName: {\n dnsNames: [\"hashicorp.com\"],\n },\n },\n x509Config: {\n caOptions: {\n isCa: true,\n },\n keyUsage: {\n baseKeyUsage: {\n certSign: true,\n crlSign: true,\n },\n extendedKeyUsage: {\n serverAuth: false,\n },\n },\n },\n },\n keySpec: {\n algorithm: \"RSA_PKCS1_4096_SHA256\",\n },\n deletionProtection: false,\n skipGracePeriod: true,\n ignoreActiveCertificatesOnDeletion: true,\n});\nconst _default = new gcp.certificateauthority.Certificate(\"default\", {\n pool: \"\",\n location: \"us-central1\",\n certificateAuthority: test_ca.certificateAuthorityId,\n lifetime: \"860s\",\n pemCsr: fs.readFileSync(\"test-fixtures/rsa_csr.pem\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest_ca = gcp.certificateauthority.Authority(\"test-ca\",\n pool=\"\",\n certificate_authority_id=\"my-certificate-authority\",\n location=\"us-central1\",\n config=gcp.certificateauthority.AuthorityConfigArgs(\n subject_config=gcp.certificateauthority.AuthorityConfigSubjectConfigArgs(\n subject=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectArgs(\n organization=\"HashiCorp\",\n common_name=\"my-certificate-authority\",\n ),\n subject_alt_name=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs(\n dns_names=[\"hashicorp.com\"],\n ),\n ),\n x509_config=gcp.certificateauthority.AuthorityConfigX509ConfigArgs(\n ca_options=gcp.certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs(\n is_ca=True,\n ),\n key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs(\n cert_sign=True,\n crl_sign=True,\n ),\n extended_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs(\n server_auth=False,\n ),\n ),\n ),\n ),\n key_spec=gcp.certificateauthority.AuthorityKeySpecArgs(\n algorithm=\"RSA_PKCS1_4096_SHA256\",\n ),\n deletion_protection=False,\n skip_grace_period=True,\n ignore_active_certificates_on_deletion=True)\ndefault = gcp.certificateauthority.Certificate(\"default\",\n pool=\"\",\n location=\"us-central1\",\n certificate_authority=test_ca.certificate_authority_id,\n lifetime=\"860s\",\n pem_csr=(lambda path: open(path).read())(\"test-fixtures/rsa_csr.pem\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test_ca = new Gcp.CertificateAuthority.Authority(\"test-ca\", new()\n {\n Pool = \"\",\n CertificateAuthorityId = \"my-certificate-authority\",\n Location = \"us-central1\",\n Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigArgs\n {\n SubjectConfig = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigArgs\n {\n Subject = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectArgs\n {\n Organization = \"HashiCorp\",\n CommonName = \"my-certificate-authority\",\n },\n SubjectAltName = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs\n {\n DnsNames = new[]\n {\n \"hashicorp.com\",\n },\n },\n },\n X509Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigArgs\n {\n CaOptions = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigCaOptionsArgs\n {\n IsCa = true,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs\n {\n CertSign = true,\n CrlSign = true,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs\n {\n ServerAuth = false,\n },\n },\n },\n },\n KeySpec = new Gcp.CertificateAuthority.Inputs.AuthorityKeySpecArgs\n {\n Algorithm = \"RSA_PKCS1_4096_SHA256\",\n },\n DeletionProtection = false,\n SkipGracePeriod = true,\n IgnoreActiveCertificatesOnDeletion = true,\n });\n\n var @default = new Gcp.CertificateAuthority.Certificate(\"default\", new()\n {\n Pool = \"\",\n Location = \"us-central1\",\n CertificateAuthority = test_ca.CertificateAuthorityId,\n Lifetime = \"860s\",\n PemCsr = File.ReadAllText(\"test-fixtures/rsa_csr.pem\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/certificateauthority\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := certificateauthority.NewAuthority(ctx, \"test-ca\", \u0026certificateauthority.AuthorityArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tCertificateAuthorityId: pulumi.String(\"my-certificate-authority\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026certificateauthority.AuthorityConfigArgs{\n\t\t\t\tSubjectConfig: \u0026certificateauthority.AuthorityConfigSubjectConfigArgs{\n\t\t\t\t\tSubject: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectArgs{\n\t\t\t\t\t\tOrganization: pulumi.String(\"HashiCorp\"),\n\t\t\t\t\t\tCommonName: pulumi.String(\"my-certificate-authority\"),\n\t\t\t\t\t},\n\t\t\t\t\tSubjectAltName: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs{\n\t\t\t\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"hashicorp.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tX509Config: \u0026certificateauthority.AuthorityConfigX509ConfigArgs{\n\t\t\t\t\tCaOptions: \u0026certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs{\n\t\t\t\t\t\tIsCa: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs{\n\t\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\t\tCertSign: pulumi.Bool(true),\n\t\t\t\t\t\t\tCrlSign: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tServerAuth: pulumi.Bool(false),\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\tKeySpec: \u0026certificateauthority.AuthorityKeySpecArgs{\n\t\t\t\tAlgorithm: pulumi.String(\"RSA_PKCS1_4096_SHA256\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tSkipGracePeriod: pulumi.Bool(true),\n\t\t\tIgnoreActiveCertificatesOnDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = certificateauthority.NewCertificate(ctx, \"default\", \u0026certificateauthority.CertificateArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tCertificateAuthority: test_ca.CertificateAuthorityId,\n\t\t\tLifetime: pulumi.String(\"860s\"),\n\t\t\tPemCsr: readFileOrPanic(\"test-fixtures/rsa_csr.pem\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.certificateauthority.Authority;\nimport com.pulumi.gcp.certificateauthority.AuthorityArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityKeySpecArgs;\nimport com.pulumi.gcp.certificateauthority.Certificate;\nimport com.pulumi.gcp.certificateauthority.CertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_ca = new Authority(\"test-ca\", AuthorityArgs.builder() \n .pool(\"\")\n .certificateAuthorityId(\"my-certificate-authority\")\n .location(\"us-central1\")\n .config(AuthorityConfigArgs.builder()\n .subjectConfig(AuthorityConfigSubjectConfigArgs.builder()\n .subject(AuthorityConfigSubjectConfigSubjectArgs.builder()\n .organization(\"HashiCorp\")\n .commonName(\"my-certificate-authority\")\n .build())\n .subjectAltName(AuthorityConfigSubjectConfigSubjectAltNameArgs.builder()\n .dnsNames(\"hashicorp.com\")\n .build())\n .build())\n .x509Config(AuthorityConfigX509ConfigArgs.builder()\n .caOptions(AuthorityConfigX509ConfigCaOptionsArgs.builder()\n .isCa(true)\n .build())\n .keyUsage(AuthorityConfigX509ConfigKeyUsageArgs.builder()\n .baseKeyUsage(AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs.builder()\n .certSign(true)\n .crlSign(true)\n .build())\n .extendedKeyUsage(AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs.builder()\n .serverAuth(false)\n .build())\n .build())\n .build())\n .build())\n .keySpec(AuthorityKeySpecArgs.builder()\n .algorithm(\"RSA_PKCS1_4096_SHA256\")\n .build())\n .deletionProtection(false)\n .skipGracePeriod(true)\n .ignoreActiveCertificatesOnDeletion(true)\n .build());\n\n var default_ = new Certificate(\"default\", CertificateArgs.builder() \n .pool(\"\")\n .location(\"us-central1\")\n .certificateAuthority(test_ca.certificateAuthorityId())\n .lifetime(\"860s\")\n .pemCsr(Files.readString(Paths.get(\"test-fixtures/rsa_csr.pem\")))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test-ca:\n type: gcp:certificateauthority:Authority\n properties:\n pool:\n certificateAuthorityId: my-certificate-authority\n location: us-central1\n config:\n subjectConfig:\n subject:\n organization: HashiCorp\n commonName: my-certificate-authority\n subjectAltName:\n dnsNames:\n - hashicorp.com\n x509Config:\n caOptions:\n isCa: true\n keyUsage:\n baseKeyUsage:\n certSign: true\n crlSign: true\n extendedKeyUsage:\n serverAuth: false\n keySpec:\n algorithm: RSA_PKCS1_4096_SHA256\n # Disable CA deletion related safe checks for easier cleanup.\n deletionProtection: false\n skipGracePeriod: true\n ignoreActiveCertificatesOnDeletion: true\n default:\n type: gcp:certificateauthority:Certificate\n properties:\n pool:\n location: us-central1\n certificateAuthority: ${[\"test-ca\"].certificateAuthorityId}\n lifetime: 860s\n pemCsr:\n fn::readFile: test-fixtures/rsa_csr.pem\n```\n{{% /example %}}\n{{% example %}}\n### Privateca Certificate No Authority\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst authority = new gcp.certificateauthority.Authority(\"authority\", {\n pool: \"\",\n certificateAuthorityId: \"my-authority\",\n location: \"us-central1\",\n config: {\n subjectConfig: {\n subject: {\n organization: \"HashiCorp\",\n commonName: \"my-certificate-authority\",\n },\n subjectAltName: {\n dnsNames: [\"hashicorp.com\"],\n },\n },\n x509Config: {\n caOptions: {\n isCa: true,\n },\n keyUsage: {\n baseKeyUsage: {\n digitalSignature: true,\n certSign: true,\n crlSign: true,\n },\n extendedKeyUsage: {\n serverAuth: true,\n },\n },\n },\n },\n lifetime: \"86400s\",\n keySpec: {\n algorithm: \"RSA_PKCS1_4096_SHA256\",\n },\n deletionProtection: false,\n skipGracePeriod: true,\n ignoreActiveCertificatesOnDeletion: true,\n});\nconst _default = new gcp.certificateauthority.Certificate(\"default\", {\n pool: \"\",\n location: \"us-central1\",\n lifetime: \"860s\",\n config: {\n subjectConfig: {\n subject: {\n commonName: \"san1.example.com\",\n countryCode: \"us\",\n organization: \"google\",\n organizationalUnit: \"enterprise\",\n locality: \"mountain view\",\n province: \"california\",\n streetAddress: \"1600 amphitheatre parkway\",\n postalCode: \"94109\",\n },\n },\n x509Config: {\n caOptions: {\n isCa: false,\n },\n keyUsage: {\n baseKeyUsage: {\n crlSign: true,\n },\n extendedKeyUsage: {\n serverAuth: true,\n },\n },\n },\n publicKey: {\n format: \"PEM\",\n key: Buffer.from(fs.readFileSync(\"test-fixtures/rsa_public.pem\"), 'binary').toString('base64'),\n },\n },\n}, {\n dependsOn: [authority],\n});\n```\n```python\nimport pulumi\nimport base64\nimport pulumi_gcp as gcp\n\nauthority = gcp.certificateauthority.Authority(\"authority\",\n pool=\"\",\n certificate_authority_id=\"my-authority\",\n location=\"us-central1\",\n config=gcp.certificateauthority.AuthorityConfigArgs(\n subject_config=gcp.certificateauthority.AuthorityConfigSubjectConfigArgs(\n subject=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectArgs(\n organization=\"HashiCorp\",\n common_name=\"my-certificate-authority\",\n ),\n subject_alt_name=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs(\n dns_names=[\"hashicorp.com\"],\n ),\n ),\n x509_config=gcp.certificateauthority.AuthorityConfigX509ConfigArgs(\n ca_options=gcp.certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs(\n is_ca=True,\n ),\n key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs(\n digital_signature=True,\n cert_sign=True,\n crl_sign=True,\n ),\n extended_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs(\n server_auth=True,\n ),\n ),\n ),\n ),\n lifetime=\"86400s\",\n key_spec=gcp.certificateauthority.AuthorityKeySpecArgs(\n algorithm=\"RSA_PKCS1_4096_SHA256\",\n ),\n deletion_protection=False,\n skip_grace_period=True,\n ignore_active_certificates_on_deletion=True)\ndefault = gcp.certificateauthority.Certificate(\"default\",\n pool=\"\",\n location=\"us-central1\",\n lifetime=\"860s\",\n config=gcp.certificateauthority.CertificateConfigArgs(\n subject_config=gcp.certificateauthority.CertificateConfigSubjectConfigArgs(\n subject=gcp.certificateauthority.CertificateConfigSubjectConfigSubjectArgs(\n common_name=\"san1.example.com\",\n country_code=\"us\",\n organization=\"google\",\n organizational_unit=\"enterprise\",\n locality=\"mountain view\",\n province=\"california\",\n street_address=\"1600 amphitheatre parkway\",\n postal_code=\"94109\",\n ),\n ),\n x509_config=gcp.certificateauthority.CertificateConfigX509ConfigArgs(\n ca_options=gcp.certificateauthority.CertificateConfigX509ConfigCaOptionsArgs(\n is_ca=False,\n ),\n key_usage=gcp.certificateauthority.CertificateConfigX509ConfigKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs(\n crl_sign=True,\n ),\n extended_key_usage=gcp.certificateauthority.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs(\n server_auth=True,\n ),\n ),\n ),\n public_key=gcp.certificateauthority.CertificateConfigPublicKeyArgs(\n format=\"PEM\",\n key=(lambda path: base64.b64encode(open(path).read().encode()).decode())(\"test-fixtures/rsa_public.pem\"),\n ),\n ),\n opts=pulumi.ResourceOptions(depends_on=[authority]))\n```\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\n\tprivate static string ReadFileBase64(string path) {\n\t\treturn Convert.ToBase64String(Encoding.UTF8.GetBytes(File.ReadAllText(path)))\n\t}\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var authority = new Gcp.CertificateAuthority.Authority(\"authority\", new()\n {\n Pool = \"\",\n CertificateAuthorityId = \"my-authority\",\n Location = \"us-central1\",\n Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigArgs\n {\n SubjectConfig = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigArgs\n {\n Subject = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectArgs\n {\n Organization = \"HashiCorp\",\n CommonName = \"my-certificate-authority\",\n },\n SubjectAltName = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs\n {\n DnsNames = new[]\n {\n \"hashicorp.com\",\n },\n },\n },\n X509Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigArgs\n {\n CaOptions = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigCaOptionsArgs\n {\n IsCa = true,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs\n {\n DigitalSignature = true,\n CertSign = true,\n CrlSign = true,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs\n {\n ServerAuth = true,\n },\n },\n },\n },\n Lifetime = \"86400s\",\n KeySpec = new Gcp.CertificateAuthority.Inputs.AuthorityKeySpecArgs\n {\n Algorithm = \"RSA_PKCS1_4096_SHA256\",\n },\n DeletionProtection = false,\n SkipGracePeriod = true,\n IgnoreActiveCertificatesOnDeletion = true,\n });\n\n var @default = new Gcp.CertificateAuthority.Certificate(\"default\", new()\n {\n Pool = \"\",\n Location = \"us-central1\",\n Lifetime = \"860s\",\n Config = new Gcp.CertificateAuthority.Inputs.CertificateConfigArgs\n {\n SubjectConfig = new Gcp.CertificateAuthority.Inputs.CertificateConfigSubjectConfigArgs\n {\n Subject = new Gcp.CertificateAuthority.Inputs.CertificateConfigSubjectConfigSubjectArgs\n {\n CommonName = \"san1.example.com\",\n CountryCode = \"us\",\n Organization = \"google\",\n OrganizationalUnit = \"enterprise\",\n Locality = \"mountain view\",\n Province = \"california\",\n StreetAddress = \"1600 amphitheatre parkway\",\n PostalCode = \"94109\",\n },\n },\n X509Config = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigArgs\n {\n CaOptions = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigCaOptionsArgs\n {\n IsCa = false,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs\n {\n CrlSign = true,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs\n {\n ServerAuth = true,\n },\n },\n },\n PublicKey = new Gcp.CertificateAuthority.Inputs.CertificateConfigPublicKeyArgs\n {\n Format = \"PEM\",\n Key = ReadFileBase64(\"test-fixtures/rsa_public.pem\"),\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n authority,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/base64\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/certificateauthority\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := os.ReadFile(path); err == nil {\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(fileData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tauthority, err := certificateauthority.NewAuthority(ctx, \"authority\", \u0026certificateauthority.AuthorityArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tCertificateAuthorityId: pulumi.String(\"my-authority\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026certificateauthority.AuthorityConfigArgs{\n\t\t\t\tSubjectConfig: \u0026certificateauthority.AuthorityConfigSubjectConfigArgs{\n\t\t\t\t\tSubject: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectArgs{\n\t\t\t\t\t\tOrganization: pulumi.String(\"HashiCorp\"),\n\t\t\t\t\t\tCommonName: pulumi.String(\"my-certificate-authority\"),\n\t\t\t\t\t},\n\t\t\t\t\tSubjectAltName: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs{\n\t\t\t\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"hashicorp.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tX509Config: \u0026certificateauthority.AuthorityConfigX509ConfigArgs{\n\t\t\t\t\tCaOptions: \u0026certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs{\n\t\t\t\t\t\tIsCa: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs{\n\t\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\t\tDigitalSignature: pulumi.Bool(true),\n\t\t\t\t\t\t\tCertSign: pulumi.Bool(true),\n\t\t\t\t\t\t\tCrlSign: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tServerAuth: 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\tLifetime: pulumi.String(\"86400s\"),\n\t\t\tKeySpec: \u0026certificateauthority.AuthorityKeySpecArgs{\n\t\t\t\tAlgorithm: pulumi.String(\"RSA_PKCS1_4096_SHA256\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tSkipGracePeriod: pulumi.Bool(true),\n\t\t\tIgnoreActiveCertificatesOnDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = certificateauthority.NewCertificate(ctx, \"default\", \u0026certificateauthority.CertificateArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLifetime: pulumi.String(\"860s\"),\n\t\t\tConfig: \u0026certificateauthority.CertificateConfigArgs{\n\t\t\t\tSubjectConfig: \u0026certificateauthority.CertificateConfigSubjectConfigArgs{\n\t\t\t\t\tSubject: \u0026certificateauthority.CertificateConfigSubjectConfigSubjectArgs{\n\t\t\t\t\t\tCommonName: pulumi.String(\"san1.example.com\"),\n\t\t\t\t\t\tCountryCode: pulumi.String(\"us\"),\n\t\t\t\t\t\tOrganization: pulumi.String(\"google\"),\n\t\t\t\t\t\tOrganizationalUnit: pulumi.String(\"enterprise\"),\n\t\t\t\t\t\tLocality: pulumi.String(\"mountain view\"),\n\t\t\t\t\t\tProvince: pulumi.String(\"california\"),\n\t\t\t\t\t\tStreetAddress: pulumi.String(\"1600 amphitheatre parkway\"),\n\t\t\t\t\t\tPostalCode: pulumi.String(\"94109\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tX509Config: \u0026certificateauthority.CertificateConfigX509ConfigArgs{\n\t\t\t\t\tCaOptions: \u0026certificateauthority.CertificateConfigX509ConfigCaOptionsArgs{\n\t\t\t\t\t\tIsCa: pulumi.Bool(false),\n\t\t\t\t\t},\n\t\t\t\t\tKeyUsage: \u0026certificateauthority.CertificateConfigX509ConfigKeyUsageArgs{\n\t\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\t\tCrlSign: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tServerAuth: 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\tPublicKey: \u0026certificateauthority.CertificateConfigPublicKeyArgs{\n\t\t\t\t\tFormat: pulumi.String(\"PEM\"),\n\t\t\t\t\tKey: filebase64OrPanic(\"test-fixtures/rsa_public.pem\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tauthority,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.certificateauthority.Authority;\nimport com.pulumi.gcp.certificateauthority.AuthorityArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityKeySpecArgs;\nimport com.pulumi.gcp.certificateauthority.Certificate;\nimport com.pulumi.gcp.certificateauthority.CertificateArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigSubjectConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigSubjectConfigSubjectArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigPublicKeyArgs;\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 authority = new Authority(\"authority\", AuthorityArgs.builder() \n .pool(\"\")\n .certificateAuthorityId(\"my-authority\")\n .location(\"us-central1\")\n .config(AuthorityConfigArgs.builder()\n .subjectConfig(AuthorityConfigSubjectConfigArgs.builder()\n .subject(AuthorityConfigSubjectConfigSubjectArgs.builder()\n .organization(\"HashiCorp\")\n .commonName(\"my-certificate-authority\")\n .build())\n .subjectAltName(AuthorityConfigSubjectConfigSubjectAltNameArgs.builder()\n .dnsNames(\"hashicorp.com\")\n .build())\n .build())\n .x509Config(AuthorityConfigX509ConfigArgs.builder()\n .caOptions(AuthorityConfigX509ConfigCaOptionsArgs.builder()\n .isCa(true)\n .build())\n .keyUsage(AuthorityConfigX509ConfigKeyUsageArgs.builder()\n .baseKeyUsage(AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs.builder()\n .digitalSignature(true)\n .certSign(true)\n .crlSign(true)\n .build())\n .extendedKeyUsage(AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs.builder()\n .serverAuth(true)\n .build())\n .build())\n .build())\n .build())\n .lifetime(\"86400s\")\n .keySpec(AuthorityKeySpecArgs.builder()\n .algorithm(\"RSA_PKCS1_4096_SHA256\")\n .build())\n .deletionProtection(false)\n .skipGracePeriod(true)\n .ignoreActiveCertificatesOnDeletion(true)\n .build());\n\n var default_ = new Certificate(\"default\", CertificateArgs.builder() \n .pool(\"\")\n .location(\"us-central1\")\n .lifetime(\"860s\")\n .config(CertificateConfigArgs.builder()\n .subjectConfig(CertificateConfigSubjectConfigArgs.builder()\n .subject(CertificateConfigSubjectConfigSubjectArgs.builder()\n .commonName(\"san1.example.com\")\n .countryCode(\"us\")\n .organization(\"google\")\n .organizationalUnit(\"enterprise\")\n .locality(\"mountain view\")\n .province(\"california\")\n .streetAddress(\"1600 amphitheatre parkway\")\n .postalCode(\"94109\")\n .build())\n .build())\n .x509Config(CertificateConfigX509ConfigArgs.builder()\n .caOptions(CertificateConfigX509ConfigCaOptionsArgs.builder()\n .isCa(false)\n .build())\n .keyUsage(CertificateConfigX509ConfigKeyUsageArgs.builder()\n .baseKeyUsage(CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs.builder()\n .crlSign(true)\n .build())\n .extendedKeyUsage(CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs.builder()\n .serverAuth(true)\n .build())\n .build())\n .build())\n .publicKey(CertificateConfigPublicKeyArgs.builder()\n .format(\"PEM\")\n .key(Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(\"test-fixtures/rsa_public.pem\"))))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(authority)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCertificate can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:certificateauthority/certificate:Certificate default projects/{{project}}/locations/{{location}}/caPools/{{pool}}/certificates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:certificateauthority/certificate:Certificate default {{project}}/{{location}}/{{pool}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:certificateauthority/certificate:Certificate default {{location}}/{{pool}}/{{name}}\n```\n\n ", + "description": "A Certificate corresponds to a signed X.509 certificate issued by a Certificate.\n\n\n\u003e **Note:** The Certificate Authority that is referenced by this resource **must** be \n`tier = \"ENTERPRISE\"`\n\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Privateca Certificate Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test_ca = new gcp.certificateauthority.Authority(\"test-ca\", {\n certificateAuthorityId: \"my-certificate-authority\",\n location: \"us-central1\",\n pool: \"\",\n config: {\n subjectConfig: {\n subject: {\n organization: \"HashiCorp\",\n commonName: \"my-certificate-authority\",\n },\n subjectAltName: {\n dnsNames: [\"hashicorp.com\"],\n },\n },\n x509Config: {\n caOptions: {\n isCa: true,\n },\n keyUsage: {\n baseKeyUsage: {\n certSign: true,\n crlSign: true,\n },\n extendedKeyUsage: {\n serverAuth: true,\n },\n },\n },\n },\n keySpec: {\n algorithm: \"RSA_PKCS1_4096_SHA256\",\n },\n deletionProtection: false,\n skipGracePeriod: true,\n ignoreActiveCertificatesOnDeletion: true,\n});\nconst _default = new gcp.certificateauthority.Certificate(\"default\", {\n pool: \"\",\n location: \"us-central1\",\n certificateAuthority: test_ca.certificateAuthorityId,\n lifetime: \"860s\",\n config: {\n subjectConfig: {\n subject: {\n commonName: \"san1.example.com\",\n countryCode: \"us\",\n organization: \"google\",\n organizationalUnit: \"enterprise\",\n locality: \"mountain view\",\n province: \"california\",\n streetAddress: \"1600 amphitheatre parkway\",\n },\n subjectAltName: {\n emailAddresses: [\"email@example.com\"],\n ipAddresses: [\"127.0.0.1\"],\n uris: [\"http://www.ietf.org/rfc/rfc3986.txt\"],\n },\n },\n x509Config: {\n caOptions: {\n isCa: false,\n },\n keyUsage: {\n baseKeyUsage: {\n crlSign: false,\n decipherOnly: false,\n },\n extendedKeyUsage: {\n serverAuth: false,\n },\n },\n },\n publicKey: {\n format: \"PEM\",\n key: Buffer.from(fs.readFileSync(\"test-fixtures/rsa_public.pem\"), 'binary').toString('base64'),\n },\n },\n});\n```\n```python\nimport pulumi\nimport base64\nimport pulumi_gcp as gcp\n\ntest_ca = gcp.certificateauthority.Authority(\"test-ca\",\n certificate_authority_id=\"my-certificate-authority\",\n location=\"us-central1\",\n pool=\"\",\n config=gcp.certificateauthority.AuthorityConfigArgs(\n subject_config=gcp.certificateauthority.AuthorityConfigSubjectConfigArgs(\n subject=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectArgs(\n organization=\"HashiCorp\",\n common_name=\"my-certificate-authority\",\n ),\n subject_alt_name=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs(\n dns_names=[\"hashicorp.com\"],\n ),\n ),\n x509_config=gcp.certificateauthority.AuthorityConfigX509ConfigArgs(\n ca_options=gcp.certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs(\n is_ca=True,\n ),\n key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs(\n cert_sign=True,\n crl_sign=True,\n ),\n extended_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs(\n server_auth=True,\n ),\n ),\n ),\n ),\n key_spec=gcp.certificateauthority.AuthorityKeySpecArgs(\n algorithm=\"RSA_PKCS1_4096_SHA256\",\n ),\n deletion_protection=False,\n skip_grace_period=True,\n ignore_active_certificates_on_deletion=True)\ndefault = gcp.certificateauthority.Certificate(\"default\",\n pool=\"\",\n location=\"us-central1\",\n certificate_authority=test_ca.certificate_authority_id,\n lifetime=\"860s\",\n config=gcp.certificateauthority.CertificateConfigArgs(\n subject_config=gcp.certificateauthority.CertificateConfigSubjectConfigArgs(\n subject=gcp.certificateauthority.CertificateConfigSubjectConfigSubjectArgs(\n common_name=\"san1.example.com\",\n country_code=\"us\",\n organization=\"google\",\n organizational_unit=\"enterprise\",\n locality=\"mountain view\",\n province=\"california\",\n street_address=\"1600 amphitheatre parkway\",\n ),\n subject_alt_name=gcp.certificateauthority.CertificateConfigSubjectConfigSubjectAltNameArgs(\n email_addresses=[\"email@example.com\"],\n ip_addresses=[\"127.0.0.1\"],\n uris=[\"http://www.ietf.org/rfc/rfc3986.txt\"],\n ),\n ),\n x509_config=gcp.certificateauthority.CertificateConfigX509ConfigArgs(\n ca_options=gcp.certificateauthority.CertificateConfigX509ConfigCaOptionsArgs(\n is_ca=False,\n ),\n key_usage=gcp.certificateauthority.CertificateConfigX509ConfigKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs(\n crl_sign=False,\n decipher_only=False,\n ),\n extended_key_usage=gcp.certificateauthority.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs(\n server_auth=False,\n ),\n ),\n ),\n public_key=gcp.certificateauthority.CertificateConfigPublicKeyArgs(\n format=\"PEM\",\n key=(lambda path: base64.b64encode(open(path).read().encode()).decode())(\"test-fixtures/rsa_public.pem\"),\n ),\n ))\n```\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\n\tprivate static string ReadFileBase64(string path) {\n\t\treturn Convert.ToBase64String(Encoding.UTF8.GetBytes(File.ReadAllText(path)))\n\t}\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test_ca = new Gcp.CertificateAuthority.Authority(\"test-ca\", new()\n {\n CertificateAuthorityId = \"my-certificate-authority\",\n Location = \"us-central1\",\n Pool = \"\",\n Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigArgs\n {\n SubjectConfig = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigArgs\n {\n Subject = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectArgs\n {\n Organization = \"HashiCorp\",\n CommonName = \"my-certificate-authority\",\n },\n SubjectAltName = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs\n {\n DnsNames = new[]\n {\n \"hashicorp.com\",\n },\n },\n },\n X509Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigArgs\n {\n CaOptions = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigCaOptionsArgs\n {\n IsCa = true,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs\n {\n CertSign = true,\n CrlSign = true,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs\n {\n ServerAuth = true,\n },\n },\n },\n },\n KeySpec = new Gcp.CertificateAuthority.Inputs.AuthorityKeySpecArgs\n {\n Algorithm = \"RSA_PKCS1_4096_SHA256\",\n },\n DeletionProtection = false,\n SkipGracePeriod = true,\n IgnoreActiveCertificatesOnDeletion = true,\n });\n\n var @default = new Gcp.CertificateAuthority.Certificate(\"default\", new()\n {\n Pool = \"\",\n Location = \"us-central1\",\n CertificateAuthority = test_ca.CertificateAuthorityId,\n Lifetime = \"860s\",\n Config = new Gcp.CertificateAuthority.Inputs.CertificateConfigArgs\n {\n SubjectConfig = new Gcp.CertificateAuthority.Inputs.CertificateConfigSubjectConfigArgs\n {\n Subject = new Gcp.CertificateAuthority.Inputs.CertificateConfigSubjectConfigSubjectArgs\n {\n CommonName = \"san1.example.com\",\n CountryCode = \"us\",\n Organization = \"google\",\n OrganizationalUnit = \"enterprise\",\n Locality = \"mountain view\",\n Province = \"california\",\n StreetAddress = \"1600 amphitheatre parkway\",\n },\n SubjectAltName = new Gcp.CertificateAuthority.Inputs.CertificateConfigSubjectConfigSubjectAltNameArgs\n {\n EmailAddresses = new[]\n {\n \"email@example.com\",\n },\n IpAddresses = new[]\n {\n \"127.0.0.1\",\n },\n Uris = new[]\n {\n \"http://www.ietf.org/rfc/rfc3986.txt\",\n },\n },\n },\n X509Config = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigArgs\n {\n CaOptions = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigCaOptionsArgs\n {\n IsCa = false,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs\n {\n CrlSign = false,\n DecipherOnly = false,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs\n {\n ServerAuth = false,\n },\n },\n },\n PublicKey = new Gcp.CertificateAuthority.Inputs.CertificateConfigPublicKeyArgs\n {\n Format = \"PEM\",\n Key = ReadFileBase64(\"test-fixtures/rsa_public.pem\"),\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/base64\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/certificateauthority\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := os.ReadFile(path); err == nil {\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(fileData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := certificateauthority.NewAuthority(ctx, \"test-ca\", \u0026certificateauthority.AuthorityArgs{\n\t\t\tCertificateAuthorityId: pulumi.String(\"my-certificate-authority\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tConfig: \u0026certificateauthority.AuthorityConfigArgs{\n\t\t\t\tSubjectConfig: \u0026certificateauthority.AuthorityConfigSubjectConfigArgs{\n\t\t\t\t\tSubject: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectArgs{\n\t\t\t\t\t\tOrganization: pulumi.String(\"HashiCorp\"),\n\t\t\t\t\t\tCommonName: pulumi.String(\"my-certificate-authority\"),\n\t\t\t\t\t},\n\t\t\t\t\tSubjectAltName: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs{\n\t\t\t\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"hashicorp.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tX509Config: \u0026certificateauthority.AuthorityConfigX509ConfigArgs{\n\t\t\t\t\tCaOptions: \u0026certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs{\n\t\t\t\t\t\tIsCa: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs{\n\t\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\t\tCertSign: pulumi.Bool(true),\n\t\t\t\t\t\t\tCrlSign: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tServerAuth: 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\tKeySpec: \u0026certificateauthority.AuthorityKeySpecArgs{\n\t\t\t\tAlgorithm: pulumi.String(\"RSA_PKCS1_4096_SHA256\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tSkipGracePeriod: pulumi.Bool(true),\n\t\t\tIgnoreActiveCertificatesOnDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = certificateauthority.NewCertificate(ctx, \"default\", \u0026certificateauthority.CertificateArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tCertificateAuthority: test_ca.CertificateAuthorityId,\n\t\t\tLifetime: pulumi.String(\"860s\"),\n\t\t\tConfig: \u0026certificateauthority.CertificateConfigArgs{\n\t\t\t\tSubjectConfig: \u0026certificateauthority.CertificateConfigSubjectConfigArgs{\n\t\t\t\t\tSubject: \u0026certificateauthority.CertificateConfigSubjectConfigSubjectArgs{\n\t\t\t\t\t\tCommonName: pulumi.String(\"san1.example.com\"),\n\t\t\t\t\t\tCountryCode: pulumi.String(\"us\"),\n\t\t\t\t\t\tOrganization: pulumi.String(\"google\"),\n\t\t\t\t\t\tOrganizationalUnit: pulumi.String(\"enterprise\"),\n\t\t\t\t\t\tLocality: pulumi.String(\"mountain view\"),\n\t\t\t\t\t\tProvince: pulumi.String(\"california\"),\n\t\t\t\t\t\tStreetAddress: pulumi.String(\"1600 amphitheatre parkway\"),\n\t\t\t\t\t},\n\t\t\t\t\tSubjectAltName: \u0026certificateauthority.CertificateConfigSubjectConfigSubjectAltNameArgs{\n\t\t\t\t\t\tEmailAddresses: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"email@example.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tIpAddresses: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"127.0.0.1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tUris: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"http://www.ietf.org/rfc/rfc3986.txt\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tX509Config: \u0026certificateauthority.CertificateConfigX509ConfigArgs{\n\t\t\t\t\tCaOptions: \u0026certificateauthority.CertificateConfigX509ConfigCaOptionsArgs{\n\t\t\t\t\t\tIsCa: pulumi.Bool(false),\n\t\t\t\t\t},\n\t\t\t\t\tKeyUsage: \u0026certificateauthority.CertificateConfigX509ConfigKeyUsageArgs{\n\t\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\t\tCrlSign: pulumi.Bool(false),\n\t\t\t\t\t\t\tDecipherOnly: pulumi.Bool(false),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tServerAuth: pulumi.Bool(false),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tPublicKey: \u0026certificateauthority.CertificateConfigPublicKeyArgs{\n\t\t\t\t\tFormat: pulumi.String(\"PEM\"),\n\t\t\t\t\tKey: filebase64OrPanic(\"test-fixtures/rsa_public.pem\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.certificateauthority.Authority;\nimport com.pulumi.gcp.certificateauthority.AuthorityArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityKeySpecArgs;\nimport com.pulumi.gcp.certificateauthority.Certificate;\nimport com.pulumi.gcp.certificateauthority.CertificateArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigSubjectConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigSubjectConfigSubjectArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigSubjectConfigSubjectAltNameArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigPublicKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_ca = new Authority(\"test-ca\", AuthorityArgs.builder() \n .certificateAuthorityId(\"my-certificate-authority\")\n .location(\"us-central1\")\n .pool(\"\")\n .config(AuthorityConfigArgs.builder()\n .subjectConfig(AuthorityConfigSubjectConfigArgs.builder()\n .subject(AuthorityConfigSubjectConfigSubjectArgs.builder()\n .organization(\"HashiCorp\")\n .commonName(\"my-certificate-authority\")\n .build())\n .subjectAltName(AuthorityConfigSubjectConfigSubjectAltNameArgs.builder()\n .dnsNames(\"hashicorp.com\")\n .build())\n .build())\n .x509Config(AuthorityConfigX509ConfigArgs.builder()\n .caOptions(AuthorityConfigX509ConfigCaOptionsArgs.builder()\n .isCa(true)\n .build())\n .keyUsage(AuthorityConfigX509ConfigKeyUsageArgs.builder()\n .baseKeyUsage(AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs.builder()\n .certSign(true)\n .crlSign(true)\n .build())\n .extendedKeyUsage(AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs.builder()\n .serverAuth(true)\n .build())\n .build())\n .build())\n .build())\n .keySpec(AuthorityKeySpecArgs.builder()\n .algorithm(\"RSA_PKCS1_4096_SHA256\")\n .build())\n .deletionProtection(false)\n .skipGracePeriod(true)\n .ignoreActiveCertificatesOnDeletion(true)\n .build());\n\n var default_ = new Certificate(\"default\", CertificateArgs.builder() \n .pool(\"\")\n .location(\"us-central1\")\n .certificateAuthority(test_ca.certificateAuthorityId())\n .lifetime(\"860s\")\n .config(CertificateConfigArgs.builder()\n .subjectConfig(CertificateConfigSubjectConfigArgs.builder()\n .subject(CertificateConfigSubjectConfigSubjectArgs.builder()\n .commonName(\"san1.example.com\")\n .countryCode(\"us\")\n .organization(\"google\")\n .organizationalUnit(\"enterprise\")\n .locality(\"mountain view\")\n .province(\"california\")\n .streetAddress(\"1600 amphitheatre parkway\")\n .build())\n .subjectAltName(CertificateConfigSubjectConfigSubjectAltNameArgs.builder()\n .emailAddresses(\"email@example.com\")\n .ipAddresses(\"127.0.0.1\")\n .uris(\"http://www.ietf.org/rfc/rfc3986.txt\")\n .build())\n .build())\n .x509Config(CertificateConfigX509ConfigArgs.builder()\n .caOptions(CertificateConfigX509ConfigCaOptionsArgs.builder()\n .isCa(false)\n .build())\n .keyUsage(CertificateConfigX509ConfigKeyUsageArgs.builder()\n .baseKeyUsage(CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs.builder()\n .crlSign(false)\n .decipherOnly(false)\n .build())\n .extendedKeyUsage(CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs.builder()\n .serverAuth(false)\n .build())\n .build())\n .build())\n .publicKey(CertificateConfigPublicKeyArgs.builder()\n .format(\"PEM\")\n .key(Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(\"test-fixtures/rsa_public.pem\"))))\n .build())\n .build())\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Privateca Certificate With Template\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst template = new gcp.certificateauthority.CertificateTemplate(\"template\", {\n location: \"us-central1\",\n description: \"An updated sample certificate template\",\n identityConstraints: {\n allowSubjectAltNamesPassthrough: true,\n allowSubjectPassthrough: true,\n celExpression: {\n description: \"Always true\",\n expression: \"true\",\n location: \"any.file.anywhere\",\n title: \"Sample expression\",\n },\n },\n passthroughExtensions: {\n additionalExtensions: [{\n objectIdPaths: [\n 1,\n 6,\n ],\n }],\n knownExtensions: [\"EXTENDED_KEY_USAGE\"],\n },\n predefinedValues: {\n additionalExtensions: [{\n objectId: {\n objectIdPaths: [\n 1,\n 6,\n ],\n },\n value: \"c3RyaW5nCg==\",\n critical: true,\n }],\n aiaOcspServers: [\"string\"],\n caOptions: {\n isCa: false,\n maxIssuerPathLength: 6,\n },\n keyUsage: {\n baseKeyUsage: {\n certSign: false,\n contentCommitment: true,\n crlSign: false,\n dataEncipherment: true,\n decipherOnly: true,\n digitalSignature: true,\n encipherOnly: true,\n keyAgreement: true,\n keyEncipherment: true,\n },\n extendedKeyUsage: {\n clientAuth: true,\n codeSigning: true,\n emailProtection: true,\n ocspSigning: true,\n serverAuth: true,\n timeStamping: true,\n },\n unknownExtendedKeyUsages: [{\n objectIdPaths: [\n 1,\n 6,\n ],\n }],\n },\n policyIds: [{\n objectIdPaths: [\n 1,\n 6,\n ],\n }],\n },\n});\nconst test_ca = new gcp.certificateauthority.Authority(\"test-ca\", {\n pool: \"\",\n certificateAuthorityId: \"my-certificate-authority\",\n location: \"us-central1\",\n config: {\n subjectConfig: {\n subject: {\n organization: \"HashiCorp\",\n commonName: \"my-certificate-authority\",\n },\n subjectAltName: {\n dnsNames: [\"hashicorp.com\"],\n },\n },\n x509Config: {\n caOptions: {\n isCa: true,\n },\n keyUsage: {\n baseKeyUsage: {\n certSign: true,\n crlSign: true,\n },\n extendedKeyUsage: {\n serverAuth: false,\n },\n },\n },\n },\n keySpec: {\n algorithm: \"RSA_PKCS1_4096_SHA256\",\n },\n deletionProtection: false,\n skipGracePeriod: true,\n ignoreActiveCertificatesOnDeletion: true,\n});\nconst _default = new gcp.certificateauthority.Certificate(\"default\", {\n pool: \"\",\n location: \"us-central1\",\n certificateAuthority: test_ca.certificateAuthorityId,\n lifetime: \"860s\",\n pemCsr: fs.readFileSync(\"test-fixtures/rsa_csr.pem\"),\n certificateTemplate: template.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntemplate = gcp.certificateauthority.CertificateTemplate(\"template\",\n location=\"us-central1\",\n description=\"An updated sample certificate template\",\n identity_constraints=gcp.certificateauthority.CertificateTemplateIdentityConstraintsArgs(\n allow_subject_alt_names_passthrough=True,\n allow_subject_passthrough=True,\n cel_expression=gcp.certificateauthority.CertificateTemplateIdentityConstraintsCelExpressionArgs(\n description=\"Always true\",\n expression=\"true\",\n location=\"any.file.anywhere\",\n title=\"Sample expression\",\n ),\n ),\n passthrough_extensions=gcp.certificateauthority.CertificateTemplatePassthroughExtensionsArgs(\n additional_extensions=[gcp.certificateauthority.CertificateTemplatePassthroughExtensionsAdditionalExtensionArgs(\n object_id_paths=[\n 1,\n 6,\n ],\n )],\n known_extensions=[\"EXTENDED_KEY_USAGE\"],\n ),\n predefined_values=gcp.certificateauthority.CertificateTemplatePredefinedValuesArgs(\n additional_extensions=[gcp.certificateauthority.CertificateTemplatePredefinedValuesAdditionalExtensionArgs(\n object_id=gcp.certificateauthority.CertificateTemplatePredefinedValuesAdditionalExtensionObjectIdArgs(\n object_id_paths=[\n 1,\n 6,\n ],\n ),\n value=\"c3RyaW5nCg==\",\n critical=True,\n )],\n aia_ocsp_servers=[\"string\"],\n ca_options=gcp.certificateauthority.CertificateTemplatePredefinedValuesCaOptionsArgs(\n is_ca=False,\n max_issuer_path_length=6,\n ),\n key_usage=gcp.certificateauthority.CertificateTemplatePredefinedValuesKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.CertificateTemplatePredefinedValuesKeyUsageBaseKeyUsageArgs(\n cert_sign=False,\n content_commitment=True,\n crl_sign=False,\n data_encipherment=True,\n decipher_only=True,\n digital_signature=True,\n encipher_only=True,\n key_agreement=True,\n key_encipherment=True,\n ),\n extended_key_usage=gcp.certificateauthority.CertificateTemplatePredefinedValuesKeyUsageExtendedKeyUsageArgs(\n client_auth=True,\n code_signing=True,\n email_protection=True,\n ocsp_signing=True,\n server_auth=True,\n time_stamping=True,\n ),\n unknown_extended_key_usages=[gcp.certificateauthority.CertificateTemplatePredefinedValuesKeyUsageUnknownExtendedKeyUsageArgs(\n object_id_paths=[\n 1,\n 6,\n ],\n )],\n ),\n policy_ids=[gcp.certificateauthority.CertificateTemplatePredefinedValuesPolicyIdArgs(\n object_id_paths=[\n 1,\n 6,\n ],\n )],\n ))\ntest_ca = gcp.certificateauthority.Authority(\"test-ca\",\n pool=\"\",\n certificate_authority_id=\"my-certificate-authority\",\n location=\"us-central1\",\n config=gcp.certificateauthority.AuthorityConfigArgs(\n subject_config=gcp.certificateauthority.AuthorityConfigSubjectConfigArgs(\n subject=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectArgs(\n organization=\"HashiCorp\",\n common_name=\"my-certificate-authority\",\n ),\n subject_alt_name=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs(\n dns_names=[\"hashicorp.com\"],\n ),\n ),\n x509_config=gcp.certificateauthority.AuthorityConfigX509ConfigArgs(\n ca_options=gcp.certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs(\n is_ca=True,\n ),\n key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs(\n cert_sign=True,\n crl_sign=True,\n ),\n extended_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs(\n server_auth=False,\n ),\n ),\n ),\n ),\n key_spec=gcp.certificateauthority.AuthorityKeySpecArgs(\n algorithm=\"RSA_PKCS1_4096_SHA256\",\n ),\n deletion_protection=False,\n skip_grace_period=True,\n ignore_active_certificates_on_deletion=True)\ndefault = gcp.certificateauthority.Certificate(\"default\",\n pool=\"\",\n location=\"us-central1\",\n certificate_authority=test_ca.certificate_authority_id,\n lifetime=\"860s\",\n pem_csr=(lambda path: open(path).read())(\"test-fixtures/rsa_csr.pem\"),\n certificate_template=template.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var template = new Gcp.CertificateAuthority.CertificateTemplate(\"template\", new()\n {\n Location = \"us-central1\",\n Description = \"An updated sample certificate template\",\n IdentityConstraints = new Gcp.CertificateAuthority.Inputs.CertificateTemplateIdentityConstraintsArgs\n {\n AllowSubjectAltNamesPassthrough = true,\n AllowSubjectPassthrough = true,\n CelExpression = new Gcp.CertificateAuthority.Inputs.CertificateTemplateIdentityConstraintsCelExpressionArgs\n {\n Description = \"Always true\",\n Expression = \"true\",\n Location = \"any.file.anywhere\",\n Title = \"Sample expression\",\n },\n },\n PassthroughExtensions = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePassthroughExtensionsArgs\n {\n AdditionalExtensions = new[]\n {\n new Gcp.CertificateAuthority.Inputs.CertificateTemplatePassthroughExtensionsAdditionalExtensionArgs\n {\n ObjectIdPaths = new[]\n {\n 1,\n 6,\n },\n },\n },\n KnownExtensions = new[]\n {\n \"EXTENDED_KEY_USAGE\",\n },\n },\n PredefinedValues = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesArgs\n {\n AdditionalExtensions = new[]\n {\n new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesAdditionalExtensionArgs\n {\n ObjectId = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesAdditionalExtensionObjectIdArgs\n {\n ObjectIdPaths = new[]\n {\n 1,\n 6,\n },\n },\n Value = \"c3RyaW5nCg==\",\n Critical = true,\n },\n },\n AiaOcspServers = new[]\n {\n \"string\",\n },\n CaOptions = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesCaOptionsArgs\n {\n IsCa = false,\n MaxIssuerPathLength = 6,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesKeyUsageBaseKeyUsageArgs\n {\n CertSign = false,\n ContentCommitment = true,\n CrlSign = false,\n DataEncipherment = true,\n DecipherOnly = true,\n DigitalSignature = true,\n EncipherOnly = true,\n KeyAgreement = true,\n KeyEncipherment = true,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesKeyUsageExtendedKeyUsageArgs\n {\n ClientAuth = true,\n CodeSigning = true,\n EmailProtection = true,\n OcspSigning = true,\n ServerAuth = true,\n TimeStamping = true,\n },\n UnknownExtendedKeyUsages = new[]\n {\n new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesKeyUsageUnknownExtendedKeyUsageArgs\n {\n ObjectIdPaths = new[]\n {\n 1,\n 6,\n },\n },\n },\n },\n PolicyIds = new[]\n {\n new Gcp.CertificateAuthority.Inputs.CertificateTemplatePredefinedValuesPolicyIdArgs\n {\n ObjectIdPaths = new[]\n {\n 1,\n 6,\n },\n },\n },\n },\n });\n\n var test_ca = new Gcp.CertificateAuthority.Authority(\"test-ca\", new()\n {\n Pool = \"\",\n CertificateAuthorityId = \"my-certificate-authority\",\n Location = \"us-central1\",\n Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigArgs\n {\n SubjectConfig = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigArgs\n {\n Subject = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectArgs\n {\n Organization = \"HashiCorp\",\n CommonName = \"my-certificate-authority\",\n },\n SubjectAltName = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs\n {\n DnsNames = new[]\n {\n \"hashicorp.com\",\n },\n },\n },\n X509Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigArgs\n {\n CaOptions = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigCaOptionsArgs\n {\n IsCa = true,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs\n {\n CertSign = true,\n CrlSign = true,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs\n {\n ServerAuth = false,\n },\n },\n },\n },\n KeySpec = new Gcp.CertificateAuthority.Inputs.AuthorityKeySpecArgs\n {\n Algorithm = \"RSA_PKCS1_4096_SHA256\",\n },\n DeletionProtection = false,\n SkipGracePeriod = true,\n IgnoreActiveCertificatesOnDeletion = true,\n });\n\n var @default = new Gcp.CertificateAuthority.Certificate(\"default\", new()\n {\n Pool = \"\",\n Location = \"us-central1\",\n CertificateAuthority = test_ca.CertificateAuthorityId,\n Lifetime = \"860s\",\n PemCsr = File.ReadAllText(\"test-fixtures/rsa_csr.pem\"),\n CertificateTemplate = template.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/certificateauthority\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\ttemplate, err := certificateauthority.NewCertificateTemplate(ctx, \"template\", \u0026certificateauthority.CertificateTemplateArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"An updated sample certificate template\"),\n\t\t\tIdentityConstraints: \u0026certificateauthority.CertificateTemplateIdentityConstraintsArgs{\n\t\t\t\tAllowSubjectAltNamesPassthrough: pulumi.Bool(true),\n\t\t\t\tAllowSubjectPassthrough: pulumi.Bool(true),\n\t\t\t\tCelExpression: \u0026certificateauthority.CertificateTemplateIdentityConstraintsCelExpressionArgs{\n\t\t\t\t\tDescription: pulumi.String(\"Always true\"),\n\t\t\t\t\tExpression: pulumi.String(\"true\"),\n\t\t\t\t\tLocation: pulumi.String(\"any.file.anywhere\"),\n\t\t\t\t\tTitle: pulumi.String(\"Sample expression\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPassthroughExtensions: \u0026certificateauthority.CertificateTemplatePassthroughExtensionsArgs{\n\t\t\t\tAdditionalExtensions: certificateauthority.CertificateTemplatePassthroughExtensionsAdditionalExtensionArray{\n\t\t\t\t\t\u0026certificateauthority.CertificateTemplatePassthroughExtensionsAdditionalExtensionArgs{\n\t\t\t\t\t\tObjectIdPaths: pulumi.IntArray{\n\t\t\t\t\t\t\tpulumi.Int(1),\n\t\t\t\t\t\t\tpulumi.Int(6),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tKnownExtensions: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"EXTENDED_KEY_USAGE\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPredefinedValues: \u0026certificateauthority.CertificateTemplatePredefinedValuesArgs{\n\t\t\t\tAdditionalExtensions: certificateauthority.CertificateTemplatePredefinedValuesAdditionalExtensionArray{\n\t\t\t\t\t\u0026certificateauthority.CertificateTemplatePredefinedValuesAdditionalExtensionArgs{\n\t\t\t\t\t\tObjectId: \u0026certificateauthority.CertificateTemplatePredefinedValuesAdditionalExtensionObjectIdArgs{\n\t\t\t\t\t\t\tObjectIdPaths: pulumi.IntArray{\n\t\t\t\t\t\t\t\tpulumi.Int(1),\n\t\t\t\t\t\t\t\tpulumi.Int(6),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tValue: pulumi.String(\"c3RyaW5nCg==\"),\n\t\t\t\t\t\tCritical: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tAiaOcspServers: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"string\"),\n\t\t\t\t},\n\t\t\t\tCaOptions: \u0026certificateauthority.CertificateTemplatePredefinedValuesCaOptionsArgs{\n\t\t\t\t\tIsCa: pulumi.Bool(false),\n\t\t\t\t\tMaxIssuerPathLength: pulumi.Int(6),\n\t\t\t\t},\n\t\t\t\tKeyUsage: \u0026certificateauthority.CertificateTemplatePredefinedValuesKeyUsageArgs{\n\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.CertificateTemplatePredefinedValuesKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\tCertSign: pulumi.Bool(false),\n\t\t\t\t\t\tContentCommitment: pulumi.Bool(true),\n\t\t\t\t\t\tCrlSign: pulumi.Bool(false),\n\t\t\t\t\t\tDataEncipherment: pulumi.Bool(true),\n\t\t\t\t\t\tDecipherOnly: pulumi.Bool(true),\n\t\t\t\t\t\tDigitalSignature: pulumi.Bool(true),\n\t\t\t\t\t\tEncipherOnly: pulumi.Bool(true),\n\t\t\t\t\t\tKeyAgreement: pulumi.Bool(true),\n\t\t\t\t\t\tKeyEncipherment: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.CertificateTemplatePredefinedValuesKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\tClientAuth: pulumi.Bool(true),\n\t\t\t\t\t\tCodeSigning: pulumi.Bool(true),\n\t\t\t\t\t\tEmailProtection: pulumi.Bool(true),\n\t\t\t\t\t\tOcspSigning: pulumi.Bool(true),\n\t\t\t\t\t\tServerAuth: pulumi.Bool(true),\n\t\t\t\t\t\tTimeStamping: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tUnknownExtendedKeyUsages: certificateauthority.CertificateTemplatePredefinedValuesKeyUsageUnknownExtendedKeyUsageArray{\n\t\t\t\t\t\t\u0026certificateauthority.CertificateTemplatePredefinedValuesKeyUsageUnknownExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tObjectIdPaths: pulumi.IntArray{\n\t\t\t\t\t\t\t\tpulumi.Int(1),\n\t\t\t\t\t\t\t\tpulumi.Int(6),\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\tPolicyIds: certificateauthority.CertificateTemplatePredefinedValuesPolicyIdArray{\n\t\t\t\t\t\u0026certificateauthority.CertificateTemplatePredefinedValuesPolicyIdArgs{\n\t\t\t\t\t\tObjectIdPaths: pulumi.IntArray{\n\t\t\t\t\t\t\tpulumi.Int(1),\n\t\t\t\t\t\t\tpulumi.Int(6),\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\t_, err = certificateauthority.NewAuthority(ctx, \"test-ca\", \u0026certificateauthority.AuthorityArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tCertificateAuthorityId: pulumi.String(\"my-certificate-authority\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026certificateauthority.AuthorityConfigArgs{\n\t\t\t\tSubjectConfig: \u0026certificateauthority.AuthorityConfigSubjectConfigArgs{\n\t\t\t\t\tSubject: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectArgs{\n\t\t\t\t\t\tOrganization: pulumi.String(\"HashiCorp\"),\n\t\t\t\t\t\tCommonName: pulumi.String(\"my-certificate-authority\"),\n\t\t\t\t\t},\n\t\t\t\t\tSubjectAltName: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs{\n\t\t\t\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"hashicorp.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tX509Config: \u0026certificateauthority.AuthorityConfigX509ConfigArgs{\n\t\t\t\t\tCaOptions: \u0026certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs{\n\t\t\t\t\t\tIsCa: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs{\n\t\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\t\tCertSign: pulumi.Bool(true),\n\t\t\t\t\t\t\tCrlSign: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tServerAuth: pulumi.Bool(false),\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\tKeySpec: \u0026certificateauthority.AuthorityKeySpecArgs{\n\t\t\t\tAlgorithm: pulumi.String(\"RSA_PKCS1_4096_SHA256\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tSkipGracePeriod: pulumi.Bool(true),\n\t\t\tIgnoreActiveCertificatesOnDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = certificateauthority.NewCertificate(ctx, \"default\", \u0026certificateauthority.CertificateArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tCertificateAuthority: test_ca.CertificateAuthorityId,\n\t\t\tLifetime: pulumi.String(\"860s\"),\n\t\t\tPemCsr: readFileOrPanic(\"test-fixtures/rsa_csr.pem\"),\n\t\t\tCertificateTemplate: template.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.certificateauthority.CertificateTemplate;\nimport com.pulumi.gcp.certificateauthority.CertificateTemplateArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplateIdentityConstraintsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplateIdentityConstraintsCelExpressionArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplatePassthroughExtensionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplatePredefinedValuesArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplatePredefinedValuesCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplatePredefinedValuesKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplatePredefinedValuesKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateTemplatePredefinedValuesKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.Authority;\nimport com.pulumi.gcp.certificateauthority.AuthorityArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityKeySpecArgs;\nimport com.pulumi.gcp.certificateauthority.Certificate;\nimport com.pulumi.gcp.certificateauthority.CertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var template = new CertificateTemplate(\"template\", CertificateTemplateArgs.builder() \n .location(\"us-central1\")\n .description(\"An updated sample certificate template\")\n .identityConstraints(CertificateTemplateIdentityConstraintsArgs.builder()\n .allowSubjectAltNamesPassthrough(true)\n .allowSubjectPassthrough(true)\n .celExpression(CertificateTemplateIdentityConstraintsCelExpressionArgs.builder()\n .description(\"Always true\")\n .expression(\"true\")\n .location(\"any.file.anywhere\")\n .title(\"Sample expression\")\n .build())\n .build())\n .passthroughExtensions(CertificateTemplatePassthroughExtensionsArgs.builder()\n .additionalExtensions(CertificateTemplatePassthroughExtensionsAdditionalExtensionArgs.builder()\n .objectIdPaths( \n 1,\n 6)\n .build())\n .knownExtensions(\"EXTENDED_KEY_USAGE\")\n .build())\n .predefinedValues(CertificateTemplatePredefinedValuesArgs.builder()\n .additionalExtensions(CertificateTemplatePredefinedValuesAdditionalExtensionArgs.builder()\n .objectId(CertificateTemplatePredefinedValuesAdditionalExtensionObjectIdArgs.builder()\n .objectIdPaths( \n 1,\n 6)\n .build())\n .value(\"c3RyaW5nCg==\")\n .critical(true)\n .build())\n .aiaOcspServers(\"string\")\n .caOptions(CertificateTemplatePredefinedValuesCaOptionsArgs.builder()\n .isCa(false)\n .maxIssuerPathLength(6)\n .build())\n .keyUsage(CertificateTemplatePredefinedValuesKeyUsageArgs.builder()\n .baseKeyUsage(CertificateTemplatePredefinedValuesKeyUsageBaseKeyUsageArgs.builder()\n .certSign(false)\n .contentCommitment(true)\n .crlSign(false)\n .dataEncipherment(true)\n .decipherOnly(true)\n .digitalSignature(true)\n .encipherOnly(true)\n .keyAgreement(true)\n .keyEncipherment(true)\n .build())\n .extendedKeyUsage(CertificateTemplatePredefinedValuesKeyUsageExtendedKeyUsageArgs.builder()\n .clientAuth(true)\n .codeSigning(true)\n .emailProtection(true)\n .ocspSigning(true)\n .serverAuth(true)\n .timeStamping(true)\n .build())\n .unknownExtendedKeyUsages(CertificateTemplatePredefinedValuesKeyUsageUnknownExtendedKeyUsageArgs.builder()\n .objectIdPaths( \n 1,\n 6)\n .build())\n .build())\n .policyIds(CertificateTemplatePredefinedValuesPolicyIdArgs.builder()\n .objectIdPaths( \n 1,\n 6)\n .build())\n .build())\n .build());\n\n var test_ca = new Authority(\"test-ca\", AuthorityArgs.builder() \n .pool(\"\")\n .certificateAuthorityId(\"my-certificate-authority\")\n .location(\"us-central1\")\n .config(AuthorityConfigArgs.builder()\n .subjectConfig(AuthorityConfigSubjectConfigArgs.builder()\n .subject(AuthorityConfigSubjectConfigSubjectArgs.builder()\n .organization(\"HashiCorp\")\n .commonName(\"my-certificate-authority\")\n .build())\n .subjectAltName(AuthorityConfigSubjectConfigSubjectAltNameArgs.builder()\n .dnsNames(\"hashicorp.com\")\n .build())\n .build())\n .x509Config(AuthorityConfigX509ConfigArgs.builder()\n .caOptions(AuthorityConfigX509ConfigCaOptionsArgs.builder()\n .isCa(true)\n .build())\n .keyUsage(AuthorityConfigX509ConfigKeyUsageArgs.builder()\n .baseKeyUsage(AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs.builder()\n .certSign(true)\n .crlSign(true)\n .build())\n .extendedKeyUsage(AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs.builder()\n .serverAuth(false)\n .build())\n .build())\n .build())\n .build())\n .keySpec(AuthorityKeySpecArgs.builder()\n .algorithm(\"RSA_PKCS1_4096_SHA256\")\n .build())\n .deletionProtection(false)\n .skipGracePeriod(true)\n .ignoreActiveCertificatesOnDeletion(true)\n .build());\n\n var default_ = new Certificate(\"default\", CertificateArgs.builder() \n .pool(\"\")\n .location(\"us-central1\")\n .certificateAuthority(test_ca.certificateAuthorityId())\n .lifetime(\"860s\")\n .pemCsr(Files.readString(Paths.get(\"test-fixtures/rsa_csr.pem\")))\n .certificateTemplate(template.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n template:\n type: gcp:certificateauthority:CertificateTemplate\n properties:\n location: us-central1\n description: An updated sample certificate template\n identityConstraints:\n allowSubjectAltNamesPassthrough: true\n allowSubjectPassthrough: true\n celExpression:\n description: Always true\n expression: 'true'\n location: any.file.anywhere\n title: Sample expression\n passthroughExtensions:\n additionalExtensions:\n - objectIdPaths:\n - 1\n - 6\n knownExtensions:\n - EXTENDED_KEY_USAGE\n predefinedValues:\n additionalExtensions:\n - objectId:\n objectIdPaths:\n - 1\n - 6\n value: c3RyaW5nCg==\n critical: true\n aiaOcspServers:\n - string\n caOptions:\n isCa: false\n maxIssuerPathLength: 6\n keyUsage:\n baseKeyUsage:\n certSign: false\n contentCommitment: true\n crlSign: false\n dataEncipherment: true\n decipherOnly: true\n digitalSignature: true\n encipherOnly: true\n keyAgreement: true\n keyEncipherment: true\n extendedKeyUsage:\n clientAuth: true\n codeSigning: true\n emailProtection: true\n ocspSigning: true\n serverAuth: true\n timeStamping: true\n unknownExtendedKeyUsages:\n - objectIdPaths:\n - 1\n - 6\n policyIds:\n - objectIdPaths:\n - 1\n - 6\n test-ca:\n type: gcp:certificateauthority:Authority\n properties:\n pool:\n certificateAuthorityId: my-certificate-authority\n location: us-central1\n config:\n subjectConfig:\n subject:\n organization: HashiCorp\n commonName: my-certificate-authority\n subjectAltName:\n dnsNames:\n - hashicorp.com\n x509Config:\n caOptions:\n isCa: true\n keyUsage:\n baseKeyUsage:\n certSign: true\n crlSign: true\n extendedKeyUsage:\n serverAuth: false\n keySpec:\n algorithm: RSA_PKCS1_4096_SHA256\n # Disable CA deletion related safe checks for easier cleanup.\n deletionProtection: false\n skipGracePeriod: true\n ignoreActiveCertificatesOnDeletion: true\n default:\n type: gcp:certificateauthority:Certificate\n properties:\n pool:\n location: us-central1\n certificateAuthority: ${[\"test-ca\"].certificateAuthorityId}\n lifetime: 860s\n pemCsr:\n fn::readFile: test-fixtures/rsa_csr.pem\n certificateTemplate: ${template.id}\n```\n{{% /example %}}\n{{% example %}}\n### Privateca Certificate Csr\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test_ca = new gcp.certificateauthority.Authority(\"test-ca\", {\n pool: \"\",\n certificateAuthorityId: \"my-certificate-authority\",\n location: \"us-central1\",\n config: {\n subjectConfig: {\n subject: {\n organization: \"HashiCorp\",\n commonName: \"my-certificate-authority\",\n },\n subjectAltName: {\n dnsNames: [\"hashicorp.com\"],\n },\n },\n x509Config: {\n caOptions: {\n isCa: true,\n },\n keyUsage: {\n baseKeyUsage: {\n certSign: true,\n crlSign: true,\n },\n extendedKeyUsage: {\n serverAuth: false,\n },\n },\n },\n },\n keySpec: {\n algorithm: \"RSA_PKCS1_4096_SHA256\",\n },\n deletionProtection: false,\n skipGracePeriod: true,\n ignoreActiveCertificatesOnDeletion: true,\n});\nconst _default = new gcp.certificateauthority.Certificate(\"default\", {\n pool: \"\",\n location: \"us-central1\",\n certificateAuthority: test_ca.certificateAuthorityId,\n lifetime: \"860s\",\n pemCsr: fs.readFileSync(\"test-fixtures/rsa_csr.pem\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest_ca = gcp.certificateauthority.Authority(\"test-ca\",\n pool=\"\",\n certificate_authority_id=\"my-certificate-authority\",\n location=\"us-central1\",\n config=gcp.certificateauthority.AuthorityConfigArgs(\n subject_config=gcp.certificateauthority.AuthorityConfigSubjectConfigArgs(\n subject=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectArgs(\n organization=\"HashiCorp\",\n common_name=\"my-certificate-authority\",\n ),\n subject_alt_name=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs(\n dns_names=[\"hashicorp.com\"],\n ),\n ),\n x509_config=gcp.certificateauthority.AuthorityConfigX509ConfigArgs(\n ca_options=gcp.certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs(\n is_ca=True,\n ),\n key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs(\n cert_sign=True,\n crl_sign=True,\n ),\n extended_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs(\n server_auth=False,\n ),\n ),\n ),\n ),\n key_spec=gcp.certificateauthority.AuthorityKeySpecArgs(\n algorithm=\"RSA_PKCS1_4096_SHA256\",\n ),\n deletion_protection=False,\n skip_grace_period=True,\n ignore_active_certificates_on_deletion=True)\ndefault = gcp.certificateauthority.Certificate(\"default\",\n pool=\"\",\n location=\"us-central1\",\n certificate_authority=test_ca.certificate_authority_id,\n lifetime=\"860s\",\n pem_csr=(lambda path: open(path).read())(\"test-fixtures/rsa_csr.pem\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test_ca = new Gcp.CertificateAuthority.Authority(\"test-ca\", new()\n {\n Pool = \"\",\n CertificateAuthorityId = \"my-certificate-authority\",\n Location = \"us-central1\",\n Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigArgs\n {\n SubjectConfig = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigArgs\n {\n Subject = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectArgs\n {\n Organization = \"HashiCorp\",\n CommonName = \"my-certificate-authority\",\n },\n SubjectAltName = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs\n {\n DnsNames = new[]\n {\n \"hashicorp.com\",\n },\n },\n },\n X509Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigArgs\n {\n CaOptions = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigCaOptionsArgs\n {\n IsCa = true,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs\n {\n CertSign = true,\n CrlSign = true,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs\n {\n ServerAuth = false,\n },\n },\n },\n },\n KeySpec = new Gcp.CertificateAuthority.Inputs.AuthorityKeySpecArgs\n {\n Algorithm = \"RSA_PKCS1_4096_SHA256\",\n },\n DeletionProtection = false,\n SkipGracePeriod = true,\n IgnoreActiveCertificatesOnDeletion = true,\n });\n\n var @default = new Gcp.CertificateAuthority.Certificate(\"default\", new()\n {\n Pool = \"\",\n Location = \"us-central1\",\n CertificateAuthority = test_ca.CertificateAuthorityId,\n Lifetime = \"860s\",\n PemCsr = File.ReadAllText(\"test-fixtures/rsa_csr.pem\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/certificateauthority\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := certificateauthority.NewAuthority(ctx, \"test-ca\", \u0026certificateauthority.AuthorityArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tCertificateAuthorityId: pulumi.String(\"my-certificate-authority\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026certificateauthority.AuthorityConfigArgs{\n\t\t\t\tSubjectConfig: \u0026certificateauthority.AuthorityConfigSubjectConfigArgs{\n\t\t\t\t\tSubject: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectArgs{\n\t\t\t\t\t\tOrganization: pulumi.String(\"HashiCorp\"),\n\t\t\t\t\t\tCommonName: pulumi.String(\"my-certificate-authority\"),\n\t\t\t\t\t},\n\t\t\t\t\tSubjectAltName: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs{\n\t\t\t\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"hashicorp.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tX509Config: \u0026certificateauthority.AuthorityConfigX509ConfigArgs{\n\t\t\t\t\tCaOptions: \u0026certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs{\n\t\t\t\t\t\tIsCa: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs{\n\t\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\t\tCertSign: pulumi.Bool(true),\n\t\t\t\t\t\t\tCrlSign: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tServerAuth: pulumi.Bool(false),\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\tKeySpec: \u0026certificateauthority.AuthorityKeySpecArgs{\n\t\t\t\tAlgorithm: pulumi.String(\"RSA_PKCS1_4096_SHA256\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tSkipGracePeriod: pulumi.Bool(true),\n\t\t\tIgnoreActiveCertificatesOnDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = certificateauthority.NewCertificate(ctx, \"default\", \u0026certificateauthority.CertificateArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tCertificateAuthority: test_ca.CertificateAuthorityId,\n\t\t\tLifetime: pulumi.String(\"860s\"),\n\t\t\tPemCsr: readFileOrPanic(\"test-fixtures/rsa_csr.pem\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.certificateauthority.Authority;\nimport com.pulumi.gcp.certificateauthority.AuthorityArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityKeySpecArgs;\nimport com.pulumi.gcp.certificateauthority.Certificate;\nimport com.pulumi.gcp.certificateauthority.CertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_ca = new Authority(\"test-ca\", AuthorityArgs.builder() \n .pool(\"\")\n .certificateAuthorityId(\"my-certificate-authority\")\n .location(\"us-central1\")\n .config(AuthorityConfigArgs.builder()\n .subjectConfig(AuthorityConfigSubjectConfigArgs.builder()\n .subject(AuthorityConfigSubjectConfigSubjectArgs.builder()\n .organization(\"HashiCorp\")\n .commonName(\"my-certificate-authority\")\n .build())\n .subjectAltName(AuthorityConfigSubjectConfigSubjectAltNameArgs.builder()\n .dnsNames(\"hashicorp.com\")\n .build())\n .build())\n .x509Config(AuthorityConfigX509ConfigArgs.builder()\n .caOptions(AuthorityConfigX509ConfigCaOptionsArgs.builder()\n .isCa(true)\n .build())\n .keyUsage(AuthorityConfigX509ConfigKeyUsageArgs.builder()\n .baseKeyUsage(AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs.builder()\n .certSign(true)\n .crlSign(true)\n .build())\n .extendedKeyUsage(AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs.builder()\n .serverAuth(false)\n .build())\n .build())\n .build())\n .build())\n .keySpec(AuthorityKeySpecArgs.builder()\n .algorithm(\"RSA_PKCS1_4096_SHA256\")\n .build())\n .deletionProtection(false)\n .skipGracePeriod(true)\n .ignoreActiveCertificatesOnDeletion(true)\n .build());\n\n var default_ = new Certificate(\"default\", CertificateArgs.builder() \n .pool(\"\")\n .location(\"us-central1\")\n .certificateAuthority(test_ca.certificateAuthorityId())\n .lifetime(\"860s\")\n .pemCsr(Files.readString(Paths.get(\"test-fixtures/rsa_csr.pem\")))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test-ca:\n type: gcp:certificateauthority:Authority\n properties:\n pool:\n certificateAuthorityId: my-certificate-authority\n location: us-central1\n config:\n subjectConfig:\n subject:\n organization: HashiCorp\n commonName: my-certificate-authority\n subjectAltName:\n dnsNames:\n - hashicorp.com\n x509Config:\n caOptions:\n isCa: true\n keyUsage:\n baseKeyUsage:\n certSign: true\n crlSign: true\n extendedKeyUsage:\n serverAuth: false\n keySpec:\n algorithm: RSA_PKCS1_4096_SHA256\n # Disable CA deletion related safe checks for easier cleanup.\n deletionProtection: false\n skipGracePeriod: true\n ignoreActiveCertificatesOnDeletion: true\n default:\n type: gcp:certificateauthority:Certificate\n properties:\n pool:\n location: us-central1\n certificateAuthority: ${[\"test-ca\"].certificateAuthorityId}\n lifetime: 860s\n pemCsr:\n fn::readFile: test-fixtures/rsa_csr.pem\n```\n{{% /example %}}\n{{% example %}}\n### Privateca Certificate No Authority\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst authority = new gcp.certificateauthority.Authority(\"authority\", {\n pool: \"\",\n certificateAuthorityId: \"my-authority\",\n location: \"us-central1\",\n config: {\n subjectConfig: {\n subject: {\n organization: \"HashiCorp\",\n commonName: \"my-certificate-authority\",\n },\n subjectAltName: {\n dnsNames: [\"hashicorp.com\"],\n },\n },\n x509Config: {\n caOptions: {\n isCa: true,\n },\n keyUsage: {\n baseKeyUsage: {\n digitalSignature: true,\n certSign: true,\n crlSign: true,\n },\n extendedKeyUsage: {\n serverAuth: true,\n },\n },\n },\n },\n lifetime: \"86400s\",\n keySpec: {\n algorithm: \"RSA_PKCS1_4096_SHA256\",\n },\n deletionProtection: false,\n skipGracePeriod: true,\n ignoreActiveCertificatesOnDeletion: true,\n});\nconst _default = new gcp.certificateauthority.Certificate(\"default\", {\n pool: \"\",\n location: \"us-central1\",\n lifetime: \"860s\",\n config: {\n subjectConfig: {\n subject: {\n commonName: \"san1.example.com\",\n countryCode: \"us\",\n organization: \"google\",\n organizationalUnit: \"enterprise\",\n locality: \"mountain view\",\n province: \"california\",\n streetAddress: \"1600 amphitheatre parkway\",\n postalCode: \"94109\",\n },\n },\n x509Config: {\n caOptions: {\n isCa: false,\n },\n keyUsage: {\n baseKeyUsage: {\n crlSign: true,\n },\n extendedKeyUsage: {\n serverAuth: true,\n },\n },\n },\n publicKey: {\n format: \"PEM\",\n key: Buffer.from(fs.readFileSync(\"test-fixtures/rsa_public.pem\"), 'binary').toString('base64'),\n },\n },\n}, {\n dependsOn: [authority],\n});\n```\n```python\nimport pulumi\nimport base64\nimport pulumi_gcp as gcp\n\nauthority = gcp.certificateauthority.Authority(\"authority\",\n pool=\"\",\n certificate_authority_id=\"my-authority\",\n location=\"us-central1\",\n config=gcp.certificateauthority.AuthorityConfigArgs(\n subject_config=gcp.certificateauthority.AuthorityConfigSubjectConfigArgs(\n subject=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectArgs(\n organization=\"HashiCorp\",\n common_name=\"my-certificate-authority\",\n ),\n subject_alt_name=gcp.certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs(\n dns_names=[\"hashicorp.com\"],\n ),\n ),\n x509_config=gcp.certificateauthority.AuthorityConfigX509ConfigArgs(\n ca_options=gcp.certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs(\n is_ca=True,\n ),\n key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs(\n digital_signature=True,\n cert_sign=True,\n crl_sign=True,\n ),\n extended_key_usage=gcp.certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs(\n server_auth=True,\n ),\n ),\n ),\n ),\n lifetime=\"86400s\",\n key_spec=gcp.certificateauthority.AuthorityKeySpecArgs(\n algorithm=\"RSA_PKCS1_4096_SHA256\",\n ),\n deletion_protection=False,\n skip_grace_period=True,\n ignore_active_certificates_on_deletion=True)\ndefault = gcp.certificateauthority.Certificate(\"default\",\n pool=\"\",\n location=\"us-central1\",\n lifetime=\"860s\",\n config=gcp.certificateauthority.CertificateConfigArgs(\n subject_config=gcp.certificateauthority.CertificateConfigSubjectConfigArgs(\n subject=gcp.certificateauthority.CertificateConfigSubjectConfigSubjectArgs(\n common_name=\"san1.example.com\",\n country_code=\"us\",\n organization=\"google\",\n organizational_unit=\"enterprise\",\n locality=\"mountain view\",\n province=\"california\",\n street_address=\"1600 amphitheatre parkway\",\n postal_code=\"94109\",\n ),\n ),\n x509_config=gcp.certificateauthority.CertificateConfigX509ConfigArgs(\n ca_options=gcp.certificateauthority.CertificateConfigX509ConfigCaOptionsArgs(\n is_ca=False,\n ),\n key_usage=gcp.certificateauthority.CertificateConfigX509ConfigKeyUsageArgs(\n base_key_usage=gcp.certificateauthority.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs(\n crl_sign=True,\n ),\n extended_key_usage=gcp.certificateauthority.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs(\n server_auth=True,\n ),\n ),\n ),\n public_key=gcp.certificateauthority.CertificateConfigPublicKeyArgs(\n format=\"PEM\",\n key=(lambda path: base64.b64encode(open(path).read().encode()).decode())(\"test-fixtures/rsa_public.pem\"),\n ),\n ),\n opts=pulumi.ResourceOptions(depends_on=[authority]))\n```\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\n\tprivate static string ReadFileBase64(string path) {\n\t\treturn Convert.ToBase64String(Encoding.UTF8.GetBytes(File.ReadAllText(path)))\n\t}\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var authority = new Gcp.CertificateAuthority.Authority(\"authority\", new()\n {\n Pool = \"\",\n CertificateAuthorityId = \"my-authority\",\n Location = \"us-central1\",\n Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigArgs\n {\n SubjectConfig = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigArgs\n {\n Subject = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectArgs\n {\n Organization = \"HashiCorp\",\n CommonName = \"my-certificate-authority\",\n },\n SubjectAltName = new Gcp.CertificateAuthority.Inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs\n {\n DnsNames = new[]\n {\n \"hashicorp.com\",\n },\n },\n },\n X509Config = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigArgs\n {\n CaOptions = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigCaOptionsArgs\n {\n IsCa = true,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs\n {\n DigitalSignature = true,\n CertSign = true,\n CrlSign = true,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs\n {\n ServerAuth = true,\n },\n },\n },\n },\n Lifetime = \"86400s\",\n KeySpec = new Gcp.CertificateAuthority.Inputs.AuthorityKeySpecArgs\n {\n Algorithm = \"RSA_PKCS1_4096_SHA256\",\n },\n DeletionProtection = false,\n SkipGracePeriod = true,\n IgnoreActiveCertificatesOnDeletion = true,\n });\n\n var @default = new Gcp.CertificateAuthority.Certificate(\"default\", new()\n {\n Pool = \"\",\n Location = \"us-central1\",\n Lifetime = \"860s\",\n Config = new Gcp.CertificateAuthority.Inputs.CertificateConfigArgs\n {\n SubjectConfig = new Gcp.CertificateAuthority.Inputs.CertificateConfigSubjectConfigArgs\n {\n Subject = new Gcp.CertificateAuthority.Inputs.CertificateConfigSubjectConfigSubjectArgs\n {\n CommonName = \"san1.example.com\",\n CountryCode = \"us\",\n Organization = \"google\",\n OrganizationalUnit = \"enterprise\",\n Locality = \"mountain view\",\n Province = \"california\",\n StreetAddress = \"1600 amphitheatre parkway\",\n PostalCode = \"94109\",\n },\n },\n X509Config = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigArgs\n {\n CaOptions = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigCaOptionsArgs\n {\n IsCa = false,\n },\n KeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigKeyUsageArgs\n {\n BaseKeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs\n {\n CrlSign = true,\n },\n ExtendedKeyUsage = new Gcp.CertificateAuthority.Inputs.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs\n {\n ServerAuth = true,\n },\n },\n },\n PublicKey = new Gcp.CertificateAuthority.Inputs.CertificateConfigPublicKeyArgs\n {\n Format = \"PEM\",\n Key = ReadFileBase64(\"test-fixtures/rsa_public.pem\"),\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n authority,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/base64\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/certificateauthority\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := os.ReadFile(path); err == nil {\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(fileData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tauthority, err := certificateauthority.NewAuthority(ctx, \"authority\", \u0026certificateauthority.AuthorityArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tCertificateAuthorityId: pulumi.String(\"my-authority\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConfig: \u0026certificateauthority.AuthorityConfigArgs{\n\t\t\t\tSubjectConfig: \u0026certificateauthority.AuthorityConfigSubjectConfigArgs{\n\t\t\t\t\tSubject: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectArgs{\n\t\t\t\t\t\tOrganization: pulumi.String(\"HashiCorp\"),\n\t\t\t\t\t\tCommonName: pulumi.String(\"my-certificate-authority\"),\n\t\t\t\t\t},\n\t\t\t\t\tSubjectAltName: \u0026certificateauthority.AuthorityConfigSubjectConfigSubjectAltNameArgs{\n\t\t\t\t\t\tDnsNames: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"hashicorp.com\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tX509Config: \u0026certificateauthority.AuthorityConfigX509ConfigArgs{\n\t\t\t\t\tCaOptions: \u0026certificateauthority.AuthorityConfigX509ConfigCaOptionsArgs{\n\t\t\t\t\t\tIsCa: pulumi.Bool(true),\n\t\t\t\t\t},\n\t\t\t\t\tKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageArgs{\n\t\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\t\tDigitalSignature: pulumi.Bool(true),\n\t\t\t\t\t\t\tCertSign: pulumi.Bool(true),\n\t\t\t\t\t\t\tCrlSign: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tServerAuth: 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\tLifetime: pulumi.String(\"86400s\"),\n\t\t\tKeySpec: \u0026certificateauthority.AuthorityKeySpecArgs{\n\t\t\t\tAlgorithm: pulumi.String(\"RSA_PKCS1_4096_SHA256\"),\n\t\t\t},\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tSkipGracePeriod: pulumi.Bool(true),\n\t\t\tIgnoreActiveCertificatesOnDeletion: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = certificateauthority.NewCertificate(ctx, \"default\", \u0026certificateauthority.CertificateArgs{\n\t\t\tPool: pulumi.String(\"\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLifetime: pulumi.String(\"860s\"),\n\t\t\tConfig: \u0026certificateauthority.CertificateConfigArgs{\n\t\t\t\tSubjectConfig: \u0026certificateauthority.CertificateConfigSubjectConfigArgs{\n\t\t\t\t\tSubject: \u0026certificateauthority.CertificateConfigSubjectConfigSubjectArgs{\n\t\t\t\t\t\tCommonName: pulumi.String(\"san1.example.com\"),\n\t\t\t\t\t\tCountryCode: pulumi.String(\"us\"),\n\t\t\t\t\t\tOrganization: pulumi.String(\"google\"),\n\t\t\t\t\t\tOrganizationalUnit: pulumi.String(\"enterprise\"),\n\t\t\t\t\t\tLocality: pulumi.String(\"mountain view\"),\n\t\t\t\t\t\tProvince: pulumi.String(\"california\"),\n\t\t\t\t\t\tStreetAddress: pulumi.String(\"1600 amphitheatre parkway\"),\n\t\t\t\t\t\tPostalCode: pulumi.String(\"94109\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tX509Config: \u0026certificateauthority.CertificateConfigX509ConfigArgs{\n\t\t\t\t\tCaOptions: \u0026certificateauthority.CertificateConfigX509ConfigCaOptionsArgs{\n\t\t\t\t\t\tIsCa: pulumi.Bool(false),\n\t\t\t\t\t},\n\t\t\t\t\tKeyUsage: \u0026certificateauthority.CertificateConfigX509ConfigKeyUsageArgs{\n\t\t\t\t\t\tBaseKeyUsage: \u0026certificateauthority.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs{\n\t\t\t\t\t\t\tCrlSign: pulumi.Bool(true),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tExtendedKeyUsage: \u0026certificateauthority.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs{\n\t\t\t\t\t\t\tServerAuth: 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\tPublicKey: \u0026certificateauthority.CertificateConfigPublicKeyArgs{\n\t\t\t\t\tFormat: pulumi.String(\"PEM\"),\n\t\t\t\t\tKey: filebase64OrPanic(\"test-fixtures/rsa_public.pem\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tauthority,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.certificateauthority.Authority;\nimport com.pulumi.gcp.certificateauthority.AuthorityArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigSubjectConfigSubjectAltNameArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.AuthorityKeySpecArgs;\nimport com.pulumi.gcp.certificateauthority.Certificate;\nimport com.pulumi.gcp.certificateauthority.CertificateArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigSubjectConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigSubjectConfigSubjectArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigCaOptionsArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs;\nimport com.pulumi.gcp.certificateauthority.inputs.CertificateConfigPublicKeyArgs;\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 authority = new Authority(\"authority\", AuthorityArgs.builder() \n .pool(\"\")\n .certificateAuthorityId(\"my-authority\")\n .location(\"us-central1\")\n .config(AuthorityConfigArgs.builder()\n .subjectConfig(AuthorityConfigSubjectConfigArgs.builder()\n .subject(AuthorityConfigSubjectConfigSubjectArgs.builder()\n .organization(\"HashiCorp\")\n .commonName(\"my-certificate-authority\")\n .build())\n .subjectAltName(AuthorityConfigSubjectConfigSubjectAltNameArgs.builder()\n .dnsNames(\"hashicorp.com\")\n .build())\n .build())\n .x509Config(AuthorityConfigX509ConfigArgs.builder()\n .caOptions(AuthorityConfigX509ConfigCaOptionsArgs.builder()\n .isCa(true)\n .build())\n .keyUsage(AuthorityConfigX509ConfigKeyUsageArgs.builder()\n .baseKeyUsage(AuthorityConfigX509ConfigKeyUsageBaseKeyUsageArgs.builder()\n .digitalSignature(true)\n .certSign(true)\n .crlSign(true)\n .build())\n .extendedKeyUsage(AuthorityConfigX509ConfigKeyUsageExtendedKeyUsageArgs.builder()\n .serverAuth(true)\n .build())\n .build())\n .build())\n .build())\n .lifetime(\"86400s\")\n .keySpec(AuthorityKeySpecArgs.builder()\n .algorithm(\"RSA_PKCS1_4096_SHA256\")\n .build())\n .deletionProtection(false)\n .skipGracePeriod(true)\n .ignoreActiveCertificatesOnDeletion(true)\n .build());\n\n var default_ = new Certificate(\"default\", CertificateArgs.builder() \n .pool(\"\")\n .location(\"us-central1\")\n .lifetime(\"860s\")\n .config(CertificateConfigArgs.builder()\n .subjectConfig(CertificateConfigSubjectConfigArgs.builder()\n .subject(CertificateConfigSubjectConfigSubjectArgs.builder()\n .commonName(\"san1.example.com\")\n .countryCode(\"us\")\n .organization(\"google\")\n .organizationalUnit(\"enterprise\")\n .locality(\"mountain view\")\n .province(\"california\")\n .streetAddress(\"1600 amphitheatre parkway\")\n .postalCode(\"94109\")\n .build())\n .build())\n .x509Config(CertificateConfigX509ConfigArgs.builder()\n .caOptions(CertificateConfigX509ConfigCaOptionsArgs.builder()\n .isCa(false)\n .build())\n .keyUsage(CertificateConfigX509ConfigKeyUsageArgs.builder()\n .baseKeyUsage(CertificateConfigX509ConfigKeyUsageBaseKeyUsageArgs.builder()\n .crlSign(true)\n .build())\n .extendedKeyUsage(CertificateConfigX509ConfigKeyUsageExtendedKeyUsageArgs.builder()\n .serverAuth(true)\n .build())\n .build())\n .build())\n .publicKey(CertificateConfigPublicKeyArgs.builder()\n .format(\"PEM\")\n .key(Base64.getEncoder().encodeToString(Files.readAllBytes(Paths.get(\"test-fixtures/rsa_public.pem\"))))\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(authority)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCertificate can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:certificateauthority/certificate:Certificate default projects/{{project}}/locations/{{location}}/caPools/{{pool}}/certificates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:certificateauthority/certificate:Certificate default {{project}}/{{location}}/{{pool}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:certificateauthority/certificate:Certificate default {{location}}/{{pool}}/{{name}}\n```\n\n ", "properties": { "certificateAuthority": { "type": "string", @@ -120169,7 +121253,7 @@ } }, "gcp:certificatemanager/certificate:Certificate": { - "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Certificate Manager Certificate Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.certificatemanager.DnsAuthorization(\"instance\", {\n description: \"The default dnss\",\n domain: \"subdomain.hashicorptest.com\",\n});\nconst instance2 = new gcp.certificatemanager.DnsAuthorization(\"instance2\", {\n description: \"The default dnss\",\n domain: \"subdomain2.hashicorptest.com\",\n});\nconst _default = new gcp.certificatemanager.Certificate(\"default\", {\n description: \"The default cert\",\n scope: \"EDGE_CACHE\",\n managed: {\n domains: [\n instance.domain,\n instance2.domain,\n ],\n dnsAuthorizations: [\n instance.id,\n instance2.id,\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.certificatemanager.DnsAuthorization(\"instance\",\n description=\"The default dnss\",\n domain=\"subdomain.hashicorptest.com\")\ninstance2 = gcp.certificatemanager.DnsAuthorization(\"instance2\",\n description=\"The default dnss\",\n domain=\"subdomain2.hashicorptest.com\")\ndefault = gcp.certificatemanager.Certificate(\"default\",\n description=\"The default cert\",\n scope=\"EDGE_CACHE\",\n managed=gcp.certificatemanager.CertificateManagedArgs(\n domains=[\n instance.domain,\n instance2.domain,\n ],\n dns_authorizations=[\n instance.id,\n instance2.id,\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.CertificateManager.DnsAuthorization(\"instance\", new()\n {\n Description = \"The default dnss\",\n Domain = \"subdomain.hashicorptest.com\",\n });\n\n var instance2 = new Gcp.CertificateManager.DnsAuthorization(\"instance2\", new()\n {\n Description = \"The default dnss\",\n Domain = \"subdomain2.hashicorptest.com\",\n });\n\n var @default = new Gcp.CertificateManager.Certificate(\"default\", new()\n {\n Description = \"The default cert\",\n Scope = \"EDGE_CACHE\",\n Managed = new Gcp.CertificateManager.Inputs.CertificateManagedArgs\n {\n Domains = new[]\n {\n instance.Domain,\n instance2.Domain,\n },\n DnsAuthorizations = new[]\n {\n instance.Id,\n instance2.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/certificatemanager\"\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 := certificatemanager.NewDnsAuthorization(ctx, \"instance\", \u0026certificatemanager.DnsAuthorizationArgs{\n\t\t\tDescription: pulumi.String(\"The default dnss\"),\n\t\t\tDomain: pulumi.String(\"subdomain.hashicorptest.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance2, err := certificatemanager.NewDnsAuthorization(ctx, \"instance2\", \u0026certificatemanager.DnsAuthorizationArgs{\n\t\t\tDescription: pulumi.String(\"The default dnss\"),\n\t\t\tDomain: pulumi.String(\"subdomain2.hashicorptest.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = certificatemanager.NewCertificate(ctx, \"default\", \u0026certificatemanager.CertificateArgs{\n\t\t\tDescription: pulumi.String(\"The default cert\"),\n\t\t\tScope: pulumi.String(\"EDGE_CACHE\"),\n\t\t\tManaged: \u0026certificatemanager.CertificateManagedArgs{\n\t\t\t\tDomains: pulumi.StringArray{\n\t\t\t\t\tinstance.Domain,\n\t\t\t\t\tinstance2.Domain,\n\t\t\t\t},\n\t\t\t\tDnsAuthorizations: pulumi.StringArray{\n\t\t\t\t\tinstance.ID(),\n\t\t\t\t\tinstance2.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.certificatemanager.DnsAuthorization;\nimport com.pulumi.gcp.certificatemanager.DnsAuthorizationArgs;\nimport com.pulumi.gcp.certificatemanager.Certificate;\nimport com.pulumi.gcp.certificatemanager.CertificateArgs;\nimport com.pulumi.gcp.certificatemanager.inputs.CertificateManagedArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 DnsAuthorization(\"instance\", DnsAuthorizationArgs.builder() \n .description(\"The default dnss\")\n .domain(\"subdomain.hashicorptest.com\")\n .build());\n\n var instance2 = new DnsAuthorization(\"instance2\", DnsAuthorizationArgs.builder() \n .description(\"The default dnss\")\n .domain(\"subdomain2.hashicorptest.com\")\n .build());\n\n var default_ = new Certificate(\"default\", CertificateArgs.builder() \n .description(\"The default cert\")\n .scope(\"EDGE_CACHE\")\n .managed(CertificateManagedArgs.builder()\n .domains( \n instance.domain(),\n instance2.domain())\n .dnsAuthorizations( \n instance.id(),\n instance2.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:certificatemanager:Certificate\n properties:\n description: The default cert\n scope: EDGE_CACHE\n managed:\n domains:\n - ${instance.domain}\n - ${instance2.domain}\n dnsAuthorizations:\n - ${instance.id}\n - ${instance2.id}\n instance:\n type: gcp:certificatemanager:DnsAuthorization\n properties:\n description: The default dnss\n domain: subdomain.hashicorptest.com\n instance2:\n type: gcp:certificatemanager:DnsAuthorization\n properties:\n description: The default dnss\n domain: subdomain2.hashicorptest.com\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCertificate can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:certificatemanager/certificate:Certificate default projects/{{project}}/locations/global/certificates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:certificatemanager/certificate:Certificate default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:certificatemanager/certificate:Certificate default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Certificate Manager Self Managed Certificate\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.certificatemanager.Certificate(\"default\", {\n description: \"The default cert\",\n scope: \"EDGE_CACHE\",\n selfManaged: {\n pemCertificate: fs.readFileSync(\"test-fixtures/certificatemanager/cert.pem\"),\n pemPrivateKey: fs.readFileSync(\"test-fixtures/certificatemanager/private-key.pem\"),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.certificatemanager.Certificate(\"default\",\n description=\"The default cert\",\n scope=\"EDGE_CACHE\",\n self_managed=gcp.certificatemanager.CertificateSelfManagedArgs(\n pem_certificate=(lambda path: open(path).read())(\"test-fixtures/certificatemanager/cert.pem\"),\n pem_private_key=(lambda path: open(path).read())(\"test-fixtures/certificatemanager/private-key.pem\"),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CertificateManager.Certificate(\"default\", new()\n {\n Description = \"The default cert\",\n Scope = \"EDGE_CACHE\",\n SelfManaged = new Gcp.CertificateManager.Inputs.CertificateSelfManagedArgs\n {\n PemCertificate = File.ReadAllText(\"test-fixtures/certificatemanager/cert.pem\"),\n PemPrivateKey = File.ReadAllText(\"test-fixtures/certificatemanager/private-key.pem\"),\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/certificatemanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := certificatemanager.NewCertificate(ctx, \"default\", \u0026certificatemanager.CertificateArgs{\n\t\t\tDescription: pulumi.String(\"The default cert\"),\n\t\t\tScope: pulumi.String(\"EDGE_CACHE\"),\n\t\t\tSelfManaged: \u0026certificatemanager.CertificateSelfManagedArgs{\n\t\t\t\tPemCertificate: readFileOrPanic(\"test-fixtures/certificatemanager/cert.pem\"),\n\t\t\t\tPemPrivateKey: readFileOrPanic(\"test-fixtures/certificatemanager/private-key.pem\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.certificatemanager.Certificate;\nimport com.pulumi.gcp.certificatemanager.CertificateArgs;\nimport com.pulumi.gcp.certificatemanager.inputs.CertificateSelfManagedArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Certificate(\"default\", CertificateArgs.builder() \n .description(\"The default cert\")\n .scope(\"EDGE_CACHE\")\n .selfManaged(CertificateSelfManagedArgs.builder()\n .pemCertificate(Files.readString(Paths.get(\"test-fixtures/certificatemanager/cert.pem\")))\n .pemPrivateKey(Files.readString(Paths.get(\"test-fixtures/certificatemanager/private-key.pem\")))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:certificatemanager:Certificate\n properties:\n description: The default cert\n scope: EDGE_CACHE\n selfManaged:\n pemCertificate:\n fn::readFile: test-fixtures/certificatemanager/cert.pem\n pemPrivateKey:\n fn::readFile: test-fixtures/certificatemanager/private-key.pem\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCertificate can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:certificatemanager/certificate:Certificate default projects/{{project}}/locations/global/certificates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:certificatemanager/certificate:Certificate default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:certificatemanager/certificate:Certificate default {{name}}\n```\n\n ", "properties": { "description": { "type": "string", @@ -121151,7 +122235,7 @@ } }, "gcp:cloudbuild/trigger:Trigger": { - "description": "Configuration for an automated build in response to source repository changes.\n\n\nTo get more information about Trigger, see:\n\n* [API documentation](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.triggers)\n* How-to Guides\n * [Automating builds using build triggers](https://cloud.google.com/cloud-build/docs/running-builds/automate-builds)\n\n\u003e **Note:** You can retrieve the email of the Cloud Build Service Account used in jobs by using the `gcp.projects.ServiceIdentity` resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Cloudbuild Trigger Filename\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst filename_trigger = new gcp.cloudbuild.Trigger(\"filename-trigger\", {\n filename: \"cloudbuild.yaml\",\n location: \"us-central1\",\n substitutions: {\n _BAZ: \"qux\",\n _FOO: \"bar\",\n },\n triggerTemplate: {\n branchName: \"main\",\n repoName: \"my-repo\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfilename_trigger = gcp.cloudbuild.Trigger(\"filename-trigger\",\n filename=\"cloudbuild.yaml\",\n location=\"us-central1\",\n substitutions={\n \"_BAZ\": \"qux\",\n \"_FOO\": \"bar\",\n },\n trigger_template=gcp.cloudbuild.TriggerTriggerTemplateArgs(\n branch_name=\"main\",\n repo_name=\"my-repo\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var filename_trigger = new Gcp.CloudBuild.Trigger(\"filename-trigger\", new()\n {\n Filename = \"cloudbuild.yaml\",\n Location = \"us-central1\",\n Substitutions = \n {\n { \"_BAZ\", \"qux\" },\n { \"_FOO\", \"bar\" },\n },\n TriggerTemplate = new Gcp.CloudBuild.Inputs.TriggerTriggerTemplateArgs\n {\n BranchName = \"main\",\n RepoName = \"my-repo\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudbuild.NewTrigger(ctx, \"filename-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tFilename: pulumi.String(\"cloudbuild.yaml\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tSubstitutions: pulumi.StringMap{\n\t\t\t\t\"_BAZ\": pulumi.String(\"qux\"),\n\t\t\t\t\"_FOO\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tTriggerTemplate: \u0026cloudbuild.TriggerTriggerTemplateArgs{\n\t\t\t\tBranchName: pulumi.String(\"main\"),\n\t\t\t\tRepoName: pulumi.String(\"my-repo\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerTriggerTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var filename_trigger = new Trigger(\"filename-trigger\", TriggerArgs.builder() \n .filename(\"cloudbuild.yaml\")\n .location(\"us-central1\")\n .substitutions(Map.ofEntries(\n Map.entry(\"_BAZ\", \"qux\"),\n Map.entry(\"_FOO\", \"bar\")\n ))\n .triggerTemplate(TriggerTriggerTemplateArgs.builder()\n .branchName(\"main\")\n .repoName(\"my-repo\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n filename-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n filename: cloudbuild.yaml\n location: us-central1\n substitutions:\n _BAZ: qux\n _FOO: bar\n triggerTemplate:\n branchName: main\n repoName: my-repo\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Build\n\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildArtifactsArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildArtifactsObjectsArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildAvailableSecretsArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildOptionsArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildSourceArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildSourceStorageSourceArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerTriggerTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var build_trigger = new Trigger(\"build-trigger\", TriggerArgs.builder() \n .build(TriggerBuildArgs.builder()\n .artifacts(TriggerBuildArtifactsArgs.builder()\n .images(\"gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA\")\n .objects(TriggerBuildArtifactsObjectsArgs.builder()\n .location(\"gs://bucket/path/to/somewhere/\")\n .paths(\"path\")\n .build())\n .build())\n .availableSecrets(TriggerBuildAvailableSecretsArgs.builder()\n .secretManager(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build())\n .logsBucket(\"gs://mybucket/logs\")\n .options(TriggerBuildOptionsArgs.builder()\n .diskSizeGb(100)\n .dynamicSubstitutions(true)\n .env(\"ekey = evalue\")\n .logStreamingOption(\"STREAM_OFF\")\n .logging(\"LEGACY\")\n .machineType(\"N1_HIGHCPU_8\")\n .requestedVerifyOption(\"VERIFIED\")\n .secretEnv(\"secretenv = svalue\")\n .sourceProvenanceHash(\"MD5\")\n .substitutionOption(\"ALLOW_LOOSE\")\n .volumes(TriggerBuildOptionsVolumeArgs.builder()\n .name(\"v1\")\n .path(\"v1\")\n .build())\n .workerPool(\"pool\")\n .build())\n .queueTtl(\"20s\")\n .secrets(TriggerBuildSecretArgs.builder()\n .kmsKeyName(\"projects/myProject/locations/global/keyRings/keyring-name/cryptoKeys/key-name\")\n .secretEnv(Map.of(\"PASSWORD\", \"ZW5jcnlwdGVkLXBhc3N3b3JkCg==\"))\n .build())\n .source(TriggerBuildSourceArgs.builder()\n .storageSource(TriggerBuildSourceStorageSourceArgs.builder()\n .bucket(\"mybucket\")\n .object(\"source_code.tar.gz\")\n .build())\n .build())\n .steps( \n TriggerBuildStepArgs.builder()\n .args( \n \"cp\",\n \"gs://mybucket/remotefile.zip\",\n \"localfile.zip\")\n .name(\"gcr.io/cloud-builders/gsutil\")\n .secretEnv(\"MY_SECRET\")\n .timeout(\"120s\")\n .build(),\n TriggerBuildStepArgs.builder()\n .name(\"ubuntu\")\n .script(\"echo hello\")\n .build())\n .substitutions(Map.ofEntries(\n Map.entry(\"_BAZ\", \"qux\"),\n Map.entry(\"_FOO\", \"bar\")\n ))\n .tags( \n \"build\",\n \"newFeature\")\n .build())\n .location(\"global\")\n .triggerTemplate(TriggerTriggerTemplateArgs.builder()\n .branchName(\"main\")\n .repoName(\"my-repo\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n build-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n build:\n artifacts:\n images:\n - gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA\n objects:\n location: gs://bucket/path/to/somewhere/\n paths:\n - path\n availableSecrets:\n secretManager:\n - env: MY_SECRET\n versionName: projects/myProject/secrets/mySecret/versions/latest\n logsBucket: gs://mybucket/logs\n options:\n diskSizeGb: 100\n dynamicSubstitutions: true\n env:\n - ekey = evalue\n logStreamingOption: STREAM_OFF\n logging: LEGACY\n machineType: N1_HIGHCPU_8\n requestedVerifyOption: VERIFIED\n secretEnv:\n - secretenv = svalue\n sourceProvenanceHash:\n - MD5\n substitutionOption: ALLOW_LOOSE\n volumes:\n - name: v1\n path: v1\n workerPool: pool\n queueTtl: 20s\n secrets:\n - kmsKeyName: projects/myProject/locations/global/keyRings/keyring-name/cryptoKeys/key-name\n secretEnv:\n PASSWORD: ZW5jcnlwdGVkLXBhc3N3b3JkCg==\n source:\n storageSource:\n bucket: mybucket\n object: source_code.tar.gz\n steps:\n - args:\n - cp\n - gs://mybucket/remotefile.zip\n - localfile.zip\n name: gcr.io/cloud-builders/gsutil\n secretEnv:\n - MY_SECRET\n timeout: 120s\n - name: ubuntu\n script: echo hello\n substitutions:\n _BAZ: qux\n _FOO: bar\n tags:\n - build\n - newFeature\n location: global\n triggerTemplate:\n branchName: main\n repoName: my-repo\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Service Account\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst cloudbuildServiceAccount = new gcp.serviceaccount.Account(\"cloudbuildServiceAccount\", {accountId: \"my-service-account\"});\nconst actAs = new gcp.projects.IAMMember(\"actAs\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/iam.serviceAccountUser\",\n member: pulumi.interpolate`serviceAccount:${cloudbuildServiceAccount.email}`,\n});\nconst logsWriter = new gcp.projects.IAMMember(\"logsWriter\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/logging.logWriter\",\n member: pulumi.interpolate`serviceAccount:${cloudbuildServiceAccount.email}`,\n});\nconst service_account_trigger = new gcp.cloudbuild.Trigger(\"service-account-trigger\", {\n triggerTemplate: {\n branchName: \"main\",\n repoName: \"my-repo\",\n },\n serviceAccount: cloudbuildServiceAccount.id,\n filename: \"cloudbuild.yaml\",\n}, {\n dependsOn: [\n actAs,\n logsWriter,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ncloudbuild_service_account = gcp.service_account.Account(\"cloudbuildServiceAccount\", account_id=\"my-service-account\")\nact_as = gcp.projects.IAMMember(\"actAs\",\n project=project.project_id,\n role=\"roles/iam.serviceAccountUser\",\n member=cloudbuild_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\nlogs_writer = gcp.projects.IAMMember(\"logsWriter\",\n project=project.project_id,\n role=\"roles/logging.logWriter\",\n member=cloudbuild_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\nservice_account_trigger = gcp.cloudbuild.Trigger(\"service-account-trigger\",\n trigger_template=gcp.cloudbuild.TriggerTriggerTemplateArgs(\n branch_name=\"main\",\n repo_name=\"my-repo\",\n ),\n service_account=cloudbuild_service_account.id,\n filename=\"cloudbuild.yaml\",\n opts=pulumi.ResourceOptions(depends_on=[\n act_as,\n logs_writer,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cloudbuildServiceAccount = new Gcp.ServiceAccount.Account(\"cloudbuildServiceAccount\", new()\n {\n AccountId = \"my-service-account\",\n });\n\n var actAs = new Gcp.Projects.IAMMember(\"actAs\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/iam.serviceAccountUser\",\n Member = cloudbuildServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var logsWriter = new Gcp.Projects.IAMMember(\"logsWriter\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/logging.logWriter\",\n Member = cloudbuildServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var service_account_trigger = new Gcp.CloudBuild.Trigger(\"service-account-trigger\", new()\n {\n TriggerTemplate = new Gcp.CloudBuild.Inputs.TriggerTriggerTemplateArgs\n {\n BranchName = \"main\",\n RepoName = \"my-repo\",\n },\n ServiceAccount = cloudbuildServiceAccount.Id,\n Filename = \"cloudbuild.yaml\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n actAs,\n logsWriter,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcloudbuildServiceAccount, err := serviceAccount.NewAccount(ctx, \"cloudbuildServiceAccount\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tactAs, err := projects.NewIAMMember(ctx, \"actAs\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: cloudbuildServiceAccount.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\tlogsWriter, err := projects.NewIAMMember(ctx, \"logsWriter\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/logging.logWriter\"),\n\t\t\tMember: cloudbuildServiceAccount.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 = cloudbuild.NewTrigger(ctx, \"service-account-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tTriggerTemplate: \u0026cloudbuild.TriggerTriggerTemplateArgs{\n\t\t\t\tBranchName: pulumi.String(\"main\"),\n\t\t\t\tRepoName: pulumi.String(\"my-repo\"),\n\t\t\t},\n\t\t\tServiceAccount: cloudbuildServiceAccount.ID(),\n\t\t\tFilename: pulumi.String(\"cloudbuild.yaml\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tactAs,\n\t\t\tlogsWriter,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerTriggerTemplateArgs;\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 cloudbuildServiceAccount = new Account(\"cloudbuildServiceAccount\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .build());\n\n var actAs = new IAMMember(\"actAs\", IAMMemberArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/iam.serviceAccountUser\")\n .member(cloudbuildServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var logsWriter = new IAMMember(\"logsWriter\", IAMMemberArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/logging.logWriter\")\n .member(cloudbuildServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var service_account_trigger = new Trigger(\"service-account-trigger\", TriggerArgs.builder() \n .triggerTemplate(TriggerTriggerTemplateArgs.builder()\n .branchName(\"main\")\n .repoName(\"my-repo\")\n .build())\n .serviceAccount(cloudbuildServiceAccount.id())\n .filename(\"cloudbuild.yaml\")\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n actAs,\n logsWriter)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n service-account-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n triggerTemplate:\n branchName: main\n repoName: my-repo\n serviceAccount: ${cloudbuildServiceAccount.id}\n filename: cloudbuild.yaml\n options:\n dependson:\n - ${actAs}\n - ${logsWriter}\n cloudbuildServiceAccount:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n actAs:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/iam.serviceAccountUser\n member: serviceAccount:${cloudbuildServiceAccount.email}\n logsWriter:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/logging.logWriter\n member: serviceAccount:${cloudbuildServiceAccount.email}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Include Build Logs\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst include_build_logs_trigger = new gcp.cloudbuild.Trigger(\"include-build-logs-trigger\", {\n filename: \"cloudbuild.yaml\",\n github: {\n name: \"terraform-provider-google-beta\",\n owner: \"hashicorp\",\n push: {\n branch: `^main$`,\n },\n },\n includeBuildLogs: \"INCLUDE_BUILD_LOGS_WITH_STATUS\",\n location: \"us-central1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninclude_build_logs_trigger = gcp.cloudbuild.Trigger(\"include-build-logs-trigger\",\n filename=\"cloudbuild.yaml\",\n github=gcp.cloudbuild.TriggerGithubArgs(\n name=\"terraform-provider-google-beta\",\n owner=\"hashicorp\",\n push=gcp.cloudbuild.TriggerGithubPushArgs(\n branch=\"^main$\",\n ),\n ),\n include_build_logs=\"INCLUDE_BUILD_LOGS_WITH_STATUS\",\n location=\"us-central1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var include_build_logs_trigger = new Gcp.CloudBuild.Trigger(\"include-build-logs-trigger\", new()\n {\n Filename = \"cloudbuild.yaml\",\n Github = new Gcp.CloudBuild.Inputs.TriggerGithubArgs\n {\n Name = \"terraform-provider-google-beta\",\n Owner = \"hashicorp\",\n Push = new Gcp.CloudBuild.Inputs.TriggerGithubPushArgs\n {\n Branch = \"^main$\",\n },\n },\n IncludeBuildLogs = \"INCLUDE_BUILD_LOGS_WITH_STATUS\",\n Location = \"us-central1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudbuild.NewTrigger(ctx, \"include-build-logs-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tFilename: pulumi.String(\"cloudbuild.yaml\"),\n\t\t\tGithub: \u0026cloudbuild.TriggerGithubArgs{\n\t\t\t\tName: pulumi.String(\"terraform-provider-google-beta\"),\n\t\t\t\tOwner: pulumi.String(\"hashicorp\"),\n\t\t\t\tPush: \u0026cloudbuild.TriggerGithubPushArgs{\n\t\t\t\t\tBranch: pulumi.String(fmt.Sprintf(\"^main$\")),\n\t\t\t\t},\n\t\t\t},\n\t\t\tIncludeBuildLogs: pulumi.String(\"INCLUDE_BUILD_LOGS_WITH_STATUS\"),\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.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerGithubArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerGithubPushArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var include_build_logs_trigger = new Trigger(\"include-build-logs-trigger\", TriggerArgs.builder() \n .filename(\"cloudbuild.yaml\")\n .github(TriggerGithubArgs.builder()\n .name(\"terraform-provider-google-beta\")\n .owner(\"hashicorp\")\n .push(TriggerGithubPushArgs.builder()\n .branch(\"^main$\")\n .build())\n .build())\n .includeBuildLogs(\"INCLUDE_BUILD_LOGS_WITH_STATUS\")\n .location(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n include-build-logs-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n filename: cloudbuild.yaml\n github:\n name: terraform-provider-google-beta\n owner: hashicorp\n push:\n branch: ^main$\n includeBuildLogs: INCLUDE_BUILD_LOGS_WITH_STATUS\n location: us-central1\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Pubsub Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst mytopic = new gcp.pubsub.Topic(\"mytopic\", {});\nconst pubsub_config_trigger = new gcp.cloudbuild.Trigger(\"pubsub-config-trigger\", {\n location: \"us-central1\",\n description: \"acceptance test example pubsub build trigger\",\n pubsubConfig: {\n topic: mytopic.id,\n },\n sourceToBuild: {\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n ref: \"refs/heads/main\",\n repoType: \"GITHUB\",\n },\n gitFileSource: {\n path: \"cloudbuild.yaml\",\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n revision: \"refs/heads/main\",\n repoType: \"GITHUB\",\n },\n substitutions: {\n _ACTION: `$(body.message.data.action)`,\n },\n filter: \"_ACTION.matches('INSERT')\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmytopic = gcp.pubsub.Topic(\"mytopic\")\npubsub_config_trigger = gcp.cloudbuild.Trigger(\"pubsub-config-trigger\",\n location=\"us-central1\",\n description=\"acceptance test example pubsub build trigger\",\n pubsub_config=gcp.cloudbuild.TriggerPubsubConfigArgs(\n topic=mytopic.id,\n ),\n source_to_build=gcp.cloudbuild.TriggerSourceToBuildArgs(\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n ref=\"refs/heads/main\",\n repo_type=\"GITHUB\",\n ),\n git_file_source=gcp.cloudbuild.TriggerGitFileSourceArgs(\n path=\"cloudbuild.yaml\",\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n revision=\"refs/heads/main\",\n repo_type=\"GITHUB\",\n ),\n substitutions={\n \"_ACTION\": \"$(body.message.data.action)\",\n },\n filter=\"_ACTION.matches('INSERT')\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var mytopic = new Gcp.PubSub.Topic(\"mytopic\");\n\n var pubsub_config_trigger = new Gcp.CloudBuild.Trigger(\"pubsub-config-trigger\", new()\n {\n Location = \"us-central1\",\n Description = \"acceptance test example pubsub build trigger\",\n PubsubConfig = new Gcp.CloudBuild.Inputs.TriggerPubsubConfigArgs\n {\n Topic = mytopic.Id,\n },\n SourceToBuild = new Gcp.CloudBuild.Inputs.TriggerSourceToBuildArgs\n {\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n Ref = \"refs/heads/main\",\n RepoType = \"GITHUB\",\n },\n GitFileSource = new Gcp.CloudBuild.Inputs.TriggerGitFileSourceArgs\n {\n Path = \"cloudbuild.yaml\",\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n Revision = \"refs/heads/main\",\n RepoType = \"GITHUB\",\n },\n Substitutions = \n {\n { \"_ACTION\", \"$(body.message.data.action)\" },\n },\n Filter = \"_ACTION.matches('INSERT')\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tmytopic, err := pubsub.NewTopic(ctx, \"mytopic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudbuild.NewTrigger(ctx, \"pubsub-config-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"acceptance test example pubsub build trigger\"),\n\t\t\tPubsubConfig: \u0026cloudbuild.TriggerPubsubConfigArgs{\n\t\t\t\tTopic: mytopic.ID(),\n\t\t\t},\n\t\t\tSourceToBuild: \u0026cloudbuild.TriggerSourceToBuildArgs{\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t\tRef: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t},\n\t\t\tGitFileSource: \u0026cloudbuild.TriggerGitFileSourceArgs{\n\t\t\t\tPath: pulumi.String(\"cloudbuild.yaml\"),\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t\tRevision: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t},\n\t\t\tSubstitutions: pulumi.StringMap{\n\t\t\t\t\"_ACTION\": pulumi.String(fmt.Sprintf(\"$(body.message.data.action)\")),\n\t\t\t},\n\t\t\tFilter: pulumi.String(\"_ACTION.matches('INSERT')\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerPubsubConfigArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerSourceToBuildArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerGitFileSourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var mytopic = new Topic(\"mytopic\");\n\n var pubsub_config_trigger = new Trigger(\"pubsub-config-trigger\", TriggerArgs.builder() \n .location(\"us-central1\")\n .description(\"acceptance test example pubsub build trigger\")\n .pubsubConfig(TriggerPubsubConfigArgs.builder()\n .topic(mytopic.id())\n .build())\n .sourceToBuild(TriggerSourceToBuildArgs.builder()\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .ref(\"refs/heads/main\")\n .repoType(\"GITHUB\")\n .build())\n .gitFileSource(TriggerGitFileSourceArgs.builder()\n .path(\"cloudbuild.yaml\")\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .revision(\"refs/heads/main\")\n .repoType(\"GITHUB\")\n .build())\n .substitutions(Map.of(\"_ACTION\", \"$(body.message.data.action)\"))\n .filter(\"_ACTION.matches('INSERT')\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n mytopic:\n type: gcp:pubsub:Topic\n pubsub-config-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n location: us-central1\n description: acceptance test example pubsub build trigger\n pubsubConfig:\n topic: ${mytopic.id}\n sourceToBuild:\n uri: https://hashicorp/terraform-provider-google-beta\n ref: refs/heads/main\n repoType: GITHUB\n gitFileSource:\n path: cloudbuild.yaml\n uri: https://hashicorp/terraform-provider-google-beta\n revision: refs/heads/main\n repoType: GITHUB\n substitutions:\n _ACTION: $(body.message.data.action)\n filter: _ACTION.matches('INSERT')\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Webhook Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst webhookTriggerSecretKey = new gcp.secretmanager.Secret(\"webhookTriggerSecretKey\", {\n secretId: \"webhook_trigger-secret-key-1\",\n replication: {\n userManaged: {\n replicas: [{\n location: \"us-central1\",\n }],\n },\n },\n});\nconst webhookTriggerSecretKeyData = new gcp.secretmanager.SecretVersion(\"webhookTriggerSecretKeyData\", {\n secret: webhookTriggerSecretKey.id,\n secretData: \"secretkeygoeshere\",\n});\nconst project = gcp.organizations.getProject({});\nconst secretAccessor = project.then(project =\u003e gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [`serviceAccount:service-${project.number}@gcp-sa-cloudbuild.iam.gserviceaccount.com`],\n }],\n}));\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: webhookTriggerSecretKey.project,\n secretId: webhookTriggerSecretKey.secretId,\n policyData: secretAccessor.then(secretAccessor =\u003e secretAccessor.policyData),\n});\nconst webhook_config_trigger = new gcp.cloudbuild.Trigger(\"webhook-config-trigger\", {\n description: \"acceptance test example webhook build trigger\",\n webhookConfig: {\n secret: webhookTriggerSecretKeyData.id,\n },\n sourceToBuild: {\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n ref: \"refs/heads/main\",\n repoType: \"GITHUB\",\n },\n gitFileSource: {\n path: \"cloudbuild.yaml\",\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n revision: \"refs/heads/main\",\n repoType: \"GITHUB\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nwebhook_trigger_secret_key = gcp.secretmanager.Secret(\"webhookTriggerSecretKey\",\n secret_id=\"webhook_trigger-secret-key-1\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n user_managed=gcp.secretmanager.SecretReplicationUserManagedArgs(\n replicas=[gcp.secretmanager.SecretReplicationUserManagedReplicaArgs(\n location=\"us-central1\",\n )],\n ),\n ))\nwebhook_trigger_secret_key_data = gcp.secretmanager.SecretVersion(\"webhookTriggerSecretKeyData\",\n secret=webhook_trigger_secret_key.id,\n secret_data=\"secretkeygoeshere\")\nproject = gcp.organizations.get_project()\nsecret_accessor = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/secretmanager.secretAccessor\",\n members=[f\"serviceAccount:service-{project.number}@gcp-sa-cloudbuild.iam.gserviceaccount.com\"],\n)])\npolicy = gcp.secretmanager.SecretIamPolicy(\"policy\",\n project=webhook_trigger_secret_key.project,\n secret_id=webhook_trigger_secret_key.secret_id,\n policy_data=secret_accessor.policy_data)\nwebhook_config_trigger = gcp.cloudbuild.Trigger(\"webhook-config-trigger\",\n description=\"acceptance test example webhook build trigger\",\n webhook_config=gcp.cloudbuild.TriggerWebhookConfigArgs(\n secret=webhook_trigger_secret_key_data.id,\n ),\n source_to_build=gcp.cloudbuild.TriggerSourceToBuildArgs(\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n ref=\"refs/heads/main\",\n repo_type=\"GITHUB\",\n ),\n git_file_source=gcp.cloudbuild.TriggerGitFileSourceArgs(\n path=\"cloudbuild.yaml\",\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n revision=\"refs/heads/main\",\n repo_type=\"GITHUB\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var webhookTriggerSecretKey = new Gcp.SecretManager.Secret(\"webhookTriggerSecretKey\", new()\n {\n SecretId = \"webhook_trigger-secret-key-1\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n UserManaged = new Gcp.SecretManager.Inputs.SecretReplicationUserManagedArgs\n {\n Replicas = new[]\n {\n new Gcp.SecretManager.Inputs.SecretReplicationUserManagedReplicaArgs\n {\n Location = \"us-central1\",\n },\n },\n },\n },\n });\n\n var webhookTriggerSecretKeyData = new Gcp.SecretManager.SecretVersion(\"webhookTriggerSecretKeyData\", new()\n {\n Secret = webhookTriggerSecretKey.Id,\n SecretData = \"secretkeygoeshere\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secretAccessor = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/secretmanager.secretAccessor\",\n Members = new[]\n {\n $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-cloudbuild.iam.gserviceaccount.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = webhookTriggerSecretKey.Project,\n SecretId = webhookTriggerSecretKey.SecretId,\n PolicyData = secretAccessor.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n var webhook_config_trigger = new Gcp.CloudBuild.Trigger(\"webhook-config-trigger\", new()\n {\n Description = \"acceptance test example webhook build trigger\",\n WebhookConfig = new Gcp.CloudBuild.Inputs.TriggerWebhookConfigArgs\n {\n Secret = webhookTriggerSecretKeyData.Id,\n },\n SourceToBuild = new Gcp.CloudBuild.Inputs.TriggerSourceToBuildArgs\n {\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n Ref = \"refs/heads/main\",\n RepoType = \"GITHUB\",\n },\n GitFileSource = new Gcp.CloudBuild.Inputs.TriggerGitFileSourceArgs\n {\n Path = \"cloudbuild.yaml\",\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n Revision = \"refs/heads/main\",\n RepoType = \"GITHUB\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\twebhookTriggerSecretKey, err := secretmanager.NewSecret(ctx, \"webhookTriggerSecretKey\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"webhook_trigger-secret-key-1\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tUserManaged: \u0026secretmanager.SecretReplicationUserManagedArgs{\n\t\t\t\t\tReplicas: secretmanager.SecretReplicationUserManagedReplicaArray{\n\t\t\t\t\t\t\u0026secretmanager.SecretReplicationUserManagedReplicaArgs{\n\t\t\t\t\t\t\tLocation: pulumi.String(\"us-central1\"),\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\twebhookTriggerSecretKeyData, err := secretmanager.NewSecretVersion(ctx, \"webhookTriggerSecretKeyData\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: webhookTriggerSecretKey.ID(),\n\t\t\tSecretData: pulumi.String(\"secretkeygoeshere\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecretAccessor, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/secretmanager.secretAccessor\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\tfmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-cloudbuild.iam.gserviceaccount.com\", project.Number),\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: webhookTriggerSecretKey.Project,\n\t\t\tSecretId: webhookTriggerSecretKey.SecretId,\n\t\t\tPolicyData: *pulumi.String(secretAccessor.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudbuild.NewTrigger(ctx, \"webhook-config-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tDescription: pulumi.String(\"acceptance test example webhook build trigger\"),\n\t\t\tWebhookConfig: \u0026cloudbuild.TriggerWebhookConfigArgs{\n\t\t\t\tSecret: webhookTriggerSecretKeyData.ID(),\n\t\t\t},\n\t\t\tSourceToBuild: \u0026cloudbuild.TriggerSourceToBuildArgs{\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t\tRef: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t},\n\t\t\tGitFileSource: \u0026cloudbuild.TriggerGitFileSourceArgs{\n\t\t\t\tPath: pulumi.String(\"cloudbuild.yaml\"),\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t\tRevision: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationUserManagedArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicy;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;\nimport com.pulumi.gcp.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerWebhookConfigArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerSourceToBuildArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerGitFileSourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var webhookTriggerSecretKey = new Secret(\"webhookTriggerSecretKey\", SecretArgs.builder() \n .secretId(\"webhook_trigger-secret-key-1\")\n .replication(SecretReplicationArgs.builder()\n .userManaged(SecretReplicationUserManagedArgs.builder()\n .replicas(SecretReplicationUserManagedReplicaArgs.builder()\n .location(\"us-central1\")\n .build())\n .build())\n .build())\n .build());\n\n var webhookTriggerSecretKeyData = new SecretVersion(\"webhookTriggerSecretKeyData\", SecretVersionArgs.builder() \n .secret(webhookTriggerSecretKey.id())\n .secretData(\"secretkeygoeshere\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n final var secretAccessor = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/secretmanager.secretAccessor\")\n .members(String.format(\"serviceAccount:service-%s@gcp-sa-cloudbuild.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build())\n .build());\n\n var policy = new SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder() \n .project(webhookTriggerSecretKey.project())\n .secretId(webhookTriggerSecretKey.secretId())\n .policyData(secretAccessor.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n var webhook_config_trigger = new Trigger(\"webhook-config-trigger\", TriggerArgs.builder() \n .description(\"acceptance test example webhook build trigger\")\n .webhookConfig(TriggerWebhookConfigArgs.builder()\n .secret(webhookTriggerSecretKeyData.id())\n .build())\n .sourceToBuild(TriggerSourceToBuildArgs.builder()\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .ref(\"refs/heads/main\")\n .repoType(\"GITHUB\")\n .build())\n .gitFileSource(TriggerGitFileSourceArgs.builder()\n .path(\"cloudbuild.yaml\")\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .revision(\"refs/heads/main\")\n .repoType(\"GITHUB\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n webhookTriggerSecretKey:\n type: gcp:secretmanager:Secret\n properties:\n secretId: webhook_trigger-secret-key-1\n replication:\n userManaged:\n replicas:\n - location: us-central1\n webhookTriggerSecretKeyData:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${webhookTriggerSecretKey.id}\n secretData: secretkeygoeshere\n policy:\n type: gcp:secretmanager:SecretIamPolicy\n properties:\n project: ${webhookTriggerSecretKey.project}\n secretId: ${webhookTriggerSecretKey.secretId}\n policyData: ${secretAccessor.policyData}\n webhook-config-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n description: acceptance test example webhook build trigger\n webhookConfig:\n secret: ${webhookTriggerSecretKeyData.id}\n sourceToBuild:\n uri: https://hashicorp/terraform-provider-google-beta\n ref: refs/heads/main\n repoType: GITHUB\n gitFileSource:\n path: cloudbuild.yaml\n uri: https://hashicorp/terraform-provider-google-beta\n revision: refs/heads/main\n repoType: GITHUB\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n secretAccessor:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/secretmanager.secretAccessor\n members:\n - serviceAccount:service-${project.number}@gcp-sa-cloudbuild.iam.gserviceaccount.com\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Manual\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst manual_trigger = new gcp.cloudbuild.Trigger(\"manual-trigger\", {\n approvalConfig: {\n approvalRequired: true,\n },\n gitFileSource: {\n path: \"cloudbuild.yaml\",\n repoType: \"GITHUB\",\n revision: \"refs/heads/main\",\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n },\n sourceToBuild: {\n ref: \"refs/heads/main\",\n repoType: \"GITHUB\",\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmanual_trigger = gcp.cloudbuild.Trigger(\"manual-trigger\",\n approval_config=gcp.cloudbuild.TriggerApprovalConfigArgs(\n approval_required=True,\n ),\n git_file_source=gcp.cloudbuild.TriggerGitFileSourceArgs(\n path=\"cloudbuild.yaml\",\n repo_type=\"GITHUB\",\n revision=\"refs/heads/main\",\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n ),\n source_to_build=gcp.cloudbuild.TriggerSourceToBuildArgs(\n ref=\"refs/heads/main\",\n repo_type=\"GITHUB\",\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var manual_trigger = new Gcp.CloudBuild.Trigger(\"manual-trigger\", new()\n {\n ApprovalConfig = new Gcp.CloudBuild.Inputs.TriggerApprovalConfigArgs\n {\n ApprovalRequired = true,\n },\n GitFileSource = new Gcp.CloudBuild.Inputs.TriggerGitFileSourceArgs\n {\n Path = \"cloudbuild.yaml\",\n RepoType = \"GITHUB\",\n Revision = \"refs/heads/main\",\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n },\n SourceToBuild = new Gcp.CloudBuild.Inputs.TriggerSourceToBuildArgs\n {\n Ref = \"refs/heads/main\",\n RepoType = \"GITHUB\",\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudbuild.NewTrigger(ctx, \"manual-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tApprovalConfig: \u0026cloudbuild.TriggerApprovalConfigArgs{\n\t\t\t\tApprovalRequired: pulumi.Bool(true),\n\t\t\t},\n\t\t\tGitFileSource: \u0026cloudbuild.TriggerGitFileSourceArgs{\n\t\t\t\tPath: pulumi.String(\"cloudbuild.yaml\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t\tRevision: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t},\n\t\t\tSourceToBuild: \u0026cloudbuild.TriggerSourceToBuildArgs{\n\t\t\t\tRef: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerApprovalConfigArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerGitFileSourceArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerSourceToBuildArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var manual_trigger = new Trigger(\"manual-trigger\", TriggerArgs.builder() \n .approvalConfig(TriggerApprovalConfigArgs.builder()\n .approvalRequired(true)\n .build())\n .gitFileSource(TriggerGitFileSourceArgs.builder()\n .path(\"cloudbuild.yaml\")\n .repoType(\"GITHUB\")\n .revision(\"refs/heads/main\")\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .build())\n .sourceToBuild(TriggerSourceToBuildArgs.builder()\n .ref(\"refs/heads/main\")\n .repoType(\"GITHUB\")\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n manual-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n # If this is set on a build, it will become pending when it is run, \n # // and will need to be explicitly approved to start.\n approvalConfig:\n approvalRequired: true\n gitFileSource:\n path: cloudbuild.yaml\n repoType: GITHUB\n revision: refs/heads/main\n uri: https://hashicorp/terraform-provider-google-beta\n sourceToBuild:\n ref: refs/heads/main\n repoType: GITHUB\n uri: https://hashicorp/terraform-provider-google-beta\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nTrigger can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:cloudbuild/trigger:Trigger default projects/{{project}}/locations/{{location}}/triggers/{{trigger_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudbuild/trigger:Trigger default projects/{{project}}/triggers/{{trigger_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudbuild/trigger:Trigger default {{project}}/{{trigger_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudbuild/trigger:Trigger default {{trigger_id}}\n```\n\n ", + "description": "Configuration for an automated build in response to source repository changes.\n\n\nTo get more information about Trigger, see:\n\n* [API documentation](https://cloud.google.com/cloud-build/docs/api/reference/rest/v1/projects.triggers)\n* How-to Guides\n * [Automating builds using build triggers](https://cloud.google.com/cloud-build/docs/running-builds/automate-builds)\n\n\u003e **Note:** You can retrieve the email of the Cloud Build Service Account used in jobs by using the `gcp.projects.ServiceIdentity` resource.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Cloudbuild Trigger Filename\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst filename_trigger = new gcp.cloudbuild.Trigger(\"filename-trigger\", {\n filename: \"cloudbuild.yaml\",\n location: \"us-central1\",\n substitutions: {\n _BAZ: \"qux\",\n _FOO: \"bar\",\n },\n triggerTemplate: {\n branchName: \"main\",\n repoName: \"my-repo\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfilename_trigger = gcp.cloudbuild.Trigger(\"filename-trigger\",\n filename=\"cloudbuild.yaml\",\n location=\"us-central1\",\n substitutions={\n \"_BAZ\": \"qux\",\n \"_FOO\": \"bar\",\n },\n trigger_template=gcp.cloudbuild.TriggerTriggerTemplateArgs(\n branch_name=\"main\",\n repo_name=\"my-repo\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var filename_trigger = new Gcp.CloudBuild.Trigger(\"filename-trigger\", new()\n {\n Filename = \"cloudbuild.yaml\",\n Location = \"us-central1\",\n Substitutions = \n {\n { \"_BAZ\", \"qux\" },\n { \"_FOO\", \"bar\" },\n },\n TriggerTemplate = new Gcp.CloudBuild.Inputs.TriggerTriggerTemplateArgs\n {\n BranchName = \"main\",\n RepoName = \"my-repo\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudbuild.NewTrigger(ctx, \"filename-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tFilename: pulumi.String(\"cloudbuild.yaml\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tSubstitutions: pulumi.StringMap{\n\t\t\t\t\"_BAZ\": pulumi.String(\"qux\"),\n\t\t\t\t\"_FOO\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tTriggerTemplate: \u0026cloudbuild.TriggerTriggerTemplateArgs{\n\t\t\t\tBranchName: pulumi.String(\"main\"),\n\t\t\t\tRepoName: pulumi.String(\"my-repo\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerTriggerTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var filename_trigger = new Trigger(\"filename-trigger\", TriggerArgs.builder() \n .filename(\"cloudbuild.yaml\")\n .location(\"us-central1\")\n .substitutions(Map.ofEntries(\n Map.entry(\"_BAZ\", \"qux\"),\n Map.entry(\"_FOO\", \"bar\")\n ))\n .triggerTemplate(TriggerTriggerTemplateArgs.builder()\n .branchName(\"main\")\n .repoName(\"my-repo\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n filename-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n filename: cloudbuild.yaml\n location: us-central1\n substitutions:\n _BAZ: qux\n _FOO: bar\n triggerTemplate:\n branchName: main\n repoName: my-repo\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Build\n\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildArtifactsArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildArtifactsObjectsArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildAvailableSecretsArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildOptionsArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildSourceArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerBuildSourceStorageSourceArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerTriggerTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var build_trigger = new Trigger(\"build-trigger\", TriggerArgs.builder() \n .build(TriggerBuildArgs.builder()\n .artifacts(TriggerBuildArtifactsArgs.builder()\n .images(\"gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA\")\n .objects(TriggerBuildArtifactsObjectsArgs.builder()\n .location(\"gs://bucket/path/to/somewhere/\")\n .paths(\"path\")\n .build())\n .build())\n .availableSecrets(TriggerBuildAvailableSecretsArgs.builder()\n .secretManager(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build())\n .logsBucket(\"gs://mybucket/logs\")\n .options(TriggerBuildOptionsArgs.builder()\n .diskSizeGb(100)\n .dynamicSubstitutions(true)\n .env(\"ekey = evalue\")\n .logStreamingOption(\"STREAM_OFF\")\n .logging(\"LEGACY\")\n .machineType(\"N1_HIGHCPU_8\")\n .requestedVerifyOption(\"VERIFIED\")\n .secretEnv(\"secretenv = svalue\")\n .sourceProvenanceHash(\"MD5\")\n .substitutionOption(\"ALLOW_LOOSE\")\n .volumes(TriggerBuildOptionsVolumeArgs.builder()\n .name(\"v1\")\n .path(\"v1\")\n .build())\n .workerPool(\"pool\")\n .build())\n .queueTtl(\"20s\")\n .secrets(TriggerBuildSecretArgs.builder()\n .kmsKeyName(\"projects/myProject/locations/global/keyRings/keyring-name/cryptoKeys/key-name\")\n .secretEnv(Map.of(\"PASSWORD\", \"ZW5jcnlwdGVkLXBhc3N3b3JkCg==\"))\n .build())\n .source(TriggerBuildSourceArgs.builder()\n .storageSource(TriggerBuildSourceStorageSourceArgs.builder()\n .bucket(\"mybucket\")\n .object(\"source_code.tar.gz\")\n .build())\n .build())\n .steps( \n TriggerBuildStepArgs.builder()\n .args( \n \"cp\",\n \"gs://mybucket/remotefile.zip\",\n \"localfile.zip\")\n .name(\"gcr.io/cloud-builders/gsutil\")\n .secretEnv(\"MY_SECRET\")\n .timeout(\"120s\")\n .build(),\n TriggerBuildStepArgs.builder()\n .name(\"ubuntu\")\n .script(\"echo hello\")\n .build())\n .substitutions(Map.ofEntries(\n Map.entry(\"_BAZ\", \"qux\"),\n Map.entry(\"_FOO\", \"bar\")\n ))\n .tags( \n \"build\",\n \"newFeature\")\n .build())\n .location(\"global\")\n .triggerTemplate(TriggerTriggerTemplateArgs.builder()\n .branchName(\"main\")\n .repoName(\"my-repo\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n build-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n build:\n artifacts:\n images:\n - gcr.io/$PROJECT_ID/$REPO_NAME:$COMMIT_SHA\n objects:\n location: gs://bucket/path/to/somewhere/\n paths:\n - path\n availableSecrets:\n secretManager:\n - env: MY_SECRET\n versionName: projects/myProject/secrets/mySecret/versions/latest\n logsBucket: gs://mybucket/logs\n options:\n diskSizeGb: 100\n dynamicSubstitutions: true\n env:\n - ekey = evalue\n logStreamingOption: STREAM_OFF\n logging: LEGACY\n machineType: N1_HIGHCPU_8\n requestedVerifyOption: VERIFIED\n secretEnv:\n - secretenv = svalue\n sourceProvenanceHash:\n - MD5\n substitutionOption: ALLOW_LOOSE\n volumes:\n - name: v1\n path: v1\n workerPool: pool\n queueTtl: 20s\n secrets:\n - kmsKeyName: projects/myProject/locations/global/keyRings/keyring-name/cryptoKeys/key-name\n secretEnv:\n PASSWORD: ZW5jcnlwdGVkLXBhc3N3b3JkCg==\n source:\n storageSource:\n bucket: mybucket\n object: source_code.tar.gz\n steps:\n - args:\n - cp\n - gs://mybucket/remotefile.zip\n - localfile.zip\n name: gcr.io/cloud-builders/gsutil\n secretEnv:\n - MY_SECRET\n timeout: 120s\n - name: ubuntu\n script: echo hello\n substitutions:\n _BAZ: qux\n _FOO: bar\n tags:\n - build\n - newFeature\n location: global\n triggerTemplate:\n branchName: main\n repoName: my-repo\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Service Account\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst cloudbuildServiceAccount = new gcp.serviceaccount.Account(\"cloudbuildServiceAccount\", {accountId: \"my-service-account\"});\nconst actAs = new gcp.projects.IAMMember(\"actAs\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/iam.serviceAccountUser\",\n member: pulumi.interpolate`serviceAccount:${cloudbuildServiceAccount.email}`,\n});\nconst logsWriter = new gcp.projects.IAMMember(\"logsWriter\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/logging.logWriter\",\n member: pulumi.interpolate`serviceAccount:${cloudbuildServiceAccount.email}`,\n});\nconst service_account_trigger = new gcp.cloudbuild.Trigger(\"service-account-trigger\", {\n triggerTemplate: {\n branchName: \"main\",\n repoName: \"my-repo\",\n },\n serviceAccount: cloudbuildServiceAccount.id,\n filename: \"cloudbuild.yaml\",\n}, {\n dependsOn: [\n actAs,\n logsWriter,\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ncloudbuild_service_account = gcp.service_account.Account(\"cloudbuildServiceAccount\", account_id=\"my-service-account\")\nact_as = gcp.projects.IAMMember(\"actAs\",\n project=project.project_id,\n role=\"roles/iam.serviceAccountUser\",\n member=cloudbuild_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\nlogs_writer = gcp.projects.IAMMember(\"logsWriter\",\n project=project.project_id,\n role=\"roles/logging.logWriter\",\n member=cloudbuild_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\nservice_account_trigger = gcp.cloudbuild.Trigger(\"service-account-trigger\",\n trigger_template=gcp.cloudbuild.TriggerTriggerTemplateArgs(\n branch_name=\"main\",\n repo_name=\"my-repo\",\n ),\n service_account=cloudbuild_service_account.id,\n filename=\"cloudbuild.yaml\",\n opts=pulumi.ResourceOptions(depends_on=[\n act_as,\n logs_writer,\n ]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cloudbuildServiceAccount = new Gcp.ServiceAccount.Account(\"cloudbuildServiceAccount\", new()\n {\n AccountId = \"my-service-account\",\n });\n\n var actAs = new Gcp.Projects.IAMMember(\"actAs\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/iam.serviceAccountUser\",\n Member = cloudbuildServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var logsWriter = new Gcp.Projects.IAMMember(\"logsWriter\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/logging.logWriter\",\n Member = cloudbuildServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var service_account_trigger = new Gcp.CloudBuild.Trigger(\"service-account-trigger\", new()\n {\n TriggerTemplate = new Gcp.CloudBuild.Inputs.TriggerTriggerTemplateArgs\n {\n BranchName = \"main\",\n RepoName = \"my-repo\",\n },\n ServiceAccount = cloudbuildServiceAccount.Id,\n Filename = \"cloudbuild.yaml\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n actAs,\n logsWriter,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcloudbuildServiceAccount, err := serviceAccount.NewAccount(ctx, \"cloudbuildServiceAccount\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tactAs, err := projects.NewIAMMember(ctx, \"actAs\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: cloudbuildServiceAccount.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\tlogsWriter, err := projects.NewIAMMember(ctx, \"logsWriter\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/logging.logWriter\"),\n\t\t\tMember: cloudbuildServiceAccount.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 = cloudbuild.NewTrigger(ctx, \"service-account-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tTriggerTemplate: \u0026cloudbuild.TriggerTriggerTemplateArgs{\n\t\t\t\tBranchName: pulumi.String(\"main\"),\n\t\t\t\tRepoName: pulumi.String(\"my-repo\"),\n\t\t\t},\n\t\t\tServiceAccount: cloudbuildServiceAccount.ID(),\n\t\t\tFilename: pulumi.String(\"cloudbuild.yaml\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tactAs,\n\t\t\tlogsWriter,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerTriggerTemplateArgs;\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 cloudbuildServiceAccount = new Account(\"cloudbuildServiceAccount\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .build());\n\n var actAs = new IAMMember(\"actAs\", IAMMemberArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/iam.serviceAccountUser\")\n .member(cloudbuildServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var logsWriter = new IAMMember(\"logsWriter\", IAMMemberArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/logging.logWriter\")\n .member(cloudbuildServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var service_account_trigger = new Trigger(\"service-account-trigger\", TriggerArgs.builder() \n .triggerTemplate(TriggerTriggerTemplateArgs.builder()\n .branchName(\"main\")\n .repoName(\"my-repo\")\n .build())\n .serviceAccount(cloudbuildServiceAccount.id())\n .filename(\"cloudbuild.yaml\")\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n actAs,\n logsWriter)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n service-account-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n triggerTemplate:\n branchName: main\n repoName: my-repo\n serviceAccount: ${cloudbuildServiceAccount.id}\n filename: cloudbuild.yaml\n options:\n dependson:\n - ${actAs}\n - ${logsWriter}\n cloudbuildServiceAccount:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n actAs:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/iam.serviceAccountUser\n member: serviceAccount:${cloudbuildServiceAccount.email}\n logsWriter:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/logging.logWriter\n member: serviceAccount:${cloudbuildServiceAccount.email}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Include Build Logs\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst include_build_logs_trigger = new gcp.cloudbuild.Trigger(\"include-build-logs-trigger\", {\n filename: \"cloudbuild.yaml\",\n github: {\n name: \"terraform-provider-google-beta\",\n owner: \"hashicorp\",\n push: {\n branch: `^main$`,\n },\n },\n includeBuildLogs: \"INCLUDE_BUILD_LOGS_WITH_STATUS\",\n location: \"us-central1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninclude_build_logs_trigger = gcp.cloudbuild.Trigger(\"include-build-logs-trigger\",\n filename=\"cloudbuild.yaml\",\n github=gcp.cloudbuild.TriggerGithubArgs(\n name=\"terraform-provider-google-beta\",\n owner=\"hashicorp\",\n push=gcp.cloudbuild.TriggerGithubPushArgs(\n branch=\"^main$\",\n ),\n ),\n include_build_logs=\"INCLUDE_BUILD_LOGS_WITH_STATUS\",\n location=\"us-central1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var include_build_logs_trigger = new Gcp.CloudBuild.Trigger(\"include-build-logs-trigger\", new()\n {\n Filename = \"cloudbuild.yaml\",\n Github = new Gcp.CloudBuild.Inputs.TriggerGithubArgs\n {\n Name = \"terraform-provider-google-beta\",\n Owner = \"hashicorp\",\n Push = new Gcp.CloudBuild.Inputs.TriggerGithubPushArgs\n {\n Branch = \"^main$\",\n },\n },\n IncludeBuildLogs = \"INCLUDE_BUILD_LOGS_WITH_STATUS\",\n Location = \"us-central1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudbuild.NewTrigger(ctx, \"include-build-logs-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tFilename: pulumi.String(\"cloudbuild.yaml\"),\n\t\t\tGithub: \u0026cloudbuild.TriggerGithubArgs{\n\t\t\t\tName: pulumi.String(\"terraform-provider-google-beta\"),\n\t\t\t\tOwner: pulumi.String(\"hashicorp\"),\n\t\t\t\tPush: \u0026cloudbuild.TriggerGithubPushArgs{\n\t\t\t\t\tBranch: pulumi.String(fmt.Sprintf(\"^main$\")),\n\t\t\t\t},\n\t\t\t},\n\t\t\tIncludeBuildLogs: pulumi.String(\"INCLUDE_BUILD_LOGS_WITH_STATUS\"),\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.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerGithubArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerGithubPushArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var include_build_logs_trigger = new Trigger(\"include-build-logs-trigger\", TriggerArgs.builder() \n .filename(\"cloudbuild.yaml\")\n .github(TriggerGithubArgs.builder()\n .name(\"terraform-provider-google-beta\")\n .owner(\"hashicorp\")\n .push(TriggerGithubPushArgs.builder()\n .branch(\"^main$\")\n .build())\n .build())\n .includeBuildLogs(\"INCLUDE_BUILD_LOGS_WITH_STATUS\")\n .location(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n include-build-logs-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n filename: cloudbuild.yaml\n github:\n name: terraform-provider-google-beta\n owner: hashicorp\n push:\n branch: ^main$\n includeBuildLogs: INCLUDE_BUILD_LOGS_WITH_STATUS\n location: us-central1\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Pubsub Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst mytopic = new gcp.pubsub.Topic(\"mytopic\", {});\nconst pubsub_config_trigger = new gcp.cloudbuild.Trigger(\"pubsub-config-trigger\", {\n location: \"us-central1\",\n description: \"acceptance test example pubsub build trigger\",\n pubsubConfig: {\n topic: mytopic.id,\n },\n sourceToBuild: {\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n ref: \"refs/heads/main\",\n repoType: \"GITHUB\",\n },\n gitFileSource: {\n path: \"cloudbuild.yaml\",\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n revision: \"refs/heads/main\",\n repoType: \"GITHUB\",\n },\n substitutions: {\n _ACTION: `$(body.message.data.action)`,\n },\n filter: \"_ACTION.matches('INSERT')\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmytopic = gcp.pubsub.Topic(\"mytopic\")\npubsub_config_trigger = gcp.cloudbuild.Trigger(\"pubsub-config-trigger\",\n location=\"us-central1\",\n description=\"acceptance test example pubsub build trigger\",\n pubsub_config=gcp.cloudbuild.TriggerPubsubConfigArgs(\n topic=mytopic.id,\n ),\n source_to_build=gcp.cloudbuild.TriggerSourceToBuildArgs(\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n ref=\"refs/heads/main\",\n repo_type=\"GITHUB\",\n ),\n git_file_source=gcp.cloudbuild.TriggerGitFileSourceArgs(\n path=\"cloudbuild.yaml\",\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n revision=\"refs/heads/main\",\n repo_type=\"GITHUB\",\n ),\n substitutions={\n \"_ACTION\": \"$(body.message.data.action)\",\n },\n filter=\"_ACTION.matches('INSERT')\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var mytopic = new Gcp.PubSub.Topic(\"mytopic\");\n\n var pubsub_config_trigger = new Gcp.CloudBuild.Trigger(\"pubsub-config-trigger\", new()\n {\n Location = \"us-central1\",\n Description = \"acceptance test example pubsub build trigger\",\n PubsubConfig = new Gcp.CloudBuild.Inputs.TriggerPubsubConfigArgs\n {\n Topic = mytopic.Id,\n },\n SourceToBuild = new Gcp.CloudBuild.Inputs.TriggerSourceToBuildArgs\n {\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n Ref = \"refs/heads/main\",\n RepoType = \"GITHUB\",\n },\n GitFileSource = new Gcp.CloudBuild.Inputs.TriggerGitFileSourceArgs\n {\n Path = \"cloudbuild.yaml\",\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n Revision = \"refs/heads/main\",\n RepoType = \"GITHUB\",\n },\n Substitutions = \n {\n { \"_ACTION\", \"$(body.message.data.action)\" },\n },\n Filter = \"_ACTION.matches('INSERT')\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tmytopic, err := pubsub.NewTopic(ctx, \"mytopic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudbuild.NewTrigger(ctx, \"pubsub-config-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDescription: pulumi.String(\"acceptance test example pubsub build trigger\"),\n\t\t\tPubsubConfig: \u0026cloudbuild.TriggerPubsubConfigArgs{\n\t\t\t\tTopic: mytopic.ID(),\n\t\t\t},\n\t\t\tSourceToBuild: \u0026cloudbuild.TriggerSourceToBuildArgs{\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t\tRef: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t},\n\t\t\tGitFileSource: \u0026cloudbuild.TriggerGitFileSourceArgs{\n\t\t\t\tPath: pulumi.String(\"cloudbuild.yaml\"),\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t\tRevision: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t},\n\t\t\tSubstitutions: pulumi.StringMap{\n\t\t\t\t\"_ACTION\": pulumi.String(fmt.Sprintf(\"$(body.message.data.action)\")),\n\t\t\t},\n\t\t\tFilter: pulumi.String(\"_ACTION.matches('INSERT')\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerPubsubConfigArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerSourceToBuildArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerGitFileSourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var mytopic = new Topic(\"mytopic\");\n\n var pubsub_config_trigger = new Trigger(\"pubsub-config-trigger\", TriggerArgs.builder() \n .location(\"us-central1\")\n .description(\"acceptance test example pubsub build trigger\")\n .pubsubConfig(TriggerPubsubConfigArgs.builder()\n .topic(mytopic.id())\n .build())\n .sourceToBuild(TriggerSourceToBuildArgs.builder()\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .ref(\"refs/heads/main\")\n .repoType(\"GITHUB\")\n .build())\n .gitFileSource(TriggerGitFileSourceArgs.builder()\n .path(\"cloudbuild.yaml\")\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .revision(\"refs/heads/main\")\n .repoType(\"GITHUB\")\n .build())\n .substitutions(Map.of(\"_ACTION\", \"$(body.message.data.action)\"))\n .filter(\"_ACTION.matches('INSERT')\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n mytopic:\n type: gcp:pubsub:Topic\n pubsub-config-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n location: us-central1\n description: acceptance test example pubsub build trigger\n pubsubConfig:\n topic: ${mytopic.id}\n sourceToBuild:\n uri: https://hashicorp/terraform-provider-google-beta\n ref: refs/heads/main\n repoType: GITHUB\n gitFileSource:\n path: cloudbuild.yaml\n uri: https://hashicorp/terraform-provider-google-beta\n revision: refs/heads/main\n repoType: GITHUB\n substitutions:\n _ACTION: $(body.message.data.action)\n filter: _ACTION.matches('INSERT')\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Webhook Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst webhookTriggerSecretKey = new gcp.secretmanager.Secret(\"webhookTriggerSecretKey\", {\n secretId: \"webhook_trigger-secret-key-1\",\n replication: {\n userManaged: {\n replicas: [{\n location: \"us-central1\",\n }],\n },\n },\n});\nconst webhookTriggerSecretKeyData = new gcp.secretmanager.SecretVersion(\"webhookTriggerSecretKeyData\", {\n secret: webhookTriggerSecretKey.id,\n secretData: \"secretkeygoeshere\",\n});\nconst project = gcp.organizations.getProject({});\nconst secretAccessor = project.then(project =\u003e gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [`serviceAccount:service-${project.number}@gcp-sa-cloudbuild.iam.gserviceaccount.com`],\n }],\n}));\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: webhookTriggerSecretKey.project,\n secretId: webhookTriggerSecretKey.secretId,\n policyData: secretAccessor.then(secretAccessor =\u003e secretAccessor.policyData),\n});\nconst webhook_config_trigger = new gcp.cloudbuild.Trigger(\"webhook-config-trigger\", {\n description: \"acceptance test example webhook build trigger\",\n webhookConfig: {\n secret: webhookTriggerSecretKeyData.id,\n },\n sourceToBuild: {\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n ref: \"refs/heads/main\",\n repoType: \"GITHUB\",\n },\n gitFileSource: {\n path: \"cloudbuild.yaml\",\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n revision: \"refs/heads/main\",\n repoType: \"GITHUB\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nwebhook_trigger_secret_key = gcp.secretmanager.Secret(\"webhookTriggerSecretKey\",\n secret_id=\"webhook_trigger-secret-key-1\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n user_managed=gcp.secretmanager.SecretReplicationUserManagedArgs(\n replicas=[gcp.secretmanager.SecretReplicationUserManagedReplicaArgs(\n location=\"us-central1\",\n )],\n ),\n ))\nwebhook_trigger_secret_key_data = gcp.secretmanager.SecretVersion(\"webhookTriggerSecretKeyData\",\n secret=webhook_trigger_secret_key.id,\n secret_data=\"secretkeygoeshere\")\nproject = gcp.organizations.get_project()\nsecret_accessor = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/secretmanager.secretAccessor\",\n members=[f\"serviceAccount:service-{project.number}@gcp-sa-cloudbuild.iam.gserviceaccount.com\"],\n)])\npolicy = gcp.secretmanager.SecretIamPolicy(\"policy\",\n project=webhook_trigger_secret_key.project,\n secret_id=webhook_trigger_secret_key.secret_id,\n policy_data=secret_accessor.policy_data)\nwebhook_config_trigger = gcp.cloudbuild.Trigger(\"webhook-config-trigger\",\n description=\"acceptance test example webhook build trigger\",\n webhook_config=gcp.cloudbuild.TriggerWebhookConfigArgs(\n secret=webhook_trigger_secret_key_data.id,\n ),\n source_to_build=gcp.cloudbuild.TriggerSourceToBuildArgs(\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n ref=\"refs/heads/main\",\n repo_type=\"GITHUB\",\n ),\n git_file_source=gcp.cloudbuild.TriggerGitFileSourceArgs(\n path=\"cloudbuild.yaml\",\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n revision=\"refs/heads/main\",\n repo_type=\"GITHUB\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var webhookTriggerSecretKey = new Gcp.SecretManager.Secret(\"webhookTriggerSecretKey\", new()\n {\n SecretId = \"webhook_trigger-secret-key-1\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n UserManaged = new Gcp.SecretManager.Inputs.SecretReplicationUserManagedArgs\n {\n Replicas = new[]\n {\n new Gcp.SecretManager.Inputs.SecretReplicationUserManagedReplicaArgs\n {\n Location = \"us-central1\",\n },\n },\n },\n },\n });\n\n var webhookTriggerSecretKeyData = new Gcp.SecretManager.SecretVersion(\"webhookTriggerSecretKeyData\", new()\n {\n Secret = webhookTriggerSecretKey.Id,\n SecretData = \"secretkeygoeshere\",\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secretAccessor = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/secretmanager.secretAccessor\",\n Members = new[]\n {\n $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-cloudbuild.iam.gserviceaccount.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = webhookTriggerSecretKey.Project,\n SecretId = webhookTriggerSecretKey.SecretId,\n PolicyData = secretAccessor.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n var webhook_config_trigger = new Gcp.CloudBuild.Trigger(\"webhook-config-trigger\", new()\n {\n Description = \"acceptance test example webhook build trigger\",\n WebhookConfig = new Gcp.CloudBuild.Inputs.TriggerWebhookConfigArgs\n {\n Secret = webhookTriggerSecretKeyData.Id,\n },\n SourceToBuild = new Gcp.CloudBuild.Inputs.TriggerSourceToBuildArgs\n {\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n Ref = \"refs/heads/main\",\n RepoType = \"GITHUB\",\n },\n GitFileSource = new Gcp.CloudBuild.Inputs.TriggerGitFileSourceArgs\n {\n Path = \"cloudbuild.yaml\",\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n Revision = \"refs/heads/main\",\n RepoType = \"GITHUB\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\twebhookTriggerSecretKey, err := secretmanager.NewSecret(ctx, \"webhookTriggerSecretKey\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"webhook_trigger-secret-key-1\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tUserManaged: \u0026secretmanager.SecretReplicationUserManagedArgs{\n\t\t\t\t\tReplicas: secretmanager.SecretReplicationUserManagedReplicaArray{\n\t\t\t\t\t\t\u0026secretmanager.SecretReplicationUserManagedReplicaArgs{\n\t\t\t\t\t\t\tLocation: pulumi.String(\"us-central1\"),\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\twebhookTriggerSecretKeyData, err := secretmanager.NewSecretVersion(ctx, \"webhookTriggerSecretKeyData\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: webhookTriggerSecretKey.ID(),\n\t\t\tSecretData: pulumi.String(\"secretkeygoeshere\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsecretAccessor, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/secretmanager.secretAccessor\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\tfmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-cloudbuild.iam.gserviceaccount.com\", project.Number),\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: webhookTriggerSecretKey.Project,\n\t\t\tSecretId: webhookTriggerSecretKey.SecretId,\n\t\t\tPolicyData: *pulumi.String(secretAccessor.PolicyData),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudbuild.NewTrigger(ctx, \"webhook-config-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tDescription: pulumi.String(\"acceptance test example webhook build trigger\"),\n\t\t\tWebhookConfig: \u0026cloudbuild.TriggerWebhookConfigArgs{\n\t\t\t\tSecret: webhookTriggerSecretKeyData.ID(),\n\t\t\t},\n\t\t\tSourceToBuild: \u0026cloudbuild.TriggerSourceToBuildArgs{\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t\tRef: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t},\n\t\t\tGitFileSource: \u0026cloudbuild.TriggerGitFileSourceArgs{\n\t\t\t\tPath: pulumi.String(\"cloudbuild.yaml\"),\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t\tRevision: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationUserManagedArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicy;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;\nimport com.pulumi.gcp.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerWebhookConfigArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerSourceToBuildArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerGitFileSourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var webhookTriggerSecretKey = new Secret(\"webhookTriggerSecretKey\", SecretArgs.builder() \n .secretId(\"webhook_trigger-secret-key-1\")\n .replication(SecretReplicationArgs.builder()\n .userManaged(SecretReplicationUserManagedArgs.builder()\n .replicas(SecretReplicationUserManagedReplicaArgs.builder()\n .location(\"us-central1\")\n .build())\n .build())\n .build())\n .build());\n\n var webhookTriggerSecretKeyData = new SecretVersion(\"webhookTriggerSecretKeyData\", SecretVersionArgs.builder() \n .secret(webhookTriggerSecretKey.id())\n .secretData(\"secretkeygoeshere\")\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n final var secretAccessor = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/secretmanager.secretAccessor\")\n .members(String.format(\"serviceAccount:service-%s@gcp-sa-cloudbuild.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build())\n .build());\n\n var policy = new SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder() \n .project(webhookTriggerSecretKey.project())\n .secretId(webhookTriggerSecretKey.secretId())\n .policyData(secretAccessor.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n var webhook_config_trigger = new Trigger(\"webhook-config-trigger\", TriggerArgs.builder() \n .description(\"acceptance test example webhook build trigger\")\n .webhookConfig(TriggerWebhookConfigArgs.builder()\n .secret(webhookTriggerSecretKeyData.id())\n .build())\n .sourceToBuild(TriggerSourceToBuildArgs.builder()\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .ref(\"refs/heads/main\")\n .repoType(\"GITHUB\")\n .build())\n .gitFileSource(TriggerGitFileSourceArgs.builder()\n .path(\"cloudbuild.yaml\")\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .revision(\"refs/heads/main\")\n .repoType(\"GITHUB\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n webhookTriggerSecretKey:\n type: gcp:secretmanager:Secret\n properties:\n secretId: webhook_trigger-secret-key-1\n replication:\n userManaged:\n replicas:\n - location: us-central1\n webhookTriggerSecretKeyData:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${webhookTriggerSecretKey.id}\n secretData: secretkeygoeshere\n policy:\n type: gcp:secretmanager:SecretIamPolicy\n properties:\n project: ${webhookTriggerSecretKey.project}\n secretId: ${webhookTriggerSecretKey.secretId}\n policyData: ${secretAccessor.policyData}\n webhook-config-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n description: acceptance test example webhook build trigger\n webhookConfig:\n secret: ${webhookTriggerSecretKeyData.id}\n sourceToBuild:\n uri: https://hashicorp/terraform-provider-google-beta\n ref: refs/heads/main\n repoType: GITHUB\n gitFileSource:\n path: cloudbuild.yaml\n uri: https://hashicorp/terraform-provider-google-beta\n revision: refs/heads/main\n repoType: GITHUB\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n secretAccessor:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/secretmanager.secretAccessor\n members:\n - serviceAccount:service-${project.number}@gcp-sa-cloudbuild.iam.gserviceaccount.com\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Manual\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst manual_trigger = new gcp.cloudbuild.Trigger(\"manual-trigger\", {\n approvalConfig: {\n approvalRequired: true,\n },\n gitFileSource: {\n path: \"cloudbuild.yaml\",\n repoType: \"GITHUB\",\n revision: \"refs/heads/main\",\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n },\n sourceToBuild: {\n ref: \"refs/heads/main\",\n repoType: \"GITHUB\",\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmanual_trigger = gcp.cloudbuild.Trigger(\"manual-trigger\",\n approval_config=gcp.cloudbuild.TriggerApprovalConfigArgs(\n approval_required=True,\n ),\n git_file_source=gcp.cloudbuild.TriggerGitFileSourceArgs(\n path=\"cloudbuild.yaml\",\n repo_type=\"GITHUB\",\n revision=\"refs/heads/main\",\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n ),\n source_to_build=gcp.cloudbuild.TriggerSourceToBuildArgs(\n ref=\"refs/heads/main\",\n repo_type=\"GITHUB\",\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var manual_trigger = new Gcp.CloudBuild.Trigger(\"manual-trigger\", new()\n {\n ApprovalConfig = new Gcp.CloudBuild.Inputs.TriggerApprovalConfigArgs\n {\n ApprovalRequired = true,\n },\n GitFileSource = new Gcp.CloudBuild.Inputs.TriggerGitFileSourceArgs\n {\n Path = \"cloudbuild.yaml\",\n RepoType = \"GITHUB\",\n Revision = \"refs/heads/main\",\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n },\n SourceToBuild = new Gcp.CloudBuild.Inputs.TriggerSourceToBuildArgs\n {\n Ref = \"refs/heads/main\",\n RepoType = \"GITHUB\",\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudbuild.NewTrigger(ctx, \"manual-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tApprovalConfig: \u0026cloudbuild.TriggerApprovalConfigArgs{\n\t\t\t\tApprovalRequired: pulumi.Bool(true),\n\t\t\t},\n\t\t\tGitFileSource: \u0026cloudbuild.TriggerGitFileSourceArgs{\n\t\t\t\tPath: pulumi.String(\"cloudbuild.yaml\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t\tRevision: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t},\n\t\t\tSourceToBuild: \u0026cloudbuild.TriggerSourceToBuildArgs{\n\t\t\t\tRef: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerApprovalConfigArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerGitFileSourceArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerSourceToBuildArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var manual_trigger = new Trigger(\"manual-trigger\", TriggerArgs.builder() \n .approvalConfig(TriggerApprovalConfigArgs.builder()\n .approvalRequired(true)\n .build())\n .gitFileSource(TriggerGitFileSourceArgs.builder()\n .path(\"cloudbuild.yaml\")\n .repoType(\"GITHUB\")\n .revision(\"refs/heads/main\")\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .build())\n .sourceToBuild(TriggerSourceToBuildArgs.builder()\n .ref(\"refs/heads/main\")\n .repoType(\"GITHUB\")\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n manual-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n # If this is set on a build, it will become pending when it is run, \n # // and will need to be explicitly approved to start.\n approvalConfig:\n approvalRequired: true\n gitFileSource:\n path: cloudbuild.yaml\n repoType: GITHUB\n revision: refs/heads/main\n uri: https://hashicorp/terraform-provider-google-beta\n sourceToBuild:\n ref: refs/heads/main\n repoType: GITHUB\n uri: https://hashicorp/terraform-provider-google-beta\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Manual Github Enterprise\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst manual_ghe_trigger = new gcp.cloudbuild.Trigger(\"manual-ghe-trigger\", {\n gitFileSource: {\n githubEnterpriseConfig: \"projects/myProject/locations/global/githubEnterpriseConfigs/configID\",\n path: \"cloudbuild.yaml\",\n repoType: \"GITHUB\",\n revision: \"refs/heads/main\",\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n },\n sourceToBuild: {\n githubEnterpriseConfig: \"projects/myProject/locations/global/githubEnterpriseConfigs/configID\",\n ref: \"refs/heads/main\",\n repoType: \"GITHUB\",\n uri: \"https://hashicorp/terraform-provider-google-beta\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmanual_ghe_trigger = gcp.cloudbuild.Trigger(\"manual-ghe-trigger\",\n git_file_source=gcp.cloudbuild.TriggerGitFileSourceArgs(\n github_enterprise_config=\"projects/myProject/locations/global/githubEnterpriseConfigs/configID\",\n path=\"cloudbuild.yaml\",\n repo_type=\"GITHUB\",\n revision=\"refs/heads/main\",\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n ),\n source_to_build=gcp.cloudbuild.TriggerSourceToBuildArgs(\n github_enterprise_config=\"projects/myProject/locations/global/githubEnterpriseConfigs/configID\",\n ref=\"refs/heads/main\",\n repo_type=\"GITHUB\",\n uri=\"https://hashicorp/terraform-provider-google-beta\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var manual_ghe_trigger = new Gcp.CloudBuild.Trigger(\"manual-ghe-trigger\", new()\n {\n GitFileSource = new Gcp.CloudBuild.Inputs.TriggerGitFileSourceArgs\n {\n GithubEnterpriseConfig = \"projects/myProject/locations/global/githubEnterpriseConfigs/configID\",\n Path = \"cloudbuild.yaml\",\n RepoType = \"GITHUB\",\n Revision = \"refs/heads/main\",\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n },\n SourceToBuild = new Gcp.CloudBuild.Inputs.TriggerSourceToBuildArgs\n {\n GithubEnterpriseConfig = \"projects/myProject/locations/global/githubEnterpriseConfigs/configID\",\n Ref = \"refs/heads/main\",\n RepoType = \"GITHUB\",\n Uri = \"https://hashicorp/terraform-provider-google-beta\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudbuild.NewTrigger(ctx, \"manual-ghe-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tGitFileSource: \u0026cloudbuild.TriggerGitFileSourceArgs{\n\t\t\t\tGithubEnterpriseConfig: pulumi.String(\"projects/myProject/locations/global/githubEnterpriseConfigs/configID\"),\n\t\t\t\tPath: pulumi.String(\"cloudbuild.yaml\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t\tRevision: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t},\n\t\t\tSourceToBuild: \u0026cloudbuild.TriggerSourceToBuildArgs{\n\t\t\t\tGithubEnterpriseConfig: pulumi.String(\"projects/myProject/locations/global/githubEnterpriseConfigs/configID\"),\n\t\t\t\tRef: pulumi.String(\"refs/heads/main\"),\n\t\t\t\tRepoType: pulumi.String(\"GITHUB\"),\n\t\t\t\tUri: pulumi.String(\"https://hashicorp/terraform-provider-google-beta\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerGitFileSourceArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerSourceToBuildArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var manual_ghe_trigger = new Trigger(\"manual-ghe-trigger\", TriggerArgs.builder() \n .gitFileSource(TriggerGitFileSourceArgs.builder()\n .githubEnterpriseConfig(\"projects/myProject/locations/global/githubEnterpriseConfigs/configID\")\n .path(\"cloudbuild.yaml\")\n .repoType(\"GITHUB\")\n .revision(\"refs/heads/main\")\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .build())\n .sourceToBuild(TriggerSourceToBuildArgs.builder()\n .githubEnterpriseConfig(\"projects/myProject/locations/global/githubEnterpriseConfigs/configID\")\n .ref(\"refs/heads/main\")\n .repoType(\"GITHUB\")\n .uri(\"https://hashicorp/terraform-provider-google-beta\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n manual-ghe-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n gitFileSource:\n githubEnterpriseConfig: projects/myProject/locations/global/githubEnterpriseConfigs/configID\n path: cloudbuild.yaml\n repoType: GITHUB\n revision: refs/heads/main\n uri: https://hashicorp/terraform-provider-google-beta\n sourceToBuild:\n githubEnterpriseConfig: projects/myProject/locations/global/githubEnterpriseConfigs/configID\n ref: refs/heads/main\n repoType: GITHUB\n uri: https://hashicorp/terraform-provider-google-beta\n```\n{{% /example %}}\n{{% example %}}\n### Cloudbuild Trigger Repo\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_connection = new gcp.cloudbuildv2.Connection(\"my-connection\", {\n location: \"us-central1\",\n githubConfig: {\n appInstallationId: 123123,\n authorizerCredential: {\n oauthTokenSecretVersion: \"projects/my-project/secrets/github-pat-secret/versions/latest\",\n },\n },\n}, {\n provider: google_beta,\n});\nconst my_repository = new gcp.cloudbuildv2.Repository(\"my-repository\", {\n parentConnection: my_connection.id,\n remoteUri: \"https://github.com/myuser/my-repo.git\",\n}, {\n provider: google_beta,\n});\nconst repo_trigger = new gcp.cloudbuild.Trigger(\"repo-trigger\", {\n location: \"us-central1\",\n repositoryEventConfig: {\n repository: my_repository.id,\n push: {\n branch: \"feature-.*\",\n },\n },\n filename: \"cloudbuild.yaml\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_connection = gcp.cloudbuildv2.Connection(\"my-connection\",\n location=\"us-central1\",\n github_config=gcp.cloudbuildv2.ConnectionGithubConfigArgs(\n app_installation_id=123123,\n authorizer_credential=gcp.cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs(\n oauth_token_secret_version=\"projects/my-project/secrets/github-pat-secret/versions/latest\",\n ),\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\nmy_repository = gcp.cloudbuildv2.Repository(\"my-repository\",\n parent_connection=my_connection.id,\n remote_uri=\"https://github.com/myuser/my-repo.git\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nrepo_trigger = gcp.cloudbuild.Trigger(\"repo-trigger\",\n location=\"us-central1\",\n repository_event_config=gcp.cloudbuild.TriggerRepositoryEventConfigArgs(\n repository=my_repository.id,\n push=gcp.cloudbuild.TriggerRepositoryEventConfigPushArgs(\n branch=\"feature-.*\",\n ),\n ),\n filename=\"cloudbuild.yaml\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_connection = new Gcp.CloudBuildV2.Connection(\"my-connection\", new()\n {\n Location = \"us-central1\",\n GithubConfig = new Gcp.CloudBuildV2.Inputs.ConnectionGithubConfigArgs\n {\n AppInstallationId = 123123,\n AuthorizerCredential = new Gcp.CloudBuildV2.Inputs.ConnectionGithubConfigAuthorizerCredentialArgs\n {\n OauthTokenSecretVersion = \"projects/my-project/secrets/github-pat-secret/versions/latest\",\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var my_repository = new Gcp.CloudBuildV2.Repository(\"my-repository\", new()\n {\n ParentConnection = my_connection.Id,\n RemoteUri = \"https://github.com/myuser/my-repo.git\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var repo_trigger = new Gcp.CloudBuild.Trigger(\"repo-trigger\", new()\n {\n Location = \"us-central1\",\n RepositoryEventConfig = new Gcp.CloudBuild.Inputs.TriggerRepositoryEventConfigArgs\n {\n Repository = my_repository.Id,\n Push = new Gcp.CloudBuild.Inputs.TriggerRepositoryEventConfigPushArgs\n {\n Branch = \"feature-.*\",\n },\n },\n Filename = \"cloudbuild.yaml\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuildv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudbuildv2.NewConnection(ctx, \"my-connection\", \u0026cloudbuildv2.ConnectionArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tGithubConfig: \u0026cloudbuildv2.ConnectionGithubConfigArgs{\n\t\t\t\tAppInstallationId: pulumi.Int(123123),\n\t\t\t\tAuthorizerCredential: \u0026cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs{\n\t\t\t\t\tOauthTokenSecretVersion: pulumi.String(\"projects/my-project/secrets/github-pat-secret/versions/latest\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudbuildv2.NewRepository(ctx, \"my-repository\", \u0026cloudbuildv2.RepositoryArgs{\n\t\t\tParentConnection: my_connection.ID(),\n\t\t\tRemoteUri: pulumi.String(\"https://github.com/myuser/my-repo.git\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudbuild.NewTrigger(ctx, \"repo-trigger\", \u0026cloudbuild.TriggerArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRepositoryEventConfig: \u0026cloudbuild.TriggerRepositoryEventConfigArgs{\n\t\t\t\tRepository: my_repository.ID(),\n\t\t\t\tPush: \u0026cloudbuild.TriggerRepositoryEventConfigPushArgs{\n\t\t\t\t\tBranch: pulumi.String(\"feature-.*\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tFilename: pulumi.String(\"cloudbuild.yaml\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudbuildv2.Connection;\nimport com.pulumi.gcp.cloudbuildv2.ConnectionArgs;\nimport com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigArgs;\nimport com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigAuthorizerCredentialArgs;\nimport com.pulumi.gcp.cloudbuildv2.Repository;\nimport com.pulumi.gcp.cloudbuildv2.RepositoryArgs;\nimport com.pulumi.gcp.cloudbuild.Trigger;\nimport com.pulumi.gcp.cloudbuild.TriggerArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerRepositoryEventConfigArgs;\nimport com.pulumi.gcp.cloudbuild.inputs.TriggerRepositoryEventConfigPushArgs;\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 my_connection = new Connection(\"my-connection\", ConnectionArgs.builder() \n .location(\"us-central1\")\n .githubConfig(ConnectionGithubConfigArgs.builder()\n .appInstallationId(123123)\n .authorizerCredential(ConnectionGithubConfigAuthorizerCredentialArgs.builder()\n .oauthTokenSecretVersion(\"projects/my-project/secrets/github-pat-secret/versions/latest\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var my_repository = new Repository(\"my-repository\", RepositoryArgs.builder() \n .parentConnection(my_connection.id())\n .remoteUri(\"https://github.com/myuser/my-repo.git\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var repo_trigger = new Trigger(\"repo-trigger\", TriggerArgs.builder() \n .location(\"us-central1\")\n .repositoryEventConfig(TriggerRepositoryEventConfigArgs.builder()\n .repository(my_repository.id())\n .push(TriggerRepositoryEventConfigPushArgs.builder()\n .branch(\"feature-.*\")\n .build())\n .build())\n .filename(\"cloudbuild.yaml\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-connection:\n type: gcp:cloudbuildv2:Connection\n properties:\n location: us-central1\n githubConfig:\n appInstallationId: 123123\n authorizerCredential:\n oauthTokenSecretVersion: projects/my-project/secrets/github-pat-secret/versions/latest\n options:\n provider: ${[\"google-beta\"]}\n my-repository:\n type: gcp:cloudbuildv2:Repository\n properties:\n parentConnection: ${[\"my-connection\"].id}\n remoteUri: https://github.com/myuser/my-repo.git\n options:\n provider: ${[\"google-beta\"]}\n repo-trigger:\n type: gcp:cloudbuild:Trigger\n properties:\n location: us-central1\n repositoryEventConfig:\n repository: ${[\"my-repository\"].id}\n push:\n branch: feature-.*\n filename: cloudbuild.yaml\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nTrigger can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:cloudbuild/trigger:Trigger default projects/{{project}}/locations/{{location}}/triggers/{{trigger_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudbuild/trigger:Trigger default projects/{{project}}/triggers/{{trigger_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudbuild/trigger:Trigger default {{project}}/{{trigger_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudbuild/trigger:Trigger default {{trigger_id}}\n```\n\n ", "properties": { "approvalConfig": { "$ref": "#/types/gcp:cloudbuild/TriggerApprovalConfig:TriggerApprovalConfig", @@ -121223,6 +122307,10 @@ "$ref": "#/types/gcp:cloudbuild/TriggerPubsubConfig:TriggerPubsubConfig", "description": "PubsubConfig describes the configuration of a trigger that creates\na build whenever a Pub/Sub message is published.\nOne of `trigger_template`, `github`, `pubsub_config` `webhook_config` or `source_to_build` must be provided.\nStructure is documented below.\n" }, + "repositoryEventConfig": { + "$ref": "#/types/gcp:cloudbuild/TriggerRepositoryEventConfig:TriggerRepositoryEventConfig", + "description": "The configuration of a trigger that creates a build whenever an event from Repo API is received.\n" + }, "serviceAccount": { "type": "string", "description": "The service account used for all user-controlled operations including\ntriggers.patch, triggers.run, builds.create, and builds.cancel.\nIf no service account is set, then the standard Cloud Build service account\n([PROJECT_NUM]@system.gserviceaccount.com) will be used instead.\nFormat: projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT_ID_OR_EMAIL}\n" @@ -121334,6 +122422,10 @@ "$ref": "#/types/gcp:cloudbuild/TriggerPubsubConfig:TriggerPubsubConfig", "description": "PubsubConfig describes the configuration of a trigger that creates\na build whenever a Pub/Sub message is published.\nOne of `trigger_template`, `github`, `pubsub_config` `webhook_config` or `source_to_build` must be provided.\nStructure is documented below.\n" }, + "repositoryEventConfig": { + "$ref": "#/types/gcp:cloudbuild/TriggerRepositoryEventConfig:TriggerRepositoryEventConfig", + "description": "The configuration of a trigger that creates a build whenever an event from Repo API is received.\n" + }, "serviceAccount": { "type": "string", "description": "The service account used for all user-controlled operations including\ntriggers.patch, triggers.run, builds.create, and builds.cancel.\nIf no service account is set, then the standard Cloud Build service account\n([PROJECT_NUM]@system.gserviceaccount.com) will be used instead.\nFormat: projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT_ID_OR_EMAIL}\n" @@ -121440,6 +122532,10 @@ "$ref": "#/types/gcp:cloudbuild/TriggerPubsubConfig:TriggerPubsubConfig", "description": "PubsubConfig describes the configuration of a trigger that creates\na build whenever a Pub/Sub message is published.\nOne of `trigger_template`, `github`, `pubsub_config` `webhook_config` or `source_to_build` must be provided.\nStructure is documented below.\n" }, + "repositoryEventConfig": { + "$ref": "#/types/gcp:cloudbuild/TriggerRepositoryEventConfig:TriggerRepositoryEventConfig", + "description": "The configuration of a trigger that creates a build whenever an event from Repo API is received.\n" + }, "serviceAccount": { "type": "string", "description": "The service account used for all user-controlled operations including\ntriggers.patch, triggers.run, builds.create, and builds.cancel.\nIf no service account is set, then the standard Cloud Build service account\n([PROJECT_NUM]@system.gserviceaccount.com) will be used instead.\nFormat: projects/{PROJECT_ID}/serviceAccounts/{ACCOUNT_ID_OR_EMAIL}\n" @@ -121646,6 +122742,321 @@ "type": "object" } }, + "gcp:cloudbuildv2/connection:Connection": { + "description": "Beta only: The Cloudbuildv2 Connection resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### GitHub Connection\nCreates a Connection to github.com\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst github_token_secret = new gcp.secretmanager.Secret(\"github-token-secret\", {\n secretId: \"github-token-secret\",\n replication: {\n automatic: true,\n },\n}, {\n provider: google_beta,\n});\nconst github_token_secret_version = new gcp.secretmanager.SecretVersion(\"github-token-secret-version\", {\n secret: github_token_secret.id,\n secretData: fs.readFileSync(\"my-github-token.txt\"),\n}, {\n provider: google_beta,\n});\nconst p4sa-secretAccessor = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n secretId: github_token_secret.secretId,\n policyData: p4sa_secretAccessor.then(p4sa_secretAccessor =\u003e p4sa_secretAccessor.policyData),\n}, {\n provider: google_beta,\n});\nconst my_connection = new gcp.cloudbuildv2.Connection(\"my-connection\", {\n location: \"us-west1\",\n githubConfig: {\n appInstallationId: 123123,\n authorizerCredential: {\n oauthTokenSecretVersion: github_token_secret_version.id,\n },\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ngithub_token_secret = gcp.secretmanager.Secret(\"github-token-secret\",\n secret_id=\"github-token-secret\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n automatic=True,\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\ngithub_token_secret_version = gcp.secretmanager.SecretVersion(\"github-token-secret-version\",\n secret=github_token_secret.id,\n secret_data=(lambda path: open(path).read())(\"my-github-token.txt\"),\n opts=pulumi.ResourceOptions(provider=google_beta))\np4sa_secret_accessor = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com\"],\n)])\npolicy = gcp.secretmanager.SecretIamPolicy(\"policy\",\n secret_id=github_token_secret.secret_id,\n policy_data=p4sa_secret_accessor.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\nmy_connection = gcp.cloudbuildv2.Connection(\"my-connection\",\n location=\"us-west1\",\n github_config=gcp.cloudbuildv2.ConnectionGithubConfigArgs(\n app_installation_id=123123,\n authorizer_credential=gcp.cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs(\n oauth_token_secret_version=github_token_secret_version.id,\n ),\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var github_token_secret = new Gcp.SecretManager.Secret(\"github-token-secret\", new()\n {\n SecretId = \"github-token-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Automatic = true,\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var github_token_secret_version = new Gcp.SecretManager.SecretVersion(\"github-token-secret-version\", new()\n {\n Secret = github_token_secret.Id,\n SecretData = File.ReadAllText(\"my-github-token.txt\"),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var p4sa_secretAccessor = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n SecretId = github_token_secret.SecretId,\n PolicyData = p4sa_secretAccessor.Apply(p4sa_secretAccessor =\u003e p4sa_secretAccessor.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData)),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var my_connection = new Gcp.CloudBuildV2.Connection(\"my-connection\", new()\n {\n Location = \"us-west1\",\n GithubConfig = new Gcp.CloudBuildV2.Inputs.ConnectionGithubConfigArgs\n {\n AppInstallationId = 123123,\n AuthorizerCredential = new Gcp.CloudBuildV2.Inputs.ConnectionGithubConfigAuthorizerCredentialArgs\n {\n OauthTokenSecretVersion = github_token_secret_version.Id,\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuildv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecret(ctx, \"github-token-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"github-token-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAutomatic: pulumi.Bool(true),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"github-token-secret-version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: github_token_secret.ID(),\n\t\t\tSecretData: readFileOrPanic(\"my-github-token.txt\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tp4sa_secretAccessor, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/secretmanager.secretAccessor\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tSecretId: github_token_secret.SecretId,\n\t\t\tPolicyData: *pulumi.String(p4sa_secretAccessor.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudbuildv2.NewConnection(ctx, \"my-connection\", \u0026cloudbuildv2.ConnectionArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tGithubConfig: \u0026cloudbuildv2.ConnectionGithubConfigArgs{\n\t\t\t\tAppInstallationId: pulumi.Int(123123),\n\t\t\t\tAuthorizerCredential: \u0026cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs{\n\t\t\t\t\tOauthTokenSecretVersion: github_token_secret_version.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicy;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;\nimport com.pulumi.gcp.cloudbuildv2.Connection;\nimport com.pulumi.gcp.cloudbuildv2.ConnectionArgs;\nimport com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigArgs;\nimport com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigAuthorizerCredentialArgs;\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 github_token_secret = new Secret(\"github-token-secret\", SecretArgs.builder() \n .secretId(\"github-token-secret\")\n .replication(SecretReplicationArgs.builder()\n .automatic(true)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var github_token_secret_version = new SecretVersion(\"github-token-secret-version\", SecretVersionArgs.builder() \n .secret(github_token_secret.id())\n .secretData(Files.readString(Paths.get(\"my-github-token.txt\")))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n final var p4sa-secretAccessor = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com\")\n .build())\n .build());\n\n var policy = new SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder() \n .secretId(github_token_secret.secretId())\n .policyData(p4sa_secretAccessor.policyData())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var my_connection = new Connection(\"my-connection\", ConnectionArgs.builder() \n .location(\"us-west1\")\n .githubConfig(ConnectionGithubConfigArgs.builder()\n .appInstallationId(123123)\n .authorizerCredential(ConnectionGithubConfigAuthorizerCredentialArgs.builder()\n .oauthTokenSecretVersion(github_token_secret_version.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n github-token-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: github-token-secret\n replication:\n automatic: true\n options:\n provider: ${[\"google-beta\"]}\n github-token-secret-version:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${[\"github-token-secret\"].id}\n secretData:\n fn::readFile: my-github-token.txt\n options:\n provider: ${[\"google-beta\"]}\n policy:\n type: gcp:secretmanager:SecretIamPolicy\n properties:\n secretId: ${[\"github-token-secret\"].secretId}\n policyData: ${[\"p4sa-secretAccessor\"].policyData}\n options:\n provider: ${[\"google-beta\"]}\n my-connection:\n type: gcp:cloudbuildv2:Connection\n properties:\n location: us-west1\n githubConfig:\n appInstallationId: 123123\n authorizerCredential:\n oauthTokenSecretVersion: ${[\"github-token-secret-version\"].id}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n p4sa-secretAccessor:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/secretmanager.secretAccessor\n members:\n - serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nConnection can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:cloudbuildv2/connection:Connection default projects/{{project}}/locations/{{location}}/connections/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudbuildv2/connection:Connection default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudbuildv2/connection:Connection default {{location}}/{{name}}\n```\n\n ", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Allows clients to store small amounts of arbitrary data.\n" + }, + "createTime": { + "type": "string", + "description": "Output only. Server assigned timestamp for when the connection was created.\n" + }, + "disabled": { + "type": "boolean", + "description": "If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled.\n" + }, + "etag": { + "type": "string", + "description": "This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding.\n" + }, + "githubConfig": { + "$ref": "#/types/gcp:cloudbuildv2/ConnectionGithubConfig:ConnectionGithubConfig", + "description": "Configuration for connections to github.com.\n" + }, + "githubEnterpriseConfig": { + "$ref": "#/types/gcp:cloudbuildv2/ConnectionGithubEnterpriseConfig:ConnectionGithubEnterpriseConfig", + "description": "Configuration for connections to an instance of GitHub Enterprise.\n" + }, + "installationStates": { + "type": "array", + "items": { + "$ref": "#/types/gcp:cloudbuildv2/ConnectionInstallationState:ConnectionInstallationState" + }, + "description": "Output only. Installation state of the Connection.\n" + }, + "location": { + "type": "string", + "description": "The location for the resource\n" + }, + "name": { + "type": "string", + "description": "Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`.\n" + }, + "project": { + "type": "string", + "description": "The project for the resource\n" + }, + "reconciling": { + "type": "boolean", + "description": "Output only. Set to true when the connection is being set up or updated in the background.\n" + }, + "updateTime": { + "type": "string", + "description": "Output only. Server assigned timestamp for when the connection was updated.\n" + } + }, + "required": [ + "createTime", + "etag", + "installationStates", + "location", + "name", + "project", + "reconciling", + "updateTime" + ], + "inputProperties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Allows clients to store small amounts of arbitrary data.\n" + }, + "disabled": { + "type": "boolean", + "description": "If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled.\n" + }, + "githubConfig": { + "$ref": "#/types/gcp:cloudbuildv2/ConnectionGithubConfig:ConnectionGithubConfig", + "description": "Configuration for connections to github.com.\n" + }, + "githubEnterpriseConfig": { + "$ref": "#/types/gcp:cloudbuildv2/ConnectionGithubEnterpriseConfig:ConnectionGithubEnterpriseConfig", + "description": "Configuration for connections to an instance of GitHub Enterprise.\n" + }, + "location": { + "type": "string", + "description": "The location for the resource\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`.\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The project for the resource\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "location" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Connection resources.\n", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Allows clients to store small amounts of arbitrary data.\n" + }, + "createTime": { + "type": "string", + "description": "Output only. Server assigned timestamp for when the connection was created.\n" + }, + "disabled": { + "type": "boolean", + "description": "If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled.\n" + }, + "etag": { + "type": "string", + "description": "This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding.\n" + }, + "githubConfig": { + "$ref": "#/types/gcp:cloudbuildv2/ConnectionGithubConfig:ConnectionGithubConfig", + "description": "Configuration for connections to github.com.\n" + }, + "githubEnterpriseConfig": { + "$ref": "#/types/gcp:cloudbuildv2/ConnectionGithubEnterpriseConfig:ConnectionGithubEnterpriseConfig", + "description": "Configuration for connections to an instance of GitHub Enterprise.\n" + }, + "installationStates": { + "type": "array", + "items": { + "$ref": "#/types/gcp:cloudbuildv2/ConnectionInstallationState:ConnectionInstallationState" + }, + "description": "Output only. Installation state of the Connection.\n" + }, + "location": { + "type": "string", + "description": "The location for the resource\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`.\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The project for the resource\n", + "willReplaceOnChanges": true + }, + "reconciling": { + "type": "boolean", + "description": "Output only. Set to true when the connection is being set up or updated in the background.\n" + }, + "updateTime": { + "type": "string", + "description": "Output only. Server assigned timestamp for when the connection was updated.\n" + } + }, + "type": "object" + } + }, + "gcp:cloudbuildv2/repository:Repository": { + "description": "Beta only: The Cloudbuildv2 Repository resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Repository In GitHub Connection\nCreates a Repository resource inside a Connection to github.com\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst github_token_secret = new gcp.secretmanager.Secret(\"github-token-secret\", {\n secretId: \"github-token-secret\",\n replication: {\n automatic: true,\n },\n}, {\n provider: google_beta,\n});\nconst github_token_secret_version = new gcp.secretmanager.SecretVersion(\"github-token-secret-version\", {\n secret: github_token_secret.id,\n secretData: fs.readFileSync(\"my-github-token.txt\"),\n}, {\n provider: google_beta,\n});\nconst p4sa-secretAccessor = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n secretId: github_token_secret.secretId,\n policyData: p4sa_secretAccessor.then(p4sa_secretAccessor =\u003e p4sa_secretAccessor.policyData),\n}, {\n provider: google_beta,\n});\nconst my_connection = new gcp.cloudbuildv2.Connection(\"my-connection\", {\n location: \"us-west1\",\n githubConfig: {\n appInstallationId: 123123,\n authorizerCredential: {\n oauthTokenSecretVersion: github_token_secret_version.id,\n },\n },\n}, {\n provider: google_beta,\n});\nconst my_repository = new gcp.cloudbuildv2.Repository(\"my-repository\", {\n location: \"us-west1\",\n parentConnection: my_connection.name,\n remoteUri: \"https://github.com/myuser/myrepo.git\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ngithub_token_secret = gcp.secretmanager.Secret(\"github-token-secret\",\n secret_id=\"github-token-secret\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n automatic=True,\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\ngithub_token_secret_version = gcp.secretmanager.SecretVersion(\"github-token-secret-version\",\n secret=github_token_secret.id,\n secret_data=(lambda path: open(path).read())(\"my-github-token.txt\"),\n opts=pulumi.ResourceOptions(provider=google_beta))\np4sa_secret_accessor = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com\"],\n)])\npolicy = gcp.secretmanager.SecretIamPolicy(\"policy\",\n secret_id=github_token_secret.secret_id,\n policy_data=p4sa_secret_accessor.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\nmy_connection = gcp.cloudbuildv2.Connection(\"my-connection\",\n location=\"us-west1\",\n github_config=gcp.cloudbuildv2.ConnectionGithubConfigArgs(\n app_installation_id=123123,\n authorizer_credential=gcp.cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs(\n oauth_token_secret_version=github_token_secret_version.id,\n ),\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\nmy_repository = gcp.cloudbuildv2.Repository(\"my-repository\",\n location=\"us-west1\",\n parent_connection=my_connection.name,\n remote_uri=\"https://github.com/myuser/myrepo.git\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var github_token_secret = new Gcp.SecretManager.Secret(\"github-token-secret\", new()\n {\n SecretId = \"github-token-secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Automatic = true,\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var github_token_secret_version = new Gcp.SecretManager.SecretVersion(\"github-token-secret-version\", new()\n {\n Secret = github_token_secret.Id,\n SecretData = File.ReadAllText(\"my-github-token.txt\"),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var p4sa_secretAccessor = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n SecretId = github_token_secret.SecretId,\n PolicyData = p4sa_secretAccessor.Apply(p4sa_secretAccessor =\u003e p4sa_secretAccessor.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData)),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var my_connection = new Gcp.CloudBuildV2.Connection(\"my-connection\", new()\n {\n Location = \"us-west1\",\n GithubConfig = new Gcp.CloudBuildV2.Inputs.ConnectionGithubConfigArgs\n {\n AppInstallationId = 123123,\n AuthorizerCredential = new Gcp.CloudBuildV2.Inputs.ConnectionGithubConfigAuthorizerCredentialArgs\n {\n OauthTokenSecretVersion = github_token_secret_version.Id,\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var my_repository = new Gcp.CloudBuildV2.Repository(\"my-repository\", new()\n {\n Location = \"us-west1\",\n ParentConnection = my_connection.Name,\n RemoteUri = \"https://github.com/myuser/myrepo.git\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuildv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := secretmanager.NewSecret(ctx, \"github-token-secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"github-token-secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAutomatic: pulumi.Bool(true),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"github-token-secret-version\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: github_token_secret.ID(),\n\t\t\tSecretData: readFileOrPanic(\"my-github-token.txt\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tp4sa_secretAccessor, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/secretmanager.secretAccessor\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tSecretId: github_token_secret.SecretId,\n\t\t\tPolicyData: *pulumi.String(p4sa_secretAccessor.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudbuildv2.NewConnection(ctx, \"my-connection\", \u0026cloudbuildv2.ConnectionArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tGithubConfig: \u0026cloudbuildv2.ConnectionGithubConfigArgs{\n\t\t\t\tAppInstallationId: pulumi.Int(123123),\n\t\t\t\tAuthorizerCredential: \u0026cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs{\n\t\t\t\t\tOauthTokenSecretVersion: github_token_secret_version.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudbuildv2.NewRepository(ctx, \"my-repository\", \u0026cloudbuildv2.RepositoryArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tParentConnection: my_connection.Name,\n\t\t\tRemoteUri: pulumi.String(\"https://github.com/myuser/myrepo.git\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicy;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;\nimport com.pulumi.gcp.cloudbuildv2.Connection;\nimport com.pulumi.gcp.cloudbuildv2.ConnectionArgs;\nimport com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigArgs;\nimport com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigAuthorizerCredentialArgs;\nimport com.pulumi.gcp.cloudbuildv2.Repository;\nimport com.pulumi.gcp.cloudbuildv2.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 var github_token_secret = new Secret(\"github-token-secret\", SecretArgs.builder() \n .secretId(\"github-token-secret\")\n .replication(SecretReplicationArgs.builder()\n .automatic(true)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var github_token_secret_version = new SecretVersion(\"github-token-secret-version\", SecretVersionArgs.builder() \n .secret(github_token_secret.id())\n .secretData(Files.readString(Paths.get(\"my-github-token.txt\")))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n final var p4sa-secretAccessor = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com\")\n .build())\n .build());\n\n var policy = new SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder() \n .secretId(github_token_secret.secretId())\n .policyData(p4sa_secretAccessor.policyData())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var my_connection = new Connection(\"my-connection\", ConnectionArgs.builder() \n .location(\"us-west1\")\n .githubConfig(ConnectionGithubConfigArgs.builder()\n .appInstallationId(123123)\n .authorizerCredential(ConnectionGithubConfigAuthorizerCredentialArgs.builder()\n .oauthTokenSecretVersion(github_token_secret_version.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var my_repository = new Repository(\"my-repository\", RepositoryArgs.builder() \n .location(\"us-west1\")\n .parentConnection(my_connection.name())\n .remoteUri(\"https://github.com/myuser/myrepo.git\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n github-token-secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: github-token-secret\n replication:\n automatic: true\n options:\n provider: ${[\"google-beta\"]}\n github-token-secret-version:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${[\"github-token-secret\"].id}\n secretData:\n fn::readFile: my-github-token.txt\n options:\n provider: ${[\"google-beta\"]}\n policy:\n type: gcp:secretmanager:SecretIamPolicy\n properties:\n secretId: ${[\"github-token-secret\"].secretId}\n policyData: ${[\"p4sa-secretAccessor\"].policyData}\n options:\n provider: ${[\"google-beta\"]}\n my-connection:\n type: gcp:cloudbuildv2:Connection\n properties:\n location: us-west1\n githubConfig:\n appInstallationId: 123123\n authorizerCredential:\n oauthTokenSecretVersion: ${[\"github-token-secret-version\"].id}\n options:\n provider: ${[\"google-beta\"]}\n my-repository:\n type: gcp:cloudbuildv2:Repository\n properties:\n location: us-west1\n parentConnection: ${[\"my-connection\"].name}\n remoteUri: https://github.com/myuser/myrepo.git\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n p4sa-secretAccessor:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/secretmanager.secretAccessor\n members:\n - serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRepository can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:cloudbuildv2/repository:Repository default projects/{{project}}/locations/{{location}}/connections/{{parent_connection}}/repositories/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudbuildv2/repository:Repository default {{project}}/{{location}}/{{parent_connection}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudbuildv2/repository:Repository default {{location}}/{{parent_connection}}/{{name}}\n```\n\n ", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Allows clients to store small amounts of arbitrary data.\n" + }, + "createTime": { + "type": "string", + "description": "Output only. Server assigned timestamp for when the connection was created.\n" + }, + "etag": { + "type": "string", + "description": "This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding.\n" + }, + "location": { + "type": "string", + "description": "The location for the resource\n" + }, + "name": { + "type": "string", + "description": "Name of the repository.\n" + }, + "parentConnection": { + "type": "string", + "description": "The connection for the resource\n" + }, + "project": { + "type": "string", + "description": "The project for the resource\n" + }, + "remoteUri": { + "type": "string", + "description": "Required. Git Clone HTTPS URI.\n" + }, + "updateTime": { + "type": "string", + "description": "Output only. Server assigned timestamp for when the connection was updated.\n" + } + }, + "required": [ + "createTime", + "etag", + "location", + "name", + "parentConnection", + "project", + "remoteUri", + "updateTime" + ], + "inputProperties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Allows clients to store small amounts of arbitrary data.\n", + "willReplaceOnChanges": true + }, + "location": { + "type": "string", + "description": "The location for the resource\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "Name of the repository.\n", + "willReplaceOnChanges": true + }, + "parentConnection": { + "type": "string", + "description": "The connection for the resource\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The project for the resource\n", + "willReplaceOnChanges": true + }, + "remoteUri": { + "type": "string", + "description": "Required. Git Clone HTTPS URI.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "parentConnection", + "remoteUri" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering Repository resources.\n", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Allows clients to store small amounts of arbitrary data.\n", + "willReplaceOnChanges": true + }, + "createTime": { + "type": "string", + "description": "Output only. Server assigned timestamp for when the connection was created.\n" + }, + "etag": { + "type": "string", + "description": "This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding.\n" + }, + "location": { + "type": "string", + "description": "The location for the resource\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "Name of the repository.\n", + "willReplaceOnChanges": true + }, + "parentConnection": { + "type": "string", + "description": "The connection for the resource\n", + "willReplaceOnChanges": true + }, + "project": { + "type": "string", + "description": "The project for the resource\n", + "willReplaceOnChanges": true + }, + "remoteUri": { + "type": "string", + "description": "Required. Git Clone HTTPS URI.\n", + "willReplaceOnChanges": true + }, + "updateTime": { + "type": "string", + "description": "Output only. Server assigned timestamp for when the connection was updated.\n" + } + }, + "type": "object" + } + }, "gcp:clouddeploy/deliveryPipeline:DeliveryPipeline": { "description": "The Cloud Deploy `DeliveryPipeline` resource\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Delivery_pipeline\nCreates a basic Cloud Deploy delivery pipeline\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.clouddeploy.DeliveryPipeline(\"primary\", {\n annotations: {\n my_first_annotation: \"example-annotation-1\",\n my_second_annotation: \"example-annotation-2\",\n },\n description: \"basic description\",\n labels: {\n my_first_label: \"example-label-1\",\n my_second_label: \"example-label-2\",\n },\n location: \"us-west1\",\n project: \"my-project-name\",\n serialPipeline: {\n stages: [\n {\n profiles: [\n \"example-profile-one\",\n \"example-profile-two\",\n ],\n targetId: \"example-target-one\",\n },\n {\n profiles: [],\n targetId: \"example-target-two\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.clouddeploy.DeliveryPipeline(\"primary\",\n annotations={\n \"my_first_annotation\": \"example-annotation-1\",\n \"my_second_annotation\": \"example-annotation-2\",\n },\n description=\"basic description\",\n labels={\n \"my_first_label\": \"example-label-1\",\n \"my_second_label\": \"example-label-2\",\n },\n location=\"us-west1\",\n project=\"my-project-name\",\n serial_pipeline=gcp.clouddeploy.DeliveryPipelineSerialPipelineArgs(\n stages=[\n gcp.clouddeploy.DeliveryPipelineSerialPipelineStageArgs(\n profiles=[\n \"example-profile-one\",\n \"example-profile-two\",\n ],\n target_id=\"example-target-one\",\n ),\n gcp.clouddeploy.DeliveryPipelineSerialPipelineStageArgs(\n profiles=[],\n target_id=\"example-target-two\",\n ),\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.CloudDeploy.DeliveryPipeline(\"primary\", new()\n {\n Annotations = \n {\n { \"my_first_annotation\", \"example-annotation-1\" },\n { \"my_second_annotation\", \"example-annotation-2\" },\n },\n Description = \"basic description\",\n Labels = \n {\n { \"my_first_label\", \"example-label-1\" },\n { \"my_second_label\", \"example-label-2\" },\n },\n Location = \"us-west1\",\n Project = \"my-project-name\",\n SerialPipeline = new Gcp.CloudDeploy.Inputs.DeliveryPipelineSerialPipelineArgs\n {\n Stages = new[]\n {\n new Gcp.CloudDeploy.Inputs.DeliveryPipelineSerialPipelineStageArgs\n {\n Profiles = new[]\n {\n \"example-profile-one\",\n \"example-profile-two\",\n },\n TargetId = \"example-target-one\",\n },\n new Gcp.CloudDeploy.Inputs.DeliveryPipelineSerialPipelineStageArgs\n {\n Profiles = new[] {},\n TargetId = \"example-target-two\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/clouddeploy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := clouddeploy.NewDeliveryPipeline(ctx, \"primary\", \u0026clouddeploy.DeliveryPipelineArgs{\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"my_first_annotation\": pulumi.String(\"example-annotation-1\"),\n\t\t\t\t\"my_second_annotation\": pulumi.String(\"example-annotation-2\"),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"basic description\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_first_label\": pulumi.String(\"example-label-1\"),\n\t\t\t\t\"my_second_label\": pulumi.String(\"example-label-2\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tSerialPipeline: \u0026clouddeploy.DeliveryPipelineSerialPipelineArgs{\n\t\t\t\tStages: clouddeploy.DeliveryPipelineSerialPipelineStageArray{\n\t\t\t\t\t\u0026clouddeploy.DeliveryPipelineSerialPipelineStageArgs{\n\t\t\t\t\t\tProfiles: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"example-profile-one\"),\n\t\t\t\t\t\t\tpulumi.String(\"example-profile-two\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tTargetId: pulumi.String(\"example-target-one\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026clouddeploy.DeliveryPipelineSerialPipelineStageArgs{\n\t\t\t\t\t\tProfiles: pulumi.StringArray{},\n\t\t\t\t\t\tTargetId: pulumi.String(\"example-target-two\"),\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.clouddeploy.DeliveryPipeline;\nimport com.pulumi.gcp.clouddeploy.DeliveryPipelineArgs;\nimport com.pulumi.gcp.clouddeploy.inputs.DeliveryPipelineSerialPipelineArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 DeliveryPipeline(\"primary\", DeliveryPipelineArgs.builder() \n .annotations(Map.ofEntries(\n Map.entry(\"my_first_annotation\", \"example-annotation-1\"),\n Map.entry(\"my_second_annotation\", \"example-annotation-2\")\n ))\n .description(\"basic description\")\n .labels(Map.ofEntries(\n Map.entry(\"my_first_label\", \"example-label-1\"),\n Map.entry(\"my_second_label\", \"example-label-2\")\n ))\n .location(\"us-west1\")\n .project(\"my-project-name\")\n .serialPipeline(DeliveryPipelineSerialPipelineArgs.builder()\n .stages( \n DeliveryPipelineSerialPipelineStageArgs.builder()\n .profiles( \n \"example-profile-one\",\n \"example-profile-two\")\n .targetId(\"example-target-one\")\n .build(),\n DeliveryPipelineSerialPipelineStageArgs.builder()\n .profiles()\n .targetId(\"example-target-two\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:clouddeploy:DeliveryPipeline\n properties:\n annotations:\n my_first_annotation: example-annotation-1\n my_second_annotation: example-annotation-2\n description: basic description\n labels:\n my_first_label: example-label-1\n my_second_label: example-label-2\n location: us-west1\n project: my-project-name\n serialPipeline:\n stages:\n - profiles:\n - example-profile-one\n - example-profile-two\n targetId: example-target-one\n - profiles: []\n targetId: example-target-two\n```\n{{% /example %}}\n{{% example %}}\n### Verify_delivery_pipeline\ntests creating and updating a delivery pipeline with deployment verification strategy\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.clouddeploy.DeliveryPipeline(\"primary\", {\n location: \"us-west1\",\n annotations: {\n my_first_annotation: \"example-annotation-1\",\n my_second_annotation: \"example-annotation-2\",\n },\n description: \"basic description\",\n labels: {\n my_first_label: \"example-label-1\",\n my_second_label: \"example-label-2\",\n },\n project: \"my-project-name\",\n serialPipeline: {\n stages: [\n {\n profiles: [\n \"example-profile-one\",\n \"example-profile-two\",\n ],\n targetId: \"example-target-one\",\n },\n {\n profiles: [],\n targetId: \"example-target-two\",\n },\n ],\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.clouddeploy.DeliveryPipeline(\"primary\",\n location=\"us-west1\",\n annotations={\n \"my_first_annotation\": \"example-annotation-1\",\n \"my_second_annotation\": \"example-annotation-2\",\n },\n description=\"basic description\",\n labels={\n \"my_first_label\": \"example-label-1\",\n \"my_second_label\": \"example-label-2\",\n },\n project=\"my-project-name\",\n serial_pipeline=gcp.clouddeploy.DeliveryPipelineSerialPipelineArgs(\n stages=[\n gcp.clouddeploy.DeliveryPipelineSerialPipelineStageArgs(\n profiles=[\n \"example-profile-one\",\n \"example-profile-two\",\n ],\n target_id=\"example-target-one\",\n ),\n gcp.clouddeploy.DeliveryPipelineSerialPipelineStageArgs(\n profiles=[],\n target_id=\"example-target-two\",\n ),\n ],\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.CloudDeploy.DeliveryPipeline(\"primary\", new()\n {\n Location = \"us-west1\",\n Annotations = \n {\n { \"my_first_annotation\", \"example-annotation-1\" },\n { \"my_second_annotation\", \"example-annotation-2\" },\n },\n Description = \"basic description\",\n Labels = \n {\n { \"my_first_label\", \"example-label-1\" },\n { \"my_second_label\", \"example-label-2\" },\n },\n Project = \"my-project-name\",\n SerialPipeline = new Gcp.CloudDeploy.Inputs.DeliveryPipelineSerialPipelineArgs\n {\n Stages = new[]\n {\n new Gcp.CloudDeploy.Inputs.DeliveryPipelineSerialPipelineStageArgs\n {\n Profiles = new[]\n {\n \"example-profile-one\",\n \"example-profile-two\",\n },\n TargetId = \"example-target-one\",\n },\n new Gcp.CloudDeploy.Inputs.DeliveryPipelineSerialPipelineStageArgs\n {\n Profiles = new[] {},\n TargetId = \"example-target-two\",\n },\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/clouddeploy\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := clouddeploy.NewDeliveryPipeline(ctx, \"primary\", \u0026clouddeploy.DeliveryPipelineArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"my_first_annotation\": pulumi.String(\"example-annotation-1\"),\n\t\t\t\t\"my_second_annotation\": pulumi.String(\"example-annotation-2\"),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"basic description\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_first_label\": pulumi.String(\"example-label-1\"),\n\t\t\t\t\"my_second_label\": pulumi.String(\"example-label-2\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tSerialPipeline: \u0026clouddeploy.DeliveryPipelineSerialPipelineArgs{\n\t\t\t\tStages: clouddeploy.DeliveryPipelineSerialPipelineStageArray{\n\t\t\t\t\t\u0026clouddeploy.DeliveryPipelineSerialPipelineStageArgs{\n\t\t\t\t\t\tProfiles: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"example-profile-one\"),\n\t\t\t\t\t\t\tpulumi.String(\"example-profile-two\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\tTargetId: pulumi.String(\"example-target-one\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026clouddeploy.DeliveryPipelineSerialPipelineStageArgs{\n\t\t\t\t\t\tProfiles: pulumi.StringArray{},\n\t\t\t\t\t\tTargetId: pulumi.String(\"example-target-two\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.clouddeploy.DeliveryPipeline;\nimport com.pulumi.gcp.clouddeploy.DeliveryPipelineArgs;\nimport com.pulumi.gcp.clouddeploy.inputs.DeliveryPipelineSerialPipelineArgs;\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 DeliveryPipeline(\"primary\", DeliveryPipelineArgs.builder() \n .location(\"us-west1\")\n .annotations(Map.ofEntries(\n Map.entry(\"my_first_annotation\", \"example-annotation-1\"),\n Map.entry(\"my_second_annotation\", \"example-annotation-2\")\n ))\n .description(\"basic description\")\n .labels(Map.ofEntries(\n Map.entry(\"my_first_label\", \"example-label-1\"),\n Map.entry(\"my_second_label\", \"example-label-2\")\n ))\n .project(\"my-project-name\")\n .serialPipeline(DeliveryPipelineSerialPipelineArgs.builder()\n .stages( \n DeliveryPipelineSerialPipelineStageArgs.builder()\n .profiles( \n \"example-profile-one\",\n \"example-profile-two\")\n .targetId(\"example-target-one\")\n .build(),\n DeliveryPipelineSerialPipelineStageArgs.builder()\n .profiles()\n .targetId(\"example-target-two\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:clouddeploy:DeliveryPipeline\n properties:\n location: us-west1\n annotations:\n my_first_annotation: example-annotation-1\n my_second_annotation: example-annotation-2\n description: basic description\n labels:\n my_first_label: example-label-1\n my_second_label: example-label-2\n project: my-project-name\n serialPipeline:\n stages:\n - profiles:\n - example-profile-one\n - example-profile-two\n targetId: example-target-one\n - profiles: []\n targetId: example-target-two\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDeliveryPipeline can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:clouddeploy/deliveryPipeline:DeliveryPipeline default projects/{{project}}/locations/{{location}}/deliveryPipelines/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:clouddeploy/deliveryPipeline:DeliveryPipeline default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:clouddeploy/deliveryPipeline:DeliveryPipeline default {{location}}/{{name}}\n```\n\n ", "properties": { @@ -122214,6 +123625,7 @@ "eventTrigger", "httpsTriggerSecurityLevel", "httpsTriggerUrl", + "maxInstances", "name", "project", "region", @@ -123305,7 +124717,7 @@ } }, "gcp:cloudidentity/group:Group": { - "description": "A Cloud Identity resource representing a Group.\n\n\nTo get more information about Group, see:\n\n* [API documentation](https://cloud.google.com/identity/docs/reference/rest/v1beta1/groups)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/identity/docs/how-to/setup)\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 Cloud Identity API will return a 403 error.\nYour account must have the `serviceusage.services.use` permission on the\n`billing_project` you defined.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Cloud Identity Groups Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cloudIdentityGroupBasic = new gcp.cloudidentity.Group(\"cloudIdentityGroupBasic\", {\n displayName: \"my-identity-group\",\n groupKey: {\n id: \"my-identity-group@example.com\",\n },\n initialGroupConfig: \"WITH_INITIAL_OWNER\",\n labels: {\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n },\n parent: \"customers/A01b123xz\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncloud_identity_group_basic = gcp.cloudidentity.Group(\"cloudIdentityGroupBasic\",\n display_name=\"my-identity-group\",\n group_key=gcp.cloudidentity.GroupGroupKeyArgs(\n id=\"my-identity-group@example.com\",\n ),\n initial_group_config=\"WITH_INITIAL_OWNER\",\n labels={\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n },\n parent=\"customers/A01b123xz\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudIdentityGroupBasic = new Gcp.CloudIdentity.Group(\"cloudIdentityGroupBasic\", new()\n {\n DisplayName = \"my-identity-group\",\n GroupKey = new Gcp.CloudIdentity.Inputs.GroupGroupKeyArgs\n {\n Id = \"my-identity-group@example.com\",\n },\n InitialGroupConfig = \"WITH_INITIAL_OWNER\",\n Labels = \n {\n { \"cloudidentity.googleapis.com/groups.discussion_forum\", \"\" },\n },\n Parent = \"customers/A01b123xz\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudidentity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudidentity.NewGroup(ctx, \"cloudIdentityGroupBasic\", \u0026cloudidentity.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"my-identity-group\"),\n\t\t\tGroupKey: \u0026cloudidentity.GroupGroupKeyArgs{\n\t\t\t\tId: pulumi.String(\"my-identity-group@example.com\"),\n\t\t\t},\n\t\t\tInitialGroupConfig: pulumi.String(\"WITH_INITIAL_OWNER\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"cloudidentity.googleapis.com/groups.discussion_forum\": pulumi.String(\"\"),\n\t\t\t},\n\t\t\tParent: pulumi.String(\"customers/A01b123xz\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudidentity.Group;\nimport com.pulumi.gcp.cloudidentity.GroupArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupGroupKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudIdentityGroupBasic = new Group(\"cloudIdentityGroupBasic\", GroupArgs.builder() \n .displayName(\"my-identity-group\")\n .groupKey(GroupGroupKeyArgs.builder()\n .id(\"my-identity-group@example.com\")\n .build())\n .initialGroupConfig(\"WITH_INITIAL_OWNER\")\n .labels(Map.of(\"cloudidentity.googleapis.com/groups.discussion_forum\", \"\"))\n .parent(\"customers/A01b123xz\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cloudIdentityGroupBasic:\n type: gcp:cloudidentity:Group\n properties:\n displayName: my-identity-group\n groupKey:\n id: my-identity-group@example.com\n initialGroupConfig: WITH_INITIAL_OWNER\n labels:\n cloudidentity.googleapis.com/groups.discussion_forum:\n parent: customers/A01b123xz\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGroup can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:cloudidentity/group:Group default {{name}}\n```\n\n ", + "description": "A Cloud Identity resource representing a Group.\n\n\nTo get more information about Group, see:\n\n* [API documentation](https://cloud.google.com/identity/docs/reference/rest/v1beta1/groups)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/identity/docs/how-to/setup)\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 Cloud Identity API will return a 403 error. \nYour account must have the `serviceusage.services.use` permission on the \n`billing_project` you defined.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Cloud Identity Groups Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cloudIdentityGroupBasic = new gcp.cloudidentity.Group(\"cloudIdentityGroupBasic\", {\n displayName: \"my-identity-group\",\n groupKey: {\n id: \"my-identity-group@example.com\",\n },\n initialGroupConfig: \"WITH_INITIAL_OWNER\",\n labels: {\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n },\n parent: \"customers/A01b123xz\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncloud_identity_group_basic = gcp.cloudidentity.Group(\"cloudIdentityGroupBasic\",\n display_name=\"my-identity-group\",\n group_key=gcp.cloudidentity.GroupGroupKeyArgs(\n id=\"my-identity-group@example.com\",\n ),\n initial_group_config=\"WITH_INITIAL_OWNER\",\n labels={\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n },\n parent=\"customers/A01b123xz\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudIdentityGroupBasic = new Gcp.CloudIdentity.Group(\"cloudIdentityGroupBasic\", new()\n {\n DisplayName = \"my-identity-group\",\n GroupKey = new Gcp.CloudIdentity.Inputs.GroupGroupKeyArgs\n {\n Id = \"my-identity-group@example.com\",\n },\n InitialGroupConfig = \"WITH_INITIAL_OWNER\",\n Labels = \n {\n { \"cloudidentity.googleapis.com/groups.discussion_forum\", \"\" },\n },\n Parent = \"customers/A01b123xz\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudidentity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudidentity.NewGroup(ctx, \"cloudIdentityGroupBasic\", \u0026cloudidentity.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"my-identity-group\"),\n\t\t\tGroupKey: \u0026cloudidentity.GroupGroupKeyArgs{\n\t\t\t\tId: pulumi.String(\"my-identity-group@example.com\"),\n\t\t\t},\n\t\t\tInitialGroupConfig: pulumi.String(\"WITH_INITIAL_OWNER\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"cloudidentity.googleapis.com/groups.discussion_forum\": pulumi.String(\"\"),\n\t\t\t},\n\t\t\tParent: pulumi.String(\"customers/A01b123xz\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudidentity.Group;\nimport com.pulumi.gcp.cloudidentity.GroupArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupGroupKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudIdentityGroupBasic = new Group(\"cloudIdentityGroupBasic\", GroupArgs.builder() \n .displayName(\"my-identity-group\")\n .groupKey(GroupGroupKeyArgs.builder()\n .id(\"my-identity-group@example.com\")\n .build())\n .initialGroupConfig(\"WITH_INITIAL_OWNER\")\n .labels(Map.of(\"cloudidentity.googleapis.com/groups.discussion_forum\", \"\"))\n .parent(\"customers/A01b123xz\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cloudIdentityGroupBasic:\n type: gcp:cloudidentity:Group\n properties:\n displayName: my-identity-group\n groupKey:\n id: my-identity-group@example.com\n initialGroupConfig: WITH_INITIAL_OWNER\n labels:\n cloudidentity.googleapis.com/groups.discussion_forum:\n parent: customers/A01b123xz\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGroup can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:cloudidentity/group:Group default {{name}}\n```\n\n ", "properties": { "createTime": { "type": "string", @@ -123440,7 +124852,7 @@ } }, "gcp:cloudidentity/groupMembership:GroupMembership": { - "description": "A Membership defines a relationship between a Group and an entity belonging to that Group, referred to as a \"member\".\n\n\nTo get more information about GroupMembership, see:\n\n* [API documentation](https://cloud.google.com/identity/docs/reference/rest/v1/groups.memberships)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/identity/docs/how-to/memberships-google-groups)\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 Cloud Identity API will return a 403 error.\nYour account must have the `serviceusage.services.use` permission on the\n`billing_project` you defined.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Cloud Identity Group Membership\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst group = new gcp.cloudidentity.Group(\"group\", {\n displayName: \"my-identity-group\",\n parent: \"customers/A01b123xz\",\n groupKey: {\n id: \"my-identity-group@example.com\",\n },\n labels: {\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n },\n});\nconst child_group = new gcp.cloudidentity.Group(\"child-group\", {\n displayName: \"my-identity-group-child\",\n parent: \"customers/A01b123xz\",\n groupKey: {\n id: \"my-identity-group-child@example.com\",\n },\n labels: {\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n },\n});\nconst cloudIdentityGroupMembershipBasic = new gcp.cloudidentity.GroupMembership(\"cloudIdentityGroupMembershipBasic\", {\n group: group.id,\n preferredMemberKey: {\n id: child_group.groupKey.apply(groupKey =\u003e groupKey.id),\n },\n roles: [{\n name: \"MEMBER\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ngroup = gcp.cloudidentity.Group(\"group\",\n display_name=\"my-identity-group\",\n parent=\"customers/A01b123xz\",\n group_key=gcp.cloudidentity.GroupGroupKeyArgs(\n id=\"my-identity-group@example.com\",\n ),\n labels={\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n })\nchild_group = gcp.cloudidentity.Group(\"child-group\",\n display_name=\"my-identity-group-child\",\n parent=\"customers/A01b123xz\",\n group_key=gcp.cloudidentity.GroupGroupKeyArgs(\n id=\"my-identity-group-child@example.com\",\n ),\n labels={\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n })\ncloud_identity_group_membership_basic = gcp.cloudidentity.GroupMembership(\"cloudIdentityGroupMembershipBasic\",\n group=group.id,\n preferred_member_key=gcp.cloudidentity.GroupMembershipPreferredMemberKeyArgs(\n id=child_group.group_key.id,\n ),\n roles=[gcp.cloudidentity.GroupMembershipRoleArgs(\n name=\"MEMBER\",\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @group = new Gcp.CloudIdentity.Group(\"group\", new()\n {\n DisplayName = \"my-identity-group\",\n Parent = \"customers/A01b123xz\",\n GroupKey = new Gcp.CloudIdentity.Inputs.GroupGroupKeyArgs\n {\n Id = \"my-identity-group@example.com\",\n },\n Labels = \n {\n { \"cloudidentity.googleapis.com/groups.discussion_forum\", \"\" },\n },\n });\n\n var child_group = new Gcp.CloudIdentity.Group(\"child-group\", new()\n {\n DisplayName = \"my-identity-group-child\",\n Parent = \"customers/A01b123xz\",\n GroupKey = new Gcp.CloudIdentity.Inputs.GroupGroupKeyArgs\n {\n Id = \"my-identity-group-child@example.com\",\n },\n Labels = \n {\n { \"cloudidentity.googleapis.com/groups.discussion_forum\", \"\" },\n },\n });\n\n var cloudIdentityGroupMembershipBasic = new Gcp.CloudIdentity.GroupMembership(\"cloudIdentityGroupMembershipBasic\", new()\n {\n Group = @group.Id,\n PreferredMemberKey = new Gcp.CloudIdentity.Inputs.GroupMembershipPreferredMemberKeyArgs\n {\n Id = child_group.GroupKey.Apply(groupKey =\u003e groupKey.Id),\n },\n Roles = new[]\n {\n new Gcp.CloudIdentity.Inputs.GroupMembershipRoleArgs\n {\n Name = \"MEMBER\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudidentity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tgroup, err := cloudidentity.NewGroup(ctx, \"group\", \u0026cloudidentity.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"my-identity-group\"),\n\t\t\tParent: pulumi.String(\"customers/A01b123xz\"),\n\t\t\tGroupKey: \u0026cloudidentity.GroupGroupKeyArgs{\n\t\t\t\tId: pulumi.String(\"my-identity-group@example.com\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"cloudidentity.googleapis.com/groups.discussion_forum\": pulumi.String(\"\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudidentity.NewGroup(ctx, \"child-group\", \u0026cloudidentity.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"my-identity-group-child\"),\n\t\t\tParent: pulumi.String(\"customers/A01b123xz\"),\n\t\t\tGroupKey: \u0026cloudidentity.GroupGroupKeyArgs{\n\t\t\t\tId: pulumi.String(\"my-identity-group-child@example.com\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"cloudidentity.googleapis.com/groups.discussion_forum\": pulumi.String(\"\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudidentity.NewGroupMembership(ctx, \"cloudIdentityGroupMembershipBasic\", \u0026cloudidentity.GroupMembershipArgs{\n\t\t\tGroup: group.ID(),\n\t\t\tPreferredMemberKey: \u0026cloudidentity.GroupMembershipPreferredMemberKeyArgs{\n\t\t\t\tId: child_group.GroupKey.ApplyT(func(groupKey cloudidentity.GroupGroupKey) (*string, error) {\n\t\t\t\t\treturn \u0026groupKey.Id, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t},\n\t\t\tRoles: cloudidentity.GroupMembershipRoleArray{\n\t\t\t\t\u0026cloudidentity.GroupMembershipRoleArgs{\n\t\t\t\t\tName: pulumi.String(\"MEMBER\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudidentity.Group;\nimport com.pulumi.gcp.cloudidentity.GroupArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupGroupKeyArgs;\nimport com.pulumi.gcp.cloudidentity.GroupMembership;\nimport com.pulumi.gcp.cloudidentity.GroupMembershipArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupMembershipPreferredMemberKeyArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupMembershipRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var group = new Group(\"group\", GroupArgs.builder() \n .displayName(\"my-identity-group\")\n .parent(\"customers/A01b123xz\")\n .groupKey(GroupGroupKeyArgs.builder()\n .id(\"my-identity-group@example.com\")\n .build())\n .labels(Map.of(\"cloudidentity.googleapis.com/groups.discussion_forum\", \"\"))\n .build());\n\n var child_group = new Group(\"child-group\", GroupArgs.builder() \n .displayName(\"my-identity-group-child\")\n .parent(\"customers/A01b123xz\")\n .groupKey(GroupGroupKeyArgs.builder()\n .id(\"my-identity-group-child@example.com\")\n .build())\n .labels(Map.of(\"cloudidentity.googleapis.com/groups.discussion_forum\", \"\"))\n .build());\n\n var cloudIdentityGroupMembershipBasic = new GroupMembership(\"cloudIdentityGroupMembershipBasic\", GroupMembershipArgs.builder() \n .group(group.id())\n .preferredMemberKey(GroupMembershipPreferredMemberKeyArgs.builder()\n .id(child_group.groupKey().applyValue(groupKey -\u003e groupKey.id()))\n .build())\n .roles(GroupMembershipRoleArgs.builder()\n .name(\"MEMBER\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n group:\n type: gcp:cloudidentity:Group\n properties:\n displayName: my-identity-group\n parent: customers/A01b123xz\n groupKey:\n id: my-identity-group@example.com\n labels:\n cloudidentity.googleapis.com/groups.discussion_forum:\n child-group:\n type: gcp:cloudidentity:Group\n properties:\n displayName: my-identity-group-child\n parent: customers/A01b123xz\n groupKey:\n id: my-identity-group-child@example.com\n labels:\n cloudidentity.googleapis.com/groups.discussion_forum:\n cloudIdentityGroupMembershipBasic:\n type: gcp:cloudidentity:GroupMembership\n properties:\n group: ${group.id}\n preferredMemberKey:\n id: ${[\"child-group\"].groupKey.id}\n roles:\n - name: MEMBER\n```\n{{% /example %}}\n{{% example %}}\n### Cloud Identity Group Membership User\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst group = new gcp.cloudidentity.Group(\"group\", {\n displayName: \"my-identity-group\",\n parent: \"customers/A01b123xz\",\n groupKey: {\n id: \"my-identity-group@example.com\",\n },\n labels: {\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n },\n});\nconst cloudIdentityGroupMembershipBasic = new gcp.cloudidentity.GroupMembership(\"cloudIdentityGroupMembershipBasic\", {\n group: group.id,\n preferredMemberKey: {\n id: \"cloud_identity_user@example.com\",\n },\n roles: [\n {\n name: \"MEMBER\",\n },\n {\n name: \"MANAGER\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ngroup = gcp.cloudidentity.Group(\"group\",\n display_name=\"my-identity-group\",\n parent=\"customers/A01b123xz\",\n group_key=gcp.cloudidentity.GroupGroupKeyArgs(\n id=\"my-identity-group@example.com\",\n ),\n labels={\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n })\ncloud_identity_group_membership_basic = gcp.cloudidentity.GroupMembership(\"cloudIdentityGroupMembershipBasic\",\n group=group.id,\n preferred_member_key=gcp.cloudidentity.GroupMembershipPreferredMemberKeyArgs(\n id=\"cloud_identity_user@example.com\",\n ),\n roles=[\n gcp.cloudidentity.GroupMembershipRoleArgs(\n name=\"MEMBER\",\n ),\n gcp.cloudidentity.GroupMembershipRoleArgs(\n name=\"MANAGER\",\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @group = new Gcp.CloudIdentity.Group(\"group\", new()\n {\n DisplayName = \"my-identity-group\",\n Parent = \"customers/A01b123xz\",\n GroupKey = new Gcp.CloudIdentity.Inputs.GroupGroupKeyArgs\n {\n Id = \"my-identity-group@example.com\",\n },\n Labels = \n {\n { \"cloudidentity.googleapis.com/groups.discussion_forum\", \"\" },\n },\n });\n\n var cloudIdentityGroupMembershipBasic = new Gcp.CloudIdentity.GroupMembership(\"cloudIdentityGroupMembershipBasic\", new()\n {\n Group = @group.Id,\n PreferredMemberKey = new Gcp.CloudIdentity.Inputs.GroupMembershipPreferredMemberKeyArgs\n {\n Id = \"cloud_identity_user@example.com\",\n },\n Roles = new[]\n {\n new Gcp.CloudIdentity.Inputs.GroupMembershipRoleArgs\n {\n Name = \"MEMBER\",\n },\n new Gcp.CloudIdentity.Inputs.GroupMembershipRoleArgs\n {\n Name = \"MANAGER\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudidentity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tgroup, err := cloudidentity.NewGroup(ctx, \"group\", \u0026cloudidentity.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"my-identity-group\"),\n\t\t\tParent: pulumi.String(\"customers/A01b123xz\"),\n\t\t\tGroupKey: \u0026cloudidentity.GroupGroupKeyArgs{\n\t\t\t\tId: pulumi.String(\"my-identity-group@example.com\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"cloudidentity.googleapis.com/groups.discussion_forum\": pulumi.String(\"\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudidentity.NewGroupMembership(ctx, \"cloudIdentityGroupMembershipBasic\", \u0026cloudidentity.GroupMembershipArgs{\n\t\t\tGroup: group.ID(),\n\t\t\tPreferredMemberKey: \u0026cloudidentity.GroupMembershipPreferredMemberKeyArgs{\n\t\t\t\tId: pulumi.String(\"cloud_identity_user@example.com\"),\n\t\t\t},\n\t\t\tRoles: cloudidentity.GroupMembershipRoleArray{\n\t\t\t\t\u0026cloudidentity.GroupMembershipRoleArgs{\n\t\t\t\t\tName: pulumi.String(\"MEMBER\"),\n\t\t\t\t},\n\t\t\t\t\u0026cloudidentity.GroupMembershipRoleArgs{\n\t\t\t\t\tName: pulumi.String(\"MANAGER\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudidentity.Group;\nimport com.pulumi.gcp.cloudidentity.GroupArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupGroupKeyArgs;\nimport com.pulumi.gcp.cloudidentity.GroupMembership;\nimport com.pulumi.gcp.cloudidentity.GroupMembershipArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupMembershipPreferredMemberKeyArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupMembershipRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var group = new Group(\"group\", GroupArgs.builder() \n .displayName(\"my-identity-group\")\n .parent(\"customers/A01b123xz\")\n .groupKey(GroupGroupKeyArgs.builder()\n .id(\"my-identity-group@example.com\")\n .build())\n .labels(Map.of(\"cloudidentity.googleapis.com/groups.discussion_forum\", \"\"))\n .build());\n\n var cloudIdentityGroupMembershipBasic = new GroupMembership(\"cloudIdentityGroupMembershipBasic\", GroupMembershipArgs.builder() \n .group(group.id())\n .preferredMemberKey(GroupMembershipPreferredMemberKeyArgs.builder()\n .id(\"cloud_identity_user@example.com\")\n .build())\n .roles( \n GroupMembershipRoleArgs.builder()\n .name(\"MEMBER\")\n .build(),\n GroupMembershipRoleArgs.builder()\n .name(\"MANAGER\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n group:\n type: gcp:cloudidentity:Group\n properties:\n displayName: my-identity-group\n parent: customers/A01b123xz\n groupKey:\n id: my-identity-group@example.com\n labels:\n cloudidentity.googleapis.com/groups.discussion_forum:\n cloudIdentityGroupMembershipBasic:\n type: gcp:cloudidentity:GroupMembership\n properties:\n group: ${group.id}\n preferredMemberKey:\n id: cloud_identity_user@example.com\n roles:\n - name: MEMBER\n - name: MANAGER\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGroupMembership can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:cloudidentity/groupMembership:GroupMembership default {{name}}\n```\n\n ", + "description": "A Membership defines a relationship between a Group and an entity belonging to that Group, referred to as a \"member\".\n\n\nTo get more information about GroupMembership, see:\n\n* [API documentation](https://cloud.google.com/identity/docs/reference/rest/v1/groups.memberships)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/identity/docs/how-to/memberships-google-groups)\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 Cloud Identity API will return a 403 error. \nYour account must have the `serviceusage.services.use` permission on the \n`billing_project` you defined.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Cloud Identity Group Membership\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst group = new gcp.cloudidentity.Group(\"group\", {\n displayName: \"my-identity-group\",\n parent: \"customers/A01b123xz\",\n groupKey: {\n id: \"my-identity-group@example.com\",\n },\n labels: {\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n },\n});\nconst child_group = new gcp.cloudidentity.Group(\"child-group\", {\n displayName: \"my-identity-group-child\",\n parent: \"customers/A01b123xz\",\n groupKey: {\n id: \"my-identity-group-child@example.com\",\n },\n labels: {\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n },\n});\nconst cloudIdentityGroupMembershipBasic = new gcp.cloudidentity.GroupMembership(\"cloudIdentityGroupMembershipBasic\", {\n group: group.id,\n preferredMemberKey: {\n id: child_group.groupKey.apply(groupKey =\u003e groupKey.id),\n },\n roles: [{\n name: \"MEMBER\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ngroup = gcp.cloudidentity.Group(\"group\",\n display_name=\"my-identity-group\",\n parent=\"customers/A01b123xz\",\n group_key=gcp.cloudidentity.GroupGroupKeyArgs(\n id=\"my-identity-group@example.com\",\n ),\n labels={\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n })\nchild_group = gcp.cloudidentity.Group(\"child-group\",\n display_name=\"my-identity-group-child\",\n parent=\"customers/A01b123xz\",\n group_key=gcp.cloudidentity.GroupGroupKeyArgs(\n id=\"my-identity-group-child@example.com\",\n ),\n labels={\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n })\ncloud_identity_group_membership_basic = gcp.cloudidentity.GroupMembership(\"cloudIdentityGroupMembershipBasic\",\n group=group.id,\n preferred_member_key=gcp.cloudidentity.GroupMembershipPreferredMemberKeyArgs(\n id=child_group.group_key.id,\n ),\n roles=[gcp.cloudidentity.GroupMembershipRoleArgs(\n name=\"MEMBER\",\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @group = new Gcp.CloudIdentity.Group(\"group\", new()\n {\n DisplayName = \"my-identity-group\",\n Parent = \"customers/A01b123xz\",\n GroupKey = new Gcp.CloudIdentity.Inputs.GroupGroupKeyArgs\n {\n Id = \"my-identity-group@example.com\",\n },\n Labels = \n {\n { \"cloudidentity.googleapis.com/groups.discussion_forum\", \"\" },\n },\n });\n\n var child_group = new Gcp.CloudIdentity.Group(\"child-group\", new()\n {\n DisplayName = \"my-identity-group-child\",\n Parent = \"customers/A01b123xz\",\n GroupKey = new Gcp.CloudIdentity.Inputs.GroupGroupKeyArgs\n {\n Id = \"my-identity-group-child@example.com\",\n },\n Labels = \n {\n { \"cloudidentity.googleapis.com/groups.discussion_forum\", \"\" },\n },\n });\n\n var cloudIdentityGroupMembershipBasic = new Gcp.CloudIdentity.GroupMembership(\"cloudIdentityGroupMembershipBasic\", new()\n {\n Group = @group.Id,\n PreferredMemberKey = new Gcp.CloudIdentity.Inputs.GroupMembershipPreferredMemberKeyArgs\n {\n Id = child_group.GroupKey.Apply(groupKey =\u003e groupKey.Id),\n },\n Roles = new[]\n {\n new Gcp.CloudIdentity.Inputs.GroupMembershipRoleArgs\n {\n Name = \"MEMBER\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudidentity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tgroup, err := cloudidentity.NewGroup(ctx, \"group\", \u0026cloudidentity.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"my-identity-group\"),\n\t\t\tParent: pulumi.String(\"customers/A01b123xz\"),\n\t\t\tGroupKey: \u0026cloudidentity.GroupGroupKeyArgs{\n\t\t\t\tId: pulumi.String(\"my-identity-group@example.com\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"cloudidentity.googleapis.com/groups.discussion_forum\": pulumi.String(\"\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudidentity.NewGroup(ctx, \"child-group\", \u0026cloudidentity.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"my-identity-group-child\"),\n\t\t\tParent: pulumi.String(\"customers/A01b123xz\"),\n\t\t\tGroupKey: \u0026cloudidentity.GroupGroupKeyArgs{\n\t\t\t\tId: pulumi.String(\"my-identity-group-child@example.com\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"cloudidentity.googleapis.com/groups.discussion_forum\": pulumi.String(\"\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudidentity.NewGroupMembership(ctx, \"cloudIdentityGroupMembershipBasic\", \u0026cloudidentity.GroupMembershipArgs{\n\t\t\tGroup: group.ID(),\n\t\t\tPreferredMemberKey: \u0026cloudidentity.GroupMembershipPreferredMemberKeyArgs{\n\t\t\t\tId: child_group.GroupKey.ApplyT(func(groupKey cloudidentity.GroupGroupKey) (*string, error) {\n\t\t\t\t\treturn \u0026groupKey.Id, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t},\n\t\t\tRoles: cloudidentity.GroupMembershipRoleArray{\n\t\t\t\t\u0026cloudidentity.GroupMembershipRoleArgs{\n\t\t\t\t\tName: pulumi.String(\"MEMBER\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudidentity.Group;\nimport com.pulumi.gcp.cloudidentity.GroupArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupGroupKeyArgs;\nimport com.pulumi.gcp.cloudidentity.GroupMembership;\nimport com.pulumi.gcp.cloudidentity.GroupMembershipArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupMembershipPreferredMemberKeyArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupMembershipRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var group = new Group(\"group\", GroupArgs.builder() \n .displayName(\"my-identity-group\")\n .parent(\"customers/A01b123xz\")\n .groupKey(GroupGroupKeyArgs.builder()\n .id(\"my-identity-group@example.com\")\n .build())\n .labels(Map.of(\"cloudidentity.googleapis.com/groups.discussion_forum\", \"\"))\n .build());\n\n var child_group = new Group(\"child-group\", GroupArgs.builder() \n .displayName(\"my-identity-group-child\")\n .parent(\"customers/A01b123xz\")\n .groupKey(GroupGroupKeyArgs.builder()\n .id(\"my-identity-group-child@example.com\")\n .build())\n .labels(Map.of(\"cloudidentity.googleapis.com/groups.discussion_forum\", \"\"))\n .build());\n\n var cloudIdentityGroupMembershipBasic = new GroupMembership(\"cloudIdentityGroupMembershipBasic\", GroupMembershipArgs.builder() \n .group(group.id())\n .preferredMemberKey(GroupMembershipPreferredMemberKeyArgs.builder()\n .id(child_group.groupKey().applyValue(groupKey -\u003e groupKey.id()))\n .build())\n .roles(GroupMembershipRoleArgs.builder()\n .name(\"MEMBER\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n group:\n type: gcp:cloudidentity:Group\n properties:\n displayName: my-identity-group\n parent: customers/A01b123xz\n groupKey:\n id: my-identity-group@example.com\n labels:\n cloudidentity.googleapis.com/groups.discussion_forum:\n child-group:\n type: gcp:cloudidentity:Group\n properties:\n displayName: my-identity-group-child\n parent: customers/A01b123xz\n groupKey:\n id: my-identity-group-child@example.com\n labels:\n cloudidentity.googleapis.com/groups.discussion_forum:\n cloudIdentityGroupMembershipBasic:\n type: gcp:cloudidentity:GroupMembership\n properties:\n group: ${group.id}\n preferredMemberKey:\n id: ${[\"child-group\"].groupKey.id}\n roles:\n - name: MEMBER\n```\n{{% /example %}}\n{{% example %}}\n### Cloud Identity Group Membership User\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst group = new gcp.cloudidentity.Group(\"group\", {\n displayName: \"my-identity-group\",\n parent: \"customers/A01b123xz\",\n groupKey: {\n id: \"my-identity-group@example.com\",\n },\n labels: {\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n },\n});\nconst cloudIdentityGroupMembershipBasic = new gcp.cloudidentity.GroupMembership(\"cloudIdentityGroupMembershipBasic\", {\n group: group.id,\n preferredMemberKey: {\n id: \"cloud_identity_user@example.com\",\n },\n roles: [\n {\n name: \"MEMBER\",\n },\n {\n name: \"MANAGER\",\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ngroup = gcp.cloudidentity.Group(\"group\",\n display_name=\"my-identity-group\",\n parent=\"customers/A01b123xz\",\n group_key=gcp.cloudidentity.GroupGroupKeyArgs(\n id=\"my-identity-group@example.com\",\n ),\n labels={\n \"cloudidentity.googleapis.com/groups.discussion_forum\": \"\",\n })\ncloud_identity_group_membership_basic = gcp.cloudidentity.GroupMembership(\"cloudIdentityGroupMembershipBasic\",\n group=group.id,\n preferred_member_key=gcp.cloudidentity.GroupMembershipPreferredMemberKeyArgs(\n id=\"cloud_identity_user@example.com\",\n ),\n roles=[\n gcp.cloudidentity.GroupMembershipRoleArgs(\n name=\"MEMBER\",\n ),\n gcp.cloudidentity.GroupMembershipRoleArgs(\n name=\"MANAGER\",\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @group = new Gcp.CloudIdentity.Group(\"group\", new()\n {\n DisplayName = \"my-identity-group\",\n Parent = \"customers/A01b123xz\",\n GroupKey = new Gcp.CloudIdentity.Inputs.GroupGroupKeyArgs\n {\n Id = \"my-identity-group@example.com\",\n },\n Labels = \n {\n { \"cloudidentity.googleapis.com/groups.discussion_forum\", \"\" },\n },\n });\n\n var cloudIdentityGroupMembershipBasic = new Gcp.CloudIdentity.GroupMembership(\"cloudIdentityGroupMembershipBasic\", new()\n {\n Group = @group.Id,\n PreferredMemberKey = new Gcp.CloudIdentity.Inputs.GroupMembershipPreferredMemberKeyArgs\n {\n Id = \"cloud_identity_user@example.com\",\n },\n Roles = new[]\n {\n new Gcp.CloudIdentity.Inputs.GroupMembershipRoleArgs\n {\n Name = \"MEMBER\",\n },\n new Gcp.CloudIdentity.Inputs.GroupMembershipRoleArgs\n {\n Name = \"MANAGER\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudidentity\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tgroup, err := cloudidentity.NewGroup(ctx, \"group\", \u0026cloudidentity.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"my-identity-group\"),\n\t\t\tParent: pulumi.String(\"customers/A01b123xz\"),\n\t\t\tGroupKey: \u0026cloudidentity.GroupGroupKeyArgs{\n\t\t\t\tId: pulumi.String(\"my-identity-group@example.com\"),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"cloudidentity.googleapis.com/groups.discussion_forum\": pulumi.String(\"\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudidentity.NewGroupMembership(ctx, \"cloudIdentityGroupMembershipBasic\", \u0026cloudidentity.GroupMembershipArgs{\n\t\t\tGroup: group.ID(),\n\t\t\tPreferredMemberKey: \u0026cloudidentity.GroupMembershipPreferredMemberKeyArgs{\n\t\t\t\tId: pulumi.String(\"cloud_identity_user@example.com\"),\n\t\t\t},\n\t\t\tRoles: cloudidentity.GroupMembershipRoleArray{\n\t\t\t\t\u0026cloudidentity.GroupMembershipRoleArgs{\n\t\t\t\t\tName: pulumi.String(\"MEMBER\"),\n\t\t\t\t},\n\t\t\t\t\u0026cloudidentity.GroupMembershipRoleArgs{\n\t\t\t\t\tName: pulumi.String(\"MANAGER\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudidentity.Group;\nimport com.pulumi.gcp.cloudidentity.GroupArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupGroupKeyArgs;\nimport com.pulumi.gcp.cloudidentity.GroupMembership;\nimport com.pulumi.gcp.cloudidentity.GroupMembershipArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupMembershipPreferredMemberKeyArgs;\nimport com.pulumi.gcp.cloudidentity.inputs.GroupMembershipRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var group = new Group(\"group\", GroupArgs.builder() \n .displayName(\"my-identity-group\")\n .parent(\"customers/A01b123xz\")\n .groupKey(GroupGroupKeyArgs.builder()\n .id(\"my-identity-group@example.com\")\n .build())\n .labels(Map.of(\"cloudidentity.googleapis.com/groups.discussion_forum\", \"\"))\n .build());\n\n var cloudIdentityGroupMembershipBasic = new GroupMembership(\"cloudIdentityGroupMembershipBasic\", GroupMembershipArgs.builder() \n .group(group.id())\n .preferredMemberKey(GroupMembershipPreferredMemberKeyArgs.builder()\n .id(\"cloud_identity_user@example.com\")\n .build())\n .roles( \n GroupMembershipRoleArgs.builder()\n .name(\"MEMBER\")\n .build(),\n GroupMembershipRoleArgs.builder()\n .name(\"MANAGER\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n group:\n type: gcp:cloudidentity:Group\n properties:\n displayName: my-identity-group\n parent: customers/A01b123xz\n groupKey:\n id: my-identity-group@example.com\n labels:\n cloudidentity.googleapis.com/groups.discussion_forum:\n cloudIdentityGroupMembershipBasic:\n type: gcp:cloudidentity:GroupMembership\n properties:\n group: ${group.id}\n preferredMemberKey:\n id: cloud_identity_user@example.com\n roles:\n - name: MEMBER\n - name: MANAGER\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGroupMembership can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:cloudidentity/groupMembership:GroupMembership default {{name}}\n```\n\n ", "properties": { "createTime": { "type": "string", @@ -123452,7 +124864,7 @@ }, "memberKey": { "$ref": "#/types/gcp:cloudidentity/GroupMembershipMemberKey:GroupMembershipMemberKey", - "description": "EntityKey of the member.\nStructure is documented below.\n" + "description": "EntityKey of the member.\n" }, "name": { "type": "string", @@ -123496,7 +124908,7 @@ }, "memberKey": { "$ref": "#/types/gcp:cloudidentity/GroupMembershipMemberKey:GroupMembershipMemberKey", - "description": "EntityKey of the member.\nStructure is documented below.\n", + "description": "EntityKey of the member.\n", "willReplaceOnChanges": true }, "preferredMemberKey": { @@ -123530,7 +124942,7 @@ }, "memberKey": { "$ref": "#/types/gcp:cloudidentity/GroupMembershipMemberKey:GroupMembershipMemberKey", - "description": "EntityKey of the member.\nStructure is documented below.\n", + "description": "EntityKey of the member.\n", "willReplaceOnChanges": true }, "name": { @@ -124155,7 +125567,7 @@ } }, "gcp:cloudrun/service:Service": { - "description": "Service acts as a top-level container that manages a set of Routes and\nConfigurations which implement a network service. Service exists to provide a\nsingular abstraction which can be access controlled, reasoned about, and\nwhich encapsulates software lifecycle decisions such as rollout policy and\nteam resource ownership. Service acts only as an orchestrator of the\nunderlying Routes and Configurations (much as a kubernetes Deployment\norchestrates ReplicaSets).\n\nThe Service's controller will track the statuses of its owned Configuration\nand Route, reflecting their statuses and conditions as its own.\n\nSee also:\nhttps://github.com/knative/specs/blob/main/specs/serving/overview.md\n\n\nTo get more information about Service, see:\n\n* [API documentation](https://cloud.google.com/run/docs/reference/rest/v1/namespaces.services)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/run/docs/)\n\n\u003e **Warning:** `google_cloudrun_service` creates a Managed Google Cloud Run Service. If you need to create\na Cloud Run Service on Anthos(GKE/VMWare) then you will need to create it using the kubernetes alpha provider.\nHave a look at the Cloud Run Anthos example below.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Cloud Run Service Pubsub\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrun.Service(\"default\", {\n location: \"us-central1\",\n template: {\n spec: {\n containers: [{\n image: \"gcr.io/cloudrun/hello\",\n }],\n },\n },\n traffics: [{\n percent: 100,\n latestRevision: true,\n }],\n});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"cloud-run-pubsub-invoker\",\n displayName: \"Cloud Run Pub/Sub Invoker\",\n});\nconst binding = new gcp.cloudrun.IamBinding(\"binding\", {\n location: _default.location,\n service: _default.name,\n role: \"roles/run.invoker\",\n members: [pulumi.interpolate`serviceAccount:${sa.email}`],\n});\nconst project = new gcp.projects.IAMBinding(\"project\", {\n role: \"roles/iam.serviceAccountTokenCreator\",\n members: [pulumi.interpolate`serviceAccount:${sa.email}`],\n});\nconst topic = new gcp.pubsub.Topic(\"topic\", {});\nconst subscription = new gcp.pubsub.Subscription(\"subscription\", {\n topic: topic.name,\n pushConfig: {\n pushEndpoint: _default.statuses.apply(statuses =\u003e statuses[0].url),\n oidcToken: {\n serviceAccountEmail: sa.email,\n },\n attributes: {\n \"x-goog-version\": \"v1\",\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrun.Service(\"default\",\n location=\"us-central1\",\n template=gcp.cloudrun.ServiceTemplateArgs(\n spec=gcp.cloudrun.ServiceTemplateSpecArgs(\n containers=[gcp.cloudrun.ServiceTemplateSpecContainerArgs(\n image=\"gcr.io/cloudrun/hello\",\n )],\n ),\n ),\n traffics=[gcp.cloudrun.ServiceTrafficArgs(\n percent=100,\n latest_revision=True,\n )])\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"cloud-run-pubsub-invoker\",\n display_name=\"Cloud Run Pub/Sub Invoker\")\nbinding = gcp.cloudrun.IamBinding(\"binding\",\n location=default.location,\n service=default.name,\n role=\"roles/run.invoker\",\n members=[sa.email.apply(lambda email: f\"serviceAccount:{email}\")])\nproject = gcp.projects.IAMBinding(\"project\",\n role=\"roles/iam.serviceAccountTokenCreator\",\n members=[sa.email.apply(lambda email: f\"serviceAccount:{email}\")])\ntopic = gcp.pubsub.Topic(\"topic\")\nsubscription = gcp.pubsub.Subscription(\"subscription\",\n topic=topic.name,\n push_config=gcp.pubsub.SubscriptionPushConfigArgs(\n push_endpoint=default.statuses[0].url,\n oidc_token=gcp.pubsub.SubscriptionPushConfigOidcTokenArgs(\n service_account_email=sa.email,\n ),\n attributes={\n \"x-goog-version\": \"v1\",\n },\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRun.Service(\"default\", new()\n {\n Location = \"us-central1\",\n Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs\n {\n Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs\n {\n Image = \"gcr.io/cloudrun/hello\",\n },\n },\n },\n },\n Traffics = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTrafficArgs\n {\n Percent = 100,\n LatestRevision = true,\n },\n },\n });\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"cloud-run-pubsub-invoker\",\n DisplayName = \"Cloud Run Pub/Sub Invoker\",\n });\n\n var binding = new Gcp.CloudRun.IamBinding(\"binding\", new()\n {\n Location = @default.Location,\n Service = @default.Name,\n Role = \"roles/run.invoker\",\n Members = new[]\n {\n sa.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n },\n });\n\n var project = new Gcp.Projects.IAMBinding(\"project\", new()\n {\n Role = \"roles/iam.serviceAccountTokenCreator\",\n Members = new[]\n {\n sa.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n },\n });\n\n var topic = new Gcp.PubSub.Topic(\"topic\");\n\n var subscription = new Gcp.PubSub.Subscription(\"subscription\", new()\n {\n Topic = topic.Name,\n PushConfig = new Gcp.PubSub.Inputs.SubscriptionPushConfigArgs\n {\n PushEndpoint = @default.Statuses.Apply(statuses =\u003e statuses[0].Url),\n OidcToken = new Gcp.PubSub.Inputs.SubscriptionPushConfigOidcTokenArgs\n {\n ServiceAccountEmail = sa.Email,\n },\n Attributes = \n {\n { \"x-goog-version\", \"v1\" },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrun\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrun.NewService(ctx, \"default\", \u0026cloudrun.ServiceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrun.ServiceTemplateArgs{\n\t\t\t\tSpec: \u0026cloudrun.ServiceTemplateSpecArgs{\n\t\t\t\t\tContainers: cloudrun.ServiceTemplateSpecContainerArray{\n\t\t\t\t\t\t\u0026cloudrun.ServiceTemplateSpecContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"gcr.io/cloudrun/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTraffics: cloudrun.ServiceTrafficArray{\n\t\t\t\t\u0026cloudrun.ServiceTrafficArgs{\n\t\t\t\t\tPercent: pulumi.Int(100),\n\t\t\t\t\tLatestRevision: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"cloud-run-pubsub-invoker\"),\n\t\t\tDisplayName: pulumi.String(\"Cloud Run Pub/Sub Invoker\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrun.NewIamBinding(ctx, \"binding\", \u0026cloudrun.IamBindingArgs{\n\t\t\tLocation: _default.Location,\n\t\t\tService: _default.Name,\n\t\t\tRole: pulumi.String(\"roles/run.invoker\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tsa.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), 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 = projects.NewIAMBinding(ctx, \"project\", \u0026projects.IAMBindingArgs{\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountTokenCreator\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tsa.Email.ApplyT(func(email string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"serviceAccount:%v\", email), 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\ttopic, err := pubsub.NewTopic(ctx, \"topic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewSubscription(ctx, \"subscription\", \u0026pubsub.SubscriptionArgs{\n\t\t\tTopic: topic.Name,\n\t\t\tPushConfig: \u0026pubsub.SubscriptionPushConfigArgs{\n\t\t\t\tPushEndpoint: _default.Statuses.ApplyT(func(statuses []cloudrun.ServiceStatus) (*string, error) {\n\t\t\t\t\treturn \u0026statuses[0].Url, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\tOidcToken: \u0026pubsub.SubscriptionPushConfigOidcTokenArgs{\n\t\t\t\t\tServiceAccountEmail: sa.Email,\n\t\t\t\t},\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.cloudrun.Service;\nimport com.pulumi.gcp.cloudrun.ServiceArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTrafficArgs;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.cloudrun.IamBinding;\nimport com.pulumi.gcp.cloudrun.IamBindingArgs;\nimport com.pulumi.gcp.projects.IAMBinding;\nimport com.pulumi.gcp.projects.IAMBindingArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport com.pulumi.gcp.pubsub.Subscription;\nimport com.pulumi.gcp.pubsub.SubscriptionArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionPushConfigArgs;\nimport com.pulumi.gcp.pubsub.inputs.SubscriptionPushConfigOidcTokenArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Service(\"default\", ServiceArgs.builder() \n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .spec(ServiceTemplateSpecArgs.builder()\n .containers(ServiceTemplateSpecContainerArgs.builder()\n .image(\"gcr.io/cloudrun/hello\")\n .build())\n .build())\n .build())\n .traffics(ServiceTrafficArgs.builder()\n .percent(100)\n .latestRevision(true)\n .build())\n .build());\n\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"cloud-run-pubsub-invoker\")\n .displayName(\"Cloud Run Pub/Sub Invoker\")\n .build());\n\n var binding = new IamBinding(\"binding\", IamBindingArgs.builder() \n .location(default_.location())\n .service(default_.name())\n .role(\"roles/run.invoker\")\n .members(sa.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var project = new IAMBinding(\"project\", IAMBindingArgs.builder() \n .role(\"roles/iam.serviceAccountTokenCreator\")\n .members(sa.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var topic = new Topic(\"topic\");\n\n var subscription = new Subscription(\"subscription\", SubscriptionArgs.builder() \n .topic(topic.name())\n .pushConfig(SubscriptionPushConfigArgs.builder()\n .pushEndpoint(default_.statuses().applyValue(statuses -\u003e statuses[0].url()))\n .oidcToken(SubscriptionPushConfigOidcTokenArgs.builder()\n .serviceAccountEmail(sa.email())\n .build())\n .attributes(Map.of(\"x-goog-version\", \"v1\"))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrun:Service\n properties:\n location: us-central1\n template:\n spec:\n containers:\n - image: gcr.io/cloudrun/hello\n traffics:\n - percent: 100\n latestRevision: true\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: cloud-run-pubsub-invoker\n displayName: Cloud Run Pub/Sub Invoker\n binding:\n type: gcp:cloudrun:IamBinding\n properties:\n location: ${default.location}\n service: ${default.name}\n role: roles/run.invoker\n members:\n - serviceAccount:${sa.email}\n project:\n type: gcp:projects:IAMBinding\n properties:\n role: roles/iam.serviceAccountTokenCreator\n members:\n - serviceAccount:${sa.email}\n topic:\n type: gcp:pubsub:Topic\n subscription:\n type: gcp:pubsub:Subscription\n properties:\n topic: ${topic.name}\n pushConfig:\n pushEndpoint: ${default.statuses[0].url}\n oidcToken:\n serviceAccountEmail: ${sa.email}\n attributes:\n x-goog-version: v1\n```\n{{% /example %}}\n{{% example %}}\n### Cloud Run Service Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrun.Service(\"default\", {\n location: \"us-central1\",\n template: {\n spec: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n traffics: [{\n latestRevision: true,\n percent: 100,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrun.Service(\"default\",\n location=\"us-central1\",\n template=gcp.cloudrun.ServiceTemplateArgs(\n spec=gcp.cloudrun.ServiceTemplateSpecArgs(\n containers=[gcp.cloudrun.ServiceTemplateSpecContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n ),\n ),\n traffics=[gcp.cloudrun.ServiceTrafficArgs(\n latest_revision=True,\n percent=100,\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRun.Service(\"default\", new()\n {\n Location = \"us-central1\",\n Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs\n {\n Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n },\n Traffics = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTrafficArgs\n {\n LatestRevision = true,\n Percent = 100,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrun\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrun.NewService(ctx, \"default\", \u0026cloudrun.ServiceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrun.ServiceTemplateArgs{\n\t\t\t\tSpec: \u0026cloudrun.ServiceTemplateSpecArgs{\n\t\t\t\t\tContainers: cloudrun.ServiceTemplateSpecContainerArray{\n\t\t\t\t\t\t\u0026cloudrun.ServiceTemplateSpecContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTraffics: cloudrun.ServiceTrafficArray{\n\t\t\t\t\u0026cloudrun.ServiceTrafficArgs{\n\t\t\t\t\tLatestRevision: pulumi.Bool(true),\n\t\t\t\t\tPercent: pulumi.Int(100),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrun.Service;\nimport com.pulumi.gcp.cloudrun.ServiceArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTrafficArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Service(\"default\", ServiceArgs.builder() \n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .spec(ServiceTemplateSpecArgs.builder()\n .containers(ServiceTemplateSpecContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build())\n .traffics(ServiceTrafficArgs.builder()\n .latestRevision(true)\n .percent(100)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrun:Service\n properties:\n location: us-central1\n template:\n spec:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n traffics:\n - latestRevision: true\n percent: 100\n```\n{{% /example %}}\n{{% example %}}\n### Cloud Run Service Sql\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n region: \"us-east1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst _default = new gcp.cloudrun.Service(\"default\", {\n location: \"us-central1\",\n template: {\n spec: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n metadata: {\n annotations: {\n \"autoscaling.knative.dev/maxScale\": \"1000\",\n \"run.googleapis.com/cloudsql-instances\": instance.connectionName,\n \"run.googleapis.com/client-name\": \"demo\",\n },\n },\n },\n autogenerateRevisionName: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n region=\"us-east1\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ),\n deletion_protection=True)\ndefault = gcp.cloudrun.Service(\"default\",\n location=\"us-central1\",\n template=gcp.cloudrun.ServiceTemplateArgs(\n spec=gcp.cloudrun.ServiceTemplateSpecArgs(\n containers=[gcp.cloudrun.ServiceTemplateSpecContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n ),\n metadata=gcp.cloudrun.ServiceTemplateMetadataArgs(\n annotations={\n \"autoscaling.knative.dev/maxScale\": \"1000\",\n \"run.googleapis.com/cloudsql-instances\": instance.connection_name,\n \"run.googleapis.com/client-name\": \"demo\",\n },\n ),\n ),\n autogenerate_revision_name=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Region = \"us-east1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var @default = new Gcp.CloudRun.Service(\"default\", new()\n {\n Location = \"us-central1\",\n Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs\n {\n Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n Metadata = new Gcp.CloudRun.Inputs.ServiceTemplateMetadataArgs\n {\n Annotations = \n {\n { \"autoscaling.knative.dev/maxScale\", \"1000\" },\n { \"run.googleapis.com/cloudsql-instances\", instance.ConnectionName },\n { \"run.googleapis.com/client-name\", \"demo\" },\n },\n },\n },\n AutogenerateRevisionName = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrun\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tRegion: pulumi.String(\"us-east1\"),\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},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrun.NewService(ctx, \"default\", \u0026cloudrun.ServiceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrun.ServiceTemplateArgs{\n\t\t\t\tSpec: \u0026cloudrun.ServiceTemplateSpecArgs{\n\t\t\t\t\tContainers: cloudrun.ServiceTemplateSpecContainerArray{\n\t\t\t\t\t\t\u0026cloudrun.ServiceTemplateSpecContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMetadata: \u0026cloudrun.ServiceTemplateMetadataArgs{\n\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\"autoscaling.knative.dev/maxScale\": pulumi.String(\"1000\"),\n\t\t\t\t\t\t\"run.googleapis.com/cloudsql-instances\": instance.ConnectionName,\n\t\t\t\t\t\t\"run.googleapis.com/client-name\": pulumi.String(\"demo\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tAutogenerateRevisionName: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.cloudrun.Service;\nimport com.pulumi.gcp.cloudrun.ServiceArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateMetadataArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .region(\"us-east1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .spec(ServiceTemplateSpecArgs.builder()\n .containers(ServiceTemplateSpecContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .metadata(ServiceTemplateMetadataArgs.builder()\n .annotations(Map.ofEntries(\n Map.entry(\"autoscaling.knative.dev/maxScale\", \"1000\"),\n Map.entry(\"run.googleapis.com/cloudsql-instances\", instance.connectionName()),\n Map.entry(\"run.googleapis.com/client-name\", \"demo\")\n ))\n .build())\n .build())\n .autogenerateRevisionName(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrun:Service\n properties:\n location: us-central1\n template:\n spec:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n metadata:\n annotations:\n autoscaling.knative.dev/maxScale: '1000'\n run.googleapis.com/cloudsql-instances: ${instance.connectionName}\n run.googleapis.com/client-name: demo\n autogenerateRevisionName: true\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n region: us-east1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n deletionProtection: 'true'\n```\n{{% /example %}}\n{{% example %}}\n### Cloud Run Service Noauth\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrun.Service(\"default\", {\n location: \"us-central1\",\n template: {\n spec: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n});\nconst noauthIAMPolicy = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/run.invoker\",\n members: [\"allUsers\"],\n }],\n});\nconst noauthIamPolicy = new gcp.cloudrun.IamPolicy(\"noauthIamPolicy\", {\n location: _default.location,\n project: _default.project,\n service: _default.name,\n policyData: noauthIAMPolicy.then(noauthIAMPolicy =\u003e noauthIAMPolicy.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrun.Service(\"default\",\n location=\"us-central1\",\n template=gcp.cloudrun.ServiceTemplateArgs(\n spec=gcp.cloudrun.ServiceTemplateSpecArgs(\n containers=[gcp.cloudrun.ServiceTemplateSpecContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n ),\n ))\nnoauth_iam_policy = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/run.invoker\",\n members=[\"allUsers\"],\n)])\nnoauth_iam_policy = gcp.cloudrun.IamPolicy(\"noauthIamPolicy\",\n location=default.location,\n project=default.project,\n service=default.name,\n policy_data=noauth_iam_policy.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRun.Service(\"default\", new()\n {\n Location = \"us-central1\",\n Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs\n {\n Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n },\n });\n\n var noauthIAMPolicy = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/run.invoker\",\n Members = new[]\n {\n \"allUsers\",\n },\n },\n },\n });\n\n var noauthIamPolicy = new Gcp.CloudRun.IamPolicy(\"noauthIamPolicy\", new()\n {\n Location = @default.Location,\n Project = @default.Project,\n Service = @default.Name,\n PolicyData = noauthIAMPolicy.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrun\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrun.NewService(ctx, \"default\", \u0026cloudrun.ServiceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrun.ServiceTemplateArgs{\n\t\t\t\tSpec: \u0026cloudrun.ServiceTemplateSpecArgs{\n\t\t\t\t\tContainers: cloudrun.ServiceTemplateSpecContainerArray{\n\t\t\t\t\t\t\u0026cloudrun.ServiceTemplateSpecContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnoauthIAMPolicy, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/run.invoker\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"allUsers\",\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 = cloudrun.NewIamPolicy(ctx, \"noauthIamPolicy\", \u0026cloudrun.IamPolicyArgs{\n\t\t\tLocation: _default.Location,\n\t\t\tProject: _default.Project,\n\t\t\tService: _default.Name,\n\t\t\tPolicyData: *pulumi.String(noauthIAMPolicy.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.cloudrun.Service;\nimport com.pulumi.gcp.cloudrun.ServiceArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.cloudrun.IamPolicy;\nimport com.pulumi.gcp.cloudrun.IamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Service(\"default\", ServiceArgs.builder() \n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .spec(ServiceTemplateSpecArgs.builder()\n .containers(ServiceTemplateSpecContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build())\n .build());\n\n final var noauthIAMPolicy = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/run.invoker\")\n .members(\"allUsers\")\n .build())\n .build());\n\n var noauthIamPolicy = new IamPolicy(\"noauthIamPolicy\", IamPolicyArgs.builder() \n .location(default_.location())\n .project(default_.project())\n .service(default_.name())\n .policyData(noauthIAMPolicy.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrun:Service\n properties:\n location: us-central1\n template:\n spec:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n noauthIamPolicy:\n type: gcp:cloudrun:IamPolicy\n properties:\n location: ${default.location}\n project: ${default.project}\n service: ${default.name}\n policyData: ${noauthIAMPolicy.policyData}\nvariables:\n noauthIAMPolicy:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/run.invoker\n members:\n - allUsers\n```\n{{% /example %}}\n{{% example %}}\n### Cloud Run Service Probes\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrun.Service(\"default\", {\n location: \"us-central1\",\n metadata: {\n annotations: {\n \"run.googleapis.com/launch-stage\": \"BETA\",\n },\n },\n template: {\n spec: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n startupProbe: {\n initialDelaySeconds: 0,\n timeoutSeconds: 1,\n periodSeconds: 3,\n failureThreshold: 1,\n tcpSocket: {\n port: 8080,\n },\n },\n livenessProbe: {\n httpGet: {\n path: \"/\",\n },\n },\n }],\n },\n },\n traffics: [{\n percent: 100,\n latestRevision: true,\n }],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrun.Service(\"default\",\n location=\"us-central1\",\n metadata=gcp.cloudrun.ServiceMetadataArgs(\n annotations={\n \"run.googleapis.com/launch-stage\": \"BETA\",\n },\n ),\n template=gcp.cloudrun.ServiceTemplateArgs(\n spec=gcp.cloudrun.ServiceTemplateSpecArgs(\n containers=[gcp.cloudrun.ServiceTemplateSpecContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n startup_probe=gcp.cloudrun.ServiceTemplateSpecContainerStartupProbeArgs(\n initial_delay_seconds=0,\n timeout_seconds=1,\n period_seconds=3,\n failure_threshold=1,\n tcp_socket=gcp.cloudrun.ServiceTemplateSpecContainerStartupProbeTcpSocketArgs(\n port=8080,\n ),\n ),\n liveness_probe=gcp.cloudrun.ServiceTemplateSpecContainerLivenessProbeArgs(\n http_get=gcp.cloudrun.ServiceTemplateSpecContainerLivenessProbeHttpGetArgs(\n path=\"/\",\n ),\n ),\n )],\n ),\n ),\n traffics=[gcp.cloudrun.ServiceTrafficArgs(\n percent=100,\n latest_revision=True,\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRun.Service(\"default\", new()\n {\n Location = \"us-central1\",\n Metadata = new Gcp.CloudRun.Inputs.ServiceMetadataArgs\n {\n Annotations = \n {\n { \"run.googleapis.com/launch-stage\", \"BETA\" },\n },\n },\n Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs\n {\n Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n StartupProbe = new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerStartupProbeArgs\n {\n InitialDelaySeconds = 0,\n TimeoutSeconds = 1,\n PeriodSeconds = 3,\n FailureThreshold = 1,\n TcpSocket = new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerStartupProbeTcpSocketArgs\n {\n Port = 8080,\n },\n },\n LivenessProbe = new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerLivenessProbeArgs\n {\n HttpGet = new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerLivenessProbeHttpGetArgs\n {\n Path = \"/\",\n },\n },\n },\n },\n },\n },\n Traffics = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTrafficArgs\n {\n Percent = 100,\n LatestRevision = true,\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrun\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrun.NewService(ctx, \"default\", \u0026cloudrun.ServiceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tMetadata: \u0026cloudrun.ServiceMetadataArgs{\n\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\"run.googleapis.com/launch-stage\": pulumi.String(\"BETA\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTemplate: \u0026cloudrun.ServiceTemplateArgs{\n\t\t\t\tSpec: \u0026cloudrun.ServiceTemplateSpecArgs{\n\t\t\t\t\tContainers: cloudrun.ServiceTemplateSpecContainerArray{\n\t\t\t\t\t\t\u0026cloudrun.ServiceTemplateSpecContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tStartupProbe: \u0026cloudrun.ServiceTemplateSpecContainerStartupProbeArgs{\n\t\t\t\t\t\t\t\tInitialDelaySeconds: pulumi.Int(0),\n\t\t\t\t\t\t\t\tTimeoutSeconds: pulumi.Int(1),\n\t\t\t\t\t\t\t\tPeriodSeconds: pulumi.Int(3),\n\t\t\t\t\t\t\t\tFailureThreshold: pulumi.Int(1),\n\t\t\t\t\t\t\t\tTcpSocket: \u0026cloudrun.ServiceTemplateSpecContainerStartupProbeTcpSocketArgs{\n\t\t\t\t\t\t\t\t\tPort: pulumi.Int(8080),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tLivenessProbe: \u0026cloudrun.ServiceTemplateSpecContainerLivenessProbeArgs{\n\t\t\t\t\t\t\t\tHttpGet: \u0026cloudrun.ServiceTemplateSpecContainerLivenessProbeHttpGetArgs{\n\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTraffics: cloudrun.ServiceTrafficArray{\n\t\t\t\t\u0026cloudrun.ServiceTrafficArgs{\n\t\t\t\t\tPercent: pulumi.Int(100),\n\t\t\t\t\tLatestRevision: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrun.Service;\nimport com.pulumi.gcp.cloudrun.ServiceArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceMetadataArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTrafficArgs;\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 Service(\"default\", ServiceArgs.builder() \n .location(\"us-central1\")\n .metadata(ServiceMetadataArgs.builder()\n .annotations(Map.of(\"run.googleapis.com/launch-stage\", \"BETA\"))\n .build())\n .template(ServiceTemplateArgs.builder()\n .spec(ServiceTemplateSpecArgs.builder()\n .containers(ServiceTemplateSpecContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .startupProbe(ServiceTemplateSpecContainerStartupProbeArgs.builder()\n .initialDelaySeconds(0)\n .timeoutSeconds(1)\n .periodSeconds(3)\n .failureThreshold(1)\n .tcpSocket(ServiceTemplateSpecContainerStartupProbeTcpSocketArgs.builder()\n .port(8080)\n .build())\n .build())\n .livenessProbe(ServiceTemplateSpecContainerLivenessProbeArgs.builder()\n .httpGet(ServiceTemplateSpecContainerLivenessProbeHttpGetArgs.builder()\n .path(\"/\")\n .build())\n .build())\n .build())\n .build())\n .build())\n .traffics(ServiceTrafficArgs.builder()\n .percent(100)\n .latestRevision(true)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrun:Service\n properties:\n location: us-central1\n metadata:\n annotations:\n run.googleapis.com/launch-stage: BETA\n template:\n spec:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n startupProbe:\n initialDelaySeconds: 0\n timeoutSeconds: 1\n periodSeconds: 3\n failureThreshold: 1\n tcpSocket:\n port: 8080\n livenessProbe:\n httpGet:\n path: /\n traffics:\n - percent: 100\n latestRevision: true\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nService can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:cloudrun/service:Service default locations/{{location}}/namespaces/{{project}}/services/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudrun/service:Service default {{location}}/{{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudrun/service:Service default {{location}}/{{name}}\n```\n\n ", + "description": "Service acts as a top-level container that manages a set of Routes and\nConfigurations which implement a network service. Service exists to provide a\nsingular abstraction which can be access controlled, reasoned about, and\nwhich encapsulates software lifecycle decisions such as rollout policy and\nteam resource ownership. Service acts only as an orchestrator of the\nunderlying Routes and Configurations (much as a kubernetes Deployment\norchestrates ReplicaSets).\n\nThe Service's controller will track the statuses of its owned Configuration\nand Route, reflecting their statuses and conditions as its own.\n\nSee also:\nhttps://github.com/knative/specs/blob/main/specs/serving/overview.md\n\n\nTo get more information about Service, see:\n\n* [API documentation](https://cloud.google.com/run/docs/reference/rest/v1/namespaces.services)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/run/docs/)\n\n\u003e **Warning:** `google_cloudrun_service` creates a Managed Google Cloud Run Service. If you need to create\na Cloud Run Service on Anthos(GKE/VMWare) then you will need to create it using the kubernetes alpha provider.\nHave a look at the Cloud Run Anthos example below.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Cloud Run Service Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrun.Service(\"default\", {\n location: \"us-central1\",\n template: {\n spec: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n traffics: [{\n latestRevision: true,\n percent: 100,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrun.Service(\"default\",\n location=\"us-central1\",\n template=gcp.cloudrun.ServiceTemplateArgs(\n spec=gcp.cloudrun.ServiceTemplateSpecArgs(\n containers=[gcp.cloudrun.ServiceTemplateSpecContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n ),\n ),\n traffics=[gcp.cloudrun.ServiceTrafficArgs(\n latest_revision=True,\n percent=100,\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRun.Service(\"default\", new()\n {\n Location = \"us-central1\",\n Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs\n {\n Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n },\n Traffics = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTrafficArgs\n {\n LatestRevision = true,\n Percent = 100,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrun\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrun.NewService(ctx, \"default\", \u0026cloudrun.ServiceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrun.ServiceTemplateArgs{\n\t\t\t\tSpec: \u0026cloudrun.ServiceTemplateSpecArgs{\n\t\t\t\t\tContainers: cloudrun.ServiceTemplateSpecContainerArray{\n\t\t\t\t\t\t\u0026cloudrun.ServiceTemplateSpecContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTraffics: cloudrun.ServiceTrafficArray{\n\t\t\t\t\u0026cloudrun.ServiceTrafficArgs{\n\t\t\t\t\tLatestRevision: pulumi.Bool(true),\n\t\t\t\t\tPercent: pulumi.Int(100),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrun.Service;\nimport com.pulumi.gcp.cloudrun.ServiceArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTrafficArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Service(\"default\", ServiceArgs.builder() \n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .spec(ServiceTemplateSpecArgs.builder()\n .containers(ServiceTemplateSpecContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build())\n .traffics(ServiceTrafficArgs.builder()\n .latestRevision(true)\n .percent(100)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrun:Service\n properties:\n location: us-central1\n template:\n spec:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n traffics:\n - latestRevision: true\n percent: 100\n```\n{{% /example %}}\n{{% example %}}\n### Cloud Run Service Sql\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n region: \"us-east1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst _default = new gcp.cloudrun.Service(\"default\", {\n location: \"us-central1\",\n template: {\n spec: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n metadata: {\n annotations: {\n \"autoscaling.knative.dev/maxScale\": \"1000\",\n \"run.googleapis.com/cloudsql-instances\": instance.connectionName,\n \"run.googleapis.com/client-name\": \"terraform\",\n },\n },\n },\n autogenerateRevisionName: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n region=\"us-east1\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ),\n deletion_protection=True)\ndefault = gcp.cloudrun.Service(\"default\",\n location=\"us-central1\",\n template=gcp.cloudrun.ServiceTemplateArgs(\n spec=gcp.cloudrun.ServiceTemplateSpecArgs(\n containers=[gcp.cloudrun.ServiceTemplateSpecContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n ),\n metadata=gcp.cloudrun.ServiceTemplateMetadataArgs(\n annotations={\n \"autoscaling.knative.dev/maxScale\": \"1000\",\n \"run.googleapis.com/cloudsql-instances\": instance.connection_name,\n \"run.googleapis.com/client-name\": \"terraform\",\n },\n ),\n ),\n autogenerate_revision_name=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Region = \"us-east1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var @default = new Gcp.CloudRun.Service(\"default\", new()\n {\n Location = \"us-central1\",\n Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs\n {\n Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n Metadata = new Gcp.CloudRun.Inputs.ServiceTemplateMetadataArgs\n {\n Annotations = \n {\n { \"autoscaling.knative.dev/maxScale\", \"1000\" },\n { \"run.googleapis.com/cloudsql-instances\", instance.ConnectionName },\n { \"run.googleapis.com/client-name\", \"terraform\" },\n },\n },\n },\n AutogenerateRevisionName = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrun\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tRegion: pulumi.String(\"us-east1\"),\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},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrun.NewService(ctx, \"default\", \u0026cloudrun.ServiceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrun.ServiceTemplateArgs{\n\t\t\t\tSpec: \u0026cloudrun.ServiceTemplateSpecArgs{\n\t\t\t\t\tContainers: cloudrun.ServiceTemplateSpecContainerArray{\n\t\t\t\t\t\t\u0026cloudrun.ServiceTemplateSpecContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tMetadata: \u0026cloudrun.ServiceTemplateMetadataArgs{\n\t\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\t\"autoscaling.knative.dev/maxScale\": pulumi.String(\"1000\"),\n\t\t\t\t\t\t\"run.googleapis.com/cloudsql-instances\": instance.ConnectionName,\n\t\t\t\t\t\t\"run.googleapis.com/client-name\": pulumi.String(\"terraform\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tAutogenerateRevisionName: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.cloudrun.Service;\nimport com.pulumi.gcp.cloudrun.ServiceArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateMetadataArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .region(\"us-east1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n var default_ = new Service(\"default\", ServiceArgs.builder() \n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .spec(ServiceTemplateSpecArgs.builder()\n .containers(ServiceTemplateSpecContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .metadata(ServiceTemplateMetadataArgs.builder()\n .annotations(Map.ofEntries(\n Map.entry(\"autoscaling.knative.dev/maxScale\", \"1000\"),\n Map.entry(\"run.googleapis.com/cloudsql-instances\", instance.connectionName()),\n Map.entry(\"run.googleapis.com/client-name\", \"terraform\")\n ))\n .build())\n .build())\n .autogenerateRevisionName(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrun:Service\n properties:\n location: us-central1\n template:\n spec:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n metadata:\n annotations:\n autoscaling.knative.dev/maxScale: '1000'\n run.googleapis.com/cloudsql-instances: ${instance.connectionName}\n run.googleapis.com/client-name: terraform\n autogenerateRevisionName: true\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n region: us-east1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n deletionProtection: 'true'\n```\n{{% /example %}}\n{{% example %}}\n### Cloud Run Service Noauth\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrun.Service(\"default\", {\n location: \"us-central1\",\n template: {\n spec: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n});\nconst noauthIAMPolicy = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/run.invoker\",\n members: [\"allUsers\"],\n }],\n});\nconst noauthIamPolicy = new gcp.cloudrun.IamPolicy(\"noauthIamPolicy\", {\n location: _default.location,\n project: _default.project,\n service: _default.name,\n policyData: noauthIAMPolicy.then(noauthIAMPolicy =\u003e noauthIAMPolicy.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrun.Service(\"default\",\n location=\"us-central1\",\n template=gcp.cloudrun.ServiceTemplateArgs(\n spec=gcp.cloudrun.ServiceTemplateSpecArgs(\n containers=[gcp.cloudrun.ServiceTemplateSpecContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n ),\n ))\nnoauth_iam_policy = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/run.invoker\",\n members=[\"allUsers\"],\n)])\nnoauth_iam_policy = gcp.cloudrun.IamPolicy(\"noauthIamPolicy\",\n location=default.location,\n project=default.project,\n service=default.name,\n policy_data=noauth_iam_policy.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRun.Service(\"default\", new()\n {\n Location = \"us-central1\",\n Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs\n {\n Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n },\n });\n\n var noauthIAMPolicy = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/run.invoker\",\n Members = new[]\n {\n \"allUsers\",\n },\n },\n },\n });\n\n var noauthIamPolicy = new Gcp.CloudRun.IamPolicy(\"noauthIamPolicy\", new()\n {\n Location = @default.Location,\n Project = @default.Project,\n Service = @default.Name,\n PolicyData = noauthIAMPolicy.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrun\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrun.NewService(ctx, \"default\", \u0026cloudrun.ServiceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrun.ServiceTemplateArgs{\n\t\t\t\tSpec: \u0026cloudrun.ServiceTemplateSpecArgs{\n\t\t\t\t\tContainers: cloudrun.ServiceTemplateSpecContainerArray{\n\t\t\t\t\t\t\u0026cloudrun.ServiceTemplateSpecContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnoauthIAMPolicy, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tRole: \"roles/run.invoker\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"allUsers\",\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 = cloudrun.NewIamPolicy(ctx, \"noauthIamPolicy\", \u0026cloudrun.IamPolicyArgs{\n\t\t\tLocation: _default.Location,\n\t\t\tProject: _default.Project,\n\t\t\tService: _default.Name,\n\t\t\tPolicyData: *pulumi.String(noauthIAMPolicy.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.cloudrun.Service;\nimport com.pulumi.gcp.cloudrun.ServiceArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.cloudrun.IamPolicy;\nimport com.pulumi.gcp.cloudrun.IamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Service(\"default\", ServiceArgs.builder() \n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .spec(ServiceTemplateSpecArgs.builder()\n .containers(ServiceTemplateSpecContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build())\n .build());\n\n final var noauthIAMPolicy = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/run.invoker\")\n .members(\"allUsers\")\n .build())\n .build());\n\n var noauthIamPolicy = new IamPolicy(\"noauthIamPolicy\", IamPolicyArgs.builder() \n .location(default_.location())\n .project(default_.project())\n .service(default_.name())\n .policyData(noauthIAMPolicy.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrun:Service\n properties:\n location: us-central1\n template:\n spec:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n noauthIamPolicy:\n type: gcp:cloudrun:IamPolicy\n properties:\n location: ${default.location}\n project: ${default.project}\n service: ${default.name}\n policyData: ${noauthIAMPolicy.policyData}\nvariables:\n noauthIAMPolicy:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/run.invoker\n members:\n - allUsers\n```\n{{% /example %}}\n{{% example %}}\n### Cloud Run Service Probes\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrun.Service(\"default\", {\n location: \"us-central1\",\n metadata: {\n annotations: {\n \"run.googleapis.com/launch-stage\": \"BETA\",\n },\n },\n template: {\n spec: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n startupProbe: {\n initialDelaySeconds: 0,\n timeoutSeconds: 1,\n periodSeconds: 3,\n failureThreshold: 1,\n tcpSocket: {\n port: 8080,\n },\n },\n livenessProbe: {\n httpGet: {\n path: \"/\",\n },\n },\n }],\n },\n },\n traffics: [{\n percent: 100,\n latestRevision: true,\n }],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrun.Service(\"default\",\n location=\"us-central1\",\n metadata=gcp.cloudrun.ServiceMetadataArgs(\n annotations={\n \"run.googleapis.com/launch-stage\": \"BETA\",\n },\n ),\n template=gcp.cloudrun.ServiceTemplateArgs(\n spec=gcp.cloudrun.ServiceTemplateSpecArgs(\n containers=[gcp.cloudrun.ServiceTemplateSpecContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n startup_probe=gcp.cloudrun.ServiceTemplateSpecContainerStartupProbeArgs(\n initial_delay_seconds=0,\n timeout_seconds=1,\n period_seconds=3,\n failure_threshold=1,\n tcp_socket=gcp.cloudrun.ServiceTemplateSpecContainerStartupProbeTcpSocketArgs(\n port=8080,\n ),\n ),\n liveness_probe=gcp.cloudrun.ServiceTemplateSpecContainerLivenessProbeArgs(\n http_get=gcp.cloudrun.ServiceTemplateSpecContainerLivenessProbeHttpGetArgs(\n path=\"/\",\n ),\n ),\n )],\n ),\n ),\n traffics=[gcp.cloudrun.ServiceTrafficArgs(\n percent=100,\n latest_revision=True,\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRun.Service(\"default\", new()\n {\n Location = \"us-central1\",\n Metadata = new Gcp.CloudRun.Inputs.ServiceMetadataArgs\n {\n Annotations = \n {\n { \"run.googleapis.com/launch-stage\", \"BETA\" },\n },\n },\n Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs\n {\n Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n StartupProbe = new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerStartupProbeArgs\n {\n InitialDelaySeconds = 0,\n TimeoutSeconds = 1,\n PeriodSeconds = 3,\n FailureThreshold = 1,\n TcpSocket = new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerStartupProbeTcpSocketArgs\n {\n Port = 8080,\n },\n },\n LivenessProbe = new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerLivenessProbeArgs\n {\n HttpGet = new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerLivenessProbeHttpGetArgs\n {\n Path = \"/\",\n },\n },\n },\n },\n },\n },\n Traffics = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTrafficArgs\n {\n Percent = 100,\n LatestRevision = true,\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrun\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrun.NewService(ctx, \"default\", \u0026cloudrun.ServiceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tMetadata: \u0026cloudrun.ServiceMetadataArgs{\n\t\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\t\"run.googleapis.com/launch-stage\": pulumi.String(\"BETA\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tTemplate: \u0026cloudrun.ServiceTemplateArgs{\n\t\t\t\tSpec: \u0026cloudrun.ServiceTemplateSpecArgs{\n\t\t\t\t\tContainers: cloudrun.ServiceTemplateSpecContainerArray{\n\t\t\t\t\t\t\u0026cloudrun.ServiceTemplateSpecContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tStartupProbe: \u0026cloudrun.ServiceTemplateSpecContainerStartupProbeArgs{\n\t\t\t\t\t\t\t\tInitialDelaySeconds: pulumi.Int(0),\n\t\t\t\t\t\t\t\tTimeoutSeconds: pulumi.Int(1),\n\t\t\t\t\t\t\t\tPeriodSeconds: pulumi.Int(3),\n\t\t\t\t\t\t\t\tFailureThreshold: pulumi.Int(1),\n\t\t\t\t\t\t\t\tTcpSocket: \u0026cloudrun.ServiceTemplateSpecContainerStartupProbeTcpSocketArgs{\n\t\t\t\t\t\t\t\t\tPort: pulumi.Int(8080),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tLivenessProbe: \u0026cloudrun.ServiceTemplateSpecContainerLivenessProbeArgs{\n\t\t\t\t\t\t\t\tHttpGet: \u0026cloudrun.ServiceTemplateSpecContainerLivenessProbeHttpGetArgs{\n\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTraffics: cloudrun.ServiceTrafficArray{\n\t\t\t\t\u0026cloudrun.ServiceTrafficArgs{\n\t\t\t\t\tPercent: pulumi.Int(100),\n\t\t\t\t\tLatestRevision: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrun.Service;\nimport com.pulumi.gcp.cloudrun.ServiceArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceMetadataArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTrafficArgs;\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 Service(\"default\", ServiceArgs.builder() \n .location(\"us-central1\")\n .metadata(ServiceMetadataArgs.builder()\n .annotations(Map.of(\"run.googleapis.com/launch-stage\", \"BETA\"))\n .build())\n .template(ServiceTemplateArgs.builder()\n .spec(ServiceTemplateSpecArgs.builder()\n .containers(ServiceTemplateSpecContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .startupProbe(ServiceTemplateSpecContainerStartupProbeArgs.builder()\n .initialDelaySeconds(0)\n .timeoutSeconds(1)\n .periodSeconds(3)\n .failureThreshold(1)\n .tcpSocket(ServiceTemplateSpecContainerStartupProbeTcpSocketArgs.builder()\n .port(8080)\n .build())\n .build())\n .livenessProbe(ServiceTemplateSpecContainerLivenessProbeArgs.builder()\n .httpGet(ServiceTemplateSpecContainerLivenessProbeHttpGetArgs.builder()\n .path(\"/\")\n .build())\n .build())\n .build())\n .build())\n .build())\n .traffics(ServiceTrafficArgs.builder()\n .percent(100)\n .latestRevision(true)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrun:Service\n properties:\n location: us-central1\n metadata:\n annotations:\n run.googleapis.com/launch-stage: BETA\n template:\n spec:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n startupProbe:\n initialDelaySeconds: 0\n timeoutSeconds: 1\n periodSeconds: 3\n failureThreshold: 1\n tcpSocket:\n port: 8080\n livenessProbe:\n httpGet:\n path: /\n traffics:\n - percent: 100\n latestRevision: true\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nService can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:cloudrun/service:Service default locations/{{location}}/namespaces/{{project}}/services/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudrun/service:Service default {{location}}/{{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudrun/service:Service default {{location}}/{{name}}\n```\n\n ", "properties": { "autogenerateRevisionName": { "type": "boolean", @@ -124292,7 +125704,7 @@ } }, "gcp:cloudrunv2/job:Job": { - "description": "A Cloud Run Job resource that references a container image which is run to completion.\n\n\nTo get more information about Job, see:\n\n* [API documentation](https://cloud.google.com/run/docs/reference/rest/v2/projects.locations.jobs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/run/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Cloudrunv2 Job Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n launchStage: \"BETA\",\n location: \"us-central1\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n launch_stage=\"BETA\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n LaunchStage = \"BETA\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Job(\"default\", JobArgs.builder() \n .launchStage(\"BETA\")\n .location(\"us-central1\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n launchStage: BETA\n location: us-central1\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n```\n{{% /example %}}\n{{% example %}}\n### Cloudrunv2 Job Sql\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret\",\n replication: {\n automatic: true,\n },\n});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n template: {\n volumes: [{\n name: \"cloudsql\",\n cloudSqlInstance: {\n instances: [instance.connectionName],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n envs: [\n {\n name: \"FOO\",\n value: \"bar\",\n },\n {\n name: \"latestdclsecret\",\n valueSource: {\n secretKeyRef: {\n secret: secret.secretId,\n version: \"1\",\n },\n },\n },\n ],\n volumeMounts: [{\n name: \"cloudsql\",\n mountPath: \"/cloudsql\",\n }],\n }],\n },\n },\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n}, {\n dependsOn: [secret],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n automatic=True,\n ))\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ),\n deletion_protection=True)\ndefault = gcp.cloudrunv2.Job(\"default\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n volumes=[gcp.cloudrunv2.JobTemplateTemplateVolumeArgs(\n name=\"cloudsql\",\n cloud_sql_instance=gcp.cloudrunv2.JobTemplateTemplateVolumeCloudSqlInstanceArgs(\n instances=[instance.connection_name],\n ),\n )],\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n envs=[\n gcp.cloudrunv2.JobTemplateTemplateContainerEnvArgs(\n name=\"FOO\",\n value=\"bar\",\n ),\n gcp.cloudrunv2.JobTemplateTemplateContainerEnvArgs(\n name=\"latestdclsecret\",\n value_source=gcp.cloudrunv2.JobTemplateTemplateContainerEnvValueSourceArgs(\n secret_key_ref=gcp.cloudrunv2.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs(\n secret=secret.secret_id,\n version=\"1\",\n ),\n ),\n ),\n ],\n volume_mounts=[gcp.cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs(\n name=\"cloudsql\",\n mount_path=\"/cloudsql\",\n )],\n )],\n ),\n ))\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\",\n opts=pulumi.ResourceOptions(depends_on=[secret]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Automatic = true,\n },\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"cloudsql\",\n CloudSqlInstance = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeCloudSqlInstanceArgs\n {\n Instances = new[]\n {\n instance.ConnectionName,\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvArgs\n {\n Name = \"FOO\",\n Value = \"bar\",\n },\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvArgs\n {\n Name = \"latestdclsecret\",\n ValueSource = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvValueSourceArgs\n {\n SecretKeyRef = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs\n {\n Secret = secret.SecretId,\n Version = \"1\",\n },\n },\n },\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"cloudsql\",\n MountPath = \"/cloudsql\",\n },\n },\n },\n },\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n secret,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAutomatic: 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\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\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},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\tCloudSqlInstance: \u0026cloudrunv2.JobTemplateTemplateVolumeCloudSqlInstanceArgs{\n\t\t\t\t\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tinstance.ConnectionName,\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\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tEnvs: cloudrunv2.JobTemplateTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"FOO\"),\n\t\t\t\t\t\t\t\t\tValue: pulumi.String(\"bar\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"latestdclsecret\"),\n\t\t\t\t\t\t\t\t\tValueSource: \u0026cloudrunv2.JobTemplateTemplateContainerEnvValueSourceArgs{\n\t\t\t\t\t\t\t\t\t\tSecretKeyRef: \u0026cloudrunv2.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs{\n\t\t\t\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\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\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/cloudsql\"),\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\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number)),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\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.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret = new Secret(\"secret\", SecretArgs.builder() \n .secretId(\"secret\")\n .replication(SecretReplicationArgs.builder()\n .automatic(true)\n .build())\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder() \n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder() \n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"cloudsql\")\n .cloudSqlInstance(JobTemplateTemplateVolumeCloudSqlInstanceArgs.builder()\n .instances(instance.connectionName())\n .build())\n .build())\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .envs( \n JobTemplateTemplateContainerEnvArgs.builder()\n .name(\"FOO\")\n .value(\"bar\")\n .build(),\n JobTemplateTemplateContainerEnvArgs.builder()\n .name(\"latestdclsecret\")\n .valueSource(JobTemplateTemplateContainerEnvValueSourceArgs.builder()\n .secretKeyRef(JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs.builder()\n .secret(secret.secretId())\n .version(\"1\")\n .build())\n .build())\n .build())\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"cloudsql\")\n .mountPath(\"/cloudsql\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder() \n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder() \n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n location: us-central1\n launchStage: BETA\n template:\n template:\n volumes:\n - name: cloudsql\n cloudSqlInstance:\n instances:\n - ${instance.connectionName}\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n envs:\n - name: FOO\n value: bar\n - name: latestdclsecret\n valueSource:\n secretKeyRef:\n secret: ${secret.secretId}\n version: '1'\n volumeMounts:\n - name: cloudsql\n mountPath: /cloudsql\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret\n replication:\n automatic: true\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n options:\n dependson:\n - ${secret}\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n deletionProtection: 'true'\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Cloudrunv2 Job Vpcaccess\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customTestNetwork = new gcp.compute.Network(\"customTestNetwork\", {autoCreateSubnetworks: false});\nconst customTestSubnetwork = new gcp.compute.Subnetwork(\"customTestSubnetwork\", {\n ipCidrRange: \"10.2.0.0/28\",\n region: \"us-central1\",\n network: customTestNetwork.id,\n});\nconst connector = new gcp.vpcaccess.Connector(\"connector\", {\n subnet: {\n name: customTestSubnetwork.name,\n },\n machineType: \"e2-standard-4\",\n minInstances: 2,\n maxInstances: 3,\n region: \"us-central1\",\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n vpcAccess: {\n connector: connector.id,\n egress: \"ALL_TRAFFIC\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom_test_network = gcp.compute.Network(\"customTestNetwork\", auto_create_subnetworks=False)\ncustom_test_subnetwork = gcp.compute.Subnetwork(\"customTestSubnetwork\",\n ip_cidr_range=\"10.2.0.0/28\",\n region=\"us-central1\",\n network=custom_test_network.id)\nconnector = gcp.vpcaccess.Connector(\"connector\",\n subnet=gcp.vpcaccess.ConnectorSubnetArgs(\n name=custom_test_subnetwork.name,\n ),\n machine_type=\"e2-standard-4\",\n min_instances=2,\n max_instances=3,\n region=\"us-central1\")\ndefault = gcp.cloudrunv2.Job(\"default\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n vpc_access=gcp.cloudrunv2.JobTemplateTemplateVpcAccessArgs(\n connector=connector.id,\n egress=\"ALL_TRAFFIC\",\n ),\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customTestNetwork = new Gcp.Compute.Network(\"customTestNetwork\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var customTestSubnetwork = new Gcp.Compute.Subnetwork(\"customTestSubnetwork\", new()\n {\n IpCidrRange = \"10.2.0.0/28\",\n Region = \"us-central1\",\n Network = customTestNetwork.Id,\n });\n\n var connector = new Gcp.VpcAccess.Connector(\"connector\", new()\n {\n Subnet = new Gcp.VpcAccess.Inputs.ConnectorSubnetArgs\n {\n Name = customTestSubnetwork.Name,\n },\n MachineType = \"e2-standard-4\",\n MinInstances = 2,\n MaxInstances = 3,\n Region = \"us-central1\",\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessArgs\n {\n Connector = connector.Id,\n Egress = \"ALL_TRAFFIC\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/vpcaccess\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomTestNetwork, err := compute.NewNetwork(ctx, \"customTestNetwork\", \u0026compute.NetworkArgs{\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\tcustomTestSubnetwork, err := compute.NewSubnetwork(ctx, \"customTestSubnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tIpCidrRange: pulumi.String(\"10.2.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: customTestNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconnector, err := vpcaccess.NewConnector(ctx, \"connector\", \u0026vpcaccess.ConnectorArgs{\n\t\t\tSubnet: \u0026vpcaccess.ConnectorSubnetArgs{\n\t\t\t\tName: customTestSubnetwork.Name,\n\t\t\t},\n\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\tMinInstances: pulumi.Int(2),\n\t\t\tMaxInstances: pulumi.Int(3),\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 = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcAccess: \u0026cloudrunv2.JobTemplateTemplateVpcAccessArgs{\n\t\t\t\t\t\tConnector: connector.ID(),\n\t\t\t\t\t\tEgress: pulumi.String(\"ALL_TRAFFIC\"),\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.vpcaccess.Connector;\nimport com.pulumi.gcp.vpcaccess.ConnectorArgs;\nimport com.pulumi.gcp.vpcaccess.inputs.ConnectorSubnetArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateVpcAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var customTestNetwork = new Network(\"customTestNetwork\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var customTestSubnetwork = new Subnetwork(\"customTestSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.2.0.0/28\")\n .region(\"us-central1\")\n .network(customTestNetwork.id())\n .build());\n\n var connector = new Connector(\"connector\", ConnectorArgs.builder() \n .subnet(ConnectorSubnetArgs.builder()\n .name(customTestSubnetwork.name())\n .build())\n .machineType(\"e2-standard-4\")\n .minInstances(2)\n .maxInstances(3)\n .region(\"us-central1\")\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder() \n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .vpcAccess(JobTemplateTemplateVpcAccessArgs.builder()\n .connector(connector.id())\n .egress(\"ALL_TRAFFIC\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n location: us-central1\n launchStage: BETA\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n vpcAccess:\n connector: ${connector.id}\n egress: ALL_TRAFFIC\n connector:\n type: gcp:vpcaccess:Connector\n properties:\n subnet:\n name: ${customTestSubnetwork.name}\n machineType: e2-standard-4\n minInstances: 2\n maxInstances: 3\n region: us-central1\n customTestSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.2.0.0/28\n region: us-central1\n network: ${customTestNetwork.id}\n customTestNetwork:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% example %}}\n### Cloudrunv2 Job Probes\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n launchStage: \"BETA\",\n location: \"us-central1\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n livenessProbe: {\n httpGet: {\n path: \"/\",\n },\n },\n startupProbe: {\n failureThreshold: 1,\n initialDelaySeconds: 0,\n periodSeconds: 3,\n tcpSocket: {\n port: 8080,\n },\n timeoutSeconds: 1,\n },\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n launch_stage=\"BETA\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n liveness_probe=gcp.cloudrunv2.JobTemplateTemplateContainerLivenessProbeArgs(\n http_get=gcp.cloudrunv2.JobTemplateTemplateContainerLivenessProbeHttpGetArgs(\n path=\"/\",\n ),\n ),\n startup_probe=gcp.cloudrunv2.JobTemplateTemplateContainerStartupProbeArgs(\n failure_threshold=1,\n initial_delay_seconds=0,\n period_seconds=3,\n tcp_socket=gcp.cloudrunv2.JobTemplateTemplateContainerStartupProbeTcpSocketArgs(\n port=8080,\n ),\n timeout_seconds=1,\n ),\n )],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n LaunchStage = \"BETA\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n LivenessProbe = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerLivenessProbeArgs\n {\n HttpGet = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerLivenessProbeHttpGetArgs\n {\n Path = \"/\",\n },\n },\n StartupProbe = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerStartupProbeArgs\n {\n FailureThreshold = 1,\n InitialDelaySeconds = 0,\n PeriodSeconds = 3,\n TcpSocket = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerStartupProbeTcpSocketArgs\n {\n Port = 8080,\n },\n TimeoutSeconds = 1,\n },\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tLivenessProbe: \u0026cloudrunv2.JobTemplateTemplateContainerLivenessProbeArgs{\n\t\t\t\t\t\t\t\tHttpGet: \u0026cloudrunv2.JobTemplateTemplateContainerLivenessProbeHttpGetArgs{\n\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tStartupProbe: \u0026cloudrunv2.JobTemplateTemplateContainerStartupProbeArgs{\n\t\t\t\t\t\t\t\tFailureThreshold: pulumi.Int(1),\n\t\t\t\t\t\t\t\tInitialDelaySeconds: pulumi.Int(0),\n\t\t\t\t\t\t\t\tPeriodSeconds: pulumi.Int(3),\n\t\t\t\t\t\t\t\tTcpSocket: \u0026cloudrunv2.JobTemplateTemplateContainerStartupProbeTcpSocketArgs{\n\t\t\t\t\t\t\t\t\tPort: pulumi.Int(8080),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\tTimeoutSeconds: pulumi.Int(1),\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.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Job(\"default\", JobArgs.builder() \n .launchStage(\"BETA\")\n .location(\"us-central1\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .livenessProbe(JobTemplateTemplateContainerLivenessProbeArgs.builder()\n .httpGet(JobTemplateTemplateContainerLivenessProbeHttpGetArgs.builder()\n .path(\"/\")\n .build())\n .build())\n .startupProbe(JobTemplateTemplateContainerStartupProbeArgs.builder()\n .failureThreshold(1)\n .initialDelaySeconds(0)\n .periodSeconds(3)\n .tcpSocket(JobTemplateTemplateContainerStartupProbeTcpSocketArgs.builder()\n .port(8080)\n .build())\n .timeoutSeconds(1)\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n launchStage: BETA\n location: us-central1\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n livenessProbe:\n httpGet:\n path: /\n startupProbe:\n failureThreshold: 1\n initialDelaySeconds: 0\n periodSeconds: 3\n tcpSocket:\n port: 8080\n timeoutSeconds: 1\n```\n{{% /example %}}\n{{% example %}}\n### Cloudrunv2 Job Secret\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret\",\n replication: {\n automatic: true,\n },\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n template: {\n volumes: [{\n name: \"a-volume\",\n secret: {\n secret: secret.secretId,\n defaultMode: 292,\n items: [{\n version: \"1\",\n path: \"my-secret\",\n mode: 256,\n }],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"a-volume\",\n mountPath: \"/secrets\",\n }],\n }],\n },\n },\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n}, {\n dependsOn: [secret],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n automatic=True,\n ))\ndefault = gcp.cloudrunv2.Job(\"default\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n volumes=[gcp.cloudrunv2.JobTemplateTemplateVolumeArgs(\n name=\"a-volume\",\n secret=gcp.cloudrunv2.JobTemplateTemplateVolumeSecretArgs(\n secret=secret.secret_id,\n default_mode=292,\n items=[gcp.cloudrunv2.JobTemplateTemplateVolumeSecretItemArgs(\n version=\"1\",\n path=\"my-secret\",\n mode=256,\n )],\n ),\n )],\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n volume_mounts=[gcp.cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs(\n name=\"a-volume\",\n mount_path=\"/secrets\",\n )],\n )],\n ),\n ))\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\",\n opts=pulumi.ResourceOptions(depends_on=[secret]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Automatic = true,\n },\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"a-volume\",\n Secret = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeSecretArgs\n {\n Secret = secret.SecretId,\n DefaultMode = 292,\n Items = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeSecretItemArgs\n {\n Version = \"1\",\n Path = \"my-secret\",\n Mode = 256,\n },\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"a-volume\",\n MountPath = \"/secrets\",\n },\n },\n },\n },\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n secret,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAutomatic: 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 = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\tSecret: \u0026cloudrunv2.JobTemplateTemplateVolumeSecretArgs{\n\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\tDefaultMode: pulumi.Int(292),\n\t\t\t\t\t\t\t\tItems: cloudrunv2.JobTemplateTemplateVolumeSecretItemArray{\n\t\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeSecretItemArgs{\n\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"my-secret\"),\n\t\t\t\t\t\t\t\t\t\tMode: pulumi.Int(256),\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\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/secrets\"),\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\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number)),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\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.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret = new Secret(\"secret\", SecretArgs.builder() \n .secretId(\"secret\")\n .replication(SecretReplicationArgs.builder()\n .automatic(true)\n .build())\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder() \n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"a-volume\")\n .secret(JobTemplateTemplateVolumeSecretArgs.builder()\n .secret(secret.secretId())\n .defaultMode(292)\n .items(JobTemplateTemplateVolumeSecretItemArgs.builder()\n .version(\"1\")\n .path(\"my-secret\")\n .mode(256)\n .build())\n .build())\n .build())\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"a-volume\")\n .mountPath(\"/secrets\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder() \n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder() \n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n location: us-central1\n launchStage: BETA\n template:\n template:\n volumes:\n - name: a-volume\n secret:\n secret: ${secret.secretId}\n defaultMode: 292\n items:\n - version: '1'\n path: my-secret\n mode: 256\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: a-volume\n mountPath: /secrets\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret\n replication:\n automatic: true\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n options:\n dependson:\n - ${secret}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nJob can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:cloudrunv2/job:Job default projects/{{project}}/locations/{{location}}/jobs/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudrunv2/job:Job default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudrunv2/job:Job default {{location}}/{{name}}\n```\n\n ", + "description": "A Cloud Run Job resource that references a container image which is run to completion.\n\n\nTo get more information about Job, see:\n\n* [API documentation](https://cloud.google.com/run/docs/reference/rest/v2/projects.locations.jobs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/run/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Cloudrunv2 Job Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n launchStage: \"BETA\",\n location: \"us-central1\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.cloudrunv2.Job(\"default\",\n launch_stage=\"BETA\",\n location=\"us-central1\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n LaunchStage = \"BETA\",\n Location = \"us-central1\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Job(\"default\", JobArgs.builder() \n .launchStage(\"BETA\")\n .location(\"us-central1\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n launchStage: BETA\n location: us-central1\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n```\n{{% /example %}}\n{{% example %}}\n### Cloudrunv2 Job Sql\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret\",\n replication: {\n automatic: true,\n },\n});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n deletionProtection: true,\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n template: {\n volumes: [{\n name: \"cloudsql\",\n cloudSqlInstance: {\n instances: [instance.connectionName],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n envs: [\n {\n name: \"FOO\",\n value: \"bar\",\n },\n {\n name: \"latestdclsecret\",\n valueSource: {\n secretKeyRef: {\n secret: secret.secretId,\n version: \"1\",\n },\n },\n },\n ],\n volumeMounts: [{\n name: \"cloudsql\",\n mountPath: \"/cloudsql\",\n }],\n }],\n },\n },\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n}, {\n dependsOn: [secret],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n automatic=True,\n ))\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ),\n deletion_protection=True)\ndefault = gcp.cloudrunv2.Job(\"default\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n volumes=[gcp.cloudrunv2.JobTemplateTemplateVolumeArgs(\n name=\"cloudsql\",\n cloud_sql_instance=gcp.cloudrunv2.JobTemplateTemplateVolumeCloudSqlInstanceArgs(\n instances=[instance.connection_name],\n ),\n )],\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n envs=[\n gcp.cloudrunv2.JobTemplateTemplateContainerEnvArgs(\n name=\"FOO\",\n value=\"bar\",\n ),\n gcp.cloudrunv2.JobTemplateTemplateContainerEnvArgs(\n name=\"latestdclsecret\",\n value_source=gcp.cloudrunv2.JobTemplateTemplateContainerEnvValueSourceArgs(\n secret_key_ref=gcp.cloudrunv2.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs(\n secret=secret.secret_id,\n version=\"1\",\n ),\n ),\n ),\n ],\n volume_mounts=[gcp.cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs(\n name=\"cloudsql\",\n mount_path=\"/cloudsql\",\n )],\n )],\n ),\n ))\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\",\n opts=pulumi.ResourceOptions(depends_on=[secret]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Automatic = true,\n },\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n Region = \"us-central1\",\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n DeletionProtection = true,\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"cloudsql\",\n CloudSqlInstance = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeCloudSqlInstanceArgs\n {\n Instances = new[]\n {\n instance.ConnectionName,\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n Envs = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvArgs\n {\n Name = \"FOO\",\n Value = \"bar\",\n },\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvArgs\n {\n Name = \"latestdclsecret\",\n ValueSource = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvValueSourceArgs\n {\n SecretKeyRef = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs\n {\n Secret = secret.SecretId,\n Version = \"1\",\n },\n },\n },\n },\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"cloudsql\",\n MountPath = \"/cloudsql\",\n },\n },\n },\n },\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n secret,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAutomatic: 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\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\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},\n\t\t\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\tCloudSqlInstance: \u0026cloudrunv2.JobTemplateTemplateVolumeCloudSqlInstanceArgs{\n\t\t\t\t\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\t\t\t\t\tinstance.ConnectionName,\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\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tEnvs: cloudrunv2.JobTemplateTemplateContainerEnvArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"FOO\"),\n\t\t\t\t\t\t\t\t\tValue: pulumi.String(\"bar\"),\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerEnvArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"latestdclsecret\"),\n\t\t\t\t\t\t\t\t\tValueSource: \u0026cloudrunv2.JobTemplateTemplateContainerEnvValueSourceArgs{\n\t\t\t\t\t\t\t\t\t\tSecretKeyRef: \u0026cloudrunv2.JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs{\n\t\t\t\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\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\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"cloudsql\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/cloudsql\"),\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\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number)),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.sql.DatabaseInstance;\nimport com.pulumi.gcp.sql.DatabaseInstanceArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\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.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret = new Secret(\"secret\", SecretArgs.builder() \n .secretId(\"secret\")\n .replication(SecretReplicationArgs.builder()\n .automatic(true)\n .build())\n .build());\n\n var instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder() \n .region(\"us-central1\")\n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .deletionProtection(\"true\")\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder() \n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"cloudsql\")\n .cloudSqlInstance(JobTemplateTemplateVolumeCloudSqlInstanceArgs.builder()\n .instances(instance.connectionName())\n .build())\n .build())\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .envs( \n JobTemplateTemplateContainerEnvArgs.builder()\n .name(\"FOO\")\n .value(\"bar\")\n .build(),\n JobTemplateTemplateContainerEnvArgs.builder()\n .name(\"latestdclsecret\")\n .valueSource(JobTemplateTemplateContainerEnvValueSourceArgs.builder()\n .secretKeyRef(JobTemplateTemplateContainerEnvValueSourceSecretKeyRefArgs.builder()\n .secret(secret.secretId())\n .version(\"1\")\n .build())\n .build())\n .build())\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"cloudsql\")\n .mountPath(\"/cloudsql\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder() \n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder() \n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n location: us-central1\n launchStage: BETA\n template:\n template:\n volumes:\n - name: cloudsql\n cloudSqlInstance:\n instances:\n - ${instance.connectionName}\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n envs:\n - name: FOO\n value: bar\n - name: latestdclsecret\n valueSource:\n secretKeyRef:\n secret: ${secret.secretId}\n version: '1'\n volumeMounts:\n - name: cloudsql\n mountPath: /cloudsql\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret\n replication:\n automatic: true\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n options:\n dependson:\n - ${secret}\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n deletionProtection: 'true'\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Cloudrunv2 Job Vpcaccess\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customTestNetwork = new gcp.compute.Network(\"customTestNetwork\", {autoCreateSubnetworks: false});\nconst customTestSubnetwork = new gcp.compute.Subnetwork(\"customTestSubnetwork\", {\n ipCidrRange: \"10.2.0.0/28\",\n region: \"us-central1\",\n network: customTestNetwork.id,\n});\nconst connector = new gcp.vpcaccess.Connector(\"connector\", {\n subnet: {\n name: customTestSubnetwork.name,\n },\n machineType: \"e2-standard-4\",\n minInstances: 2,\n maxInstances: 3,\n region: \"us-central1\",\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n template: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n vpcAccess: {\n connector: connector.id,\n egress: \"ALL_TRAFFIC\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustom_test_network = gcp.compute.Network(\"customTestNetwork\", auto_create_subnetworks=False)\ncustom_test_subnetwork = gcp.compute.Subnetwork(\"customTestSubnetwork\",\n ip_cidr_range=\"10.2.0.0/28\",\n region=\"us-central1\",\n network=custom_test_network.id)\nconnector = gcp.vpcaccess.Connector(\"connector\",\n subnet=gcp.vpcaccess.ConnectorSubnetArgs(\n name=custom_test_subnetwork.name,\n ),\n machine_type=\"e2-standard-4\",\n min_instances=2,\n max_instances=3,\n region=\"us-central1\")\ndefault = gcp.cloudrunv2.Job(\"default\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n vpc_access=gcp.cloudrunv2.JobTemplateTemplateVpcAccessArgs(\n connector=connector.id,\n egress=\"ALL_TRAFFIC\",\n ),\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customTestNetwork = new Gcp.Compute.Network(\"customTestNetwork\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var customTestSubnetwork = new Gcp.Compute.Subnetwork(\"customTestSubnetwork\", new()\n {\n IpCidrRange = \"10.2.0.0/28\",\n Region = \"us-central1\",\n Network = customTestNetwork.Id,\n });\n\n var connector = new Gcp.VpcAccess.Connector(\"connector\", new()\n {\n Subnet = new Gcp.VpcAccess.Inputs.ConnectorSubnetArgs\n {\n Name = customTestSubnetwork.Name,\n },\n MachineType = \"e2-standard-4\",\n MinInstances = 2,\n MaxInstances = 3,\n Region = \"us-central1\",\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n VpcAccess = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVpcAccessArgs\n {\n Connector = connector.Id,\n Egress = \"ALL_TRAFFIC\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/vpcaccess\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomTestNetwork, err := compute.NewNetwork(ctx, \"customTestNetwork\", \u0026compute.NetworkArgs{\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\tcustomTestSubnetwork, err := compute.NewSubnetwork(ctx, \"customTestSubnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tIpCidrRange: pulumi.String(\"10.2.0.0/28\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: customTestNetwork.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tconnector, err := vpcaccess.NewConnector(ctx, \"connector\", \u0026vpcaccess.ConnectorArgs{\n\t\t\tSubnet: \u0026vpcaccess.ConnectorSubnetArgs{\n\t\t\t\tName: customTestSubnetwork.Name,\n\t\t\t},\n\t\t\tMachineType: pulumi.String(\"e2-standard-4\"),\n\t\t\tMinInstances: pulumi.Int(2),\n\t\t\tMaxInstances: pulumi.Int(3),\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 = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tVpcAccess: \u0026cloudrunv2.JobTemplateTemplateVpcAccessArgs{\n\t\t\t\t\t\tConnector: connector.ID(),\n\t\t\t\t\t\tEgress: pulumi.String(\"ALL_TRAFFIC\"),\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.vpcaccess.Connector;\nimport com.pulumi.gcp.vpcaccess.ConnectorArgs;\nimport com.pulumi.gcp.vpcaccess.inputs.ConnectorSubnetArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateVpcAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var customTestNetwork = new Network(\"customTestNetwork\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var customTestSubnetwork = new Subnetwork(\"customTestSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.2.0.0/28\")\n .region(\"us-central1\")\n .network(customTestNetwork.id())\n .build());\n\n var connector = new Connector(\"connector\", ConnectorArgs.builder() \n .subnet(ConnectorSubnetArgs.builder()\n .name(customTestSubnetwork.name())\n .build())\n .machineType(\"e2-standard-4\")\n .minInstances(2)\n .maxInstances(3)\n .region(\"us-central1\")\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder() \n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .vpcAccess(JobTemplateTemplateVpcAccessArgs.builder()\n .connector(connector.id())\n .egress(\"ALL_TRAFFIC\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n location: us-central1\n launchStage: BETA\n template:\n template:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n vpcAccess:\n connector: ${connector.id}\n egress: ALL_TRAFFIC\n connector:\n type: gcp:vpcaccess:Connector\n properties:\n subnet:\n name: ${customTestSubnetwork.name}\n machineType: e2-standard-4\n minInstances: 2\n maxInstances: 3\n region: us-central1\n customTestSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.2.0.0/28\n region: us-central1\n network: ${customTestNetwork.id}\n customTestNetwork:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% example %}}\n### Cloudrunv2 Job Secret\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret = new gcp.secretmanager.Secret(\"secret\", {\n secretId: \"secret\",\n replication: {\n automatic: true,\n },\n});\nconst _default = new gcp.cloudrunv2.Job(\"default\", {\n location: \"us-central1\",\n launchStage: \"BETA\",\n template: {\n template: {\n volumes: [{\n name: \"a-volume\",\n secret: {\n secret: secret.secretId,\n defaultMode: 292,\n items: [{\n version: \"1\",\n path: \"my-secret\",\n mode: 256,\n }],\n },\n }],\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n volumeMounts: [{\n name: \"a-volume\",\n mountPath: \"/secrets\",\n }],\n }],\n },\n },\n});\nconst project = gcp.organizations.getProject({});\nconst secret_version_data = new gcp.secretmanager.SecretVersion(\"secret-version-data\", {\n secret: secret.name,\n secretData: \"secret-data\",\n});\nconst secret_access = new gcp.secretmanager.SecretIamMember(\"secret-access\", {\n secretId: secret.id,\n role: \"roles/secretmanager.secretAccessor\",\n member: project.then(project =\u003e `serviceAccount:${project.number}-compute@developer.gserviceaccount.com`),\n}, {\n dependsOn: [secret],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret = gcp.secretmanager.Secret(\"secret\",\n secret_id=\"secret\",\n replication=gcp.secretmanager.SecretReplicationArgs(\n automatic=True,\n ))\ndefault = gcp.cloudrunv2.Job(\"default\",\n location=\"us-central1\",\n launch_stage=\"BETA\",\n template=gcp.cloudrunv2.JobTemplateArgs(\n template=gcp.cloudrunv2.JobTemplateTemplateArgs(\n volumes=[gcp.cloudrunv2.JobTemplateTemplateVolumeArgs(\n name=\"a-volume\",\n secret=gcp.cloudrunv2.JobTemplateTemplateVolumeSecretArgs(\n secret=secret.secret_id,\n default_mode=292,\n items=[gcp.cloudrunv2.JobTemplateTemplateVolumeSecretItemArgs(\n version=\"1\",\n path=\"my-secret\",\n mode=256,\n )],\n ),\n )],\n containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n volume_mounts=[gcp.cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs(\n name=\"a-volume\",\n mount_path=\"/secrets\",\n )],\n )],\n ),\n ))\nproject = gcp.organizations.get_project()\nsecret_version_data = gcp.secretmanager.SecretVersion(\"secret-version-data\",\n secret=secret.name,\n secret_data=\"secret-data\")\nsecret_access = gcp.secretmanager.SecretIamMember(\"secret-access\",\n secret_id=secret.id,\n role=\"roles/secretmanager.secretAccessor\",\n member=f\"serviceAccount:{project.number}-compute@developer.gserviceaccount.com\",\n opts=pulumi.ResourceOptions(depends_on=[secret]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret = new Gcp.SecretManager.Secret(\"secret\", new()\n {\n SecretId = \"secret\",\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Automatic = true,\n },\n });\n\n var @default = new Gcp.CloudRunV2.Job(\"default\", new()\n {\n Location = \"us-central1\",\n LaunchStage = \"BETA\",\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs\n {\n Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs\n {\n Volumes = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeArgs\n {\n Name = \"a-volume\",\n Secret = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeSecretArgs\n {\n Secret = secret.SecretId,\n DefaultMode = 292,\n Items = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateVolumeSecretItemArgs\n {\n Version = \"1\",\n Path = \"my-secret\",\n Mode = 256,\n },\n },\n },\n },\n },\n Containers = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n VolumeMounts = new[]\n {\n new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerVolumeMountArgs\n {\n Name = \"a-volume\",\n MountPath = \"/secrets\",\n },\n },\n },\n },\n },\n },\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var secret_version_data = new Gcp.SecretManager.SecretVersion(\"secret-version-data\", new()\n {\n Secret = secret.Name,\n SecretData = \"secret-data\",\n });\n\n var secret_access = new Gcp.SecretManager.SecretIamMember(\"secret-access\", new()\n {\n SecretId = secret.Id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = $\"serviceAccount:{project.Apply(getProjectResult =\u003e getProjectResult.Number)}-compute@developer.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n secret,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrunv2\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/secretmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tsecret, err := secretmanager.NewSecret(ctx, \"secret\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret\"),\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAutomatic: 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 = cloudrunv2.NewJob(ctx, \"default\", \u0026cloudrunv2.JobArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLaunchStage: pulumi.String(\"BETA\"),\n\t\t\tTemplate: \u0026cloudrunv2.JobTemplateArgs{\n\t\t\t\tTemplate: \u0026cloudrunv2.JobTemplateTemplateArgs{\n\t\t\t\t\tVolumes: cloudrunv2.JobTemplateTemplateVolumeArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeArgs{\n\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\tSecret: \u0026cloudrunv2.JobTemplateTemplateVolumeSecretArgs{\n\t\t\t\t\t\t\t\tSecret: secret.SecretId,\n\t\t\t\t\t\t\t\tDefaultMode: pulumi.Int(292),\n\t\t\t\t\t\t\t\tItems: cloudrunv2.JobTemplateTemplateVolumeSecretItemArray{\n\t\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateVolumeSecretItemArgs{\n\t\t\t\t\t\t\t\t\t\tVersion: pulumi.String(\"1\"),\n\t\t\t\t\t\t\t\t\t\tPath: pulumi.String(\"my-secret\"),\n\t\t\t\t\t\t\t\t\t\tMode: pulumi.Int(256),\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\tContainers: cloudrunv2.JobTemplateTemplateContainerArray{\n\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t\tVolumeMounts: cloudrunv2.JobTemplateTemplateContainerVolumeMountArray{\n\t\t\t\t\t\t\t\t\u0026cloudrunv2.JobTemplateTemplateContainerVolumeMountArgs{\n\t\t\t\t\t\t\t\t\tName: pulumi.String(\"a-volume\"),\n\t\t\t\t\t\t\t\t\tMountPath: pulumi.String(\"/secrets\"),\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\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretVersion(ctx, \"secret-version-data\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret.Name,\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = secretmanager.NewSecretIamMember(ctx, \"secret-access\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tSecretId: secret.ID(),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v-compute@developer.gserviceaccount.com\", project.Number)),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tsecret,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.cloudrunv2.Job;\nimport com.pulumi.gcp.cloudrunv2.JobArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs;\nimport com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\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.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret = new Secret(\"secret\", SecretArgs.builder() \n .secretId(\"secret\")\n .replication(SecretReplicationArgs.builder()\n .automatic(true)\n .build())\n .build());\n\n var default_ = new Job(\"default\", JobArgs.builder() \n .location(\"us-central1\")\n .launchStage(\"BETA\")\n .template(JobTemplateArgs.builder()\n .template(JobTemplateTemplateArgs.builder()\n .volumes(JobTemplateTemplateVolumeArgs.builder()\n .name(\"a-volume\")\n .secret(JobTemplateTemplateVolumeSecretArgs.builder()\n .secret(secret.secretId())\n .defaultMode(292)\n .items(JobTemplateTemplateVolumeSecretItemArgs.builder()\n .version(\"1\")\n .path(\"my-secret\")\n .mode(256)\n .build())\n .build())\n .build())\n .containers(JobTemplateTemplateContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .volumeMounts(JobTemplateTemplateContainerVolumeMountArgs.builder()\n .name(\"a-volume\")\n .mountPath(\"/secrets\")\n .build())\n .build())\n .build())\n .build())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var secret_version_data = new SecretVersion(\"secret-version-data\", SecretVersionArgs.builder() \n .secret(secret.name())\n .secretData(\"secret-data\")\n .build());\n\n var secret_access = new SecretIamMember(\"secret-access\", SecretIamMemberArgs.builder() \n .secretId(secret.id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(String.format(\"serviceAccount:%s-compute@developer.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .dependsOn(secret)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:cloudrunv2:Job\n properties:\n location: us-central1\n launchStage: BETA\n template:\n template:\n volumes:\n - name: a-volume\n secret:\n secret: ${secret.secretId}\n defaultMode: 292\n items:\n - version: '1'\n path: my-secret\n mode: 256\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n volumeMounts:\n - name: a-volume\n mountPath: /secrets\n secret:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret\n replication:\n automatic: true\n secret-version-data:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${secret.name}\n secretData: secret-data\n secret-access:\n type: gcp:secretmanager:SecretIamMember\n properties:\n secretId: ${secret.id}\n role: roles/secretmanager.secretAccessor\n member: serviceAccount:${project.number}-compute@developer.gserviceaccount.com\n options:\n dependson:\n - ${secret}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nJob can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:cloudrunv2/job:Job default projects/{{project}}/locations/{{location}}/jobs/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudrunv2/job:Job default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:cloudrunv2/job:Job default {{location}}/{{name}}\n```\n\n ", "properties": { "binaryAuthorization": { "$ref": "#/types/gcp:cloudrunv2/JobBinaryAuthorization:JobBinaryAuthorization", @@ -125530,7 +126942,7 @@ }, "region": { "type": "string", - "description": "Region where the scheduler job resides. If it is not provided, this provider will use the provider default.\n" + "description": "Region where the scheduler job resides. If it is not provided, Terraform will use the provider default.\n" }, "retryConfig": { "$ref": "#/types/gcp:cloudscheduler/JobRetryConfig:JobRetryConfig", @@ -125593,7 +127005,7 @@ }, "region": { "type": "string", - "description": "Region where the scheduler job resides. If it is not provided, this provider will use the provider default.\n", + "description": "Region where the scheduler job resides. If it is not provided, Terraform will use the provider default.\n", "willReplaceOnChanges": true }, "retryConfig": { @@ -125648,7 +127060,7 @@ }, "region": { "type": "string", - "description": "Region where the scheduler job resides. If it is not provided, this provider will use the provider default.\n", + "description": "Region where the scheduler job resides. If it is not provided, Terraform will use the provider default.\n", "willReplaceOnChanges": true }, "retryConfig": { @@ -126225,7 +127637,7 @@ "additionalProperties": { "type": "string" }, - "description": "Labels to apply to this address. A list of key-\u003evalue pairs.\n" + "description": "Labels to apply to this address. A list of key-\u003evalue pairs.\n" }, "name": { "type": "string", @@ -126310,7 +127722,7 @@ "additionalProperties": { "type": "string" }, - "description": "Labels to apply to this address. A list of key-\u003evalue pairs.\n" + "description": "Labels to apply to this address. A list of key-\u003evalue pairs.\n" }, "name": { "type": "string", @@ -126389,7 +127801,7 @@ "additionalProperties": { "type": "string" }, - "description": "Labels to apply to this address. A list of key-\u003evalue pairs.\n" + "description": "Labels to apply to this address. A list of key-\u003evalue pairs.\n" }, "name": { "type": "string", @@ -126447,7 +127859,7 @@ } }, "gcp:compute/attachedDisk:AttachedDisk": { - "description": "Persistent disks can be attached to a compute instance using the `attached_disk`\nsection within the compute instance configuration.\nHowever there may be situations where managing the attached disks via the compute\ninstance config isn't preferable or possible, such as attaching dynamic\nnumbers of disks using the `count` variable.\n\n\nTo get more information about attaching disks, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/instances/attachDisk)\n* How-to Guides\n * [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk)\n\n**Note:** When using `gcp.compute.AttachedDisk` you **must** use `lifecycle.ignore_changes = [\"attached_disk\"]` on the `gcp.compute.Instance` resource that has the disks attached. Otherwise the two resources will fight for control of the attached disk block.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultInstance = new gcp.compute.Instance(\"defaultInstance\", {\n machineType: \"e2-medium\",\n zone: \"us-west1-a\",\n bootDisk: {\n initializeParams: {\n image: \"debian-cloud/debian-11\",\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n});\nconst defaultAttachedDisk = new gcp.compute.AttachedDisk(\"defaultAttachedDisk\", {\n disk: google_compute_disk[\"default\"].id,\n instance: defaultInstance.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_instance = gcp.compute.Instance(\"defaultInstance\",\n machine_type=\"e2-medium\",\n zone=\"us-west1-a\",\n boot_disk=gcp.compute.InstanceBootDiskArgs(\n initialize_params=gcp.compute.InstanceBootDiskInitializeParamsArgs(\n image=\"debian-cloud/debian-11\",\n ),\n ),\n network_interfaces=[gcp.compute.InstanceNetworkInterfaceArgs(\n network=\"default\",\n )])\ndefault_attached_disk = gcp.compute.AttachedDisk(\"defaultAttachedDisk\",\n disk=google_compute_disk[\"default\"][\"id\"],\n instance=default_instance.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultInstance = new Gcp.Compute.Instance(\"defaultInstance\", new()\n {\n MachineType = \"e2-medium\",\n Zone = \"us-west1-a\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = \"debian-cloud/debian-11\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n });\n\n var defaultAttachedDisk = new Gcp.Compute.AttachedDisk(\"defaultAttachedDisk\", new()\n {\n Disk = google_compute_disk.Default.Id,\n Instance = defaultInstance.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdefaultInstance, err := compute.NewInstance(ctx, \"defaultInstance\", \u0026compute.InstanceArgs{\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tZone: pulumi.String(\"us-west1-a\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(\"debian-cloud/debian-11\"),\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.NewAttachedDisk(ctx, \"defaultAttachedDisk\", \u0026compute.AttachedDiskArgs{\n\t\t\tDisk: pulumi.Any(google_compute_disk.Default.Id),\n\t\t\tInstance: defaultInstance.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.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.AttachedDisk;\nimport com.pulumi.gcp.compute.AttachedDiskArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultInstance = new Instance(\"defaultInstance\", InstanceArgs.builder() \n .machineType(\"e2-medium\")\n .zone(\"us-west1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"debian-cloud/debian-11\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .build());\n\n var defaultAttachedDisk = new AttachedDisk(\"defaultAttachedDisk\", AttachedDiskArgs.builder() \n .disk(google_compute_disk.default().id())\n .instance(defaultInstance.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultAttachedDisk:\n type: gcp:compute:AttachedDisk\n properties:\n disk: ${google_compute_disk.default.id}\n instance: ${defaultInstance.id}\n defaultInstance:\n type: gcp:compute:Instance\n properties:\n machineType: e2-medium\n zone: us-west1-a\n bootDisk:\n initializeParams:\n image: debian-cloud/debian-11\n networkInterfaces:\n - network: default\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nAttached Disk can be imported the following ways\n\n```sh\n $ pulumi import gcp:compute/attachedDisk:AttachedDisk default projects/{{project}}/zones/{{zone}}/instances/{{instance.name}}/{{disk.name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/attachedDisk:AttachedDisk default {{project}}/{{zone}}/{{instance.name}}/{{disk.name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultInstance = new gcp.compute.Instance(\"defaultInstance\", {\n machineType: \"e2-medium\",\n zone: \"us-west1-a\",\n bootDisk: {\n initializeParams: {\n image: \"debian-cloud/debian-11\",\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n});\nconst defaultAttachedDisk = new gcp.compute.AttachedDisk(\"defaultAttachedDisk\", {\n disk: google_compute_disk[\"default\"].id,\n instance: defaultInstance.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_instance = gcp.compute.Instance(\"defaultInstance\",\n machine_type=\"e2-medium\",\n zone=\"us-west1-a\",\n boot_disk=gcp.compute.InstanceBootDiskArgs(\n initialize_params=gcp.compute.InstanceBootDiskInitializeParamsArgs(\n image=\"debian-cloud/debian-11\",\n ),\n ),\n network_interfaces=[gcp.compute.InstanceNetworkInterfaceArgs(\n network=\"default\",\n )])\ndefault_attached_disk = gcp.compute.AttachedDisk(\"defaultAttachedDisk\",\n disk=google_compute_disk[\"default\"][\"id\"],\n instance=default_instance.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultInstance = new Gcp.Compute.Instance(\"defaultInstance\", new()\n {\n MachineType = \"e2-medium\",\n Zone = \"us-west1-a\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = \"debian-cloud/debian-11\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n });\n\n var defaultAttachedDisk = new Gcp.Compute.AttachedDisk(\"defaultAttachedDisk\", new()\n {\n Disk = google_compute_disk.Default.Id,\n Instance = defaultInstance.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdefaultInstance, err := compute.NewInstance(ctx, \"defaultInstance\", \u0026compute.InstanceArgs{\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tZone: pulumi.String(\"us-west1-a\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(\"debian-cloud/debian-11\"),\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.NewAttachedDisk(ctx, \"defaultAttachedDisk\", \u0026compute.AttachedDiskArgs{\n\t\t\tDisk: pulumi.Any(google_compute_disk.Default.Id),\n\t\t\tInstance: defaultInstance.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.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.AttachedDisk;\nimport com.pulumi.gcp.compute.AttachedDiskArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultInstance = new Instance(\"defaultInstance\", InstanceArgs.builder() \n .machineType(\"e2-medium\")\n .zone(\"us-west1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"debian-cloud/debian-11\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .build());\n\n var defaultAttachedDisk = new AttachedDisk(\"defaultAttachedDisk\", AttachedDiskArgs.builder() \n .disk(google_compute_disk.default().id())\n .instance(defaultInstance.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultAttachedDisk:\n type: gcp:compute:AttachedDisk\n properties:\n disk: ${google_compute_disk.default.id}\n instance: ${defaultInstance.id}\n defaultInstance:\n type: gcp:compute:Instance\n properties:\n machineType: e2-medium\n zone: us-west1-a\n bootDisk:\n initializeParams:\n image: debian-cloud/debian-11\n networkInterfaces:\n - network: default\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nAttached Disk can be imported the following ways\n\n```sh\n $ pulumi import gcp:compute/attachedDisk:AttachedDisk default projects/{{project}}/zones/{{zone}}/instances/{{instance.name}}/{{disk.name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/attachedDisk:AttachedDisk default {{project}}/{{zone}}/{{instance.name}}/{{disk.name}}\n```\n\n ", "properties": { "deviceName": { "type": "string", @@ -127231,7 +128643,7 @@ } }, "gcp:compute/backendBucketSignedUrlKey:BackendBucketSignedUrlKey": { - "description": "A key for signing Cloud CDN signed URLs for BackendBuckets.\n\n\nTo get more information about BackendBucketSignedUrlKey, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendBuckets)\n* How-to Guides\n * [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/)\n\n\u003e **Warning:** All arguments including `key_value` will be stored in the raw\nstate as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Backend Bucket Signed Url Key\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst urlSignature = new random.RandomId(\"urlSignature\", {byteLength: 16});\nconst bucket = new gcp.storage.Bucket(\"bucket\", {location: \"EU\"});\nconst testBackend = new gcp.compute.BackendBucket(\"testBackend\", {\n description: \"Contains beautiful images\",\n bucketName: bucket.name,\n enableCdn: true,\n});\nconst backendKey = new gcp.compute.BackendBucketSignedUrlKey(\"backendKey\", {\n keyValue: urlSignature.b64Url,\n backendBucket: testBackend.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\nurl_signature = random.RandomId(\"urlSignature\", byte_length=16)\nbucket = gcp.storage.Bucket(\"bucket\", location=\"EU\")\ntest_backend = gcp.compute.BackendBucket(\"testBackend\",\n description=\"Contains beautiful images\",\n bucket_name=bucket.name,\n enable_cdn=True)\nbackend_key = gcp.compute.BackendBucketSignedUrlKey(\"backendKey\",\n key_value=url_signature.b64_url,\n backend_bucket=test_backend.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var urlSignature = new Random.RandomId(\"urlSignature\", new()\n {\n ByteLength = 16,\n });\n\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Location = \"EU\",\n });\n\n var testBackend = new Gcp.Compute.BackendBucket(\"testBackend\", new()\n {\n Description = \"Contains beautiful images\",\n BucketName = bucket.Name,\n EnableCdn = true,\n });\n\n var backendKey = new Gcp.Compute.BackendBucketSignedUrlKey(\"backendKey\", new()\n {\n KeyValue = urlSignature.B64Url,\n BackendBucket = testBackend.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/storage\"\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\turlSignature, err := random.NewRandomId(ctx, \"urlSignature\", \u0026random.RandomIdArgs{\n\t\t\tByteLength: pulumi.Int(16),\n\t\t})\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\tLocation: pulumi.String(\"EU\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestBackend, err := compute.NewBackendBucket(ctx, \"testBackend\", \u0026compute.BackendBucketArgs{\n\t\t\tDescription: pulumi.String(\"Contains beautiful images\"),\n\t\t\tBucketName: bucket.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.NewBackendBucketSignedUrlKey(ctx, \"backendKey\", \u0026compute.BackendBucketSignedUrlKeyArgs{\n\t\t\tKeyValue: urlSignature.B64Url,\n\t\t\tBackendBucket: testBackend.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.random.RandomId;\nimport com.pulumi.random.RandomIdArgs;\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.BackendBucketSignedUrlKey;\nimport com.pulumi.gcp.compute.BackendBucketSignedUrlKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var urlSignature = new RandomId(\"urlSignature\", RandomIdArgs.builder() \n .byteLength(16)\n .build());\n\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .location(\"EU\")\n .build());\n\n var testBackend = new BackendBucket(\"testBackend\", BackendBucketArgs.builder() \n .description(\"Contains beautiful images\")\n .bucketName(bucket.name())\n .enableCdn(true)\n .build());\n\n var backendKey = new BackendBucketSignedUrlKey(\"backendKey\", BackendBucketSignedUrlKeyArgs.builder() \n .keyValue(urlSignature.b64Url())\n .backendBucket(testBackend.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlSignature:\n type: random:RandomId\n properties:\n byteLength: 16\n backendKey:\n type: gcp:compute:BackendBucketSignedUrlKey\n properties:\n keyValue: ${urlSignature.b64Url}\n backendBucket: ${testBackend.name}\n testBackend:\n type: gcp:compute:BackendBucket\n properties:\n description: Contains beautiful images\n bucketName: ${bucket.name}\n enableCdn: true\n bucket:\n type: gcp:storage:Bucket\n properties:\n location: EU\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource does not support import. ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Backend Bucket Signed Url Key\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst urlSignature = new random.RandomId(\"urlSignature\", {byteLength: 16});\nconst bucket = new gcp.storage.Bucket(\"bucket\", {location: \"EU\"});\nconst testBackend = new gcp.compute.BackendBucket(\"testBackend\", {\n description: \"Contains beautiful images\",\n bucketName: bucket.name,\n enableCdn: true,\n});\nconst backendKey = new gcp.compute.BackendBucketSignedUrlKey(\"backendKey\", {\n keyValue: urlSignature.b64Url,\n backendBucket: testBackend.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\nurl_signature = random.RandomId(\"urlSignature\", byte_length=16)\nbucket = gcp.storage.Bucket(\"bucket\", location=\"EU\")\ntest_backend = gcp.compute.BackendBucket(\"testBackend\",\n description=\"Contains beautiful images\",\n bucket_name=bucket.name,\n enable_cdn=True)\nbackend_key = gcp.compute.BackendBucketSignedUrlKey(\"backendKey\",\n key_value=url_signature.b64_url,\n backend_bucket=test_backend.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var urlSignature = new Random.RandomId(\"urlSignature\", new()\n {\n ByteLength = 16,\n });\n\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Location = \"EU\",\n });\n\n var testBackend = new Gcp.Compute.BackendBucket(\"testBackend\", new()\n {\n Description = \"Contains beautiful images\",\n BucketName = bucket.Name,\n EnableCdn = true,\n });\n\n var backendKey = new Gcp.Compute.BackendBucketSignedUrlKey(\"backendKey\", new()\n {\n KeyValue = urlSignature.B64Url,\n BackendBucket = testBackend.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/storage\"\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\turlSignature, err := random.NewRandomId(ctx, \"urlSignature\", \u0026random.RandomIdArgs{\n\t\t\tByteLength: pulumi.Int(16),\n\t\t})\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\tLocation: pulumi.String(\"EU\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttestBackend, err := compute.NewBackendBucket(ctx, \"testBackend\", \u0026compute.BackendBucketArgs{\n\t\t\tDescription: pulumi.String(\"Contains beautiful images\"),\n\t\t\tBucketName: bucket.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.NewBackendBucketSignedUrlKey(ctx, \"backendKey\", \u0026compute.BackendBucketSignedUrlKeyArgs{\n\t\t\tKeyValue: urlSignature.B64Url,\n\t\t\tBackendBucket: testBackend.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.random.RandomId;\nimport com.pulumi.random.RandomIdArgs;\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.BackendBucketSignedUrlKey;\nimport com.pulumi.gcp.compute.BackendBucketSignedUrlKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var urlSignature = new RandomId(\"urlSignature\", RandomIdArgs.builder() \n .byteLength(16)\n .build());\n\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .location(\"EU\")\n .build());\n\n var testBackend = new BackendBucket(\"testBackend\", BackendBucketArgs.builder() \n .description(\"Contains beautiful images\")\n .bucketName(bucket.name())\n .enableCdn(true)\n .build());\n\n var backendKey = new BackendBucketSignedUrlKey(\"backendKey\", BackendBucketSignedUrlKeyArgs.builder() \n .keyValue(urlSignature.b64Url())\n .backendBucket(testBackend.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlSignature:\n type: random:RandomId\n properties:\n byteLength: 16\n backendKey:\n type: gcp:compute:BackendBucketSignedUrlKey\n properties:\n keyValue: ${urlSignature.b64Url}\n backendBucket: ${testBackend.name}\n testBackend:\n type: gcp:compute:BackendBucket\n properties:\n description: Contains beautiful images\n bucketName: ${bucket.name}\n enableCdn: true\n bucket:\n type: gcp:storage:Bucket\n properties:\n location: EU\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource does not support import. ", "properties": { "backendBucket": { "type": "string", @@ -127313,7 +128725,7 @@ } }, "gcp:compute/backendService:BackendService": { - "description": "A Backend Service defines a group of virtual machines that will serve\ntraffic for load balancing. This resource is a global backend service,\nappropriate for external load balancing or self-managed internal load balancing.\nFor managed internal load balancing, use a regional backend service instead.\n\nCurrently self-managed internal load balancing is only available in beta.\n\n\nTo get more information about BackendService, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/v1/backendServices)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/load-balancing/http/backend-service)\n\n\u003e **Warning:** All arguments including `iap.oauth2_client_secret` and `iap.oauth2_client_secret_sha256` will be stored in the raw\nstate as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Backend Service Basic\n\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Cache Simple\n\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.inputs.BackendServiceCdnPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .healthChecks(defaultHttpHealthCheck.id())\n .enableCdn(true)\n .cdnPolicy(BackendServiceCdnPolicyArgs.builder()\n .signedUrlCacheMaxAgeSec(7200)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n enableCdn: true\n cdnPolicy:\n signedUrlCacheMaxAgeSec: 7200\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Cache Include Http Headers\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.BackendService(\"default\", {\n cdnPolicy: {\n cacheKeyPolicy: {\n includeHost: true,\n includeHttpHeaders: [\"X-My-Header-Field\"],\n includeProtocol: true,\n includeQueryString: true,\n },\n cacheMode: \"USE_ORIGIN_HEADERS\",\n },\n enableCdn: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.BackendService(\"default\",\n cdn_policy=gcp.compute.BackendServiceCdnPolicyArgs(\n cache_key_policy=gcp.compute.BackendServiceCdnPolicyCacheKeyPolicyArgs(\n include_host=True,\n include_http_headers=[\"X-My-Header-Field\"],\n include_protocol=True,\n include_query_string=True,\n ),\n cache_mode=\"USE_ORIGIN_HEADERS\",\n ),\n enable_cdn=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n CdnPolicy = new Gcp.Compute.Inputs.BackendServiceCdnPolicyArgs\n {\n CacheKeyPolicy = new Gcp.Compute.Inputs.BackendServiceCdnPolicyCacheKeyPolicyArgs\n {\n IncludeHost = true,\n IncludeHttpHeaders = new[]\n {\n \"X-My-Header-Field\",\n },\n IncludeProtocol = true,\n IncludeQueryString = true,\n },\n CacheMode = \"USE_ORIGIN_HEADERS\",\n },\n EnableCdn = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewBackendService(ctx, \"default\", \u0026compute.BackendServiceArgs{\n\t\t\tCdnPolicy: \u0026compute.BackendServiceCdnPolicyArgs{\n\t\t\t\tCacheKeyPolicy: \u0026compute.BackendServiceCdnPolicyCacheKeyPolicyArgs{\n\t\t\t\t\tIncludeHost: pulumi.Bool(true),\n\t\t\t\t\tIncludeHttpHeaders: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"X-My-Header-Field\"),\n\t\t\t\t\t},\n\t\t\t\t\tIncludeProtocol: pulumi.Bool(true),\n\t\t\t\t\tIncludeQueryString: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tCacheMode: pulumi.String(\"USE_ORIGIN_HEADERS\"),\n\t\t\t},\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\treturn nil\n\t})\n}\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.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceCdnPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceCdnPolicyCacheKeyPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 BackendService(\"default\", BackendServiceArgs.builder() \n .cdnPolicy(BackendServiceCdnPolicyArgs.builder()\n .cacheKeyPolicy(BackendServiceCdnPolicyCacheKeyPolicyArgs.builder()\n .includeHost(true)\n .includeHttpHeaders(\"X-My-Header-Field\")\n .includeProtocol(true)\n .includeQueryString(true)\n .build())\n .cacheMode(\"USE_ORIGIN_HEADERS\")\n .build())\n .enableCdn(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:BackendService\n properties:\n cdnPolicy:\n cacheKeyPolicy:\n includeHost: true\n includeHttpHeaders:\n - X-My-Header-Field\n includeProtocol: true\n includeQueryString: true\n cacheMode: USE_ORIGIN_HEADERS\n enableCdn: true\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Cache Include Named Cookies\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.BackendService(\"default\", {\n cdnPolicy: {\n cacheKeyPolicy: {\n includeHost: true,\n includeNamedCookies: [\n \"__next_preview_data\",\n \"__prerender_bypass\",\n ],\n includeProtocol: true,\n includeQueryString: true,\n },\n cacheMode: \"CACHE_ALL_STATIC\",\n clientTtl: 7200,\n defaultTtl: 3600,\n maxTtl: 10800,\n },\n enableCdn: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.BackendService(\"default\",\n cdn_policy=gcp.compute.BackendServiceCdnPolicyArgs(\n cache_key_policy=gcp.compute.BackendServiceCdnPolicyCacheKeyPolicyArgs(\n include_host=True,\n include_named_cookies=[\n \"__next_preview_data\",\n \"__prerender_bypass\",\n ],\n include_protocol=True,\n include_query_string=True,\n ),\n cache_mode=\"CACHE_ALL_STATIC\",\n client_ttl=7200,\n default_ttl=3600,\n max_ttl=10800,\n ),\n enable_cdn=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n CdnPolicy = new Gcp.Compute.Inputs.BackendServiceCdnPolicyArgs\n {\n CacheKeyPolicy = new Gcp.Compute.Inputs.BackendServiceCdnPolicyCacheKeyPolicyArgs\n {\n IncludeHost = true,\n IncludeNamedCookies = new[]\n {\n \"__next_preview_data\",\n \"__prerender_bypass\",\n },\n IncludeProtocol = true,\n IncludeQueryString = true,\n },\n CacheMode = \"CACHE_ALL_STATIC\",\n ClientTtl = 7200,\n DefaultTtl = 3600,\n MaxTtl = 10800,\n },\n EnableCdn = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewBackendService(ctx, \"default\", \u0026compute.BackendServiceArgs{\n\t\t\tCdnPolicy: \u0026compute.BackendServiceCdnPolicyArgs{\n\t\t\t\tCacheKeyPolicy: \u0026compute.BackendServiceCdnPolicyCacheKeyPolicyArgs{\n\t\t\t\t\tIncludeHost: pulumi.Bool(true),\n\t\t\t\t\tIncludeNamedCookies: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"__next_preview_data\"),\n\t\t\t\t\t\tpulumi.String(\"__prerender_bypass\"),\n\t\t\t\t\t},\n\t\t\t\t\tIncludeProtocol: pulumi.Bool(true),\n\t\t\t\t\tIncludeQueryString: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tCacheMode: pulumi.String(\"CACHE_ALL_STATIC\"),\n\t\t\t\tClientTtl: pulumi.Int(7200),\n\t\t\t\tDefaultTtl: pulumi.Int(3600),\n\t\t\t\tMaxTtl: pulumi.Int(10800),\n\t\t\t},\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\treturn nil\n\t})\n}\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.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceCdnPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceCdnPolicyCacheKeyPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 BackendService(\"default\", BackendServiceArgs.builder() \n .cdnPolicy(BackendServiceCdnPolicyArgs.builder()\n .cacheKeyPolicy(BackendServiceCdnPolicyCacheKeyPolicyArgs.builder()\n .includeHost(true)\n .includeNamedCookies( \n \"__next_preview_data\",\n \"__prerender_bypass\")\n .includeProtocol(true)\n .includeQueryString(true)\n .build())\n .cacheMode(\"CACHE_ALL_STATIC\")\n .clientTtl(7200)\n .defaultTtl(3600)\n .maxTtl(10800)\n .build())\n .enableCdn(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:BackendService\n properties:\n cdnPolicy:\n cacheKeyPolicy:\n includeHost: true\n includeNamedCookies:\n - __next_preview_data\n - __prerender_bypass\n includeProtocol: true\n includeQueryString: true\n cacheMode: CACHE_ALL_STATIC\n clientTtl: 7200\n defaultTtl: 3600\n maxTtl: 10800\n enableCdn: true\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Cache\n\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.inputs.BackendServiceCdnPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .healthChecks(defaultHttpHealthCheck.id())\n .enableCdn(true)\n .cdnPolicy(BackendServiceCdnPolicyArgs.builder()\n .cacheMode(\"CACHE_ALL_STATIC\")\n .defaultTtl(3600)\n .clientTtl(7200)\n .maxTtl(10800)\n .negativeCaching(true)\n .signedUrlCacheMaxAgeSec(7200)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n enableCdn: true\n cdnPolicy:\n cacheMode: CACHE_ALL_STATIC\n defaultTtl: 3600\n clientTtl: 7200\n maxTtl: 10800\n negativeCaching: true\n signedUrlCacheMaxAgeSec: 7200\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Traffic Director Round Robin\n\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.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 healthCheck = new HealthCheck(\"healthCheck\", HealthCheckArgs.builder() \n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder() \n .healthChecks(healthCheck.id())\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .localityLbPolicy(\"ROUND_ROBIN\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:BackendService\n properties:\n healthChecks:\n - ${healthCheck.id}\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n localityLbPolicy: ROUND_ROBIN\n options:\n provider: ${[\"google-beta\"]}\n healthCheck:\n type: gcp:compute:HealthCheck\n properties:\n httpHealthCheck:\n port: 80\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Traffic Director Ring Hash\n\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.inputs.BackendServiceCircuitBreakersArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceConsistentHashArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceConsistentHashHttpCookieArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceConsistentHashHttpCookieTtlArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceOutlierDetectionArgs;\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 healthCheck = new HealthCheck(\"healthCheck\", HealthCheckArgs.builder() \n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder() \n .healthChecks(healthCheck.id())\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .localityLbPolicy(\"RING_HASH\")\n .sessionAffinity(\"HTTP_COOKIE\")\n .circuitBreakers(BackendServiceCircuitBreakersArgs.builder()\n .maxConnections(10)\n .build())\n .consistentHash(BackendServiceConsistentHashArgs.builder()\n .httpCookie(BackendServiceConsistentHashHttpCookieArgs.builder()\n .ttl(BackendServiceConsistentHashHttpCookieTtlArgs.builder()\n .seconds(11)\n .nanos(1111)\n .build())\n .name(\"mycookie\")\n .build())\n .build())\n .outlierDetection(BackendServiceOutlierDetectionArgs.builder()\n .consecutiveErrors(2)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:BackendService\n properties:\n healthChecks:\n - ${healthCheck.id}\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n localityLbPolicy: RING_HASH\n sessionAffinity: HTTP_COOKIE\n circuitBreakers:\n maxConnections: 10\n consistentHash:\n httpCookie:\n ttl:\n seconds: 11\n nanos: 1111\n name: mycookie\n outlierDetection:\n consecutiveErrors: 2\n options:\n provider: ${[\"google-beta\"]}\n healthCheck:\n type: gcp:compute:HealthCheck\n properties:\n httpHealthCheck:\n port: 80\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Network Endpoint\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst externalProxy = new gcp.compute.GlobalNetworkEndpointGroup(\"externalProxy\", {\n networkEndpointType: \"INTERNET_FQDN_PORT\",\n defaultPort: 443,\n}, {\n provider: google_beta,\n});\nconst proxy = new gcp.compute.GlobalNetworkEndpoint(\"proxy\", {\n globalNetworkEndpointGroup: externalProxy.id,\n fqdn: \"test.example.com\",\n port: externalProxy.defaultPort,\n}, {\n provider: google_beta,\n});\nconst _default = new gcp.compute.BackendService(\"default\", {\n enableCdn: true,\n timeoutSec: 10,\n connectionDrainingTimeoutSec: 10,\n customRequestHeaders: [proxy.fqdn.apply(fqdn =\u003e `host: ${fqdn}`)],\n customResponseHeaders: [\"X-Cache-Hit: {cdn_cache_status}\"],\n backends: [{\n group: externalProxy.id,\n }],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexternal_proxy = gcp.compute.GlobalNetworkEndpointGroup(\"externalProxy\",\n network_endpoint_type=\"INTERNET_FQDN_PORT\",\n default_port=443,\n opts=pulumi.ResourceOptions(provider=google_beta))\nproxy = gcp.compute.GlobalNetworkEndpoint(\"proxy\",\n global_network_endpoint_group=external_proxy.id,\n fqdn=\"test.example.com\",\n port=external_proxy.default_port,\n opts=pulumi.ResourceOptions(provider=google_beta))\ndefault = gcp.compute.BackendService(\"default\",\n enable_cdn=True,\n timeout_sec=10,\n connection_draining_timeout_sec=10,\n custom_request_headers=[proxy.fqdn.apply(lambda fqdn: f\"host: {fqdn}\")],\n custom_response_headers=[\"X-Cache-Hit: {cdn_cache_status}\"],\n backends=[gcp.compute.BackendServiceBackendArgs(\n group=external_proxy.id,\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var externalProxy = new Gcp.Compute.GlobalNetworkEndpointGroup(\"externalProxy\", new()\n {\n NetworkEndpointType = \"INTERNET_FQDN_PORT\",\n DefaultPort = 443,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var proxy = new Gcp.Compute.GlobalNetworkEndpoint(\"proxy\", new()\n {\n GlobalNetworkEndpointGroup = externalProxy.Id,\n Fqdn = \"test.example.com\",\n Port = externalProxy.DefaultPort,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n EnableCdn = true,\n TimeoutSec = 10,\n ConnectionDrainingTimeoutSec = 10,\n CustomRequestHeaders = new[]\n {\n proxy.Fqdn.Apply(fqdn =\u003e $\"host: {fqdn}\"),\n },\n CustomResponseHeaders = new[]\n {\n \"X-Cache-Hit: {cdn_cache_status}\",\n },\n Backends = new[]\n {\n new Gcp.Compute.Inputs.BackendServiceBackendArgs\n {\n Group = externalProxy.Id,\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\texternalProxy, err := compute.NewGlobalNetworkEndpointGroup(ctx, \"externalProxy\", \u0026compute.GlobalNetworkEndpointGroupArgs{\n\t\t\tNetworkEndpointType: pulumi.String(\"INTERNET_FQDN_PORT\"),\n\t\t\tDefaultPort: pulumi.Int(443),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproxy, err := compute.NewGlobalNetworkEndpoint(ctx, \"proxy\", \u0026compute.GlobalNetworkEndpointArgs{\n\t\t\tGlobalNetworkEndpointGroup: externalProxy.ID(),\n\t\t\tFqdn: pulumi.String(\"test.example.com\"),\n\t\t\tPort: externalProxy.DefaultPort,\n\t\t}, pulumi.Provider(google_beta))\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\tEnableCdn: pulumi.Bool(true),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tConnectionDrainingTimeoutSec: pulumi.Int(10),\n\t\t\tCustomRequestHeaders: pulumi.StringArray{\n\t\t\t\tproxy.Fqdn.ApplyT(func(fqdn *string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"host: %v\", fqdn), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tCustomResponseHeaders: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"X-Cache-Hit: {cdn_cache_status}\"),\n\t\t\t},\n\t\t\tBackends: compute.BackendServiceBackendArray{\n\t\t\t\t\u0026compute.BackendServiceBackendArgs{\n\t\t\t\t\tGroup: externalProxy.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GlobalNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.GlobalNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.GlobalNetworkEndpoint;\nimport com.pulumi.gcp.compute.GlobalNetworkEndpointArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs;\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 externalProxy = new GlobalNetworkEndpointGroup(\"externalProxy\", GlobalNetworkEndpointGroupArgs.builder() \n .networkEndpointType(\"INTERNET_FQDN_PORT\")\n .defaultPort(\"443\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var proxy = new GlobalNetworkEndpoint(\"proxy\", GlobalNetworkEndpointArgs.builder() \n .globalNetworkEndpointGroup(externalProxy.id())\n .fqdn(\"test.example.com\")\n .port(externalProxy.defaultPort())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder() \n .enableCdn(true)\n .timeoutSec(10)\n .connectionDrainingTimeoutSec(10)\n .customRequestHeaders(proxy.fqdn().applyValue(fqdn -\u003e String.format(\"host: %s\", fqdn)))\n .customResponseHeaders(\"X-Cache-Hit: {cdn_cache_status}\")\n .backends(BackendServiceBackendArgs.builder()\n .group(externalProxy.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n externalProxy:\n type: gcp:compute:GlobalNetworkEndpointGroup\n properties:\n networkEndpointType: INTERNET_FQDN_PORT\n defaultPort: '443'\n options:\n provider: ${[\"google-beta\"]}\n proxy:\n type: gcp:compute:GlobalNetworkEndpoint\n properties:\n globalNetworkEndpointGroup: ${externalProxy.id}\n fqdn: test.example.com\n port: ${externalProxy.defaultPort}\n options:\n provider: ${[\"google-beta\"]}\n default:\n type: gcp:compute:BackendService\n properties:\n enableCdn: true\n timeoutSec: 10\n connectionDrainingTimeoutSec: 10\n customRequestHeaders:\n - 'host: ${proxy.fqdn}'\n customResponseHeaders:\n - 'X-Cache-Hit: {cdn_cache_status}'\n backends:\n - group: ${externalProxy.id}\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service External Managed\n\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .healthChecks(defaultHealthCheck.id())\n .loadBalancingScheme(\"EXTERNAL_MANAGED\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n healthChecks:\n - ${defaultHealthCheck.id}\n loadBalancingScheme: EXTERNAL_MANAGED\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBackendService can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/backendService:BackendService default projects/{{project}}/global/backendServices/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/backendService:BackendService default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/backendService:BackendService default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Backend Service Basic\n\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Cache Simple\n\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.inputs.BackendServiceCdnPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .healthChecks(defaultHttpHealthCheck.id())\n .enableCdn(true)\n .cdnPolicy(BackendServiceCdnPolicyArgs.builder()\n .signedUrlCacheMaxAgeSec(7200)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n enableCdn: true\n cdnPolicy:\n signedUrlCacheMaxAgeSec: 7200\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Cache Include Http Headers\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.BackendService(\"default\", {\n cdnPolicy: {\n cacheKeyPolicy: {\n includeHost: true,\n includeHttpHeaders: [\"X-My-Header-Field\"],\n includeProtocol: true,\n includeQueryString: true,\n },\n cacheMode: \"USE_ORIGIN_HEADERS\",\n },\n enableCdn: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.BackendService(\"default\",\n cdn_policy=gcp.compute.BackendServiceCdnPolicyArgs(\n cache_key_policy=gcp.compute.BackendServiceCdnPolicyCacheKeyPolicyArgs(\n include_host=True,\n include_http_headers=[\"X-My-Header-Field\"],\n include_protocol=True,\n include_query_string=True,\n ),\n cache_mode=\"USE_ORIGIN_HEADERS\",\n ),\n enable_cdn=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n CdnPolicy = new Gcp.Compute.Inputs.BackendServiceCdnPolicyArgs\n {\n CacheKeyPolicy = new Gcp.Compute.Inputs.BackendServiceCdnPolicyCacheKeyPolicyArgs\n {\n IncludeHost = true,\n IncludeHttpHeaders = new[]\n {\n \"X-My-Header-Field\",\n },\n IncludeProtocol = true,\n IncludeQueryString = true,\n },\n CacheMode = \"USE_ORIGIN_HEADERS\",\n },\n EnableCdn = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewBackendService(ctx, \"default\", \u0026compute.BackendServiceArgs{\n\t\t\tCdnPolicy: \u0026compute.BackendServiceCdnPolicyArgs{\n\t\t\t\tCacheKeyPolicy: \u0026compute.BackendServiceCdnPolicyCacheKeyPolicyArgs{\n\t\t\t\t\tIncludeHost: pulumi.Bool(true),\n\t\t\t\t\tIncludeHttpHeaders: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"X-My-Header-Field\"),\n\t\t\t\t\t},\n\t\t\t\t\tIncludeProtocol: pulumi.Bool(true),\n\t\t\t\t\tIncludeQueryString: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tCacheMode: pulumi.String(\"USE_ORIGIN_HEADERS\"),\n\t\t\t},\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\treturn nil\n\t})\n}\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.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceCdnPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceCdnPolicyCacheKeyPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 BackendService(\"default\", BackendServiceArgs.builder() \n .cdnPolicy(BackendServiceCdnPolicyArgs.builder()\n .cacheKeyPolicy(BackendServiceCdnPolicyCacheKeyPolicyArgs.builder()\n .includeHost(true)\n .includeHttpHeaders(\"X-My-Header-Field\")\n .includeProtocol(true)\n .includeQueryString(true)\n .build())\n .cacheMode(\"USE_ORIGIN_HEADERS\")\n .build())\n .enableCdn(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:BackendService\n properties:\n cdnPolicy:\n cacheKeyPolicy:\n includeHost: true\n includeHttpHeaders:\n - X-My-Header-Field\n includeProtocol: true\n includeQueryString: true\n cacheMode: USE_ORIGIN_HEADERS\n enableCdn: true\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Cache Include Named Cookies\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.BackendService(\"default\", {\n cdnPolicy: {\n cacheKeyPolicy: {\n includeHost: true,\n includeNamedCookies: [\n \"__next_preview_data\",\n \"__prerender_bypass\",\n ],\n includeProtocol: true,\n includeQueryString: true,\n },\n cacheMode: \"CACHE_ALL_STATIC\",\n clientTtl: 7200,\n defaultTtl: 3600,\n maxTtl: 10800,\n },\n enableCdn: true,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.BackendService(\"default\",\n cdn_policy=gcp.compute.BackendServiceCdnPolicyArgs(\n cache_key_policy=gcp.compute.BackendServiceCdnPolicyCacheKeyPolicyArgs(\n include_host=True,\n include_named_cookies=[\n \"__next_preview_data\",\n \"__prerender_bypass\",\n ],\n include_protocol=True,\n include_query_string=True,\n ),\n cache_mode=\"CACHE_ALL_STATIC\",\n client_ttl=7200,\n default_ttl=3600,\n max_ttl=10800,\n ),\n enable_cdn=True)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n CdnPolicy = new Gcp.Compute.Inputs.BackendServiceCdnPolicyArgs\n {\n CacheKeyPolicy = new Gcp.Compute.Inputs.BackendServiceCdnPolicyCacheKeyPolicyArgs\n {\n IncludeHost = true,\n IncludeNamedCookies = new[]\n {\n \"__next_preview_data\",\n \"__prerender_bypass\",\n },\n IncludeProtocol = true,\n IncludeQueryString = true,\n },\n CacheMode = \"CACHE_ALL_STATIC\",\n ClientTtl = 7200,\n DefaultTtl = 3600,\n MaxTtl = 10800,\n },\n EnableCdn = true,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewBackendService(ctx, \"default\", \u0026compute.BackendServiceArgs{\n\t\t\tCdnPolicy: \u0026compute.BackendServiceCdnPolicyArgs{\n\t\t\t\tCacheKeyPolicy: \u0026compute.BackendServiceCdnPolicyCacheKeyPolicyArgs{\n\t\t\t\t\tIncludeHost: pulumi.Bool(true),\n\t\t\t\t\tIncludeNamedCookies: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"__next_preview_data\"),\n\t\t\t\t\t\tpulumi.String(\"__prerender_bypass\"),\n\t\t\t\t\t},\n\t\t\t\t\tIncludeProtocol: pulumi.Bool(true),\n\t\t\t\t\tIncludeQueryString: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t\tCacheMode: pulumi.String(\"CACHE_ALL_STATIC\"),\n\t\t\t\tClientTtl: pulumi.Int(7200),\n\t\t\t\tDefaultTtl: pulumi.Int(3600),\n\t\t\t\tMaxTtl: pulumi.Int(10800),\n\t\t\t},\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\treturn nil\n\t})\n}\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.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceCdnPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceCdnPolicyCacheKeyPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 BackendService(\"default\", BackendServiceArgs.builder() \n .cdnPolicy(BackendServiceCdnPolicyArgs.builder()\n .cacheKeyPolicy(BackendServiceCdnPolicyCacheKeyPolicyArgs.builder()\n .includeHost(true)\n .includeNamedCookies( \n \"__next_preview_data\",\n \"__prerender_bypass\")\n .includeProtocol(true)\n .includeQueryString(true)\n .build())\n .cacheMode(\"CACHE_ALL_STATIC\")\n .clientTtl(7200)\n .defaultTtl(3600)\n .maxTtl(10800)\n .build())\n .enableCdn(true)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:BackendService\n properties:\n cdnPolicy:\n cacheKeyPolicy:\n includeHost: true\n includeNamedCookies:\n - __next_preview_data\n - __prerender_bypass\n includeProtocol: true\n includeQueryString: true\n cacheMode: CACHE_ALL_STATIC\n clientTtl: 7200\n defaultTtl: 3600\n maxTtl: 10800\n enableCdn: true\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Cache\n\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.inputs.BackendServiceCdnPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .healthChecks(defaultHttpHealthCheck.id())\n .enableCdn(true)\n .cdnPolicy(BackendServiceCdnPolicyArgs.builder()\n .cacheMode(\"CACHE_ALL_STATIC\")\n .defaultTtl(3600)\n .clientTtl(7200)\n .maxTtl(10800)\n .negativeCaching(true)\n .signedUrlCacheMaxAgeSec(7200)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n enableCdn: true\n cdnPolicy:\n cacheMode: CACHE_ALL_STATIC\n defaultTtl: 3600\n clientTtl: 7200\n maxTtl: 10800\n negativeCaching: true\n signedUrlCacheMaxAgeSec: 7200\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Traffic Director Round Robin\n\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.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 healthCheck = new HealthCheck(\"healthCheck\", HealthCheckArgs.builder() \n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder() \n .healthChecks(healthCheck.id())\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .localityLbPolicy(\"ROUND_ROBIN\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:BackendService\n properties:\n healthChecks:\n - ${healthCheck.id}\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n localityLbPolicy: ROUND_ROBIN\n options:\n provider: ${[\"google-beta\"]}\n healthCheck:\n type: gcp:compute:HealthCheck\n properties:\n httpHealthCheck:\n port: 80\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Traffic Director Ring Hash\n\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.inputs.BackendServiceCircuitBreakersArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceConsistentHashArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceConsistentHashHttpCookieArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceConsistentHashHttpCookieTtlArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceOutlierDetectionArgs;\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 healthCheck = new HealthCheck(\"healthCheck\", HealthCheckArgs.builder() \n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder() \n .healthChecks(healthCheck.id())\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .localityLbPolicy(\"RING_HASH\")\n .sessionAffinity(\"HTTP_COOKIE\")\n .circuitBreakers(BackendServiceCircuitBreakersArgs.builder()\n .maxConnections(10)\n .build())\n .consistentHash(BackendServiceConsistentHashArgs.builder()\n .httpCookie(BackendServiceConsistentHashHttpCookieArgs.builder()\n .ttl(BackendServiceConsistentHashHttpCookieTtlArgs.builder()\n .seconds(11)\n .nanos(1111)\n .build())\n .name(\"mycookie\")\n .build())\n .build())\n .outlierDetection(BackendServiceOutlierDetectionArgs.builder()\n .consecutiveErrors(2)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:BackendService\n properties:\n healthChecks:\n - ${healthCheck.id}\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n localityLbPolicy: RING_HASH\n sessionAffinity: HTTP_COOKIE\n circuitBreakers:\n maxConnections: 10\n consistentHash:\n httpCookie:\n ttl:\n seconds: 11\n nanos: 1111\n name: mycookie\n outlierDetection:\n consecutiveErrors: 2\n options:\n provider: ${[\"google-beta\"]}\n healthCheck:\n type: gcp:compute:HealthCheck\n properties:\n httpHealthCheck:\n port: 80\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service Network Endpoint\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst externalProxy = new gcp.compute.GlobalNetworkEndpointGroup(\"externalProxy\", {\n networkEndpointType: \"INTERNET_FQDN_PORT\",\n defaultPort: 443,\n}, {\n provider: google_beta,\n});\nconst proxy = new gcp.compute.GlobalNetworkEndpoint(\"proxy\", {\n globalNetworkEndpointGroup: externalProxy.id,\n fqdn: \"test.example.com\",\n port: externalProxy.defaultPort,\n}, {\n provider: google_beta,\n});\nconst _default = new gcp.compute.BackendService(\"default\", {\n enableCdn: true,\n timeoutSec: 10,\n connectionDrainingTimeoutSec: 10,\n customRequestHeaders: [proxy.fqdn.apply(fqdn =\u003e `host: ${fqdn}`)],\n customResponseHeaders: [\"X-Cache-Hit: {cdn_cache_status}\"],\n backends: [{\n group: externalProxy.id,\n }],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexternal_proxy = gcp.compute.GlobalNetworkEndpointGroup(\"externalProxy\",\n network_endpoint_type=\"INTERNET_FQDN_PORT\",\n default_port=443,\n opts=pulumi.ResourceOptions(provider=google_beta))\nproxy = gcp.compute.GlobalNetworkEndpoint(\"proxy\",\n global_network_endpoint_group=external_proxy.id,\n fqdn=\"test.example.com\",\n port=external_proxy.default_port,\n opts=pulumi.ResourceOptions(provider=google_beta))\ndefault = gcp.compute.BackendService(\"default\",\n enable_cdn=True,\n timeout_sec=10,\n connection_draining_timeout_sec=10,\n custom_request_headers=[proxy.fqdn.apply(lambda fqdn: f\"host: {fqdn}\")],\n custom_response_headers=[\"X-Cache-Hit: {cdn_cache_status}\"],\n backends=[gcp.compute.BackendServiceBackendArgs(\n group=external_proxy.id,\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var externalProxy = new Gcp.Compute.GlobalNetworkEndpointGroup(\"externalProxy\", new()\n {\n NetworkEndpointType = \"INTERNET_FQDN_PORT\",\n DefaultPort = 443,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var proxy = new Gcp.Compute.GlobalNetworkEndpoint(\"proxy\", new()\n {\n GlobalNetworkEndpointGroup = externalProxy.Id,\n Fqdn = \"test.example.com\",\n Port = externalProxy.DefaultPort,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var @default = new Gcp.Compute.BackendService(\"default\", new()\n {\n EnableCdn = true,\n TimeoutSec = 10,\n ConnectionDrainingTimeoutSec = 10,\n CustomRequestHeaders = new[]\n {\n proxy.Fqdn.Apply(fqdn =\u003e $\"host: {fqdn}\"),\n },\n CustomResponseHeaders = new[]\n {\n \"X-Cache-Hit: {cdn_cache_status}\",\n },\n Backends = new[]\n {\n new Gcp.Compute.Inputs.BackendServiceBackendArgs\n {\n Group = externalProxy.Id,\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\texternalProxy, err := compute.NewGlobalNetworkEndpointGroup(ctx, \"externalProxy\", \u0026compute.GlobalNetworkEndpointGroupArgs{\n\t\t\tNetworkEndpointType: pulumi.String(\"INTERNET_FQDN_PORT\"),\n\t\t\tDefaultPort: pulumi.Int(443),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproxy, err := compute.NewGlobalNetworkEndpoint(ctx, \"proxy\", \u0026compute.GlobalNetworkEndpointArgs{\n\t\t\tGlobalNetworkEndpointGroup: externalProxy.ID(),\n\t\t\tFqdn: pulumi.String(\"test.example.com\"),\n\t\t\tPort: externalProxy.DefaultPort,\n\t\t}, pulumi.Provider(google_beta))\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\tEnableCdn: pulumi.Bool(true),\n\t\t\tTimeoutSec: pulumi.Int(10),\n\t\t\tConnectionDrainingTimeoutSec: pulumi.Int(10),\n\t\t\tCustomRequestHeaders: pulumi.StringArray{\n\t\t\t\tproxy.Fqdn.ApplyT(func(fqdn *string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"host: %v\", fqdn), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tCustomResponseHeaders: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"X-Cache-Hit: {cdn_cache_status}\"),\n\t\t\t},\n\t\t\tBackends: compute.BackendServiceBackendArray{\n\t\t\t\t\u0026compute.BackendServiceBackendArgs{\n\t\t\t\t\tGroup: externalProxy.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GlobalNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.GlobalNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.GlobalNetworkEndpoint;\nimport com.pulumi.gcp.compute.GlobalNetworkEndpointArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs;\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 externalProxy = new GlobalNetworkEndpointGroup(\"externalProxy\", GlobalNetworkEndpointGroupArgs.builder() \n .networkEndpointType(\"INTERNET_FQDN_PORT\")\n .defaultPort(\"443\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var proxy = new GlobalNetworkEndpoint(\"proxy\", GlobalNetworkEndpointArgs.builder() \n .globalNetworkEndpointGroup(externalProxy.id())\n .fqdn(\"test.example.com\")\n .port(externalProxy.defaultPort())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var default_ = new BackendService(\"default\", BackendServiceArgs.builder() \n .enableCdn(true)\n .timeoutSec(10)\n .connectionDrainingTimeoutSec(10)\n .customRequestHeaders(proxy.fqdn().applyValue(fqdn -\u003e String.format(\"host: %s\", fqdn)))\n .customResponseHeaders(\"X-Cache-Hit: {cdn_cache_status}\")\n .backends(BackendServiceBackendArgs.builder()\n .group(externalProxy.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n externalProxy:\n type: gcp:compute:GlobalNetworkEndpointGroup\n properties:\n networkEndpointType: INTERNET_FQDN_PORT\n defaultPort: '443'\n options:\n provider: ${[\"google-beta\"]}\n proxy:\n type: gcp:compute:GlobalNetworkEndpoint\n properties:\n globalNetworkEndpointGroup: ${externalProxy.id}\n fqdn: test.example.com\n port: ${externalProxy.defaultPort}\n options:\n provider: ${[\"google-beta\"]}\n default:\n type: gcp:compute:BackendService\n properties:\n enableCdn: true\n timeoutSec: 10\n connectionDrainingTimeoutSec: 10\n customRequestHeaders:\n - 'host: ${proxy.fqdn}'\n customResponseHeaders:\n - 'X-Cache-Hit: {cdn_cache_status}'\n backends:\n - group: ${externalProxy.id}\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Backend Service External Managed\n\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .healthChecks(defaultHealthCheck.id())\n .loadBalancingScheme(\"EXTERNAL_MANAGED\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n healthChecks:\n - ${defaultHealthCheck.id}\n loadBalancingScheme: EXTERNAL_MANAGED\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBackendService can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/backendService:BackendService default projects/{{project}}/global/backendServices/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/backendService:BackendService default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/backendService:BackendService default {{name}}\n```\n\n ", "properties": { "affinityCookieTtlSec": { "type": "integer", @@ -127376,14 +128788,154 @@ "type": "boolean", "description": "If true, enable Cloud CDN for this BackendService.\n" }, - "fingerprint": { - "type": "string", - "description": "Fingerprint of this resource. A hash of the contents stored in this\nobject. This field is used in optimistic locking.\n" - }, - "generatedId": { - "type": "integer", - "description": "The unique identifier for the resource. This identifier is defined by the server.\n" - }, + "fingerprint": { + "type": "string", + "description": "Fingerprint of this resource. A hash of the contents stored in this\nobject. This field is used in optimistic locking.\n" + }, + "generatedId": { + "type": "integer", + "description": "The unique identifier for the resource. This identifier is defined by the server.\n" + }, + "healthChecks": { + "type": "string", + "description": "The set of URLs to the HttpHealthCheck or HttpsHealthCheck resource\nfor health checking this BackendService. Currently at most one health\ncheck can be specified.\nA health check must be specified unless the backend service uses an internet\nor serverless NEG as a backend.\nFor internal load balancing, a URL to a HealthCheck resource must be specified instead.\n" + }, + "iap": { + "$ref": "#/types/gcp:compute/BackendServiceIap:BackendServiceIap", + "description": "Settings for enabling Cloud Identity Aware Proxy\nStructure is documented below.\n" + }, + "loadBalancingScheme": { + "type": "string", + "description": "Indicates whether the backend service will be used with internal or\nexternal load balancing. A backend service created for one type of\nload balancing cannot be used with the other. For more information, refer to\n[Choosing a load balancer](https://cloud.google.com/load-balancing/docs/backend-service).\nDefault value is `EXTERNAL`.\nPossible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`.\n" + }, + "localityLbPolicies": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/BackendServiceLocalityLbPolicy:BackendServiceLocalityLbPolicy" + }, + "description": "A list of locality load balancing policies to be used in order of\npreference. Either the policy or the customPolicy field should be set.\nOverrides any value set in the localityLbPolicy field.\nlocalityLbPolicies is only supported when the BackendService is referenced\nby a URL Map that is referenced by a target gRPC proxy that has the\nvalidateForProxyless field set to true.\nStructure is documented below.\n" + }, + "localityLbPolicy": { + "type": "string", + "description": "The load balancing algorithm used within the scope of the locality.\nThe possible values are:\n" + }, + "logConfig": { + "$ref": "#/types/gcp:compute/BackendServiceLogConfig:BackendServiceLogConfig", + "description": "This field denotes the logging options for the load balancer traffic served by this backend service.\nIf logging is enabled, logs will be exported to Stackdriver.\nStructure is documented below.\n" + }, + "name": { + "type": "string", + "description": "Name of the resource. Provided by the client when the resource is\ncreated. The name must be 1-63 characters long, and comply with\nRFC1035. Specifically, the name must be 1-63 characters long and match\nthe regular expression `a-z?` which means the\nfirst character must be a lowercase letter, and all following\ncharacters must be a dash, lowercase letter, or digit, except the last\ncharacter, which cannot be a dash.\n" + }, + "outlierDetection": { + "$ref": "#/types/gcp:compute/BackendServiceOutlierDetection:BackendServiceOutlierDetection", + "description": "Settings controlling eviction of unhealthy hosts from the load balancing pool.\nThis field is applicable only when the load_balancing_scheme is set\nto INTERNAL_SELF_MANAGED.\nStructure is documented below.\n" + }, + "portName": { + "type": "string", + "description": "Name of backend port. The same name should appear in the instance\ngroups referenced by this service. Required when the load balancing\nscheme is EXTERNAL.\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" + }, + "protocol": { + "type": "string", + "description": "The protocol this BackendService uses to communicate with backends.\nThe default is HTTP. **NOTE**: HTTP2 is only valid for beta HTTP/2 load balancer\ntypes and may result in errors if used with the GA API.\nPossible values are `HTTP`, `HTTPS`, `HTTP2`, `TCP`, `SSL`, and `GRPC`.\n" + }, + "securityPolicy": { + "type": "string", + "description": "The security policy associated with this backend service.\n" + }, + "securitySettings": { + "$ref": "#/types/gcp:compute/BackendServiceSecuritySettings:BackendServiceSecuritySettings", + "description": "The security settings that apply to this backend service. This field is applicable to either\na regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and\nload_balancing_scheme set to INTERNAL_MANAGED; or a global backend service with the\nload_balancing_scheme set to INTERNAL_SELF_MANAGED.\nStructure is documented below.\n" + }, + "selfLink": { + "type": "string", + "description": "The URI of the created resource.\n" + }, + "sessionAffinity": { + "type": "string", + "description": "Type of session affinity to use. The default is NONE. Session affinity is\nnot applicable if the protocol is UDP.\nPossible values are `NONE`, `CLIENT_IP`, `CLIENT_IP_PORT_PROTO`, `CLIENT_IP_PROTO`, `GENERATED_COOKIE`, `HEADER_FIELD`, and `HTTP_COOKIE`.\n" + }, + "timeoutSec": { + "type": "integer", + "description": "How many seconds to wait for the backend before considering it a\nfailed request. Default is 30 seconds. Valid range is [1, 86400].\n" + } + }, + "required": [ + "cdnPolicy", + "creationTimestamp", + "fingerprint", + "generatedId", + "logConfig", + "name", + "portName", + "project", + "protocol", + "selfLink", + "sessionAffinity", + "timeoutSec" + ], + "inputProperties": { + "affinityCookieTtlSec": { + "type": "integer", + "description": "Lifetime of cookies in seconds if session_affinity is\nGENERATED_COOKIE. If set to 0, the cookie is non-persistent and lasts\nonly until the end of the browser session (or equivalent). The\nmaximum allowed value for TTL is one day.\nWhen the load balancing scheme is INTERNAL, this field is not used.\n" + }, + "backends": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/BackendServiceBackend:BackendServiceBackend" + }, + "description": "The set of backends that serve this BackendService.\nStructure is documented below.\n" + }, + "cdnPolicy": { + "$ref": "#/types/gcp:compute/BackendServiceCdnPolicy:BackendServiceCdnPolicy", + "description": "Cloud CDN configuration for this BackendService.\nStructure is documented below.\n" + }, + "circuitBreakers": { + "$ref": "#/types/gcp:compute/BackendServiceCircuitBreakers:BackendServiceCircuitBreakers", + "description": "Settings controlling the volume of connections to a backend service. This field\nis applicable only when the load_balancing_scheme is set to INTERNAL_SELF_MANAGED.\nStructure is documented below.\n" + }, + "compressionMode": { + "type": "string", + "description": "Compress text responses using Brotli or gzip compression, based on the client's Accept-Encoding header.\nPossible values are `AUTOMATIC` and `DISABLED`.\n" + }, + "connectionDrainingTimeoutSec": { + "type": "integer", + "description": "Time for which instance will be drained (not accept new\nconnections, but still work to finish started).\n" + }, + "consistentHash": { + "$ref": "#/types/gcp:compute/BackendServiceConsistentHash:BackendServiceConsistentHash", + "description": "Consistent Hash-based load balancing can be used to provide soft session\naffinity based on HTTP headers, cookies or other properties. This load balancing\npolicy is applicable only for HTTP connections. The affinity to a particular\ndestination host will be lost when one or more hosts are added/removed from the\ndestination service. This field specifies parameters that control consistent\nhashing. This field only applies if the load_balancing_scheme is set to\nINTERNAL_SELF_MANAGED. This field is only applicable when locality_lb_policy is\nset to MAGLEV or RING_HASH.\nStructure is documented below.\n" + }, + "customRequestHeaders": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Headers that the HTTP/S load balancer should add to proxied\nrequests.\n" + }, + "customResponseHeaders": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Headers that the HTTP/S load balancer should add to proxied\nresponses.\n" + }, + "description": { + "type": "string", + "description": "An optional description of this resource.\n" + }, + "edgeSecurityPolicy": { + "type": "string", + "description": "The resource URL for the edge security policy associated with this backend service.\n" + }, + "enableCdn": { + "type": "boolean", + "description": "If true, enable Cloud CDN for this BackendService.\n" + }, "healthChecks": { "type": "string", "description": "The set of URLs to the HttpHealthCheck or HttpsHealthCheck resource\nfor health checking this BackendService. Currently at most one health\ncheck can be specified.\nA health check must be specified unless the backend service uses an internet\nor serverless NEG as a backend.\nFor internal load balancing, a URL to a HealthCheck resource must be specified instead.\n" @@ -127394,141 +128946,15 @@ }, "loadBalancingScheme": { "type": "string", - "description": "Indicates whether the backend service will be used with internal or\nexternal load balancing. A backend service created for one type of\nload balancing cannot be used with the other. For more information, refer to\n[Choosing a load balancer](https://cloud.google.com/load-balancing/docs/backend-service).\nDefault value is `EXTERNAL`.\nPossible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`.\n" - }, - "localityLbPolicy": { - "type": "string", - "description": "The load balancing algorithm used within the scope of the locality.\nThe possible values are:\n" - }, - "logConfig": { - "$ref": "#/types/gcp:compute/BackendServiceLogConfig:BackendServiceLogConfig", - "description": "This field denotes the logging options for the load balancer traffic served by this backend service.\nIf logging is enabled, logs will be exported to Stackdriver.\nStructure is documented below.\n" - }, - "name": { - "type": "string", - "description": "Name of the resource. Provided by the client when the resource is\ncreated. The name must be 1-63 characters long, and comply with\nRFC1035. Specifically, the name must be 1-63 characters long and match\nthe regular expression `a-z?` which means the\nfirst character must be a lowercase letter, and all following\ncharacters must be a dash, lowercase letter, or digit, except the last\ncharacter, which cannot be a dash.\n" - }, - "outlierDetection": { - "$ref": "#/types/gcp:compute/BackendServiceOutlierDetection:BackendServiceOutlierDetection", - "description": "Settings controlling eviction of unhealthy hosts from the load balancing pool.\nThis field is applicable only when the load_balancing_scheme is set\nto INTERNAL_SELF_MANAGED.\nStructure is documented below.\n" - }, - "portName": { - "type": "string", - "description": "Name of backend port. The same name should appear in the instance\ngroups referenced by this service. Required when the load balancing\nscheme is EXTERNAL.\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" - }, - "protocol": { - "type": "string", - "description": "The protocol this BackendService uses to communicate with backends.\nThe default is HTTP. **NOTE**: HTTP2 is only valid for beta HTTP/2 load balancer\ntypes and may result in errors if used with the GA API.\nPossible values are `HTTP`, `HTTPS`, `HTTP2`, `TCP`, `SSL`, and `GRPC`.\n" - }, - "securityPolicy": { - "type": "string", - "description": "The security policy associated with this backend service.\n" - }, - "securitySettings": { - "$ref": "#/types/gcp:compute/BackendServiceSecuritySettings:BackendServiceSecuritySettings", - "description": "The security settings that apply to this backend service. This field is applicable to either\na regional backend service with the service_protocol set to HTTP, HTTPS, or HTTP2, and\nload_balancing_scheme set to INTERNAL_MANAGED; or a global backend service with the\nload_balancing_scheme set to INTERNAL_SELF_MANAGED.\nStructure is documented below.\n" - }, - "selfLink": { - "type": "string", - "description": "The URI of the created resource.\n" - }, - "sessionAffinity": { - "type": "string", - "description": "Type of session affinity to use. The default is NONE. Session affinity is\nnot applicable if the protocol is UDP.\nPossible values are `NONE`, `CLIENT_IP`, `CLIENT_IP_PORT_PROTO`, `CLIENT_IP_PROTO`, `GENERATED_COOKIE`, `HEADER_FIELD`, and `HTTP_COOKIE`.\n" - }, - "timeoutSec": { - "type": "integer", - "description": "How many seconds to wait for the backend before considering it a\nfailed request. Default is 30 seconds. Valid range is [1, 86400].\n" - } - }, - "required": [ - "cdnPolicy", - "creationTimestamp", - "fingerprint", - "generatedId", - "logConfig", - "name", - "portName", - "project", - "protocol", - "selfLink", - "sessionAffinity", - "timeoutSec" - ], - "inputProperties": { - "affinityCookieTtlSec": { - "type": "integer", - "description": "Lifetime of cookies in seconds if session_affinity is\nGENERATED_COOKIE. If set to 0, the cookie is non-persistent and lasts\nonly until the end of the browser session (or equivalent). The\nmaximum allowed value for TTL is one day.\nWhen the load balancing scheme is INTERNAL, this field is not used.\n" - }, - "backends": { - "type": "array", - "items": { - "$ref": "#/types/gcp:compute/BackendServiceBackend:BackendServiceBackend" - }, - "description": "The set of backends that serve this BackendService.\nStructure is documented below.\n" - }, - "cdnPolicy": { - "$ref": "#/types/gcp:compute/BackendServiceCdnPolicy:BackendServiceCdnPolicy", - "description": "Cloud CDN configuration for this BackendService.\nStructure is documented below.\n" - }, - "circuitBreakers": { - "$ref": "#/types/gcp:compute/BackendServiceCircuitBreakers:BackendServiceCircuitBreakers", - "description": "Settings controlling the volume of connections to a backend service. This field\nis applicable only when the load_balancing_scheme is set to INTERNAL_SELF_MANAGED.\nStructure is documented below.\n" - }, - "compressionMode": { - "type": "string", - "description": "Compress text responses using Brotli or gzip compression, based on the client's Accept-Encoding header.\nPossible values are `AUTOMATIC` and `DISABLED`.\n" - }, - "connectionDrainingTimeoutSec": { - "type": "integer", - "description": "Time for which instance will be drained (not accept new\nconnections, but still work to finish started).\n" - }, - "consistentHash": { - "$ref": "#/types/gcp:compute/BackendServiceConsistentHash:BackendServiceConsistentHash", - "description": "Consistent Hash-based load balancing can be used to provide soft session\naffinity based on HTTP headers, cookies or other properties. This load balancing\npolicy is applicable only for HTTP connections. The affinity to a particular\ndestination host will be lost when one or more hosts are added/removed from the\ndestination service. This field specifies parameters that control consistent\nhashing. This field only applies if the load_balancing_scheme is set to\nINTERNAL_SELF_MANAGED. This field is only applicable when locality_lb_policy is\nset to MAGLEV or RING_HASH.\nStructure is documented below.\n" + "description": "Indicates whether the backend service will be used with internal or\nexternal load balancing. A backend service created for one type of\nload balancing cannot be used with the other. For more information, refer to\n[Choosing a load balancer](https://cloud.google.com/load-balancing/docs/backend-service).\nDefault value is `EXTERNAL`.\nPossible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`.\n", + "willReplaceOnChanges": true }, - "customRequestHeaders": { + "localityLbPolicies": { "type": "array", "items": { - "type": "string" + "$ref": "#/types/gcp:compute/BackendServiceLocalityLbPolicy:BackendServiceLocalityLbPolicy" }, - "description": "Headers that the HTTP/S load balancer should add to proxied\nrequests.\n" - }, - "customResponseHeaders": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Headers that the HTTP/S load balancer should add to proxied\nresponses.\n" - }, - "description": { - "type": "string", - "description": "An optional description of this resource.\n" - }, - "edgeSecurityPolicy": { - "type": "string", - "description": "The resource URL for the edge security policy associated with this backend service.\n" - }, - "enableCdn": { - "type": "boolean", - "description": "If true, enable Cloud CDN for this BackendService.\n" - }, - "healthChecks": { - "type": "string", - "description": "The set of URLs to the HttpHealthCheck or HttpsHealthCheck resource\nfor health checking this BackendService. Currently at most one health\ncheck can be specified.\nA health check must be specified unless the backend service uses an internet\nor serverless NEG as a backend.\nFor internal load balancing, a URL to a HealthCheck resource must be specified instead.\n" - }, - "iap": { - "$ref": "#/types/gcp:compute/BackendServiceIap:BackendServiceIap", - "description": "Settings for enabling Cloud Identity Aware Proxy\nStructure is documented below.\n" - }, - "loadBalancingScheme": { - "type": "string", - "description": "Indicates whether the backend service will be used with internal or\nexternal load balancing. A backend service created for one type of\nload balancing cannot be used with the other. For more information, refer to\n[Choosing a load balancer](https://cloud.google.com/load-balancing/docs/backend-service).\nDefault value is `EXTERNAL`.\nPossible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`.\n", - "willReplaceOnChanges": true + "description": "A list of locality load balancing policies to be used in order of\npreference. Either the policy or the customPolicy field should be set.\nOverrides any value set in the localityLbPolicy field.\nlocalityLbPolicies is only supported when the BackendService is referenced\nby a URL Map that is referenced by a target gRPC proxy that has the\nvalidateForProxyless field set to true.\nStructure is documented below.\n" }, "localityLbPolicy": { "type": "string", @@ -127662,6 +129088,13 @@ "description": "Indicates whether the backend service will be used with internal or\nexternal load balancing. A backend service created for one type of\nload balancing cannot be used with the other. For more information, refer to\n[Choosing a load balancer](https://cloud.google.com/load-balancing/docs/backend-service).\nDefault value is `EXTERNAL`.\nPossible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`.\n", "willReplaceOnChanges": true }, + "localityLbPolicies": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/BackendServiceLocalityLbPolicy:BackendServiceLocalityLbPolicy" + }, + "description": "A list of locality load balancing policies to be used in order of\npreference. Either the policy or the customPolicy field should be set.\nOverrides any value set in the localityLbPolicy field.\nlocalityLbPolicies is only supported when the BackendService is referenced\nby a URL Map that is referenced by a target gRPC proxy that has the\nvalidateForProxyless field set to true.\nStructure is documented below.\n" + }, "localityLbPolicy": { "type": "string", "description": "The load balancing algorithm used within the scope of the locality.\nThe possible values are:\n" @@ -127992,7 +129425,7 @@ } }, "gcp:compute/backendServiceSignedUrlKey:BackendServiceSignedUrlKey": { - "description": "A key for signing Cloud CDN signed URLs for Backend Services.\n\n\nTo get more information about BackendServiceSignedUrlKey, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendServices)\n* How-to Guides\n * [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/)\n\n\u003e **Warning:** All arguments including `key_value` will be stored in the raw\nstate as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Backend Service Signed Url Key\n\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.random.RandomId;\nimport com.pulumi.random.RandomIdArgs;\nimport com.pulumi.gcp.compute.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\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.inputs.BackendServiceBackendArgs;\nimport com.pulumi.gcp.compute.BackendServiceSignedUrlKey;\nimport com.pulumi.gcp.compute.BackendServiceSignedUrlKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var urlSignature = new RandomId(\"urlSignature\", RandomIdArgs.builder() \n .byteLength(16)\n .build());\n\n var webserver = new InstanceTemplate(\"webserver\", InstanceTemplateArgs.builder() \n .machineType(\"e2-medium\")\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(\"debian-cloud/debian-11\")\n .autoDelete(true)\n .boot(true)\n .build())\n .build());\n\n var webservers = new InstanceGroupManager(\"webservers\", InstanceGroupManagerArgs.builder() \n .versions(InstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(webserver.id())\n .name(\"primary\")\n .build())\n .baseInstanceName(\"webserver\")\n .zone(\"us-central1-f\")\n .targetSize(1)\n .build());\n\n var default_ = new HttpHealthCheck(\"default\", HttpHealthCheckArgs.builder() \n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var exampleBackend = new BackendService(\"exampleBackend\", BackendServiceArgs.builder() \n .description(\"Our company website\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .enableCdn(true)\n .backends(BackendServiceBackendArgs.builder()\n .group(webservers.instanceGroup())\n .build())\n .healthChecks(default_.id())\n .build());\n\n var backendKey = new BackendServiceSignedUrlKey(\"backendKey\", BackendServiceSignedUrlKeyArgs.builder() \n .keyValue(urlSignature.b64Url())\n .backendService(exampleBackend.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlSignature:\n type: random:RandomId\n properties:\n byteLength: 16\n backendKey:\n type: gcp:compute:BackendServiceSignedUrlKey\n properties:\n keyValue: ${urlSignature.b64Url}\n backendService: ${exampleBackend.name}\n exampleBackend:\n type: gcp:compute:BackendService\n properties:\n description: Our company website\n portName: http\n protocol: HTTP\n timeoutSec: 10\n enableCdn: true\n backends:\n - group: ${webservers.instanceGroup}\n healthChecks:\n - ${default.id}\n webservers:\n type: gcp:compute:InstanceGroupManager\n properties:\n versions:\n - instanceTemplate: ${webserver.id}\n name: primary\n baseInstanceName: webserver\n zone: us-central1-f\n targetSize: 1\n webserver:\n type: gcp:compute:InstanceTemplate\n properties:\n machineType: e2-medium\n networkInterfaces:\n - network: default\n disks:\n - sourceImage: debian-cloud/debian-11\n autoDelete: true\n boot: true\n default:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource does not support import. ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Backend Service Signed Url Key\n\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.random.RandomId;\nimport com.pulumi.random.RandomIdArgs;\nimport com.pulumi.gcp.compute.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\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.inputs.BackendServiceBackendArgs;\nimport com.pulumi.gcp.compute.BackendServiceSignedUrlKey;\nimport com.pulumi.gcp.compute.BackendServiceSignedUrlKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var urlSignature = new RandomId(\"urlSignature\", RandomIdArgs.builder() \n .byteLength(16)\n .build());\n\n var webserver = new InstanceTemplate(\"webserver\", InstanceTemplateArgs.builder() \n .machineType(\"e2-medium\")\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(\"debian-cloud/debian-11\")\n .autoDelete(true)\n .boot(true)\n .build())\n .build());\n\n var webservers = new InstanceGroupManager(\"webservers\", InstanceGroupManagerArgs.builder() \n .versions(InstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(webserver.id())\n .name(\"primary\")\n .build())\n .baseInstanceName(\"webserver\")\n .zone(\"us-central1-f\")\n .targetSize(1)\n .build());\n\n var default_ = new HttpHealthCheck(\"default\", HttpHealthCheckArgs.builder() \n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var exampleBackend = new BackendService(\"exampleBackend\", BackendServiceArgs.builder() \n .description(\"Our company website\")\n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .enableCdn(true)\n .backends(BackendServiceBackendArgs.builder()\n .group(webservers.instanceGroup())\n .build())\n .healthChecks(default_.id())\n .build());\n\n var backendKey = new BackendServiceSignedUrlKey(\"backendKey\", BackendServiceSignedUrlKeyArgs.builder() \n .keyValue(urlSignature.b64Url())\n .backendService(exampleBackend.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n urlSignature:\n type: random:RandomId\n properties:\n byteLength: 16\n backendKey:\n type: gcp:compute:BackendServiceSignedUrlKey\n properties:\n keyValue: ${urlSignature.b64Url}\n backendService: ${exampleBackend.name}\n exampleBackend:\n type: gcp:compute:BackendService\n properties:\n description: Our company website\n portName: http\n protocol: HTTP\n timeoutSec: 10\n enableCdn: true\n backends:\n - group: ${webservers.instanceGroup}\n healthChecks:\n - ${default.id}\n webservers:\n type: gcp:compute:InstanceGroupManager\n properties:\n versions:\n - instanceTemplate: ${webserver.id}\n name: primary\n baseInstanceName: webserver\n zone: us-central1-f\n targetSize: 1\n webserver:\n type: gcp:compute:InstanceTemplate\n properties:\n machineType: e2-medium\n networkInterfaces:\n - network: default\n disks:\n - sourceImage: debian-cloud/debian-11\n autoDelete: true\n boot: true\n default:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource does not support import. ", "properties": { "backendService": { "type": "string", @@ -128074,7 +129507,7 @@ } }, "gcp:compute/disk:Disk": { - "description": "Persistent disks are durable storage devices that function similarly to\nthe physical disks in a desktop or a server. Compute Engine manages the\nhardware behind these devices to ensure data redundancy and optimize\nperformance for you. Persistent disks are available as either standard\nhard disk drives (HDD) or solid-state drives (SSD).\n\nPersistent disks are located independently from your virtual machine\ninstances, so you can detach or move persistent disks to keep your data\neven after you delete your instances. Persistent disk performance scales\nautomatically with size, so you can resize your existing persistent disks\nor add more persistent disks to an instance to meet your performance and\nstorage space requirements.\n\nAdd a persistent disk to your instance when you need reliable and\naffordable storage with consistent performance characteristics.\n\n\nTo get more information about Disk, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/v1/disks)\n* How-to Guides\n * [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk)\n\n\u003e **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw\nstate as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Disk Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Disk(\"default\", {\n image: \"debian-11-bullseye-v20220719\",\n labels: {\n environment: \"dev\",\n },\n physicalBlockSizeBytes: 4096,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Disk(\"default\",\n image=\"debian-11-bullseye-v20220719\",\n labels={\n \"environment\": \"dev\",\n },\n physical_block_size_bytes=4096,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Disk(\"default\", new()\n {\n Image = \"debian-11-bullseye-v20220719\",\n Labels = \n {\n { \"environment\", \"dev\" },\n },\n PhysicalBlockSizeBytes = 4096,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewDisk(ctx, \"default\", \u0026compute.DiskArgs{\n\t\t\tImage: pulumi.String(\"debian-11-bullseye-v20220719\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"environment\": pulumi.String(\"dev\"),\n\t\t\t},\n\t\t\tPhysicalBlockSizeBytes: pulumi.Int(4096),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Disk(\"default\", DiskArgs.builder() \n .image(\"debian-11-bullseye-v20220719\")\n .labels(Map.of(\"environment\", \"dev\"))\n .physicalBlockSizeBytes(4096)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Disk\n properties:\n image: debian-11-bullseye-v20220719\n labels:\n environment: dev\n physicalBlockSizeBytes: 4096\n type: pd-ssd\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDisk can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/disk:Disk default projects/{{project}}/zones/{{zone}}/disks/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/disk:Disk default {{project}}/{{zone}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/disk:Disk default {{zone}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/disk:Disk default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Disk Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.Disk(\"default\", {\n image: \"debian-11-bullseye-v20220719\",\n labels: {\n environment: \"dev\",\n },\n physicalBlockSizeBytes: 4096,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.Disk(\"default\",\n image=\"debian-11-bullseye-v20220719\",\n labels={\n \"environment\": \"dev\",\n },\n physical_block_size_bytes=4096,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.Disk(\"default\", new()\n {\n Image = \"debian-11-bullseye-v20220719\",\n Labels = \n {\n { \"environment\", \"dev\" },\n },\n PhysicalBlockSizeBytes = 4096,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewDisk(ctx, \"default\", \u0026compute.DiskArgs{\n\t\t\tImage: pulumi.String(\"debian-11-bullseye-v20220719\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"environment\": pulumi.String(\"dev\"),\n\t\t\t},\n\t\t\tPhysicalBlockSizeBytes: pulumi.Int(4096),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Disk(\"default\", DiskArgs.builder() \n .image(\"debian-11-bullseye-v20220719\")\n .labels(Map.of(\"environment\", \"dev\"))\n .physicalBlockSizeBytes(4096)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:Disk\n properties:\n image: debian-11-bullseye-v20220719\n labels:\n environment: dev\n physicalBlockSizeBytes: 4096\n type: pd-ssd\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDisk can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/disk:Disk default projects/{{project}}/zones/{{zone}}/disks/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/disk:Disk default {{project}}/{{zone}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/disk:Disk default {{zone}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/disk:Disk default {{name}}\n```\n\n ", "properties": { "creationTimestamp": { "type": "string", @@ -128141,7 +129574,7 @@ "items": { "type": "string" }, - "description": "Resource policies applied to this disk for automatic snapshot creations.\n~\u003e**NOTE** This value does not support updating the\nresource policy, as resource policies can not be updated more than\none at a time. Use\n`gcp.compute.DiskResourcePolicyAttachment`\nto allow for updating the resource policy attached to the disk.\n" + "description": "Resource policies applied to this disk for automatic snapshot creations. ~\u003e**NOTE** This value does not support updating\nthe resource policy, as resource policies can not be updated more than one at a time. Use\n['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment)\nto allow for updating the resource policy attached to the disk.\n" }, "selfLink": { "type": "string", @@ -128149,7 +129582,7 @@ }, "size": { "type": "integer", - "description": "Size of the persistent disk, specified in GB. You can specify this\nfield when creating a persistent disk using the `image` or\n`snapshot` parameter, or specify it alone to create an empty\npersistent disk.\nIf you specify this field along with `image` or `snapshot`,\nthe value must not be less than the size of the image\nor the size of the snapshot.\n~\u003e**NOTE** If you change the size, the provider updates the disk size\nif upsizing is detected but recreates the disk if downsizing is requested.\nYou can add `lifecycle.prevent_destroy` in the config to prevent destroying\nand recreating.\n" + "description": "Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the\n'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along\nwith 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot.\n~\u003e**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if\ndownsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating.\n" }, "snapshot": { "type": "string", @@ -128272,12 +129705,12 @@ "items": { "type": "string" }, - "description": "Resource policies applied to this disk for automatic snapshot creations.\n~\u003e**NOTE** This value does not support updating the\nresource policy, as resource policies can not be updated more than\none at a time. Use\n`gcp.compute.DiskResourcePolicyAttachment`\nto allow for updating the resource policy attached to the disk.\n", + "description": "Resource policies applied to this disk for automatic snapshot creations. ~\u003e**NOTE** This value does not support updating\nthe resource policy, as resource policies can not be updated more than one at a time. Use\n['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment)\nto allow for updating the resource policy attached to the disk.\n", "willReplaceOnChanges": true }, "size": { "type": "integer", - "description": "Size of the persistent disk, specified in GB. You can specify this\nfield when creating a persistent disk using the `image` or\n`snapshot` parameter, or specify it alone to create an empty\npersistent disk.\nIf you specify this field along with `image` or `snapshot`,\nthe value must not be less than the size of the image\nor the size of the snapshot.\n~\u003e**NOTE** If you change the size, the provider updates the disk size\nif upsizing is detected but recreates the disk if downsizing is requested.\nYou can add `lifecycle.prevent_destroy` in the config to prevent destroying\nand recreating.\n" + "description": "Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the\n'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along\nwith 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot.\n~\u003e**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if\ndownsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating.\n" }, "snapshot": { "type": "string", @@ -128387,7 +129820,7 @@ "items": { "type": "string" }, - "description": "Resource policies applied to this disk for automatic snapshot creations.\n~\u003e**NOTE** This value does not support updating the\nresource policy, as resource policies can not be updated more than\none at a time. Use\n`gcp.compute.DiskResourcePolicyAttachment`\nto allow for updating the resource policy attached to the disk.\n", + "description": "Resource policies applied to this disk for automatic snapshot creations. ~\u003e**NOTE** This value does not support updating\nthe resource policy, as resource policies can not be updated more than one at a time. Use\n['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment)\nto allow for updating the resource policy attached to the disk.\n", "willReplaceOnChanges": true }, "selfLink": { @@ -128396,7 +129829,7 @@ }, "size": { "type": "integer", - "description": "Size of the persistent disk, specified in GB. You can specify this\nfield when creating a persistent disk using the `image` or\n`snapshot` parameter, or specify it alone to create an empty\npersistent disk.\nIf you specify this field along with `image` or `snapshot`,\nthe value must not be less than the size of the image\nor the size of the snapshot.\n~\u003e**NOTE** If you change the size, the provider updates the disk size\nif upsizing is detected but recreates the disk if downsizing is requested.\nYou can add `lifecycle.prevent_destroy` in the config to prevent destroying\nand recreating.\n" + "description": "Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the\n'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along\nwith 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot.\n~\u003e**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if\ndownsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating.\n" }, "snapshot": { "type": "string", @@ -128766,7 +130199,7 @@ } }, "gcp:compute/diskResourcePolicyAttachment:DiskResourcePolicyAttachment": { - "description": "Adds existing resource policies to a disk. You can only add one policy\nwhich will be applied to this disk for scheduling snapshot creation.\n\n\u003e **Note:** This resource does not support regional disks (`gcp.compute.RegionDisk`). For regional disks, please refer to the `gcp.compute.RegionDiskResourcePolicyAttachment` resource.\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Disk Resource Policy Attachment Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myImage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst ssd = new gcp.compute.Disk(\"ssd\", {\n image: myImage.then(myImage =\u003e myImage.selfLink),\n size: 50,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst attachment = new gcp.compute.DiskResourcePolicyAttachment(\"attachment\", {\n disk: ssd.name,\n zone: \"us-central1-a\",\n});\nconst policy = new gcp.compute.ResourcePolicy(\"policy\", {\n region: \"us-central1\",\n snapshotSchedulePolicy: {\n schedule: {\n dailySchedule: {\n daysInCycle: 1,\n startTime: \"04:00\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_image = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\nssd = gcp.compute.Disk(\"ssd\",\n image=my_image.self_link,\n size=50,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nattachment = gcp.compute.DiskResourcePolicyAttachment(\"attachment\",\n disk=ssd.name,\n zone=\"us-central1-a\")\npolicy = gcp.compute.ResourcePolicy(\"policy\",\n region=\"us-central1\",\n snapshot_schedule_policy=gcp.compute.ResourcePolicySnapshotSchedulePolicyArgs(\n schedule=gcp.compute.ResourcePolicySnapshotSchedulePolicyScheduleArgs(\n daily_schedule=gcp.compute.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs(\n days_in_cycle=1,\n start_time=\"04:00\",\n ),\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myImage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var ssd = new Gcp.Compute.Disk(\"ssd\", new()\n {\n Image = myImage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n Size = 50,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var attachment = new Gcp.Compute.DiskResourcePolicyAttachment(\"attachment\", new()\n {\n Disk = ssd.Name,\n Zone = \"us-central1-a\",\n });\n\n var policy = new Gcp.Compute.ResourcePolicy(\"policy\", new()\n {\n Region = \"us-central1\",\n SnapshotSchedulePolicy = new Gcp.Compute.Inputs.ResourcePolicySnapshotSchedulePolicyArgs\n {\n Schedule = new Gcp.Compute.Inputs.ResourcePolicySnapshotSchedulePolicyScheduleArgs\n {\n DailySchedule = new Gcp.Compute.Inputs.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs\n {\n DaysInCycle = 1,\n StartTime = \"04:00\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tmyImage, 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\tssd, err := compute.NewDisk(ctx, \"ssd\", \u0026compute.DiskArgs{\n\t\t\tImage: *pulumi.String(myImage.SelfLink),\n\t\t\tSize: pulumi.Int(50),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewDiskResourcePolicyAttachment(ctx, \"attachment\", \u0026compute.DiskResourcePolicyAttachmentArgs{\n\t\t\tDisk: ssd.Name,\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewResourcePolicy(ctx, \"policy\", \u0026compute.ResourcePolicyArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tSnapshotSchedulePolicy: \u0026compute.ResourcePolicySnapshotSchedulePolicyArgs{\n\t\t\t\tSchedule: \u0026compute.ResourcePolicySnapshotSchedulePolicyScheduleArgs{\n\t\t\t\t\tDailySchedule: \u0026compute.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs{\n\t\t\t\t\t\tDaysInCycle: pulumi.Int(1),\n\t\t\t\t\t\tStartTime: pulumi.String(\"04:00\"),\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.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.DiskResourcePolicyAttachment;\nimport com.pulumi.gcp.compute.DiskResourcePolicyAttachmentArgs;\nimport com.pulumi.gcp.compute.ResourcePolicy;\nimport com.pulumi.gcp.compute.ResourcePolicyArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyScheduleArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 myImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var ssd = new Disk(\"ssd\", DiskArgs.builder() \n .image(myImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .size(50)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var attachment = new DiskResourcePolicyAttachment(\"attachment\", DiskResourcePolicyAttachmentArgs.builder() \n .disk(ssd.name())\n .zone(\"us-central1-a\")\n .build());\n\n var policy = new ResourcePolicy(\"policy\", ResourcePolicyArgs.builder() \n .region(\"us-central1\")\n .snapshotSchedulePolicy(ResourcePolicySnapshotSchedulePolicyArgs.builder()\n .schedule(ResourcePolicySnapshotSchedulePolicyScheduleArgs.builder()\n .dailySchedule(ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs.builder()\n .daysInCycle(1)\n .startTime(\"04:00\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n attachment:\n type: gcp:compute:DiskResourcePolicyAttachment\n properties:\n disk: ${ssd.name}\n zone: us-central1-a\n ssd:\n type: gcp:compute:Disk\n properties:\n image: ${myImage.selfLink}\n size: 50\n type: pd-ssd\n zone: us-central1-a\n policy:\n type: gcp:compute:ResourcePolicy\n properties:\n region: us-central1\n snapshotSchedulePolicy:\n schedule:\n dailySchedule:\n daysInCycle: 1\n startTime: 04:00\nvariables:\n myImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDiskResourcePolicyAttachment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/diskResourcePolicyAttachment:DiskResourcePolicyAttachment default projects/{{project}}/zones/{{zone}}/disks/{{disk}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/diskResourcePolicyAttachment:DiskResourcePolicyAttachment default {{project}}/{{zone}}/{{disk}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/diskResourcePolicyAttachment:DiskResourcePolicyAttachment default {{zone}}/{{disk}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/diskResourcePolicyAttachment:DiskResourcePolicyAttachment default {{disk}}/{{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Disk Resource Policy Attachment Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myImage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst ssd = new gcp.compute.Disk(\"ssd\", {\n image: myImage.then(myImage =\u003e myImage.selfLink),\n size: 50,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst attachment = new gcp.compute.DiskResourcePolicyAttachment(\"attachment\", {\n disk: ssd.name,\n zone: \"us-central1-a\",\n});\nconst policy = new gcp.compute.ResourcePolicy(\"policy\", {\n region: \"us-central1\",\n snapshotSchedulePolicy: {\n schedule: {\n dailySchedule: {\n daysInCycle: 1,\n startTime: \"04:00\",\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_image = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\nssd = gcp.compute.Disk(\"ssd\",\n image=my_image.self_link,\n size=50,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nattachment = gcp.compute.DiskResourcePolicyAttachment(\"attachment\",\n disk=ssd.name,\n zone=\"us-central1-a\")\npolicy = gcp.compute.ResourcePolicy(\"policy\",\n region=\"us-central1\",\n snapshot_schedule_policy=gcp.compute.ResourcePolicySnapshotSchedulePolicyArgs(\n schedule=gcp.compute.ResourcePolicySnapshotSchedulePolicyScheduleArgs(\n daily_schedule=gcp.compute.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs(\n days_in_cycle=1,\n start_time=\"04:00\",\n ),\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myImage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var ssd = new Gcp.Compute.Disk(\"ssd\", new()\n {\n Image = myImage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n Size = 50,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var attachment = new Gcp.Compute.DiskResourcePolicyAttachment(\"attachment\", new()\n {\n Disk = ssd.Name,\n Zone = \"us-central1-a\",\n });\n\n var policy = new Gcp.Compute.ResourcePolicy(\"policy\", new()\n {\n Region = \"us-central1\",\n SnapshotSchedulePolicy = new Gcp.Compute.Inputs.ResourcePolicySnapshotSchedulePolicyArgs\n {\n Schedule = new Gcp.Compute.Inputs.ResourcePolicySnapshotSchedulePolicyScheduleArgs\n {\n DailySchedule = new Gcp.Compute.Inputs.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs\n {\n DaysInCycle = 1,\n StartTime = \"04:00\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tmyImage, 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\tssd, err := compute.NewDisk(ctx, \"ssd\", \u0026compute.DiskArgs{\n\t\t\tImage: *pulumi.String(myImage.SelfLink),\n\t\t\tSize: pulumi.Int(50),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewDiskResourcePolicyAttachment(ctx, \"attachment\", \u0026compute.DiskResourcePolicyAttachmentArgs{\n\t\t\tDisk: ssd.Name,\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewResourcePolicy(ctx, \"policy\", \u0026compute.ResourcePolicyArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tSnapshotSchedulePolicy: \u0026compute.ResourcePolicySnapshotSchedulePolicyArgs{\n\t\t\t\tSchedule: \u0026compute.ResourcePolicySnapshotSchedulePolicyScheduleArgs{\n\t\t\t\t\tDailySchedule: \u0026compute.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs{\n\t\t\t\t\t\tDaysInCycle: pulumi.Int(1),\n\t\t\t\t\t\tStartTime: pulumi.String(\"04:00\"),\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.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.DiskResourcePolicyAttachment;\nimport com.pulumi.gcp.compute.DiskResourcePolicyAttachmentArgs;\nimport com.pulumi.gcp.compute.ResourcePolicy;\nimport com.pulumi.gcp.compute.ResourcePolicyArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyScheduleArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 myImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var ssd = new Disk(\"ssd\", DiskArgs.builder() \n .image(myImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .size(50)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var attachment = new DiskResourcePolicyAttachment(\"attachment\", DiskResourcePolicyAttachmentArgs.builder() \n .disk(ssd.name())\n .zone(\"us-central1-a\")\n .build());\n\n var policy = new ResourcePolicy(\"policy\", ResourcePolicyArgs.builder() \n .region(\"us-central1\")\n .snapshotSchedulePolicy(ResourcePolicySnapshotSchedulePolicyArgs.builder()\n .schedule(ResourcePolicySnapshotSchedulePolicyScheduleArgs.builder()\n .dailySchedule(ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs.builder()\n .daysInCycle(1)\n .startTime(\"04:00\")\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n attachment:\n type: gcp:compute:DiskResourcePolicyAttachment\n properties:\n disk: ${ssd.name}\n zone: us-central1-a\n ssd:\n type: gcp:compute:Disk\n properties:\n image: ${myImage.selfLink}\n size: 50\n type: pd-ssd\n zone: us-central1-a\n policy:\n type: gcp:compute:ResourcePolicy\n properties:\n region: us-central1\n snapshotSchedulePolicy:\n schedule:\n dailySchedule:\n daysInCycle: 1\n startTime: 04:00\nvariables:\n myImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDiskResourcePolicyAttachment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/diskResourcePolicyAttachment:DiskResourcePolicyAttachment default projects/{{project}}/zones/{{zone}}/disks/{{disk}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/diskResourcePolicyAttachment:DiskResourcePolicyAttachment default {{project}}/{{zone}}/{{disk}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/diskResourcePolicyAttachment:DiskResourcePolicyAttachment default {{zone}}/{{disk}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/diskResourcePolicyAttachment:DiskResourcePolicyAttachment default {{disk}}/{{name}}\n```\n\n ", "properties": { "disk": { "type": "string", @@ -128844,7 +130277,7 @@ } }, "gcp:compute/externalVpnGateway:ExternalVpnGateway": { - "description": "Represents a VPN gateway managed outside of GCP.\n\nTo get more information about ExternalVpnGateway, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/externalVpnGateways)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### External Vpn Gateway\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n routingMode: \"GLOBAL\",\n autoCreateSubnetworks: false,\n});\nconst haGateway = new gcp.compute.HaVpnGateway(\"haGateway\", {\n region: \"us-central1\",\n network: network.id,\n});\nconst externalGateway = new gcp.compute.ExternalVpnGateway(\"externalGateway\", {\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 networkSubnet1 = new gcp.compute.Subnetwork(\"networkSubnet1\", {\n ipCidrRange: \"10.0.1.0/24\",\n region: \"us-central1\",\n network: network.id,\n});\nconst networkSubnet2 = new gcp.compute.Subnetwork(\"networkSubnet2\", {\n ipCidrRange: \"10.0.2.0/24\",\n region: \"us-west1\",\n network: network.id,\n});\nconst router1 = new gcp.compute.Router(\"router1\", {\n network: network.name,\n bgp: {\n asn: 64514,\n },\n});\nconst tunnel1 = new gcp.compute.VPNTunnel(\"tunnel1\", {\n region: \"us-central1\",\n vpnGateway: haGateway.id,\n peerExternalGateway: externalGateway.id,\n peerExternalGatewayInterface: 0,\n sharedSecret: \"a secret message\",\n router: router1.id,\n vpnGatewayInterface: 0,\n});\nconst tunnel2 = new gcp.compute.VPNTunnel(\"tunnel2\", {\n region: \"us-central1\",\n vpnGateway: haGateway.id,\n peerExternalGateway: externalGateway.id,\n peerExternalGatewayInterface: 0,\n sharedSecret: \"a secret message\",\n router: pulumi.interpolate` ${router1.id}`,\n vpnGatewayInterface: 1,\n});\nconst router1Interface1 = new gcp.compute.RouterInterface(\"router1Interface1\", {\n router: router1.name,\n region: \"us-central1\",\n ipRange: \"169.254.0.1/30\",\n vpnTunnel: tunnel1.name,\n});\nconst router1Peer1 = new gcp.compute.RouterPeer(\"router1Peer1\", {\n router: router1.name,\n region: \"us-central1\",\n peerIpAddress: \"169.254.0.2\",\n peerAsn: 64515,\n advertisedRoutePriority: 100,\n \"interface\": router1Interface1.name,\n});\nconst router1Interface2 = new gcp.compute.RouterInterface(\"router1Interface2\", {\n router: router1.name,\n region: \"us-central1\",\n ipRange: \"169.254.1.1/30\",\n vpnTunnel: tunnel2.name,\n});\nconst router1Peer2 = new gcp.compute.RouterPeer(\"router1Peer2\", {\n router: router1.name,\n region: \"us-central1\",\n peerIpAddress: \"169.254.1.2\",\n peerAsn: 64515,\n advertisedRoutePriority: 100,\n \"interface\": router1Interface2.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n routing_mode=\"GLOBAL\",\n auto_create_subnetworks=False)\nha_gateway = gcp.compute.HaVpnGateway(\"haGateway\",\n region=\"us-central1\",\n network=network.id)\nexternal_gateway = gcp.compute.ExternalVpnGateway(\"externalGateway\",\n redundancy_type=\"SINGLE_IP_INTERNALLY_REDUNDANT\",\n description=\"An externally managed VPN gateway\",\n interfaces=[gcp.compute.ExternalVpnGatewayInterfaceArgs(\n id=0,\n ip_address=\"8.8.8.8\",\n )])\nnetwork_subnet1 = gcp.compute.Subnetwork(\"networkSubnet1\",\n ip_cidr_range=\"10.0.1.0/24\",\n region=\"us-central1\",\n network=network.id)\nnetwork_subnet2 = gcp.compute.Subnetwork(\"networkSubnet2\",\n ip_cidr_range=\"10.0.2.0/24\",\n region=\"us-west1\",\n network=network.id)\nrouter1 = gcp.compute.Router(\"router1\",\n network=network.name,\n bgp=gcp.compute.RouterBgpArgs(\n asn=64514,\n ))\ntunnel1 = gcp.compute.VPNTunnel(\"tunnel1\",\n region=\"us-central1\",\n vpn_gateway=ha_gateway.id,\n peer_external_gateway=external_gateway.id,\n peer_external_gateway_interface=0,\n shared_secret=\"a secret message\",\n router=router1.id,\n vpn_gateway_interface=0)\ntunnel2 = gcp.compute.VPNTunnel(\"tunnel2\",\n region=\"us-central1\",\n vpn_gateway=ha_gateway.id,\n peer_external_gateway=external_gateway.id,\n peer_external_gateway_interface=0,\n shared_secret=\"a secret message\",\n router=router1.id.apply(lambda id: f\" {id}\"),\n vpn_gateway_interface=1)\nrouter1_interface1 = gcp.compute.RouterInterface(\"router1Interface1\",\n router=router1.name,\n region=\"us-central1\",\n ip_range=\"169.254.0.1/30\",\n vpn_tunnel=tunnel1.name)\nrouter1_peer1 = gcp.compute.RouterPeer(\"router1Peer1\",\n router=router1.name,\n region=\"us-central1\",\n peer_ip_address=\"169.254.0.2\",\n peer_asn=64515,\n advertised_route_priority=100,\n interface=router1_interface1.name)\nrouter1_interface2 = gcp.compute.RouterInterface(\"router1Interface2\",\n router=router1.name,\n region=\"us-central1\",\n ip_range=\"169.254.1.1/30\",\n vpn_tunnel=tunnel2.name)\nrouter1_peer2 = gcp.compute.RouterPeer(\"router1Peer2\",\n router=router1.name,\n region=\"us-central1\",\n peer_ip_address=\"169.254.1.2\",\n peer_asn=64515,\n advertised_route_priority=100,\n interface=router1_interface2.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n RoutingMode = \"GLOBAL\",\n AutoCreateSubnetworks = false,\n });\n\n var haGateway = new Gcp.Compute.HaVpnGateway(\"haGateway\", new()\n {\n Region = \"us-central1\",\n Network = network.Id,\n });\n\n var externalGateway = new Gcp.Compute.ExternalVpnGateway(\"externalGateway\", new()\n {\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 networkSubnet1 = new Gcp.Compute.Subnetwork(\"networkSubnet1\", new()\n {\n IpCidrRange = \"10.0.1.0/24\",\n Region = \"us-central1\",\n Network = network.Id,\n });\n\n var networkSubnet2 = new Gcp.Compute.Subnetwork(\"networkSubnet2\", new()\n {\n IpCidrRange = \"10.0.2.0/24\",\n Region = \"us-west1\",\n Network = network.Id,\n });\n\n var router1 = new Gcp.Compute.Router(\"router1\", new()\n {\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 Region = \"us-central1\",\n VpnGateway = haGateway.Id,\n PeerExternalGateway = externalGateway.Id,\n PeerExternalGatewayInterface = 0,\n SharedSecret = \"a secret message\",\n Router = router1.Id,\n VpnGatewayInterface = 0,\n });\n\n var tunnel2 = new Gcp.Compute.VPNTunnel(\"tunnel2\", new()\n {\n Region = \"us-central1\",\n VpnGateway = haGateway.Id,\n PeerExternalGateway = externalGateway.Id,\n PeerExternalGatewayInterface = 0,\n SharedSecret = \"a secret message\",\n Router = router1.Id.Apply(id =\u003e $\" {id}\"),\n VpnGatewayInterface = 1,\n });\n\n var router1Interface1 = new Gcp.Compute.RouterInterface(\"router1Interface1\", new()\n {\n Router = router1.Name,\n Region = \"us-central1\",\n IpRange = \"169.254.0.1/30\",\n VpnTunnel = tunnel1.Name,\n });\n\n var router1Peer1 = new Gcp.Compute.RouterPeer(\"router1Peer1\", new()\n {\n Router = router1.Name,\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.0.2\",\n PeerAsn = 64515,\n AdvertisedRoutePriority = 100,\n Interface = router1Interface1.Name,\n });\n\n var router1Interface2 = new Gcp.Compute.RouterInterface(\"router1Interface2\", new()\n {\n Router = router1.Name,\n Region = \"us-central1\",\n IpRange = \"169.254.1.1/30\",\n VpnTunnel = tunnel2.Name,\n });\n\n var router1Peer2 = new Gcp.Compute.RouterPeer(\"router1Peer2\", new()\n {\n Router = router1.Name,\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.1.2\",\n PeerAsn = 64515,\n AdvertisedRoutePriority = 100,\n Interface = router1Interface2.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tRoutingMode: pulumi.String(\"GLOBAL\"),\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\thaGateway, err := compute.NewHaVpnGateway(ctx, \"haGateway\", \u0026compute.HaVpnGatewayArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texternalGateway, err := compute.NewExternalVpnGateway(ctx, \"externalGateway\", \u0026compute.ExternalVpnGatewayArgs{\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\t_, err = compute.NewSubnetwork(ctx, \"networkSubnet1\", \u0026compute.SubnetworkArgs{\n\t\t\tIpCidrRange: pulumi.String(\"10.0.1.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSubnetwork(ctx, \"networkSubnet2\", \u0026compute.SubnetworkArgs{\n\t\t\tIpCidrRange: pulumi.String(\"10.0.2.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter1, err := compute.NewRouter(ctx, \"router1\", \u0026compute.RouterArgs{\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\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tVpnGateway: haGateway.ID(),\n\t\t\tPeerExternalGateway: externalGateway.ID(),\n\t\t\tPeerExternalGatewayInterface: pulumi.Int(0),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tRouter: router1.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\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tVpnGateway: haGateway.ID(),\n\t\t\tPeerExternalGateway: externalGateway.ID(),\n\t\t\tPeerExternalGatewayInterface: pulumi.Int(0),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tRouter: router1.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\trouter1Interface1, err := compute.NewRouterInterface(ctx, \"router1Interface1\", \u0026compute.RouterInterfaceArgs{\n\t\t\tRouter: router1.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, \"router1Peer1\", \u0026compute.RouterPeerArgs{\n\t\t\tRouter: router1.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: router1Interface1.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter1Interface2, err := compute.NewRouterInterface(ctx, \"router1Interface2\", \u0026compute.RouterInterfaceArgs{\n\t\t\tRouter: router1.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, \"router1Peer2\", \u0026compute.RouterPeerArgs{\n\t\t\tRouter: router1.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: router1Interface2.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.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.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .routingMode(\"GLOBAL\")\n .autoCreateSubnetworks(false)\n .build());\n\n var haGateway = new HaVpnGateway(\"haGateway\", HaVpnGatewayArgs.builder() \n .region(\"us-central1\")\n .network(network.id())\n .build());\n\n var externalGateway = new ExternalVpnGateway(\"externalGateway\", ExternalVpnGatewayArgs.builder() \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 networkSubnet1 = new Subnetwork(\"networkSubnet1\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.1.0/24\")\n .region(\"us-central1\")\n .network(network.id())\n .build());\n\n var networkSubnet2 = new Subnetwork(\"networkSubnet2\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.2.0/24\")\n .region(\"us-west1\")\n .network(network.id())\n .build());\n\n var router1 = new Router(\"router1\", RouterArgs.builder() \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 .region(\"us-central1\")\n .vpnGateway(haGateway.id())\n .peerExternalGateway(externalGateway.id())\n .peerExternalGatewayInterface(0)\n .sharedSecret(\"a secret message\")\n .router(router1.id())\n .vpnGatewayInterface(0)\n .build());\n\n var tunnel2 = new VPNTunnel(\"tunnel2\", VPNTunnelArgs.builder() \n .region(\"us-central1\")\n .vpnGateway(haGateway.id())\n .peerExternalGateway(externalGateway.id())\n .peerExternalGatewayInterface(0)\n .sharedSecret(\"a secret message\")\n .router(router1.id().applyValue(id -\u003e String.format(\" %s\", id)))\n .vpnGatewayInterface(1)\n .build());\n\n var router1Interface1 = new RouterInterface(\"router1Interface1\", RouterInterfaceArgs.builder() \n .router(router1.name())\n .region(\"us-central1\")\n .ipRange(\"169.254.0.1/30\")\n .vpnTunnel(tunnel1.name())\n .build());\n\n var router1Peer1 = new RouterPeer(\"router1Peer1\", RouterPeerArgs.builder() \n .router(router1.name())\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.0.2\")\n .peerAsn(64515)\n .advertisedRoutePriority(100)\n .interface_(router1Interface1.name())\n .build());\n\n var router1Interface2 = new RouterInterface(\"router1Interface2\", RouterInterfaceArgs.builder() \n .router(router1.name())\n .region(\"us-central1\")\n .ipRange(\"169.254.1.1/30\")\n .vpnTunnel(tunnel2.name())\n .build());\n\n var router1Peer2 = new RouterPeer(\"router1Peer2\", RouterPeerArgs.builder() \n .router(router1.name())\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.1.2\")\n .peerAsn(64515)\n .advertisedRoutePriority(100)\n .interface_(router1Interface2.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n haGateway:\n type: gcp:compute:HaVpnGateway\n properties:\n region: us-central1\n network: ${network.id}\n externalGateway:\n type: gcp:compute:ExternalVpnGateway\n properties:\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 network:\n type: gcp:compute:Network\n properties:\n routingMode: GLOBAL\n autoCreateSubnetworks: false\n networkSubnet1:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.1.0/24\n region: us-central1\n network: ${network.id}\n networkSubnet2:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.2.0/24\n region: us-west1\n network: ${network.id}\n router1:\n type: gcp:compute:Router\n properties:\n network: ${network.name}\n bgp:\n asn: 64514\n tunnel1:\n type: gcp:compute:VPNTunnel\n properties:\n region: us-central1\n vpnGateway: ${haGateway.id}\n peerExternalGateway: ${externalGateway.id}\n peerExternalGatewayInterface: 0\n sharedSecret: a secret message\n router: ${router1.id}\n vpnGatewayInterface: 0\n tunnel2:\n type: gcp:compute:VPNTunnel\n properties:\n region: us-central1\n vpnGateway: ${haGateway.id}\n peerExternalGateway: ${externalGateway.id}\n peerExternalGatewayInterface: 0\n sharedSecret: a secret message\n router: ' ${router1.id}'\n vpnGatewayInterface: 1\n router1Interface1:\n type: gcp:compute:RouterInterface\n properties:\n router: ${router1.name}\n region: us-central1\n ipRange: 169.254.0.1/30\n vpnTunnel: ${tunnel1.name}\n router1Peer1:\n type: gcp:compute:RouterPeer\n properties:\n router: ${router1.name}\n region: us-central1\n peerIpAddress: 169.254.0.2\n peerAsn: 64515\n advertisedRoutePriority: 100\n interface: ${router1Interface1.name}\n router1Interface2:\n type: gcp:compute:RouterInterface\n properties:\n router: ${router1.name}\n region: us-central1\n ipRange: 169.254.1.1/30\n vpnTunnel: ${tunnel2.name}\n router1Peer2:\n type: gcp:compute:RouterPeer\n properties:\n router: ${router1.name}\n region: us-central1\n peerIpAddress: 169.254.1.2\n peerAsn: 64515\n advertisedRoutePriority: 100\n interface: ${router1Interface2.name}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nExternalVpnGateway can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/externalVpnGateway:ExternalVpnGateway default projects/{{project}}/global/externalVpnGateways/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/externalVpnGateway:ExternalVpnGateway default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/externalVpnGateway:ExternalVpnGateway default {{name}}\n```\n\n ", + "description": "Represents a VPN gateway managed outside of GCP.\n\n\nTo get more information about ExternalVpnGateway, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/externalVpnGateways)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### External Vpn Gateway\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n routingMode: \"GLOBAL\",\n autoCreateSubnetworks: false,\n});\nconst haGateway = new gcp.compute.HaVpnGateway(\"haGateway\", {\n region: \"us-central1\",\n network: network.id,\n});\nconst externalGateway = new gcp.compute.ExternalVpnGateway(\"externalGateway\", {\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 networkSubnet1 = new gcp.compute.Subnetwork(\"networkSubnet1\", {\n ipCidrRange: \"10.0.1.0/24\",\n region: \"us-central1\",\n network: network.id,\n});\nconst networkSubnet2 = new gcp.compute.Subnetwork(\"networkSubnet2\", {\n ipCidrRange: \"10.0.2.0/24\",\n region: \"us-west1\",\n network: network.id,\n});\nconst router1 = new gcp.compute.Router(\"router1\", {\n network: network.name,\n bgp: {\n asn: 64514,\n },\n});\nconst tunnel1 = new gcp.compute.VPNTunnel(\"tunnel1\", {\n region: \"us-central1\",\n vpnGateway: haGateway.id,\n peerExternalGateway: externalGateway.id,\n peerExternalGatewayInterface: 0,\n sharedSecret: \"a secret message\",\n router: router1.id,\n vpnGatewayInterface: 0,\n});\nconst tunnel2 = new gcp.compute.VPNTunnel(\"tunnel2\", {\n region: \"us-central1\",\n vpnGateway: haGateway.id,\n peerExternalGateway: externalGateway.id,\n peerExternalGatewayInterface: 0,\n sharedSecret: \"a secret message\",\n router: pulumi.interpolate` ${router1.id}`,\n vpnGatewayInterface: 1,\n});\nconst router1Interface1 = new gcp.compute.RouterInterface(\"router1Interface1\", {\n router: router1.name,\n region: \"us-central1\",\n ipRange: \"169.254.0.1/30\",\n vpnTunnel: tunnel1.name,\n});\nconst router1Peer1 = new gcp.compute.RouterPeer(\"router1Peer1\", {\n router: router1.name,\n region: \"us-central1\",\n peerIpAddress: \"169.254.0.2\",\n peerAsn: 64515,\n advertisedRoutePriority: 100,\n \"interface\": router1Interface1.name,\n});\nconst router1Interface2 = new gcp.compute.RouterInterface(\"router1Interface2\", {\n router: router1.name,\n region: \"us-central1\",\n ipRange: \"169.254.1.1/30\",\n vpnTunnel: tunnel2.name,\n});\nconst router1Peer2 = new gcp.compute.RouterPeer(\"router1Peer2\", {\n router: router1.name,\n region: \"us-central1\",\n peerIpAddress: \"169.254.1.2\",\n peerAsn: 64515,\n advertisedRoutePriority: 100,\n \"interface\": router1Interface2.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n routing_mode=\"GLOBAL\",\n auto_create_subnetworks=False)\nha_gateway = gcp.compute.HaVpnGateway(\"haGateway\",\n region=\"us-central1\",\n network=network.id)\nexternal_gateway = gcp.compute.ExternalVpnGateway(\"externalGateway\",\n redundancy_type=\"SINGLE_IP_INTERNALLY_REDUNDANT\",\n description=\"An externally managed VPN gateway\",\n interfaces=[gcp.compute.ExternalVpnGatewayInterfaceArgs(\n id=0,\n ip_address=\"8.8.8.8\",\n )])\nnetwork_subnet1 = gcp.compute.Subnetwork(\"networkSubnet1\",\n ip_cidr_range=\"10.0.1.0/24\",\n region=\"us-central1\",\n network=network.id)\nnetwork_subnet2 = gcp.compute.Subnetwork(\"networkSubnet2\",\n ip_cidr_range=\"10.0.2.0/24\",\n region=\"us-west1\",\n network=network.id)\nrouter1 = gcp.compute.Router(\"router1\",\n network=network.name,\n bgp=gcp.compute.RouterBgpArgs(\n asn=64514,\n ))\ntunnel1 = gcp.compute.VPNTunnel(\"tunnel1\",\n region=\"us-central1\",\n vpn_gateway=ha_gateway.id,\n peer_external_gateway=external_gateway.id,\n peer_external_gateway_interface=0,\n shared_secret=\"a secret message\",\n router=router1.id,\n vpn_gateway_interface=0)\ntunnel2 = gcp.compute.VPNTunnel(\"tunnel2\",\n region=\"us-central1\",\n vpn_gateway=ha_gateway.id,\n peer_external_gateway=external_gateway.id,\n peer_external_gateway_interface=0,\n shared_secret=\"a secret message\",\n router=router1.id.apply(lambda id: f\" {id}\"),\n vpn_gateway_interface=1)\nrouter1_interface1 = gcp.compute.RouterInterface(\"router1Interface1\",\n router=router1.name,\n region=\"us-central1\",\n ip_range=\"169.254.0.1/30\",\n vpn_tunnel=tunnel1.name)\nrouter1_peer1 = gcp.compute.RouterPeer(\"router1Peer1\",\n router=router1.name,\n region=\"us-central1\",\n peer_ip_address=\"169.254.0.2\",\n peer_asn=64515,\n advertised_route_priority=100,\n interface=router1_interface1.name)\nrouter1_interface2 = gcp.compute.RouterInterface(\"router1Interface2\",\n router=router1.name,\n region=\"us-central1\",\n ip_range=\"169.254.1.1/30\",\n vpn_tunnel=tunnel2.name)\nrouter1_peer2 = gcp.compute.RouterPeer(\"router1Peer2\",\n router=router1.name,\n region=\"us-central1\",\n peer_ip_address=\"169.254.1.2\",\n peer_asn=64515,\n advertised_route_priority=100,\n interface=router1_interface2.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n RoutingMode = \"GLOBAL\",\n AutoCreateSubnetworks = false,\n });\n\n var haGateway = new Gcp.Compute.HaVpnGateway(\"haGateway\", new()\n {\n Region = \"us-central1\",\n Network = network.Id,\n });\n\n var externalGateway = new Gcp.Compute.ExternalVpnGateway(\"externalGateway\", new()\n {\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 networkSubnet1 = new Gcp.Compute.Subnetwork(\"networkSubnet1\", new()\n {\n IpCidrRange = \"10.0.1.0/24\",\n Region = \"us-central1\",\n Network = network.Id,\n });\n\n var networkSubnet2 = new Gcp.Compute.Subnetwork(\"networkSubnet2\", new()\n {\n IpCidrRange = \"10.0.2.0/24\",\n Region = \"us-west1\",\n Network = network.Id,\n });\n\n var router1 = new Gcp.Compute.Router(\"router1\", new()\n {\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 Region = \"us-central1\",\n VpnGateway = haGateway.Id,\n PeerExternalGateway = externalGateway.Id,\n PeerExternalGatewayInterface = 0,\n SharedSecret = \"a secret message\",\n Router = router1.Id,\n VpnGatewayInterface = 0,\n });\n\n var tunnel2 = new Gcp.Compute.VPNTunnel(\"tunnel2\", new()\n {\n Region = \"us-central1\",\n VpnGateway = haGateway.Id,\n PeerExternalGateway = externalGateway.Id,\n PeerExternalGatewayInterface = 0,\n SharedSecret = \"a secret message\",\n Router = router1.Id.Apply(id =\u003e $\" {id}\"),\n VpnGatewayInterface = 1,\n });\n\n var router1Interface1 = new Gcp.Compute.RouterInterface(\"router1Interface1\", new()\n {\n Router = router1.Name,\n Region = \"us-central1\",\n IpRange = \"169.254.0.1/30\",\n VpnTunnel = tunnel1.Name,\n });\n\n var router1Peer1 = new Gcp.Compute.RouterPeer(\"router1Peer1\", new()\n {\n Router = router1.Name,\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.0.2\",\n PeerAsn = 64515,\n AdvertisedRoutePriority = 100,\n Interface = router1Interface1.Name,\n });\n\n var router1Interface2 = new Gcp.Compute.RouterInterface(\"router1Interface2\", new()\n {\n Router = router1.Name,\n Region = \"us-central1\",\n IpRange = \"169.254.1.1/30\",\n VpnTunnel = tunnel2.Name,\n });\n\n var router1Peer2 = new Gcp.Compute.RouterPeer(\"router1Peer2\", new()\n {\n Router = router1.Name,\n Region = \"us-central1\",\n PeerIpAddress = \"169.254.1.2\",\n PeerAsn = 64515,\n AdvertisedRoutePriority = 100,\n Interface = router1Interface2.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tRoutingMode: pulumi.String(\"GLOBAL\"),\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\thaGateway, err := compute.NewHaVpnGateway(ctx, \"haGateway\", \u0026compute.HaVpnGatewayArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texternalGateway, err := compute.NewExternalVpnGateway(ctx, \"externalGateway\", \u0026compute.ExternalVpnGatewayArgs{\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\t_, err = compute.NewSubnetwork(ctx, \"networkSubnet1\", \u0026compute.SubnetworkArgs{\n\t\t\tIpCidrRange: pulumi.String(\"10.0.1.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSubnetwork(ctx, \"networkSubnet2\", \u0026compute.SubnetworkArgs{\n\t\t\tIpCidrRange: pulumi.String(\"10.0.2.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-west1\"),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter1, err := compute.NewRouter(ctx, \"router1\", \u0026compute.RouterArgs{\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\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tVpnGateway: haGateway.ID(),\n\t\t\tPeerExternalGateway: externalGateway.ID(),\n\t\t\tPeerExternalGatewayInterface: pulumi.Int(0),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tRouter: router1.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\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tVpnGateway: haGateway.ID(),\n\t\t\tPeerExternalGateway: externalGateway.ID(),\n\t\t\tPeerExternalGatewayInterface: pulumi.Int(0),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tRouter: router1.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\trouter1Interface1, err := compute.NewRouterInterface(ctx, \"router1Interface1\", \u0026compute.RouterInterfaceArgs{\n\t\t\tRouter: router1.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, \"router1Peer1\", \u0026compute.RouterPeerArgs{\n\t\t\tRouter: router1.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: router1Interface1.Name,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trouter1Interface2, err := compute.NewRouterInterface(ctx, \"router1Interface2\", \u0026compute.RouterInterfaceArgs{\n\t\t\tRouter: router1.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, \"router1Peer2\", \u0026compute.RouterPeerArgs{\n\t\t\tRouter: router1.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: router1Interface2.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.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.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .routingMode(\"GLOBAL\")\n .autoCreateSubnetworks(false)\n .build());\n\n var haGateway = new HaVpnGateway(\"haGateway\", HaVpnGatewayArgs.builder() \n .region(\"us-central1\")\n .network(network.id())\n .build());\n\n var externalGateway = new ExternalVpnGateway(\"externalGateway\", ExternalVpnGatewayArgs.builder() \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 networkSubnet1 = new Subnetwork(\"networkSubnet1\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.1.0/24\")\n .region(\"us-central1\")\n .network(network.id())\n .build());\n\n var networkSubnet2 = new Subnetwork(\"networkSubnet2\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.2.0/24\")\n .region(\"us-west1\")\n .network(network.id())\n .build());\n\n var router1 = new Router(\"router1\", RouterArgs.builder() \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 .region(\"us-central1\")\n .vpnGateway(haGateway.id())\n .peerExternalGateway(externalGateway.id())\n .peerExternalGatewayInterface(0)\n .sharedSecret(\"a secret message\")\n .router(router1.id())\n .vpnGatewayInterface(0)\n .build());\n\n var tunnel2 = new VPNTunnel(\"tunnel2\", VPNTunnelArgs.builder() \n .region(\"us-central1\")\n .vpnGateway(haGateway.id())\n .peerExternalGateway(externalGateway.id())\n .peerExternalGatewayInterface(0)\n .sharedSecret(\"a secret message\")\n .router(router1.id().applyValue(id -\u003e String.format(\" %s\", id)))\n .vpnGatewayInterface(1)\n .build());\n\n var router1Interface1 = new RouterInterface(\"router1Interface1\", RouterInterfaceArgs.builder() \n .router(router1.name())\n .region(\"us-central1\")\n .ipRange(\"169.254.0.1/30\")\n .vpnTunnel(tunnel1.name())\n .build());\n\n var router1Peer1 = new RouterPeer(\"router1Peer1\", RouterPeerArgs.builder() \n .router(router1.name())\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.0.2\")\n .peerAsn(64515)\n .advertisedRoutePriority(100)\n .interface_(router1Interface1.name())\n .build());\n\n var router1Interface2 = new RouterInterface(\"router1Interface2\", RouterInterfaceArgs.builder() \n .router(router1.name())\n .region(\"us-central1\")\n .ipRange(\"169.254.1.1/30\")\n .vpnTunnel(tunnel2.name())\n .build());\n\n var router1Peer2 = new RouterPeer(\"router1Peer2\", RouterPeerArgs.builder() \n .router(router1.name())\n .region(\"us-central1\")\n .peerIpAddress(\"169.254.1.2\")\n .peerAsn(64515)\n .advertisedRoutePriority(100)\n .interface_(router1Interface2.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n haGateway:\n type: gcp:compute:HaVpnGateway\n properties:\n region: us-central1\n network: ${network.id}\n externalGateway:\n type: gcp:compute:ExternalVpnGateway\n properties:\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 network:\n type: gcp:compute:Network\n properties:\n routingMode: GLOBAL\n autoCreateSubnetworks: false\n networkSubnet1:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.1.0/24\n region: us-central1\n network: ${network.id}\n networkSubnet2:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.2.0/24\n region: us-west1\n network: ${network.id}\n router1:\n type: gcp:compute:Router\n properties:\n network: ${network.name}\n bgp:\n asn: 64514\n tunnel1:\n type: gcp:compute:VPNTunnel\n properties:\n region: us-central1\n vpnGateway: ${haGateway.id}\n peerExternalGateway: ${externalGateway.id}\n peerExternalGatewayInterface: 0\n sharedSecret: a secret message\n router: ${router1.id}\n vpnGatewayInterface: 0\n tunnel2:\n type: gcp:compute:VPNTunnel\n properties:\n region: us-central1\n vpnGateway: ${haGateway.id}\n peerExternalGateway: ${externalGateway.id}\n peerExternalGatewayInterface: 0\n sharedSecret: a secret message\n router: ' ${router1.id}'\n vpnGatewayInterface: 1\n router1Interface1:\n type: gcp:compute:RouterInterface\n properties:\n router: ${router1.name}\n region: us-central1\n ipRange: 169.254.0.1/30\n vpnTunnel: ${tunnel1.name}\n router1Peer1:\n type: gcp:compute:RouterPeer\n properties:\n router: ${router1.name}\n region: us-central1\n peerIpAddress: 169.254.0.2\n peerAsn: 64515\n advertisedRoutePriority: 100\n interface: ${router1Interface1.name}\n router1Interface2:\n type: gcp:compute:RouterInterface\n properties:\n router: ${router1.name}\n region: us-central1\n ipRange: 169.254.1.1/30\n vpnTunnel: ${tunnel2.name}\n router1Peer2:\n type: gcp:compute:RouterPeer\n properties:\n router: ${router1.name}\n region: us-central1\n peerIpAddress: 169.254.1.2\n peerAsn: 64515\n advertisedRoutePriority: 100\n interface: ${router1Interface2.name}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nExternalVpnGateway can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/externalVpnGateway:ExternalVpnGateway default projects/{{project}}/global/externalVpnGateways/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/externalVpnGateway:ExternalVpnGateway default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/externalVpnGateway:ExternalVpnGateway default {{name}}\n```\n\n ", "properties": { "description": { "type": "string", @@ -129703,7 +131136,7 @@ "additionalProperties": { "type": "string" }, - "description": "Labels to apply to this forwarding rule. A list of key-\u003evalue pairs.\n" + "description": "Labels to apply to this rule.\n" }, "loadBalancingScheme": { "type": "string", @@ -129833,7 +131266,7 @@ "additionalProperties": { "type": "string" }, - "description": "Labels to apply to this forwarding rule. A list of key-\u003evalue pairs.\n" + "description": "Labels to apply to this rule.\n" }, "loadBalancingScheme": { "type": "string", @@ -129951,7 +131384,7 @@ "additionalProperties": { "type": "string" }, - "description": "Labels to apply to this forwarding rule. A list of key-\u003evalue pairs.\n" + "description": "Labels to apply to this rule.\n" }, "loadBalancingScheme": { "type": "string", @@ -130039,7 +131472,7 @@ } }, "gcp:compute/globalAddress:GlobalAddress": { - "description": "Represents a Global Address resource. Global addresses are used for\nHTTP(S) load balancing.\n\n\nTo get more information about GlobalAddress, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/v1/globalAddresses)\n* How-to Guides\n * [Reserving a Static External IP Address](https://cloud.google.com/compute/docs/ip-addresses/reserve-static-external-ip-address)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Global Address Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.GlobalAddress(\"default\", {});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.GlobalAddress(\"default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.GlobalAddress(\"default\");\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewGlobalAddress(ctx, \"default\", 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.compute.GlobalAddress;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 GlobalAddress(\"default\");\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:GlobalAddress\n```\n{{% /example %}}\n{{% example %}}\n### Global Address Private Services Connect\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {autoCreateSubnetworks: false}, {\n provider: google_beta,\n});\nconst _default = new gcp.compute.GlobalAddress(\"default\", {\n addressType: \"INTERNAL\",\n purpose: \"PRIVATE_SERVICE_CONNECT\",\n network: network.id,\n address: \"100.100.100.105\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\", auto_create_subnetworks=False,\nopts=pulumi.ResourceOptions(provider=google_beta))\ndefault = gcp.compute.GlobalAddress(\"default\",\n address_type=\"INTERNAL\",\n purpose=\"PRIVATE_SERVICE_CONNECT\",\n network=network.id,\n address=\"100.100.100.105\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n AutoCreateSubnetworks = false,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var @default = new Gcp.Compute.GlobalAddress(\"default\", new()\n {\n AddressType = \"INTERNAL\",\n Purpose = \"PRIVATE_SERVICE_CONNECT\",\n Network = network.Id,\n Address = \"100.100.100.105\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewGlobalAddress(ctx, \"default\", \u0026compute.GlobalAddressArgs{\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"PRIVATE_SERVICE_CONNECT\"),\n\t\t\tNetwork: network.ID(),\n\t\t\tAddress: pulumi.String(\"100.100.100.105\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.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 .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var default_ = new GlobalAddress(\"default\", GlobalAddressArgs.builder() \n .addressType(\"INTERNAL\")\n .purpose(\"PRIVATE_SERVICE_CONNECT\")\n .network(network.id())\n .address(\"100.100.100.105\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:GlobalAddress\n properties:\n addressType: INTERNAL\n purpose: PRIVATE_SERVICE_CONNECT\n network: ${network.id}\n address: 100.100.100.105\n options:\n provider: ${[\"google-beta\"]}\n network:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGlobalAddress can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/globalAddress:GlobalAddress default projects/{{project}}/global/addresses/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/globalAddress:GlobalAddress default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/globalAddress:GlobalAddress default {{name}}\n```\n\n ", + "description": "Represents a Global Address resource. Global addresses are used for\nHTTP(S) load balancing.\n\n\nTo get more information about GlobalAddress, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/v1/globalAddresses)\n* How-to Guides\n * [Reserving a Static External IP Address](https://cloud.google.com/compute/docs/ip-addresses/reserve-static-external-ip-address)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Global Address Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.GlobalAddress(\"default\", {});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.GlobalAddress(\"default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.GlobalAddress(\"default\");\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewGlobalAddress(ctx, \"default\", 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.compute.GlobalAddress;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 GlobalAddress(\"default\");\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:GlobalAddress\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGlobalAddress can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/globalAddress:GlobalAddress default projects/{{project}}/global/addresses/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/globalAddress:GlobalAddress default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/globalAddress:GlobalAddress default {{name}}\n```\n\n ", "properties": { "address": { "type": "string", @@ -130070,7 +131503,7 @@ "additionalProperties": { "type": "string" }, - "description": "Labels to apply to this address. A list of key-\u003evalue pairs.\n" + "description": "Labels to apply to this address. A list of key-\u003evalue pairs.\n" }, "name": { "type": "string", @@ -130090,7 +131523,7 @@ }, "purpose": { "type": "string", - "description": "The purpose of the resource. Possible values include:\n* VPC_PEERING - for peer networks\n* PRIVATE_SERVICE_CONNECT - for Private Service Connect networks\n" + "description": "The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for\n([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks\n" }, "selfLink": { "type": "string", @@ -130131,7 +131564,7 @@ "additionalProperties": { "type": "string" }, - "description": "Labels to apply to this address. A list of key-\u003evalue pairs.\n" + "description": "Labels to apply to this address. A list of key-\u003evalue pairs.\n" }, "name": { "type": "string", @@ -130155,7 +131588,7 @@ }, "purpose": { "type": "string", - "description": "The purpose of the resource. Possible values include:\n* VPC_PEERING - for peer networks\n* PRIVATE_SERVICE_CONNECT - for Private Service Connect networks\n", + "description": "The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for\n([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks\n", "willReplaceOnChanges": true } }, @@ -130195,7 +131628,7 @@ "additionalProperties": { "type": "string" }, - "description": "Labels to apply to this address. A list of key-\u003evalue pairs.\n" + "description": "Labels to apply to this address. A list of key-\u003evalue pairs.\n" }, "name": { "type": "string", @@ -130219,7 +131652,7 @@ }, "purpose": { "type": "string", - "description": "The purpose of the resource. Possible values include:\n* VPC_PEERING - for peer networks\n* PRIVATE_SERVICE_CONNECT - for Private Service Connect networks\n", + "description": "The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for\n([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks\n", "willReplaceOnChanges": true }, "selfLink": { @@ -130231,7 +131664,7 @@ } }, "gcp:compute/globalForwardingRule:GlobalForwardingRule": { - "description": "Represents a GlobalForwardingRule resource. Global forwarding rules are\nused to forward traffic to the correct load balancer for HTTP load\nbalancing. Global forwarding rules can only be used for HTTP load\nbalancing.\n\nFor more information, see\n\u003chttps://cloud.google.com/compute/docs/load-balancing/http/\u003e\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### External Ssl Proxy Lb Mig Backend\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.GlobalAddress;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport com.pulumi.tls.SelfSignedCert;\nimport com.pulumi.tls.SelfSignedCertArgs;\nimport com.pulumi.tls.inputs.SelfSignedCertSubjectArgs;\nimport com.pulumi.gcp.compute.SSLCertificate;\nimport com.pulumi.gcp.compute.SSLCertificateArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerNamedPortArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs;\nimport com.pulumi.gcp.compute.TargetSSLProxy;\nimport com.pulumi.gcp.compute.TargetSSLProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport com.pulumi.gcp.compute.Firewall;\nimport com.pulumi.gcp.compute.FirewallArgs;\nimport com.pulumi.gcp.compute.inputs.FirewallAllowArgs;\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 defaultNetwork = new Network(\"defaultNetwork\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .provider(google)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.1.0/24\")\n .region(\"us-central1\")\n .network(defaultNetwork.id())\n .build(), CustomResourceOptions.builder()\n .provider(google)\n .build());\n\n var defaultGlobalAddress = new GlobalAddress(\"defaultGlobalAddress\");\n\n var defaultPrivateKey = new PrivateKey(\"defaultPrivateKey\", PrivateKeyArgs.builder() \n .algorithm(\"RSA\")\n .rsaBits(2048)\n .build());\n\n var defaultSelfSignedCert = new SelfSignedCert(\"defaultSelfSignedCert\", SelfSignedCertArgs.builder() \n .keyAlgorithm(defaultPrivateKey.algorithm())\n .privateKeyPem(defaultPrivateKey.privateKeyPem())\n .validityPeriodHours(12)\n .earlyRenewalHours(3)\n .allowedUses( \n \"key_encipherment\",\n \"digital_signature\",\n \"server_auth\")\n .dnsNames(\"example.com\")\n .subject(SelfSignedCertSubjectArgs.builder()\n .commonName(\"example.com\")\n .organization(\"ACME Examples, Inc\")\n .build())\n .build());\n\n var defaultSSLCertificate = new SSLCertificate(\"defaultSSLCertificate\", SSLCertificateArgs.builder() \n .privateKey(defaultPrivateKey.privateKeyPem())\n .certificate(defaultSelfSignedCert.certPem())\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .timeoutSec(1)\n .checkIntervalSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"443\")\n .build())\n .build());\n\n var defaultInstanceTemplate = new InstanceTemplate(\"defaultInstanceTemplate\", InstanceTemplateArgs.builder() \n .machineType(\"e2-small\")\n .tags(\"allow-health-check\")\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(defaultNetwork.id())\n .subnetwork(defaultSubnetwork.id())\n .accessConfigs()\n .build())\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(\"debian-cloud/debian-10\")\n .autoDelete(true)\n .boot(true)\n .build())\n .metadata(Map.of(\"startup-script\", \"\"\"\n#! /bin/bash\nset -euo pipefail\nexport DEBIAN_FRONTEND=noninteractive\nsudo apt-get update\nsudo apt-get install -y apache2 jq\nsudo a2ensite default-ssl\nsudo a2enmod ssl\nsudo service apache2 restart\nNAME=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/hostname\")\nIP=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip\")\nMETADATA=$(curl -f -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True\" | jq 'del(.[\"startup-script\"])')\ncat \u003c\u003cEOF \u003e /var/www/html/index.html\n\u003ch1\u003eSSL Load Balancer\u003c/h1\u003e\n\u003cpre\u003e\nName: $NAME\nIP: $IP\nMetadata: $METADATA\n\u003c/pre\u003e\nEOF\n \"\"\"))\n .build(), CustomResourceOptions.builder()\n .provider(google)\n .build());\n\n var defaultInstanceGroupManager = new InstanceGroupManager(\"defaultInstanceGroupManager\", InstanceGroupManagerArgs.builder() \n .zone(\"us-central1-c\")\n .namedPorts(InstanceGroupManagerNamedPortArgs.builder()\n .name(\"tcp\")\n .port(443)\n .build())\n .versions(InstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(defaultInstanceTemplate.id())\n .name(\"primary\")\n .build())\n .baseInstanceName(\"vm\")\n .targetSize(2)\n .build(), CustomResourceOptions.builder()\n .provider(google)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .protocol(\"SSL\")\n .portName(\"tcp\")\n .loadBalancingScheme(\"EXTERNAL\")\n .timeoutSec(10)\n .healthChecks(defaultHealthCheck.id())\n .backends(BackendServiceBackendArgs.builder()\n .group(defaultInstanceGroupManager.instanceGroup())\n .balancingMode(\"UTILIZATION\")\n .maxUtilization(1)\n .capacityScaler(1)\n .build())\n .build());\n\n var defaultTargetSSLProxy = new TargetSSLProxy(\"defaultTargetSSLProxy\", TargetSSLProxyArgs.builder() \n .backendService(defaultBackendService.id())\n .sslCertificates(defaultSSLCertificate.id())\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .ipProtocol(\"TCP\")\n .loadBalancingScheme(\"EXTERNAL\")\n .portRange(\"443\")\n .target(defaultTargetSSLProxy.id())\n .ipAddress(defaultGlobalAddress.id())\n .build(), CustomResourceOptions.builder()\n .provider(google)\n .build());\n\n var defaultFirewall = new Firewall(\"defaultFirewall\", FirewallArgs.builder() \n .direction(\"INGRESS\")\n .network(defaultNetwork.id())\n .sourceRanges( \n \"130.211.0.0/22\",\n \"35.191.0.0/16\")\n .allows(FirewallAllowArgs.builder()\n .protocol(\"tcp\")\n .build())\n .targetTags(\"allow-health-check\")\n .build(), CustomResourceOptions.builder()\n .provider(google)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # External SSL proxy load balancer with managed instance group backend\n\n # VPC\n defaultNetwork:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n options:\n provider: ${google}\n # backend subnet\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.1.0/24\n region: us-central1\n network: ${defaultNetwork.id}\n options:\n provider: ${google}\n # reserved IP address\n defaultGlobalAddress:\n type: gcp:compute:GlobalAddress\n # Self-signed regional SSL certificate for testing\n defaultPrivateKey:\n type: tls:PrivateKey\n properties:\n algorithm: RSA\n rsaBits: 2048\n defaultSelfSignedCert:\n type: tls:SelfSignedCert\n properties:\n keyAlgorithm: ${defaultPrivateKey.algorithm}\n privateKeyPem: ${defaultPrivateKey.privateKeyPem}\n # Certificate expires after 12 hours.\n validityPeriodHours: 12\n # Generate a new certificate if Terraform is run within three\n # # hours of the certificate's expiration time.\n earlyRenewalHours: 3\n # Reasonable set of uses for a server SSL certificate.\n allowedUses:\n - key_encipherment\n - digital_signature\n - server_auth\n dnsNames:\n - example.com\n subject:\n commonName: example.com\n organization: ACME Examples, Inc\n defaultSSLCertificate:\n type: gcp:compute:SSLCertificate\n properties:\n privateKey: ${defaultPrivateKey.privateKeyPem}\n certificate: ${defaultSelfSignedCert.certPem}\n defaultTargetSSLProxy:\n type: gcp:compute:TargetSSLProxy\n properties:\n backendService: ${defaultBackendService.id}\n sslCertificates:\n - ${defaultSSLCertificate.id}\n # forwarding rule\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n ipProtocol: TCP\n loadBalancingScheme: EXTERNAL\n portRange: '443'\n target: ${defaultTargetSSLProxy.id}\n ipAddress: ${defaultGlobalAddress.id}\n options:\n provider: ${google}\n # backend service\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n protocol: SSL\n portName: tcp\n loadBalancingScheme: EXTERNAL\n timeoutSec: 10\n healthChecks:\n - ${defaultHealthCheck.id}\n backends:\n - group: ${defaultInstanceGroupManager.instanceGroup}\n balancingMode: UTILIZATION\n maxUtilization: 1\n capacityScaler: 1\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n timeoutSec: 1\n checkIntervalSec: 1\n tcpHealthCheck:\n port: '443'\n # instance template\n defaultInstanceTemplate:\n type: gcp:compute:InstanceTemplate\n properties:\n machineType: e2-small\n tags:\n - allow-health-check\n networkInterfaces:\n - network: ${defaultNetwork.id}\n subnetwork: ${defaultSubnetwork.id}\n accessConfigs:\n - {}\n disks:\n - sourceImage: debian-cloud/debian-10\n autoDelete: true\n boot: true\n # install nginx and serve a simple web page\n metadata:\n startup-script: |\n #! /bin/bash\n set -euo pipefail\n export DEBIAN_FRONTEND=noninteractive\n sudo apt-get update\n sudo apt-get install -y apache2 jq\n sudo a2ensite default-ssl\n sudo a2enmod ssl\n sudo service apache2 restart\n NAME=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/hostname\")\n IP=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip\")\n METADATA=$(curl -f -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True\" | jq 'del(.[\"startup-script\"])')\n cat \u003c\u003cEOF \u003e /var/www/html/index.html\n \u003ch1\u003eSSL Load Balancer\u003c/h1\u003e\n \u003cpre\u003e\n Name: $NAME\n IP: $IP\n Metadata: $METADATA\n \u003c/pre\u003e\n EOF\n options:\n provider: ${google}\n # MIG\n defaultInstanceGroupManager:\n type: gcp:compute:InstanceGroupManager\n properties:\n zone: us-central1-c\n namedPorts:\n - name: tcp\n port: 443\n versions:\n - instanceTemplate: ${defaultInstanceTemplate.id}\n name: primary\n baseInstanceName: vm\n targetSize: 2\n options:\n provider: ${google}\n # allow access from health check ranges\n defaultFirewall:\n type: gcp:compute:Firewall\n properties:\n direction: INGRESS\n network: ${defaultNetwork.id}\n sourceRanges:\n - 130.211.0.0/22\n - 35.191.0.0/16\n allows:\n - protocol: tcp\n targetTags:\n - allow-health-check\n options:\n provider: ${google}\n```\n{{% /example %}}\n{{% example %}}\n### External Tcp Proxy Lb Mig Backend\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.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerNamedPortArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs;\nimport com.pulumi.gcp.compute.TargetTCPProxy;\nimport com.pulumi.gcp.compute.TargetTCPProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport com.pulumi.gcp.compute.Firewall;\nimport com.pulumi.gcp.compute.FirewallArgs;\nimport com.pulumi.gcp.compute.inputs.FirewallAllowArgs;\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 defaultNetwork = new Network(\"defaultNetwork\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.1.0/24\")\n .region(\"us-central1\")\n .network(defaultNetwork.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalAddress = new GlobalAddress(\"defaultGlobalAddress\", GlobalAddressArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .timeoutSec(1)\n .checkIntervalSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"80\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultInstanceTemplate = new InstanceTemplate(\"defaultInstanceTemplate\", InstanceTemplateArgs.builder() \n .machineType(\"e2-small\")\n .tags(\"allow-health-check\")\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(defaultNetwork.id())\n .subnetwork(defaultSubnetwork.id())\n .accessConfigs()\n .build())\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(\"debian-cloud/debian-10\")\n .autoDelete(true)\n .boot(true)\n .build())\n .metadata(Map.of(\"startup-script\", \"\"\"\n#! /bin/bash\nset -euo pipefail\nexport DEBIAN_FRONTEND=noninteractive\napt-get update\napt-get install -y nginx-light jq\nNAME=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/hostname\")\nIP=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip\")\nMETADATA=$(curl -f -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True\" | jq 'del(.[\"startup-script\"])')\ncat \u003c\u003cEOF \u003e /var/www/html/index.html\n\u003cpre\u003e\nName: $NAME\nIP: $IP\nMetadata: $METADATA\n\u003c/pre\u003e\nEOF\n \"\"\"))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultInstanceGroupManager = new InstanceGroupManager(\"defaultInstanceGroupManager\", InstanceGroupManagerArgs.builder() \n .zone(\"us-central1-c\")\n .namedPorts(InstanceGroupManagerNamedPortArgs.builder()\n .name(\"tcp\")\n .port(80)\n .build())\n .versions(InstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(defaultInstanceTemplate.id())\n .name(\"primary\")\n .build())\n .baseInstanceName(\"vm\")\n .targetSize(2)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .protocol(\"TCP\")\n .portName(\"tcp\")\n .loadBalancingScheme(\"EXTERNAL\")\n .timeoutSec(10)\n .healthChecks(defaultHealthCheck.id())\n .backends(BackendServiceBackendArgs.builder()\n .group(defaultInstanceGroupManager.instanceGroup())\n .balancingMode(\"UTILIZATION\")\n .maxUtilization(1)\n .capacityScaler(1)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultTargetTCPProxy = new TargetTCPProxy(\"defaultTargetTCPProxy\", TargetTCPProxyArgs.builder() \n .backendService(defaultBackendService.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .ipProtocol(\"TCP\")\n .loadBalancingScheme(\"EXTERNAL\")\n .portRange(\"110\")\n .target(defaultTargetTCPProxy.id())\n .ipAddress(defaultGlobalAddress.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultFirewall = new Firewall(\"defaultFirewall\", FirewallArgs.builder() \n .direction(\"INGRESS\")\n .network(defaultNetwork.id())\n .sourceRanges( \n \"130.211.0.0/22\",\n \"35.191.0.0/16\")\n .allows(FirewallAllowArgs.builder()\n .protocol(\"tcp\")\n .build())\n .targetTags(\"allow-health-check\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # External TCP proxy load balancer with managed instance group backend\n\n # VPC\n defaultNetwork:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n options:\n provider: ${[\"google-beta\"]}\n # backend subnet\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.1.0/24\n region: us-central1\n network: ${defaultNetwork.id}\n options:\n provider: ${[\"google-beta\"]}\n # reserved IP address\n defaultGlobalAddress:\n type: gcp:compute:GlobalAddress\n options:\n provider: ${[\"google-beta\"]}\n # forwarding rule\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n ipProtocol: TCP\n loadBalancingScheme: EXTERNAL\n portRange: '110'\n target: ${defaultTargetTCPProxy.id}\n ipAddress: ${defaultGlobalAddress.id}\n options:\n provider: ${[\"google-beta\"]}\n defaultTargetTCPProxy:\n type: gcp:compute:TargetTCPProxy\n properties:\n backendService: ${defaultBackendService.id}\n options:\n provider: ${[\"google-beta\"]}\n # backend service\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n protocol: TCP\n portName: tcp\n loadBalancingScheme: EXTERNAL\n timeoutSec: 10\n healthChecks:\n - ${defaultHealthCheck.id}\n backends:\n - group: ${defaultInstanceGroupManager.instanceGroup}\n balancingMode: UTILIZATION\n maxUtilization: 1\n capacityScaler: 1\n options:\n provider: ${[\"google-beta\"]}\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n timeoutSec: 1\n checkIntervalSec: 1\n tcpHealthCheck:\n port: '80'\n options:\n provider: ${[\"google-beta\"]}\n # instance template\n defaultInstanceTemplate:\n type: gcp:compute:InstanceTemplate\n properties:\n machineType: e2-small\n tags:\n - allow-health-check\n networkInterfaces:\n - network: ${defaultNetwork.id}\n subnetwork: ${defaultSubnetwork.id}\n accessConfigs:\n - {}\n disks:\n - sourceImage: debian-cloud/debian-10\n autoDelete: true\n boot: true\n # install nginx and serve a simple web page\n metadata:\n startup-script: |\n #! /bin/bash\n set -euo pipefail\n export DEBIAN_FRONTEND=noninteractive\n apt-get update\n apt-get install -y nginx-light jq\n NAME=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/hostname\")\n IP=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip\")\n METADATA=$(curl -f -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True\" | jq 'del(.[\"startup-script\"])')\n cat \u003c\u003cEOF \u003e /var/www/html/index.html\n \u003cpre\u003e\n Name: $NAME\n IP: $IP\n Metadata: $METADATA\n \u003c/pre\u003e\n EOF\n options:\n provider: ${[\"google-beta\"]}\n # MIG\n defaultInstanceGroupManager:\n type: gcp:compute:InstanceGroupManager\n properties:\n zone: us-central1-c\n namedPorts:\n - name: tcp\n port: 80\n versions:\n - instanceTemplate: ${defaultInstanceTemplate.id}\n name: primary\n baseInstanceName: vm\n targetSize: 2\n options:\n provider: ${[\"google-beta\"]}\n # allow access from health check ranges\n defaultFirewall:\n type: gcp:compute:Firewall\n properties:\n direction: INGRESS\n network: ${defaultNetwork.id}\n sourceRanges:\n - 130.211.0.0/22\n - 35.191.0.0/16\n allows:\n - protocol: tcp\n targetTags:\n - allow-health-check\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### External Http Lb Mig Backend Custom Header\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.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckHttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerNamedPortArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.TargetHttpProxy;\nimport com.pulumi.gcp.compute.TargetHttpProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport com.pulumi.gcp.compute.Firewall;\nimport com.pulumi.gcp.compute.FirewallArgs;\nimport com.pulumi.gcp.compute.inputs.FirewallAllowArgs;\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 defaultNetwork = new Network(\"defaultNetwork\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.1.0/24\")\n .region(\"us-central1\")\n .network(defaultNetwork.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalAddress = new GlobalAddress(\"defaultGlobalAddress\", GlobalAddressArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .portSpecification(\"USE_SERVING_PORT\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultInstanceTemplate = new InstanceTemplate(\"defaultInstanceTemplate\", InstanceTemplateArgs.builder() \n .machineType(\"e2-small\")\n .tags(\"allow-health-check\")\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(defaultNetwork.id())\n .subnetwork(defaultSubnetwork.id())\n .accessConfigs()\n .build())\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(\"debian-cloud/debian-10\")\n .autoDelete(true)\n .boot(true)\n .build())\n .metadata(Map.of(\"startup-script\", \"\"\"\n#! /bin/bash\nset -euo pipefail\n\nexport DEBIAN_FRONTEND=noninteractive\napt-get update\napt-get install -y nginx-light jq\n\nNAME=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/hostname\")\nIP=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip\")\nMETADATA=$(curl -f -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True\" | jq 'del(.[\"startup-script\"])')\n\ncat \u003c\u003cEOF \u003e /var/www/html/index.html\n\u003cpre\u003e\nName: $NAME\nIP: $IP\nMetadata: $METADATA\n\u003c/pre\u003e\nEOF\n \"\"\"))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultInstanceGroupManager = new InstanceGroupManager(\"defaultInstanceGroupManager\", InstanceGroupManagerArgs.builder() \n .zone(\"us-central1-c\")\n .namedPorts(InstanceGroupManagerNamedPortArgs.builder()\n .name(\"http\")\n .port(8080)\n .build())\n .versions(InstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(defaultInstanceTemplate.id())\n .name(\"primary\")\n .build())\n .baseInstanceName(\"vm\")\n .targetSize(2)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .protocol(\"HTTP\")\n .portName(\"my-port\")\n .loadBalancingScheme(\"EXTERNAL\")\n .timeoutSec(10)\n .enableCdn(true)\n .customRequestHeaders(\"X-Client-Geo-Location: {client_region_subdivision}, {client_city}\")\n .customResponseHeaders(\"X-Cache-Hit: {cdn_cache_status}\")\n .healthChecks(defaultHealthCheck.id())\n .backends(BackendServiceBackendArgs.builder()\n .group(defaultInstanceGroupManager.instanceGroup())\n .balancingMode(\"UTILIZATION\")\n .capacityScaler(1)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .defaultService(defaultBackendService.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultTargetHttpProxy = new TargetHttpProxy(\"defaultTargetHttpProxy\", TargetHttpProxyArgs.builder() \n .urlMap(defaultURLMap.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .ipProtocol(\"TCP\")\n .loadBalancingScheme(\"EXTERNAL\")\n .portRange(\"80\")\n .target(defaultTargetHttpProxy.id())\n .ipAddress(defaultGlobalAddress.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultFirewall = new Firewall(\"defaultFirewall\", FirewallArgs.builder() \n .direction(\"INGRESS\")\n .network(defaultNetwork.id())\n .sourceRanges( \n \"130.211.0.0/22\",\n \"35.191.0.0/16\")\n .allows(FirewallAllowArgs.builder()\n .protocol(\"tcp\")\n .build())\n .targetTags(\"allow-health-check\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # External HTTP load balancer with a CDN-enabled managed instance group backend\n # and custom request and response headers\n\n # VPC\n defaultNetwork:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n options:\n provider: ${[\"google-beta\"]}\n # backend subnet\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.1.0/24\n region: us-central1\n network: ${defaultNetwork.id}\n options:\n provider: ${[\"google-beta\"]}\n # reserved IP address\n defaultGlobalAddress:\n type: gcp:compute:GlobalAddress\n options:\n provider: ${[\"google-beta\"]}\n # forwarding rule\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n ipProtocol: TCP\n loadBalancingScheme: EXTERNAL\n portRange: '80'\n target: ${defaultTargetHttpProxy.id}\n ipAddress: ${defaultGlobalAddress.id}\n options:\n provider: ${[\"google-beta\"]}\n # http proxy\n defaultTargetHttpProxy:\n type: gcp:compute:TargetHttpProxy\n properties:\n urlMap: ${defaultURLMap.id}\n options:\n provider: ${[\"google-beta\"]}\n # url map\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n defaultService: ${defaultBackendService.id}\n options:\n provider: ${[\"google-beta\"]}\n # backend service with custom request and response headers\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n protocol: HTTP\n portName: my-port\n loadBalancingScheme: EXTERNAL\n timeoutSec: 10\n enableCdn: true\n customRequestHeaders:\n - 'X-Client-Geo-Location: {client_region_subdivision}, {client_city}'\n customResponseHeaders:\n - 'X-Cache-Hit: {cdn_cache_status}'\n healthChecks:\n - ${defaultHealthCheck.id}\n backends:\n - group: ${defaultInstanceGroupManager.instanceGroup}\n balancingMode: UTILIZATION\n capacityScaler: 1\n options:\n provider: ${[\"google-beta\"]}\n # instance template\n defaultInstanceTemplate:\n type: gcp:compute:InstanceTemplate\n properties:\n machineType: e2-small\n tags:\n - allow-health-check\n networkInterfaces:\n - network: ${defaultNetwork.id}\n subnetwork: ${defaultSubnetwork.id}\n accessConfigs:\n - {}\n disks:\n - sourceImage: debian-cloud/debian-10\n autoDelete: true\n boot: true\n # install nginx and serve a simple web page\n metadata:\n startup-script: |\n #! /bin/bash\n set -euo pipefail\n\n export DEBIAN_FRONTEND=noninteractive\n apt-get update\n apt-get install -y nginx-light jq\n\n NAME=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/hostname\")\n IP=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip\")\n METADATA=$(curl -f -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True\" | jq 'del(.[\"startup-script\"])')\n\n cat \u003c\u003cEOF \u003e /var/www/html/index.html\n \u003cpre\u003e\n Name: $NAME\n IP: $IP\n Metadata: $METADATA\n \u003c/pre\u003e\n EOF\n options:\n provider: ${[\"google-beta\"]}\n # health check\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n httpHealthCheck:\n portSpecification: USE_SERVING_PORT\n options:\n provider: ${[\"google-beta\"]}\n # MIG\n defaultInstanceGroupManager:\n type: gcp:compute:InstanceGroupManager\n properties:\n zone: us-central1-c\n namedPorts:\n - name: http\n port: 8080\n versions:\n - instanceTemplate: ${defaultInstanceTemplate.id}\n name: primary\n baseInstanceName: vm\n targetSize: 2\n options:\n provider: ${[\"google-beta\"]}\n # allow access from health check ranges\n defaultFirewall:\n type: gcp:compute:Firewall\n properties:\n direction: INGRESS\n network: ${defaultNetwork.id}\n sourceRanges:\n - 130.211.0.0/22\n - 35.191.0.0/16\n allows:\n - protocol: tcp\n targetTags:\n - allow-health-check\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Global Forwarding Rule Http\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 com.pulumi.gcp.compute.TargetHttpProxy;\nimport com.pulumi.gcp.compute.TargetHttpProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultTargetHttpProxy = new TargetHttpProxy(\"defaultTargetHttpProxy\", TargetHttpProxyArgs.builder() \n .description(\"a description\")\n .urlMap(defaultURLMap.id())\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .target(defaultTargetHttpProxy.id())\n .portRange(\"80\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n target: ${defaultTargetHttpProxy.id}\n portRange: '80'\n defaultTargetHttpProxy:\n type: gcp:compute:TargetHttpProxy\n properties:\n description: a description\n urlMap: ${defaultURLMap.id}\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n{{% /example %}}\n{{% example %}}\n### Global Forwarding Rule Internal\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.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs;\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.TargetHttpProxy;\nimport com.pulumi.gcp.compute.TargetHttpProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport com.pulumi.gcp.compute.inputs.GlobalForwardingRuleMetadataFilterArgs;\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 debianImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var instanceTemplate = new InstanceTemplate(\"instanceTemplate\", InstanceTemplateArgs.builder() \n .machineType(\"e2-medium\")\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(debianImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .autoDelete(true)\n .boot(true)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var igm = new InstanceGroupManager(\"igm\", InstanceGroupManagerArgs.builder() \n .versions(InstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(instanceTemplate.id())\n .name(\"primary\")\n .build())\n .baseInstanceName(\"internal-glb\")\n .zone(\"us-central1-f\")\n .targetSize(1)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .checkIntervalSec(1)\n .timeoutSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"80\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .backends(BackendServiceBackendArgs.builder()\n .group(igm.instanceGroup())\n .balancingMode(\"RATE\")\n .capacityScaler(0.4)\n .maxRatePerInstance(50)\n .build())\n .healthChecks(defaultHealthCheck.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultTargetHttpProxy = new TargetHttpProxy(\"defaultTargetHttpProxy\", TargetHttpProxyArgs.builder() \n .description(\"a description\")\n .urlMap(defaultURLMap.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .target(defaultTargetHttpProxy.id())\n .portRange(\"80\")\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .ipAddress(\"0.0.0.0\")\n .metadataFilters(GlobalForwardingRuleMetadataFilterArgs.builder()\n .filterMatchCriteria(\"MATCH_ANY\")\n .filterLabels(GlobalForwardingRuleMetadataFilterFilterLabelArgs.builder()\n .name(\"PLANET\")\n .value(\"MARS\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n target: ${defaultTargetHttpProxy.id}\n portRange: '80'\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n ipAddress: 0.0.0.0\n metadataFilters:\n - filterMatchCriteria: MATCH_ANY\n filterLabels:\n - name: PLANET\n value: MARS\n options:\n provider: ${[\"google-beta\"]}\n defaultTargetHttpProxy:\n type: gcp:compute:TargetHttpProxy\n properties:\n description: a description\n urlMap: ${defaultURLMap.id}\n options:\n provider: ${[\"google-beta\"]}\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n options:\n provider: ${[\"google-beta\"]}\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n backends:\n - group: ${igm.instanceGroup}\n balancingMode: RATE\n capacityScaler: 0.4\n maxRatePerInstance: 50\n healthChecks:\n - ${defaultHealthCheck.id}\n options:\n provider: ${[\"google-beta\"]}\n igm:\n type: gcp:compute:InstanceGroupManager\n properties:\n versions:\n - instanceTemplate: ${instanceTemplate.id}\n name: primary\n baseInstanceName: internal-glb\n zone: us-central1-f\n targetSize: 1\n options:\n provider: ${[\"google-beta\"]}\n instanceTemplate:\n type: gcp:compute:InstanceTemplate\n properties:\n machineType: e2-medium\n networkInterfaces:\n - network: default\n disks:\n - sourceImage: ${debianImage.selfLink}\n autoDelete: true\n boot: true\n options:\n provider: ${[\"google-beta\"]}\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n checkIntervalSec: 1\n timeoutSec: 1\n tcpHealthCheck:\n port: '80'\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n debianImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% example %}}\n### Global Forwarding Rule External Managed\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultBackendService = new gcp.compute.BackendService(\"defaultBackendService\", {\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n loadBalancingScheme: \"EXTERNAL_MANAGED\",\n});\nconst defaultURLMap = new gcp.compute.URLMap(\"defaultURLMap\", {\n description: \"a description\",\n defaultService: defaultBackendService.id,\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: defaultBackendService.id,\n pathRules: [{\n paths: [\"/*\"],\n service: defaultBackendService.id,\n }],\n }],\n});\nconst defaultTargetHttpProxy = new gcp.compute.TargetHttpProxy(\"defaultTargetHttpProxy\", {\n description: \"a description\",\n urlMap: defaultURLMap.id,\n});\nconst defaultGlobalForwardingRule = new gcp.compute.GlobalForwardingRule(\"defaultGlobalForwardingRule\", {\n target: defaultTargetHttpProxy.id,\n portRange: \"80\",\n loadBalancingScheme: \"EXTERNAL_MANAGED\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_backend_service = gcp.compute.BackendService(\"defaultBackendService\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n load_balancing_scheme=\"EXTERNAL_MANAGED\")\ndefault_url_map = gcp.compute.URLMap(\"defaultURLMap\",\n description=\"a description\",\n default_service=default_backend_service.id,\n host_rules=[gcp.compute.URLMapHostRuleArgs(\n hosts=[\"mysite.com\"],\n path_matcher=\"allpaths\",\n )],\n path_matchers=[gcp.compute.URLMapPathMatcherArgs(\n name=\"allpaths\",\n default_service=default_backend_service.id,\n path_rules=[gcp.compute.URLMapPathMatcherPathRuleArgs(\n paths=[\"/*\"],\n service=default_backend_service.id,\n )],\n )])\ndefault_target_http_proxy = gcp.compute.TargetHttpProxy(\"defaultTargetHttpProxy\",\n description=\"a description\",\n url_map=default_url_map.id)\ndefault_global_forwarding_rule = gcp.compute.GlobalForwardingRule(\"defaultGlobalForwardingRule\",\n target=default_target_http_proxy.id,\n port_range=\"80\",\n load_balancing_scheme=\"EXTERNAL_MANAGED\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultBackendService = new Gcp.Compute.BackendService(\"defaultBackendService\", new()\n {\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n LoadBalancingScheme = \"EXTERNAL_MANAGED\",\n });\n\n var defaultURLMap = new Gcp.Compute.URLMap(\"defaultURLMap\", new()\n {\n Description = \"a description\",\n DefaultService = defaultBackendService.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 = defaultBackendService.Id,\n PathRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/*\",\n },\n Service = defaultBackendService.Id,\n },\n },\n },\n },\n });\n\n var defaultTargetHttpProxy = new Gcp.Compute.TargetHttpProxy(\"defaultTargetHttpProxy\", new()\n {\n Description = \"a description\",\n UrlMap = defaultURLMap.Id,\n });\n\n var defaultGlobalForwardingRule = new Gcp.Compute.GlobalForwardingRule(\"defaultGlobalForwardingRule\", new()\n {\n Target = defaultTargetHttpProxy.Id,\n PortRange = \"80\",\n LoadBalancingScheme = \"EXTERNAL_MANAGED\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdefaultBackendService, err := compute.NewBackendService(ctx, \"defaultBackendService\", \u0026compute.BackendServiceArgs{\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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultURLMap, err := compute.NewURLMap(ctx, \"defaultURLMap\", \u0026compute.URLMapArgs{\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: defaultBackendService.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: defaultBackendService.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(\"/*\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: defaultBackendService.ID(),\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\tdefaultTargetHttpProxy, err := compute.NewTargetHttpProxy(ctx, \"defaultTargetHttpProxy\", \u0026compute.TargetHttpProxyArgs{\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tUrlMap: defaultURLMap.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewGlobalForwardingRule(ctx, \"defaultGlobalForwardingRule\", \u0026compute.GlobalForwardingRuleArgs{\n\t\t\tTarget: defaultTargetHttpProxy.ID(),\n\t\t\tPortRange: pulumi.String(\"80\"),\n\t\t\tLoadBalancingScheme: pulumi.String(\"EXTERNAL_MANAGED\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.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.TargetHttpProxy;\nimport com.pulumi.gcp.compute.TargetHttpProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .loadBalancingScheme(\"EXTERNAL_MANAGED\")\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultTargetHttpProxy = new TargetHttpProxy(\"defaultTargetHttpProxy\", TargetHttpProxyArgs.builder() \n .description(\"a description\")\n .urlMap(defaultURLMap.id())\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .target(defaultTargetHttpProxy.id())\n .portRange(\"80\")\n .loadBalancingScheme(\"EXTERNAL_MANAGED\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n target: ${defaultTargetHttpProxy.id}\n portRange: '80'\n loadBalancingScheme: EXTERNAL_MANAGED\n defaultTargetHttpProxy:\n type: gcp:compute:TargetHttpProxy\n properties:\n description: a description\n urlMap: ${defaultURLMap.id}\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n loadBalancingScheme: EXTERNAL_MANAGED\n```\n{{% /example %}}\n{{% example %}}\n### Global Forwarding Rule Hybrid\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.NetworkEndpointGroup;\nimport com.pulumi.gcp.compute.NetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.NetworkEndpoint;\nimport com.pulumi.gcp.compute.NetworkEndpointArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs;\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.TargetHttpProxy;\nimport com.pulumi.gcp.compute.TargetHttpProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 config = ctx.config();\n final var subnetworkCidr = config.get(\"subnetworkCidr\").orElse(\"10.0.0.0/24\");\n var defaultNetwork = new Network(\"defaultNetwork\");\n\n var internalNetwork = new Network(\"internalNetwork\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var internalSubnetwork = new Subnetwork(\"internalSubnetwork\", SubnetworkArgs.builder() \n .network(internalNetwork.id())\n .ipCidrRange(subnetworkCidr)\n .region(\"us-central1\")\n .privateIpGoogleAccess(true)\n .build());\n\n var defaultNetworkEndpointGroup = new NetworkEndpointGroup(\"defaultNetworkEndpointGroup\", NetworkEndpointGroupArgs.builder() \n .network(defaultNetwork.id())\n .defaultPort(\"90\")\n .zone(\"us-central1-a\")\n .networkEndpointType(\"GCE_VM_IP_PORT\")\n .build());\n\n var internalNetworkEndpointGroup = new NetworkEndpointGroup(\"internalNetworkEndpointGroup\", NetworkEndpointGroupArgs.builder() \n .network(internalNetwork.id())\n .subnetwork(internalSubnetwork.id())\n .zone(\"us-central1-a\")\n .networkEndpointType(\"GCE_VM_IP\")\n .build());\n\n var hybridNetworkEndpointGroup = new NetworkEndpointGroup(\"hybridNetworkEndpointGroup\", NetworkEndpointGroupArgs.builder() \n .network(defaultNetwork.id())\n .defaultPort(\"90\")\n .zone(\"us-central1-a\")\n .networkEndpointType(\"NON_GCP_PRIVATE_IP_PORT\")\n .build());\n\n var hybrid_endpoint = new NetworkEndpoint(\"hybrid-endpoint\", NetworkEndpointArgs.builder() \n .networkEndpointGroup(hybridNetworkEndpointGroup.name())\n .port(hybridNetworkEndpointGroup.defaultPort())\n .ipAddress(\"127.0.0.1\")\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .timeoutSec(1)\n .checkIntervalSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"80\")\n .build())\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .backends(BackendServiceBackendArgs.builder()\n .group(defaultNetworkEndpointGroup.id())\n .balancingMode(\"RATE\")\n .maxRatePerEndpoint(10)\n .build())\n .healthChecks(defaultHealthCheck.id())\n .build());\n\n var hybridBackendService = new BackendService(\"hybridBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .backends(BackendServiceBackendArgs.builder()\n .group(hybridNetworkEndpointGroup.id())\n .balancingMode(\"RATE\")\n .maxRatePerEndpoint(10)\n .build())\n .healthChecks(defaultHealthCheck.id())\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules( \n URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build(),\n URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/hybrid\")\n .service(hybridBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultTargetHttpProxy = new TargetHttpProxy(\"defaultTargetHttpProxy\", TargetHttpProxyArgs.builder() \n .description(\"a description\")\n .urlMap(defaultURLMap.id())\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .target(defaultTargetHttpProxy.id())\n .portRange(\"80\")\n .build());\n\n }\n}\n```\n```yaml\nconfiguration:\n # Roughly mirrors https://cloud.google.com/load-balancing/docs/https/setting-up-ext-https-hybrid\n subnetworkCidr:\n type: string\n default: 10.0.0.0/24\nresources:\n defaultNetwork:\n type: gcp:compute:Network\n internalNetwork:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n internalSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n network: ${internalNetwork.id}\n ipCidrRange: ${subnetworkCidr}\n region: us-central1\n privateIpGoogleAccess: true\n # Zonal NEG with GCE_VM_IP_PORT\n defaultNetworkEndpointGroup:\n type: gcp:compute:NetworkEndpointGroup\n properties:\n network: ${defaultNetwork.id}\n defaultPort: '90'\n zone: us-central1-a\n networkEndpointType: GCE_VM_IP_PORT\n # Zonal NEG with GCE_VM_IP\n internalNetworkEndpointGroup:\n type: gcp:compute:NetworkEndpointGroup\n properties:\n network: ${internalNetwork.id}\n subnetwork: ${internalSubnetwork.id}\n zone: us-central1-a\n networkEndpointType: GCE_VM_IP\n # Hybrid connectivity NEG\n hybridNetworkEndpointGroup:\n type: gcp:compute:NetworkEndpointGroup\n properties:\n network: ${defaultNetwork.id}\n defaultPort: '90'\n zone: us-central1-a\n networkEndpointType: NON_GCP_PRIVATE_IP_PORT\n hybrid-endpoint:\n type: gcp:compute:NetworkEndpoint\n properties:\n networkEndpointGroup: ${hybridNetworkEndpointGroup.name}\n port: ${hybridNetworkEndpointGroup.defaultPort}\n ipAddress: 127.0.0.1\n # Backend service for Zonal NEG\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n backends:\n - group: ${defaultNetworkEndpointGroup.id}\n balancingMode: RATE\n maxRatePerEndpoint: 10\n healthChecks:\n - ${defaultHealthCheck.id}\n # Backgend service for Hybrid NEG\n hybridBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n backends:\n - group: ${hybridNetworkEndpointGroup.id}\n balancingMode: RATE\n maxRatePerEndpoint: 10\n healthChecks:\n - ${defaultHealthCheck.id}\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n timeoutSec: 1\n checkIntervalSec: 1\n tcpHealthCheck:\n port: '80'\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n - paths:\n - /hybrid\n service: ${hybridBackendService.id}\n defaultTargetHttpProxy:\n type: gcp:compute:TargetHttpProxy\n properties:\n description: a description\n urlMap: ${defaultURLMap.id}\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n target: ${defaultTargetHttpProxy.id}\n portRange: '80'\n```\n{{% /example %}}\n### Private Service Connect Google Apis\n{{% example %}}\n### Private Service Connect Google Apis\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n project: \"my-project-name\",\n autoCreateSubnetworks: false,\n}, {\n provider: google_beta,\n});\nconst vpcSubnetwork = new gcp.compute.Subnetwork(\"vpcSubnetwork\", {\n project: network.project,\n ipCidrRange: \"10.2.0.0/16\",\n region: \"us-central1\",\n network: network.id,\n privateIpGoogleAccess: true,\n}, {\n provider: google_beta,\n});\nconst defaultGlobalAddress = new gcp.compute.GlobalAddress(\"defaultGlobalAddress\", {\n project: network.project,\n addressType: \"INTERNAL\",\n purpose: \"PRIVATE_SERVICE_CONNECT\",\n network: network.id,\n address: \"100.100.100.106\",\n}, {\n provider: google_beta,\n});\nconst defaultGlobalForwardingRule = new gcp.compute.GlobalForwardingRule(\"defaultGlobalForwardingRule\", {\n project: network.project,\n target: \"all-apis\",\n network: network.id,\n ipAddress: defaultGlobalAddress.id,\n loadBalancingScheme: \"\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n project=\"my-project-name\",\n auto_create_subnetworks=False,\n opts=pulumi.ResourceOptions(provider=google_beta))\nvpc_subnetwork = gcp.compute.Subnetwork(\"vpcSubnetwork\",\n project=network.project,\n ip_cidr_range=\"10.2.0.0/16\",\n region=\"us-central1\",\n network=network.id,\n private_ip_google_access=True,\n opts=pulumi.ResourceOptions(provider=google_beta))\ndefault_global_address = gcp.compute.GlobalAddress(\"defaultGlobalAddress\",\n project=network.project,\n address_type=\"INTERNAL\",\n purpose=\"PRIVATE_SERVICE_CONNECT\",\n network=network.id,\n address=\"100.100.100.106\",\n opts=pulumi.ResourceOptions(provider=google_beta))\ndefault_global_forwarding_rule = gcp.compute.GlobalForwardingRule(\"defaultGlobalForwardingRule\",\n project=network.project,\n target=\"all-apis\",\n network=network.id,\n ip_address=default_global_address.id,\n load_balancing_scheme=\"\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Project = \"my-project-name\",\n AutoCreateSubnetworks = false,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var vpcSubnetwork = new Gcp.Compute.Subnetwork(\"vpcSubnetwork\", new()\n {\n Project = network.Project,\n IpCidrRange = \"10.2.0.0/16\",\n Region = \"us-central1\",\n Network = network.Id,\n PrivateIpGoogleAccess = true,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var defaultGlobalAddress = new Gcp.Compute.GlobalAddress(\"defaultGlobalAddress\", new()\n {\n Project = network.Project,\n AddressType = \"INTERNAL\",\n Purpose = \"PRIVATE_SERVICE_CONNECT\",\n Network = network.Id,\n Address = \"100.100.100.106\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var defaultGlobalForwardingRule = new Gcp.Compute.GlobalForwardingRule(\"defaultGlobalForwardingRule\", new()\n {\n Project = network.Project,\n Target = \"all-apis\",\n Network = network.Id,\n IpAddress = defaultGlobalAddress.Id,\n LoadBalancingScheme = \"\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSubnetwork(ctx, \"vpcSubnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tProject: network.Project,\n\t\t\tIpCidrRange: pulumi.String(\"10.2.0.0/16\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.ID(),\n\t\t\tPrivateIpGoogleAccess: pulumi.Bool(true),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultGlobalAddress, err := compute.NewGlobalAddress(ctx, \"defaultGlobalAddress\", \u0026compute.GlobalAddressArgs{\n\t\t\tProject: network.Project,\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"PRIVATE_SERVICE_CONNECT\"),\n\t\t\tNetwork: network.ID(),\n\t\t\tAddress: pulumi.String(\"100.100.100.106\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewGlobalForwardingRule(ctx, \"defaultGlobalForwardingRule\", \u0026compute.GlobalForwardingRuleArgs{\n\t\t\tProject: network.Project,\n\t\t\tTarget: pulumi.String(\"all-apis\"),\n\t\t\tNetwork: network.ID(),\n\t\t\tIpAddress: defaultGlobalAddress.ID(),\n\t\t\tLoadBalancingScheme: pulumi.String(\"\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\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 .project(\"my-project-name\")\n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var vpcSubnetwork = new Subnetwork(\"vpcSubnetwork\", SubnetworkArgs.builder() \n .project(network.project())\n .ipCidrRange(\"10.2.0.0/16\")\n .region(\"us-central1\")\n .network(network.id())\n .privateIpGoogleAccess(true)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalAddress = new GlobalAddress(\"defaultGlobalAddress\", GlobalAddressArgs.builder() \n .project(network.project())\n .addressType(\"INTERNAL\")\n .purpose(\"PRIVATE_SERVICE_CONNECT\")\n .network(network.id())\n .address(\"100.100.100.106\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .project(network.project())\n .target(\"all-apis\")\n .network(network.id())\n .ipAddress(defaultGlobalAddress.id())\n .loadBalancingScheme(\"\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n project: my-project-name\n autoCreateSubnetworks: false\n options:\n provider: ${[\"google-beta\"]}\n vpcSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n project: ${network.project}\n ipCidrRange: 10.2.0.0/16\n region: us-central1\n network: ${network.id}\n privateIpGoogleAccess: true\n options:\n provider: ${[\"google-beta\"]}\n defaultGlobalAddress:\n type: gcp:compute:GlobalAddress\n properties:\n project: ${network.project}\n addressType: INTERNAL\n purpose: PRIVATE_SERVICE_CONNECT\n network: ${network.id}\n address: 100.100.100.106\n options:\n provider: ${[\"google-beta\"]}\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n project: ${network.project}\n target: all-apis\n network: ${network.id}\n ipAddress: ${defaultGlobalAddress.id}\n loadBalancingScheme:\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGlobalForwardingRule can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/globalForwardingRule:GlobalForwardingRule default projects/{{project}}/global/forwardingRules/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/globalForwardingRule:GlobalForwardingRule default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/globalForwardingRule:GlobalForwardingRule default {{name}}\n```\n\n ", + "description": "Represents a GlobalForwardingRule resource. Global forwarding rules are\nused to forward traffic to the correct load balancer for HTTP load\nbalancing. Global forwarding rules can only be used for HTTP load\nbalancing.\n\nFor more information, see\nhttps://cloud.google.com/compute/docs/load-balancing/http/\n\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### External Ssl Proxy Lb Mig Backend\n\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.GlobalAddress;\nimport com.pulumi.tls.PrivateKey;\nimport com.pulumi.tls.PrivateKeyArgs;\nimport com.pulumi.tls.SelfSignedCert;\nimport com.pulumi.tls.SelfSignedCertArgs;\nimport com.pulumi.tls.inputs.SelfSignedCertSubjectArgs;\nimport com.pulumi.gcp.compute.SSLCertificate;\nimport com.pulumi.gcp.compute.SSLCertificateArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerNamedPortArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs;\nimport com.pulumi.gcp.compute.TargetSSLProxy;\nimport com.pulumi.gcp.compute.TargetSSLProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport com.pulumi.gcp.compute.Firewall;\nimport com.pulumi.gcp.compute.FirewallArgs;\nimport com.pulumi.gcp.compute.inputs.FirewallAllowArgs;\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 defaultNetwork = new Network(\"defaultNetwork\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .provider(google)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.1.0/24\")\n .region(\"us-central1\")\n .network(defaultNetwork.id())\n .build(), CustomResourceOptions.builder()\n .provider(google)\n .build());\n\n var defaultGlobalAddress = new GlobalAddress(\"defaultGlobalAddress\");\n\n var defaultPrivateKey = new PrivateKey(\"defaultPrivateKey\", PrivateKeyArgs.builder() \n .algorithm(\"RSA\")\n .rsaBits(2048)\n .build());\n\n var defaultSelfSignedCert = new SelfSignedCert(\"defaultSelfSignedCert\", SelfSignedCertArgs.builder() \n .keyAlgorithm(defaultPrivateKey.algorithm())\n .privateKeyPem(defaultPrivateKey.privateKeyPem())\n .validityPeriodHours(12)\n .earlyRenewalHours(3)\n .allowedUses( \n \"key_encipherment\",\n \"digital_signature\",\n \"server_auth\")\n .dnsNames(\"example.com\")\n .subject(SelfSignedCertSubjectArgs.builder()\n .commonName(\"example.com\")\n .organization(\"ACME Examples, Inc\")\n .build())\n .build());\n\n var defaultSSLCertificate = new SSLCertificate(\"defaultSSLCertificate\", SSLCertificateArgs.builder() \n .privateKey(defaultPrivateKey.privateKeyPem())\n .certificate(defaultSelfSignedCert.certPem())\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .timeoutSec(1)\n .checkIntervalSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"443\")\n .build())\n .build());\n\n var defaultInstanceTemplate = new InstanceTemplate(\"defaultInstanceTemplate\", InstanceTemplateArgs.builder() \n .machineType(\"e2-small\")\n .tags(\"allow-health-check\")\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(defaultNetwork.id())\n .subnetwork(defaultSubnetwork.id())\n .accessConfigs()\n .build())\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(\"debian-cloud/debian-10\")\n .autoDelete(true)\n .boot(true)\n .build())\n .metadata(Map.of(\"startup-script\", \"\"\"\n#! /bin/bash\nset -euo pipefail\nexport DEBIAN_FRONTEND=noninteractive\nsudo apt-get update\nsudo apt-get install -y apache2 jq\nsudo a2ensite default-ssl\nsudo a2enmod ssl\nsudo service apache2 restart\nNAME=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/hostname\")\nIP=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip\")\nMETADATA=$(curl -f -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True\" | jq 'del(.[\"startup-script\"])')\ncat \u003c\u003cEOF \u003e /var/www/html/index.html\n\u003ch1\u003eSSL Load Balancer\u003c/h1\u003e\n\u003cpre\u003e\nName: $NAME\nIP: $IP\nMetadata: $METADATA\n\u003c/pre\u003e\nEOF\n \"\"\"))\n .build(), CustomResourceOptions.builder()\n .provider(google)\n .build());\n\n var defaultInstanceGroupManager = new InstanceGroupManager(\"defaultInstanceGroupManager\", InstanceGroupManagerArgs.builder() \n .zone(\"us-central1-c\")\n .namedPorts(InstanceGroupManagerNamedPortArgs.builder()\n .name(\"tcp\")\n .port(443)\n .build())\n .versions(InstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(defaultInstanceTemplate.id())\n .name(\"primary\")\n .build())\n .baseInstanceName(\"vm\")\n .targetSize(2)\n .build(), CustomResourceOptions.builder()\n .provider(google)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .protocol(\"SSL\")\n .portName(\"tcp\")\n .loadBalancingScheme(\"EXTERNAL\")\n .timeoutSec(10)\n .healthChecks(defaultHealthCheck.id())\n .backends(BackendServiceBackendArgs.builder()\n .group(defaultInstanceGroupManager.instanceGroup())\n .balancingMode(\"UTILIZATION\")\n .maxUtilization(1)\n .capacityScaler(1)\n .build())\n .build());\n\n var defaultTargetSSLProxy = new TargetSSLProxy(\"defaultTargetSSLProxy\", TargetSSLProxyArgs.builder() \n .backendService(defaultBackendService.id())\n .sslCertificates(defaultSSLCertificate.id())\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .ipProtocol(\"TCP\")\n .loadBalancingScheme(\"EXTERNAL\")\n .portRange(\"443\")\n .target(defaultTargetSSLProxy.id())\n .ipAddress(defaultGlobalAddress.id())\n .build(), CustomResourceOptions.builder()\n .provider(google)\n .build());\n\n var defaultFirewall = new Firewall(\"defaultFirewall\", FirewallArgs.builder() \n .direction(\"INGRESS\")\n .network(defaultNetwork.id())\n .sourceRanges( \n \"130.211.0.0/22\",\n \"35.191.0.0/16\")\n .allows(FirewallAllowArgs.builder()\n .protocol(\"tcp\")\n .build())\n .targetTags(\"allow-health-check\")\n .build(), CustomResourceOptions.builder()\n .provider(google)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # External SSL proxy load balancer with managed instance group backend\n\n # VPC\n defaultNetwork:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n options:\n provider: ${google}\n # backend subnet\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.1.0/24\n region: us-central1\n network: ${defaultNetwork.id}\n options:\n provider: ${google}\n # reserved IP address\n defaultGlobalAddress:\n type: gcp:compute:GlobalAddress\n # Self-signed regional SSL certificate for testing\n defaultPrivateKey:\n type: tls:PrivateKey\n properties:\n algorithm: RSA\n rsaBits: 2048\n defaultSelfSignedCert:\n type: tls:SelfSignedCert\n properties:\n keyAlgorithm: ${defaultPrivateKey.algorithm}\n privateKeyPem: ${defaultPrivateKey.privateKeyPem}\n # Certificate expires after 12 hours.\n validityPeriodHours: 12\n # Generate a new certificate if Terraform is run within three\n # # hours of the certificate's expiration time.\n earlyRenewalHours: 3\n # Reasonable set of uses for a server SSL certificate.\n allowedUses:\n - key_encipherment\n - digital_signature\n - server_auth\n dnsNames:\n - example.com\n subject:\n commonName: example.com\n organization: ACME Examples, Inc\n defaultSSLCertificate:\n type: gcp:compute:SSLCertificate\n properties:\n privateKey: ${defaultPrivateKey.privateKeyPem}\n certificate: ${defaultSelfSignedCert.certPem}\n defaultTargetSSLProxy:\n type: gcp:compute:TargetSSLProxy\n properties:\n backendService: ${defaultBackendService.id}\n sslCertificates:\n - ${defaultSSLCertificate.id}\n # forwarding rule\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n ipProtocol: TCP\n loadBalancingScheme: EXTERNAL\n portRange: '443'\n target: ${defaultTargetSSLProxy.id}\n ipAddress: ${defaultGlobalAddress.id}\n options:\n provider: ${google}\n # backend service\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n protocol: SSL\n portName: tcp\n loadBalancingScheme: EXTERNAL\n timeoutSec: 10\n healthChecks:\n - ${defaultHealthCheck.id}\n backends:\n - group: ${defaultInstanceGroupManager.instanceGroup}\n balancingMode: UTILIZATION\n maxUtilization: 1\n capacityScaler: 1\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n timeoutSec: 1\n checkIntervalSec: 1\n tcpHealthCheck:\n port: '443'\n # instance template\n defaultInstanceTemplate:\n type: gcp:compute:InstanceTemplate\n properties:\n machineType: e2-small\n tags:\n - allow-health-check\n networkInterfaces:\n - network: ${defaultNetwork.id}\n subnetwork: ${defaultSubnetwork.id}\n accessConfigs:\n - {}\n disks:\n - sourceImage: debian-cloud/debian-10\n autoDelete: true\n boot: true\n # install nginx and serve a simple web page\n metadata:\n startup-script: |\n #! /bin/bash\n set -euo pipefail\n export DEBIAN_FRONTEND=noninteractive\n sudo apt-get update\n sudo apt-get install -y apache2 jq\n sudo a2ensite default-ssl\n sudo a2enmod ssl\n sudo service apache2 restart\n NAME=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/hostname\")\n IP=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip\")\n METADATA=$(curl -f -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True\" | jq 'del(.[\"startup-script\"])')\n cat \u003c\u003cEOF \u003e /var/www/html/index.html\n \u003ch1\u003eSSL Load Balancer\u003c/h1\u003e\n \u003cpre\u003e\n Name: $NAME\n IP: $IP\n Metadata: $METADATA\n \u003c/pre\u003e\n EOF\n options:\n provider: ${google}\n # MIG\n defaultInstanceGroupManager:\n type: gcp:compute:InstanceGroupManager\n properties:\n zone: us-central1-c\n namedPorts:\n - name: tcp\n port: 443\n versions:\n - instanceTemplate: ${defaultInstanceTemplate.id}\n name: primary\n baseInstanceName: vm\n targetSize: 2\n options:\n provider: ${google}\n # allow access from health check ranges\n defaultFirewall:\n type: gcp:compute:Firewall\n properties:\n direction: INGRESS\n network: ${defaultNetwork.id}\n sourceRanges:\n - 130.211.0.0/22\n - 35.191.0.0/16\n allows:\n - protocol: tcp\n targetTags:\n - allow-health-check\n options:\n provider: ${google}\n```\n{{% /example %}}\n{{% example %}}\n### External Tcp Proxy Lb Mig Backend\n\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.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerNamedPortArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs;\nimport com.pulumi.gcp.compute.TargetTCPProxy;\nimport com.pulumi.gcp.compute.TargetTCPProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport com.pulumi.gcp.compute.Firewall;\nimport com.pulumi.gcp.compute.FirewallArgs;\nimport com.pulumi.gcp.compute.inputs.FirewallAllowArgs;\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 defaultNetwork = new Network(\"defaultNetwork\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.1.0/24\")\n .region(\"us-central1\")\n .network(defaultNetwork.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalAddress = new GlobalAddress(\"defaultGlobalAddress\", GlobalAddressArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .timeoutSec(1)\n .checkIntervalSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"80\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultInstanceTemplate = new InstanceTemplate(\"defaultInstanceTemplate\", InstanceTemplateArgs.builder() \n .machineType(\"e2-small\")\n .tags(\"allow-health-check\")\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(defaultNetwork.id())\n .subnetwork(defaultSubnetwork.id())\n .accessConfigs()\n .build())\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(\"debian-cloud/debian-10\")\n .autoDelete(true)\n .boot(true)\n .build())\n .metadata(Map.of(\"startup-script\", \"\"\"\n#! /bin/bash\nset -euo pipefail\nexport DEBIAN_FRONTEND=noninteractive\napt-get update\napt-get install -y nginx-light jq\nNAME=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/hostname\")\nIP=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip\")\nMETADATA=$(curl -f -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True\" | jq 'del(.[\"startup-script\"])')\ncat \u003c\u003cEOF \u003e /var/www/html/index.html\n\u003cpre\u003e\nName: $NAME\nIP: $IP\nMetadata: $METADATA\n\u003c/pre\u003e\nEOF\n \"\"\"))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultInstanceGroupManager = new InstanceGroupManager(\"defaultInstanceGroupManager\", InstanceGroupManagerArgs.builder() \n .zone(\"us-central1-c\")\n .namedPorts(InstanceGroupManagerNamedPortArgs.builder()\n .name(\"tcp\")\n .port(80)\n .build())\n .versions(InstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(defaultInstanceTemplate.id())\n .name(\"primary\")\n .build())\n .baseInstanceName(\"vm\")\n .targetSize(2)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .protocol(\"TCP\")\n .portName(\"tcp\")\n .loadBalancingScheme(\"EXTERNAL\")\n .timeoutSec(10)\n .healthChecks(defaultHealthCheck.id())\n .backends(BackendServiceBackendArgs.builder()\n .group(defaultInstanceGroupManager.instanceGroup())\n .balancingMode(\"UTILIZATION\")\n .maxUtilization(1)\n .capacityScaler(1)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultTargetTCPProxy = new TargetTCPProxy(\"defaultTargetTCPProxy\", TargetTCPProxyArgs.builder() \n .backendService(defaultBackendService.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .ipProtocol(\"TCP\")\n .loadBalancingScheme(\"EXTERNAL\")\n .portRange(\"110\")\n .target(defaultTargetTCPProxy.id())\n .ipAddress(defaultGlobalAddress.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultFirewall = new Firewall(\"defaultFirewall\", FirewallArgs.builder() \n .direction(\"INGRESS\")\n .network(defaultNetwork.id())\n .sourceRanges( \n \"130.211.0.0/22\",\n \"35.191.0.0/16\")\n .allows(FirewallAllowArgs.builder()\n .protocol(\"tcp\")\n .build())\n .targetTags(\"allow-health-check\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # External TCP proxy load balancer with managed instance group backend\n\n # VPC\n defaultNetwork:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n options:\n provider: ${[\"google-beta\"]}\n # backend subnet\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.1.0/24\n region: us-central1\n network: ${defaultNetwork.id}\n options:\n provider: ${[\"google-beta\"]}\n # reserved IP address\n defaultGlobalAddress:\n type: gcp:compute:GlobalAddress\n options:\n provider: ${[\"google-beta\"]}\n # forwarding rule\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n ipProtocol: TCP\n loadBalancingScheme: EXTERNAL\n portRange: '110'\n target: ${defaultTargetTCPProxy.id}\n ipAddress: ${defaultGlobalAddress.id}\n options:\n provider: ${[\"google-beta\"]}\n defaultTargetTCPProxy:\n type: gcp:compute:TargetTCPProxy\n properties:\n backendService: ${defaultBackendService.id}\n options:\n provider: ${[\"google-beta\"]}\n # backend service\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n protocol: TCP\n portName: tcp\n loadBalancingScheme: EXTERNAL\n timeoutSec: 10\n healthChecks:\n - ${defaultHealthCheck.id}\n backends:\n - group: ${defaultInstanceGroupManager.instanceGroup}\n balancingMode: UTILIZATION\n maxUtilization: 1\n capacityScaler: 1\n options:\n provider: ${[\"google-beta\"]}\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n timeoutSec: 1\n checkIntervalSec: 1\n tcpHealthCheck:\n port: '80'\n options:\n provider: ${[\"google-beta\"]}\n # instance template\n defaultInstanceTemplate:\n type: gcp:compute:InstanceTemplate\n properties:\n machineType: e2-small\n tags:\n - allow-health-check\n networkInterfaces:\n - network: ${defaultNetwork.id}\n subnetwork: ${defaultSubnetwork.id}\n accessConfigs:\n - {}\n disks:\n - sourceImage: debian-cloud/debian-10\n autoDelete: true\n boot: true\n # install nginx and serve a simple web page\n metadata:\n startup-script: |\n #! /bin/bash\n set -euo pipefail\n export DEBIAN_FRONTEND=noninteractive\n apt-get update\n apt-get install -y nginx-light jq\n NAME=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/hostname\")\n IP=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip\")\n METADATA=$(curl -f -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True\" | jq 'del(.[\"startup-script\"])')\n cat \u003c\u003cEOF \u003e /var/www/html/index.html\n \u003cpre\u003e\n Name: $NAME\n IP: $IP\n Metadata: $METADATA\n \u003c/pre\u003e\n EOF\n options:\n provider: ${[\"google-beta\"]}\n # MIG\n defaultInstanceGroupManager:\n type: gcp:compute:InstanceGroupManager\n properties:\n zone: us-central1-c\n namedPorts:\n - name: tcp\n port: 80\n versions:\n - instanceTemplate: ${defaultInstanceTemplate.id}\n name: primary\n baseInstanceName: vm\n targetSize: 2\n options:\n provider: ${[\"google-beta\"]}\n # allow access from health check ranges\n defaultFirewall:\n type: gcp:compute:Firewall\n properties:\n direction: INGRESS\n network: ${defaultNetwork.id}\n sourceRanges:\n - 130.211.0.0/22\n - 35.191.0.0/16\n allows:\n - protocol: tcp\n targetTags:\n - allow-health-check\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### External Http Lb Mig Backend Custom Header\n\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.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckHttpHealthCheckArgs;\nimport com.pulumi.gcp.compute.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerNamedPortArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs;\nimport com.pulumi.gcp.compute.URLMap;\nimport com.pulumi.gcp.compute.URLMapArgs;\nimport com.pulumi.gcp.compute.TargetHttpProxy;\nimport com.pulumi.gcp.compute.TargetHttpProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport com.pulumi.gcp.compute.Firewall;\nimport com.pulumi.gcp.compute.FirewallArgs;\nimport com.pulumi.gcp.compute.inputs.FirewallAllowArgs;\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 defaultNetwork = new Network(\"defaultNetwork\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.1.0/24\")\n .region(\"us-central1\")\n .network(defaultNetwork.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalAddress = new GlobalAddress(\"defaultGlobalAddress\", GlobalAddressArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .httpHealthCheck(HealthCheckHttpHealthCheckArgs.builder()\n .portSpecification(\"USE_SERVING_PORT\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultInstanceTemplate = new InstanceTemplate(\"defaultInstanceTemplate\", InstanceTemplateArgs.builder() \n .machineType(\"e2-small\")\n .tags(\"allow-health-check\")\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(defaultNetwork.id())\n .subnetwork(defaultSubnetwork.id())\n .accessConfigs()\n .build())\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(\"debian-cloud/debian-10\")\n .autoDelete(true)\n .boot(true)\n .build())\n .metadata(Map.of(\"startup-script\", \"\"\"\n#! /bin/bash\nset -euo pipefail\n\nexport DEBIAN_FRONTEND=noninteractive\napt-get update\napt-get install -y nginx-light jq\n\nNAME=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/hostname\")\nIP=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip\")\nMETADATA=$(curl -f -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True\" | jq 'del(.[\"startup-script\"])')\n\ncat \u003c\u003cEOF \u003e /var/www/html/index.html\n\u003cpre\u003e\nName: $NAME\nIP: $IP\nMetadata: $METADATA\n\u003c/pre\u003e\nEOF\n \"\"\"))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultInstanceGroupManager = new InstanceGroupManager(\"defaultInstanceGroupManager\", InstanceGroupManagerArgs.builder() \n .zone(\"us-central1-c\")\n .namedPorts(InstanceGroupManagerNamedPortArgs.builder()\n .name(\"http\")\n .port(8080)\n .build())\n .versions(InstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(defaultInstanceTemplate.id())\n .name(\"primary\")\n .build())\n .baseInstanceName(\"vm\")\n .targetSize(2)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .protocol(\"HTTP\")\n .portName(\"my-port\")\n .loadBalancingScheme(\"EXTERNAL\")\n .timeoutSec(10)\n .enableCdn(true)\n .customRequestHeaders(\"X-Client-Geo-Location: {client_region_subdivision}, {client_city}\")\n .customResponseHeaders(\"X-Cache-Hit: {cdn_cache_status}\")\n .healthChecks(defaultHealthCheck.id())\n .backends(BackendServiceBackendArgs.builder()\n .group(defaultInstanceGroupManager.instanceGroup())\n .balancingMode(\"UTILIZATION\")\n .capacityScaler(1)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .defaultService(defaultBackendService.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultTargetHttpProxy = new TargetHttpProxy(\"defaultTargetHttpProxy\", TargetHttpProxyArgs.builder() \n .urlMap(defaultURLMap.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .ipProtocol(\"TCP\")\n .loadBalancingScheme(\"EXTERNAL\")\n .portRange(\"80\")\n .target(defaultTargetHttpProxy.id())\n .ipAddress(defaultGlobalAddress.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultFirewall = new Firewall(\"defaultFirewall\", FirewallArgs.builder() \n .direction(\"INGRESS\")\n .network(defaultNetwork.id())\n .sourceRanges( \n \"130.211.0.0/22\",\n \"35.191.0.0/16\")\n .allows(FirewallAllowArgs.builder()\n .protocol(\"tcp\")\n .build())\n .targetTags(\"allow-health-check\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # External HTTP load balancer with a CDN-enabled managed instance group backend\n # and custom request and response headers\n\n # VPC\n defaultNetwork:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n options:\n provider: ${[\"google-beta\"]}\n # backend subnet\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.1.0/24\n region: us-central1\n network: ${defaultNetwork.id}\n options:\n provider: ${[\"google-beta\"]}\n # reserved IP address\n defaultGlobalAddress:\n type: gcp:compute:GlobalAddress\n options:\n provider: ${[\"google-beta\"]}\n # forwarding rule\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n ipProtocol: TCP\n loadBalancingScheme: EXTERNAL\n portRange: '80'\n target: ${defaultTargetHttpProxy.id}\n ipAddress: ${defaultGlobalAddress.id}\n options:\n provider: ${[\"google-beta\"]}\n # http proxy\n defaultTargetHttpProxy:\n type: gcp:compute:TargetHttpProxy\n properties:\n urlMap: ${defaultURLMap.id}\n options:\n provider: ${[\"google-beta\"]}\n # url map\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n defaultService: ${defaultBackendService.id}\n options:\n provider: ${[\"google-beta\"]}\n # backend service with custom request and response headers\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n protocol: HTTP\n portName: my-port\n loadBalancingScheme: EXTERNAL\n timeoutSec: 10\n enableCdn: true\n customRequestHeaders:\n - 'X-Client-Geo-Location: {client_region_subdivision}, {client_city}'\n customResponseHeaders:\n - 'X-Cache-Hit: {cdn_cache_status}'\n healthChecks:\n - ${defaultHealthCheck.id}\n backends:\n - group: ${defaultInstanceGroupManager.instanceGroup}\n balancingMode: UTILIZATION\n capacityScaler: 1\n options:\n provider: ${[\"google-beta\"]}\n # instance template\n defaultInstanceTemplate:\n type: gcp:compute:InstanceTemplate\n properties:\n machineType: e2-small\n tags:\n - allow-health-check\n networkInterfaces:\n - network: ${defaultNetwork.id}\n subnetwork: ${defaultSubnetwork.id}\n accessConfigs:\n - {}\n disks:\n - sourceImage: debian-cloud/debian-10\n autoDelete: true\n boot: true\n # install nginx and serve a simple web page\n metadata:\n startup-script: |\n #! /bin/bash\n set -euo pipefail\n\n export DEBIAN_FRONTEND=noninteractive\n apt-get update\n apt-get install -y nginx-light jq\n\n NAME=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/hostname\")\n IP=$(curl -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/network-interfaces/0/ip\")\n METADATA=$(curl -f -H \"Metadata-Flavor: Google\" \"http://metadata.google.internal/computeMetadata/v1/instance/attributes/?recursive=True\" | jq 'del(.[\"startup-script\"])')\n\n cat \u003c\u003cEOF \u003e /var/www/html/index.html\n \u003cpre\u003e\n Name: $NAME\n IP: $IP\n Metadata: $METADATA\n \u003c/pre\u003e\n EOF\n options:\n provider: ${[\"google-beta\"]}\n # health check\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n httpHealthCheck:\n portSpecification: USE_SERVING_PORT\n options:\n provider: ${[\"google-beta\"]}\n # MIG\n defaultInstanceGroupManager:\n type: gcp:compute:InstanceGroupManager\n properties:\n zone: us-central1-c\n namedPorts:\n - name: http\n port: 8080\n versions:\n - instanceTemplate: ${defaultInstanceTemplate.id}\n name: primary\n baseInstanceName: vm\n targetSize: 2\n options:\n provider: ${[\"google-beta\"]}\n # allow access from health check ranges\n defaultFirewall:\n type: gcp:compute:Firewall\n properties:\n direction: INGRESS\n network: ${defaultNetwork.id}\n sourceRanges:\n - 130.211.0.0/22\n - 35.191.0.0/16\n allows:\n - protocol: tcp\n targetTags:\n - allow-health-check\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Global Forwarding Rule Http\n\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 com.pulumi.gcp.compute.TargetHttpProxy;\nimport com.pulumi.gcp.compute.TargetHttpProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultTargetHttpProxy = new TargetHttpProxy(\"defaultTargetHttpProxy\", TargetHttpProxyArgs.builder() \n .description(\"a description\")\n .urlMap(defaultURLMap.id())\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .target(defaultTargetHttpProxy.id())\n .portRange(\"80\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n target: ${defaultTargetHttpProxy.id}\n portRange: '80'\n defaultTargetHttpProxy:\n type: gcp:compute:TargetHttpProxy\n properties:\n description: a description\n urlMap: ${defaultURLMap.id}\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n{{% /example %}}\n{{% example %}}\n### Global Forwarding Rule Internal\n\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.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs;\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.TargetHttpProxy;\nimport com.pulumi.gcp.compute.TargetHttpProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport com.pulumi.gcp.compute.inputs.GlobalForwardingRuleMetadataFilterArgs;\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 debianImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var instanceTemplate = new InstanceTemplate(\"instanceTemplate\", InstanceTemplateArgs.builder() \n .machineType(\"e2-medium\")\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(debianImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .autoDelete(true)\n .boot(true)\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var igm = new InstanceGroupManager(\"igm\", InstanceGroupManagerArgs.builder() \n .versions(InstanceGroupManagerVersionArgs.builder()\n .instanceTemplate(instanceTemplate.id())\n .name(\"primary\")\n .build())\n .baseInstanceName(\"internal-glb\")\n .zone(\"us-central1-f\")\n .targetSize(1)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .checkIntervalSec(1)\n .timeoutSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"80\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .backends(BackendServiceBackendArgs.builder()\n .group(igm.instanceGroup())\n .balancingMode(\"RATE\")\n .capacityScaler(0.4)\n .maxRatePerInstance(50)\n .build())\n .healthChecks(defaultHealthCheck.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultTargetHttpProxy = new TargetHttpProxy(\"defaultTargetHttpProxy\", TargetHttpProxyArgs.builder() \n .description(\"a description\")\n .urlMap(defaultURLMap.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .target(defaultTargetHttpProxy.id())\n .portRange(\"80\")\n .loadBalancingScheme(\"INTERNAL_SELF_MANAGED\")\n .ipAddress(\"0.0.0.0\")\n .metadataFilters(GlobalForwardingRuleMetadataFilterArgs.builder()\n .filterMatchCriteria(\"MATCH_ANY\")\n .filterLabels(GlobalForwardingRuleMetadataFilterFilterLabelArgs.builder()\n .name(\"PLANET\")\n .value(\"MARS\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n target: ${defaultTargetHttpProxy.id}\n portRange: '80'\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n ipAddress: 0.0.0.0\n metadataFilters:\n - filterMatchCriteria: MATCH_ANY\n filterLabels:\n - name: PLANET\n value: MARS\n options:\n provider: ${[\"google-beta\"]}\n defaultTargetHttpProxy:\n type: gcp:compute:TargetHttpProxy\n properties:\n description: a description\n urlMap: ${defaultURLMap.id}\n options:\n provider: ${[\"google-beta\"]}\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n options:\n provider: ${[\"google-beta\"]}\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n loadBalancingScheme: INTERNAL_SELF_MANAGED\n backends:\n - group: ${igm.instanceGroup}\n balancingMode: RATE\n capacityScaler: 0.4\n maxRatePerInstance: 50\n healthChecks:\n - ${defaultHealthCheck.id}\n options:\n provider: ${[\"google-beta\"]}\n igm:\n type: gcp:compute:InstanceGroupManager\n properties:\n versions:\n - instanceTemplate: ${instanceTemplate.id}\n name: primary\n baseInstanceName: internal-glb\n zone: us-central1-f\n targetSize: 1\n options:\n provider: ${[\"google-beta\"]}\n instanceTemplate:\n type: gcp:compute:InstanceTemplate\n properties:\n machineType: e2-medium\n networkInterfaces:\n - network: default\n disks:\n - sourceImage: ${debianImage.selfLink}\n autoDelete: true\n boot: true\n options:\n provider: ${[\"google-beta\"]}\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n checkIntervalSec: 1\n timeoutSec: 1\n tcpHealthCheck:\n port: '80'\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n debianImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% example %}}\n### Global Forwarding Rule External Managed\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultBackendService = new gcp.compute.BackendService(\"defaultBackendService\", {\n portName: \"http\",\n protocol: \"HTTP\",\n timeoutSec: 10,\n loadBalancingScheme: \"EXTERNAL_MANAGED\",\n});\nconst defaultURLMap = new gcp.compute.URLMap(\"defaultURLMap\", {\n description: \"a description\",\n defaultService: defaultBackendService.id,\n hostRules: [{\n hosts: [\"mysite.com\"],\n pathMatcher: \"allpaths\",\n }],\n pathMatchers: [{\n name: \"allpaths\",\n defaultService: defaultBackendService.id,\n pathRules: [{\n paths: [\"/*\"],\n service: defaultBackendService.id,\n }],\n }],\n});\nconst defaultTargetHttpProxy = new gcp.compute.TargetHttpProxy(\"defaultTargetHttpProxy\", {\n description: \"a description\",\n urlMap: defaultURLMap.id,\n});\nconst defaultGlobalForwardingRule = new gcp.compute.GlobalForwardingRule(\"defaultGlobalForwardingRule\", {\n target: defaultTargetHttpProxy.id,\n portRange: \"80\",\n loadBalancingScheme: \"EXTERNAL_MANAGED\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_backend_service = gcp.compute.BackendService(\"defaultBackendService\",\n port_name=\"http\",\n protocol=\"HTTP\",\n timeout_sec=10,\n load_balancing_scheme=\"EXTERNAL_MANAGED\")\ndefault_url_map = gcp.compute.URLMap(\"defaultURLMap\",\n description=\"a description\",\n default_service=default_backend_service.id,\n host_rules=[gcp.compute.URLMapHostRuleArgs(\n hosts=[\"mysite.com\"],\n path_matcher=\"allpaths\",\n )],\n path_matchers=[gcp.compute.URLMapPathMatcherArgs(\n name=\"allpaths\",\n default_service=default_backend_service.id,\n path_rules=[gcp.compute.URLMapPathMatcherPathRuleArgs(\n paths=[\"/*\"],\n service=default_backend_service.id,\n )],\n )])\ndefault_target_http_proxy = gcp.compute.TargetHttpProxy(\"defaultTargetHttpProxy\",\n description=\"a description\",\n url_map=default_url_map.id)\ndefault_global_forwarding_rule = gcp.compute.GlobalForwardingRule(\"defaultGlobalForwardingRule\",\n target=default_target_http_proxy.id,\n port_range=\"80\",\n load_balancing_scheme=\"EXTERNAL_MANAGED\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultBackendService = new Gcp.Compute.BackendService(\"defaultBackendService\", new()\n {\n PortName = \"http\",\n Protocol = \"HTTP\",\n TimeoutSec = 10,\n LoadBalancingScheme = \"EXTERNAL_MANAGED\",\n });\n\n var defaultURLMap = new Gcp.Compute.URLMap(\"defaultURLMap\", new()\n {\n Description = \"a description\",\n DefaultService = defaultBackendService.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 = defaultBackendService.Id,\n PathRules = new[]\n {\n new Gcp.Compute.Inputs.URLMapPathMatcherPathRuleArgs\n {\n Paths = new[]\n {\n \"/*\",\n },\n Service = defaultBackendService.Id,\n },\n },\n },\n },\n });\n\n var defaultTargetHttpProxy = new Gcp.Compute.TargetHttpProxy(\"defaultTargetHttpProxy\", new()\n {\n Description = \"a description\",\n UrlMap = defaultURLMap.Id,\n });\n\n var defaultGlobalForwardingRule = new Gcp.Compute.GlobalForwardingRule(\"defaultGlobalForwardingRule\", new()\n {\n Target = defaultTargetHttpProxy.Id,\n PortRange = \"80\",\n LoadBalancingScheme = \"EXTERNAL_MANAGED\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdefaultBackendService, err := compute.NewBackendService(ctx, \"defaultBackendService\", \u0026compute.BackendServiceArgs{\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})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultURLMap, err := compute.NewURLMap(ctx, \"defaultURLMap\", \u0026compute.URLMapArgs{\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tDefaultService: defaultBackendService.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: defaultBackendService.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(\"/*\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tService: defaultBackendService.ID(),\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\tdefaultTargetHttpProxy, err := compute.NewTargetHttpProxy(ctx, \"defaultTargetHttpProxy\", \u0026compute.TargetHttpProxyArgs{\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tUrlMap: defaultURLMap.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewGlobalForwardingRule(ctx, \"defaultGlobalForwardingRule\", \u0026compute.GlobalForwardingRuleArgs{\n\t\t\tTarget: defaultTargetHttpProxy.ID(),\n\t\t\tPortRange: pulumi.String(\"80\"),\n\t\t\tLoadBalancingScheme: pulumi.String(\"EXTERNAL_MANAGED\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.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.TargetHttpProxy;\nimport com.pulumi.gcp.compute.TargetHttpProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .loadBalancingScheme(\"EXTERNAL_MANAGED\")\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultTargetHttpProxy = new TargetHttpProxy(\"defaultTargetHttpProxy\", TargetHttpProxyArgs.builder() \n .description(\"a description\")\n .urlMap(defaultURLMap.id())\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .target(defaultTargetHttpProxy.id())\n .portRange(\"80\")\n .loadBalancingScheme(\"EXTERNAL_MANAGED\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n target: ${defaultTargetHttpProxy.id}\n portRange: '80'\n loadBalancingScheme: EXTERNAL_MANAGED\n defaultTargetHttpProxy:\n type: gcp:compute:TargetHttpProxy\n properties:\n description: a description\n urlMap: ${defaultURLMap.id}\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n loadBalancingScheme: EXTERNAL_MANAGED\n```\n{{% /example %}}\n{{% example %}}\n### Global Forwarding Rule Hybrid\n\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.NetworkEndpointGroup;\nimport com.pulumi.gcp.compute.NetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.NetworkEndpoint;\nimport com.pulumi.gcp.compute.NetworkEndpointArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs;\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.TargetHttpProxy;\nimport com.pulumi.gcp.compute.TargetHttpProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 config = ctx.config();\n final var subnetworkCidr = config.get(\"subnetworkCidr\").orElse(\"10.0.0.0/24\");\n var defaultNetwork = new Network(\"defaultNetwork\");\n\n var internalNetwork = new Network(\"internalNetwork\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var internalSubnetwork = new Subnetwork(\"internalSubnetwork\", SubnetworkArgs.builder() \n .network(internalNetwork.id())\n .ipCidrRange(subnetworkCidr)\n .region(\"us-central1\")\n .privateIpGoogleAccess(true)\n .build());\n\n var defaultNetworkEndpointGroup = new NetworkEndpointGroup(\"defaultNetworkEndpointGroup\", NetworkEndpointGroupArgs.builder() \n .network(defaultNetwork.id())\n .defaultPort(\"90\")\n .zone(\"us-central1-a\")\n .networkEndpointType(\"GCE_VM_IP_PORT\")\n .build());\n\n var internalNetworkEndpointGroup = new NetworkEndpointGroup(\"internalNetworkEndpointGroup\", NetworkEndpointGroupArgs.builder() \n .network(internalNetwork.id())\n .subnetwork(internalSubnetwork.id())\n .zone(\"us-central1-a\")\n .networkEndpointType(\"GCE_VM_IP\")\n .build());\n\n var hybridNetworkEndpointGroup = new NetworkEndpointGroup(\"hybridNetworkEndpointGroup\", NetworkEndpointGroupArgs.builder() \n .network(defaultNetwork.id())\n .defaultPort(\"90\")\n .zone(\"us-central1-a\")\n .networkEndpointType(\"NON_GCP_PRIVATE_IP_PORT\")\n .build());\n\n var hybrid_endpoint = new NetworkEndpoint(\"hybrid-endpoint\", NetworkEndpointArgs.builder() \n .networkEndpointGroup(hybridNetworkEndpointGroup.name())\n .port(hybridNetworkEndpointGroup.defaultPort())\n .ipAddress(\"127.0.0.1\")\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .timeoutSec(1)\n .checkIntervalSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"80\")\n .build())\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .backends(BackendServiceBackendArgs.builder()\n .group(defaultNetworkEndpointGroup.id())\n .balancingMode(\"RATE\")\n .maxRatePerEndpoint(10)\n .build())\n .healthChecks(defaultHealthCheck.id())\n .build());\n\n var hybridBackendService = new BackendService(\"hybridBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .backends(BackendServiceBackendArgs.builder()\n .group(hybridNetworkEndpointGroup.id())\n .balancingMode(\"RATE\")\n .maxRatePerEndpoint(10)\n .build())\n .healthChecks(defaultHealthCheck.id())\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules( \n URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build(),\n URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/hybrid\")\n .service(hybridBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultTargetHttpProxy = new TargetHttpProxy(\"defaultTargetHttpProxy\", TargetHttpProxyArgs.builder() \n .description(\"a description\")\n .urlMap(defaultURLMap.id())\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .target(defaultTargetHttpProxy.id())\n .portRange(\"80\")\n .build());\n\n }\n}\n```\n```yaml\nconfiguration:\n # Roughly mirrors https://cloud.google.com/load-balancing/docs/https/setting-up-ext-https-hybrid\n subnetworkCidr:\n type: string\n default: 10.0.0.0/24\nresources:\n defaultNetwork:\n type: gcp:compute:Network\n internalNetwork:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n internalSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n network: ${internalNetwork.id}\n ipCidrRange: ${subnetworkCidr}\n region: us-central1\n privateIpGoogleAccess: true\n # Zonal NEG with GCE_VM_IP_PORT\n defaultNetworkEndpointGroup:\n type: gcp:compute:NetworkEndpointGroup\n properties:\n network: ${defaultNetwork.id}\n defaultPort: '90'\n zone: us-central1-a\n networkEndpointType: GCE_VM_IP_PORT\n # Zonal NEG with GCE_VM_IP\n internalNetworkEndpointGroup:\n type: gcp:compute:NetworkEndpointGroup\n properties:\n network: ${internalNetwork.id}\n subnetwork: ${internalSubnetwork.id}\n zone: us-central1-a\n networkEndpointType: GCE_VM_IP\n # Hybrid connectivity NEG\n hybridNetworkEndpointGroup:\n type: gcp:compute:NetworkEndpointGroup\n properties:\n network: ${defaultNetwork.id}\n defaultPort: '90'\n zone: us-central1-a\n networkEndpointType: NON_GCP_PRIVATE_IP_PORT\n hybrid-endpoint:\n type: gcp:compute:NetworkEndpoint\n properties:\n networkEndpointGroup: ${hybridNetworkEndpointGroup.name}\n port: ${hybridNetworkEndpointGroup.defaultPort}\n ipAddress: 127.0.0.1\n # Backend service for Zonal NEG\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n backends:\n - group: ${defaultNetworkEndpointGroup.id}\n balancingMode: RATE\n maxRatePerEndpoint: 10\n healthChecks:\n - ${defaultHealthCheck.id}\n # Backgend service for Hybrid NEG\n hybridBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n backends:\n - group: ${hybridNetworkEndpointGroup.id}\n balancingMode: RATE\n maxRatePerEndpoint: 10\n healthChecks:\n - ${defaultHealthCheck.id}\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n timeoutSec: 1\n checkIntervalSec: 1\n tcpHealthCheck:\n port: '80'\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n - paths:\n - /hybrid\n service: ${hybridBackendService.id}\n defaultTargetHttpProxy:\n type: gcp:compute:TargetHttpProxy\n properties:\n description: a description\n urlMap: ${defaultURLMap.id}\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n target: ${defaultTargetHttpProxy.id}\n portRange: '80'\n```\n{{% /example %}}\n{{% example %}}\n### Private Service Connect Google Apis\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {\n project: \"my-project-name\",\n autoCreateSubnetworks: false,\n}, {\n provider: google_beta,\n});\nconst vpcSubnetwork = new gcp.compute.Subnetwork(\"vpcSubnetwork\", {\n project: network.project,\n ipCidrRange: \"10.2.0.0/16\",\n region: \"us-central1\",\n network: network.id,\n privateIpGoogleAccess: true,\n}, {\n provider: google_beta,\n});\nconst defaultGlobalAddress = new gcp.compute.GlobalAddress(\"defaultGlobalAddress\", {\n project: network.project,\n addressType: \"INTERNAL\",\n purpose: \"PRIVATE_SERVICE_CONNECT\",\n network: network.id,\n address: \"100.100.100.106\",\n}, {\n provider: google_beta,\n});\nconst defaultGlobalForwardingRule = new gcp.compute.GlobalForwardingRule(\"defaultGlobalForwardingRule\", {\n project: network.project,\n target: \"all-apis\",\n network: network.id,\n ipAddress: defaultGlobalAddress.id,\n loadBalancingScheme: \"\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\",\n project=\"my-project-name\",\n auto_create_subnetworks=False,\n opts=pulumi.ResourceOptions(provider=google_beta))\nvpc_subnetwork = gcp.compute.Subnetwork(\"vpcSubnetwork\",\n project=network.project,\n ip_cidr_range=\"10.2.0.0/16\",\n region=\"us-central1\",\n network=network.id,\n private_ip_google_access=True,\n opts=pulumi.ResourceOptions(provider=google_beta))\ndefault_global_address = gcp.compute.GlobalAddress(\"defaultGlobalAddress\",\n project=network.project,\n address_type=\"INTERNAL\",\n purpose=\"PRIVATE_SERVICE_CONNECT\",\n network=network.id,\n address=\"100.100.100.106\",\n opts=pulumi.ResourceOptions(provider=google_beta))\ndefault_global_forwarding_rule = gcp.compute.GlobalForwardingRule(\"defaultGlobalForwardingRule\",\n project=network.project,\n target=\"all-apis\",\n network=network.id,\n ip_address=default_global_address.id,\n load_balancing_scheme=\"\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n Project = \"my-project-name\",\n AutoCreateSubnetworks = false,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var vpcSubnetwork = new Gcp.Compute.Subnetwork(\"vpcSubnetwork\", new()\n {\n Project = network.Project,\n IpCidrRange = \"10.2.0.0/16\",\n Region = \"us-central1\",\n Network = network.Id,\n PrivateIpGoogleAccess = true,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var defaultGlobalAddress = new Gcp.Compute.GlobalAddress(\"defaultGlobalAddress\", new()\n {\n Project = network.Project,\n AddressType = \"INTERNAL\",\n Purpose = \"PRIVATE_SERVICE_CONNECT\",\n Network = network.Id,\n Address = \"100.100.100.106\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var defaultGlobalForwardingRule = new Gcp.Compute.GlobalForwardingRule(\"defaultGlobalForwardingRule\", new()\n {\n Project = network.Project,\n Target = \"all-apis\",\n Network = network.Id,\n IpAddress = defaultGlobalAddress.Id,\n LoadBalancingScheme = \"\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSubnetwork(ctx, \"vpcSubnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tProject: network.Project,\n\t\t\tIpCidrRange: pulumi.String(\"10.2.0.0/16\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network.ID(),\n\t\t\tPrivateIpGoogleAccess: pulumi.Bool(true),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultGlobalAddress, err := compute.NewGlobalAddress(ctx, \"defaultGlobalAddress\", \u0026compute.GlobalAddressArgs{\n\t\t\tProject: network.Project,\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"PRIVATE_SERVICE_CONNECT\"),\n\t\t\tNetwork: network.ID(),\n\t\t\tAddress: pulumi.String(\"100.100.100.106\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewGlobalForwardingRule(ctx, \"defaultGlobalForwardingRule\", \u0026compute.GlobalForwardingRuleArgs{\n\t\t\tProject: network.Project,\n\t\t\tTarget: pulumi.String(\"all-apis\"),\n\t\t\tNetwork: network.ID(),\n\t\t\tIpAddress: defaultGlobalAddress.ID(),\n\t\t\tLoadBalancingScheme: pulumi.String(\"\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\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 .project(\"my-project-name\")\n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var vpcSubnetwork = new Subnetwork(\"vpcSubnetwork\", SubnetworkArgs.builder() \n .project(network.project())\n .ipCidrRange(\"10.2.0.0/16\")\n .region(\"us-central1\")\n .network(network.id())\n .privateIpGoogleAccess(true)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalAddress = new GlobalAddress(\"defaultGlobalAddress\", GlobalAddressArgs.builder() \n .project(network.project())\n .addressType(\"INTERNAL\")\n .purpose(\"PRIVATE_SERVICE_CONNECT\")\n .network(network.id())\n .address(\"100.100.100.106\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .project(network.project())\n .target(\"all-apis\")\n .network(network.id())\n .ipAddress(defaultGlobalAddress.id())\n .loadBalancingScheme(\"\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n network:\n type: gcp:compute:Network\n properties:\n project: my-project-name\n autoCreateSubnetworks: false\n options:\n provider: ${[\"google-beta\"]}\n vpcSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n project: ${network.project}\n ipCidrRange: 10.2.0.0/16\n region: us-central1\n network: ${network.id}\n privateIpGoogleAccess: true\n options:\n provider: ${[\"google-beta\"]}\n defaultGlobalAddress:\n type: gcp:compute:GlobalAddress\n properties:\n project: ${network.project}\n addressType: INTERNAL\n purpose: PRIVATE_SERVICE_CONNECT\n network: ${network.id}\n address: 100.100.100.106\n options:\n provider: ${[\"google-beta\"]}\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n project: ${network.project}\n target: all-apis\n network: ${network.id}\n ipAddress: ${defaultGlobalAddress.id}\n loadBalancingScheme:\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGlobalForwardingRule can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/globalForwardingRule:GlobalForwardingRule default projects/{{project}}/global/forwardingRules/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/globalForwardingRule:GlobalForwardingRule default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/globalForwardingRule:GlobalForwardingRule default {{name}}\n```\n\n ", "properties": { "description": { "type": "string", @@ -130258,11 +131691,11 @@ "additionalProperties": { "type": "string" }, - "description": "Labels to apply to this forwarding rule. A list of key-\u003evalue pairs.\n" + "description": "Labels to apply to this rule.\n" }, "loadBalancingScheme": { "type": "string", - "description": "This signifies what the GlobalForwardingRule will be used for.\nThe value of INTERNAL_SELF_MANAGED means that this will be used for\nInternal Global HTTP(S) LB. The value of EXTERNAL means that this\nwill be used for External Global Load Balancing (HTTP(S) LB,\nExternal TCP/UDP LB, SSL Proxy)\nNote: This field must be set \"\" if the global address is\nExternal TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means\nthat this will be used for Global external HTTP(S) load balancers.\nNote: This field must be set \"\" if the global address is\nconfigured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL.\nDefault value is `EXTERNAL`.\nPossible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`.\n" + "description": "Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs\nfrom an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP *\n`INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers *\n`INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic\nDirector * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about\nforwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values:\nINVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED\n" }, "metadataFilters": { "type": "array", @@ -130277,7 +131710,7 @@ }, "network": { "type": "string", - "description": "This field is not used for external load balancing.\nFor INTERNAL_SELF_MANAGED load balancing, this field\nidentifies the network that the load balanced IP should belong to\nfor this global forwarding rule. If this field is not specified,\nthe default network will be used.\n" + "description": "This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this\nfield identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not\nspecified, the default network will be used.\n" }, "portRange": { "type": "string", @@ -130301,7 +131734,7 @@ }, "target": { "type": "string", - "description": "The URL of the target resource to receive the matched traffic.\nThe forwarded traffic must be of a type appropriate to the target object.\nFor INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets\nare valid.\nFor global address with a purpose of PRIVATE_SERVICE_CONNECT and\naddressType of INTERNAL, only \"all-apis\" and \"vpc-sc\" are valid.\n" + "description": "The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in\nthe same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing\nresource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load\nbalancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`.\n" } }, "required": [ @@ -130342,11 +131775,11 @@ "additionalProperties": { "type": "string" }, - "description": "Labels to apply to this forwarding rule. A list of key-\u003evalue pairs.\n" + "description": "Labels to apply to this rule.\n" }, "loadBalancingScheme": { "type": "string", - "description": "This signifies what the GlobalForwardingRule will be used for.\nThe value of INTERNAL_SELF_MANAGED means that this will be used for\nInternal Global HTTP(S) LB. The value of EXTERNAL means that this\nwill be used for External Global Load Balancing (HTTP(S) LB,\nExternal TCP/UDP LB, SSL Proxy)\nNote: This field must be set \"\" if the global address is\nExternal TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means\nthat this will be used for Global external HTTP(S) load balancers.\nNote: This field must be set \"\" if the global address is\nconfigured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL.\nDefault value is `EXTERNAL`.\nPossible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`.\n", + "description": "Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs\nfrom an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP *\n`INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers *\n`INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic\nDirector * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about\nforwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values:\nINVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED\n", "willReplaceOnChanges": true }, "metadataFilters": { @@ -130364,7 +131797,7 @@ }, "network": { "type": "string", - "description": "This field is not used for external load balancing.\nFor INTERNAL_SELF_MANAGED load balancing, this field\nidentifies the network that the load balanced IP should belong to\nfor this global forwarding rule. If this field is not specified,\nthe default network will be used.\n", + "description": "This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this\nfield identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not\nspecified, the default network will be used.\n", "willReplaceOnChanges": true }, "portRange": { @@ -130379,7 +131812,7 @@ }, "target": { "type": "string", - "description": "The URL of the target resource to receive the matched traffic.\nThe forwarded traffic must be of a type appropriate to the target object.\nFor INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets\nare valid.\nFor global address with a purpose of PRIVATE_SERVICE_CONNECT and\naddressType of INTERNAL, only \"all-apis\" and \"vpc-sc\" are valid.\n" + "description": "The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in\nthe same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing\nresource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load\nbalancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`.\n" } }, "requiredInputs": [ @@ -130417,11 +131850,11 @@ "additionalProperties": { "type": "string" }, - "description": "Labels to apply to this forwarding rule. A list of key-\u003evalue pairs.\n" + "description": "Labels to apply to this rule.\n" }, "loadBalancingScheme": { "type": "string", - "description": "This signifies what the GlobalForwardingRule will be used for.\nThe value of INTERNAL_SELF_MANAGED means that this will be used for\nInternal Global HTTP(S) LB. The value of EXTERNAL means that this\nwill be used for External Global Load Balancing (HTTP(S) LB,\nExternal TCP/UDP LB, SSL Proxy)\nNote: This field must be set \"\" if the global address is\nExternal TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means\nthat this will be used for Global external HTTP(S) load balancers.\nNote: This field must be set \"\" if the global address is\nconfigured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL.\nDefault value is `EXTERNAL`.\nPossible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`.\n", + "description": "Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs\nfrom an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP *\n`INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers *\n`INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic\nDirector * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about\nforwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values:\nINVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED\n", "willReplaceOnChanges": true }, "metadataFilters": { @@ -130439,7 +131872,7 @@ }, "network": { "type": "string", - "description": "This field is not used for external load balancing.\nFor INTERNAL_SELF_MANAGED load balancing, this field\nidentifies the network that the load balanced IP should belong to\nfor this global forwarding rule. If this field is not specified,\nthe default network will be used.\n", + "description": "This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this\nfield identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not\nspecified, the default network will be used.\n", "willReplaceOnChanges": true }, "portRange": { @@ -130466,7 +131899,7 @@ }, "target": { "type": "string", - "description": "The URL of the target resource to receive the matched traffic.\nThe forwarded traffic must be of a type appropriate to the target object.\nFor INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets\nare valid.\nFor global address with a purpose of PRIVATE_SERVICE_CONNECT and\naddressType of INTERNAL, only \"all-apis\" and \"vpc-sc\" are valid.\n" + "description": "The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in\nthe same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing\nresource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load\nbalancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`.\n" } }, "type": "object" @@ -130665,7 +132098,7 @@ } }, "gcp:compute/haVpnGateway:HaVpnGateway": { - "description": "Represents a VPN gateway running in GCP. This virtual device is managed\nby Google, but used only by you. This type of VPN Gateway allows for the creation\nof VPN solutions with higher availability than classic Target VPN Gateways.\n\nTo get more information about HaVpnGateway, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/vpnGateways)\n* How-to Guides\n * [Choosing a VPN](https://cloud.google.com/vpn/docs/how-to/choosing-a-vpn)\n * [Cloud VPN Overview](https://cloud.google.com/vpn/docs/concepts/overview)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Ha Vpn Gateway Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network1 = new gcp.compute.Network(\"network1\", {autoCreateSubnetworks: false});\nconst haGateway1 = new gcp.compute.HaVpnGateway(\"haGateway1\", {\n region: \"us-central1\",\n network: network1.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork1 = gcp.compute.Network(\"network1\", auto_create_subnetworks=False)\nha_gateway1 = gcp.compute.HaVpnGateway(\"haGateway1\",\n region=\"us-central1\",\n network=network1.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network1 = new Gcp.Compute.Network(\"network1\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var haGateway1 = new Gcp.Compute.HaVpnGateway(\"haGateway1\", new()\n {\n Region = \"us-central1\",\n Network = network1.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tnetwork1, err := compute.NewNetwork(ctx, \"network1\", \u0026compute.NetworkArgs{\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.NewHaVpnGateway(ctx, \"haGateway1\", \u0026compute.HaVpnGatewayArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network1.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.HaVpnGateway;\nimport com.pulumi.gcp.compute.HaVpnGatewayArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network1 = new Network(\"network1\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var haGateway1 = new HaVpnGateway(\"haGateway1\", HaVpnGatewayArgs.builder() \n .region(\"us-central1\")\n .network(network1.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n haGateway1:\n type: gcp:compute:HaVpnGateway\n properties:\n region: us-central1\n network: ${network1.id}\n network1:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% example %}}\n### Compute Ha Vpn Gateway Encrypted Interconnect\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {autoCreateSubnetworks: false});\nconst address1 = new gcp.compute.Address(\"address1\", {\n addressType: \"INTERNAL\",\n purpose: \"IPSEC_INTERCONNECT\",\n address: \"192.168.1.0\",\n prefixLength: 29,\n network: network.selfLink,\n});\nconst router = new gcp.compute.Router(\"router\", {\n network: network.name,\n encryptedInterconnectRouter: true,\n bgp: {\n asn: 16550,\n },\n});\nconst attachment1 = new gcp.compute.InterconnectAttachment(\"attachment1\", {\n edgeAvailabilityDomain: \"AVAILABILITY_DOMAIN_1\",\n type: \"PARTNER\",\n router: router.id,\n encryption: \"IPSEC\",\n ipsecInternalAddresses: [address1.selfLink],\n});\nconst address2 = new gcp.compute.Address(\"address2\", {\n addressType: \"INTERNAL\",\n purpose: \"IPSEC_INTERCONNECT\",\n address: \"192.168.2.0\",\n prefixLength: 29,\n network: network.selfLink,\n});\nconst attachment2 = new gcp.compute.InterconnectAttachment(\"attachment2\", {\n edgeAvailabilityDomain: \"AVAILABILITY_DOMAIN_2\",\n type: \"PARTNER\",\n router: router.id,\n encryption: \"IPSEC\",\n ipsecInternalAddresses: [address2.selfLink],\n});\nconst vpn_gateway = new gcp.compute.HaVpnGateway(\"vpn-gateway\", {\n network: network.id,\n vpnInterfaces: [\n {\n id: 0,\n interconnectAttachment: attachment1.selfLink,\n },\n {\n id: 1,\n interconnectAttachment: attachment2.selfLink,\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\", auto_create_subnetworks=False)\naddress1 = gcp.compute.Address(\"address1\",\n address_type=\"INTERNAL\",\n purpose=\"IPSEC_INTERCONNECT\",\n address=\"192.168.1.0\",\n prefix_length=29,\n network=network.self_link)\nrouter = gcp.compute.Router(\"router\",\n network=network.name,\n encrypted_interconnect_router=True,\n bgp=gcp.compute.RouterBgpArgs(\n asn=16550,\n ))\nattachment1 = gcp.compute.InterconnectAttachment(\"attachment1\",\n edge_availability_domain=\"AVAILABILITY_DOMAIN_1\",\n type=\"PARTNER\",\n router=router.id,\n encryption=\"IPSEC\",\n ipsec_internal_addresses=[address1.self_link])\naddress2 = gcp.compute.Address(\"address2\",\n address_type=\"INTERNAL\",\n purpose=\"IPSEC_INTERCONNECT\",\n address=\"192.168.2.0\",\n prefix_length=29,\n network=network.self_link)\nattachment2 = gcp.compute.InterconnectAttachment(\"attachment2\",\n edge_availability_domain=\"AVAILABILITY_DOMAIN_2\",\n type=\"PARTNER\",\n router=router.id,\n encryption=\"IPSEC\",\n ipsec_internal_addresses=[address2.self_link])\nvpn_gateway = gcp.compute.HaVpnGateway(\"vpn-gateway\",\n network=network.id,\n vpn_interfaces=[\n gcp.compute.HaVpnGatewayVpnInterfaceArgs(\n id=0,\n interconnect_attachment=attachment1.self_link,\n ),\n gcp.compute.HaVpnGatewayVpnInterfaceArgs(\n id=1,\n interconnect_attachment=attachment2.self_link,\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var address1 = new Gcp.Compute.Address(\"address1\", new()\n {\n AddressType = \"INTERNAL\",\n Purpose = \"IPSEC_INTERCONNECT\",\n IPAddress = \"192.168.1.0\",\n PrefixLength = 29,\n Network = network.SelfLink,\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Network = network.Name,\n EncryptedInterconnectRouter = true,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 16550,\n },\n });\n\n var attachment1 = new Gcp.Compute.InterconnectAttachment(\"attachment1\", new()\n {\n EdgeAvailabilityDomain = \"AVAILABILITY_DOMAIN_1\",\n Type = \"PARTNER\",\n Router = router.Id,\n Encryption = \"IPSEC\",\n IpsecInternalAddresses = new[]\n {\n address1.SelfLink,\n },\n });\n\n var address2 = new Gcp.Compute.Address(\"address2\", new()\n {\n AddressType = \"INTERNAL\",\n Purpose = \"IPSEC_INTERCONNECT\",\n IPAddress = \"192.168.2.0\",\n PrefixLength = 29,\n Network = network.SelfLink,\n });\n\n var attachment2 = new Gcp.Compute.InterconnectAttachment(\"attachment2\", new()\n {\n EdgeAvailabilityDomain = \"AVAILABILITY_DOMAIN_2\",\n Type = \"PARTNER\",\n Router = router.Id,\n Encryption = \"IPSEC\",\n IpsecInternalAddresses = new[]\n {\n address2.SelfLink,\n },\n });\n\n var vpn_gateway = new Gcp.Compute.HaVpnGateway(\"vpn-gateway\", new()\n {\n Network = network.Id,\n VpnInterfaces = new[]\n {\n new Gcp.Compute.Inputs.HaVpnGatewayVpnInterfaceArgs\n {\n Id = 0,\n InterconnectAttachment = attachment1.SelfLink,\n },\n new Gcp.Compute.Inputs.HaVpnGatewayVpnInterfaceArgs\n {\n Id = 1,\n InterconnectAttachment = attachment2.SelfLink,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\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\taddress1, err := compute.NewAddress(ctx, \"address1\", \u0026compute.AddressArgs{\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"IPSEC_INTERCONNECT\"),\n\t\t\tAddress: pulumi.String(\"192.168.1.0\"),\n\t\t\tPrefixLength: pulumi.Int(29),\n\t\t\tNetwork: network.SelfLink,\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\tNetwork: network.Name,\n\t\t\tEncryptedInterconnectRouter: pulumi.Bool(true),\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\tattachment1, err := compute.NewInterconnectAttachment(ctx, \"attachment1\", \u0026compute.InterconnectAttachmentArgs{\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\tEncryption: pulumi.String(\"IPSEC\"),\n\t\t\tIpsecInternalAddresses: pulumi.StringArray{\n\t\t\t\taddress1.SelfLink,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taddress2, err := compute.NewAddress(ctx, \"address2\", \u0026compute.AddressArgs{\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"IPSEC_INTERCONNECT\"),\n\t\t\tAddress: pulumi.String(\"192.168.2.0\"),\n\t\t\tPrefixLength: pulumi.Int(29),\n\t\t\tNetwork: network.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tattachment2, err := compute.NewInterconnectAttachment(ctx, \"attachment2\", \u0026compute.InterconnectAttachmentArgs{\n\t\t\tEdgeAvailabilityDomain: pulumi.String(\"AVAILABILITY_DOMAIN_2\"),\n\t\t\tType: pulumi.String(\"PARTNER\"),\n\t\t\tRouter: router.ID(),\n\t\t\tEncryption: pulumi.String(\"IPSEC\"),\n\t\t\tIpsecInternalAddresses: pulumi.StringArray{\n\t\t\t\taddress2.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 = compute.NewHaVpnGateway(ctx, \"vpn-gateway\", \u0026compute.HaVpnGatewayArgs{\n\t\t\tNetwork: network.ID(),\n\t\t\tVpnInterfaces: compute.HaVpnGatewayVpnInterfaceArray{\n\t\t\t\t\u0026compute.HaVpnGatewayVpnInterfaceArgs{\n\t\t\t\t\tId: pulumi.Int(0),\n\t\t\t\t\tInterconnectAttachment: attachment1.SelfLink,\n\t\t\t\t},\n\t\t\t\t\u0026compute.HaVpnGatewayVpnInterfaceArgs{\n\t\t\t\t\tId: pulumi.Int(1),\n\t\t\t\t\tInterconnectAttachment: attachment2.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\treturn nil\n\t})\n}\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.Address;\nimport com.pulumi.gcp.compute.AddressArgs;\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.compute.HaVpnGateway;\nimport com.pulumi.gcp.compute.HaVpnGatewayArgs;\nimport com.pulumi.gcp.compute.inputs.HaVpnGatewayVpnInterfaceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .autoCreateSubnetworks(false)\n .build());\n\n var address1 = new Address(\"address1\", AddressArgs.builder() \n .addressType(\"INTERNAL\")\n .purpose(\"IPSEC_INTERCONNECT\")\n .address(\"192.168.1.0\")\n .prefixLength(29)\n .network(network.selfLink())\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder() \n .network(network.name())\n .encryptedInterconnectRouter(true)\n .bgp(RouterBgpArgs.builder()\n .asn(16550)\n .build())\n .build());\n\n var attachment1 = new InterconnectAttachment(\"attachment1\", InterconnectAttachmentArgs.builder() \n .edgeAvailabilityDomain(\"AVAILABILITY_DOMAIN_1\")\n .type(\"PARTNER\")\n .router(router.id())\n .encryption(\"IPSEC\")\n .ipsecInternalAddresses(address1.selfLink())\n .build());\n\n var address2 = new Address(\"address2\", AddressArgs.builder() \n .addressType(\"INTERNAL\")\n .purpose(\"IPSEC_INTERCONNECT\")\n .address(\"192.168.2.0\")\n .prefixLength(29)\n .network(network.selfLink())\n .build());\n\n var attachment2 = new InterconnectAttachment(\"attachment2\", InterconnectAttachmentArgs.builder() \n .edgeAvailabilityDomain(\"AVAILABILITY_DOMAIN_2\")\n .type(\"PARTNER\")\n .router(router.id())\n .encryption(\"IPSEC\")\n .ipsecInternalAddresses(address2.selfLink())\n .build());\n\n var vpn_gateway = new HaVpnGateway(\"vpn-gateway\", HaVpnGatewayArgs.builder() \n .network(network.id())\n .vpnInterfaces( \n HaVpnGatewayVpnInterfaceArgs.builder()\n .id(0)\n .interconnectAttachment(attachment1.selfLink())\n .build(),\n HaVpnGatewayVpnInterfaceArgs.builder()\n .id(1)\n .interconnectAttachment(attachment2.selfLink())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n vpn-gateway:\n type: gcp:compute:HaVpnGateway\n properties:\n network: ${network.id}\n vpnInterfaces:\n - id: 0\n interconnectAttachment: ${attachment1.selfLink}\n - id: 1\n interconnectAttachment: ${attachment2.selfLink}\n attachment1:\n type: gcp:compute:InterconnectAttachment\n properties:\n edgeAvailabilityDomain: AVAILABILITY_DOMAIN_1\n type: PARTNER\n router: ${router.id}\n encryption: IPSEC\n ipsecInternalAddresses:\n - ${address1.selfLink}\n attachment2:\n type: gcp:compute:InterconnectAttachment\n properties:\n edgeAvailabilityDomain: AVAILABILITY_DOMAIN_2\n type: PARTNER\n router: ${router.id}\n encryption: IPSEC\n ipsecInternalAddresses:\n - ${address2.selfLink}\n address1:\n type: gcp:compute:Address\n properties:\n addressType: INTERNAL\n purpose: IPSEC_INTERCONNECT\n address: 192.168.1.0\n prefixLength: 29\n network: ${network.selfLink}\n address2:\n type: gcp:compute:Address\n properties:\n addressType: INTERNAL\n purpose: IPSEC_INTERCONNECT\n address: 192.168.2.0\n prefixLength: 29\n network: ${network.selfLink}\n router:\n type: gcp:compute:Router\n properties:\n network: ${network.name}\n encryptedInterconnectRouter: true\n bgp:\n asn: 16550\n network:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nHaVpnGateway can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/haVpnGateway:HaVpnGateway default projects/{{project}}/regions/{{region}}/vpnGateways/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/haVpnGateway:HaVpnGateway default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/haVpnGateway:HaVpnGateway default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/haVpnGateway:HaVpnGateway default {{name}}\n```\n\n ", + "description": "Represents a VPN gateway running in GCP. This virtual device is managed\nby Google, but used only by you. This type of VPN Gateway allows for the creation\nof VPN solutions with higher availability than classic Target VPN Gateways.\n\n\nTo get more information about HaVpnGateway, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/vpnGateways)\n* How-to Guides\n * [Choosing a VPN](https://cloud.google.com/vpn/docs/how-to/choosing-a-vpn)\n * [Cloud VPN Overview](https://cloud.google.com/vpn/docs/concepts/overview)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Ha Vpn Gateway Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network1 = new gcp.compute.Network(\"network1\", {autoCreateSubnetworks: false});\nconst haGateway1 = new gcp.compute.HaVpnGateway(\"haGateway1\", {\n region: \"us-central1\",\n network: network1.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork1 = gcp.compute.Network(\"network1\", auto_create_subnetworks=False)\nha_gateway1 = gcp.compute.HaVpnGateway(\"haGateway1\",\n region=\"us-central1\",\n network=network1.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network1 = new Gcp.Compute.Network(\"network1\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var haGateway1 = new Gcp.Compute.HaVpnGateway(\"haGateway1\", new()\n {\n Region = \"us-central1\",\n Network = network1.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tnetwork1, err := compute.NewNetwork(ctx, \"network1\", \u0026compute.NetworkArgs{\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.NewHaVpnGateway(ctx, \"haGateway1\", \u0026compute.HaVpnGatewayArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: network1.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.HaVpnGateway;\nimport com.pulumi.gcp.compute.HaVpnGatewayArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var network1 = new Network(\"network1\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var haGateway1 = new HaVpnGateway(\"haGateway1\", HaVpnGatewayArgs.builder() \n .region(\"us-central1\")\n .network(network1.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n haGateway1:\n type: gcp:compute:HaVpnGateway\n properties:\n region: us-central1\n network: ${network1.id}\n network1:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% example %}}\n### Compute Ha Vpn Gateway Encrypted Interconnect\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network = new gcp.compute.Network(\"network\", {autoCreateSubnetworks: false});\nconst address1 = new gcp.compute.Address(\"address1\", {\n addressType: \"INTERNAL\",\n purpose: \"IPSEC_INTERCONNECT\",\n address: \"192.168.1.0\",\n prefixLength: 29,\n network: network.selfLink,\n});\nconst router = new gcp.compute.Router(\"router\", {\n network: network.name,\n encryptedInterconnectRouter: true,\n bgp: {\n asn: 16550,\n },\n});\nconst attachment1 = new gcp.compute.InterconnectAttachment(\"attachment1\", {\n edgeAvailabilityDomain: \"AVAILABILITY_DOMAIN_1\",\n type: \"PARTNER\",\n router: router.id,\n encryption: \"IPSEC\",\n ipsecInternalAddresses: [address1.selfLink],\n});\nconst address2 = new gcp.compute.Address(\"address2\", {\n addressType: \"INTERNAL\",\n purpose: \"IPSEC_INTERCONNECT\",\n address: \"192.168.2.0\",\n prefixLength: 29,\n network: network.selfLink,\n});\nconst attachment2 = new gcp.compute.InterconnectAttachment(\"attachment2\", {\n edgeAvailabilityDomain: \"AVAILABILITY_DOMAIN_2\",\n type: \"PARTNER\",\n router: router.id,\n encryption: \"IPSEC\",\n ipsecInternalAddresses: [address2.selfLink],\n});\nconst vpn_gateway = new gcp.compute.HaVpnGateway(\"vpn-gateway\", {\n network: network.id,\n vpnInterfaces: [\n {\n id: 0,\n interconnectAttachment: attachment1.selfLink,\n },\n {\n id: 1,\n interconnectAttachment: attachment2.selfLink,\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork = gcp.compute.Network(\"network\", auto_create_subnetworks=False)\naddress1 = gcp.compute.Address(\"address1\",\n address_type=\"INTERNAL\",\n purpose=\"IPSEC_INTERCONNECT\",\n address=\"192.168.1.0\",\n prefix_length=29,\n network=network.self_link)\nrouter = gcp.compute.Router(\"router\",\n network=network.name,\n encrypted_interconnect_router=True,\n bgp=gcp.compute.RouterBgpArgs(\n asn=16550,\n ))\nattachment1 = gcp.compute.InterconnectAttachment(\"attachment1\",\n edge_availability_domain=\"AVAILABILITY_DOMAIN_1\",\n type=\"PARTNER\",\n router=router.id,\n encryption=\"IPSEC\",\n ipsec_internal_addresses=[address1.self_link])\naddress2 = gcp.compute.Address(\"address2\",\n address_type=\"INTERNAL\",\n purpose=\"IPSEC_INTERCONNECT\",\n address=\"192.168.2.0\",\n prefix_length=29,\n network=network.self_link)\nattachment2 = gcp.compute.InterconnectAttachment(\"attachment2\",\n edge_availability_domain=\"AVAILABILITY_DOMAIN_2\",\n type=\"PARTNER\",\n router=router.id,\n encryption=\"IPSEC\",\n ipsec_internal_addresses=[address2.self_link])\nvpn_gateway = gcp.compute.HaVpnGateway(\"vpn-gateway\",\n network=network.id,\n vpn_interfaces=[\n gcp.compute.HaVpnGatewayVpnInterfaceArgs(\n id=0,\n interconnect_attachment=attachment1.self_link,\n ),\n gcp.compute.HaVpnGatewayVpnInterfaceArgs(\n id=1,\n interconnect_attachment=attachment2.self_link,\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var address1 = new Gcp.Compute.Address(\"address1\", new()\n {\n AddressType = \"INTERNAL\",\n Purpose = \"IPSEC_INTERCONNECT\",\n IPAddress = \"192.168.1.0\",\n PrefixLength = 29,\n Network = network.SelfLink,\n });\n\n var router = new Gcp.Compute.Router(\"router\", new()\n {\n Network = network.Name,\n EncryptedInterconnectRouter = true,\n Bgp = new Gcp.Compute.Inputs.RouterBgpArgs\n {\n Asn = 16550,\n },\n });\n\n var attachment1 = new Gcp.Compute.InterconnectAttachment(\"attachment1\", new()\n {\n EdgeAvailabilityDomain = \"AVAILABILITY_DOMAIN_1\",\n Type = \"PARTNER\",\n Router = router.Id,\n Encryption = \"IPSEC\",\n IpsecInternalAddresses = new[]\n {\n address1.SelfLink,\n },\n });\n\n var address2 = new Gcp.Compute.Address(\"address2\", new()\n {\n AddressType = \"INTERNAL\",\n Purpose = \"IPSEC_INTERCONNECT\",\n IPAddress = \"192.168.2.0\",\n PrefixLength = 29,\n Network = network.SelfLink,\n });\n\n var attachment2 = new Gcp.Compute.InterconnectAttachment(\"attachment2\", new()\n {\n EdgeAvailabilityDomain = \"AVAILABILITY_DOMAIN_2\",\n Type = \"PARTNER\",\n Router = router.Id,\n Encryption = \"IPSEC\",\n IpsecInternalAddresses = new[]\n {\n address2.SelfLink,\n },\n });\n\n var vpn_gateway = new Gcp.Compute.HaVpnGateway(\"vpn-gateway\", new()\n {\n Network = network.Id,\n VpnInterfaces = new[]\n {\n new Gcp.Compute.Inputs.HaVpnGatewayVpnInterfaceArgs\n {\n Id = 0,\n InterconnectAttachment = attachment1.SelfLink,\n },\n new Gcp.Compute.Inputs.HaVpnGatewayVpnInterfaceArgs\n {\n Id = 1,\n InterconnectAttachment = attachment2.SelfLink,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tnetwork, err := compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\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\taddress1, err := compute.NewAddress(ctx, \"address1\", \u0026compute.AddressArgs{\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"IPSEC_INTERCONNECT\"),\n\t\t\tAddress: pulumi.String(\"192.168.1.0\"),\n\t\t\tPrefixLength: pulumi.Int(29),\n\t\t\tNetwork: network.SelfLink,\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\tNetwork: network.Name,\n\t\t\tEncryptedInterconnectRouter: pulumi.Bool(true),\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\tattachment1, err := compute.NewInterconnectAttachment(ctx, \"attachment1\", \u0026compute.InterconnectAttachmentArgs{\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\tEncryption: pulumi.String(\"IPSEC\"),\n\t\t\tIpsecInternalAddresses: pulumi.StringArray{\n\t\t\t\taddress1.SelfLink,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\taddress2, err := compute.NewAddress(ctx, \"address2\", \u0026compute.AddressArgs{\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"IPSEC_INTERCONNECT\"),\n\t\t\tAddress: pulumi.String(\"192.168.2.0\"),\n\t\t\tPrefixLength: pulumi.Int(29),\n\t\t\tNetwork: network.SelfLink,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tattachment2, err := compute.NewInterconnectAttachment(ctx, \"attachment2\", \u0026compute.InterconnectAttachmentArgs{\n\t\t\tEdgeAvailabilityDomain: pulumi.String(\"AVAILABILITY_DOMAIN_2\"),\n\t\t\tType: pulumi.String(\"PARTNER\"),\n\t\t\tRouter: router.ID(),\n\t\t\tEncryption: pulumi.String(\"IPSEC\"),\n\t\t\tIpsecInternalAddresses: pulumi.StringArray{\n\t\t\t\taddress2.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 = compute.NewHaVpnGateway(ctx, \"vpn-gateway\", \u0026compute.HaVpnGatewayArgs{\n\t\t\tNetwork: network.ID(),\n\t\t\tVpnInterfaces: compute.HaVpnGatewayVpnInterfaceArray{\n\t\t\t\t\u0026compute.HaVpnGatewayVpnInterfaceArgs{\n\t\t\t\t\tId: pulumi.Int(0),\n\t\t\t\t\tInterconnectAttachment: attachment1.SelfLink,\n\t\t\t\t},\n\t\t\t\t\u0026compute.HaVpnGatewayVpnInterfaceArgs{\n\t\t\t\t\tId: pulumi.Int(1),\n\t\t\t\t\tInterconnectAttachment: attachment2.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\treturn nil\n\t})\n}\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.Address;\nimport com.pulumi.gcp.compute.AddressArgs;\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.compute.HaVpnGateway;\nimport com.pulumi.gcp.compute.HaVpnGatewayArgs;\nimport com.pulumi.gcp.compute.inputs.HaVpnGatewayVpnInterfaceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .autoCreateSubnetworks(false)\n .build());\n\n var address1 = new Address(\"address1\", AddressArgs.builder() \n .addressType(\"INTERNAL\")\n .purpose(\"IPSEC_INTERCONNECT\")\n .address(\"192.168.1.0\")\n .prefixLength(29)\n .network(network.selfLink())\n .build());\n\n var router = new Router(\"router\", RouterArgs.builder() \n .network(network.name())\n .encryptedInterconnectRouter(true)\n .bgp(RouterBgpArgs.builder()\n .asn(16550)\n .build())\n .build());\n\n var attachment1 = new InterconnectAttachment(\"attachment1\", InterconnectAttachmentArgs.builder() \n .edgeAvailabilityDomain(\"AVAILABILITY_DOMAIN_1\")\n .type(\"PARTNER\")\n .router(router.id())\n .encryption(\"IPSEC\")\n .ipsecInternalAddresses(address1.selfLink())\n .build());\n\n var address2 = new Address(\"address2\", AddressArgs.builder() \n .addressType(\"INTERNAL\")\n .purpose(\"IPSEC_INTERCONNECT\")\n .address(\"192.168.2.0\")\n .prefixLength(29)\n .network(network.selfLink())\n .build());\n\n var attachment2 = new InterconnectAttachment(\"attachment2\", InterconnectAttachmentArgs.builder() \n .edgeAvailabilityDomain(\"AVAILABILITY_DOMAIN_2\")\n .type(\"PARTNER\")\n .router(router.id())\n .encryption(\"IPSEC\")\n .ipsecInternalAddresses(address2.selfLink())\n .build());\n\n var vpn_gateway = new HaVpnGateway(\"vpn-gateway\", HaVpnGatewayArgs.builder() \n .network(network.id())\n .vpnInterfaces( \n HaVpnGatewayVpnInterfaceArgs.builder()\n .id(0)\n .interconnectAttachment(attachment1.selfLink())\n .build(),\n HaVpnGatewayVpnInterfaceArgs.builder()\n .id(1)\n .interconnectAttachment(attachment2.selfLink())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n vpn-gateway:\n type: gcp:compute:HaVpnGateway\n properties:\n network: ${network.id}\n vpnInterfaces:\n - id: 0\n interconnectAttachment: ${attachment1.selfLink}\n - id: 1\n interconnectAttachment: ${attachment2.selfLink}\n attachment1:\n type: gcp:compute:InterconnectAttachment\n properties:\n edgeAvailabilityDomain: AVAILABILITY_DOMAIN_1\n type: PARTNER\n router: ${router.id}\n encryption: IPSEC\n ipsecInternalAddresses:\n - ${address1.selfLink}\n attachment2:\n type: gcp:compute:InterconnectAttachment\n properties:\n edgeAvailabilityDomain: AVAILABILITY_DOMAIN_2\n type: PARTNER\n router: ${router.id}\n encryption: IPSEC\n ipsecInternalAddresses:\n - ${address2.selfLink}\n address1:\n type: gcp:compute:Address\n properties:\n addressType: INTERNAL\n purpose: IPSEC_INTERCONNECT\n address: 192.168.1.0\n prefixLength: 29\n network: ${network.selfLink}\n address2:\n type: gcp:compute:Address\n properties:\n addressType: INTERNAL\n purpose: IPSEC_INTERCONNECT\n address: 192.168.2.0\n prefixLength: 29\n network: ${network.selfLink}\n router:\n type: gcp:compute:Router\n properties:\n network: ${network.name}\n encryptedInterconnectRouter: true\n bgp:\n asn: 16550\n network:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nHaVpnGateway can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/haVpnGateway:HaVpnGateway default projects/{{project}}/regions/{{region}}/vpnGateways/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/haVpnGateway:HaVpnGateway default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/haVpnGateway:HaVpnGateway default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/haVpnGateway:HaVpnGateway default {{name}}\n```\n\n ", "properties": { "description": { "type": "string", @@ -131874,7 +133307,7 @@ }, "allowStoppingForUpdate": { "type": "boolean", - "description": "If true, allows this prvider to stop the instance to update its properties.\nIf you try to update a property that requires stopping the instance without setting this field, the update will fail.\n" + "description": "If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires\nstopping the instance without setting this field, the update will fail.\n" }, "attachedDisks": { "type": "array", @@ -131905,7 +133338,7 @@ }, "deletionProtection": { "type": "boolean", - "description": "Enable deletion protection on this instance. Defaults to false.\n**Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully.\n" + "description": "Whether deletion protection is enabled on this instance.\n" }, "description": { "type": "string", @@ -131924,7 +133357,7 @@ "items": { "$ref": "#/types/gcp:compute/InstanceGuestAccelerator:InstanceGuestAccelerator" }, - "description": "List of the type and count of accelerator cards attached to the instance. Structure documented below.\n**Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE.\n" + "description": "List of the type and count of accelerator cards attached to the instance.\n" }, "hostname": { "type": "string", @@ -131962,7 +133395,7 @@ }, "metadataStartupScript": { "type": "string", - "description": "An alternative to using the\nstartup-script metadata key, except this one forces the instance to be recreated\n(thus re-running the script) if it is changed. This replaces the startup-script\nmetadata key on the created instance and thus the two mechanisms are not\nallowed to be used simultaneously. Users are free to use either mechanism - the\nonly distinction is that this separate attribute will cause a recreate on\nmodification. On import, `metadata_startup_script` will not be set - if you\nchoose to specify it you will see a diff immediately after import causing a\ndestroy/recreate operation. If importing an instance and specifying this value\nis desired, you will need to modify your state file.\n" + "description": "Metadata startup scripts made available within the instance.\n" }, "minCpuPlatform": { "type": "string", @@ -132062,7 +133495,7 @@ }, "allowStoppingForUpdate": { "type": "boolean", - "description": "If true, allows this prvider to stop the instance to update its properties.\nIf you try to update a property that requires stopping the instance without setting this field, the update will fail.\n" + "description": "If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires\nstopping the instance without setting this field, the update will fail.\n" }, "attachedDisks": { "type": "array", @@ -132087,7 +133520,7 @@ }, "deletionProtection": { "type": "boolean", - "description": "Enable deletion protection on this instance. Defaults to false.\n**Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully.\n" + "description": "Whether deletion protection is enabled on this instance.\n" }, "description": { "type": "string", @@ -132107,7 +133540,7 @@ "items": { "$ref": "#/types/gcp:compute/InstanceGuestAccelerator:InstanceGuestAccelerator" }, - "description": "List of the type and count of accelerator cards attached to the instance. Structure documented below.\n**Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE.\n", + "description": "List of the type and count of accelerator cards attached to the instance.\n", "willReplaceOnChanges": true }, "hostname": { @@ -132135,7 +133568,7 @@ }, "metadataStartupScript": { "type": "string", - "description": "An alternative to using the\nstartup-script metadata key, except this one forces the instance to be recreated\n(thus re-running the script) if it is changed. This replaces the startup-script\nmetadata key on the created instance and thus the two mechanisms are not\nallowed to be used simultaneously. Users are free to use either mechanism - the\nonly distinction is that this separate attribute will cause a recreate on\nmodification. On import, `metadata_startup_script` will not be set - if you\nchoose to specify it you will see a diff immediately after import causing a\ndestroy/recreate operation. If importing an instance and specifying this value\nis desired, you will need to modify your state file.\n", + "description": "Metadata startup scripts made available within the instance.\n", "willReplaceOnChanges": true }, "minCpuPlatform": { @@ -132221,7 +133654,7 @@ }, "allowStoppingForUpdate": { "type": "boolean", - "description": "If true, allows this prvider to stop the instance to update its properties.\nIf you try to update a property that requires stopping the instance without setting this field, the update will fail.\n" + "description": "If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires\nstopping the instance without setting this field, the update will fail.\n" }, "attachedDisks": { "type": "array", @@ -132254,7 +133687,7 @@ }, "deletionProtection": { "type": "boolean", - "description": "Enable deletion protection on this instance. Defaults to false.\n**Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully.\n" + "description": "Whether deletion protection is enabled on this instance.\n" }, "description": { "type": "string", @@ -132274,7 +133707,7 @@ "items": { "$ref": "#/types/gcp:compute/InstanceGuestAccelerator:InstanceGuestAccelerator" }, - "description": "List of the type and count of accelerator cards attached to the instance. Structure documented below.\n**Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE.\n", + "description": "List of the type and count of accelerator cards attached to the instance.\n", "willReplaceOnChanges": true }, "hostname": { @@ -132314,7 +133747,7 @@ }, "metadataStartupScript": { "type": "string", - "description": "An alternative to using the\nstartup-script metadata key, except this one forces the instance to be recreated\n(thus re-running the script) if it is changed. This replaces the startup-script\nmetadata key on the created instance and thus the two mechanisms are not\nallowed to be used simultaneously. Users are free to use either mechanism - the\nonly distinction is that this separate attribute will cause a recreate on\nmodification. On import, `metadata_startup_script` will not be set - if you\nchoose to specify it you will see a diff immediately after import causing a\ndestroy/recreate operation. If importing an instance and specifying this value\nis desired, you will need to modify your state file.\n", + "description": "Metadata startup scripts made available within the instance.\n", "willReplaceOnChanges": true }, "minCpuPlatform": { @@ -132398,7 +133831,7 @@ } }, "gcp:compute/instanceFromMachineImage:InstanceFromMachineImage": { - "description": "Manages a VM instance resource within GCE. For more information see\n[the official documentation](https://cloud.google.com/compute/docs/instances)\nand\n[API](https://cloud.google.com/compute/docs/reference/latest/instances).\n\nThis resource is specifically to create a compute instance from a given\n`source_machine_image`. To create an instance without a machine image, use the\n`gcp.compute.Instance` resource.\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst tpl = new gcp.compute.InstanceFromMachineImage(\"tpl\", {\n zone: \"us-central1-a\",\n sourceMachineImage: \"projects/PROJECT-ID/global/machineImages/NAME\",\n canIpForward: false,\n labels: {\n my_key: \"my_value\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntpl = gcp.compute.InstanceFromMachineImage(\"tpl\",\n zone=\"us-central1-a\",\n source_machine_image=\"projects/PROJECT-ID/global/machineImages/NAME\",\n can_ip_forward=False,\n labels={\n \"my_key\": \"my_value\",\n },\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var tpl = new Gcp.Compute.InstanceFromMachineImage(\"tpl\", new()\n {\n Zone = \"us-central1-a\",\n SourceMachineImage = \"projects/PROJECT-ID/global/machineImages/NAME\",\n CanIpForward = false,\n Labels = \n {\n { \"my_key\", \"my_value\" },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewInstanceFromMachineImage(ctx, \"tpl\", \u0026compute.InstanceFromMachineImageArgs{\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tSourceMachineImage: pulumi.String(\"projects/PROJECT-ID/global/machineImages/NAME\"),\n\t\t\tCanIpForward: pulumi.Bool(false),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_value\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.InstanceFromMachineImage;\nimport com.pulumi.gcp.compute.InstanceFromMachineImageArgs;\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 tpl = new InstanceFromMachineImage(\"tpl\", InstanceFromMachineImageArgs.builder() \n .zone(\"us-central1-a\")\n .sourceMachineImage(\"projects/PROJECT-ID/global/machineImages/NAME\")\n .canIpForward(false)\n .labels(Map.of(\"my_key\", \"my_value\"))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tpl:\n type: gcp:compute:InstanceFromMachineImage\n properties:\n zone: us-central1-a\n sourceMachineImage: projects/PROJECT-ID/global/machineImages/NAME\n # Override fields from machine image\n canIpForward: false\n labels:\n my_key: my_value\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst tpl = new gcp.compute.InstanceFromMachineImage(\"tpl\", {\n zone: \"us-central1-a\",\n sourceMachineImage: \"projects/PROJECT-ID/global/machineImages/NAME\",\n canIpForward: false,\n labels: {\n my_key: \"my_value\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntpl = gcp.compute.InstanceFromMachineImage(\"tpl\",\n zone=\"us-central1-a\",\n source_machine_image=\"projects/PROJECT-ID/global/machineImages/NAME\",\n can_ip_forward=False,\n labels={\n \"my_key\": \"my_value\",\n },\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var tpl = new Gcp.Compute.InstanceFromMachineImage(\"tpl\", new()\n {\n Zone = \"us-central1-a\",\n SourceMachineImage = \"projects/PROJECT-ID/global/machineImages/NAME\",\n CanIpForward = false,\n Labels = \n {\n { \"my_key\", \"my_value\" },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewInstanceFromMachineImage(ctx, \"tpl\", \u0026compute.InstanceFromMachineImageArgs{\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tSourceMachineImage: pulumi.String(\"projects/PROJECT-ID/global/machineImages/NAME\"),\n\t\t\tCanIpForward: pulumi.Bool(false),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_value\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.InstanceFromMachineImage;\nimport com.pulumi.gcp.compute.InstanceFromMachineImageArgs;\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 tpl = new InstanceFromMachineImage(\"tpl\", InstanceFromMachineImageArgs.builder() \n .zone(\"us-central1-a\")\n .sourceMachineImage(\"projects/PROJECT-ID/global/machineImages/NAME\")\n .canIpForward(false)\n .labels(Map.of(\"my_key\", \"my_value\"))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tpl:\n type: gcp:compute:InstanceFromMachineImage\n properties:\n zone: us-central1-a\n sourceMachineImage: projects/PROJECT-ID/global/machineImages/NAME\n # Override fields from machine image\n canIpForward: false\n labels:\n my_key: my_value\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}", "properties": { "advancedMachineFeatures": { "$ref": "#/types/gcp:compute/InstanceFromMachineImageAdvancedMachineFeatures:InstanceFromMachineImageAdvancedMachineFeatures", @@ -133084,7 +134517,7 @@ "items": { "$ref": "#/types/gcp:compute/InstanceFromTemplateScratchDisk:InstanceFromTemplateScratchDisk" }, - "description": "The scratch disks attached to the instance.\n" + "description": "* `network_interface.alias_ip_range`\n* `network_interface.access_config`\n" }, "selfLink": { "type": "string", @@ -133285,7 +134718,7 @@ "items": { "$ref": "#/types/gcp:compute/InstanceFromTemplateScratchDisk:InstanceFromTemplateScratchDisk" }, - "description": "The scratch disks attached to the instance.\n", + "description": "* `network_interface.alias_ip_range`\n* `network_interface.access_config`\n", "willReplaceOnChanges": true }, "serviceAccount": { @@ -133467,7 +134900,7 @@ "items": { "$ref": "#/types/gcp:compute/InstanceFromTemplateScratchDisk:InstanceFromTemplateScratchDisk" }, - "description": "The scratch disks attached to the instance.\n", + "description": "* `network_interface.alias_ip_range`\n* `network_interface.access_config`\n", "willReplaceOnChanges": true }, "selfLink": { @@ -133508,7 +134941,7 @@ } }, "gcp:compute/instanceGroup:InstanceGroup": { - "description": "Creates a group of dissimilar Compute Engine virtual machine instances.\nFor more information, see [the official documentation](https://cloud.google.com/compute/docs/instance-groups/#unmanaged_instance_groups)\nand [API](https://cloud.google.com/compute/docs/reference/latest/instanceGroups)\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Empty Instance Group\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst test = new gcp.compute.InstanceGroup(\"test\", {\n description: \"Test instance group\",\n zone: \"us-central1-a\",\n network: google_compute_network[\"default\"].id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntest = gcp.compute.InstanceGroup(\"test\",\n description=\"Test instance group\",\n zone=\"us-central1-a\",\n network=google_compute_network[\"default\"][\"id\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var test = new Gcp.Compute.InstanceGroup(\"test\", new()\n {\n Description = \"Test instance group\",\n Zone = \"us-central1-a\",\n Network = google_compute_network.Default.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewInstanceGroup(ctx, \"test\", \u0026compute.InstanceGroupArgs{\n\t\t\tDescription: pulumi.String(\"Test instance group\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tNetwork: pulumi.Any(google_compute_network.Default.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.InstanceGroup;\nimport com.pulumi.gcp.compute.InstanceGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 InstanceGroup(\"test\", InstanceGroupArgs.builder() \n .description(\"Test instance group\")\n .zone(\"us-central1-a\")\n .network(google_compute_network.default().id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n test:\n type: gcp:compute:InstanceGroup\n properties:\n description: Test instance group\n zone: us-central1-a\n network: ${google_compute_network.default.id}\n```\n{{% /example %}}\n{{% example %}}\n### Example Usage - With instances and named ports\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst webservers = new gcp.compute.InstanceGroup(\"webservers\", {\n description: \"Test instance group\",\n instances: [\n google_compute_instance.test.id,\n google_compute_instance.test2.id,\n ],\n namedPorts: [\n {\n name: \"http\",\n port: 8080,\n },\n {\n name: \"https\",\n port: 8443,\n },\n ],\n zone: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nwebservers = gcp.compute.InstanceGroup(\"webservers\",\n description=\"Test instance group\",\n instances=[\n google_compute_instance[\"test\"][\"id\"],\n google_compute_instance[\"test2\"][\"id\"],\n ],\n named_ports=[\n gcp.compute.InstanceGroupNamedPortArgs(\n name=\"http\",\n port=8080,\n ),\n gcp.compute.InstanceGroupNamedPortArgs(\n name=\"https\",\n port=8443,\n ),\n ],\n zone=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var webservers = new Gcp.Compute.InstanceGroup(\"webservers\", new()\n {\n Description = \"Test instance group\",\n Instances = new[]\n {\n google_compute_instance.Test.Id,\n google_compute_instance.Test2.Id,\n },\n NamedPorts = new[]\n {\n new Gcp.Compute.Inputs.InstanceGroupNamedPortArgs\n {\n Name = \"http\",\n Port = 8080,\n },\n new Gcp.Compute.Inputs.InstanceGroupNamedPortArgs\n {\n Name = \"https\",\n Port = 8443,\n },\n },\n Zone = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewInstanceGroup(ctx, \"webservers\", \u0026compute.InstanceGroupArgs{\n\t\t\tDescription: pulumi.String(\"Test instance group\"),\n\t\t\tInstances: pulumi.StringArray{\n\t\t\t\tgoogle_compute_instance.Test.Id,\n\t\t\t\tgoogle_compute_instance.Test2.Id,\n\t\t\t},\n\t\t\tNamedPorts: compute.InstanceGroupNamedPortTypeArray{\n\t\t\t\t\u0026compute.InstanceGroupNamedPortTypeArgs{\n\t\t\t\t\tName: pulumi.String(\"http\"),\n\t\t\t\t\tPort: pulumi.Int(8080),\n\t\t\t\t},\n\t\t\t\t\u0026compute.InstanceGroupNamedPortTypeArgs{\n\t\t\t\t\tName: pulumi.String(\"https\"),\n\t\t\t\t\tPort: pulumi.Int(8443),\n\t\t\t\t},\n\t\t\t},\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.InstanceGroup;\nimport com.pulumi.gcp.compute.InstanceGroupArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupNamedPortArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var webservers = new InstanceGroup(\"webservers\", InstanceGroupArgs.builder() \n .description(\"Test instance group\")\n .instances( \n google_compute_instance.test().id(),\n google_compute_instance.test2().id())\n .namedPorts( \n InstanceGroupNamedPortArgs.builder()\n .name(\"http\")\n .port(\"8080\")\n .build(),\n InstanceGroupNamedPortArgs.builder()\n .name(\"https\")\n .port(\"8443\")\n .build())\n .zone(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n webservers:\n type: gcp:compute:InstanceGroup\n properties:\n description: Test instance group\n instances:\n - ${google_compute_instance.test.id}\n - ${google_compute_instance.test2.id}\n namedPorts:\n - name: http\n port: '8080'\n - name: https\n port: '8443'\n zone: us-central1-a\n```\n{{% /example %}}\n{{% example %}}\n### Example Usage - Recreating an instance group in use\nRecreating an instance group that's in use by another resource will give a\n`resourceInUseByAnotherResource` error. Use `lifecycle.create_before_destroy`\nas shown in this example to avoid this type of error.\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.InstanceGroup;\nimport com.pulumi.gcp.compute.InstanceGroupArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupNamedPortArgs;\nimport com.pulumi.gcp.compute.HttpsHealthCheck;\nimport com.pulumi.gcp.compute.HttpsHealthCheckArgs;\nimport com.pulumi.gcp.compute.BackendService;\nimport com.pulumi.gcp.compute.BackendServiceArgs;\nimport com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 debianImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var stagingVm = new Instance(\"stagingVm\", InstanceArgs.builder() \n .machineType(\"e2-medium\")\n .zone(\"us-central1-c\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(debianImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .build());\n\n var stagingGroup = new InstanceGroup(\"stagingGroup\", InstanceGroupArgs.builder() \n .zone(\"us-central1-c\")\n .instances(stagingVm.id())\n .namedPorts( \n InstanceGroupNamedPortArgs.builder()\n .name(\"http\")\n .port(\"8080\")\n .build(),\n InstanceGroupNamedPortArgs.builder()\n .name(\"https\")\n .port(\"8443\")\n .build())\n .build());\n\n var stagingHealth = new HttpsHealthCheck(\"stagingHealth\", HttpsHealthCheckArgs.builder() \n .requestPath(\"/health_check\")\n .build());\n\n var stagingService = new BackendService(\"stagingService\", BackendServiceArgs.builder() \n .portName(\"https\")\n .protocol(\"HTTPS\")\n .backends(BackendServiceBackendArgs.builder()\n .group(stagingGroup.id())\n .build())\n .healthChecks(stagingHealth.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n stagingGroup:\n type: gcp:compute:InstanceGroup\n properties:\n zone: us-central1-c\n instances:\n - ${stagingVm.id}\n namedPorts:\n - name: http\n port: '8080'\n - name: https\n port: '8443'\n stagingVm:\n type: gcp:compute:Instance\n properties:\n machineType: e2-medium\n zone: us-central1-c\n bootDisk:\n initializeParams:\n image: ${debianImage.selfLink}\n networkInterfaces:\n - network: default\n stagingService:\n type: gcp:compute:BackendService\n properties:\n portName: https\n protocol: HTTPS\n backends:\n - group: ${stagingGroup.id}\n healthChecks:\n - ${stagingHealth.id}\n stagingHealth:\n type: gcp:compute:HttpsHealthCheck\n properties:\n requestPath: /health_check\nvariables:\n debianImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance group can be imported using the `zone` and `name` with an optional `project`, e.g.\n\n```sh\n $ pulumi import gcp:compute/instanceGroup:InstanceGroup webservers us-central1-a/terraform-webservers\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/instanceGroup:InstanceGroup webservers big-project/us-central1-a/terraform-webservers\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/instanceGroup:InstanceGroup webservers projects/big-project/zones/us-central1-a/instanceGroups/terraform-webservers\n```\n\n ", + "description": "\n\n\n## Import\n\nInstance group can be imported using the `zone` and `name` with an optional `project`, e.g.\n\n```sh\n $ pulumi import gcp:compute/instanceGroup:InstanceGroup webservers us-central1-a/terraform-webservers\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/instanceGroup:InstanceGroup webservers big-project/us-central1-a/terraform-webservers\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/instanceGroup:InstanceGroup webservers projects/big-project/zones/us-central1-a/instanceGroups/terraform-webservers\n```\n\n ", "properties": { "description": { "type": "string", @@ -133762,7 +135195,7 @@ }, "waitForInstances": { "type": "boolean", - "description": "Whether to wait for all instances to be created/updated before\nreturning. Note that if this is set to true and the operation does not succeed, this provider will\ncontinue trying until it times out.\n" + "description": "Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the\noperation does not succeed, Terraform will continue trying until it times out.\n" }, "waitForInstancesStatus": { "type": "string", @@ -133871,7 +135304,7 @@ }, "waitForInstances": { "type": "boolean", - "description": "Whether to wait for all instances to be created/updated before\nreturning. Note that if this is set to true and the operation does not succeed, this provider will\ncontinue trying until it times out.\n" + "description": "Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the\noperation does not succeed, Terraform will continue trying until it times out.\n" }, "waitForInstancesStatus": { "type": "string", @@ -133995,7 +135428,7 @@ }, "waitForInstances": { "type": "boolean", - "description": "Whether to wait for all instances to be created/updated before\nreturning. Note that if this is set to true and the operation does not succeed, this provider will\ncontinue trying until it times out.\n" + "description": "Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the\noperation does not succeed, Terraform will continue trying until it times out.\n" }, "waitForInstancesStatus": { "type": "string", @@ -134428,7 +135861,7 @@ } }, "gcp:compute/instanceTemplate:InstanceTemplate": { - "description": "Manages a VM instance template resource within GCE. For more information see\n[the official documentation](https://cloud.google.com/compute/docs/instance-templates)\nand\n[API](https://cloud.google.com/compute/docs/reference/latest/instanceTemplates).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.ResourcePolicy;\nimport com.pulumi.gcp.compute.ResourcePolicyArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyScheduleArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs;\nimport com.pulumi.gcp.compute.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateSchedulingArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateServiceAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultAccount = new Account(\"defaultAccount\", AccountArgs.builder() \n .accountId(\"service-account-id\")\n .displayName(\"Service Account\")\n .build());\n\n final var myImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var foobar = new Disk(\"foobar\", DiskArgs.builder() \n .image(myImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .size(10)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var dailyBackup = new ResourcePolicy(\"dailyBackup\", ResourcePolicyArgs.builder() \n .region(\"us-central1\")\n .snapshotSchedulePolicy(ResourcePolicySnapshotSchedulePolicyArgs.builder()\n .schedule(ResourcePolicySnapshotSchedulePolicyScheduleArgs.builder()\n .dailySchedule(ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs.builder()\n .daysInCycle(1)\n .startTime(\"04:00\")\n .build())\n .build())\n .build())\n .build());\n\n var defaultInstanceTemplate = new InstanceTemplate(\"defaultInstanceTemplate\", InstanceTemplateArgs.builder() \n .description(\"This template is used to create app server instances.\")\n .tags( \n \"foo\",\n \"bar\")\n .labels(Map.of(\"environment\", \"dev\"))\n .instanceDescription(\"description assigned to instances\")\n .machineType(\"e2-medium\")\n .canIpForward(false)\n .scheduling(InstanceTemplateSchedulingArgs.builder()\n .automaticRestart(true)\n .onHostMaintenance(\"MIGRATE\")\n .build())\n .disks( \n InstanceTemplateDiskArgs.builder()\n .sourceImage(\"debian-cloud/debian-11\")\n .autoDelete(true)\n .boot(true)\n .resourcePolicies(dailyBackup.id())\n .build(),\n InstanceTemplateDiskArgs.builder()\n .source(foobar.name())\n .autoDelete(false)\n .boot(false)\n .build())\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .metadata(Map.of(\"foo\", \"bar\"))\n .serviceAccount(InstanceTemplateServiceAccountArgs.builder()\n .email(defaultAccount.email())\n .scopes(\"cloud-platform\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultAccount:\n type: gcp:serviceAccount:Account\n properties:\n accountId: service-account-id\n displayName: Service Account\n defaultInstanceTemplate:\n type: gcp:compute:InstanceTemplate\n properties:\n description: This template is used to create app server instances.\n tags:\n - foo\n - bar\n labels:\n environment: dev\n instanceDescription: description assigned to instances\n machineType: e2-medium\n canIpForward: false\n scheduling:\n automaticRestart: true\n onHostMaintenance: MIGRATE\n # Create a new boot disk from an image\n disks:\n - sourceImage: debian-cloud/debian-11\n autoDelete: true\n boot: true\n resourcePolicies:\n - ${dailyBackup.id}\n - source: ${foobar.name}\n autoDelete: false\n boot: false\n networkInterfaces:\n - network: default\n metadata:\n foo: bar\n serviceAccount:\n email: ${defaultAccount.email}\n scopes:\n - cloud-platform\n foobar:\n type: gcp:compute:Disk\n properties:\n image: ${myImage.selfLink}\n size: 10\n type: pd-ssd\n zone: us-central1-a\n dailyBackup:\n type: gcp:compute:ResourcePolicy\n properties:\n region: us-central1\n snapshotSchedulePolicy:\n schedule:\n dailySchedule:\n daysInCycle: 1\n startTime: 04:00\nvariables:\n myImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% example %}}\n### Automatic Envoy Deployment\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.compute.getDefaultServiceAccount({});\nconst myImage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst foobar = new gcp.compute.InstanceTemplate(\"foobar\", {\n machineType: \"e2-medium\",\n canIpForward: false,\n tags: [\n \"foo\",\n \"bar\",\n ],\n disks: [{\n sourceImage: myImage.then(myImage =\u003e myImage.selfLink),\n autoDelete: true,\n boot: true,\n }],\n networkInterfaces: [{\n network: \"default\",\n }],\n scheduling: {\n preemptible: false,\n automaticRestart: true,\n },\n metadata: {\n \"gce-software-declaration\": `{\n \"softwareRecipes\": [{\n \"name\": \"install-gce-service-proxy-agent\",\n \"desired_state\": \"INSTALLED\",\n \"installSteps\": [{\n \"scriptRun\": {\n \"script\": \"#! /bin/bash\\nZONE=$(curl --silent http://metadata.google.internal/computeMetadata/v1/instance/zone -H Metadata-Flavor:Google | cut -d/ -f4 )\\nexport SERVICE_PROXY_AGENT_DIRECTORY=$(mktemp -d)\\nsudo gsutil cp gs://gce-service-proxy-\"$ZONE\"/service-proxy-agent/releases/service-proxy-agent-0.2.tgz \"$SERVICE_PROXY_AGENT_DIRECTORY\" || sudo gsutil cp gs://gce-service-proxy/service-proxy-agent/releases/service-proxy-agent-0.2.tgz \"$SERVICE_PROXY_AGENT_DIRECTORY\"\\nsudo tar -xzf \"$SERVICE_PROXY_AGENT_DIRECTORY\"/service-proxy-agent-0.2.tgz -C \"$SERVICE_PROXY_AGENT_DIRECTORY\"\\n\"$SERVICE_PROXY_AGENT_DIRECTORY\"/service-proxy-agent/service-proxy-agent-bootstrap.sh\"\n }\n }]\n }]\n}\n`,\n \"gce-service-proxy\": `{\n \"api-version\": \"0.2\",\n \"proxy-spec\": {\n \"proxy-port\": 15001,\n \"network\": \"my-network\",\n \"tracing\": \"ON\",\n \"access-log\": \"/var/log/envoy/access.log\"\n }\n \"service\": {\n \"serving-ports\": [80, 81]\n },\n \"labels\": {\n \"app_name\": \"bookserver_app\",\n \"app_version\": \"STABLE\"\n }\n}\n`,\n \"enable-guest-attributes\": \"true\",\n \"enable-osconfig\": \"true\",\n },\n serviceAccount: {\n email: _default.then(_default =\u003e _default.email),\n scopes: [\"cloud-platform\"],\n },\n labels: {\n \"gce-service-proxy\": \"on\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.get_default_service_account()\nmy_image = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\nfoobar = gcp.compute.InstanceTemplate(\"foobar\",\n machine_type=\"e2-medium\",\n can_ip_forward=False,\n tags=[\n \"foo\",\n \"bar\",\n ],\n disks=[gcp.compute.InstanceTemplateDiskArgs(\n source_image=my_image.self_link,\n auto_delete=True,\n boot=True,\n )],\n network_interfaces=[gcp.compute.InstanceTemplateNetworkInterfaceArgs(\n network=\"default\",\n )],\n scheduling=gcp.compute.InstanceTemplateSchedulingArgs(\n preemptible=False,\n automatic_restart=True,\n ),\n metadata={\n \"gce-software-declaration\": \"\"\"{\n \"softwareRecipes\": [{\n \"name\": \"install-gce-service-proxy-agent\",\n \"desired_state\": \"INSTALLED\",\n \"installSteps\": [{\n \"scriptRun\": {\n \"script\": \"#! /bin/bash\\nZONE=$(curl --silent http://metadata.google.internal/computeMetadata/v1/instance/zone -H Metadata-Flavor:Google | cut -d/ -f4 )\\nexport SERVICE_PROXY_AGENT_DIRECTORY=$(mktemp -d)\\nsudo gsutil cp gs://gce-service-proxy-\"$ZONE\"/service-proxy-agent/releases/service-proxy-agent-0.2.tgz \"$SERVICE_PROXY_AGENT_DIRECTORY\" || sudo gsutil cp gs://gce-service-proxy/service-proxy-agent/releases/service-proxy-agent-0.2.tgz \"$SERVICE_PROXY_AGENT_DIRECTORY\"\\nsudo tar -xzf \"$SERVICE_PROXY_AGENT_DIRECTORY\"/service-proxy-agent-0.2.tgz -C \"$SERVICE_PROXY_AGENT_DIRECTORY\"\\n\"$SERVICE_PROXY_AGENT_DIRECTORY\"/service-proxy-agent/service-proxy-agent-bootstrap.sh\"\n }\n }]\n }]\n}\n\"\"\",\n \"gce-service-proxy\": \"\"\"{\n \"api-version\": \"0.2\",\n \"proxy-spec\": {\n \"proxy-port\": 15001,\n \"network\": \"my-network\",\n \"tracing\": \"ON\",\n \"access-log\": \"/var/log/envoy/access.log\"\n }\n \"service\": {\n \"serving-ports\": [80, 81]\n },\n \"labels\": {\n \"app_name\": \"bookserver_app\",\n \"app_version\": \"STABLE\"\n }\n}\n\"\"\",\n \"enable-guest-attributes\": \"true\",\n \"enable-osconfig\": \"true\",\n },\n service_account=gcp.compute.InstanceTemplateServiceAccountArgs(\n email=default.email,\n scopes=[\"cloud-platform\"],\n ),\n labels={\n \"gce-service-proxy\": \"on\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Compute.GetDefaultServiceAccount.Invoke();\n\n var myImage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var foobar = new Gcp.Compute.InstanceTemplate(\"foobar\", new()\n {\n MachineType = \"e2-medium\",\n CanIpForward = false,\n Tags = new[]\n {\n \"foo\",\n \"bar\",\n },\n Disks = new[]\n {\n new Gcp.Compute.Inputs.InstanceTemplateDiskArgs\n {\n SourceImage = myImage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n AutoDelete = true,\n Boot = true,\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceTemplateNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n Scheduling = new Gcp.Compute.Inputs.InstanceTemplateSchedulingArgs\n {\n Preemptible = false,\n AutomaticRestart = true,\n },\n Metadata = \n {\n { \"gce-software-declaration\", @\"{\n \"\"softwareRecipes\"\": [{\n \"\"name\"\": \"\"install-gce-service-proxy-agent\"\",\n \"\"desired_state\"\": \"\"INSTALLED\"\",\n \"\"installSteps\"\": [{\n \"\"scriptRun\"\": {\n \"\"script\"\": \"\"#! /bin/bash\\nZONE=$(curl --silent http://metadata.google.internal/computeMetadata/v1/instance/zone -H Metadata-Flavor:Google | cut -d/ -f4 )\\nexport SERVICE_PROXY_AGENT_DIRECTORY=$(mktemp -d)\\nsudo gsutil cp gs://gce-service-proxy-\"\"$ZONE\"\"/service-proxy-agent/releases/service-proxy-agent-0.2.tgz \"\"$SERVICE_PROXY_AGENT_DIRECTORY\"\" || sudo gsutil cp gs://gce-service-proxy/service-proxy-agent/releases/service-proxy-agent-0.2.tgz \"\"$SERVICE_PROXY_AGENT_DIRECTORY\"\"\\nsudo tar -xzf \"\"$SERVICE_PROXY_AGENT_DIRECTORY\"\"/service-proxy-agent-0.2.tgz -C \"\"$SERVICE_PROXY_AGENT_DIRECTORY\"\"\\n\"\"$SERVICE_PROXY_AGENT_DIRECTORY\"\"/service-proxy-agent/service-proxy-agent-bootstrap.sh\"\"\n }\n }]\n }]\n}\n\" },\n { \"gce-service-proxy\", @\"{\n \"\"api-version\"\": \"\"0.2\"\",\n \"\"proxy-spec\"\": {\n \"\"proxy-port\"\": 15001,\n \"\"network\"\": \"\"my-network\"\",\n \"\"tracing\"\": \"\"ON\"\",\n \"\"access-log\"\": \"\"/var/log/envoy/access.log\"\"\n }\n \"\"service\"\": {\n \"\"serving-ports\"\": [80, 81]\n },\n \"\"labels\"\": {\n \"\"app_name\"\": \"\"bookserver_app\"\",\n \"\"app_version\"\": \"\"STABLE\"\"\n }\n}\n\" },\n { \"enable-guest-attributes\", \"true\" },\n { \"enable-osconfig\", \"true\" },\n },\n ServiceAccount = new Gcp.Compute.Inputs.InstanceTemplateServiceAccountArgs\n {\n Email = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Email)),\n Scopes = new[]\n {\n \"cloud-platform\",\n },\n },\n Labels = \n {\n { \"gce-service-proxy\", \"on\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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_default, err := compute.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyImage, 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.NewInstanceTemplate(ctx, \"foobar\", \u0026compute.InstanceTemplateArgs{\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tCanIpForward: pulumi.Bool(false),\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"foo\"),\n\t\t\t\tpulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tDisks: compute.InstanceTemplateDiskArray{\n\t\t\t\t\u0026compute.InstanceTemplateDiskArgs{\n\t\t\t\t\tSourceImage: *pulumi.String(myImage.SelfLink),\n\t\t\t\t\tAutoDelete: pulumi.Bool(true),\n\t\t\t\t\tBoot: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.InstanceTemplateNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceTemplateNetworkInterfaceArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tScheduling: \u0026compute.InstanceTemplateSchedulingArgs{\n\t\t\t\tPreemptible: pulumi.Bool(false),\n\t\t\t\tAutomaticRestart: pulumi.Bool(true),\n\t\t\t},\n\t\t\tMetadata: pulumi.AnyMap{\n\t\t\t\t\"gce-software-declaration\": pulumi.Any(fmt.Sprintf(`{\n \"softwareRecipes\": [{\n \"name\": \"install-gce-service-proxy-agent\",\n \"desired_state\": \"INSTALLED\",\n \"installSteps\": [{\n \"scriptRun\": {\n \"script\": \"#! /bin/bash\\nZONE=$(curl --silent http://metadata.google.internal/computeMetadata/v1/instance/zone -H Metadata-Flavor:Google | cut -d/ -f4 )\\nexport SERVICE_PROXY_AGENT_DIRECTORY=$(mktemp -d)\\nsudo gsutil cp gs://gce-service-proxy-\"$ZONE\"/service-proxy-agent/releases/service-proxy-agent-0.2.tgz \"$SERVICE_PROXY_AGENT_DIRECTORY\" || sudo gsutil cp gs://gce-service-proxy/service-proxy-agent/releases/service-proxy-agent-0.2.tgz \"$SERVICE_PROXY_AGENT_DIRECTORY\"\\nsudo tar -xzf \"$SERVICE_PROXY_AGENT_DIRECTORY\"/service-proxy-agent-0.2.tgz -C \"$SERVICE_PROXY_AGENT_DIRECTORY\"\\n\"$SERVICE_PROXY_AGENT_DIRECTORY\"/service-proxy-agent/service-proxy-agent-bootstrap.sh\"\n }\n }]\n }]\n}\n`)),\n\t\t\t\t\"gce-service-proxy\": pulumi.Any(fmt.Sprintf(`{\n \"api-version\": \"0.2\",\n \"proxy-spec\": {\n \"proxy-port\": 15001,\n \"network\": \"my-network\",\n \"tracing\": \"ON\",\n \"access-log\": \"/var/log/envoy/access.log\"\n }\n \"service\": {\n \"serving-ports\": [80, 81]\n },\n \"labels\": {\n \"app_name\": \"bookserver_app\",\n \"app_version\": \"STABLE\"\n }\n}\n`)),\n\t\t\t\t\"enable-guest-attributes\": pulumi.Any(\"true\"),\n\t\t\t\t\"enable-osconfig\": pulumi.Any(\"true\"),\n\t\t\t},\n\t\t\tServiceAccount: \u0026compute.InstanceTemplateServiceAccountArgs{\n\t\t\t\tEmail: *pulumi.String(_default.Email),\n\t\t\t\tScopes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"cloud-platform\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"gce-service-proxy\": pulumi.String(\"on\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateSchedulingArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateServiceAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = ComputeFunctions.getDefaultServiceAccount();\n\n final var myImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var foobar = new InstanceTemplate(\"foobar\", InstanceTemplateArgs.builder() \n .machineType(\"e2-medium\")\n .canIpForward(false)\n .tags( \n \"foo\",\n \"bar\")\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(myImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .autoDelete(true)\n .boot(true)\n .build())\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .scheduling(InstanceTemplateSchedulingArgs.builder()\n .preemptible(false)\n .automaticRestart(true)\n .build())\n .metadata(Map.ofEntries(\n Map.entry(\"gce-software-declaration\", \"\"\"\n{\n \"softwareRecipes\": [{\n \"name\": \"install-gce-service-proxy-agent\",\n \"desired_state\": \"INSTALLED\",\n \"installSteps\": [{\n \"scriptRun\": {\n \"script\": \"#! /bin/bash\\nZONE=$(curl --silent http://metadata.google.internal/computeMetadata/v1/instance/zone -H Metadata-Flavor:Google | cut -d/ -f4 )\\nexport SERVICE_PROXY_AGENT_DIRECTORY=$(mktemp -d)\\nsudo gsutil cp gs://gce-service-proxy-\"$ZONE\"/service-proxy-agent/releases/service-proxy-agent-0.2.tgz \"$SERVICE_PROXY_AGENT_DIRECTORY\" || sudo gsutil cp gs://gce-service-proxy/service-proxy-agent/releases/service-proxy-agent-0.2.tgz \"$SERVICE_PROXY_AGENT_DIRECTORY\"\\nsudo tar -xzf \"$SERVICE_PROXY_AGENT_DIRECTORY\"/service-proxy-agent-0.2.tgz -C \"$SERVICE_PROXY_AGENT_DIRECTORY\"\\n\"$SERVICE_PROXY_AGENT_DIRECTORY\"/service-proxy-agent/service-proxy-agent-bootstrap.sh\"\n }\n }]\n }]\n}\n \"\"\"),\n Map.entry(\"gce-service-proxy\", \"\"\"\n{\n \"api-version\": \"0.2\",\n \"proxy-spec\": {\n \"proxy-port\": 15001,\n \"network\": \"my-network\",\n \"tracing\": \"ON\",\n \"access-log\": \"/var/log/envoy/access.log\"\n }\n \"service\": {\n \"serving-ports\": [80, 81]\n },\n \"labels\": {\n \"app_name\": \"bookserver_app\",\n \"app_version\": \"STABLE\"\n }\n}\n \"\"\"),\n Map.entry(\"enable-guest-attributes\", \"true\"),\n Map.entry(\"enable-osconfig\", \"true\")\n ))\n .serviceAccount(InstanceTemplateServiceAccountArgs.builder()\n .email(default_.email())\n .scopes(\"cloud-platform\")\n .build())\n .labels(Map.of(\"gce-service-proxy\", \"on\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n foobar:\n type: gcp:compute:InstanceTemplate\n properties:\n machineType: e2-medium\n canIpForward: false\n tags:\n - foo\n - bar\n disks:\n - sourceImage: ${myImage.selfLink}\n autoDelete: true\n boot: true\n networkInterfaces:\n - network: default\n scheduling:\n preemptible: false\n automaticRestart: true\n metadata:\n gce-software-declaration: |\n {\n \"softwareRecipes\": [{\n \"name\": \"install-gce-service-proxy-agent\",\n \"desired_state\": \"INSTALLED\",\n \"installSteps\": [{\n \"scriptRun\": {\n \"script\": \"#! /bin/bash\\nZONE=$(curl --silent http://metadata.google.internal/computeMetadata/v1/instance/zone -H Metadata-Flavor:Google | cut -d/ -f4 )\\nexport SERVICE_PROXY_AGENT_DIRECTORY=$(mktemp -d)\\nsudo gsutil cp gs://gce-service-proxy-\"$ZONE\"/service-proxy-agent/releases/service-proxy-agent-0.2.tgz \"$SERVICE_PROXY_AGENT_DIRECTORY\" || sudo gsutil cp gs://gce-service-proxy/service-proxy-agent/releases/service-proxy-agent-0.2.tgz \"$SERVICE_PROXY_AGENT_DIRECTORY\"\\nsudo tar -xzf \"$SERVICE_PROXY_AGENT_DIRECTORY\"/service-proxy-agent-0.2.tgz -C \"$SERVICE_PROXY_AGENT_DIRECTORY\"\\n\"$SERVICE_PROXY_AGENT_DIRECTORY\"/service-proxy-agent/service-proxy-agent-bootstrap.sh\"\n }\n }]\n }]\n }\n gce-service-proxy: |\n {\n \"api-version\": \"0.2\",\n \"proxy-spec\": {\n \"proxy-port\": 15001,\n \"network\": \"my-network\",\n \"tracing\": \"ON\",\n \"access-log\": \"/var/log/envoy/access.log\"\n }\n \"service\": {\n \"serving-ports\": [80, 81]\n },\n \"labels\": {\n \"app_name\": \"bookserver_app\",\n \"app_version\": \"STABLE\"\n }\n }\n enable-guest-attributes: 'true'\n enable-osconfig: 'true'\n serviceAccount:\n email: ${default.email}\n scopes:\n - cloud-platform\n labels:\n gce-service-proxy: on\nvariables:\n default:\n fn::invoke:\n Function: gcp:compute:getDefaultServiceAccount\n Arguments: {}\n myImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% /examples %}}\n## Using with Instance Group Manager\n\nInstance Templates cannot be updated after creation with the Google\nCloud Platform API. In order to update an Instance Template, this provider will\ncreate a replacement. In order to effectively\nuse an Instance Template resource with an [Instance Group Manager resource](https://www.terraform.io/docs/providers/google/r/compute_instance_group_manager.html).\nEither omit the Instance Template `name` attribute, or specify a partial name\nwith `name_prefix`. Example:\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.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var instanceTemplate = new InstanceTemplate(\"instanceTemplate\", InstanceTemplateArgs.builder() \n .namePrefix(\"instance-template-\")\n .machineType(\"e2-medium\")\n .region(\"us-central1\")\n .disks()\n .networkInterfaces()\n .build());\n\n var instanceGroupManager = new InstanceGroupManager(\"instanceGroupManager\", InstanceGroupManagerArgs.builder() \n .instanceTemplate(instanceTemplate.id())\n .baseInstanceName(\"instance-group-manager\")\n .zone(\"us-central1-f\")\n .targetSize(\"1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instanceTemplate:\n type: gcp:compute:InstanceTemplate\n properties:\n namePrefix: instance-template-\n machineType: e2-medium\n region: us-central1\n # boot disk\n disks:\n - {}\n # networking\n networkInterfaces:\n - {}\n instanceGroupManager:\n type: gcp:compute:InstanceGroupManager\n properties:\n instanceTemplate: ${instanceTemplate.id}\n baseInstanceName: instance-group-manager\n zone: us-central1-f\n targetSize: '1'\n```\n\nWith this setup, this provider generates a unique name for your Instance\nTemplate and can then update the Instance Group manager without conflict before\ndestroying the previous Instance Template.\n\n## Deploying the Latest Image\n\nA common way to use instance templates and managed instance groups is to deploy the\nlatest image in a family, usually the latest build of your application. There are two\nways to do this in the provider, and they have their pros and cons. The difference ends\nup being in how \"latest\" is interpreted. You can either deploy the latest image available\nwhen the provider runs, or you can have each instance check what the latest image is when\nit's being created, either as part of a scaling event or being rebuilt by the instance\ngroup manager.\n\nIf you're not sure, we recommend deploying the latest image available when the provider runs,\nbecause this means all the instances in your group will be based on the same image, always,\nand means that no upgrades or changes to your instances happen outside of a `pulumi up`.\nYou can achieve this by using the `gcp.compute.Image`\ndata source, which will retrieve the latest image on every `pulumi apply`, and will update\nthe template to use that specific image:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myImage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst instanceTemplate = new gcp.compute.InstanceTemplate(\"instanceTemplate\", {\n namePrefix: \"instance-template-\",\n machineType: \"e2-medium\",\n region: \"us-central1\",\n disks: [{\n sourceImage: myImage.then(myImage =\u003e myImage.selfLink),\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_image = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\ninstance_template = gcp.compute.InstanceTemplate(\"instanceTemplate\",\n name_prefix=\"instance-template-\",\n machine_type=\"e2-medium\",\n region=\"us-central1\",\n disks=[gcp.compute.InstanceTemplateDiskArgs(\n source_image=my_image.self_link,\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myImage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var instanceTemplate = new Gcp.Compute.InstanceTemplate(\"instanceTemplate\", new()\n {\n NamePrefix = \"instance-template-\",\n MachineType = \"e2-medium\",\n Region = \"us-central1\",\n Disks = new[]\n {\n new Gcp.Compute.Inputs.InstanceTemplateDiskArgs\n {\n SourceImage = myImage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tmyImage, 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.NewInstanceTemplate(ctx, \"instanceTemplate\", \u0026compute.InstanceTemplateArgs{\n\t\t\tNamePrefix: pulumi.String(\"instance-template-\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDisks: compute.InstanceTemplateDiskArray{\n\t\t\t\t\u0026compute.InstanceTemplateDiskArgs{\n\t\t\t\t\tSourceImage: *pulumi.String(myImage.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\treturn nil\n\t})\n}\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.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 myImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var instanceTemplate = new InstanceTemplate(\"instanceTemplate\", InstanceTemplateArgs.builder() \n .namePrefix(\"instance-template-\")\n .machineType(\"e2-medium\")\n .region(\"us-central1\")\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(myImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instanceTemplate:\n type: gcp:compute:InstanceTemplate\n properties:\n namePrefix: instance-template-\n machineType: e2-medium\n region: us-central1\n # boot disk\n disks:\n - sourceImage: ${myImage.selfLink}\nvariables:\n myImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n\nTo have instances update to the latest on every scaling event or instance re-creation,\nuse the family as the image for the disk, and it will use GCP's default behavior, setting\nthe image for the template to the family:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instanceTemplate = new gcp.compute.InstanceTemplate(\"instanceTemplate\", {\n disks: [{\n sourceImage: \"debian-cloud/debian-11\",\n }],\n machineType: \"e2-medium\",\n namePrefix: \"instance-template-\",\n region: \"us-central1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance_template = gcp.compute.InstanceTemplate(\"instanceTemplate\",\n disks=[gcp.compute.InstanceTemplateDiskArgs(\n source_image=\"debian-cloud/debian-11\",\n )],\n machine_type=\"e2-medium\",\n name_prefix=\"instance-template-\",\n region=\"us-central1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instanceTemplate = new Gcp.Compute.InstanceTemplate(\"instanceTemplate\", new()\n {\n Disks = new[]\n {\n new Gcp.Compute.Inputs.InstanceTemplateDiskArgs\n {\n SourceImage = \"debian-cloud/debian-11\",\n },\n },\n MachineType = \"e2-medium\",\n NamePrefix = \"instance-template-\",\n Region = \"us-central1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewInstanceTemplate(ctx, \"instanceTemplate\", \u0026compute.InstanceTemplateArgs{\n\t\t\tDisks: compute.InstanceTemplateDiskArray{\n\t\t\t\t\u0026compute.InstanceTemplateDiskArgs{\n\t\t\t\t\tSourceImage: pulumi.String(\"debian-cloud/debian-11\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tNamePrefix: pulumi.String(\"instance-template-\"),\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\treturn nil\n\t})\n}\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.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var instanceTemplate = new InstanceTemplate(\"instanceTemplate\", InstanceTemplateArgs.builder() \n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(\"debian-cloud/debian-11\")\n .build())\n .machineType(\"e2-medium\")\n .namePrefix(\"instance-template-\")\n .region(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instanceTemplate:\n type: gcp:compute:InstanceTemplate\n properties:\n # boot disk\n disks:\n - sourceImage: debian-cloud/debian-11\n machineType: e2-medium\n namePrefix: instance-template-\n region: us-central1\n```\n\n\n## Import\n\nInstance templates can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/instanceTemplate:InstanceTemplate default projects/{{project}}/global/instanceTemplates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/instanceTemplate:InstanceTemplate default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/instanceTemplate:InstanceTemplate default {{name}}\n```\n\n [custom-vm-types]https://cloud.google.com/dataproc/docs/concepts/compute/custom-machine-types [network-tier]https://cloud.google.com/network-tiers/docs/overview ", + "description": "\n\n\n## Import\n\nInstance templates can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/instanceTemplate:InstanceTemplate default projects/{{project}}/global/instanceTemplates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/instanceTemplate:InstanceTemplate default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/instanceTemplate:InstanceTemplate default {{name}}\n```\n\n [custom-vm-types]https://cloud.google.com/dataproc/docs/concepts/compute/custom-machine-types [network-tier]https://cloud.google.com/network-tiers/docs/overview ", "properties": { "advancedMachineFeatures": { "$ref": "#/types/gcp:compute/InstanceTemplateAdvancedMachineFeatures:InstanceTemplateAdvancedMachineFeatures", @@ -134500,7 +135933,7 @@ }, "name": { "type": "string", - "description": "The name of the instance template. If you leave\nthis blank, the provider will auto-generate a unique name.\n" + "description": "The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name.\n" }, "namePrefix": { "type": "string", @@ -134651,7 +136084,7 @@ }, "name": { "type": "string", - "description": "The name of the instance template. If you leave\nthis blank, the provider will auto-generate a unique name.\n", + "description": "The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name.\n", "willReplaceOnChanges": true }, "namePrefix": { @@ -134801,7 +136234,7 @@ }, "name": { "type": "string", - "description": "The name of the instance template. If you leave\nthis blank, the provider will auto-generate a unique name.\n", + "description": "The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name.\n", "willReplaceOnChanges": true }, "namePrefix": { @@ -135205,7 +136638,7 @@ } }, "gcp:compute/machineImage:MachineImage": { - "description": "Represents a Machine Image resource. Machine images store all the configuration,\nmetadata, permissions, and data from one or more disks required to create a\nVirtual machine (VM) instance.\n\nTo get more information about MachineImage, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/machineImages)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/machine-images)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Machine Image Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vm = new gcp.compute.Instance(\"vm\", {\n machineType: \"e2-medium\",\n bootDisk: {\n initializeParams: {\n image: \"debian-cloud/debian-11\",\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n}, {\n provider: google_beta,\n});\nconst image = new gcp.compute.MachineImage(\"image\", {sourceInstance: vm.selfLink}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nvm = gcp.compute.Instance(\"vm\",\n machine_type=\"e2-medium\",\n boot_disk=gcp.compute.InstanceBootDiskArgs(\n initialize_params=gcp.compute.InstanceBootDiskInitializeParamsArgs(\n image=\"debian-cloud/debian-11\",\n ),\n ),\n network_interfaces=[gcp.compute.InstanceNetworkInterfaceArgs(\n network=\"default\",\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\nimage = gcp.compute.MachineImage(\"image\", source_instance=vm.self_link,\nopts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vm = new Gcp.Compute.Instance(\"vm\", new()\n {\n MachineType = \"e2-medium\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = \"debian-cloud/debian-11\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var image = new Gcp.Compute.MachineImage(\"image\", new()\n {\n SourceInstance = vm.SelfLink,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tvm, err := compute.NewInstance(ctx, \"vm\", \u0026compute.InstanceArgs{\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(\"debian-cloud/debian-11\"),\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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewMachineImage(ctx, \"image\", \u0026compute.MachineImageArgs{\n\t\t\tSourceInstance: vm.SelfLink,\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.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.MachineImage;\nimport com.pulumi.gcp.compute.MachineImageArgs;\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 vm = new Instance(\"vm\", InstanceArgs.builder() \n .machineType(\"e2-medium\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"debian-cloud/debian-11\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var image = new MachineImage(\"image\", MachineImageArgs.builder() \n .sourceInstance(vm.selfLink())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n vm:\n type: gcp:compute:Instance\n properties:\n machineType: e2-medium\n bootDisk:\n initializeParams:\n image: debian-cloud/debian-11\n networkInterfaces:\n - network: default\n options:\n provider: ${[\"google-beta\"]}\n image:\n type: gcp:compute:MachineImage\n properties:\n sourceInstance: ${vm.selfLink}\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Compute Machine Image Kms\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vm = new gcp.compute.Instance(\"vm\", {\n machineType: \"e2-medium\",\n bootDisk: {\n initializeParams: {\n image: \"debian-cloud/debian-11\",\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n}, {\n provider: google_beta,\n});\nconst keyRing = new gcp.kms.KeyRing(\"keyRing\", {location: \"us\"}, {\n provider: google_beta,\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"cryptoKey\", {keyRing: keyRing.id}, {\n provider: google_beta,\n});\nconst project = gcp.organizations.getProject({});\nconst kms_project_binding = new gcp.projects.IAMMember(\"kms-project-binding\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@compute-system.iam.gserviceaccount.com`),\n}, {\n provider: google_beta,\n});\nconst image = new gcp.compute.MachineImage(\"image\", {\n sourceInstance: vm.selfLink,\n machineImageEncryptionKey: {\n kmsKeyName: cryptoKey.id,\n },\n}, {\n provider: google_beta,\n dependsOn: [kms_project_binding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nvm = gcp.compute.Instance(\"vm\",\n machine_type=\"e2-medium\",\n boot_disk=gcp.compute.InstanceBootDiskArgs(\n initialize_params=gcp.compute.InstanceBootDiskInitializeParamsArgs(\n image=\"debian-cloud/debian-11\",\n ),\n ),\n network_interfaces=[gcp.compute.InstanceNetworkInterfaceArgs(\n network=\"default\",\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\nkey_ring = gcp.kms.KeyRing(\"keyRing\", location=\"us\",\nopts=pulumi.ResourceOptions(provider=google_beta))\ncrypto_key = gcp.kms.CryptoKey(\"cryptoKey\", key_ring=key_ring.id,\nopts=pulumi.ResourceOptions(provider=google_beta))\nproject = gcp.organizations.get_project()\nkms_project_binding = gcp.projects.IAMMember(\"kms-project-binding\",\n project=project.project_id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@compute-system.iam.gserviceaccount.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nimage = gcp.compute.MachineImage(\"image\",\n source_instance=vm.self_link,\n machine_image_encryption_key=gcp.compute.MachineImageMachineImageEncryptionKeyArgs(\n kms_key_name=crypto_key.id,\n ),\n opts=pulumi.ResourceOptions(provider=google_beta,\n depends_on=[kms_project_binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vm = new Gcp.Compute.Instance(\"vm\", new()\n {\n MachineType = \"e2-medium\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = \"debian-cloud/debian-11\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var keyRing = new Gcp.Kms.KeyRing(\"keyRing\", new()\n {\n Location = \"us\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"cryptoKey\", new()\n {\n KeyRing = keyRing.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var kms_project_binding = new Gcp.Projects.IAMMember(\"kms-project-binding\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@compute-system.iam.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var image = new Gcp.Compute.MachineImage(\"image\", new()\n {\n SourceInstance = vm.SelfLink,\n MachineImageEncryptionKey = new Gcp.Compute.Inputs.MachineImageMachineImageEncryptionKeyArgs\n {\n KmsKeyName = cryptoKey.Id,\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n DependsOn = new[]\n {\n kms_project_binding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tvm, err := compute.NewInstance(ctx, \"vm\", \u0026compute.InstanceArgs{\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(\"debian-cloud/debian-11\"),\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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyRing, err := kms.NewKeyRing(ctx, \"keyRing\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"cryptoKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyRing.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = projects.NewIAMMember(ctx, \"kms-project-binding\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@compute-system.iam.gserviceaccount.com\", project.Number)),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewMachineImage(ctx, \"image\", \u0026compute.MachineImageArgs{\n\t\t\tSourceInstance: vm.SelfLink,\n\t\t\tMachineImageEncryptionKey: \u0026compute.MachineImageMachineImageEncryptionKeyArgs{\n\t\t\t\tKmsKeyName: cryptoKey.ID(),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta), pulumi.DependsOn([]pulumi.Resource{\n\t\t\tkms_project_binding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\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.compute.MachineImage;\nimport com.pulumi.gcp.compute.MachineImageArgs;\nimport com.pulumi.gcp.compute.inputs.MachineImageMachineImageEncryptionKeyArgs;\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 vm = new Instance(\"vm\", InstanceArgs.builder() \n .machineType(\"e2-medium\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"debian-cloud/debian-11\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .location(\"us\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .keyRing(keyRing.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var kms_project_binding = new IAMMember(\"kms-project-binding\", IAMMemberArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@compute-system.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var image = new MachineImage(\"image\", MachineImageArgs.builder() \n .sourceInstance(vm.selfLink())\n .machineImageEncryptionKey(MachineImageMachineImageEncryptionKeyArgs.builder()\n .kmsKeyName(cryptoKey.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .dependsOn(kms_project_binding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n vm:\n type: gcp:compute:Instance\n properties:\n machineType: e2-medium\n bootDisk:\n initializeParams:\n image: debian-cloud/debian-11\n networkInterfaces:\n - network: default\n options:\n provider: ${[\"google-beta\"]}\n image:\n type: gcp:compute:MachineImage\n properties:\n sourceInstance: ${vm.selfLink}\n machineImageEncryptionKey:\n kmsKeyName: ${cryptoKey.id}\n options:\n provider: ${[\"google-beta\"]}\n dependson:\n - ${[\"kms-project-binding\"]}\n cryptoKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyRing.id}\n options:\n provider: ${[\"google-beta\"]}\n keyRing:\n type: gcp:kms:KeyRing\n properties:\n location: us\n options:\n provider: ${[\"google-beta\"]}\n kms-project-binding:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@compute-system.iam.gserviceaccount.com\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nMachineImage can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/machineImage:MachineImage default projects/{{project}}/global/machineImages/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/machineImage:MachineImage default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/machineImage:MachineImage default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Machine Image Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vm = new gcp.compute.Instance(\"vm\", {\n machineType: \"e2-medium\",\n bootDisk: {\n initializeParams: {\n image: \"debian-cloud/debian-11\",\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n}, {\n provider: google_beta,\n});\nconst image = new gcp.compute.MachineImage(\"image\", {sourceInstance: vm.selfLink}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nvm = gcp.compute.Instance(\"vm\",\n machine_type=\"e2-medium\",\n boot_disk=gcp.compute.InstanceBootDiskArgs(\n initialize_params=gcp.compute.InstanceBootDiskInitializeParamsArgs(\n image=\"debian-cloud/debian-11\",\n ),\n ),\n network_interfaces=[gcp.compute.InstanceNetworkInterfaceArgs(\n network=\"default\",\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\nimage = gcp.compute.MachineImage(\"image\", source_instance=vm.self_link,\nopts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vm = new Gcp.Compute.Instance(\"vm\", new()\n {\n MachineType = \"e2-medium\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = \"debian-cloud/debian-11\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var image = new Gcp.Compute.MachineImage(\"image\", new()\n {\n SourceInstance = vm.SelfLink,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tvm, err := compute.NewInstance(ctx, \"vm\", \u0026compute.InstanceArgs{\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(\"debian-cloud/debian-11\"),\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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewMachineImage(ctx, \"image\", \u0026compute.MachineImageArgs{\n\t\t\tSourceInstance: vm.SelfLink,\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.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.MachineImage;\nimport com.pulumi.gcp.compute.MachineImageArgs;\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 vm = new Instance(\"vm\", InstanceArgs.builder() \n .machineType(\"e2-medium\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"debian-cloud/debian-11\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var image = new MachineImage(\"image\", MachineImageArgs.builder() \n .sourceInstance(vm.selfLink())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n vm:\n type: gcp:compute:Instance\n properties:\n machineType: e2-medium\n bootDisk:\n initializeParams:\n image: debian-cloud/debian-11\n networkInterfaces:\n - network: default\n options:\n provider: ${[\"google-beta\"]}\n image:\n type: gcp:compute:MachineImage\n properties:\n sourceInstance: ${vm.selfLink}\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Compute Machine Image Kms\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst vm = new gcp.compute.Instance(\"vm\", {\n machineType: \"e2-medium\",\n bootDisk: {\n initializeParams: {\n image: \"debian-cloud/debian-11\",\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n}, {\n provider: google_beta,\n});\nconst keyRing = new gcp.kms.KeyRing(\"keyRing\", {location: \"us\"}, {\n provider: google_beta,\n});\nconst cryptoKey = new gcp.kms.CryptoKey(\"cryptoKey\", {keyRing: keyRing.id}, {\n provider: google_beta,\n});\nconst project = gcp.organizations.getProject({});\nconst kms_project_binding = new gcp.projects.IAMMember(\"kms-project-binding\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@compute-system.iam.gserviceaccount.com`),\n}, {\n provider: google_beta,\n});\nconst image = new gcp.compute.MachineImage(\"image\", {\n sourceInstance: vm.selfLink,\n machineImageEncryptionKey: {\n kmsKeyName: cryptoKey.id,\n },\n}, {\n provider: google_beta,\n dependsOn: [kms_project_binding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nvm = gcp.compute.Instance(\"vm\",\n machine_type=\"e2-medium\",\n boot_disk=gcp.compute.InstanceBootDiskArgs(\n initialize_params=gcp.compute.InstanceBootDiskInitializeParamsArgs(\n image=\"debian-cloud/debian-11\",\n ),\n ),\n network_interfaces=[gcp.compute.InstanceNetworkInterfaceArgs(\n network=\"default\",\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\nkey_ring = gcp.kms.KeyRing(\"keyRing\", location=\"us\",\nopts=pulumi.ResourceOptions(provider=google_beta))\ncrypto_key = gcp.kms.CryptoKey(\"cryptoKey\", key_ring=key_ring.id,\nopts=pulumi.ResourceOptions(provider=google_beta))\nproject = gcp.organizations.get_project()\nkms_project_binding = gcp.projects.IAMMember(\"kms-project-binding\",\n project=project.project_id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@compute-system.iam.gserviceaccount.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nimage = gcp.compute.MachineImage(\"image\",\n source_instance=vm.self_link,\n machine_image_encryption_key=gcp.compute.MachineImageMachineImageEncryptionKeyArgs(\n kms_key_name=crypto_key.id,\n ),\n opts=pulumi.ResourceOptions(provider=google_beta,\n depends_on=[kms_project_binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var vm = new Gcp.Compute.Instance(\"vm\", new()\n {\n MachineType = \"e2-medium\",\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = \"debian-cloud/debian-11\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var keyRing = new Gcp.Kms.KeyRing(\"keyRing\", new()\n {\n Location = \"us\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"cryptoKey\", new()\n {\n KeyRing = keyRing.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var kms_project_binding = new Gcp.Projects.IAMMember(\"kms-project-binding\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@compute-system.iam.gserviceaccount.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var image = new Gcp.Compute.MachineImage(\"image\", new()\n {\n SourceInstance = vm.SelfLink,\n MachineImageEncryptionKey = new Gcp.Compute.Inputs.MachineImageMachineImageEncryptionKeyArgs\n {\n KmsKeyName = cryptoKey.Id,\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n DependsOn = new[]\n {\n kms_project_binding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tvm, err := compute.NewInstance(ctx, \"vm\", \u0026compute.InstanceArgs{\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: pulumi.String(\"debian-cloud/debian-11\"),\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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyRing, err := kms.NewKeyRing(ctx, \"keyRing\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"us\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"cryptoKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyRing.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = projects.NewIAMMember(ctx, \"kms-project-binding\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@compute-system.iam.gserviceaccount.com\", project.Number)),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewMachineImage(ctx, \"image\", \u0026compute.MachineImageArgs{\n\t\t\tSourceInstance: vm.SelfLink,\n\t\t\tMachineImageEncryptionKey: \u0026compute.MachineImageMachineImageEncryptionKeyArgs{\n\t\t\t\tKmsKeyName: cryptoKey.ID(),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta), pulumi.DependsOn([]pulumi.Resource{\n\t\t\tkms_project_binding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\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.compute.MachineImage;\nimport com.pulumi.gcp.compute.MachineImageArgs;\nimport com.pulumi.gcp.compute.inputs.MachineImageMachineImageEncryptionKeyArgs;\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 vm = new Instance(\"vm\", InstanceArgs.builder() \n .machineType(\"e2-medium\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"debian-cloud/debian-11\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .location(\"us\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .keyRing(keyRing.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var kms_project_binding = new IAMMember(\"kms-project-binding\", IAMMemberArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@compute-system.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var image = new MachineImage(\"image\", MachineImageArgs.builder() \n .sourceInstance(vm.selfLink())\n .machineImageEncryptionKey(MachineImageMachineImageEncryptionKeyArgs.builder()\n .kmsKeyName(cryptoKey.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .dependsOn(kms_project_binding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n vm:\n type: gcp:compute:Instance\n properties:\n machineType: e2-medium\n bootDisk:\n initializeParams:\n image: debian-cloud/debian-11\n networkInterfaces:\n - network: default\n options:\n provider: ${[\"google-beta\"]}\n image:\n type: gcp:compute:MachineImage\n properties:\n sourceInstance: ${vm.selfLink}\n machineImageEncryptionKey:\n kmsKeyName: ${cryptoKey.id}\n options:\n provider: ${[\"google-beta\"]}\n dependson:\n - ${[\"kms-project-binding\"]}\n cryptoKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyRing.id}\n options:\n provider: ${[\"google-beta\"]}\n keyRing:\n type: gcp:kms:KeyRing\n properties:\n location: us\n options:\n provider: ${[\"google-beta\"]}\n kms-project-binding:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@compute-system.iam.gserviceaccount.com\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nMachineImage can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/machineImage:MachineImage default projects/{{project}}/global/machineImages/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/machineImage:MachineImage default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/machineImage:MachineImage default {{name}}\n```\n\n ", "properties": { "description": { "type": "string", @@ -135334,7 +136767,7 @@ } }, "gcp:compute/machineImageIamBinding:MachineImageIamBinding": { - "description": "Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case:\n\n* `gcp.compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached.\n* `gcp.compute.MachineImageIamBinding`: 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 machineimage are preserved.\n* `gcp.compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved.\n\n\u003e **Note:** `gcp.compute.MachineImageIamPolicy` **cannot** be used in conjunction with `gcp.compute.MachineImageIamBinding` and `gcp.compute.MachineImageIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.compute.MachineImageIamBinding` resources **can be** used in conjunction with `gcp.compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.\n## google\\_compute\\_machine\\_image\\_iam\\_policy\n\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/compute.admin\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.compute.MachineImageIamPolicy(\"policy\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/compute.admin\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.compute.MachineImageIamPolicy(\"policy\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/compute.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.Compute.MachineImageIamPolicy(\"policy\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/compute.admin\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewMachineImageIamPolicy(ctx, \"policy\", \u0026compute.MachineImageIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.MachineImageIamPolicy;\nimport com.pulumi.gcp.compute.MachineImageIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/compute.admin\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new MachineImageIamPolicy(\"policy\", MachineImageIamPolicyArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:compute:MachineImageIamPolicy\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/compute.admin\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\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/compute.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }],\n});\nconst policy = new gcp.compute.MachineImageIamPolicy(\"policy\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/compute.admin\",\n members=[\"user:jane@example.com\"],\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ),\n)])\npolicy = gcp.compute.MachineImageIamPolicy(\"policy\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/compute.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n },\n },\n });\n\n var policy = new Gcp.Compute.MachineImageIamPolicy(\"policy\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/compute.admin\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewMachineImageIamPolicy(ctx, \"policy\", \u0026compute.MachineImageIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.MachineImageIamPolicy;\nimport com.pulumi.gcp.compute.MachineImageIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/compute.admin\")\n .members(\"user:jane@example.com\")\n .condition(GetIAMPolicyBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build())\n .build());\n\n var policy = new MachineImageIamPolicy(\"policy\", MachineImageIamPolicyArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:compute:MachineImageIamPolicy\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/compute.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n## google\\_compute\\_machine\\_image\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.compute.MachineImageIamBinding(\"binding\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n role: \"roles/compute.admin\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.compute.MachineImageIamBinding(\"binding\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n role=\"roles/compute.admin\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.Compute.MachineImageIamBinding(\"binding\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n Role = \"roles/compute.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewMachineImageIamBinding(ctx, \"binding\", \u0026compute.MachineImageIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tRole: pulumi.String(\"roles/compute.admin\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.MachineImageIamBinding;\nimport com.pulumi.gcp.compute.MachineImageIamBindingArgs;\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 binding = new MachineImageIamBinding(\"binding\", MachineImageIamBindingArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .role(\"roles/compute.admin\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:compute:MachineImageIamBinding\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n role: roles/compute.admin\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.compute.MachineImageIamBinding(\"binding\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n role: \"roles/compute.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.compute.MachineImageIamBinding(\"binding\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n role=\"roles/compute.admin\",\n members=[\"user:jane@example.com\"],\n condition=gcp.compute.MachineImageIamBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.Compute.MachineImageIamBinding(\"binding\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n Role = \"roles/compute.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Compute.Inputs.MachineImageIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewMachineImageIamBinding(ctx, \"binding\", \u0026compute.MachineImageIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tRole: pulumi.String(\"roles/compute.admin\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026compute.MachineImageIamBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.MachineImageIamBinding;\nimport com.pulumi.gcp.compute.MachineImageIamBindingArgs;\nimport com.pulumi.gcp.compute.inputs.MachineImageIamBindingConditionArgs;\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 binding = new MachineImageIamBinding(\"binding\", MachineImageIamBindingArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .role(\"roles/compute.admin\")\n .members(\"user:jane@example.com\")\n .condition(MachineImageIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:compute:MachineImageIamBinding\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n role: roles/compute.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n options:\n provider: ${[\"google-beta\"]}\n```\n## google\\_compute\\_machine\\_image\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.compute.MachineImageIamMember(\"member\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n role: \"roles/compute.admin\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.compute.MachineImageIamMember(\"member\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n role=\"roles/compute.admin\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.Compute.MachineImageIamMember(\"member\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n Role = \"roles/compute.admin\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewMachineImageIamMember(ctx, \"member\", \u0026compute.MachineImageIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tRole: pulumi.String(\"roles/compute.admin\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.MachineImageIamMember;\nimport com.pulumi.gcp.compute.MachineImageIamMemberArgs;\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 member = new MachineImageIamMember(\"member\", MachineImageIamMemberArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .role(\"roles/compute.admin\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:compute:MachineImageIamMember\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n role: roles/compute.admin\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.compute.MachineImageIamMember(\"member\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n role: \"roles/compute.admin\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.compute.MachineImageIamMember(\"member\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n role=\"roles/compute.admin\",\n member=\"user:jane@example.com\",\n condition=gcp.compute.MachineImageIamMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.Compute.MachineImageIamMember(\"member\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n Role = \"roles/compute.admin\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.Compute.Inputs.MachineImageIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewMachineImageIamMember(ctx, \"member\", \u0026compute.MachineImageIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tRole: pulumi.String(\"roles/compute.admin\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026compute.MachineImageIamMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.MachineImageIamMember;\nimport com.pulumi.gcp.compute.MachineImageIamMemberArgs;\nimport com.pulumi.gcp.compute.inputs.MachineImageIamMemberConditionArgs;\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 member = new MachineImageIamMember(\"member\", MachineImageIamMemberArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .role(\"roles/compute.admin\")\n .member(\"user:jane@example.com\")\n .condition(MachineImageIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:compute:MachineImageIamMember\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n role: roles/compute.admin\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamBinding:MachineImageIamBinding editor \"projects/{{project}}/global/machineImages/{{machine_image}} roles/compute.admin user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamBinding:MachineImageIamBinding editor \"projects/{{project}}/global/machineImages/{{machine_image}} roles/compute.admin\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamBinding:MachineImageIamBinding editor projects/{{project}}/global/machineImages/{{machine_image}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamBinding:MachineImageIamBinding editor \"projects/{{project}}/global/machineImages/{{machine_image}} roles/compute.admin user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamBinding:MachineImageIamBinding editor \"projects/{{project}}/global/machineImages/{{machine_image}} roles/compute.admin\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamBinding:MachineImageIamBinding editor projects/{{project}}/global/machineImages/{{machine_image}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:compute/MachineImageIamBindingCondition:MachineImageIamBindingCondition", @@ -135441,7 +136874,7 @@ } }, "gcp:compute/machineImageIamMember:MachineImageIamMember": { - "description": "Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case:\n\n* `gcp.compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached.\n* `gcp.compute.MachineImageIamBinding`: 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 machineimage are preserved.\n* `gcp.compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved.\n\n\u003e **Note:** `gcp.compute.MachineImageIamPolicy` **cannot** be used in conjunction with `gcp.compute.MachineImageIamBinding` and `gcp.compute.MachineImageIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.compute.MachineImageIamBinding` resources **can be** used in conjunction with `gcp.compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.\n## google\\_compute\\_machine\\_image\\_iam\\_policy\n\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/compute.admin\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.compute.MachineImageIamPolicy(\"policy\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/compute.admin\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.compute.MachineImageIamPolicy(\"policy\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/compute.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.Compute.MachineImageIamPolicy(\"policy\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/compute.admin\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewMachineImageIamPolicy(ctx, \"policy\", \u0026compute.MachineImageIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.MachineImageIamPolicy;\nimport com.pulumi.gcp.compute.MachineImageIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/compute.admin\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new MachineImageIamPolicy(\"policy\", MachineImageIamPolicyArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:compute:MachineImageIamPolicy\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/compute.admin\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\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/compute.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }],\n});\nconst policy = new gcp.compute.MachineImageIamPolicy(\"policy\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/compute.admin\",\n members=[\"user:jane@example.com\"],\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ),\n)])\npolicy = gcp.compute.MachineImageIamPolicy(\"policy\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/compute.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n },\n },\n });\n\n var policy = new Gcp.Compute.MachineImageIamPolicy(\"policy\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/compute.admin\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewMachineImageIamPolicy(ctx, \"policy\", \u0026compute.MachineImageIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.MachineImageIamPolicy;\nimport com.pulumi.gcp.compute.MachineImageIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/compute.admin\")\n .members(\"user:jane@example.com\")\n .condition(GetIAMPolicyBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build())\n .build());\n\n var policy = new MachineImageIamPolicy(\"policy\", MachineImageIamPolicyArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:compute:MachineImageIamPolicy\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/compute.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n## google\\_compute\\_machine\\_image\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.compute.MachineImageIamBinding(\"binding\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n role: \"roles/compute.admin\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.compute.MachineImageIamBinding(\"binding\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n role=\"roles/compute.admin\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.Compute.MachineImageIamBinding(\"binding\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n Role = \"roles/compute.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewMachineImageIamBinding(ctx, \"binding\", \u0026compute.MachineImageIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tRole: pulumi.String(\"roles/compute.admin\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.MachineImageIamBinding;\nimport com.pulumi.gcp.compute.MachineImageIamBindingArgs;\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 binding = new MachineImageIamBinding(\"binding\", MachineImageIamBindingArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .role(\"roles/compute.admin\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:compute:MachineImageIamBinding\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n role: roles/compute.admin\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.compute.MachineImageIamBinding(\"binding\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n role: \"roles/compute.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.compute.MachineImageIamBinding(\"binding\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n role=\"roles/compute.admin\",\n members=[\"user:jane@example.com\"],\n condition=gcp.compute.MachineImageIamBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.Compute.MachineImageIamBinding(\"binding\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n Role = \"roles/compute.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Compute.Inputs.MachineImageIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewMachineImageIamBinding(ctx, \"binding\", \u0026compute.MachineImageIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tRole: pulumi.String(\"roles/compute.admin\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026compute.MachineImageIamBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.MachineImageIamBinding;\nimport com.pulumi.gcp.compute.MachineImageIamBindingArgs;\nimport com.pulumi.gcp.compute.inputs.MachineImageIamBindingConditionArgs;\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 binding = new MachineImageIamBinding(\"binding\", MachineImageIamBindingArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .role(\"roles/compute.admin\")\n .members(\"user:jane@example.com\")\n .condition(MachineImageIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:compute:MachineImageIamBinding\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n role: roles/compute.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n options:\n provider: ${[\"google-beta\"]}\n```\n## google\\_compute\\_machine\\_image\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.compute.MachineImageIamMember(\"member\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n role: \"roles/compute.admin\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.compute.MachineImageIamMember(\"member\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n role=\"roles/compute.admin\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.Compute.MachineImageIamMember(\"member\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n Role = \"roles/compute.admin\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewMachineImageIamMember(ctx, \"member\", \u0026compute.MachineImageIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tRole: pulumi.String(\"roles/compute.admin\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.MachineImageIamMember;\nimport com.pulumi.gcp.compute.MachineImageIamMemberArgs;\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 member = new MachineImageIamMember(\"member\", MachineImageIamMemberArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .role(\"roles/compute.admin\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:compute:MachineImageIamMember\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n role: roles/compute.admin\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.compute.MachineImageIamMember(\"member\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n role: \"roles/compute.admin\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.compute.MachineImageIamMember(\"member\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n role=\"roles/compute.admin\",\n member=\"user:jane@example.com\",\n condition=gcp.compute.MachineImageIamMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.Compute.MachineImageIamMember(\"member\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n Role = \"roles/compute.admin\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.Compute.Inputs.MachineImageIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewMachineImageIamMember(ctx, \"member\", \u0026compute.MachineImageIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tRole: pulumi.String(\"roles/compute.admin\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026compute.MachineImageIamMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.MachineImageIamMember;\nimport com.pulumi.gcp.compute.MachineImageIamMemberArgs;\nimport com.pulumi.gcp.compute.inputs.MachineImageIamMemberConditionArgs;\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 member = new MachineImageIamMember(\"member\", MachineImageIamMemberArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .role(\"roles/compute.admin\")\n .member(\"user:jane@example.com\")\n .condition(MachineImageIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:compute:MachineImageIamMember\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n role: roles/compute.admin\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamMember:MachineImageIamMember editor \"projects/{{project}}/global/machineImages/{{machine_image}} roles/compute.admin user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamMember:MachineImageIamMember editor \"projects/{{project}}/global/machineImages/{{machine_image}} roles/compute.admin\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamMember:MachineImageIamMember editor projects/{{project}}/global/machineImages/{{machine_image}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamMember:MachineImageIamMember editor \"projects/{{project}}/global/machineImages/{{machine_image}} roles/compute.admin user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamMember:MachineImageIamMember editor \"projects/{{project}}/global/machineImages/{{machine_image}} roles/compute.admin\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamMember:MachineImageIamMember editor projects/{{project}}/global/machineImages/{{machine_image}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:compute/MachineImageIamMemberCondition:MachineImageIamMemberCondition", @@ -135541,7 +136974,7 @@ } }, "gcp:compute/machineImageIamPolicy:MachineImageIamPolicy": { - "description": "Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case:\n\n* `gcp.compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached.\n* `gcp.compute.MachineImageIamBinding`: 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 machineimage are preserved.\n* `gcp.compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved.\n\n\u003e **Note:** `gcp.compute.MachineImageIamPolicy` **cannot** be used in conjunction with `gcp.compute.MachineImageIamBinding` and `gcp.compute.MachineImageIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.compute.MachineImageIamBinding` resources **can be** used in conjunction with `gcp.compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions.\n## google\\_compute\\_machine\\_image\\_iam\\_policy\n\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/compute.admin\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.compute.MachineImageIamPolicy(\"policy\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/compute.admin\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.compute.MachineImageIamPolicy(\"policy\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/compute.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.Compute.MachineImageIamPolicy(\"policy\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/compute.admin\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewMachineImageIamPolicy(ctx, \"policy\", \u0026compute.MachineImageIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.MachineImageIamPolicy;\nimport com.pulumi.gcp.compute.MachineImageIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/compute.admin\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new MachineImageIamPolicy(\"policy\", MachineImageIamPolicyArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:compute:MachineImageIamPolicy\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/compute.admin\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\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/compute.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }],\n});\nconst policy = new gcp.compute.MachineImageIamPolicy(\"policy\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/compute.admin\",\n members=[\"user:jane@example.com\"],\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ),\n)])\npolicy = gcp.compute.MachineImageIamPolicy(\"policy\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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/compute.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n },\n },\n });\n\n var policy = new Gcp.Compute.MachineImageIamPolicy(\"policy\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/compute.admin\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewMachineImageIamPolicy(ctx, \"policy\", \u0026compute.MachineImageIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.MachineImageIamPolicy;\nimport com.pulumi.gcp.compute.MachineImageIamPolicyArgs;\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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/compute.admin\")\n .members(\"user:jane@example.com\")\n .condition(GetIAMPolicyBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build())\n .build());\n\n var policy = new MachineImageIamPolicy(\"policy\", MachineImageIamPolicyArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:compute:MachineImageIamPolicy\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/compute.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n## google\\_compute\\_machine\\_image\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.compute.MachineImageIamBinding(\"binding\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n role: \"roles/compute.admin\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.compute.MachineImageIamBinding(\"binding\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n role=\"roles/compute.admin\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.Compute.MachineImageIamBinding(\"binding\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n Role = \"roles/compute.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewMachineImageIamBinding(ctx, \"binding\", \u0026compute.MachineImageIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tRole: pulumi.String(\"roles/compute.admin\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.MachineImageIamBinding;\nimport com.pulumi.gcp.compute.MachineImageIamBindingArgs;\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 binding = new MachineImageIamBinding(\"binding\", MachineImageIamBindingArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .role(\"roles/compute.admin\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:compute:MachineImageIamBinding\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n role: roles/compute.admin\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.compute.MachineImageIamBinding(\"binding\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n role: \"roles/compute.admin\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.compute.MachineImageIamBinding(\"binding\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n role=\"roles/compute.admin\",\n members=[\"user:jane@example.com\"],\n condition=gcp.compute.MachineImageIamBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.Compute.MachineImageIamBinding(\"binding\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n Role = \"roles/compute.admin\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Compute.Inputs.MachineImageIamBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewMachineImageIamBinding(ctx, \"binding\", \u0026compute.MachineImageIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tRole: pulumi.String(\"roles/compute.admin\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026compute.MachineImageIamBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.MachineImageIamBinding;\nimport com.pulumi.gcp.compute.MachineImageIamBindingArgs;\nimport com.pulumi.gcp.compute.inputs.MachineImageIamBindingConditionArgs;\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 binding = new MachineImageIamBinding(\"binding\", MachineImageIamBindingArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .role(\"roles/compute.admin\")\n .members(\"user:jane@example.com\")\n .condition(MachineImageIamBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:compute:MachineImageIamBinding\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n role: roles/compute.admin\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n options:\n provider: ${[\"google-beta\"]}\n```\n## google\\_compute\\_machine\\_image\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.compute.MachineImageIamMember(\"member\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n role: \"roles/compute.admin\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.compute.MachineImageIamMember(\"member\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n role=\"roles/compute.admin\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.Compute.MachineImageIamMember(\"member\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n Role = \"roles/compute.admin\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewMachineImageIamMember(ctx, \"member\", \u0026compute.MachineImageIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tRole: pulumi.String(\"roles/compute.admin\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.MachineImageIamMember;\nimport com.pulumi.gcp.compute.MachineImageIamMemberArgs;\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 member = new MachineImageIamMember(\"member\", MachineImageIamMemberArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .role(\"roles/compute.admin\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:compute:MachineImageIamMember\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n role: roles/compute.admin\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.compute.MachineImageIamMember(\"member\", {\n project: google_compute_machine_image.image.project,\n machineImage: google_compute_machine_image.image.name,\n role: \"roles/compute.admin\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.compute.MachineImageIamMember(\"member\",\n project=google_compute_machine_image[\"image\"][\"project\"],\n machine_image=google_compute_machine_image[\"image\"][\"name\"],\n role=\"roles/compute.admin\",\n member=\"user:jane@example.com\",\n condition=gcp.compute.MachineImageIamMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.Compute.MachineImageIamMember(\"member\", new()\n {\n Project = google_compute_machine_image.Image.Project,\n MachineImage = google_compute_machine_image.Image.Name,\n Role = \"roles/compute.admin\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.Compute.Inputs.MachineImageIamMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewMachineImageIamMember(ctx, \"member\", \u0026compute.MachineImageIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_compute_machine_image.Image.Project),\n\t\t\tMachineImage: pulumi.Any(google_compute_machine_image.Image.Name),\n\t\t\tRole: pulumi.String(\"roles/compute.admin\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026compute.MachineImageIamMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.MachineImageIamMember;\nimport com.pulumi.gcp.compute.MachineImageIamMemberArgs;\nimport com.pulumi.gcp.compute.inputs.MachineImageIamMemberConditionArgs;\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 member = new MachineImageIamMember(\"member\", MachineImageIamMemberArgs.builder() \n .project(google_compute_machine_image.image().project())\n .machineImage(google_compute_machine_image.image().name())\n .role(\"roles/compute.admin\")\n .member(\"user:jane@example.com\")\n .condition(MachineImageIamMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:compute:MachineImageIamMember\n properties:\n project: ${google_compute_machine_image.image.project}\n machineImage: ${google_compute_machine_image.image.name}\n role: roles/compute.admin\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamPolicy:MachineImageIamPolicy editor \"projects/{{project}}/global/machineImages/{{machine_image}} roles/compute.admin user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamPolicy:MachineImageIamPolicy editor \"projects/{{project}}/global/machineImages/{{machine_image}} roles/compute.admin\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamPolicy:MachineImageIamPolicy editor projects/{{project}}/global/machineImages/{{machine_image}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamPolicy:MachineImageIamPolicy editor \"projects/{{project}}/global/machineImages/{{machine_image}} roles/compute.admin user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamPolicy:MachineImageIamPolicy editor \"projects/{{project}}/global/machineImages/{{machine_image}} roles/compute.admin\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:compute/machineImageIamPolicy:MachineImageIamPolicy editor projects/{{project}}/global/machineImages/{{machine_image}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "etag": { "type": "string", @@ -135612,7 +137045,7 @@ } }, "gcp:compute/managedSslCertificate:ManagedSslCertificate": { - "description": "An SslCertificate resource, used for HTTPS load balancing. This resource\nrepresents a certificate for which the certificate secrets are created and\nmanaged by Google.\n\nFor a resource where you provide the key, see the\nSSL Certificate resource.\n\nTo get more information about ManagedSslCertificate, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/sslCertificates)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates)\n\n\u003e **Warning:** This resource should be used with extreme caution! Provisioning an SSL\ncertificate is complex. Ensure that you understand the lifecycle of a\ncertificate before attempting complex tasks like cert rotation automatically.\nThis resource will \"return\" as soon as the certificate object is created,\nbut post-creation the certificate object will go through a \"provisioning\"\nprocess. The provisioning process can complete only when the domain name\nfor which the certificate is created points to a target pool which, itself,\npoints at the certificate. Depending on your DNS provider, this may take\nsome time, and migrating from self-managed certificates to Google-managed\ncertificates may entail some downtime while the certificate provisions.\n\nIn conclusion: Be extremely cautious.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Managed Ssl Certificate Basic\n\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.ManagedSslCertificate;\nimport com.pulumi.gcp.compute.ManagedSslCertificateArgs;\nimport com.pulumi.gcp.compute.inputs.ManagedSslCertificateManagedArgs;\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 com.pulumi.gcp.compute.TargetHttpsProxy;\nimport com.pulumi.gcp.compute.TargetHttpsProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultManagedSslCertificate = new ManagedSslCertificate(\"defaultManagedSslCertificate\", ManagedSslCertificateArgs.builder() \n .managed(ManagedSslCertificateManagedArgs.builder()\n .domains(\"sslcert.tf-test.club.\")\n .build())\n .build());\n\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder() \n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"sslcert.tf-test.club\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultTargetHttpsProxy = new TargetHttpsProxy(\"defaultTargetHttpsProxy\", TargetHttpsProxyArgs.builder() \n .urlMap(defaultURLMap.id())\n .sslCertificates(defaultManagedSslCertificate.id())\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .target(defaultTargetHttpsProxy.id())\n .portRange(443)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultManagedSslCertificate:\n type: gcp:compute:ManagedSslCertificate\n properties:\n managed:\n domains:\n - sslcert.tf-test.club.\n defaultTargetHttpsProxy:\n type: gcp:compute:TargetHttpsProxy\n properties:\n urlMap: ${defaultURLMap.id}\n sslCertificates:\n - ${defaultManagedSslCertificate.id}\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - sslcert.tf-test.club\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n target: ${defaultTargetHttpsProxy.id}\n portRange: 443\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nManagedSslCertificate can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/managedSslCertificate:ManagedSslCertificate default projects/{{project}}/global/sslCertificates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/managedSslCertificate:ManagedSslCertificate default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/managedSslCertificate:ManagedSslCertificate default {{name}}\n```\n\n ", + "description": "An SslCertificate resource, used for HTTPS load balancing. This resource\nrepresents a certificate for which the certificate secrets are created and\nmanaged by Google.\n\nFor a resource where you provide the key, see the\nSSL Certificate resource.\n\n\nTo get more information about ManagedSslCertificate, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/sslCertificates)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates)\n\n\u003e **Warning:** This resource should be used with extreme caution! Provisioning an SSL\ncertificate is complex. Ensure that you understand the lifecycle of a\ncertificate before attempting complex tasks like cert rotation automatically.\nThis resource will \"return\" as soon as the certificate object is created,\nbut post-creation the certificate object will go through a \"provisioning\"\nprocess. The provisioning process can complete only when the domain name\nfor which the certificate is created points to a target pool which, itself,\npoints at the certificate. Depending on your DNS provider, this may take\nsome time, and migrating from self-managed certificates to Google-managed\ncertificates may entail some downtime while the certificate provisions.\n\nIn conclusion: Be extremely cautious.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Managed Ssl Certificate Basic\n\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.ManagedSslCertificate;\nimport com.pulumi.gcp.compute.ManagedSslCertificateArgs;\nimport com.pulumi.gcp.compute.inputs.ManagedSslCertificateManagedArgs;\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 com.pulumi.gcp.compute.TargetHttpsProxy;\nimport com.pulumi.gcp.compute.TargetHttpsProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultManagedSslCertificate = new ManagedSslCertificate(\"defaultManagedSslCertificate\", ManagedSslCertificateArgs.builder() \n .managed(ManagedSslCertificateManagedArgs.builder()\n .domains(\"sslcert.tf-test.club.\")\n .build())\n .build());\n\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder() \n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"sslcert.tf-test.club\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultTargetHttpsProxy = new TargetHttpsProxy(\"defaultTargetHttpsProxy\", TargetHttpsProxyArgs.builder() \n .urlMap(defaultURLMap.id())\n .sslCertificates(defaultManagedSslCertificate.id())\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .target(defaultTargetHttpsProxy.id())\n .portRange(443)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultManagedSslCertificate:\n type: gcp:compute:ManagedSslCertificate\n properties:\n managed:\n domains:\n - sslcert.tf-test.club.\n defaultTargetHttpsProxy:\n type: gcp:compute:TargetHttpsProxy\n properties:\n urlMap: ${defaultURLMap.id}\n sslCertificates:\n - ${defaultManagedSslCertificate.id}\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - sslcert.tf-test.club\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n target: ${defaultTargetHttpsProxy.id}\n portRange: 443\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nManagedSslCertificate can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/managedSslCertificate:ManagedSslCertificate default projects/{{project}}/global/sslCertificates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/managedSslCertificate:ManagedSslCertificate default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/managedSslCertificate:ManagedSslCertificate default {{name}}\n```\n\n ", "properties": { "certificateId": { "type": "integer", @@ -135759,7 +137192,7 @@ ] }, "gcp:compute/mangedSslCertificate:MangedSslCertificate": { - "description": "An SslCertificate resource, used for HTTPS load balancing. This resource\nrepresents a certificate for which the certificate secrets are created and\nmanaged by Google.\n\nFor a resource where you provide the key, see the\nSSL Certificate resource.\n\nTo get more information about ManagedSslCertificate, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/sslCertificates)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates)\n\n\u003e **Warning:** This resource should be used with extreme caution! Provisioning an SSL\ncertificate is complex. Ensure that you understand the lifecycle of a\ncertificate before attempting complex tasks like cert rotation automatically.\nThis resource will \"return\" as soon as the certificate object is created,\nbut post-creation the certificate object will go through a \"provisioning\"\nprocess. The provisioning process can complete only when the domain name\nfor which the certificate is created points to a target pool which, itself,\npoints at the certificate. Depending on your DNS provider, this may take\nsome time, and migrating from self-managed certificates to Google-managed\ncertificates may entail some downtime while the certificate provisions.\n\nIn conclusion: Be extremely cautious.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Managed Ssl Certificate Basic\n\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.ManagedSslCertificate;\nimport com.pulumi.gcp.compute.ManagedSslCertificateArgs;\nimport com.pulumi.gcp.compute.inputs.ManagedSslCertificateManagedArgs;\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 com.pulumi.gcp.compute.TargetHttpsProxy;\nimport com.pulumi.gcp.compute.TargetHttpsProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultManagedSslCertificate = new ManagedSslCertificate(\"defaultManagedSslCertificate\", ManagedSslCertificateArgs.builder() \n .managed(ManagedSslCertificateManagedArgs.builder()\n .domains(\"sslcert.tf-test.club.\")\n .build())\n .build());\n\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder() \n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"sslcert.tf-test.club\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultTargetHttpsProxy = new TargetHttpsProxy(\"defaultTargetHttpsProxy\", TargetHttpsProxyArgs.builder() \n .urlMap(defaultURLMap.id())\n .sslCertificates(defaultManagedSslCertificate.id())\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .target(defaultTargetHttpsProxy.id())\n .portRange(443)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultManagedSslCertificate:\n type: gcp:compute:ManagedSslCertificate\n properties:\n managed:\n domains:\n - sslcert.tf-test.club.\n defaultTargetHttpsProxy:\n type: gcp:compute:TargetHttpsProxy\n properties:\n urlMap: ${defaultURLMap.id}\n sslCertificates:\n - ${defaultManagedSslCertificate.id}\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - sslcert.tf-test.club\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n target: ${defaultTargetHttpsProxy.id}\n portRange: 443\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nManagedSslCertificate can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/mangedSslCertificate:MangedSslCertificate default projects/{{project}}/global/sslCertificates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/mangedSslCertificate:MangedSslCertificate default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/mangedSslCertificate:MangedSslCertificate default {{name}}\n```\n\n ", + "description": "An SslCertificate resource, used for HTTPS load balancing. This resource\nrepresents a certificate for which the certificate secrets are created and\nmanaged by Google.\n\nFor a resource where you provide the key, see the\nSSL Certificate resource.\n\n\nTo get more information about ManagedSslCertificate, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/sslCertificates)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates)\n\n\u003e **Warning:** This resource should be used with extreme caution! Provisioning an SSL\ncertificate is complex. Ensure that you understand the lifecycle of a\ncertificate before attempting complex tasks like cert rotation automatically.\nThis resource will \"return\" as soon as the certificate object is created,\nbut post-creation the certificate object will go through a \"provisioning\"\nprocess. The provisioning process can complete only when the domain name\nfor which the certificate is created points to a target pool which, itself,\npoints at the certificate. Depending on your DNS provider, this may take\nsome time, and migrating from self-managed certificates to Google-managed\ncertificates may entail some downtime while the certificate provisions.\n\nIn conclusion: Be extremely cautious.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Managed Ssl Certificate Basic\n\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.ManagedSslCertificate;\nimport com.pulumi.gcp.compute.ManagedSslCertificateArgs;\nimport com.pulumi.gcp.compute.inputs.ManagedSslCertificateManagedArgs;\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 com.pulumi.gcp.compute.TargetHttpsProxy;\nimport com.pulumi.gcp.compute.TargetHttpsProxyArgs;\nimport com.pulumi.gcp.compute.GlobalForwardingRule;\nimport com.pulumi.gcp.compute.GlobalForwardingRuleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultManagedSslCertificate = new ManagedSslCertificate(\"defaultManagedSslCertificate\", ManagedSslCertificateArgs.builder() \n .managed(ManagedSslCertificateManagedArgs.builder()\n .domains(\"sslcert.tf-test.club.\")\n .build())\n .build());\n\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder() \n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"sslcert.tf-test.club\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultTargetHttpsProxy = new TargetHttpsProxy(\"defaultTargetHttpsProxy\", TargetHttpsProxyArgs.builder() \n .urlMap(defaultURLMap.id())\n .sslCertificates(defaultManagedSslCertificate.id())\n .build());\n\n var defaultGlobalForwardingRule = new GlobalForwardingRule(\"defaultGlobalForwardingRule\", GlobalForwardingRuleArgs.builder() \n .target(defaultTargetHttpsProxy.id())\n .portRange(443)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultManagedSslCertificate:\n type: gcp:compute:ManagedSslCertificate\n properties:\n managed:\n domains:\n - sslcert.tf-test.club.\n defaultTargetHttpsProxy:\n type: gcp:compute:TargetHttpsProxy\n properties:\n urlMap: ${defaultURLMap.id}\n sslCertificates:\n - ${defaultManagedSslCertificate.id}\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - sslcert.tf-test.club\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n defaultGlobalForwardingRule:\n type: gcp:compute:GlobalForwardingRule\n properties:\n target: ${defaultTargetHttpsProxy.id}\n portRange: 443\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nManagedSslCertificate can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/mangedSslCertificate:MangedSslCertificate default projects/{{project}}/global/sslCertificates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/mangedSslCertificate:MangedSslCertificate default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/mangedSslCertificate:MangedSslCertificate default {{name}}\n```\n\n ", "properties": { "certificateId": { "type": "integer", @@ -136956,7 +138389,7 @@ } }, "gcp:compute/nodeGroup:NodeGroup": { - "description": "Represents a NodeGroup resource to manage a group of sole-tenant nodes.\n\n\nTo get more information about NodeGroup, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups)\n* How-to Guides\n * [Sole-Tenant Nodes](https://cloud.google.com/compute/docs/nodes/)\n\n\u003e **Warning:** Due to limitations of the API, this provider cannot update the\nnumber of nodes in a node group and changes to node group size either\nthrough provider config or through external changes will cause\nthe provider to delete and recreate the node group.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Node Group Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst soletenant_tmpl = new gcp.compute.NodeTemplate(\"soletenant-tmpl\", {\n region: \"us-central1\",\n nodeType: \"n1-node-96-624\",\n});\nconst nodes = new gcp.compute.NodeGroup(\"nodes\", {\n zone: \"us-central1-a\",\n description: \"example google_compute_node_group for the Google Provider\",\n size: 1,\n nodeTemplate: soletenant_tmpl.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsoletenant_tmpl = gcp.compute.NodeTemplate(\"soletenant-tmpl\",\n region=\"us-central1\",\n node_type=\"n1-node-96-624\")\nnodes = gcp.compute.NodeGroup(\"nodes\",\n zone=\"us-central1-a\",\n description=\"example google_compute_node_group for the Google Provider\",\n size=1,\n node_template=soletenant_tmpl.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var soletenant_tmpl = new Gcp.Compute.NodeTemplate(\"soletenant-tmpl\", new()\n {\n Region = \"us-central1\",\n NodeType = \"n1-node-96-624\",\n });\n\n var nodes = new Gcp.Compute.NodeGroup(\"nodes\", new()\n {\n Zone = \"us-central1-a\",\n Description = \"example google_compute_node_group for the Google Provider\",\n Size = 1,\n NodeTemplate = soletenant_tmpl.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewNodeTemplate(ctx, \"soletenant-tmpl\", \u0026compute.NodeTemplateArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNodeType: pulumi.String(\"n1-node-96-624\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNodeGroup(ctx, \"nodes\", \u0026compute.NodeGroupArgs{\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tDescription: pulumi.String(\"example google_compute_node_group for the Google Provider\"),\n\t\t\tSize: pulumi.Int(1),\n\t\t\tNodeTemplate: soletenant_tmpl.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.NodeTemplate;\nimport com.pulumi.gcp.compute.NodeTemplateArgs;\nimport com.pulumi.gcp.compute.NodeGroup;\nimport com.pulumi.gcp.compute.NodeGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var soletenant_tmpl = new NodeTemplate(\"soletenant-tmpl\", NodeTemplateArgs.builder() \n .region(\"us-central1\")\n .nodeType(\"n1-node-96-624\")\n .build());\n\n var nodes = new NodeGroup(\"nodes\", NodeGroupArgs.builder() \n .zone(\"us-central1-a\")\n .description(\"example google_compute_node_group for the Google Provider\")\n .size(1)\n .nodeTemplate(soletenant_tmpl.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n soletenant-tmpl:\n type: gcp:compute:NodeTemplate\n properties:\n region: us-central1\n nodeType: n1-node-96-624\n nodes:\n type: gcp:compute:NodeGroup\n properties:\n zone: us-central1-a\n description: example google_compute_node_group for the Google Provider\n size: 1\n nodeTemplate: ${[\"soletenant-tmpl\"].id}\n```\n{{% /example %}}\n{{% example %}}\n### Node Group Autoscaling Policy\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst soletenant_tmpl = new gcp.compute.NodeTemplate(\"soletenant-tmpl\", {\n region: \"us-central1\",\n nodeType: \"n1-node-96-624\",\n});\nconst nodes = new gcp.compute.NodeGroup(\"nodes\", {\n zone: \"us-central1-a\",\n description: \"example google_compute_node_group for Google Provider\",\n maintenancePolicy: \"RESTART_IN_PLACE\",\n maintenanceWindow: {\n startTime: \"08:00\",\n },\n initialSize: 1,\n nodeTemplate: soletenant_tmpl.id,\n autoscalingPolicy: {\n mode: \"ONLY_SCALE_OUT\",\n minNodes: 1,\n maxNodes: 10,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsoletenant_tmpl = gcp.compute.NodeTemplate(\"soletenant-tmpl\",\n region=\"us-central1\",\n node_type=\"n1-node-96-624\")\nnodes = gcp.compute.NodeGroup(\"nodes\",\n zone=\"us-central1-a\",\n description=\"example google_compute_node_group for Google Provider\",\n maintenance_policy=\"RESTART_IN_PLACE\",\n maintenance_window=gcp.compute.NodeGroupMaintenanceWindowArgs(\n start_time=\"08:00\",\n ),\n initial_size=1,\n node_template=soletenant_tmpl.id,\n autoscaling_policy=gcp.compute.NodeGroupAutoscalingPolicyArgs(\n mode=\"ONLY_SCALE_OUT\",\n min_nodes=1,\n max_nodes=10,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var soletenant_tmpl = new Gcp.Compute.NodeTemplate(\"soletenant-tmpl\", new()\n {\n Region = \"us-central1\",\n NodeType = \"n1-node-96-624\",\n });\n\n var nodes = new Gcp.Compute.NodeGroup(\"nodes\", new()\n {\n Zone = \"us-central1-a\",\n Description = \"example google_compute_node_group for Google Provider\",\n MaintenancePolicy = \"RESTART_IN_PLACE\",\n MaintenanceWindow = new Gcp.Compute.Inputs.NodeGroupMaintenanceWindowArgs\n {\n StartTime = \"08:00\",\n },\n InitialSize = 1,\n NodeTemplate = soletenant_tmpl.Id,\n AutoscalingPolicy = new Gcp.Compute.Inputs.NodeGroupAutoscalingPolicyArgs\n {\n Mode = \"ONLY_SCALE_OUT\",\n MinNodes = 1,\n MaxNodes = 10,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewNodeTemplate(ctx, \"soletenant-tmpl\", \u0026compute.NodeTemplateArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNodeType: pulumi.String(\"n1-node-96-624\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNodeGroup(ctx, \"nodes\", \u0026compute.NodeGroupArgs{\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tDescription: pulumi.String(\"example google_compute_node_group for Google Provider\"),\n\t\t\tMaintenancePolicy: pulumi.String(\"RESTART_IN_PLACE\"),\n\t\t\tMaintenanceWindow: \u0026compute.NodeGroupMaintenanceWindowArgs{\n\t\t\t\tStartTime: pulumi.String(\"08:00\"),\n\t\t\t},\n\t\t\tInitialSize: pulumi.Int(1),\n\t\t\tNodeTemplate: soletenant_tmpl.ID(),\n\t\t\tAutoscalingPolicy: \u0026compute.NodeGroupAutoscalingPolicyArgs{\n\t\t\t\tMode: pulumi.String(\"ONLY_SCALE_OUT\"),\n\t\t\t\tMinNodes: pulumi.Int(1),\n\t\t\t\tMaxNodes: 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.compute.NodeTemplate;\nimport com.pulumi.gcp.compute.NodeTemplateArgs;\nimport com.pulumi.gcp.compute.NodeGroup;\nimport com.pulumi.gcp.compute.NodeGroupArgs;\nimport com.pulumi.gcp.compute.inputs.NodeGroupMaintenanceWindowArgs;\nimport com.pulumi.gcp.compute.inputs.NodeGroupAutoscalingPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var soletenant_tmpl = new NodeTemplate(\"soletenant-tmpl\", NodeTemplateArgs.builder() \n .region(\"us-central1\")\n .nodeType(\"n1-node-96-624\")\n .build());\n\n var nodes = new NodeGroup(\"nodes\", NodeGroupArgs.builder() \n .zone(\"us-central1-a\")\n .description(\"example google_compute_node_group for Google Provider\")\n .maintenancePolicy(\"RESTART_IN_PLACE\")\n .maintenanceWindow(NodeGroupMaintenanceWindowArgs.builder()\n .startTime(\"08:00\")\n .build())\n .initialSize(1)\n .nodeTemplate(soletenant_tmpl.id())\n .autoscalingPolicy(NodeGroupAutoscalingPolicyArgs.builder()\n .mode(\"ONLY_SCALE_OUT\")\n .minNodes(1)\n .maxNodes(10)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n soletenant-tmpl:\n type: gcp:compute:NodeTemplate\n properties:\n region: us-central1\n nodeType: n1-node-96-624\n nodes:\n type: gcp:compute:NodeGroup\n properties:\n zone: us-central1-a\n description: example google_compute_node_group for Google Provider\n maintenancePolicy: RESTART_IN_PLACE\n maintenanceWindow:\n startTime: 08:00\n initialSize: 1\n nodeTemplate: ${[\"soletenant-tmpl\"].id}\n autoscalingPolicy:\n mode: ONLY_SCALE_OUT\n minNodes: 1\n maxNodes: 10\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nNodeGroup can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/nodeGroup:NodeGroup default projects/{{project}}/zones/{{zone}}/nodeGroups/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/nodeGroup:NodeGroup default {{project}}/{{zone}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/nodeGroup:NodeGroup default {{zone}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/nodeGroup:NodeGroup default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Node Group Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst soletenant_tmpl = new gcp.compute.NodeTemplate(\"soletenant-tmpl\", {\n region: \"us-central1\",\n nodeType: \"n1-node-96-624\",\n});\nconst nodes = new gcp.compute.NodeGroup(\"nodes\", {\n zone: \"us-central1-f\",\n description: \"example google_compute_node_group for Terraform Google Provider\",\n size: 1,\n nodeTemplate: soletenant_tmpl.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsoletenant_tmpl = gcp.compute.NodeTemplate(\"soletenant-tmpl\",\n region=\"us-central1\",\n node_type=\"n1-node-96-624\")\nnodes = gcp.compute.NodeGroup(\"nodes\",\n zone=\"us-central1-f\",\n description=\"example google_compute_node_group for Terraform Google Provider\",\n size=1,\n node_template=soletenant_tmpl.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var soletenant_tmpl = new Gcp.Compute.NodeTemplate(\"soletenant-tmpl\", new()\n {\n Region = \"us-central1\",\n NodeType = \"n1-node-96-624\",\n });\n\n var nodes = new Gcp.Compute.NodeGroup(\"nodes\", new()\n {\n Zone = \"us-central1-f\",\n Description = \"example google_compute_node_group for Terraform Google Provider\",\n Size = 1,\n NodeTemplate = soletenant_tmpl.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewNodeTemplate(ctx, \"soletenant-tmpl\", \u0026compute.NodeTemplateArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNodeType: pulumi.String(\"n1-node-96-624\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNodeGroup(ctx, \"nodes\", \u0026compute.NodeGroupArgs{\n\t\t\tZone: pulumi.String(\"us-central1-f\"),\n\t\t\tDescription: pulumi.String(\"example google_compute_node_group for Terraform Google Provider\"),\n\t\t\tSize: pulumi.Int(1),\n\t\t\tNodeTemplate: soletenant_tmpl.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.NodeTemplate;\nimport com.pulumi.gcp.compute.NodeTemplateArgs;\nimport com.pulumi.gcp.compute.NodeGroup;\nimport com.pulumi.gcp.compute.NodeGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var soletenant_tmpl = new NodeTemplate(\"soletenant-tmpl\", NodeTemplateArgs.builder() \n .region(\"us-central1\")\n .nodeType(\"n1-node-96-624\")\n .build());\n\n var nodes = new NodeGroup(\"nodes\", NodeGroupArgs.builder() \n .zone(\"us-central1-f\")\n .description(\"example google_compute_node_group for Terraform Google Provider\")\n .size(1)\n .nodeTemplate(soletenant_tmpl.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n soletenant-tmpl:\n type: gcp:compute:NodeTemplate\n properties:\n region: us-central1\n nodeType: n1-node-96-624\n nodes:\n type: gcp:compute:NodeGroup\n properties:\n zone: us-central1-f\n description: example google_compute_node_group for Terraform Google Provider\n size: 1\n nodeTemplate: ${[\"soletenant-tmpl\"].id}\n```\n{{% /example %}}\n{{% example %}}\n### Node Group Autoscaling Policy\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst soletenant_tmpl = new gcp.compute.NodeTemplate(\"soletenant-tmpl\", {\n region: \"us-central1\",\n nodeType: \"n1-node-96-624\",\n});\nconst nodes = new gcp.compute.NodeGroup(\"nodes\", {\n zone: \"us-central1-f\",\n description: \"example google_compute_node_group for Terraform Google Provider\",\n maintenancePolicy: \"RESTART_IN_PLACE\",\n maintenanceWindow: {\n startTime: \"08:00\",\n },\n initialSize: 1,\n nodeTemplate: soletenant_tmpl.id,\n autoscalingPolicy: {\n mode: \"ONLY_SCALE_OUT\",\n minNodes: 1,\n maxNodes: 10,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsoletenant_tmpl = gcp.compute.NodeTemplate(\"soletenant-tmpl\",\n region=\"us-central1\",\n node_type=\"n1-node-96-624\")\nnodes = gcp.compute.NodeGroup(\"nodes\",\n zone=\"us-central1-f\",\n description=\"example google_compute_node_group for Terraform Google Provider\",\n maintenance_policy=\"RESTART_IN_PLACE\",\n maintenance_window=gcp.compute.NodeGroupMaintenanceWindowArgs(\n start_time=\"08:00\",\n ),\n initial_size=1,\n node_template=soletenant_tmpl.id,\n autoscaling_policy=gcp.compute.NodeGroupAutoscalingPolicyArgs(\n mode=\"ONLY_SCALE_OUT\",\n min_nodes=1,\n max_nodes=10,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var soletenant_tmpl = new Gcp.Compute.NodeTemplate(\"soletenant-tmpl\", new()\n {\n Region = \"us-central1\",\n NodeType = \"n1-node-96-624\",\n });\n\n var nodes = new Gcp.Compute.NodeGroup(\"nodes\", new()\n {\n Zone = \"us-central1-f\",\n Description = \"example google_compute_node_group for Terraform Google Provider\",\n MaintenancePolicy = \"RESTART_IN_PLACE\",\n MaintenanceWindow = new Gcp.Compute.Inputs.NodeGroupMaintenanceWindowArgs\n {\n StartTime = \"08:00\",\n },\n InitialSize = 1,\n NodeTemplate = soletenant_tmpl.Id,\n AutoscalingPolicy = new Gcp.Compute.Inputs.NodeGroupAutoscalingPolicyArgs\n {\n Mode = \"ONLY_SCALE_OUT\",\n MinNodes = 1,\n MaxNodes = 10,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewNodeTemplate(ctx, \"soletenant-tmpl\", \u0026compute.NodeTemplateArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNodeType: pulumi.String(\"n1-node-96-624\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNodeGroup(ctx, \"nodes\", \u0026compute.NodeGroupArgs{\n\t\t\tZone: pulumi.String(\"us-central1-f\"),\n\t\t\tDescription: pulumi.String(\"example google_compute_node_group for Terraform Google Provider\"),\n\t\t\tMaintenancePolicy: pulumi.String(\"RESTART_IN_PLACE\"),\n\t\t\tMaintenanceWindow: \u0026compute.NodeGroupMaintenanceWindowArgs{\n\t\t\t\tStartTime: pulumi.String(\"08:00\"),\n\t\t\t},\n\t\t\tInitialSize: pulumi.Int(1),\n\t\t\tNodeTemplate: soletenant_tmpl.ID(),\n\t\t\tAutoscalingPolicy: \u0026compute.NodeGroupAutoscalingPolicyArgs{\n\t\t\t\tMode: pulumi.String(\"ONLY_SCALE_OUT\"),\n\t\t\t\tMinNodes: pulumi.Int(1),\n\t\t\t\tMaxNodes: 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.compute.NodeTemplate;\nimport com.pulumi.gcp.compute.NodeTemplateArgs;\nimport com.pulumi.gcp.compute.NodeGroup;\nimport com.pulumi.gcp.compute.NodeGroupArgs;\nimport com.pulumi.gcp.compute.inputs.NodeGroupMaintenanceWindowArgs;\nimport com.pulumi.gcp.compute.inputs.NodeGroupAutoscalingPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var soletenant_tmpl = new NodeTemplate(\"soletenant-tmpl\", NodeTemplateArgs.builder() \n .region(\"us-central1\")\n .nodeType(\"n1-node-96-624\")\n .build());\n\n var nodes = new NodeGroup(\"nodes\", NodeGroupArgs.builder() \n .zone(\"us-central1-f\")\n .description(\"example google_compute_node_group for Terraform Google Provider\")\n .maintenancePolicy(\"RESTART_IN_PLACE\")\n .maintenanceWindow(NodeGroupMaintenanceWindowArgs.builder()\n .startTime(\"08:00\")\n .build())\n .initialSize(1)\n .nodeTemplate(soletenant_tmpl.id())\n .autoscalingPolicy(NodeGroupAutoscalingPolicyArgs.builder()\n .mode(\"ONLY_SCALE_OUT\")\n .minNodes(1)\n .maxNodes(10)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n soletenant-tmpl:\n type: gcp:compute:NodeTemplate\n properties:\n region: us-central1\n nodeType: n1-node-96-624\n nodes:\n type: gcp:compute:NodeGroup\n properties:\n zone: us-central1-f\n description: example google_compute_node_group for Terraform Google Provider\n maintenancePolicy: RESTART_IN_PLACE\n maintenanceWindow:\n startTime: 08:00\n initialSize: 1\n nodeTemplate: ${[\"soletenant-tmpl\"].id}\n autoscalingPolicy:\n mode: ONLY_SCALE_OUT\n minNodes: 1\n maxNodes: 10\n```\n{{% /example %}}\n{{% example %}}\n### Node Group Share Settings\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst guestProject = new gcp.organizations.Project(\"guestProject\", {\n projectId: \"project-id\",\n orgId: \"123456789\",\n});\nconst soletenant_tmpl = new gcp.compute.NodeTemplate(\"soletenant-tmpl\", {\n region: \"us-central1\",\n nodeType: \"n1-node-96-624\",\n});\nconst nodes = new gcp.compute.NodeGroup(\"nodes\", {\n zone: \"us-central1-f\",\n description: \"example google_compute_node_group for Terraform Google Provider\",\n size: 1,\n nodeTemplate: soletenant_tmpl.id,\n shareSettings: {\n shareType: \"SPECIFIC_PROJECTS\",\n projectMaps: [{\n id: guestProject.projectId,\n projectId: guestProject.projectId,\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nguest_project = gcp.organizations.Project(\"guestProject\",\n project_id=\"project-id\",\n org_id=\"123456789\")\nsoletenant_tmpl = gcp.compute.NodeTemplate(\"soletenant-tmpl\",\n region=\"us-central1\",\n node_type=\"n1-node-96-624\")\nnodes = gcp.compute.NodeGroup(\"nodes\",\n zone=\"us-central1-f\",\n description=\"example google_compute_node_group for Terraform Google Provider\",\n size=1,\n node_template=soletenant_tmpl.id,\n share_settings=gcp.compute.NodeGroupShareSettingsArgs(\n share_type=\"SPECIFIC_PROJECTS\",\n project_maps=[gcp.compute.NodeGroupShareSettingsProjectMapArgs(\n id=guest_project.project_id,\n project_id=guest_project.project_id,\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var guestProject = new Gcp.Organizations.Project(\"guestProject\", new()\n {\n ProjectId = \"project-id\",\n OrgId = \"123456789\",\n });\n\n var soletenant_tmpl = new Gcp.Compute.NodeTemplate(\"soletenant-tmpl\", new()\n {\n Region = \"us-central1\",\n NodeType = \"n1-node-96-624\",\n });\n\n var nodes = new Gcp.Compute.NodeGroup(\"nodes\", new()\n {\n Zone = \"us-central1-f\",\n Description = \"example google_compute_node_group for Terraform Google Provider\",\n Size = 1,\n NodeTemplate = soletenant_tmpl.Id,\n ShareSettings = new Gcp.Compute.Inputs.NodeGroupShareSettingsArgs\n {\n ShareType = \"SPECIFIC_PROJECTS\",\n ProjectMaps = new[]\n {\n new Gcp.Compute.Inputs.NodeGroupShareSettingsProjectMapArgs\n {\n Id = guestProject.ProjectId,\n ProjectId = guestProject.ProjectId,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tguestProject, err := organizations.NewProject(ctx, \"guestProject\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"project-id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNodeTemplate(ctx, \"soletenant-tmpl\", \u0026compute.NodeTemplateArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNodeType: pulumi.String(\"n1-node-96-624\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNodeGroup(ctx, \"nodes\", \u0026compute.NodeGroupArgs{\n\t\t\tZone: pulumi.String(\"us-central1-f\"),\n\t\t\tDescription: pulumi.String(\"example google_compute_node_group for Terraform Google Provider\"),\n\t\t\tSize: pulumi.Int(1),\n\t\t\tNodeTemplate: soletenant_tmpl.ID(),\n\t\t\tShareSettings: \u0026compute.NodeGroupShareSettingsArgs{\n\t\t\t\tShareType: pulumi.String(\"SPECIFIC_PROJECTS\"),\n\t\t\t\tProjectMaps: compute.NodeGroupShareSettingsProjectMapArray{\n\t\t\t\t\t\u0026compute.NodeGroupShareSettingsProjectMapArgs{\n\t\t\t\t\t\tId: guestProject.ProjectId,\n\t\t\t\t\t\tProjectId: guestProject.ProjectId,\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.compute.NodeTemplate;\nimport com.pulumi.gcp.compute.NodeTemplateArgs;\nimport com.pulumi.gcp.compute.NodeGroup;\nimport com.pulumi.gcp.compute.NodeGroupArgs;\nimport com.pulumi.gcp.compute.inputs.NodeGroupShareSettingsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var guestProject = new Project(\"guestProject\", ProjectArgs.builder() \n .projectId(\"project-id\")\n .orgId(\"123456789\")\n .build());\n\n var soletenant_tmpl = new NodeTemplate(\"soletenant-tmpl\", NodeTemplateArgs.builder() \n .region(\"us-central1\")\n .nodeType(\"n1-node-96-624\")\n .build());\n\n var nodes = new NodeGroup(\"nodes\", NodeGroupArgs.builder() \n .zone(\"us-central1-f\")\n .description(\"example google_compute_node_group for Terraform Google Provider\")\n .size(1)\n .nodeTemplate(soletenant_tmpl.id())\n .shareSettings(NodeGroupShareSettingsArgs.builder()\n .shareType(\"SPECIFIC_PROJECTS\")\n .projectMaps(NodeGroupShareSettingsProjectMapArgs.builder()\n .id(guestProject.projectId())\n .projectId(guestProject.projectId())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n guestProject:\n type: gcp:organizations:Project\n properties:\n projectId: project-id\n orgId: '123456789'\n soletenant-tmpl:\n type: gcp:compute:NodeTemplate\n properties:\n region: us-central1\n nodeType: n1-node-96-624\n nodes:\n type: gcp:compute:NodeGroup\n properties:\n zone: us-central1-f\n description: example google_compute_node_group for Terraform Google Provider\n size: 1\n nodeTemplate: ${[\"soletenant-tmpl\"].id}\n shareSettings:\n shareType: SPECIFIC_PROJECTS\n projectMaps:\n - id: ${guestProject.projectId}\n projectId: ${guestProject.projectId}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nNodeGroup can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/nodeGroup:NodeGroup default projects/{{project}}/zones/{{zone}}/nodeGroups/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/nodeGroup:NodeGroup default {{project}}/{{zone}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/nodeGroup:NodeGroup default {{zone}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/nodeGroup:NodeGroup default {{name}}\n```\n\n ", "properties": { "autoscalingPolicy": { "$ref": "#/types/gcp:compute/NodeGroupAutoscalingPolicy:NodeGroupAutoscalingPolicy", @@ -136998,6 +138431,10 @@ "type": "string", "description": "The URI of the created resource.\n" }, + "shareSettings": { + "$ref": "#/types/gcp:compute/NodeGroupShareSettings:NodeGroupShareSettings", + "description": "Share settings for the node group.\nStructure is documented below.\n" + }, "size": { "type": "integer", "description": "The total number of nodes in the node group. One of `initial_size` or `size` must be specified.\n" @@ -137014,6 +138451,7 @@ "nodeTemplate", "project", "selfLink", + "shareSettings", "size", "zone" ], @@ -137057,6 +138495,11 @@ "description": "The ID of the project in which the resource belongs.\nIf it is not provided, the provider project is used.\n", "willReplaceOnChanges": true }, + "shareSettings": { + "$ref": "#/types/gcp:compute/NodeGroupShareSettings:NodeGroupShareSettings", + "description": "Share settings for the node group.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, "size": { "type": "integer", "description": "The total number of nodes in the node group. One of `initial_size` or `size` must be specified.\n", @@ -137121,6 +138564,11 @@ "type": "string", "description": "The URI of the created resource.\n" }, + "shareSettings": { + "$ref": "#/types/gcp:compute/NodeGroupShareSettings:NodeGroupShareSettings", + "description": "Share settings for the node group.\nStructure is documented below.\n", + "willReplaceOnChanges": true + }, "size": { "type": "integer", "description": "The total number of nodes in the node group. One of `initial_size` or `size` must be specified.\n", @@ -137308,7 +138756,7 @@ } }, "gcp:compute/organizationSecurityPolicy:OrganizationSecurityPolicy": { - "description": "Organization security policies are used to control incoming/outgoing traffic.\n\nTo get more information about OrganizationSecurityPolicy, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies)\n* How-to Guides\n * [Creating a firewall policy](https://cloud.google.com/vpc/docs/using-firewall-policies#create-policy)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Organization Security Policy Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst policy = new gcp.compute.OrganizationSecurityPolicy(\"policy\", {\n displayName: \"tf-test\",\n parent: \"organizations/123456789\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npolicy = gcp.compute.OrganizationSecurityPolicy(\"policy\",\n display_name=\"tf-test\",\n parent=\"organizations/123456789\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var policy = new Gcp.Compute.OrganizationSecurityPolicy(\"policy\", new()\n {\n DisplayName = \"tf-test\",\n Parent = \"organizations/123456789\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewOrganizationSecurityPolicy(ctx, \"policy\", \u0026compute.OrganizationSecurityPolicyArgs{\n\t\t\tDisplayName: pulumi.String(\"tf-test\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.OrganizationSecurityPolicy;\nimport com.pulumi.gcp.compute.OrganizationSecurityPolicyArgs;\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 policy = new OrganizationSecurityPolicy(\"policy\", OrganizationSecurityPolicyArgs.builder() \n .displayName(\"tf-test\")\n .parent(\"organizations/123456789\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:compute:OrganizationSecurityPolicy\n properties:\n displayName: tf-test\n parent: organizations/123456789\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nOrganizationSecurityPolicy can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/organizationSecurityPolicy:OrganizationSecurityPolicy default locations/global/securityPolicies/{{policy_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/organizationSecurityPolicy:OrganizationSecurityPolicy default {{policy_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nOrganizationSecurityPolicy can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/organizationSecurityPolicy:OrganizationSecurityPolicy default locations/global/securityPolicies/{{policy_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/organizationSecurityPolicy:OrganizationSecurityPolicy default {{policy_id}}\n```\n\n ", "properties": { "description": { "type": "string", @@ -137401,7 +138849,7 @@ } }, "gcp:compute/organizationSecurityPolicyAssociation:OrganizationSecurityPolicyAssociation": { - "description": "An association for the OrganizationSecurityPolicy.\n\nTo get more information about OrganizationSecurityPolicyAssociation, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addAssociation)\n* How-to Guides\n * [Associating a policy with the organization or folder](https://cloud.google.com/vpc/docs/using-firewall-policies#associate)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Organization Security Policy Association Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst securityPolicyTarget = new gcp.organizations.Folder(\"securityPolicyTarget\", {\n displayName: \"tf-test-secpol\",\n parent: \"organizations/123456789\",\n}, {\n provider: google_beta,\n});\nconst policyOrganizationSecurityPolicy = new gcp.compute.OrganizationSecurityPolicy(\"policyOrganizationSecurityPolicy\", {\n displayName: \"tf-test\",\n parent: securityPolicyTarget.name,\n}, {\n provider: google_beta,\n});\nconst policyOrganizationSecurityPolicyRule = new gcp.compute.OrganizationSecurityPolicyRule(\"policyOrganizationSecurityPolicyRule\", {\n policyId: policyOrganizationSecurityPolicy.id,\n action: \"allow\",\n direction: \"INGRESS\",\n enableLogging: true,\n match: {\n config: {\n srcIpRanges: [\n \"192.168.0.0/16\",\n \"10.0.0.0/8\",\n ],\n layer4Configs: [\n {\n ipProtocol: \"tcp\",\n ports: [\"22\"],\n },\n {\n ipProtocol: \"icmp\",\n },\n ],\n },\n },\n priority: 100,\n}, {\n provider: google_beta,\n});\nconst policyOrganizationSecurityPolicyAssociation = new gcp.compute.OrganizationSecurityPolicyAssociation(\"policyOrganizationSecurityPolicyAssociation\", {\n attachmentId: policyOrganizationSecurityPolicy.parent,\n policyId: policyOrganizationSecurityPolicy.id,\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecurity_policy_target = gcp.organizations.Folder(\"securityPolicyTarget\",\n display_name=\"tf-test-secpol\",\n parent=\"organizations/123456789\",\n opts=pulumi.ResourceOptions(provider=google_beta))\npolicy_organization_security_policy = gcp.compute.OrganizationSecurityPolicy(\"policyOrganizationSecurityPolicy\",\n display_name=\"tf-test\",\n parent=security_policy_target.name,\n opts=pulumi.ResourceOptions(provider=google_beta))\npolicy_organization_security_policy_rule = gcp.compute.OrganizationSecurityPolicyRule(\"policyOrganizationSecurityPolicyRule\",\n policy_id=policy_organization_security_policy.id,\n action=\"allow\",\n direction=\"INGRESS\",\n enable_logging=True,\n match=gcp.compute.OrganizationSecurityPolicyRuleMatchArgs(\n config=gcp.compute.OrganizationSecurityPolicyRuleMatchConfigArgs(\n src_ip_ranges=[\n \"192.168.0.0/16\",\n \"10.0.0.0/8\",\n ],\n layer4_configs=[\n gcp.compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs(\n ip_protocol=\"tcp\",\n ports=[\"22\"],\n ),\n gcp.compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs(\n ip_protocol=\"icmp\",\n ),\n ],\n ),\n ),\n priority=100,\n opts=pulumi.ResourceOptions(provider=google_beta))\npolicy_organization_security_policy_association = gcp.compute.OrganizationSecurityPolicyAssociation(\"policyOrganizationSecurityPolicyAssociation\",\n attachment_id=policy_organization_security_policy.parent,\n policy_id=policy_organization_security_policy.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var securityPolicyTarget = new Gcp.Organizations.Folder(\"securityPolicyTarget\", new()\n {\n DisplayName = \"tf-test-secpol\",\n Parent = \"organizations/123456789\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var policyOrganizationSecurityPolicy = new Gcp.Compute.OrganizationSecurityPolicy(\"policyOrganizationSecurityPolicy\", new()\n {\n DisplayName = \"tf-test\",\n Parent = securityPolicyTarget.Name,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var policyOrganizationSecurityPolicyRule = new Gcp.Compute.OrganizationSecurityPolicyRule(\"policyOrganizationSecurityPolicyRule\", new()\n {\n PolicyId = policyOrganizationSecurityPolicy.Id,\n Action = \"allow\",\n Direction = \"INGRESS\",\n EnableLogging = true,\n Match = new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchArgs\n {\n Config = new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchConfigArgs\n {\n SrcIpRanges = new[]\n {\n \"192.168.0.0/16\",\n \"10.0.0.0/8\",\n },\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs\n {\n IpProtocol = \"tcp\",\n Ports = new[]\n {\n \"22\",\n },\n },\n new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs\n {\n IpProtocol = \"icmp\",\n },\n },\n },\n },\n Priority = 100,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var policyOrganizationSecurityPolicyAssociation = new Gcp.Compute.OrganizationSecurityPolicyAssociation(\"policyOrganizationSecurityPolicyAssociation\", new()\n {\n AttachmentId = policyOrganizationSecurityPolicy.Parent,\n PolicyId = policyOrganizationSecurityPolicy.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsecurityPolicyTarget, err := organizations.NewFolder(ctx, \"securityPolicyTarget\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"tf-test-secpol\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tpolicyOrganizationSecurityPolicy, err := compute.NewOrganizationSecurityPolicy(ctx, \"policyOrganizationSecurityPolicy\", \u0026compute.OrganizationSecurityPolicyArgs{\n\t\t\tDisplayName: pulumi.String(\"tf-test\"),\n\t\t\tParent: securityPolicyTarget.Name,\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewOrganizationSecurityPolicyRule(ctx, \"policyOrganizationSecurityPolicyRule\", \u0026compute.OrganizationSecurityPolicyRuleArgs{\n\t\t\tPolicyId: policyOrganizationSecurityPolicy.ID(),\n\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\tDirection: pulumi.String(\"INGRESS\"),\n\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\tMatch: \u0026compute.OrganizationSecurityPolicyRuleMatchArgs{\n\t\t\t\tConfig: \u0026compute.OrganizationSecurityPolicyRuleMatchConfigArgs{\n\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"192.168.0.0/16\"),\n\t\t\t\t\t\tpulumi.String(\"10.0.0.0/8\"),\n\t\t\t\t\t},\n\t\t\t\t\tLayer4Configs: compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArray{\n\t\t\t\t\t\t\u0026compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs{\n\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"22\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs{\n\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"icmp\"),\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\tPriority: pulumi.Int(100),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewOrganizationSecurityPolicyAssociation(ctx, \"policyOrganizationSecurityPolicyAssociation\", \u0026compute.OrganizationSecurityPolicyAssociationArgs{\n\t\t\tAttachmentId: policyOrganizationSecurityPolicy.Parent,\n\t\t\tPolicyId: policyOrganizationSecurityPolicy.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.compute.OrganizationSecurityPolicy;\nimport com.pulumi.gcp.compute.OrganizationSecurityPolicyArgs;\nimport com.pulumi.gcp.compute.OrganizationSecurityPolicyRule;\nimport com.pulumi.gcp.compute.OrganizationSecurityPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.OrganizationSecurityPolicyRuleMatchArgs;\nimport com.pulumi.gcp.compute.inputs.OrganizationSecurityPolicyRuleMatchConfigArgs;\nimport com.pulumi.gcp.compute.OrganizationSecurityPolicyAssociation;\nimport com.pulumi.gcp.compute.OrganizationSecurityPolicyAssociationArgs;\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 securityPolicyTarget = new Folder(\"securityPolicyTarget\", FolderArgs.builder() \n .displayName(\"tf-test-secpol\")\n .parent(\"organizations/123456789\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var policyOrganizationSecurityPolicy = new OrganizationSecurityPolicy(\"policyOrganizationSecurityPolicy\", OrganizationSecurityPolicyArgs.builder() \n .displayName(\"tf-test\")\n .parent(securityPolicyTarget.name())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var policyOrganizationSecurityPolicyRule = new OrganizationSecurityPolicyRule(\"policyOrganizationSecurityPolicyRule\", OrganizationSecurityPolicyRuleArgs.builder() \n .policyId(policyOrganizationSecurityPolicy.id())\n .action(\"allow\")\n .direction(\"INGRESS\")\n .enableLogging(true)\n .match(OrganizationSecurityPolicyRuleMatchArgs.builder()\n .config(OrganizationSecurityPolicyRuleMatchConfigArgs.builder()\n .srcIpRanges( \n \"192.168.0.0/16\",\n \"10.0.0.0/8\")\n .layer4Configs( \n OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs.builder()\n .ipProtocol(\"tcp\")\n .ports(\"22\")\n .build(),\n OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs.builder()\n .ipProtocol(\"icmp\")\n .build())\n .build())\n .build())\n .priority(100)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var policyOrganizationSecurityPolicyAssociation = new OrganizationSecurityPolicyAssociation(\"policyOrganizationSecurityPolicyAssociation\", OrganizationSecurityPolicyAssociationArgs.builder() \n .attachmentId(policyOrganizationSecurityPolicy.parent())\n .policyId(policyOrganizationSecurityPolicy.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n securityPolicyTarget:\n type: gcp:organizations:Folder\n properties:\n displayName: tf-test-secpol\n parent: organizations/123456789\n options:\n provider: ${[\"google-beta\"]}\n policyOrganizationSecurityPolicy:\n type: gcp:compute:OrganizationSecurityPolicy\n properties:\n displayName: tf-test\n parent: ${securityPolicyTarget.name}\n options:\n provider: ${[\"google-beta\"]}\n policyOrganizationSecurityPolicyRule:\n type: gcp:compute:OrganizationSecurityPolicyRule\n properties:\n policyId: ${policyOrganizationSecurityPolicy.id}\n action: allow\n direction: INGRESS\n enableLogging: true\n match:\n config:\n srcIpRanges:\n - 192.168.0.0/16\n - 10.0.0.0/8\n layer4Configs:\n - ipProtocol: tcp\n ports:\n - '22'\n - ipProtocol: icmp\n priority: 100\n options:\n provider: ${[\"google-beta\"]}\n policyOrganizationSecurityPolicyAssociation:\n type: gcp:compute:OrganizationSecurityPolicyAssociation\n properties:\n attachmentId: ${policyOrganizationSecurityPolicy.parent}\n policyId: ${policyOrganizationSecurityPolicy.id}\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nOrganizationSecurityPolicyAssociation can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/organizationSecurityPolicyAssociation:OrganizationSecurityPolicyAssociation default {{policy_id}}/association/{{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nOrganizationSecurityPolicyAssociation can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/organizationSecurityPolicyAssociation:OrganizationSecurityPolicyAssociation default {{policy_id}}/association/{{name}}\n```\n\n ", "properties": { "attachmentId": { "type": "string", @@ -137474,7 +138922,7 @@ } }, "gcp:compute/organizationSecurityPolicyRule:OrganizationSecurityPolicyRule": { - "description": "A rule for the OrganizationSecurityPolicy.\n\nTo get more information about OrganizationSecurityPolicyRule, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addRule)\n* How-to Guides\n * [Creating firewall rules](https://cloud.google.com/vpc/docs/using-firewall-policies#create-rules)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Organization Security Policy Rule Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst policyOrganizationSecurityPolicy = new gcp.compute.OrganizationSecurityPolicy(\"policyOrganizationSecurityPolicy\", {\n displayName: \"tf-test\",\n parent: \"organizations/123456789\",\n}, {\n provider: google_beta,\n});\nconst policyOrganizationSecurityPolicyRule = new gcp.compute.OrganizationSecurityPolicyRule(\"policyOrganizationSecurityPolicyRule\", {\n policyId: policyOrganizationSecurityPolicy.id,\n action: \"allow\",\n direction: \"INGRESS\",\n enableLogging: true,\n match: {\n config: {\n srcIpRanges: [\n \"192.168.0.0/16\",\n \"10.0.0.0/8\",\n ],\n layer4Configs: [\n {\n ipProtocol: \"tcp\",\n ports: [\"22\"],\n },\n {\n ipProtocol: \"icmp\",\n },\n ],\n },\n },\n priority: 100,\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npolicy_organization_security_policy = gcp.compute.OrganizationSecurityPolicy(\"policyOrganizationSecurityPolicy\",\n display_name=\"tf-test\",\n parent=\"organizations/123456789\",\n opts=pulumi.ResourceOptions(provider=google_beta))\npolicy_organization_security_policy_rule = gcp.compute.OrganizationSecurityPolicyRule(\"policyOrganizationSecurityPolicyRule\",\n policy_id=policy_organization_security_policy.id,\n action=\"allow\",\n direction=\"INGRESS\",\n enable_logging=True,\n match=gcp.compute.OrganizationSecurityPolicyRuleMatchArgs(\n config=gcp.compute.OrganizationSecurityPolicyRuleMatchConfigArgs(\n src_ip_ranges=[\n \"192.168.0.0/16\",\n \"10.0.0.0/8\",\n ],\n layer4_configs=[\n gcp.compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs(\n ip_protocol=\"tcp\",\n ports=[\"22\"],\n ),\n gcp.compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs(\n ip_protocol=\"icmp\",\n ),\n ],\n ),\n ),\n priority=100,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var policyOrganizationSecurityPolicy = new Gcp.Compute.OrganizationSecurityPolicy(\"policyOrganizationSecurityPolicy\", new()\n {\n DisplayName = \"tf-test\",\n Parent = \"organizations/123456789\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var policyOrganizationSecurityPolicyRule = new Gcp.Compute.OrganizationSecurityPolicyRule(\"policyOrganizationSecurityPolicyRule\", new()\n {\n PolicyId = policyOrganizationSecurityPolicy.Id,\n Action = \"allow\",\n Direction = \"INGRESS\",\n EnableLogging = true,\n Match = new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchArgs\n {\n Config = new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchConfigArgs\n {\n SrcIpRanges = new[]\n {\n \"192.168.0.0/16\",\n \"10.0.0.0/8\",\n },\n Layer4Configs = new[]\n {\n new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs\n {\n IpProtocol = \"tcp\",\n Ports = new[]\n {\n \"22\",\n },\n },\n new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs\n {\n IpProtocol = \"icmp\",\n },\n },\n },\n },\n Priority = 100,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tpolicyOrganizationSecurityPolicy, err := compute.NewOrganizationSecurityPolicy(ctx, \"policyOrganizationSecurityPolicy\", \u0026compute.OrganizationSecurityPolicyArgs{\n\t\t\tDisplayName: pulumi.String(\"tf-test\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewOrganizationSecurityPolicyRule(ctx, \"policyOrganizationSecurityPolicyRule\", \u0026compute.OrganizationSecurityPolicyRuleArgs{\n\t\t\tPolicyId: policyOrganizationSecurityPolicy.ID(),\n\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\tDirection: pulumi.String(\"INGRESS\"),\n\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\tMatch: \u0026compute.OrganizationSecurityPolicyRuleMatchArgs{\n\t\t\t\tConfig: \u0026compute.OrganizationSecurityPolicyRuleMatchConfigArgs{\n\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"192.168.0.0/16\"),\n\t\t\t\t\t\tpulumi.String(\"10.0.0.0/8\"),\n\t\t\t\t\t},\n\t\t\t\t\tLayer4Configs: compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArray{\n\t\t\t\t\t\t\u0026compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs{\n\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"tcp\"),\n\t\t\t\t\t\t\tPorts: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"22\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs{\n\t\t\t\t\t\t\tIpProtocol: pulumi.String(\"icmp\"),\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\tPriority: pulumi.Int(100),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.OrganizationSecurityPolicy;\nimport com.pulumi.gcp.compute.OrganizationSecurityPolicyArgs;\nimport com.pulumi.gcp.compute.OrganizationSecurityPolicyRule;\nimport com.pulumi.gcp.compute.OrganizationSecurityPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.OrganizationSecurityPolicyRuleMatchArgs;\nimport com.pulumi.gcp.compute.inputs.OrganizationSecurityPolicyRuleMatchConfigArgs;\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 policyOrganizationSecurityPolicy = new OrganizationSecurityPolicy(\"policyOrganizationSecurityPolicy\", OrganizationSecurityPolicyArgs.builder() \n .displayName(\"tf-test\")\n .parent(\"organizations/123456789\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var policyOrganizationSecurityPolicyRule = new OrganizationSecurityPolicyRule(\"policyOrganizationSecurityPolicyRule\", OrganizationSecurityPolicyRuleArgs.builder() \n .policyId(policyOrganizationSecurityPolicy.id())\n .action(\"allow\")\n .direction(\"INGRESS\")\n .enableLogging(true)\n .match(OrganizationSecurityPolicyRuleMatchArgs.builder()\n .config(OrganizationSecurityPolicyRuleMatchConfigArgs.builder()\n .srcIpRanges( \n \"192.168.0.0/16\",\n \"10.0.0.0/8\")\n .layer4Configs( \n OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs.builder()\n .ipProtocol(\"tcp\")\n .ports(\"22\")\n .build(),\n OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs.builder()\n .ipProtocol(\"icmp\")\n .build())\n .build())\n .build())\n .priority(100)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policyOrganizationSecurityPolicy:\n type: gcp:compute:OrganizationSecurityPolicy\n properties:\n displayName: tf-test\n parent: organizations/123456789\n options:\n provider: ${[\"google-beta\"]}\n policyOrganizationSecurityPolicyRule:\n type: gcp:compute:OrganizationSecurityPolicyRule\n properties:\n policyId: ${policyOrganizationSecurityPolicy.id}\n action: allow\n direction: INGRESS\n enableLogging: true\n match:\n config:\n srcIpRanges:\n - 192.168.0.0/16\n - 10.0.0.0/8\n layer4Configs:\n - ipProtocol: tcp\n ports:\n - '22'\n - ipProtocol: icmp\n priority: 100\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nOrganizationSecurityPolicyRule can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/organizationSecurityPolicyRule:OrganizationSecurityPolicyRule default {{policy_id}}/priority/{{priority}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nOrganizationSecurityPolicyRule can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/organizationSecurityPolicyRule:OrganizationSecurityPolicyRule default {{policy_id}}/priority/{{priority}}\n```\n\n ", "properties": { "action": { "type": "string", @@ -137641,7 +139089,7 @@ } }, "gcp:compute/packetMirroring:PacketMirroring": { - "description": "Packet Mirroring mirrors traffic to and from particular VM instances.\nYou can use the collected traffic to help you detect security threats\nand monitor application performance.\n\nTo get more information about PacketMirroring, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/packetMirrorings)\n* How-to Guides\n * [Using Packet Mirroring](https://cloud.google.com/vpc/docs/using-packet-mirroring#creating)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Compute Packet Mirroring Full\n\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.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.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.RegionBackendService;\nimport com.pulumi.gcp.compute.RegionBackendServiceArgs;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.compute.PacketMirroring;\nimport com.pulumi.gcp.compute.PacketMirroringArgs;\nimport com.pulumi.gcp.compute.inputs.PacketMirroringNetworkArgs;\nimport com.pulumi.gcp.compute.inputs.PacketMirroringCollectorIlbArgs;\nimport com.pulumi.gcp.compute.inputs.PacketMirroringMirroredResourcesArgs;\nimport com.pulumi.gcp.compute.inputs.PacketMirroringFilterArgs;\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 defaultNetwork = new Network(\"defaultNetwork\");\n\n var mirror = new Instance(\"mirror\", InstanceArgs.builder() \n .machineType(\"e2-medium\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"debian-cloud/debian-11\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(defaultNetwork.id())\n .accessConfigs()\n .build())\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder() \n .network(defaultNetwork.id())\n .ipCidrRange(\"10.2.0.0/16\")\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .checkIntervalSec(1)\n .timeoutSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"80\")\n .build())\n .build());\n\n var defaultRegionBackendService = new RegionBackendService(\"defaultRegionBackendService\", RegionBackendServiceArgs.builder() \n .healthChecks(defaultHealthCheck.id())\n .build());\n\n var defaultForwardingRule = new ForwardingRule(\"defaultForwardingRule\", ForwardingRuleArgs.builder() \n .isMirroringCollector(true)\n .ipProtocol(\"TCP\")\n .loadBalancingScheme(\"INTERNAL\")\n .backendService(defaultRegionBackendService.id())\n .allPorts(true)\n .network(defaultNetwork.id())\n .subnetwork(defaultSubnetwork.id())\n .networkTier(\"PREMIUM\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(defaultSubnetwork)\n .build());\n\n var foobar = new PacketMirroring(\"foobar\", PacketMirroringArgs.builder() \n .description(\"bar\")\n .network(PacketMirroringNetworkArgs.builder()\n .url(defaultNetwork.id())\n .build())\n .collectorIlb(PacketMirroringCollectorIlbArgs.builder()\n .url(defaultForwardingRule.id())\n .build())\n .mirroredResources(PacketMirroringMirroredResourcesArgs.builder()\n .tags(\"foo\")\n .instances(PacketMirroringMirroredResourcesInstanceArgs.builder()\n .url(mirror.id())\n .build())\n .build())\n .filter(PacketMirroringFilterArgs.builder()\n .ipProtocols(\"tcp\")\n .cidrRanges(\"0.0.0.0/0\")\n .direction(\"BOTH\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n mirror:\n type: gcp:compute:Instance\n properties:\n machineType: e2-medium\n bootDisk:\n initializeParams:\n image: debian-cloud/debian-11\n networkInterfaces:\n - network: ${defaultNetwork.id}\n accessConfigs:\n - {}\n defaultNetwork:\n type: gcp:compute:Network\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n network: ${defaultNetwork.id}\n ipCidrRange: 10.2.0.0/16\n defaultRegionBackendService:\n type: gcp:compute:RegionBackendService\n properties:\n healthChecks:\n - ${defaultHealthCheck.id}\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n checkIntervalSec: 1\n timeoutSec: 1\n tcpHealthCheck:\n port: '80'\n defaultForwardingRule:\n type: gcp:compute:ForwardingRule\n properties:\n isMirroringCollector: true\n ipProtocol: TCP\n loadBalancingScheme: INTERNAL\n backendService: ${defaultRegionBackendService.id}\n allPorts: true\n network: ${defaultNetwork.id}\n subnetwork: ${defaultSubnetwork.id}\n networkTier: PREMIUM\n options:\n dependson:\n - ${defaultSubnetwork}\n foobar:\n type: gcp:compute:PacketMirroring\n properties:\n description: bar\n network:\n url: ${defaultNetwork.id}\n collectorIlb:\n url: ${defaultForwardingRule.id}\n mirroredResources:\n tags:\n - foo\n instances:\n - url: ${mirror.id}\n filter:\n ipProtocols:\n - tcp\n cidrRanges:\n - 0.0.0.0/0\n direction: BOTH\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPacketMirroring can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/packetMirroring:PacketMirroring default projects/{{project}}/regions/{{region}}/packetMirrorings/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/packetMirroring:PacketMirroring default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/packetMirroring:PacketMirroring default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/packetMirroring:PacketMirroring default {{name}}\n```\n\n ", + "description": "Packet Mirroring mirrors traffic to and from particular VM instances.\nYou can use the collected traffic to help you detect security threats\nand monitor application performance.\n\n\nTo get more information about PacketMirroring, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/packetMirrorings)\n* How-to Guides\n * [Using Packet Mirroring](https://cloud.google.com/vpc/docs/using-packet-mirroring#creating)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Compute Packet Mirroring Full\n\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.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.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.RegionBackendService;\nimport com.pulumi.gcp.compute.RegionBackendServiceArgs;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.compute.PacketMirroring;\nimport com.pulumi.gcp.compute.PacketMirroringArgs;\nimport com.pulumi.gcp.compute.inputs.PacketMirroringNetworkArgs;\nimport com.pulumi.gcp.compute.inputs.PacketMirroringCollectorIlbArgs;\nimport com.pulumi.gcp.compute.inputs.PacketMirroringMirroredResourcesArgs;\nimport com.pulumi.gcp.compute.inputs.PacketMirroringFilterArgs;\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 defaultNetwork = new Network(\"defaultNetwork\");\n\n var mirror = new Instance(\"mirror\", InstanceArgs.builder() \n .machineType(\"e2-medium\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"debian-cloud/debian-11\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(defaultNetwork.id())\n .accessConfigs()\n .build())\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder() \n .network(defaultNetwork.id())\n .ipCidrRange(\"10.2.0.0/16\")\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .checkIntervalSec(1)\n .timeoutSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"80\")\n .build())\n .build());\n\n var defaultRegionBackendService = new RegionBackendService(\"defaultRegionBackendService\", RegionBackendServiceArgs.builder() \n .healthChecks(defaultHealthCheck.id())\n .build());\n\n var defaultForwardingRule = new ForwardingRule(\"defaultForwardingRule\", ForwardingRuleArgs.builder() \n .isMirroringCollector(true)\n .ipProtocol(\"TCP\")\n .loadBalancingScheme(\"INTERNAL\")\n .backendService(defaultRegionBackendService.id())\n .allPorts(true)\n .network(defaultNetwork.id())\n .subnetwork(defaultSubnetwork.id())\n .networkTier(\"PREMIUM\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(defaultSubnetwork)\n .build());\n\n var foobar = new PacketMirroring(\"foobar\", PacketMirroringArgs.builder() \n .description(\"bar\")\n .network(PacketMirroringNetworkArgs.builder()\n .url(defaultNetwork.id())\n .build())\n .collectorIlb(PacketMirroringCollectorIlbArgs.builder()\n .url(defaultForwardingRule.id())\n .build())\n .mirroredResources(PacketMirroringMirroredResourcesArgs.builder()\n .tags(\"foo\")\n .instances(PacketMirroringMirroredResourcesInstanceArgs.builder()\n .url(mirror.id())\n .build())\n .build())\n .filter(PacketMirroringFilterArgs.builder()\n .ipProtocols(\"tcp\")\n .cidrRanges(\"0.0.0.0/0\")\n .direction(\"BOTH\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n mirror:\n type: gcp:compute:Instance\n properties:\n machineType: e2-medium\n bootDisk:\n initializeParams:\n image: debian-cloud/debian-11\n networkInterfaces:\n - network: ${defaultNetwork.id}\n accessConfigs:\n - {}\n defaultNetwork:\n type: gcp:compute:Network\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n network: ${defaultNetwork.id}\n ipCidrRange: 10.2.0.0/16\n defaultRegionBackendService:\n type: gcp:compute:RegionBackendService\n properties:\n healthChecks:\n - ${defaultHealthCheck.id}\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n checkIntervalSec: 1\n timeoutSec: 1\n tcpHealthCheck:\n port: '80'\n defaultForwardingRule:\n type: gcp:compute:ForwardingRule\n properties:\n isMirroringCollector: true\n ipProtocol: TCP\n loadBalancingScheme: INTERNAL\n backendService: ${defaultRegionBackendService.id}\n allPorts: true\n network: ${defaultNetwork.id}\n subnetwork: ${defaultSubnetwork.id}\n networkTier: PREMIUM\n options:\n dependson:\n - ${defaultSubnetwork}\n foobar:\n type: gcp:compute:PacketMirroring\n properties:\n description: bar\n network:\n url: ${defaultNetwork.id}\n collectorIlb:\n url: ${defaultForwardingRule.id}\n mirroredResources:\n tags:\n - foo\n instances:\n - url: ${mirror.id}\n filter:\n ipProtocols:\n - tcp\n cidrRanges:\n - 0.0.0.0/0\n direction: BOTH\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPacketMirroring can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/packetMirroring:PacketMirroring default projects/{{project}}/regions/{{region}}/packetMirrorings/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/packetMirroring:PacketMirroring default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/packetMirroring:PacketMirroring default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/packetMirroring:PacketMirroring default {{name}}\n```\n\n ", "properties": { "collectorIlb": { "$ref": "#/types/gcp:compute/PacketMirroringCollectorIlb:PacketMirroringCollectorIlb", @@ -137782,7 +139230,7 @@ } }, "gcp:compute/perInstanceConfig:PerInstanceConfig": { - "description": "A config defined for a single managed instance that belongs to an instance group manager. It preserves the instance name\nacross instance group manager operations and can define stateful disks or metadata that are unique to the instance.\n\nTo get more information about PerInstanceConfig, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/instanceGroupManagers)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Stateful Igm\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myImage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst igm_basic = new gcp.compute.InstanceTemplate(\"igm-basic\", {\n machineType: \"e2-medium\",\n canIpForward: false,\n tags: [\n \"foo\",\n \"bar\",\n ],\n disks: [{\n sourceImage: myImage.then(myImage =\u003e myImage.selfLink),\n autoDelete: true,\n boot: true,\n }],\n networkInterfaces: [{\n network: \"default\",\n }],\n serviceAccount: {\n scopes: [\n \"userinfo-email\",\n \"compute-ro\",\n \"storage-ro\",\n ],\n },\n});\nconst igm_no_tp = new gcp.compute.InstanceGroupManager(\"igm-no-tp\", {\n description: \"Test instance group manager\",\n versions: [{\n name: \"prod\",\n instanceTemplate: igm_basic.selfLink,\n }],\n baseInstanceName: \"igm-no-tp\",\n zone: \"us-central1-c\",\n targetSize: 2,\n});\nconst _default = new gcp.compute.Disk(\"default\", {\n type: \"pd-ssd\",\n zone: google_compute_instance_group_manager.igm.zone,\n image: \"debian-11-bullseye-v20220719\",\n physicalBlockSizeBytes: 4096,\n});\nconst withDisk = new gcp.compute.PerInstanceConfig(\"withDisk\", {\n zone: google_compute_instance_group_manager.igm.zone,\n instanceGroupManager: google_compute_instance_group_manager.igm.name,\n preservedState: {\n metadata: {\n foo: \"bar\",\n instance_template: igm_basic.selfLink,\n },\n disks: [{\n deviceName: \"my-stateful-disk\",\n source: _default.id,\n mode: \"READ_ONLY\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_image = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\nigm_basic = gcp.compute.InstanceTemplate(\"igm-basic\",\n machine_type=\"e2-medium\",\n can_ip_forward=False,\n tags=[\n \"foo\",\n \"bar\",\n ],\n disks=[gcp.compute.InstanceTemplateDiskArgs(\n source_image=my_image.self_link,\n auto_delete=True,\n boot=True,\n )],\n network_interfaces=[gcp.compute.InstanceTemplateNetworkInterfaceArgs(\n network=\"default\",\n )],\n service_account=gcp.compute.InstanceTemplateServiceAccountArgs(\n scopes=[\n \"userinfo-email\",\n \"compute-ro\",\n \"storage-ro\",\n ],\n ))\nigm_no_tp = gcp.compute.InstanceGroupManager(\"igm-no-tp\",\n description=\"Test instance group manager\",\n versions=[gcp.compute.InstanceGroupManagerVersionArgs(\n name=\"prod\",\n instance_template=igm_basic.self_link,\n )],\n base_instance_name=\"igm-no-tp\",\n zone=\"us-central1-c\",\n target_size=2)\ndefault = gcp.compute.Disk(\"default\",\n type=\"pd-ssd\",\n zone=google_compute_instance_group_manager[\"igm\"][\"zone\"],\n image=\"debian-11-bullseye-v20220719\",\n physical_block_size_bytes=4096)\nwith_disk = gcp.compute.PerInstanceConfig(\"withDisk\",\n zone=google_compute_instance_group_manager[\"igm\"][\"zone\"],\n instance_group_manager=google_compute_instance_group_manager[\"igm\"][\"name\"],\n preserved_state=gcp.compute.PerInstanceConfigPreservedStateArgs(\n metadata={\n \"foo\": \"bar\",\n \"instance_template\": igm_basic.self_link,\n },\n disks=[gcp.compute.PerInstanceConfigPreservedStateDiskArgs(\n device_name=\"my-stateful-disk\",\n source=default.id,\n mode=\"READ_ONLY\",\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myImage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var igm_basic = new Gcp.Compute.InstanceTemplate(\"igm-basic\", new()\n {\n MachineType = \"e2-medium\",\n CanIpForward = false,\n Tags = new[]\n {\n \"foo\",\n \"bar\",\n },\n Disks = new[]\n {\n new Gcp.Compute.Inputs.InstanceTemplateDiskArgs\n {\n SourceImage = myImage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n AutoDelete = true,\n Boot = true,\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceTemplateNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n ServiceAccount = new Gcp.Compute.Inputs.InstanceTemplateServiceAccountArgs\n {\n Scopes = new[]\n {\n \"userinfo-email\",\n \"compute-ro\",\n \"storage-ro\",\n },\n },\n });\n\n var igm_no_tp = new Gcp.Compute.InstanceGroupManager(\"igm-no-tp\", new()\n {\n Description = \"Test instance group manager\",\n Versions = new[]\n {\n new Gcp.Compute.Inputs.InstanceGroupManagerVersionArgs\n {\n Name = \"prod\",\n InstanceTemplate = igm_basic.SelfLink,\n },\n },\n BaseInstanceName = \"igm-no-tp\",\n Zone = \"us-central1-c\",\n TargetSize = 2,\n });\n\n var @default = new Gcp.Compute.Disk(\"default\", new()\n {\n Type = \"pd-ssd\",\n Zone = google_compute_instance_group_manager.Igm.Zone,\n Image = \"debian-11-bullseye-v20220719\",\n PhysicalBlockSizeBytes = 4096,\n });\n\n var withDisk = new Gcp.Compute.PerInstanceConfig(\"withDisk\", new()\n {\n Zone = google_compute_instance_group_manager.Igm.Zone,\n InstanceGroupManager = google_compute_instance_group_manager.Igm.Name,\n PreservedState = new Gcp.Compute.Inputs.PerInstanceConfigPreservedStateArgs\n {\n Metadata = \n {\n { \"foo\", \"bar\" },\n { \"instance_template\", igm_basic.SelfLink },\n },\n Disks = new[]\n {\n new Gcp.Compute.Inputs.PerInstanceConfigPreservedStateDiskArgs\n {\n DeviceName = \"my-stateful-disk\",\n Source = @default.Id,\n Mode = \"READ_ONLY\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tmyImage, 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.NewInstanceTemplate(ctx, \"igm-basic\", \u0026compute.InstanceTemplateArgs{\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tCanIpForward: pulumi.Bool(false),\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"foo\"),\n\t\t\t\tpulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tDisks: compute.InstanceTemplateDiskArray{\n\t\t\t\t\u0026compute.InstanceTemplateDiskArgs{\n\t\t\t\t\tSourceImage: *pulumi.String(myImage.SelfLink),\n\t\t\t\t\tAutoDelete: pulumi.Bool(true),\n\t\t\t\t\tBoot: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.InstanceTemplateNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceTemplateNetworkInterfaceArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tServiceAccount: \u0026compute.InstanceTemplateServiceAccountArgs{\n\t\t\t\tScopes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"userinfo-email\"),\n\t\t\t\t\tpulumi.String(\"compute-ro\"),\n\t\t\t\t\tpulumi.String(\"storage-ro\"),\n\t\t\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.NewInstanceGroupManager(ctx, \"igm-no-tp\", \u0026compute.InstanceGroupManagerArgs{\n\t\t\tDescription: pulumi.String(\"Test instance group manager\"),\n\t\t\tVersions: compute.InstanceGroupManagerVersionArray{\n\t\t\t\t\u0026compute.InstanceGroupManagerVersionArgs{\n\t\t\t\t\tName: pulumi.String(\"prod\"),\n\t\t\t\t\tInstanceTemplate: igm_basic.SelfLink,\n\t\t\t\t},\n\t\t\t},\n\t\t\tBaseInstanceName: pulumi.String(\"igm-no-tp\"),\n\t\t\tZone: pulumi.String(\"us-central1-c\"),\n\t\t\tTargetSize: pulumi.Int(2),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewDisk(ctx, \"default\", \u0026compute.DiskArgs{\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.Any(google_compute_instance_group_manager.Igm.Zone),\n\t\t\tImage: pulumi.String(\"debian-11-bullseye-v20220719\"),\n\t\t\tPhysicalBlockSizeBytes: pulumi.Int(4096),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewPerInstanceConfig(ctx, \"withDisk\", \u0026compute.PerInstanceConfigArgs{\n\t\t\tZone: pulumi.Any(google_compute_instance_group_manager.Igm.Zone),\n\t\t\tInstanceGroupManager: pulumi.Any(google_compute_instance_group_manager.Igm.Name),\n\t\t\tPreservedState: \u0026compute.PerInstanceConfigPreservedStateArgs{\n\t\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t\t\t\"instance_template\": igm_basic.SelfLink,\n\t\t\t\t},\n\t\t\t\tDisks: compute.PerInstanceConfigPreservedStateDiskArray{\n\t\t\t\t\t\u0026compute.PerInstanceConfigPreservedStateDiskArgs{\n\t\t\t\t\t\tDeviceName: pulumi.String(\"my-stateful-disk\"),\n\t\t\t\t\t\tSource: _default.ID(),\n\t\t\t\t\t\tMode: pulumi.String(\"READ_ONLY\"),\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.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateServiceAccountArgs;\nimport com.pulumi.gcp.compute.InstanceGroupManager;\nimport com.pulumi.gcp.compute.InstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.PerInstanceConfig;\nimport com.pulumi.gcp.compute.PerInstanceConfigArgs;\nimport com.pulumi.gcp.compute.inputs.PerInstanceConfigPreservedStateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 myImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var igm_basic = new InstanceTemplate(\"igm-basic\", InstanceTemplateArgs.builder() \n .machineType(\"e2-medium\")\n .canIpForward(false)\n .tags( \n \"foo\",\n \"bar\")\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(myImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .autoDelete(true)\n .boot(true)\n .build())\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .serviceAccount(InstanceTemplateServiceAccountArgs.builder()\n .scopes( \n \"userinfo-email\",\n \"compute-ro\",\n \"storage-ro\")\n .build())\n .build());\n\n var igm_no_tp = new InstanceGroupManager(\"igm-no-tp\", InstanceGroupManagerArgs.builder() \n .description(\"Test instance group manager\")\n .versions(InstanceGroupManagerVersionArgs.builder()\n .name(\"prod\")\n .instanceTemplate(igm_basic.selfLink())\n .build())\n .baseInstanceName(\"igm-no-tp\")\n .zone(\"us-central1-c\")\n .targetSize(2)\n .build());\n\n var default_ = new Disk(\"default\", DiskArgs.builder() \n .type(\"pd-ssd\")\n .zone(google_compute_instance_group_manager.igm().zone())\n .image(\"debian-11-bullseye-v20220719\")\n .physicalBlockSizeBytes(4096)\n .build());\n\n var withDisk = new PerInstanceConfig(\"withDisk\", PerInstanceConfigArgs.builder() \n .zone(google_compute_instance_group_manager.igm().zone())\n .instanceGroupManager(google_compute_instance_group_manager.igm().name())\n .preservedState(PerInstanceConfigPreservedStateArgs.builder()\n .metadata(Map.ofEntries(\n Map.entry(\"foo\", \"bar\"),\n Map.entry(\"instance_template\", igm_basic.selfLink())\n ))\n .disks(PerInstanceConfigPreservedStateDiskArgs.builder()\n .deviceName(\"my-stateful-disk\")\n .source(default_.id())\n .mode(\"READ_ONLY\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n igm-basic:\n type: gcp:compute:InstanceTemplate\n properties:\n machineType: e2-medium\n canIpForward: false\n tags:\n - foo\n - bar\n disks:\n - sourceImage: ${myImage.selfLink}\n autoDelete: true\n boot: true\n networkInterfaces:\n - network: default\n serviceAccount:\n scopes:\n - userinfo-email\n - compute-ro\n - storage-ro\n igm-no-tp:\n type: gcp:compute:InstanceGroupManager\n properties:\n description: Test instance group manager\n versions:\n - name: prod\n instanceTemplate: ${[\"igm-basic\"].selfLink}\n baseInstanceName: igm-no-tp\n zone: us-central1-c\n targetSize: 2\n default:\n type: gcp:compute:Disk\n properties:\n type: pd-ssd\n zone: ${google_compute_instance_group_manager.igm.zone}\n image: debian-11-bullseye-v20220719\n physicalBlockSizeBytes: 4096\n withDisk:\n type: gcp:compute:PerInstanceConfig\n properties:\n zone: ${google_compute_instance_group_manager.igm.zone}\n instanceGroupManager: ${google_compute_instance_group_manager.igm.name}\n preservedState:\n metadata:\n foo: bar\n instance_template: ${[\"igm-basic\"].selfLink}\n disks:\n - deviceName: my-stateful-disk\n source: ${default.id}\n mode: READ_ONLY\nvariables:\n myImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPerInstanceConfig can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/perInstanceConfig:PerInstanceConfig default projects/{{project}}/zones/{{zone}}/instanceGroupManagers/{{instance_group_manager}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/perInstanceConfig:PerInstanceConfig default {{project}}/{{zone}}/{{instance_group_manager}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/perInstanceConfig:PerInstanceConfig default {{zone}}/{{instance_group_manager}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/perInstanceConfig:PerInstanceConfig default {{instance_group_manager}}/{{name}}\n```\n\n ", + "description": "A config defined for a single managed instance that belongs to an instance group manager. It preserves the instance name\nacross instance group manager operations and can define stateful disks or metadata that are unique to the instance.\n\n\nTo get more information about PerInstanceConfig, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/instanceGroupManagers)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs)\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nPerInstanceConfig can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/perInstanceConfig:PerInstanceConfig default projects/{{project}}/zones/{{zone}}/instanceGroupManagers/{{instance_group_manager}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/perInstanceConfig:PerInstanceConfig default {{project}}/{{zone}}/{{instance_group_manager}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/perInstanceConfig:PerInstanceConfig default {{zone}}/{{instance_group_manager}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/perInstanceConfig:PerInstanceConfig default {{instance_group_manager}}/{{name}}\n```\n\n ", "properties": { "instanceGroupManager": { "type": "string", @@ -138008,7 +139456,7 @@ } }, "gcp:compute/projectMetadataItem:ProjectMetadataItem": { - "description": "Manages a single key/value pair on metadata common to all instances for\na project in GCE. Using `gcp.compute.ProjectMetadataItem` lets you\nmanage a single key/value setting in the provider rather than the entire\nproject metadata map.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.ProjectMetadataItem(\"default\", {\n key: \"my_metadata\",\n value: \"my_value\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.ProjectMetadataItem(\"default\",\n key=\"my_metadata\",\n value=\"my_value\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.ProjectMetadataItem(\"default\", new()\n {\n Key = \"my_metadata\",\n Value = \"my_value\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewProjectMetadataItem(ctx, \"default\", \u0026compute.ProjectMetadataItemArgs{\n\t\t\tKey: pulumi.String(\"my_metadata\"),\n\t\t\tValue: pulumi.String(\"my_value\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.ProjectMetadataItem;\nimport com.pulumi.gcp.compute.ProjectMetadataItemArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ProjectMetadataItem(\"default\", ProjectMetadataItemArgs.builder() \n .key(\"my_metadata\")\n .value(\"my_value\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:ProjectMetadataItem\n properties:\n key: my_metadata\n value: my_value\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nProject metadata items can be imported using the `key`, e.g.\n\n```sh\n $ pulumi import gcp:compute/projectMetadataItem:ProjectMetadataItem default my_metadata\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.ProjectMetadataItem(\"default\", {\n key: \"my_metadata\",\n value: \"my_value\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.ProjectMetadataItem(\"default\",\n key=\"my_metadata\",\n value=\"my_value\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.ProjectMetadataItem(\"default\", new()\n {\n Key = \"my_metadata\",\n Value = \"my_value\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewProjectMetadataItem(ctx, \"default\", \u0026compute.ProjectMetadataItemArgs{\n\t\t\tKey: pulumi.String(\"my_metadata\"),\n\t\t\tValue: pulumi.String(\"my_value\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.ProjectMetadataItem;\nimport com.pulumi.gcp.compute.ProjectMetadataItemArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ProjectMetadataItem(\"default\", ProjectMetadataItemArgs.builder() \n .key(\"my_metadata\")\n .value(\"my_value\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:ProjectMetadataItem\n properties:\n key: my_metadata\n value: my_value\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nProject metadata items can be imported using the `key`, e.g.\n\n```sh\n $ pulumi import gcp:compute/projectMetadataItem:ProjectMetadataItem default my_metadata\n```\n\n ", "properties": { "key": { "type": "string", @@ -138217,7 +139665,7 @@ }, "connectionTrackingPolicy": { "$ref": "#/types/gcp:compute/RegionBackendServiceConnectionTrackingPolicy:RegionBackendServiceConnectionTrackingPolicy", - "description": "Connection Tracking configuration for this BackendService.\nThis is available only for Layer 4 Internal Load Balancing and\nNetwork Load Balancing.\nStructure is documented below.\n" + "description": "Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing\nand Network Load Balancing.\n" }, "consistentHash": { "$ref": "#/types/gcp:compute/RegionBackendServiceConsistentHash:RegionBackendServiceConsistentHash", @@ -138348,7 +139796,7 @@ }, "connectionTrackingPolicy": { "$ref": "#/types/gcp:compute/RegionBackendServiceConnectionTrackingPolicy:RegionBackendServiceConnectionTrackingPolicy", - "description": "Connection Tracking configuration for this BackendService.\nThis is available only for Layer 4 Internal Load Balancing and\nNetwork Load Balancing.\nStructure is documented below.\n" + "description": "Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing\nand Network Load Balancing.\n" }, "consistentHash": { "$ref": "#/types/gcp:compute/RegionBackendServiceConsistentHash:RegionBackendServiceConsistentHash", @@ -138458,7 +139906,7 @@ }, "connectionTrackingPolicy": { "$ref": "#/types/gcp:compute/RegionBackendServiceConnectionTrackingPolicy:RegionBackendServiceConnectionTrackingPolicy", - "description": "Connection Tracking configuration for this BackendService.\nThis is available only for Layer 4 Internal Load Balancing and\nNetwork Load Balancing.\nStructure is documented below.\n" + "description": "Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing\nand Network Load Balancing.\n" }, "consistentHash": { "$ref": "#/types/gcp:compute/RegionBackendServiceConsistentHash:RegionBackendServiceConsistentHash", @@ -138876,7 +140324,7 @@ } }, "gcp:compute/regionDisk:RegionDisk": { - "description": "Persistent disks are durable storage devices that function similarly to\nthe physical disks in a desktop or a server. Compute Engine manages the\nhardware behind these devices to ensure data redundancy and optimize\nperformance for you. Persistent disks are available as either standard\nhard disk drives (HDD) or solid-state drives (SSD).\n\nPersistent disks are located independently from your virtual machine\ninstances, so you can detach or move persistent disks to keep your data\neven after you delete your instances. Persistent disk performance scales\nautomatically with size, so you can resize your existing persistent disks\nor add more persistent disks to an instance to meet your performance and\nstorage space requirements.\n\nAdd a persistent disk to your instance when you need reliable and\naffordable storage with consistent performance characteristics.\n\n\nTo get more information about RegionDisk, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionDisks)\n* How-to Guides\n * [Adding or Resizing Regional Persistent Disks](https://cloud.google.com/compute/docs/disks/regional-persistent-disk)\n\n\u003e **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw\nstate as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Disk Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst disk = new gcp.compute.Disk(\"disk\", {\n image: \"debian-cloud/debian-11\",\n size: 50,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst snapdisk = new gcp.compute.Snapshot(\"snapdisk\", {\n sourceDisk: disk.name,\n zone: \"us-central1-a\",\n});\nconst regiondisk = new gcp.compute.RegionDisk(\"regiondisk\", {\n snapshot: snapdisk.id,\n type: \"pd-ssd\",\n region: \"us-central1\",\n physicalBlockSizeBytes: 4096,\n replicaZones: [\n \"us-central1-a\",\n \"us-central1-f\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndisk = gcp.compute.Disk(\"disk\",\n image=\"debian-cloud/debian-11\",\n size=50,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nsnapdisk = gcp.compute.Snapshot(\"snapdisk\",\n source_disk=disk.name,\n zone=\"us-central1-a\")\nregiondisk = gcp.compute.RegionDisk(\"regiondisk\",\n snapshot=snapdisk.id,\n type=\"pd-ssd\",\n region=\"us-central1\",\n physical_block_size_bytes=4096,\n replica_zones=[\n \"us-central1-a\",\n \"us-central1-f\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var disk = new Gcp.Compute.Disk(\"disk\", new()\n {\n Image = \"debian-cloud/debian-11\",\n Size = 50,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var snapdisk = new Gcp.Compute.Snapshot(\"snapdisk\", new()\n {\n SourceDisk = disk.Name,\n Zone = \"us-central1-a\",\n });\n\n var regiondisk = new Gcp.Compute.RegionDisk(\"regiondisk\", new()\n {\n Snapshot = snapdisk.Id,\n Type = \"pd-ssd\",\n Region = \"us-central1\",\n PhysicalBlockSizeBytes = 4096,\n ReplicaZones = new[]\n {\n \"us-central1-a\",\n \"us-central1-f\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdisk, err := compute.NewDisk(ctx, \"disk\", \u0026compute.DiskArgs{\n\t\t\tImage: pulumi.String(\"debian-cloud/debian-11\"),\n\t\t\tSize: pulumi.Int(50),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsnapdisk, err := compute.NewSnapshot(ctx, \"snapdisk\", \u0026compute.SnapshotArgs{\n\t\t\tSourceDisk: disk.Name,\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionDisk(ctx, \"regiondisk\", \u0026compute.RegionDiskArgs{\n\t\t\tSnapshot: snapdisk.ID(),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPhysicalBlockSizeBytes: pulumi.Int(4096),\n\t\t\tReplicaZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-central1-a\"),\n\t\t\t\tpulumi.String(\"us-central1-f\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.Snapshot;\nimport com.pulumi.gcp.compute.SnapshotArgs;\nimport com.pulumi.gcp.compute.RegionDisk;\nimport com.pulumi.gcp.compute.RegionDiskArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var disk = new Disk(\"disk\", DiskArgs.builder() \n .image(\"debian-cloud/debian-11\")\n .size(50)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var snapdisk = new Snapshot(\"snapdisk\", SnapshotArgs.builder() \n .sourceDisk(disk.name())\n .zone(\"us-central1-a\")\n .build());\n\n var regiondisk = new RegionDisk(\"regiondisk\", RegionDiskArgs.builder() \n .snapshot(snapdisk.id())\n .type(\"pd-ssd\")\n .region(\"us-central1\")\n .physicalBlockSizeBytes(4096)\n .replicaZones( \n \"us-central1-a\",\n \"us-central1-f\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regiondisk:\n type: gcp:compute:RegionDisk\n properties:\n snapshot: ${snapdisk.id}\n type: pd-ssd\n region: us-central1\n physicalBlockSizeBytes: 4096\n replicaZones:\n - us-central1-a\n - us-central1-f\n disk:\n type: gcp:compute:Disk\n properties:\n image: debian-cloud/debian-11\n size: 50\n type: pd-ssd\n zone: us-central1-a\n snapdisk:\n type: gcp:compute:Snapshot\n properties:\n sourceDisk: ${disk.name}\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionDisk can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionDisk:RegionDisk default projects/{{project}}/regions/{{region}}/disks/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionDisk:RegionDisk default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionDisk:RegionDisk default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionDisk:RegionDisk default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Disk Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst disk = new gcp.compute.Disk(\"disk\", {\n image: \"debian-cloud/debian-11\",\n size: 50,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst snapdisk = new gcp.compute.Snapshot(\"snapdisk\", {\n sourceDisk: disk.name,\n zone: \"us-central1-a\",\n});\nconst regiondisk = new gcp.compute.RegionDisk(\"regiondisk\", {\n snapshot: snapdisk.id,\n type: \"pd-ssd\",\n region: \"us-central1\",\n physicalBlockSizeBytes: 4096,\n replicaZones: [\n \"us-central1-a\",\n \"us-central1-f\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndisk = gcp.compute.Disk(\"disk\",\n image=\"debian-cloud/debian-11\",\n size=50,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nsnapdisk = gcp.compute.Snapshot(\"snapdisk\",\n source_disk=disk.name,\n zone=\"us-central1-a\")\nregiondisk = gcp.compute.RegionDisk(\"regiondisk\",\n snapshot=snapdisk.id,\n type=\"pd-ssd\",\n region=\"us-central1\",\n physical_block_size_bytes=4096,\n replica_zones=[\n \"us-central1-a\",\n \"us-central1-f\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var disk = new Gcp.Compute.Disk(\"disk\", new()\n {\n Image = \"debian-cloud/debian-11\",\n Size = 50,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var snapdisk = new Gcp.Compute.Snapshot(\"snapdisk\", new()\n {\n SourceDisk = disk.Name,\n Zone = \"us-central1-a\",\n });\n\n var regiondisk = new Gcp.Compute.RegionDisk(\"regiondisk\", new()\n {\n Snapshot = snapdisk.Id,\n Type = \"pd-ssd\",\n Region = \"us-central1\",\n PhysicalBlockSizeBytes = 4096,\n ReplicaZones = new[]\n {\n \"us-central1-a\",\n \"us-central1-f\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdisk, err := compute.NewDisk(ctx, \"disk\", \u0026compute.DiskArgs{\n\t\t\tImage: pulumi.String(\"debian-cloud/debian-11\"),\n\t\t\tSize: pulumi.Int(50),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsnapdisk, err := compute.NewSnapshot(ctx, \"snapdisk\", \u0026compute.SnapshotArgs{\n\t\t\tSourceDisk: disk.Name,\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionDisk(ctx, \"regiondisk\", \u0026compute.RegionDiskArgs{\n\t\t\tSnapshot: snapdisk.ID(),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPhysicalBlockSizeBytes: pulumi.Int(4096),\n\t\t\tReplicaZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-central1-a\"),\n\t\t\t\tpulumi.String(\"us-central1-f\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.Snapshot;\nimport com.pulumi.gcp.compute.SnapshotArgs;\nimport com.pulumi.gcp.compute.RegionDisk;\nimport com.pulumi.gcp.compute.RegionDiskArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var disk = new Disk(\"disk\", DiskArgs.builder() \n .image(\"debian-cloud/debian-11\")\n .size(50)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var snapdisk = new Snapshot(\"snapdisk\", SnapshotArgs.builder() \n .sourceDisk(disk.name())\n .zone(\"us-central1-a\")\n .build());\n\n var regiondisk = new RegionDisk(\"regiondisk\", RegionDiskArgs.builder() \n .snapshot(snapdisk.id())\n .type(\"pd-ssd\")\n .region(\"us-central1\")\n .physicalBlockSizeBytes(4096)\n .replicaZones( \n \"us-central1-a\",\n \"us-central1-f\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regiondisk:\n type: gcp:compute:RegionDisk\n properties:\n snapshot: ${snapdisk.id}\n type: pd-ssd\n region: us-central1\n physicalBlockSizeBytes: 4096\n replicaZones:\n - us-central1-a\n - us-central1-f\n disk:\n type: gcp:compute:Disk\n properties:\n image: debian-cloud/debian-11\n size: 50\n type: pd-ssd\n zone: us-central1-a\n snapdisk:\n type: gcp:compute:Snapshot\n properties:\n sourceDisk: ${disk.name}\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionDisk can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionDisk:RegionDisk default projects/{{project}}/regions/{{region}}/disks/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionDisk:RegionDisk default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionDisk:RegionDisk default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionDisk:RegionDisk default {{name}}\n```\n\n ", "properties": { "creationTimestamp": { "type": "string", @@ -139496,7 +140944,7 @@ } }, "gcp:compute/regionDiskResourcePolicyAttachment:RegionDiskResourcePolicyAttachment": { - "description": "Adds existing resource policies to a disk. You can only add one policy\nwhich will be applied to this disk for scheduling snapshot creation.\n\n\u003e **Note:** This resource does not support zonal disks (`gcp.compute.Disk`). For zonal disks, please refer to the `gcp.compute.DiskResourcePolicyAttachment` resource.\n\n\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Disk Resource Policy Attachment Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst disk = new gcp.compute.Disk(\"disk\", {\n image: \"debian-cloud/debian-11\",\n size: 50,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst snapdisk = new gcp.compute.Snapshot(\"snapdisk\", {\n sourceDisk: disk.name,\n zone: \"us-central1-a\",\n});\nconst ssd = new gcp.compute.RegionDisk(\"ssd\", {\n replicaZones: [\n \"us-central1-a\",\n \"us-central1-f\",\n ],\n snapshot: snapdisk.id,\n size: 50,\n type: \"pd-ssd\",\n region: \"us-central1\",\n});\nconst attachment = new gcp.compute.RegionDiskResourcePolicyAttachment(\"attachment\", {\n disk: ssd.name,\n region: \"us-central1\",\n});\nconst policy = new gcp.compute.ResourcePolicy(\"policy\", {\n region: \"us-central1\",\n snapshotSchedulePolicy: {\n schedule: {\n dailySchedule: {\n daysInCycle: 1,\n startTime: \"04:00\",\n },\n },\n },\n});\nconst myImage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndisk = gcp.compute.Disk(\"disk\",\n image=\"debian-cloud/debian-11\",\n size=50,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nsnapdisk = gcp.compute.Snapshot(\"snapdisk\",\n source_disk=disk.name,\n zone=\"us-central1-a\")\nssd = gcp.compute.RegionDisk(\"ssd\",\n replica_zones=[\n \"us-central1-a\",\n \"us-central1-f\",\n ],\n snapshot=snapdisk.id,\n size=50,\n type=\"pd-ssd\",\n region=\"us-central1\")\nattachment = gcp.compute.RegionDiskResourcePolicyAttachment(\"attachment\",\n disk=ssd.name,\n region=\"us-central1\")\npolicy = gcp.compute.ResourcePolicy(\"policy\",\n region=\"us-central1\",\n snapshot_schedule_policy=gcp.compute.ResourcePolicySnapshotSchedulePolicyArgs(\n schedule=gcp.compute.ResourcePolicySnapshotSchedulePolicyScheduleArgs(\n daily_schedule=gcp.compute.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs(\n days_in_cycle=1,\n start_time=\"04:00\",\n ),\n ),\n ))\nmy_image = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var disk = new Gcp.Compute.Disk(\"disk\", new()\n {\n Image = \"debian-cloud/debian-11\",\n Size = 50,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var snapdisk = new Gcp.Compute.Snapshot(\"snapdisk\", new()\n {\n SourceDisk = disk.Name,\n Zone = \"us-central1-a\",\n });\n\n var ssd = new Gcp.Compute.RegionDisk(\"ssd\", new()\n {\n ReplicaZones = new[]\n {\n \"us-central1-a\",\n \"us-central1-f\",\n },\n Snapshot = snapdisk.Id,\n Size = 50,\n Type = \"pd-ssd\",\n Region = \"us-central1\",\n });\n\n var attachment = new Gcp.Compute.RegionDiskResourcePolicyAttachment(\"attachment\", new()\n {\n Disk = ssd.Name,\n Region = \"us-central1\",\n });\n\n var policy = new Gcp.Compute.ResourcePolicy(\"policy\", new()\n {\n Region = \"us-central1\",\n SnapshotSchedulePolicy = new Gcp.Compute.Inputs.ResourcePolicySnapshotSchedulePolicyArgs\n {\n Schedule = new Gcp.Compute.Inputs.ResourcePolicySnapshotSchedulePolicyScheduleArgs\n {\n DailySchedule = new Gcp.Compute.Inputs.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs\n {\n DaysInCycle = 1,\n StartTime = \"04:00\",\n },\n },\n },\n });\n\n var myImage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdisk, err := compute.NewDisk(ctx, \"disk\", \u0026compute.DiskArgs{\n\t\t\tImage: pulumi.String(\"debian-cloud/debian-11\"),\n\t\t\tSize: pulumi.Int(50),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsnapdisk, err := compute.NewSnapshot(ctx, \"snapdisk\", \u0026compute.SnapshotArgs{\n\t\t\tSourceDisk: disk.Name,\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tssd, err := compute.NewRegionDisk(ctx, \"ssd\", \u0026compute.RegionDiskArgs{\n\t\t\tReplicaZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-central1-a\"),\n\t\t\t\tpulumi.String(\"us-central1-f\"),\n\t\t\t},\n\t\t\tSnapshot: snapdisk.ID(),\n\t\t\tSize: pulumi.Int(50),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\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 = compute.NewRegionDiskResourcePolicyAttachment(ctx, \"attachment\", \u0026compute.RegionDiskResourcePolicyAttachmentArgs{\n\t\t\tDisk: ssd.Name,\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 = compute.NewResourcePolicy(ctx, \"policy\", \u0026compute.ResourcePolicyArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tSnapshotSchedulePolicy: \u0026compute.ResourcePolicySnapshotSchedulePolicyArgs{\n\t\t\t\tSchedule: \u0026compute.ResourcePolicySnapshotSchedulePolicyScheduleArgs{\n\t\t\t\t\tDailySchedule: \u0026compute.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs{\n\t\t\t\t\t\tDaysInCycle: pulumi.Int(1),\n\t\t\t\t\t\tStartTime: pulumi.String(\"04:00\"),\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 = 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\treturn nil\n\t})\n}\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.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.Snapshot;\nimport com.pulumi.gcp.compute.SnapshotArgs;\nimport com.pulumi.gcp.compute.RegionDisk;\nimport com.pulumi.gcp.compute.RegionDiskArgs;\nimport com.pulumi.gcp.compute.RegionDiskResourcePolicyAttachment;\nimport com.pulumi.gcp.compute.RegionDiskResourcePolicyAttachmentArgs;\nimport com.pulumi.gcp.compute.ResourcePolicy;\nimport com.pulumi.gcp.compute.ResourcePolicyArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyScheduleArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var disk = new Disk(\"disk\", DiskArgs.builder() \n .image(\"debian-cloud/debian-11\")\n .size(50)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var snapdisk = new Snapshot(\"snapdisk\", SnapshotArgs.builder() \n .sourceDisk(disk.name())\n .zone(\"us-central1-a\")\n .build());\n\n var ssd = new RegionDisk(\"ssd\", RegionDiskArgs.builder() \n .replicaZones( \n \"us-central1-a\",\n \"us-central1-f\")\n .snapshot(snapdisk.id())\n .size(50)\n .type(\"pd-ssd\")\n .region(\"us-central1\")\n .build());\n\n var attachment = new RegionDiskResourcePolicyAttachment(\"attachment\", RegionDiskResourcePolicyAttachmentArgs.builder() \n .disk(ssd.name())\n .region(\"us-central1\")\n .build());\n\n var policy = new ResourcePolicy(\"policy\", ResourcePolicyArgs.builder() \n .region(\"us-central1\")\n .snapshotSchedulePolicy(ResourcePolicySnapshotSchedulePolicyArgs.builder()\n .schedule(ResourcePolicySnapshotSchedulePolicyScheduleArgs.builder()\n .dailySchedule(ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs.builder()\n .daysInCycle(1)\n .startTime(\"04:00\")\n .build())\n .build())\n .build())\n .build());\n\n final var myImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n attachment:\n type: gcp:compute:RegionDiskResourcePolicyAttachment\n properties:\n disk: ${ssd.name}\n region: us-central1\n disk:\n type: gcp:compute:Disk\n properties:\n image: debian-cloud/debian-11\n size: 50\n type: pd-ssd\n zone: us-central1-a\n snapdisk:\n type: gcp:compute:Snapshot\n properties:\n sourceDisk: ${disk.name}\n zone: us-central1-a\n ssd:\n type: gcp:compute:RegionDisk\n properties:\n replicaZones:\n - us-central1-a\n - us-central1-f\n snapshot: ${snapdisk.id}\n size: 50\n type: pd-ssd\n region: us-central1\n policy:\n type: gcp:compute:ResourcePolicy\n properties:\n region: us-central1\n snapshotSchedulePolicy:\n schedule:\n dailySchedule:\n daysInCycle: 1\n startTime: 04:00\nvariables:\n myImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionDiskResourcePolicyAttachment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionDiskResourcePolicyAttachment:RegionDiskResourcePolicyAttachment default projects/{{project}}/regions/{{region}}/disks/{{disk}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionDiskResourcePolicyAttachment:RegionDiskResourcePolicyAttachment default {{project}}/{{region}}/{{disk}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionDiskResourcePolicyAttachment:RegionDiskResourcePolicyAttachment default {{region}}/{{disk}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionDiskResourcePolicyAttachment:RegionDiskResourcePolicyAttachment default {{disk}}/{{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Disk Resource Policy Attachment Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst disk = new gcp.compute.Disk(\"disk\", {\n image: \"debian-cloud/debian-11\",\n size: 50,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst snapdisk = new gcp.compute.Snapshot(\"snapdisk\", {\n sourceDisk: disk.name,\n zone: \"us-central1-a\",\n});\nconst ssd = new gcp.compute.RegionDisk(\"ssd\", {\n replicaZones: [\n \"us-central1-a\",\n \"us-central1-f\",\n ],\n snapshot: snapdisk.id,\n size: 50,\n type: \"pd-ssd\",\n region: \"us-central1\",\n});\nconst attachment = new gcp.compute.RegionDiskResourcePolicyAttachment(\"attachment\", {\n disk: ssd.name,\n region: \"us-central1\",\n});\nconst policy = new gcp.compute.ResourcePolicy(\"policy\", {\n region: \"us-central1\",\n snapshotSchedulePolicy: {\n schedule: {\n dailySchedule: {\n daysInCycle: 1,\n startTime: \"04:00\",\n },\n },\n },\n});\nconst myImage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndisk = gcp.compute.Disk(\"disk\",\n image=\"debian-cloud/debian-11\",\n size=50,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nsnapdisk = gcp.compute.Snapshot(\"snapdisk\",\n source_disk=disk.name,\n zone=\"us-central1-a\")\nssd = gcp.compute.RegionDisk(\"ssd\",\n replica_zones=[\n \"us-central1-a\",\n \"us-central1-f\",\n ],\n snapshot=snapdisk.id,\n size=50,\n type=\"pd-ssd\",\n region=\"us-central1\")\nattachment = gcp.compute.RegionDiskResourcePolicyAttachment(\"attachment\",\n disk=ssd.name,\n region=\"us-central1\")\npolicy = gcp.compute.ResourcePolicy(\"policy\",\n region=\"us-central1\",\n snapshot_schedule_policy=gcp.compute.ResourcePolicySnapshotSchedulePolicyArgs(\n schedule=gcp.compute.ResourcePolicySnapshotSchedulePolicyScheduleArgs(\n daily_schedule=gcp.compute.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs(\n days_in_cycle=1,\n start_time=\"04:00\",\n ),\n ),\n ))\nmy_image = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var disk = new Gcp.Compute.Disk(\"disk\", new()\n {\n Image = \"debian-cloud/debian-11\",\n Size = 50,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var snapdisk = new Gcp.Compute.Snapshot(\"snapdisk\", new()\n {\n SourceDisk = disk.Name,\n Zone = \"us-central1-a\",\n });\n\n var ssd = new Gcp.Compute.RegionDisk(\"ssd\", new()\n {\n ReplicaZones = new[]\n {\n \"us-central1-a\",\n \"us-central1-f\",\n },\n Snapshot = snapdisk.Id,\n Size = 50,\n Type = \"pd-ssd\",\n Region = \"us-central1\",\n });\n\n var attachment = new Gcp.Compute.RegionDiskResourcePolicyAttachment(\"attachment\", new()\n {\n Disk = ssd.Name,\n Region = \"us-central1\",\n });\n\n var policy = new Gcp.Compute.ResourcePolicy(\"policy\", new()\n {\n Region = \"us-central1\",\n SnapshotSchedulePolicy = new Gcp.Compute.Inputs.ResourcePolicySnapshotSchedulePolicyArgs\n {\n Schedule = new Gcp.Compute.Inputs.ResourcePolicySnapshotSchedulePolicyScheduleArgs\n {\n DailySchedule = new Gcp.Compute.Inputs.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs\n {\n DaysInCycle = 1,\n StartTime = \"04:00\",\n },\n },\n },\n });\n\n var myImage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdisk, err := compute.NewDisk(ctx, \"disk\", \u0026compute.DiskArgs{\n\t\t\tImage: pulumi.String(\"debian-cloud/debian-11\"),\n\t\t\tSize: pulumi.Int(50),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsnapdisk, err := compute.NewSnapshot(ctx, \"snapdisk\", \u0026compute.SnapshotArgs{\n\t\t\tSourceDisk: disk.Name,\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tssd, err := compute.NewRegionDisk(ctx, \"ssd\", \u0026compute.RegionDiskArgs{\n\t\t\tReplicaZones: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-central1-a\"),\n\t\t\t\tpulumi.String(\"us-central1-f\"),\n\t\t\t},\n\t\t\tSnapshot: snapdisk.ID(),\n\t\t\tSize: pulumi.Int(50),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\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 = compute.NewRegionDiskResourcePolicyAttachment(ctx, \"attachment\", \u0026compute.RegionDiskResourcePolicyAttachmentArgs{\n\t\t\tDisk: ssd.Name,\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 = compute.NewResourcePolicy(ctx, \"policy\", \u0026compute.ResourcePolicyArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tSnapshotSchedulePolicy: \u0026compute.ResourcePolicySnapshotSchedulePolicyArgs{\n\t\t\t\tSchedule: \u0026compute.ResourcePolicySnapshotSchedulePolicyScheduleArgs{\n\t\t\t\t\tDailySchedule: \u0026compute.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs{\n\t\t\t\t\t\tDaysInCycle: pulumi.Int(1),\n\t\t\t\t\t\tStartTime: pulumi.String(\"04:00\"),\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 = 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\treturn nil\n\t})\n}\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.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.Snapshot;\nimport com.pulumi.gcp.compute.SnapshotArgs;\nimport com.pulumi.gcp.compute.RegionDisk;\nimport com.pulumi.gcp.compute.RegionDiskArgs;\nimport com.pulumi.gcp.compute.RegionDiskResourcePolicyAttachment;\nimport com.pulumi.gcp.compute.RegionDiskResourcePolicyAttachmentArgs;\nimport com.pulumi.gcp.compute.ResourcePolicy;\nimport com.pulumi.gcp.compute.ResourcePolicyArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyScheduleArgs;\nimport com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var disk = new Disk(\"disk\", DiskArgs.builder() \n .image(\"debian-cloud/debian-11\")\n .size(50)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var snapdisk = new Snapshot(\"snapdisk\", SnapshotArgs.builder() \n .sourceDisk(disk.name())\n .zone(\"us-central1-a\")\n .build());\n\n var ssd = new RegionDisk(\"ssd\", RegionDiskArgs.builder() \n .replicaZones( \n \"us-central1-a\",\n \"us-central1-f\")\n .snapshot(snapdisk.id())\n .size(50)\n .type(\"pd-ssd\")\n .region(\"us-central1\")\n .build());\n\n var attachment = new RegionDiskResourcePolicyAttachment(\"attachment\", RegionDiskResourcePolicyAttachmentArgs.builder() \n .disk(ssd.name())\n .region(\"us-central1\")\n .build());\n\n var policy = new ResourcePolicy(\"policy\", ResourcePolicyArgs.builder() \n .region(\"us-central1\")\n .snapshotSchedulePolicy(ResourcePolicySnapshotSchedulePolicyArgs.builder()\n .schedule(ResourcePolicySnapshotSchedulePolicyScheduleArgs.builder()\n .dailySchedule(ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs.builder()\n .daysInCycle(1)\n .startTime(\"04:00\")\n .build())\n .build())\n .build())\n .build());\n\n final var myImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n attachment:\n type: gcp:compute:RegionDiskResourcePolicyAttachment\n properties:\n disk: ${ssd.name}\n region: us-central1\n disk:\n type: gcp:compute:Disk\n properties:\n image: debian-cloud/debian-11\n size: 50\n type: pd-ssd\n zone: us-central1-a\n snapdisk:\n type: gcp:compute:Snapshot\n properties:\n sourceDisk: ${disk.name}\n zone: us-central1-a\n ssd:\n type: gcp:compute:RegionDisk\n properties:\n replicaZones:\n - us-central1-a\n - us-central1-f\n snapshot: ${snapdisk.id}\n size: 50\n type: pd-ssd\n region: us-central1\n policy:\n type: gcp:compute:ResourcePolicy\n properties:\n region: us-central1\n snapshotSchedulePolicy:\n schedule:\n dailySchedule:\n daysInCycle: 1\n startTime: 04:00\nvariables:\n myImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionDiskResourcePolicyAttachment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionDiskResourcePolicyAttachment:RegionDiskResourcePolicyAttachment default projects/{{project}}/regions/{{region}}/disks/{{disk}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionDiskResourcePolicyAttachment:RegionDiskResourcePolicyAttachment default {{project}}/{{region}}/{{disk}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionDiskResourcePolicyAttachment:RegionDiskResourcePolicyAttachment default {{region}}/{{disk}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionDiskResourcePolicyAttachment:RegionDiskResourcePolicyAttachment default {{disk}}/{{name}}\n```\n\n ", "properties": { "disk": { "type": "string", @@ -139922,7 +141370,7 @@ }, "waitForInstances": { "type": "boolean", - "description": "Whether to wait for all instances to be created/updated before\nreturning. Note that if this is set to true and the operation does not succeed, the provider will\ncontinue trying until it times out.\n" + "description": "Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the\noperation does not succeed, Terraform will continue trying until it times out.\n" }, "waitForInstancesStatus": { "type": "string", @@ -140047,7 +141495,7 @@ }, "waitForInstances": { "type": "boolean", - "description": "Whether to wait for all instances to be created/updated before\nreturning. Note that if this is set to true and the operation does not succeed, the provider will\ncontinue trying until it times out.\n" + "description": "Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the\noperation does not succeed, Terraform will continue trying until it times out.\n" }, "waitForInstancesStatus": { "type": "string", @@ -140182,7 +141630,7 @@ }, "waitForInstances": { "type": "boolean", - "description": "Whether to wait for all instances to be created/updated before\nreturning. Note that if this is set to true and the operation does not succeed, the provider will\ncontinue trying until it times out.\n" + "description": "Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the\noperation does not succeed, Terraform will continue trying until it times out.\n" }, "waitForInstancesStatus": { "type": "string", @@ -140193,7 +141641,7 @@ } }, "gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup": { - "description": "A regional NEG that can support Serverless Products.\n\nTo get more information about RegionNetworkEndpointGroup, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/regionNetworkEndpointGroups)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/load-balancing/docs/negs/serverless-neg-concepts)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Network Endpoint Group Functions\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bucket = new gcp.storage.Bucket(\"bucket\", {location: \"US\"});\nconst archive = new gcp.storage.BucketObject(\"archive\", {\n bucket: bucket.name,\n source: new pulumi.asset.FileAsset(\"path/to/index.zip\"),\n});\nconst functionNegFunction = new gcp.cloudfunctions.Function(\"functionNegFunction\", {\n description: \"My function\",\n runtime: \"nodejs10\",\n availableMemoryMb: 128,\n sourceArchiveBucket: bucket.name,\n sourceArchiveObject: archive.name,\n triggerHttp: true,\n timeout: 60,\n entryPoint: \"helloGET\",\n});\n// Cloud Functions Example\nconst functionNegRegionNetworkEndpointGroup = new gcp.compute.RegionNetworkEndpointGroup(\"functionNegRegionNetworkEndpointGroup\", {\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n cloudFunction: {\n \"function\": functionNegFunction.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbucket = gcp.storage.Bucket(\"bucket\", location=\"US\")\narchive = gcp.storage.BucketObject(\"archive\",\n bucket=bucket.name,\n source=pulumi.FileAsset(\"path/to/index.zip\"))\nfunction_neg_function = gcp.cloudfunctions.Function(\"functionNegFunction\",\n description=\"My function\",\n runtime=\"nodejs10\",\n available_memory_mb=128,\n source_archive_bucket=bucket.name,\n source_archive_object=archive.name,\n trigger_http=True,\n timeout=60,\n entry_point=\"helloGET\")\n# Cloud Functions Example\nfunction_neg_region_network_endpoint_group = gcp.compute.RegionNetworkEndpointGroup(\"functionNegRegionNetworkEndpointGroup\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n cloud_function=gcp.compute.RegionNetworkEndpointGroupCloudFunctionArgs(\n function=function_neg_function.name,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Location = \"US\",\n });\n\n var archive = new Gcp.Storage.BucketObject(\"archive\", new()\n {\n Bucket = bucket.Name,\n Source = new FileAsset(\"path/to/index.zip\"),\n });\n\n var functionNegFunction = new Gcp.CloudFunctions.Function(\"functionNegFunction\", new()\n {\n Description = \"My function\",\n Runtime = \"nodejs10\",\n AvailableMemoryMb = 128,\n SourceArchiveBucket = bucket.Name,\n SourceArchiveObject = archive.Name,\n TriggerHttp = true,\n Timeout = 60,\n EntryPoint = \"helloGET\",\n });\n\n // Cloud Functions Example\n var functionNegRegionNetworkEndpointGroup = new Gcp.Compute.RegionNetworkEndpointGroup(\"functionNegRegionNetworkEndpointGroup\", new()\n {\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n CloudFunction = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupCloudFunctionArgs\n {\n Function = functionNegFunction.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudfunctions\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tarchive, err := storage.NewBucketObject(ctx, \"archive\", \u0026storage.BucketObjectArgs{\n\t\t\tBucket: bucket.Name,\n\t\t\tSource: pulumi.NewFileAsset(\"path/to/index.zip\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfunctionNegFunction, err := cloudfunctions.NewFunction(ctx, \"functionNegFunction\", \u0026cloudfunctions.FunctionArgs{\n\t\t\tDescription: pulumi.String(\"My function\"),\n\t\t\tRuntime: pulumi.String(\"nodejs10\"),\n\t\t\tAvailableMemoryMb: pulumi.Int(128),\n\t\t\tSourceArchiveBucket: bucket.Name,\n\t\t\tSourceArchiveObject: archive.Name,\n\t\t\tTriggerHttp: pulumi.Bool(true),\n\t\t\tTimeout: pulumi.Int(60),\n\t\t\tEntryPoint: pulumi.String(\"helloGET\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"functionNegRegionNetworkEndpointGroup\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tCloudFunction: \u0026compute.RegionNetworkEndpointGroupCloudFunctionArgs{\n\t\t\t\tFunction: functionNegFunction.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.cloudfunctions.Function;\nimport com.pulumi.gcp.cloudfunctions.FunctionArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupCloudFunctionArgs;\nimport com.pulumi.asset.FileAsset;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .location(\"US\")\n .build());\n\n var archive = new BucketObject(\"archive\", BucketObjectArgs.builder() \n .bucket(bucket.name())\n .source(new FileAsset(\"path/to/index.zip\"))\n .build());\n\n var functionNegFunction = new Function(\"functionNegFunction\", FunctionArgs.builder() \n .description(\"My function\")\n .runtime(\"nodejs10\")\n .availableMemoryMb(128)\n .sourceArchiveBucket(bucket.name())\n .sourceArchiveObject(archive.name())\n .triggerHttp(true)\n .timeout(60)\n .entryPoint(\"helloGET\")\n .build());\n\n var functionNegRegionNetworkEndpointGroup = new RegionNetworkEndpointGroup(\"functionNegRegionNetworkEndpointGroup\", RegionNetworkEndpointGroupArgs.builder() \n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .cloudFunction(RegionNetworkEndpointGroupCloudFunctionArgs.builder()\n .function(functionNegFunction.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Cloud Functions Example\n functionNegRegionNetworkEndpointGroup:\n type: gcp:compute:RegionNetworkEndpointGroup\n properties:\n networkEndpointType: SERVERLESS\n region: us-central1\n cloudFunction:\n function: ${functionNegFunction.name}\n functionNegFunction:\n type: gcp:cloudfunctions:Function\n properties:\n description: My function\n runtime: nodejs10\n availableMemoryMb: 128\n sourceArchiveBucket: ${bucket.name}\n sourceArchiveObject: ${archive.name}\n triggerHttp: true\n timeout: 60\n entryPoint: helloGET\n bucket:\n type: gcp:storage:Bucket\n properties:\n location: US\n archive:\n type: gcp:storage:BucketObject\n properties:\n bucket: ${bucket.name}\n source:\n fn::FileAsset: path/to/index.zip\n```\n{{% /example %}}\n{{% example %}}\n### Region Network Endpoint Group Cloudrun\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cloudrunNegService = new gcp.cloudrun.Service(\"cloudrunNegService\", {\n location: \"us-central1\",\n template: {\n spec: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n traffics: [{\n percent: 100,\n latestRevision: true,\n }],\n});\n// Cloud Run Example\nconst cloudrunNegRegionNetworkEndpointGroup = new gcp.compute.RegionNetworkEndpointGroup(\"cloudrunNegRegionNetworkEndpointGroup\", {\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n cloudRun: {\n service: cloudrunNegService.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncloudrun_neg_service = gcp.cloudrun.Service(\"cloudrunNegService\",\n location=\"us-central1\",\n template=gcp.cloudrun.ServiceTemplateArgs(\n spec=gcp.cloudrun.ServiceTemplateSpecArgs(\n containers=[gcp.cloudrun.ServiceTemplateSpecContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n ),\n ),\n traffics=[gcp.cloudrun.ServiceTrafficArgs(\n percent=100,\n latest_revision=True,\n )])\n# Cloud Run Example\ncloudrun_neg_region_network_endpoint_group = gcp.compute.RegionNetworkEndpointGroup(\"cloudrunNegRegionNetworkEndpointGroup\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n cloud_run=gcp.compute.RegionNetworkEndpointGroupCloudRunArgs(\n service=cloudrun_neg_service.name,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudrunNegService = new Gcp.CloudRun.Service(\"cloudrunNegService\", new()\n {\n Location = \"us-central1\",\n Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs\n {\n Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n },\n Traffics = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTrafficArgs\n {\n Percent = 100,\n LatestRevision = true,\n },\n },\n });\n\n // Cloud Run Example\n var cloudrunNegRegionNetworkEndpointGroup = new Gcp.Compute.RegionNetworkEndpointGroup(\"cloudrunNegRegionNetworkEndpointGroup\", new()\n {\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n CloudRun = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupCloudRunArgs\n {\n Service = cloudrunNegService.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrun\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcloudrunNegService, err := cloudrun.NewService(ctx, \"cloudrunNegService\", \u0026cloudrun.ServiceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrun.ServiceTemplateArgs{\n\t\t\t\tSpec: \u0026cloudrun.ServiceTemplateSpecArgs{\n\t\t\t\t\tContainers: cloudrun.ServiceTemplateSpecContainerArray{\n\t\t\t\t\t\t\u0026cloudrun.ServiceTemplateSpecContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTraffics: cloudrun.ServiceTrafficArray{\n\t\t\t\t\u0026cloudrun.ServiceTrafficArgs{\n\t\t\t\t\tPercent: pulumi.Int(100),\n\t\t\t\t\tLatestRevision: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"cloudrunNegRegionNetworkEndpointGroup\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tCloudRun: \u0026compute.RegionNetworkEndpointGroupCloudRunArgs{\n\t\t\t\tService: cloudrunNegService.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrun.Service;\nimport com.pulumi.gcp.cloudrun.ServiceArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTrafficArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupCloudRunArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudrunNegService = new Service(\"cloudrunNegService\", ServiceArgs.builder() \n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .spec(ServiceTemplateSpecArgs.builder()\n .containers(ServiceTemplateSpecContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build())\n .traffics(ServiceTrafficArgs.builder()\n .percent(100)\n .latestRevision(true)\n .build())\n .build());\n\n var cloudrunNegRegionNetworkEndpointGroup = new RegionNetworkEndpointGroup(\"cloudrunNegRegionNetworkEndpointGroup\", RegionNetworkEndpointGroupArgs.builder() \n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .cloudRun(RegionNetworkEndpointGroupCloudRunArgs.builder()\n .service(cloudrunNegService.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Cloud Run Example\n cloudrunNegRegionNetworkEndpointGroup:\n type: gcp:compute:RegionNetworkEndpointGroup\n properties:\n networkEndpointType: SERVERLESS\n region: us-central1\n cloudRun:\n service: ${cloudrunNegService.name}\n cloudrunNegService:\n type: gcp:cloudrun:Service\n properties:\n location: us-central1\n template:\n spec:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n traffics:\n - percent: 100\n latestRevision: true\n```\n{{% /example %}}\n{{% example %}}\n### Region Network Endpoint Group Appengine\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst appengineNegBucket = new gcp.storage.Bucket(\"appengineNegBucket\", {location: \"US\"});\nconst appengineNegBucketObject = new gcp.storage.BucketObject(\"appengineNegBucketObject\", {\n bucket: appengineNegBucket.name,\n source: new pulumi.asset.FileAsset(\"./test-fixtures/appengine/hello-world.zip\"),\n});\nconst appengineNegFlexibleAppVersion = new gcp.appengine.FlexibleAppVersion(\"appengineNegFlexibleAppVersion\", {\n versionId: \"v1\",\n service: \"appengine-network-endpoint-group\",\n runtime: \"nodejs\",\n entrypoint: {\n shell: \"node ./app.js\",\n },\n deployment: {\n zip: {\n sourceUrl: pulumi.interpolate`https://storage.googleapis.com/${appengineNegBucket.name}/${appengineNegBucketObject.name}`,\n },\n },\n livenessCheck: {\n path: \"/\",\n },\n readinessCheck: {\n path: \"/\",\n },\n envVariables: {\n port: \"8080\",\n },\n handlers: [{\n urlRegex: \".*\\\\/my-path\\\\/*\",\n securityLevel: \"SECURE_ALWAYS\",\n login: \"LOGIN_REQUIRED\",\n authFailAction: \"AUTH_FAIL_ACTION_REDIRECT\",\n staticFiles: {\n path: \"my-other-path\",\n uploadPathRegex: \".*\\\\/my-path\\\\/*\",\n },\n }],\n automaticScaling: {\n coolDownPeriod: \"120s\",\n cpuUtilization: {\n targetUtilization: 0.5,\n },\n },\n noopOnDestroy: true,\n});\n// App Engine Example\nconst appengineNegRegionNetworkEndpointGroup = new gcp.compute.RegionNetworkEndpointGroup(\"appengineNegRegionNetworkEndpointGroup\", {\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n appEngine: {\n service: appengineNegFlexibleAppVersion.service,\n version: appengineNegFlexibleAppVersion.versionId,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nappengine_neg_bucket = gcp.storage.Bucket(\"appengineNegBucket\", location=\"US\")\nappengine_neg_bucket_object = gcp.storage.BucketObject(\"appengineNegBucketObject\",\n bucket=appengine_neg_bucket.name,\n source=pulumi.FileAsset(\"./test-fixtures/appengine/hello-world.zip\"))\nappengine_neg_flexible_app_version = gcp.appengine.FlexibleAppVersion(\"appengineNegFlexibleAppVersion\",\n version_id=\"v1\",\n service=\"appengine-network-endpoint-group\",\n runtime=\"nodejs\",\n entrypoint=gcp.appengine.FlexibleAppVersionEntrypointArgs(\n shell=\"node ./app.js\",\n ),\n deployment=gcp.appengine.FlexibleAppVersionDeploymentArgs(\n zip=gcp.appengine.FlexibleAppVersionDeploymentZipArgs(\n source_url=pulumi.Output.all(appengine_neg_bucket.name, appengine_neg_bucket_object.name).apply(lambda appengineNegBucketName, appengineNegBucketObjectName: f\"https://storage.googleapis.com/{appengine_neg_bucket_name}/{appengine_neg_bucket_object_name}\"),\n ),\n ),\n liveness_check=gcp.appengine.FlexibleAppVersionLivenessCheckArgs(\n path=\"/\",\n ),\n readiness_check=gcp.appengine.FlexibleAppVersionReadinessCheckArgs(\n path=\"/\",\n ),\n env_variables={\n \"port\": \"8080\",\n },\n handlers=[gcp.appengine.FlexibleAppVersionHandlerArgs(\n url_regex=\".*\\\\/my-path\\\\/*\",\n security_level=\"SECURE_ALWAYS\",\n login=\"LOGIN_REQUIRED\",\n auth_fail_action=\"AUTH_FAIL_ACTION_REDIRECT\",\n static_files=gcp.appengine.FlexibleAppVersionHandlerStaticFilesArgs(\n path=\"my-other-path\",\n upload_path_regex=\".*\\\\/my-path\\\\/*\",\n ),\n )],\n automatic_scaling=gcp.appengine.FlexibleAppVersionAutomaticScalingArgs(\n cool_down_period=\"120s\",\n cpu_utilization=gcp.appengine.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs(\n target_utilization=0.5,\n ),\n ),\n noop_on_destroy=True)\n# App Engine Example\nappengine_neg_region_network_endpoint_group = gcp.compute.RegionNetworkEndpointGroup(\"appengineNegRegionNetworkEndpointGroup\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n app_engine=gcp.compute.RegionNetworkEndpointGroupAppEngineArgs(\n service=appengine_neg_flexible_app_version.service,\n version=appengine_neg_flexible_app_version.version_id,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var appengineNegBucket = new Gcp.Storage.Bucket(\"appengineNegBucket\", new()\n {\n Location = \"US\",\n });\n\n var appengineNegBucketObject = new Gcp.Storage.BucketObject(\"appengineNegBucketObject\", new()\n {\n Bucket = appengineNegBucket.Name,\n Source = new FileAsset(\"./test-fixtures/appengine/hello-world.zip\"),\n });\n\n var appengineNegFlexibleAppVersion = new Gcp.AppEngine.FlexibleAppVersion(\"appengineNegFlexibleAppVersion\", new()\n {\n VersionId = \"v1\",\n Service = \"appengine-network-endpoint-group\",\n Runtime = \"nodejs\",\n Entrypoint = new Gcp.AppEngine.Inputs.FlexibleAppVersionEntrypointArgs\n {\n Shell = \"node ./app.js\",\n },\n Deployment = new Gcp.AppEngine.Inputs.FlexibleAppVersionDeploymentArgs\n {\n Zip = new Gcp.AppEngine.Inputs.FlexibleAppVersionDeploymentZipArgs\n {\n SourceUrl = Output.Tuple(appengineNegBucket.Name, appengineNegBucketObject.Name).Apply(values =\u003e\n {\n var appengineNegBucketName = values.Item1;\n var appengineNegBucketObjectName = values.Item2;\n return $\"https://storage.googleapis.com/{appengineNegBucketName}/{appengineNegBucketObjectName}\";\n }),\n },\n },\n LivenessCheck = new Gcp.AppEngine.Inputs.FlexibleAppVersionLivenessCheckArgs\n {\n Path = \"/\",\n },\n ReadinessCheck = new Gcp.AppEngine.Inputs.FlexibleAppVersionReadinessCheckArgs\n {\n Path = \"/\",\n },\n EnvVariables = \n {\n { \"port\", \"8080\" },\n },\n Handlers = new[]\n {\n new Gcp.AppEngine.Inputs.FlexibleAppVersionHandlerArgs\n {\n UrlRegex = \".*\\\\/my-path\\\\/*\",\n SecurityLevel = \"SECURE_ALWAYS\",\n Login = \"LOGIN_REQUIRED\",\n AuthFailAction = \"AUTH_FAIL_ACTION_REDIRECT\",\n StaticFiles = new Gcp.AppEngine.Inputs.FlexibleAppVersionHandlerStaticFilesArgs\n {\n Path = \"my-other-path\",\n UploadPathRegex = \".*\\\\/my-path\\\\/*\",\n },\n },\n },\n AutomaticScaling = new Gcp.AppEngine.Inputs.FlexibleAppVersionAutomaticScalingArgs\n {\n CoolDownPeriod = \"120s\",\n CpuUtilization = new Gcp.AppEngine.Inputs.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs\n {\n TargetUtilization = 0.5,\n },\n },\n NoopOnDestroy = true,\n });\n\n // App Engine Example\n var appengineNegRegionNetworkEndpointGroup = new Gcp.Compute.RegionNetworkEndpointGroup(\"appengineNegRegionNetworkEndpointGroup\", new()\n {\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n AppEngine = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupAppEngineArgs\n {\n Service = appengineNegFlexibleAppVersion.Service,\n Version = appengineNegFlexibleAppVersion.VersionId,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/appengine\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tappengineNegBucket, err := storage.NewBucket(ctx, \"appengineNegBucket\", \u0026storage.BucketArgs{\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\tappengineNegBucketObject, err := storage.NewBucketObject(ctx, \"appengineNegBucketObject\", \u0026storage.BucketObjectArgs{\n\t\t\tBucket: appengineNegBucket.Name,\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/appengine/hello-world.zip\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tappengineNegFlexibleAppVersion, err := appengine.NewFlexibleAppVersion(ctx, \"appengineNegFlexibleAppVersion\", \u0026appengine.FlexibleAppVersionArgs{\n\t\t\tVersionId: pulumi.String(\"v1\"),\n\t\t\tService: pulumi.String(\"appengine-network-endpoint-group\"),\n\t\t\tRuntime: pulumi.String(\"nodejs\"),\n\t\t\tEntrypoint: \u0026appengine.FlexibleAppVersionEntrypointArgs{\n\t\t\t\tShell: pulumi.String(\"node ./app.js\"),\n\t\t\t},\n\t\t\tDeployment: \u0026appengine.FlexibleAppVersionDeploymentArgs{\n\t\t\t\tZip: \u0026appengine.FlexibleAppVersionDeploymentZipArgs{\n\t\t\t\t\tSourceUrl: pulumi.All(appengineNegBucket.Name, appengineNegBucketObject.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tappengineNegBucketName := _args[0].(string)\n\t\t\t\t\t\tappengineNegBucketObjectName := _args[1].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"https://storage.googleapis.com/%v/%v\", appengineNegBucketName, appengineNegBucketObjectName), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLivenessCheck: \u0026appengine.FlexibleAppVersionLivenessCheckArgs{\n\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t},\n\t\t\tReadinessCheck: \u0026appengine.FlexibleAppVersionReadinessCheckArgs{\n\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t},\n\t\t\tEnvVariables: pulumi.StringMap{\n\t\t\t\t\"port\": pulumi.String(\"8080\"),\n\t\t\t},\n\t\t\tHandlers: appengine.FlexibleAppVersionHandlerArray{\n\t\t\t\t\u0026appengine.FlexibleAppVersionHandlerArgs{\n\t\t\t\t\tUrlRegex: pulumi.String(\".*\\\\/my-path\\\\/*\"),\n\t\t\t\t\tSecurityLevel: pulumi.String(\"SECURE_ALWAYS\"),\n\t\t\t\t\tLogin: pulumi.String(\"LOGIN_REQUIRED\"),\n\t\t\t\t\tAuthFailAction: pulumi.String(\"AUTH_FAIL_ACTION_REDIRECT\"),\n\t\t\t\t\tStaticFiles: \u0026appengine.FlexibleAppVersionHandlerStaticFilesArgs{\n\t\t\t\t\t\tPath: pulumi.String(\"my-other-path\"),\n\t\t\t\t\t\tUploadPathRegex: pulumi.String(\".*\\\\/my-path\\\\/*\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tAutomaticScaling: \u0026appengine.FlexibleAppVersionAutomaticScalingArgs{\n\t\t\t\tCoolDownPeriod: pulumi.String(\"120s\"),\n\t\t\t\tCpuUtilization: \u0026appengine.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs{\n\t\t\t\t\tTargetUtilization: pulumi.Float64(0.5),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNoopOnDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"appengineNegRegionNetworkEndpointGroup\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tAppEngine: \u0026compute.RegionNetworkEndpointGroupAppEngineArgs{\n\t\t\t\tService: appengineNegFlexibleAppVersion.Service,\n\t\t\t\tVersion: appengineNegFlexibleAppVersion.VersionId,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.appengine.FlexibleAppVersion;\nimport com.pulumi.gcp.appengine.FlexibleAppVersionArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionEntrypointArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionDeploymentArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionDeploymentZipArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionLivenessCheckArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionReadinessCheckArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionHandlerArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionHandlerStaticFilesArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionAutomaticScalingArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupAppEngineArgs;\nimport com.pulumi.asset.FileAsset;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var appengineNegBucket = new Bucket(\"appengineNegBucket\", BucketArgs.builder() \n .location(\"US\")\n .build());\n\n var appengineNegBucketObject = new BucketObject(\"appengineNegBucketObject\", BucketObjectArgs.builder() \n .bucket(appengineNegBucket.name())\n .source(new FileAsset(\"./test-fixtures/appengine/hello-world.zip\"))\n .build());\n\n var appengineNegFlexibleAppVersion = new FlexibleAppVersion(\"appengineNegFlexibleAppVersion\", FlexibleAppVersionArgs.builder() \n .versionId(\"v1\")\n .service(\"appengine-network-endpoint-group\")\n .runtime(\"nodejs\")\n .entrypoint(FlexibleAppVersionEntrypointArgs.builder()\n .shell(\"node ./app.js\")\n .build())\n .deployment(FlexibleAppVersionDeploymentArgs.builder()\n .zip(FlexibleAppVersionDeploymentZipArgs.builder()\n .sourceUrl(Output.tuple(appengineNegBucket.name(), appengineNegBucketObject.name()).applyValue(values -\u003e {\n var appengineNegBucketName = values.t1;\n var appengineNegBucketObjectName = values.t2;\n return String.format(\"https://storage.googleapis.com/%s/%s\", appengineNegBucketName,appengineNegBucketObjectName);\n }))\n .build())\n .build())\n .livenessCheck(FlexibleAppVersionLivenessCheckArgs.builder()\n .path(\"/\")\n .build())\n .readinessCheck(FlexibleAppVersionReadinessCheckArgs.builder()\n .path(\"/\")\n .build())\n .envVariables(Map.of(\"port\", \"8080\"))\n .handlers(FlexibleAppVersionHandlerArgs.builder()\n .urlRegex(\".*\\\\/my-path\\\\/*\")\n .securityLevel(\"SECURE_ALWAYS\")\n .login(\"LOGIN_REQUIRED\")\n .authFailAction(\"AUTH_FAIL_ACTION_REDIRECT\")\n .staticFiles(FlexibleAppVersionHandlerStaticFilesArgs.builder()\n .path(\"my-other-path\")\n .uploadPathRegex(\".*\\\\/my-path\\\\/*\")\n .build())\n .build())\n .automaticScaling(FlexibleAppVersionAutomaticScalingArgs.builder()\n .coolDownPeriod(\"120s\")\n .cpuUtilization(FlexibleAppVersionAutomaticScalingCpuUtilizationArgs.builder()\n .targetUtilization(0.5)\n .build())\n .build())\n .noopOnDestroy(true)\n .build());\n\n var appengineNegRegionNetworkEndpointGroup = new RegionNetworkEndpointGroup(\"appengineNegRegionNetworkEndpointGroup\", RegionNetworkEndpointGroupArgs.builder() \n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .appEngine(RegionNetworkEndpointGroupAppEngineArgs.builder()\n .service(appengineNegFlexibleAppVersion.service())\n .version(appengineNegFlexibleAppVersion.versionId())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # App Engine Example\n appengineNegRegionNetworkEndpointGroup:\n type: gcp:compute:RegionNetworkEndpointGroup\n properties:\n networkEndpointType: SERVERLESS\n region: us-central1\n appEngine:\n service: ${appengineNegFlexibleAppVersion.service}\n version: ${appengineNegFlexibleAppVersion.versionId}\n appengineNegFlexibleAppVersion:\n type: gcp:appengine:FlexibleAppVersion\n properties:\n versionId: v1\n service: appengine-network-endpoint-group\n runtime: nodejs\n entrypoint:\n shell: node ./app.js\n deployment:\n zip:\n sourceUrl: https://storage.googleapis.com/${appengineNegBucket.name}/${appengineNegBucketObject.name}\n livenessCheck:\n path: /\n readinessCheck:\n path: /\n envVariables:\n port: '8080'\n handlers:\n - urlRegex: .*\\/my-path\\/*\n securityLevel: SECURE_ALWAYS\n login: LOGIN_REQUIRED\n authFailAction: AUTH_FAIL_ACTION_REDIRECT\n staticFiles:\n path: my-other-path\n uploadPathRegex: .*\\/my-path\\/*\n automaticScaling:\n coolDownPeriod: 120s\n cpuUtilization:\n targetUtilization: 0.5\n noopOnDestroy: true\n appengineNegBucket:\n type: gcp:storage:Bucket\n properties:\n location: US\n appengineNegBucketObject:\n type: gcp:storage:BucketObject\n properties:\n bucket: ${appengineNegBucket.name}\n source:\n fn::FileAsset: ./test-fixtures/appengine/hello-world.zip\n```\n{{% /example %}}\n{{% example %}}\n### Region Network Endpoint Group Psc\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pscNeg = new gcp.compute.RegionNetworkEndpointGroup(\"pscNeg\", {\n networkEndpointType: \"PRIVATE_SERVICE_CONNECT\",\n pscTargetService: \"asia-northeast3-cloudkms.googleapis.com\",\n region: \"asia-northeast3\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npsc_neg = gcp.compute.RegionNetworkEndpointGroup(\"pscNeg\",\n network_endpoint_type=\"PRIVATE_SERVICE_CONNECT\",\n psc_target_service=\"asia-northeast3-cloudkms.googleapis.com\",\n region=\"asia-northeast3\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pscNeg = new Gcp.Compute.RegionNetworkEndpointGroup(\"pscNeg\", new()\n {\n NetworkEndpointType = \"PRIVATE_SERVICE_CONNECT\",\n PscTargetService = \"asia-northeast3-cloudkms.googleapis.com\",\n Region = \"asia-northeast3\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionNetworkEndpointGroup(ctx, \"pscNeg\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tNetworkEndpointType: pulumi.String(\"PRIVATE_SERVICE_CONNECT\"),\n\t\t\tPscTargetService: pulumi.String(\"asia-northeast3-cloudkms.googleapis.com\"),\n\t\t\tRegion: pulumi.String(\"asia-northeast3\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pscNeg = new RegionNetworkEndpointGroup(\"pscNeg\", RegionNetworkEndpointGroupArgs.builder() \n .networkEndpointType(\"PRIVATE_SERVICE_CONNECT\")\n .pscTargetService(\"asia-northeast3-cloudkms.googleapis.com\")\n .region(\"asia-northeast3\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pscNeg:\n type: gcp:compute:RegionNetworkEndpointGroup\n properties:\n networkEndpointType: PRIVATE_SERVICE_CONNECT\n pscTargetService: asia-northeast3-cloudkms.googleapis.com\n region: asia-northeast3\n```\n{{% /example %}}\n{{% example %}}\n### Region Network Endpoint Group Psc Service Attachment\n\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.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.RegionBackendService;\nimport com.pulumi.gcp.compute.RegionBackendServiceArgs;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.compute.ServiceAttachment;\nimport com.pulumi.gcp.compute.ServiceAttachmentArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultNetwork = new Network(\"defaultNetwork\");\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.0.0/16\")\n .region(\"europe-west4\")\n .network(defaultNetwork.id())\n .build());\n\n var pscSubnetwork = new Subnetwork(\"pscSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.1.0.0/16\")\n .region(\"europe-west4\")\n .purpose(\"PRIVATE_SERVICE_CONNECT\")\n .network(defaultNetwork.id())\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .checkIntervalSec(1)\n .timeoutSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"80\")\n .build())\n .build());\n\n var defaultRegionBackendService = new RegionBackendService(\"defaultRegionBackendService\", RegionBackendServiceArgs.builder() \n .region(\"europe-west4\")\n .healthChecks(defaultHealthCheck.id())\n .build());\n\n var defaultForwardingRule = new ForwardingRule(\"defaultForwardingRule\", ForwardingRuleArgs.builder() \n .region(\"europe-west4\")\n .loadBalancingScheme(\"INTERNAL\")\n .backendService(defaultRegionBackendService.id())\n .allPorts(true)\n .network(defaultNetwork.name())\n .subnetwork(defaultSubnetwork.name())\n .build());\n\n var defaultServiceAttachment = new ServiceAttachment(\"defaultServiceAttachment\", ServiceAttachmentArgs.builder() \n .region(\"europe-west4\")\n .description(\"A service attachment configured with Terraform\")\n .enableProxyProtocol(false)\n .connectionPreference(\"ACCEPT_AUTOMATIC\")\n .natSubnets(pscSubnetwork.selfLink())\n .targetService(defaultForwardingRule.selfLink())\n .build());\n\n var pscNegServiceAttachment = new RegionNetworkEndpointGroup(\"pscNegServiceAttachment\", RegionNetworkEndpointGroupArgs.builder() \n .region(\"europe-west4\")\n .networkEndpointType(\"PRIVATE_SERVICE_CONNECT\")\n .pscTargetService(defaultServiceAttachment.selfLink())\n .network(defaultNetwork.selfLink())\n .subnetwork(defaultSubnetwork.selfLink())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultNetwork:\n type: gcp:compute:Network\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.0.0/16\n region: europe-west4\n network: ${defaultNetwork.id}\n pscSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.1.0.0/16\n region: europe-west4\n purpose: PRIVATE_SERVICE_CONNECT\n network: ${defaultNetwork.id}\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n checkIntervalSec: 1\n timeoutSec: 1\n tcpHealthCheck:\n port: '80'\n defaultRegionBackendService:\n type: gcp:compute:RegionBackendService\n properties:\n region: europe-west4\n healthChecks:\n - ${defaultHealthCheck.id}\n defaultForwardingRule:\n type: gcp:compute:ForwardingRule\n properties:\n region: europe-west4\n loadBalancingScheme: INTERNAL\n backendService: ${defaultRegionBackendService.id}\n allPorts: true\n network: ${defaultNetwork.name}\n subnetwork: ${defaultSubnetwork.name}\n defaultServiceAttachment:\n type: gcp:compute:ServiceAttachment\n properties:\n region: europe-west4\n description: A service attachment configured with Terraform\n enableProxyProtocol: false\n connectionPreference: ACCEPT_AUTOMATIC\n natSubnets:\n - ${pscSubnetwork.selfLink}\n targetService: ${defaultForwardingRule.selfLink}\n pscNegServiceAttachment:\n type: gcp:compute:RegionNetworkEndpointGroup\n properties:\n region: europe-west4\n networkEndpointType: PRIVATE_SERVICE_CONNECT\n pscTargetService: ${defaultServiceAttachment.selfLink}\n network: ${defaultNetwork.selfLink}\n subnetwork: ${defaultSubnetwork.selfLink}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionNetworkEndpointGroup can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default projects/{{project}}/regions/{{region}}/networkEndpointGroups/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default {{name}}\n```\n\n ", + "description": "A regional NEG that can support Serverless Products.\n\nRecreating a region network endpoint group that's in use by another resource will give a\n`resourceInUseByAnotherResource` error. Use `lifecycle.create_before_destroy`\nto avoid this type of error.\n\n\nTo get more information about RegionNetworkEndpointGroup, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/regionNetworkEndpointGroups)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/load-balancing/docs/negs/serverless-neg-concepts)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Network Endpoint Group Functions\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bucket = new gcp.storage.Bucket(\"bucket\", {location: \"US\"});\nconst archive = new gcp.storage.BucketObject(\"archive\", {\n bucket: bucket.name,\n source: new pulumi.asset.FileAsset(\"path/to/index.zip\"),\n});\nconst functionNegFunction = new gcp.cloudfunctions.Function(\"functionNegFunction\", {\n description: \"My function\",\n runtime: \"nodejs10\",\n availableMemoryMb: 128,\n sourceArchiveBucket: bucket.name,\n sourceArchiveObject: archive.name,\n triggerHttp: true,\n timeout: 60,\n entryPoint: \"helloGET\",\n});\n// Cloud Functions Example\nconst functionNegRegionNetworkEndpointGroup = new gcp.compute.RegionNetworkEndpointGroup(\"functionNegRegionNetworkEndpointGroup\", {\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n cloudFunction: {\n \"function\": functionNegFunction.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbucket = gcp.storage.Bucket(\"bucket\", location=\"US\")\narchive = gcp.storage.BucketObject(\"archive\",\n bucket=bucket.name,\n source=pulumi.FileAsset(\"path/to/index.zip\"))\nfunction_neg_function = gcp.cloudfunctions.Function(\"functionNegFunction\",\n description=\"My function\",\n runtime=\"nodejs10\",\n available_memory_mb=128,\n source_archive_bucket=bucket.name,\n source_archive_object=archive.name,\n trigger_http=True,\n timeout=60,\n entry_point=\"helloGET\")\n# Cloud Functions Example\nfunction_neg_region_network_endpoint_group = gcp.compute.RegionNetworkEndpointGroup(\"functionNegRegionNetworkEndpointGroup\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n cloud_function=gcp.compute.RegionNetworkEndpointGroupCloudFunctionArgs(\n function=function_neg_function.name,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Location = \"US\",\n });\n\n var archive = new Gcp.Storage.BucketObject(\"archive\", new()\n {\n Bucket = bucket.Name,\n Source = new FileAsset(\"path/to/index.zip\"),\n });\n\n var functionNegFunction = new Gcp.CloudFunctions.Function(\"functionNegFunction\", new()\n {\n Description = \"My function\",\n Runtime = \"nodejs10\",\n AvailableMemoryMb = 128,\n SourceArchiveBucket = bucket.Name,\n SourceArchiveObject = archive.Name,\n TriggerHttp = true,\n Timeout = 60,\n EntryPoint = \"helloGET\",\n });\n\n // Cloud Functions Example\n var functionNegRegionNetworkEndpointGroup = new Gcp.Compute.RegionNetworkEndpointGroup(\"functionNegRegionNetworkEndpointGroup\", new()\n {\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n CloudFunction = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupCloudFunctionArgs\n {\n Function = functionNegFunction.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudfunctions\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tarchive, err := storage.NewBucketObject(ctx, \"archive\", \u0026storage.BucketObjectArgs{\n\t\t\tBucket: bucket.Name,\n\t\t\tSource: pulumi.NewFileAsset(\"path/to/index.zip\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfunctionNegFunction, err := cloudfunctions.NewFunction(ctx, \"functionNegFunction\", \u0026cloudfunctions.FunctionArgs{\n\t\t\tDescription: pulumi.String(\"My function\"),\n\t\t\tRuntime: pulumi.String(\"nodejs10\"),\n\t\t\tAvailableMemoryMb: pulumi.Int(128),\n\t\t\tSourceArchiveBucket: bucket.Name,\n\t\t\tSourceArchiveObject: archive.Name,\n\t\t\tTriggerHttp: pulumi.Bool(true),\n\t\t\tTimeout: pulumi.Int(60),\n\t\t\tEntryPoint: pulumi.String(\"helloGET\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"functionNegRegionNetworkEndpointGroup\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tCloudFunction: \u0026compute.RegionNetworkEndpointGroupCloudFunctionArgs{\n\t\t\t\tFunction: functionNegFunction.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.cloudfunctions.Function;\nimport com.pulumi.gcp.cloudfunctions.FunctionArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupCloudFunctionArgs;\nimport com.pulumi.asset.FileAsset;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .location(\"US\")\n .build());\n\n var archive = new BucketObject(\"archive\", BucketObjectArgs.builder() \n .bucket(bucket.name())\n .source(new FileAsset(\"path/to/index.zip\"))\n .build());\n\n var functionNegFunction = new Function(\"functionNegFunction\", FunctionArgs.builder() \n .description(\"My function\")\n .runtime(\"nodejs10\")\n .availableMemoryMb(128)\n .sourceArchiveBucket(bucket.name())\n .sourceArchiveObject(archive.name())\n .triggerHttp(true)\n .timeout(60)\n .entryPoint(\"helloGET\")\n .build());\n\n var functionNegRegionNetworkEndpointGroup = new RegionNetworkEndpointGroup(\"functionNegRegionNetworkEndpointGroup\", RegionNetworkEndpointGroupArgs.builder() \n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .cloudFunction(RegionNetworkEndpointGroupCloudFunctionArgs.builder()\n .function(functionNegFunction.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Cloud Functions Example\n functionNegRegionNetworkEndpointGroup:\n type: gcp:compute:RegionNetworkEndpointGroup\n properties:\n networkEndpointType: SERVERLESS\n region: us-central1\n cloudFunction:\n function: ${functionNegFunction.name}\n functionNegFunction:\n type: gcp:cloudfunctions:Function\n properties:\n description: My function\n runtime: nodejs10\n availableMemoryMb: 128\n sourceArchiveBucket: ${bucket.name}\n sourceArchiveObject: ${archive.name}\n triggerHttp: true\n timeout: 60\n entryPoint: helloGET\n bucket:\n type: gcp:storage:Bucket\n properties:\n location: US\n archive:\n type: gcp:storage:BucketObject\n properties:\n bucket: ${bucket.name}\n source:\n fn::FileAsset: path/to/index.zip\n```\n{{% /example %}}\n{{% example %}}\n### Region Network Endpoint Group Cloudrun\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cloudrunNegService = new gcp.cloudrun.Service(\"cloudrunNegService\", {\n location: \"us-central1\",\n template: {\n spec: {\n containers: [{\n image: \"us-docker.pkg.dev/cloudrun/container/hello\",\n }],\n },\n },\n traffics: [{\n percent: 100,\n latestRevision: true,\n }],\n});\n// Cloud Run Example\nconst cloudrunNegRegionNetworkEndpointGroup = new gcp.compute.RegionNetworkEndpointGroup(\"cloudrunNegRegionNetworkEndpointGroup\", {\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n cloudRun: {\n service: cloudrunNegService.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncloudrun_neg_service = gcp.cloudrun.Service(\"cloudrunNegService\",\n location=\"us-central1\",\n template=gcp.cloudrun.ServiceTemplateArgs(\n spec=gcp.cloudrun.ServiceTemplateSpecArgs(\n containers=[gcp.cloudrun.ServiceTemplateSpecContainerArgs(\n image=\"us-docker.pkg.dev/cloudrun/container/hello\",\n )],\n ),\n ),\n traffics=[gcp.cloudrun.ServiceTrafficArgs(\n percent=100,\n latest_revision=True,\n )])\n# Cloud Run Example\ncloudrun_neg_region_network_endpoint_group = gcp.compute.RegionNetworkEndpointGroup(\"cloudrunNegRegionNetworkEndpointGroup\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n cloud_run=gcp.compute.RegionNetworkEndpointGroupCloudRunArgs(\n service=cloudrun_neg_service.name,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloudrunNegService = new Gcp.CloudRun.Service(\"cloudrunNegService\", new()\n {\n Location = \"us-central1\",\n Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs\n {\n Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs\n {\n Containers = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs\n {\n Image = \"us-docker.pkg.dev/cloudrun/container/hello\",\n },\n },\n },\n },\n Traffics = new[]\n {\n new Gcp.CloudRun.Inputs.ServiceTrafficArgs\n {\n Percent = 100,\n LatestRevision = true,\n },\n },\n });\n\n // Cloud Run Example\n var cloudrunNegRegionNetworkEndpointGroup = new Gcp.Compute.RegionNetworkEndpointGroup(\"cloudrunNegRegionNetworkEndpointGroup\", new()\n {\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n CloudRun = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupCloudRunArgs\n {\n Service = cloudrunNegService.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrun\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcloudrunNegService, err := cloudrun.NewService(ctx, \"cloudrunNegService\", \u0026cloudrun.ServiceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTemplate: \u0026cloudrun.ServiceTemplateArgs{\n\t\t\t\tSpec: \u0026cloudrun.ServiceTemplateSpecArgs{\n\t\t\t\t\tContainers: cloudrun.ServiceTemplateSpecContainerArray{\n\t\t\t\t\t\t\u0026cloudrun.ServiceTemplateSpecContainerArgs{\n\t\t\t\t\t\t\tImage: pulumi.String(\"us-docker.pkg.dev/cloudrun/container/hello\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tTraffics: cloudrun.ServiceTrafficArray{\n\t\t\t\t\u0026cloudrun.ServiceTrafficArgs{\n\t\t\t\t\tPercent: pulumi.Int(100),\n\t\t\t\t\tLatestRevision: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"cloudrunNegRegionNetworkEndpointGroup\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tCloudRun: \u0026compute.RegionNetworkEndpointGroupCloudRunArgs{\n\t\t\t\tService: cloudrunNegService.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.cloudrun.Service;\nimport com.pulumi.gcp.cloudrun.ServiceArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs;\nimport com.pulumi.gcp.cloudrun.inputs.ServiceTrafficArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupCloudRunArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloudrunNegService = new Service(\"cloudrunNegService\", ServiceArgs.builder() \n .location(\"us-central1\")\n .template(ServiceTemplateArgs.builder()\n .spec(ServiceTemplateSpecArgs.builder()\n .containers(ServiceTemplateSpecContainerArgs.builder()\n .image(\"us-docker.pkg.dev/cloudrun/container/hello\")\n .build())\n .build())\n .build())\n .traffics(ServiceTrafficArgs.builder()\n .percent(100)\n .latestRevision(true)\n .build())\n .build());\n\n var cloudrunNegRegionNetworkEndpointGroup = new RegionNetworkEndpointGroup(\"cloudrunNegRegionNetworkEndpointGroup\", RegionNetworkEndpointGroupArgs.builder() \n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .cloudRun(RegionNetworkEndpointGroupCloudRunArgs.builder()\n .service(cloudrunNegService.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Cloud Run Example\n cloudrunNegRegionNetworkEndpointGroup:\n type: gcp:compute:RegionNetworkEndpointGroup\n properties:\n networkEndpointType: SERVERLESS\n region: us-central1\n cloudRun:\n service: ${cloudrunNegService.name}\n cloudrunNegService:\n type: gcp:cloudrun:Service\n properties:\n location: us-central1\n template:\n spec:\n containers:\n - image: us-docker.pkg.dev/cloudrun/container/hello\n traffics:\n - percent: 100\n latestRevision: true\n```\n{{% /example %}}\n{{% example %}}\n### Region Network Endpoint Group Appengine\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst appengineNegBucket = new gcp.storage.Bucket(\"appengineNegBucket\", {location: \"US\"});\nconst appengineNegBucketObject = new gcp.storage.BucketObject(\"appengineNegBucketObject\", {\n bucket: appengineNegBucket.name,\n source: new pulumi.asset.FileAsset(\"./test-fixtures/appengine/hello-world.zip\"),\n});\nconst appengineNegFlexibleAppVersion = new gcp.appengine.FlexibleAppVersion(\"appengineNegFlexibleAppVersion\", {\n versionId: \"v1\",\n service: \"appengine-network-endpoint-group\",\n runtime: \"nodejs\",\n entrypoint: {\n shell: \"node ./app.js\",\n },\n deployment: {\n zip: {\n sourceUrl: pulumi.interpolate`https://storage.googleapis.com/${appengineNegBucket.name}/${appengineNegBucketObject.name}`,\n },\n },\n livenessCheck: {\n path: \"/\",\n },\n readinessCheck: {\n path: \"/\",\n },\n envVariables: {\n port: \"8080\",\n },\n handlers: [{\n urlRegex: \".*\\\\/my-path\\\\/*\",\n securityLevel: \"SECURE_ALWAYS\",\n login: \"LOGIN_REQUIRED\",\n authFailAction: \"AUTH_FAIL_ACTION_REDIRECT\",\n staticFiles: {\n path: \"my-other-path\",\n uploadPathRegex: \".*\\\\/my-path\\\\/*\",\n },\n }],\n automaticScaling: {\n coolDownPeriod: \"120s\",\n cpuUtilization: {\n targetUtilization: 0.5,\n },\n },\n noopOnDestroy: true,\n});\n// App Engine Example\nconst appengineNegRegionNetworkEndpointGroup = new gcp.compute.RegionNetworkEndpointGroup(\"appengineNegRegionNetworkEndpointGroup\", {\n networkEndpointType: \"SERVERLESS\",\n region: \"us-central1\",\n appEngine: {\n service: appengineNegFlexibleAppVersion.service,\n version: appengineNegFlexibleAppVersion.versionId,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nappengine_neg_bucket = gcp.storage.Bucket(\"appengineNegBucket\", location=\"US\")\nappengine_neg_bucket_object = gcp.storage.BucketObject(\"appengineNegBucketObject\",\n bucket=appengine_neg_bucket.name,\n source=pulumi.FileAsset(\"./test-fixtures/appengine/hello-world.zip\"))\nappengine_neg_flexible_app_version = gcp.appengine.FlexibleAppVersion(\"appengineNegFlexibleAppVersion\",\n version_id=\"v1\",\n service=\"appengine-network-endpoint-group\",\n runtime=\"nodejs\",\n entrypoint=gcp.appengine.FlexibleAppVersionEntrypointArgs(\n shell=\"node ./app.js\",\n ),\n deployment=gcp.appengine.FlexibleAppVersionDeploymentArgs(\n zip=gcp.appengine.FlexibleAppVersionDeploymentZipArgs(\n source_url=pulumi.Output.all(appengine_neg_bucket.name, appengine_neg_bucket_object.name).apply(lambda appengineNegBucketName, appengineNegBucketObjectName: f\"https://storage.googleapis.com/{appengine_neg_bucket_name}/{appengine_neg_bucket_object_name}\"),\n ),\n ),\n liveness_check=gcp.appengine.FlexibleAppVersionLivenessCheckArgs(\n path=\"/\",\n ),\n readiness_check=gcp.appengine.FlexibleAppVersionReadinessCheckArgs(\n path=\"/\",\n ),\n env_variables={\n \"port\": \"8080\",\n },\n handlers=[gcp.appengine.FlexibleAppVersionHandlerArgs(\n url_regex=\".*\\\\/my-path\\\\/*\",\n security_level=\"SECURE_ALWAYS\",\n login=\"LOGIN_REQUIRED\",\n auth_fail_action=\"AUTH_FAIL_ACTION_REDIRECT\",\n static_files=gcp.appengine.FlexibleAppVersionHandlerStaticFilesArgs(\n path=\"my-other-path\",\n upload_path_regex=\".*\\\\/my-path\\\\/*\",\n ),\n )],\n automatic_scaling=gcp.appengine.FlexibleAppVersionAutomaticScalingArgs(\n cool_down_period=\"120s\",\n cpu_utilization=gcp.appengine.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs(\n target_utilization=0.5,\n ),\n ),\n noop_on_destroy=True)\n# App Engine Example\nappengine_neg_region_network_endpoint_group = gcp.compute.RegionNetworkEndpointGroup(\"appengineNegRegionNetworkEndpointGroup\",\n network_endpoint_type=\"SERVERLESS\",\n region=\"us-central1\",\n app_engine=gcp.compute.RegionNetworkEndpointGroupAppEngineArgs(\n service=appengine_neg_flexible_app_version.service,\n version=appengine_neg_flexible_app_version.version_id,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var appengineNegBucket = new Gcp.Storage.Bucket(\"appengineNegBucket\", new()\n {\n Location = \"US\",\n });\n\n var appengineNegBucketObject = new Gcp.Storage.BucketObject(\"appengineNegBucketObject\", new()\n {\n Bucket = appengineNegBucket.Name,\n Source = new FileAsset(\"./test-fixtures/appengine/hello-world.zip\"),\n });\n\n var appengineNegFlexibleAppVersion = new Gcp.AppEngine.FlexibleAppVersion(\"appengineNegFlexibleAppVersion\", new()\n {\n VersionId = \"v1\",\n Service = \"appengine-network-endpoint-group\",\n Runtime = \"nodejs\",\n Entrypoint = new Gcp.AppEngine.Inputs.FlexibleAppVersionEntrypointArgs\n {\n Shell = \"node ./app.js\",\n },\n Deployment = new Gcp.AppEngine.Inputs.FlexibleAppVersionDeploymentArgs\n {\n Zip = new Gcp.AppEngine.Inputs.FlexibleAppVersionDeploymentZipArgs\n {\n SourceUrl = Output.Tuple(appengineNegBucket.Name, appengineNegBucketObject.Name).Apply(values =\u003e\n {\n var appengineNegBucketName = values.Item1;\n var appengineNegBucketObjectName = values.Item2;\n return $\"https://storage.googleapis.com/{appengineNegBucketName}/{appengineNegBucketObjectName}\";\n }),\n },\n },\n LivenessCheck = new Gcp.AppEngine.Inputs.FlexibleAppVersionLivenessCheckArgs\n {\n Path = \"/\",\n },\n ReadinessCheck = new Gcp.AppEngine.Inputs.FlexibleAppVersionReadinessCheckArgs\n {\n Path = \"/\",\n },\n EnvVariables = \n {\n { \"port\", \"8080\" },\n },\n Handlers = new[]\n {\n new Gcp.AppEngine.Inputs.FlexibleAppVersionHandlerArgs\n {\n UrlRegex = \".*\\\\/my-path\\\\/*\",\n SecurityLevel = \"SECURE_ALWAYS\",\n Login = \"LOGIN_REQUIRED\",\n AuthFailAction = \"AUTH_FAIL_ACTION_REDIRECT\",\n StaticFiles = new Gcp.AppEngine.Inputs.FlexibleAppVersionHandlerStaticFilesArgs\n {\n Path = \"my-other-path\",\n UploadPathRegex = \".*\\\\/my-path\\\\/*\",\n },\n },\n },\n AutomaticScaling = new Gcp.AppEngine.Inputs.FlexibleAppVersionAutomaticScalingArgs\n {\n CoolDownPeriod = \"120s\",\n CpuUtilization = new Gcp.AppEngine.Inputs.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs\n {\n TargetUtilization = 0.5,\n },\n },\n NoopOnDestroy = true,\n });\n\n // App Engine Example\n var appengineNegRegionNetworkEndpointGroup = new Gcp.Compute.RegionNetworkEndpointGroup(\"appengineNegRegionNetworkEndpointGroup\", new()\n {\n NetworkEndpointType = \"SERVERLESS\",\n Region = \"us-central1\",\n AppEngine = new Gcp.Compute.Inputs.RegionNetworkEndpointGroupAppEngineArgs\n {\n Service = appengineNegFlexibleAppVersion.Service,\n Version = appengineNegFlexibleAppVersion.VersionId,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/appengine\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tappengineNegBucket, err := storage.NewBucket(ctx, \"appengineNegBucket\", \u0026storage.BucketArgs{\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\tappengineNegBucketObject, err := storage.NewBucketObject(ctx, \"appengineNegBucketObject\", \u0026storage.BucketObjectArgs{\n\t\t\tBucket: appengineNegBucket.Name,\n\t\t\tSource: pulumi.NewFileAsset(\"./test-fixtures/appengine/hello-world.zip\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tappengineNegFlexibleAppVersion, err := appengine.NewFlexibleAppVersion(ctx, \"appengineNegFlexibleAppVersion\", \u0026appengine.FlexibleAppVersionArgs{\n\t\t\tVersionId: pulumi.String(\"v1\"),\n\t\t\tService: pulumi.String(\"appengine-network-endpoint-group\"),\n\t\t\tRuntime: pulumi.String(\"nodejs\"),\n\t\t\tEntrypoint: \u0026appengine.FlexibleAppVersionEntrypointArgs{\n\t\t\t\tShell: pulumi.String(\"node ./app.js\"),\n\t\t\t},\n\t\t\tDeployment: \u0026appengine.FlexibleAppVersionDeploymentArgs{\n\t\t\t\tZip: \u0026appengine.FlexibleAppVersionDeploymentZipArgs{\n\t\t\t\t\tSourceUrl: pulumi.All(appengineNegBucket.Name, appengineNegBucketObject.Name).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\tappengineNegBucketName := _args[0].(string)\n\t\t\t\t\t\tappengineNegBucketObjectName := _args[1].(string)\n\t\t\t\t\t\treturn fmt.Sprintf(\"https://storage.googleapis.com/%v/%v\", appengineNegBucketName, appengineNegBucketObjectName), nil\n\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLivenessCheck: \u0026appengine.FlexibleAppVersionLivenessCheckArgs{\n\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t},\n\t\t\tReadinessCheck: \u0026appengine.FlexibleAppVersionReadinessCheckArgs{\n\t\t\t\tPath: pulumi.String(\"/\"),\n\t\t\t},\n\t\t\tEnvVariables: pulumi.StringMap{\n\t\t\t\t\"port\": pulumi.String(\"8080\"),\n\t\t\t},\n\t\t\tHandlers: appengine.FlexibleAppVersionHandlerArray{\n\t\t\t\t\u0026appengine.FlexibleAppVersionHandlerArgs{\n\t\t\t\t\tUrlRegex: pulumi.String(\".*\\\\/my-path\\\\/*\"),\n\t\t\t\t\tSecurityLevel: pulumi.String(\"SECURE_ALWAYS\"),\n\t\t\t\t\tLogin: pulumi.String(\"LOGIN_REQUIRED\"),\n\t\t\t\t\tAuthFailAction: pulumi.String(\"AUTH_FAIL_ACTION_REDIRECT\"),\n\t\t\t\t\tStaticFiles: \u0026appengine.FlexibleAppVersionHandlerStaticFilesArgs{\n\t\t\t\t\t\tPath: pulumi.String(\"my-other-path\"),\n\t\t\t\t\t\tUploadPathRegex: pulumi.String(\".*\\\\/my-path\\\\/*\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tAutomaticScaling: \u0026appengine.FlexibleAppVersionAutomaticScalingArgs{\n\t\t\t\tCoolDownPeriod: pulumi.String(\"120s\"),\n\t\t\t\tCpuUtilization: \u0026appengine.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs{\n\t\t\t\t\tTargetUtilization: pulumi.Float64(0.5),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNoopOnDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionNetworkEndpointGroup(ctx, \"appengineNegRegionNetworkEndpointGroup\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tNetworkEndpointType: pulumi.String(\"SERVERLESS\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tAppEngine: \u0026compute.RegionNetworkEndpointGroupAppEngineArgs{\n\t\t\t\tService: appengineNegFlexibleAppVersion.Service,\n\t\t\t\tVersion: appengineNegFlexibleAppVersion.VersionId,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport com.pulumi.gcp.appengine.FlexibleAppVersion;\nimport com.pulumi.gcp.appengine.FlexibleAppVersionArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionEntrypointArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionDeploymentArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionDeploymentZipArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionLivenessCheckArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionReadinessCheckArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionHandlerArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionHandlerStaticFilesArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionAutomaticScalingArgs;\nimport com.pulumi.gcp.appengine.inputs.FlexibleAppVersionAutomaticScalingCpuUtilizationArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport com.pulumi.gcp.compute.inputs.RegionNetworkEndpointGroupAppEngineArgs;\nimport com.pulumi.asset.FileAsset;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var appengineNegBucket = new Bucket(\"appengineNegBucket\", BucketArgs.builder() \n .location(\"US\")\n .build());\n\n var appengineNegBucketObject = new BucketObject(\"appengineNegBucketObject\", BucketObjectArgs.builder() \n .bucket(appengineNegBucket.name())\n .source(new FileAsset(\"./test-fixtures/appengine/hello-world.zip\"))\n .build());\n\n var appengineNegFlexibleAppVersion = new FlexibleAppVersion(\"appengineNegFlexibleAppVersion\", FlexibleAppVersionArgs.builder() \n .versionId(\"v1\")\n .service(\"appengine-network-endpoint-group\")\n .runtime(\"nodejs\")\n .entrypoint(FlexibleAppVersionEntrypointArgs.builder()\n .shell(\"node ./app.js\")\n .build())\n .deployment(FlexibleAppVersionDeploymentArgs.builder()\n .zip(FlexibleAppVersionDeploymentZipArgs.builder()\n .sourceUrl(Output.tuple(appengineNegBucket.name(), appengineNegBucketObject.name()).applyValue(values -\u003e {\n var appengineNegBucketName = values.t1;\n var appengineNegBucketObjectName = values.t2;\n return String.format(\"https://storage.googleapis.com/%s/%s\", appengineNegBucketName,appengineNegBucketObjectName);\n }))\n .build())\n .build())\n .livenessCheck(FlexibleAppVersionLivenessCheckArgs.builder()\n .path(\"/\")\n .build())\n .readinessCheck(FlexibleAppVersionReadinessCheckArgs.builder()\n .path(\"/\")\n .build())\n .envVariables(Map.of(\"port\", \"8080\"))\n .handlers(FlexibleAppVersionHandlerArgs.builder()\n .urlRegex(\".*\\\\/my-path\\\\/*\")\n .securityLevel(\"SECURE_ALWAYS\")\n .login(\"LOGIN_REQUIRED\")\n .authFailAction(\"AUTH_FAIL_ACTION_REDIRECT\")\n .staticFiles(FlexibleAppVersionHandlerStaticFilesArgs.builder()\n .path(\"my-other-path\")\n .uploadPathRegex(\".*\\\\/my-path\\\\/*\")\n .build())\n .build())\n .automaticScaling(FlexibleAppVersionAutomaticScalingArgs.builder()\n .coolDownPeriod(\"120s\")\n .cpuUtilization(FlexibleAppVersionAutomaticScalingCpuUtilizationArgs.builder()\n .targetUtilization(0.5)\n .build())\n .build())\n .noopOnDestroy(true)\n .build());\n\n var appengineNegRegionNetworkEndpointGroup = new RegionNetworkEndpointGroup(\"appengineNegRegionNetworkEndpointGroup\", RegionNetworkEndpointGroupArgs.builder() \n .networkEndpointType(\"SERVERLESS\")\n .region(\"us-central1\")\n .appEngine(RegionNetworkEndpointGroupAppEngineArgs.builder()\n .service(appengineNegFlexibleAppVersion.service())\n .version(appengineNegFlexibleAppVersion.versionId())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # App Engine Example\n appengineNegRegionNetworkEndpointGroup:\n type: gcp:compute:RegionNetworkEndpointGroup\n properties:\n networkEndpointType: SERVERLESS\n region: us-central1\n appEngine:\n service: ${appengineNegFlexibleAppVersion.service}\n version: ${appengineNegFlexibleAppVersion.versionId}\n appengineNegFlexibleAppVersion:\n type: gcp:appengine:FlexibleAppVersion\n properties:\n versionId: v1\n service: appengine-network-endpoint-group\n runtime: nodejs\n entrypoint:\n shell: node ./app.js\n deployment:\n zip:\n sourceUrl: https://storage.googleapis.com/${appengineNegBucket.name}/${appengineNegBucketObject.name}\n livenessCheck:\n path: /\n readinessCheck:\n path: /\n envVariables:\n port: '8080'\n handlers:\n - urlRegex: .*\\/my-path\\/*\n securityLevel: SECURE_ALWAYS\n login: LOGIN_REQUIRED\n authFailAction: AUTH_FAIL_ACTION_REDIRECT\n staticFiles:\n path: my-other-path\n uploadPathRegex: .*\\/my-path\\/*\n automaticScaling:\n coolDownPeriod: 120s\n cpuUtilization:\n targetUtilization: 0.5\n noopOnDestroy: true\n appengineNegBucket:\n type: gcp:storage:Bucket\n properties:\n location: US\n appengineNegBucketObject:\n type: gcp:storage:BucketObject\n properties:\n bucket: ${appengineNegBucket.name}\n source:\n fn::FileAsset: ./test-fixtures/appengine/hello-world.zip\n```\n{{% /example %}}\n{{% example %}}\n### Region Network Endpoint Group Psc\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pscNeg = new gcp.compute.RegionNetworkEndpointGroup(\"pscNeg\", {\n networkEndpointType: \"PRIVATE_SERVICE_CONNECT\",\n pscTargetService: \"asia-northeast3-cloudkms.googleapis.com\",\n region: \"asia-northeast3\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npsc_neg = gcp.compute.RegionNetworkEndpointGroup(\"pscNeg\",\n network_endpoint_type=\"PRIVATE_SERVICE_CONNECT\",\n psc_target_service=\"asia-northeast3-cloudkms.googleapis.com\",\n region=\"asia-northeast3\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pscNeg = new Gcp.Compute.RegionNetworkEndpointGroup(\"pscNeg\", new()\n {\n NetworkEndpointType = \"PRIVATE_SERVICE_CONNECT\",\n PscTargetService = \"asia-northeast3-cloudkms.googleapis.com\",\n Region = \"asia-northeast3\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionNetworkEndpointGroup(ctx, \"pscNeg\", \u0026compute.RegionNetworkEndpointGroupArgs{\n\t\t\tNetworkEndpointType: pulumi.String(\"PRIVATE_SERVICE_CONNECT\"),\n\t\t\tPscTargetService: pulumi.String(\"asia-northeast3-cloudkms.googleapis.com\"),\n\t\t\tRegion: pulumi.String(\"asia-northeast3\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pscNeg = new RegionNetworkEndpointGroup(\"pscNeg\", RegionNetworkEndpointGroupArgs.builder() \n .networkEndpointType(\"PRIVATE_SERVICE_CONNECT\")\n .pscTargetService(\"asia-northeast3-cloudkms.googleapis.com\")\n .region(\"asia-northeast3\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pscNeg:\n type: gcp:compute:RegionNetworkEndpointGroup\n properties:\n networkEndpointType: PRIVATE_SERVICE_CONNECT\n pscTargetService: asia-northeast3-cloudkms.googleapis.com\n region: asia-northeast3\n```\n{{% /example %}}\n{{% example %}}\n### Region Network Endpoint Group Psc Service Attachment\n\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.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.compute.HealthCheck;\nimport com.pulumi.gcp.compute.HealthCheckArgs;\nimport com.pulumi.gcp.compute.inputs.HealthCheckTcpHealthCheckArgs;\nimport com.pulumi.gcp.compute.RegionBackendService;\nimport com.pulumi.gcp.compute.RegionBackendServiceArgs;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.compute.ServiceAttachment;\nimport com.pulumi.gcp.compute.ServiceAttachmentArgs;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroup;\nimport com.pulumi.gcp.compute.RegionNetworkEndpointGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultNetwork = new Network(\"defaultNetwork\");\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.0.0/16\")\n .region(\"europe-west4\")\n .network(defaultNetwork.id())\n .build());\n\n var pscSubnetwork = new Subnetwork(\"pscSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.1.0.0/16\")\n .region(\"europe-west4\")\n .purpose(\"PRIVATE_SERVICE_CONNECT\")\n .network(defaultNetwork.id())\n .build());\n\n var defaultHealthCheck = new HealthCheck(\"defaultHealthCheck\", HealthCheckArgs.builder() \n .checkIntervalSec(1)\n .timeoutSec(1)\n .tcpHealthCheck(HealthCheckTcpHealthCheckArgs.builder()\n .port(\"80\")\n .build())\n .build());\n\n var defaultRegionBackendService = new RegionBackendService(\"defaultRegionBackendService\", RegionBackendServiceArgs.builder() \n .region(\"europe-west4\")\n .healthChecks(defaultHealthCheck.id())\n .build());\n\n var defaultForwardingRule = new ForwardingRule(\"defaultForwardingRule\", ForwardingRuleArgs.builder() \n .region(\"europe-west4\")\n .loadBalancingScheme(\"INTERNAL\")\n .backendService(defaultRegionBackendService.id())\n .allPorts(true)\n .network(defaultNetwork.name())\n .subnetwork(defaultSubnetwork.name())\n .build());\n\n var defaultServiceAttachment = new ServiceAttachment(\"defaultServiceAttachment\", ServiceAttachmentArgs.builder() \n .region(\"europe-west4\")\n .description(\"A service attachment configured with Terraform\")\n .enableProxyProtocol(false)\n .connectionPreference(\"ACCEPT_AUTOMATIC\")\n .natSubnets(pscSubnetwork.selfLink())\n .targetService(defaultForwardingRule.selfLink())\n .build());\n\n var pscNegServiceAttachment = new RegionNetworkEndpointGroup(\"pscNegServiceAttachment\", RegionNetworkEndpointGroupArgs.builder() \n .region(\"europe-west4\")\n .networkEndpointType(\"PRIVATE_SERVICE_CONNECT\")\n .pscTargetService(defaultServiceAttachment.selfLink())\n .network(defaultNetwork.selfLink())\n .subnetwork(defaultSubnetwork.selfLink())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultNetwork:\n type: gcp:compute:Network\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.0.0/16\n region: europe-west4\n network: ${defaultNetwork.id}\n pscSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.1.0.0/16\n region: europe-west4\n purpose: PRIVATE_SERVICE_CONNECT\n network: ${defaultNetwork.id}\n defaultHealthCheck:\n type: gcp:compute:HealthCheck\n properties:\n checkIntervalSec: 1\n timeoutSec: 1\n tcpHealthCheck:\n port: '80'\n defaultRegionBackendService:\n type: gcp:compute:RegionBackendService\n properties:\n region: europe-west4\n healthChecks:\n - ${defaultHealthCheck.id}\n defaultForwardingRule:\n type: gcp:compute:ForwardingRule\n properties:\n region: europe-west4\n loadBalancingScheme: INTERNAL\n backendService: ${defaultRegionBackendService.id}\n allPorts: true\n network: ${defaultNetwork.name}\n subnetwork: ${defaultSubnetwork.name}\n defaultServiceAttachment:\n type: gcp:compute:ServiceAttachment\n properties:\n region: europe-west4\n description: A service attachment configured with Terraform\n enableProxyProtocol: false\n connectionPreference: ACCEPT_AUTOMATIC\n natSubnets:\n - ${pscSubnetwork.selfLink}\n targetService: ${defaultForwardingRule.selfLink}\n pscNegServiceAttachment:\n type: gcp:compute:RegionNetworkEndpointGroup\n properties:\n region: europe-west4\n networkEndpointType: PRIVATE_SERVICE_CONNECT\n pscTargetService: ${defaultServiceAttachment.selfLink}\n network: ${defaultNetwork.selfLink}\n subnetwork: ${defaultSubnetwork.selfLink}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionNetworkEndpointGroup can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default projects/{{project}}/regions/{{region}}/networkEndpointGroups/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionNetworkEndpointGroup:RegionNetworkEndpointGroup default {{name}}\n```\n\n ", "properties": { "appEngine": { "$ref": "#/types/gcp:compute/RegionNetworkEndpointGroupAppEngine:RegionNetworkEndpointGroupAppEngine", @@ -140849,7 +142297,7 @@ } }, "gcp:compute/regionPerInstanceConfig:RegionPerInstanceConfig": { - "description": "A config defined for a single managed instance that belongs to an instance group manager. It preserves the instance name\nacross instance group manager operations and can define stateful disks or metadata that are unique to the instance.\nThis resource works with regional instance group managers.\n\nTo get more information about RegionPerInstanceConfig, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/instanceGroupManagers)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Stateful Rigm\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myImage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst igm_basic = new gcp.compute.InstanceTemplate(\"igm-basic\", {\n machineType: \"e2-medium\",\n canIpForward: false,\n tags: [\n \"foo\",\n \"bar\",\n ],\n disks: [{\n sourceImage: myImage.then(myImage =\u003e myImage.selfLink),\n autoDelete: true,\n boot: true,\n }],\n networkInterfaces: [{\n network: \"default\",\n }],\n serviceAccount: {\n scopes: [\n \"userinfo-email\",\n \"compute-ro\",\n \"storage-ro\",\n ],\n },\n});\nconst rigm = new gcp.compute.RegionInstanceGroupManager(\"rigm\", {\n description: \"Demo test instance group manager\",\n versions: [{\n name: \"prod\",\n instanceTemplate: igm_basic.selfLink,\n }],\n updatePolicy: {\n type: \"OPPORTUNISTIC\",\n instanceRedistributionType: \"NONE\",\n minimalAction: \"RESTART\",\n },\n baseInstanceName: \"rigm\",\n region: \"us-central1\",\n targetSize: 2,\n});\nconst _default = new gcp.compute.Disk(\"default\", {\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n image: \"debian-11-bullseye-v20220719\",\n physicalBlockSizeBytes: 4096,\n});\nconst withDisk = new gcp.compute.RegionPerInstanceConfig(\"withDisk\", {\n region: google_compute_region_instance_group_manager.igm.region,\n regionInstanceGroupManager: rigm.name,\n preservedState: {\n metadata: {\n foo: \"bar\",\n instance_template: igm_basic.selfLink,\n },\n disks: [{\n deviceName: \"my-stateful-disk\",\n source: _default.id,\n mode: \"READ_ONLY\",\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_image = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\nigm_basic = gcp.compute.InstanceTemplate(\"igm-basic\",\n machine_type=\"e2-medium\",\n can_ip_forward=False,\n tags=[\n \"foo\",\n \"bar\",\n ],\n disks=[gcp.compute.InstanceTemplateDiskArgs(\n source_image=my_image.self_link,\n auto_delete=True,\n boot=True,\n )],\n network_interfaces=[gcp.compute.InstanceTemplateNetworkInterfaceArgs(\n network=\"default\",\n )],\n service_account=gcp.compute.InstanceTemplateServiceAccountArgs(\n scopes=[\n \"userinfo-email\",\n \"compute-ro\",\n \"storage-ro\",\n ],\n ))\nrigm = gcp.compute.RegionInstanceGroupManager(\"rigm\",\n description=\"Demo test instance group manager\",\n versions=[gcp.compute.RegionInstanceGroupManagerVersionArgs(\n name=\"prod\",\n instance_template=igm_basic.self_link,\n )],\n update_policy=gcp.compute.RegionInstanceGroupManagerUpdatePolicyArgs(\n type=\"OPPORTUNISTIC\",\n instance_redistribution_type=\"NONE\",\n minimal_action=\"RESTART\",\n ),\n base_instance_name=\"rigm\",\n region=\"us-central1\",\n target_size=2)\ndefault = gcp.compute.Disk(\"default\",\n type=\"pd-ssd\",\n zone=\"us-central1-a\",\n image=\"debian-11-bullseye-v20220719\",\n physical_block_size_bytes=4096)\nwith_disk = gcp.compute.RegionPerInstanceConfig(\"withDisk\",\n region=google_compute_region_instance_group_manager[\"igm\"][\"region\"],\n region_instance_group_manager=rigm.name,\n preserved_state=gcp.compute.RegionPerInstanceConfigPreservedStateArgs(\n metadata={\n \"foo\": \"bar\",\n \"instance_template\": igm_basic.self_link,\n },\n disks=[gcp.compute.RegionPerInstanceConfigPreservedStateDiskArgs(\n device_name=\"my-stateful-disk\",\n source=default.id,\n mode=\"READ_ONLY\",\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myImage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var igm_basic = new Gcp.Compute.InstanceTemplate(\"igm-basic\", new()\n {\n MachineType = \"e2-medium\",\n CanIpForward = false,\n Tags = new[]\n {\n \"foo\",\n \"bar\",\n },\n Disks = new[]\n {\n new Gcp.Compute.Inputs.InstanceTemplateDiskArgs\n {\n SourceImage = myImage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n AutoDelete = true,\n Boot = true,\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceTemplateNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n ServiceAccount = new Gcp.Compute.Inputs.InstanceTemplateServiceAccountArgs\n {\n Scopes = new[]\n {\n \"userinfo-email\",\n \"compute-ro\",\n \"storage-ro\",\n },\n },\n });\n\n var rigm = new Gcp.Compute.RegionInstanceGroupManager(\"rigm\", new()\n {\n Description = \"Demo test instance group manager\",\n Versions = new[]\n {\n new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionArgs\n {\n Name = \"prod\",\n InstanceTemplate = igm_basic.SelfLink,\n },\n },\n UpdatePolicy = new Gcp.Compute.Inputs.RegionInstanceGroupManagerUpdatePolicyArgs\n {\n Type = \"OPPORTUNISTIC\",\n InstanceRedistributionType = \"NONE\",\n MinimalAction = \"RESTART\",\n },\n BaseInstanceName = \"rigm\",\n Region = \"us-central1\",\n TargetSize = 2,\n });\n\n var @default = new Gcp.Compute.Disk(\"default\", new()\n {\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n Image = \"debian-11-bullseye-v20220719\",\n PhysicalBlockSizeBytes = 4096,\n });\n\n var withDisk = new Gcp.Compute.RegionPerInstanceConfig(\"withDisk\", new()\n {\n Region = google_compute_region_instance_group_manager.Igm.Region,\n RegionInstanceGroupManager = rigm.Name,\n PreservedState = new Gcp.Compute.Inputs.RegionPerInstanceConfigPreservedStateArgs\n {\n Metadata = \n {\n { \"foo\", \"bar\" },\n { \"instance_template\", igm_basic.SelfLink },\n },\n Disks = new[]\n {\n new Gcp.Compute.Inputs.RegionPerInstanceConfigPreservedStateDiskArgs\n {\n DeviceName = \"my-stateful-disk\",\n Source = @default.Id,\n Mode = \"READ_ONLY\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tmyImage, 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.NewInstanceTemplate(ctx, \"igm-basic\", \u0026compute.InstanceTemplateArgs{\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tCanIpForward: pulumi.Bool(false),\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"foo\"),\n\t\t\t\tpulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tDisks: compute.InstanceTemplateDiskArray{\n\t\t\t\t\u0026compute.InstanceTemplateDiskArgs{\n\t\t\t\t\tSourceImage: *pulumi.String(myImage.SelfLink),\n\t\t\t\t\tAutoDelete: pulumi.Bool(true),\n\t\t\t\t\tBoot: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworkInterfaces: compute.InstanceTemplateNetworkInterfaceArray{\n\t\t\t\t\u0026compute.InstanceTemplateNetworkInterfaceArgs{\n\t\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tServiceAccount: \u0026compute.InstanceTemplateServiceAccountArgs{\n\t\t\t\tScopes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"userinfo-email\"),\n\t\t\t\t\tpulumi.String(\"compute-ro\"),\n\t\t\t\t\tpulumi.String(\"storage-ro\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\trigm, err := compute.NewRegionInstanceGroupManager(ctx, \"rigm\", \u0026compute.RegionInstanceGroupManagerArgs{\n\t\t\tDescription: pulumi.String(\"Demo test instance group manager\"),\n\t\t\tVersions: compute.RegionInstanceGroupManagerVersionArray{\n\t\t\t\t\u0026compute.RegionInstanceGroupManagerVersionArgs{\n\t\t\t\t\tName: pulumi.String(\"prod\"),\n\t\t\t\t\tInstanceTemplate: igm_basic.SelfLink,\n\t\t\t\t},\n\t\t\t},\n\t\t\tUpdatePolicy: \u0026compute.RegionInstanceGroupManagerUpdatePolicyArgs{\n\t\t\t\tType: pulumi.String(\"OPPORTUNISTIC\"),\n\t\t\t\tInstanceRedistributionType: pulumi.String(\"NONE\"),\n\t\t\t\tMinimalAction: pulumi.String(\"RESTART\"),\n\t\t\t},\n\t\t\tBaseInstanceName: pulumi.String(\"rigm\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tTargetSize: pulumi.Int(2),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewDisk(ctx, \"default\", \u0026compute.DiskArgs{\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tImage: pulumi.String(\"debian-11-bullseye-v20220719\"),\n\t\t\tPhysicalBlockSizeBytes: pulumi.Int(4096),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRegionPerInstanceConfig(ctx, \"withDisk\", \u0026compute.RegionPerInstanceConfigArgs{\n\t\t\tRegion: pulumi.Any(google_compute_region_instance_group_manager.Igm.Region),\n\t\t\tRegionInstanceGroupManager: rigm.Name,\n\t\t\tPreservedState: \u0026compute.RegionPerInstanceConfigPreservedStateArgs{\n\t\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t\t\t\"instance_template\": igm_basic.SelfLink,\n\t\t\t\t},\n\t\t\t\tDisks: compute.RegionPerInstanceConfigPreservedStateDiskArray{\n\t\t\t\t\t\u0026compute.RegionPerInstanceConfigPreservedStateDiskArgs{\n\t\t\t\t\t\tDeviceName: pulumi.String(\"my-stateful-disk\"),\n\t\t\t\t\t\tSource: _default.ID(),\n\t\t\t\t\t\tMode: pulumi.String(\"READ_ONLY\"),\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.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetImageArgs;\nimport com.pulumi.gcp.compute.InstanceTemplate;\nimport com.pulumi.gcp.compute.InstanceTemplateArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs;\nimport com.pulumi.gcp.compute.inputs.InstanceTemplateServiceAccountArgs;\nimport com.pulumi.gcp.compute.RegionInstanceGroupManager;\nimport com.pulumi.gcp.compute.RegionInstanceGroupManagerArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerVersionArgs;\nimport com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerUpdatePolicyArgs;\nimport com.pulumi.gcp.compute.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.RegionPerInstanceConfig;\nimport com.pulumi.gcp.compute.RegionPerInstanceConfigArgs;\nimport com.pulumi.gcp.compute.inputs.RegionPerInstanceConfigPreservedStateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 myImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var igm_basic = new InstanceTemplate(\"igm-basic\", InstanceTemplateArgs.builder() \n .machineType(\"e2-medium\")\n .canIpForward(false)\n .tags( \n \"foo\",\n \"bar\")\n .disks(InstanceTemplateDiskArgs.builder()\n .sourceImage(myImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .autoDelete(true)\n .boot(true)\n .build())\n .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .serviceAccount(InstanceTemplateServiceAccountArgs.builder()\n .scopes( \n \"userinfo-email\",\n \"compute-ro\",\n \"storage-ro\")\n .build())\n .build());\n\n var rigm = new RegionInstanceGroupManager(\"rigm\", RegionInstanceGroupManagerArgs.builder() \n .description(\"Demo test instance group manager\")\n .versions(RegionInstanceGroupManagerVersionArgs.builder()\n .name(\"prod\")\n .instanceTemplate(igm_basic.selfLink())\n .build())\n .updatePolicy(RegionInstanceGroupManagerUpdatePolicyArgs.builder()\n .type(\"OPPORTUNISTIC\")\n .instanceRedistributionType(\"NONE\")\n .minimalAction(\"RESTART\")\n .build())\n .baseInstanceName(\"rigm\")\n .region(\"us-central1\")\n .targetSize(2)\n .build());\n\n var default_ = new Disk(\"default\", DiskArgs.builder() \n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .image(\"debian-11-bullseye-v20220719\")\n .physicalBlockSizeBytes(4096)\n .build());\n\n var withDisk = new RegionPerInstanceConfig(\"withDisk\", RegionPerInstanceConfigArgs.builder() \n .region(google_compute_region_instance_group_manager.igm().region())\n .regionInstanceGroupManager(rigm.name())\n .preservedState(RegionPerInstanceConfigPreservedStateArgs.builder()\n .metadata(Map.ofEntries(\n Map.entry(\"foo\", \"bar\"),\n Map.entry(\"instance_template\", igm_basic.selfLink())\n ))\n .disks(RegionPerInstanceConfigPreservedStateDiskArgs.builder()\n .deviceName(\"my-stateful-disk\")\n .source(default_.id())\n .mode(\"READ_ONLY\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n igm-basic:\n type: gcp:compute:InstanceTemplate\n properties:\n machineType: e2-medium\n canIpForward: false\n tags:\n - foo\n - bar\n disks:\n - sourceImage: ${myImage.selfLink}\n autoDelete: true\n boot: true\n networkInterfaces:\n - network: default\n serviceAccount:\n scopes:\n - userinfo-email\n - compute-ro\n - storage-ro\n rigm:\n type: gcp:compute:RegionInstanceGroupManager\n properties:\n description: Demo test instance group manager\n versions:\n - name: prod\n instanceTemplate: ${[\"igm-basic\"].selfLink}\n updatePolicy:\n type: OPPORTUNISTIC\n instanceRedistributionType: NONE\n minimalAction: RESTART\n baseInstanceName: rigm\n region: us-central1\n targetSize: 2\n default:\n type: gcp:compute:Disk\n properties:\n type: pd-ssd\n zone: us-central1-a\n image: debian-11-bullseye-v20220719\n physicalBlockSizeBytes: 4096\n withDisk:\n type: gcp:compute:RegionPerInstanceConfig\n properties:\n region: ${google_compute_region_instance_group_manager.igm.region}\n regionInstanceGroupManager: ${rigm.name}\n preservedState:\n metadata:\n foo: bar\n instance_template: ${[\"igm-basic\"].selfLink}\n disks:\n - deviceName: my-stateful-disk\n source: ${default.id}\n mode: READ_ONLY\nvariables:\n myImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionPerInstanceConfig can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionPerInstanceConfig:RegionPerInstanceConfig default projects/{{project}}/regions/{{region}}/instanceGroupManagers/{{region_instance_group_manager}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionPerInstanceConfig:RegionPerInstanceConfig default {{project}}/{{region}}/{{region_instance_group_manager}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionPerInstanceConfig:RegionPerInstanceConfig default {{region}}/{{region_instance_group_manager}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionPerInstanceConfig:RegionPerInstanceConfig default {{region_instance_group_manager}}/{{name}}\n```\n\n ", + "description": "A config defined for a single managed instance that belongs to an instance group manager. It preserves the instance name\nacross instance group manager operations and can define stateful disks or metadata that are unique to the instance.\nThis resource works with regional instance group managers.\n\n\nTo get more information about RegionPerInstanceConfig, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/instanceGroupManagers)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs)\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nRegionPerInstanceConfig can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionPerInstanceConfig:RegionPerInstanceConfig default projects/{{project}}/regions/{{region}}/instanceGroupManagers/{{region_instance_group_manager}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionPerInstanceConfig:RegionPerInstanceConfig default {{project}}/{{region}}/{{region_instance_group_manager}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionPerInstanceConfig:RegionPerInstanceConfig default {{region}}/{{region_instance_group_manager}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionPerInstanceConfig:RegionPerInstanceConfig default {{region_instance_group_manager}}/{{name}}\n```\n\n ", "properties": { "minimalAction": { "type": "string", @@ -140975,7 +142423,7 @@ } }, "gcp:compute/regionSslCertificate:RegionSslCertificate": { - "description": "A RegionSslCertificate resource, used for HTTPS load balancing. This resource\nprovides a mechanism to upload an SSL key and certificate to\nthe load balancer to serve secure connections from the user.\n\n\nTo get more information about RegionSslCertificate, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionSslCertificates)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates)\n\n\u003e **Warning:** All arguments including `certificate` and `private_key` will be stored in the raw\nstate as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Ssl Certificate Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.RegionSslCertificate(\"default\", {\n region: \"us-central1\",\n namePrefix: \"my-certificate-\",\n description: \"a description\",\n privateKey: fs.readFileSync(\"path/to/private.key\"),\n certificate: fs.readFileSync(\"path/to/certificate.crt\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.RegionSslCertificate(\"default\",\n region=\"us-central1\",\n name_prefix=\"my-certificate-\",\n description=\"a description\",\n private_key=(lambda path: open(path).read())(\"path/to/private.key\"),\n certificate=(lambda path: open(path).read())(\"path/to/certificate.crt\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.RegionSslCertificate(\"default\", new()\n {\n Region = \"us-central1\",\n NamePrefix = \"my-certificate-\",\n Description = \"a description\",\n PrivateKey = File.ReadAllText(\"path/to/private.key\"),\n Certificate = File.ReadAllText(\"path/to/certificate.crt\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionSslCertificate(ctx, \"default\", \u0026compute.RegionSslCertificateArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNamePrefix: pulumi.String(\"my-certificate-\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tPrivateKey: readFileOrPanic(\"path/to/private.key\"),\n\t\t\tCertificate: readFileOrPanic(\"path/to/certificate.crt\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.RegionSslCertificate;\nimport com.pulumi.gcp.compute.RegionSslCertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionSslCertificate(\"default\", RegionSslCertificateArgs.builder() \n .region(\"us-central1\")\n .namePrefix(\"my-certificate-\")\n .description(\"a description\")\n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:RegionSslCertificate\n properties:\n region: us-central1\n namePrefix: my-certificate-\n description: a description\n privateKey:\n fn::readFile: path/to/private.key\n certificate:\n fn::readFile: path/to/certificate.crt\n```\n{{% /example %}}\n{{% example %}}\n### Region Ssl Certificate Random Provider\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as crypto from \"crypto\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nfunc computeFilebase64sha256(path string) string {\n\tconst fileData = Buffer.from(fs.readFileSync(path), 'binary')\n\treturn crypto.createHash('sha256').update(fileData).digest('hex')\n}\n\n// You may also want to control name generation explicitly:\nconst _default = new gcp.compute.RegionSslCertificate(\"default\", {\n region: \"us-central1\",\n privateKey: fs.readFileSync(\"path/to/private.key\"),\n certificate: fs.readFileSync(\"path/to/certificate.crt\"),\n});\nconst certificate = new random.RandomId(\"certificate\", {\n byteLength: 4,\n prefix: \"my-certificate-\",\n keepers: {\n private_key: computeFilebase64sha256(\"path/to/private.key\"),\n certificate: computeFilebase64sha256(\"path/to/certificate.crt\"),\n },\n});\n```\n```python\nimport pulumi\nimport base64\nimport hashlib\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ndef computeFilebase64sha256(path):\n\tfileData = open(path).read().encode()\n\thashedData = hashlib.sha256(fileData.encode()).digest()\n\treturn base64.b64encode(hashedData).decode()\n\n# You may also want to control name generation explicitly:\ndefault = gcp.compute.RegionSslCertificate(\"default\",\n region=\"us-central1\",\n private_key=(lambda path: open(path).read())(\"path/to/private.key\"),\n certificate=(lambda path: open(path).read())(\"path/to/certificate.crt\"))\ncertificate = random.RandomId(\"certificate\",\n byte_length=4,\n prefix=\"my-certificate-\",\n keepers={\n \"private_key\": computeFilebase64sha256(\"path/to/private.key\"),\n \"certificate\": computeFilebase64sha256(\"path/to/certificate.crt\"),\n })\n```\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Security.Cryptography;\nusing System.Text;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\n\tprivate static string ComputeFileBase64Sha256(string path) {\n\t\tvar fileData = Encoding.UTF8.GetBytes(File.ReadAllText(path));\n\t\tvar hashData = SHA256.Create().ComputeHash(fileData);\n\t\treturn Convert.ToBase64String(hashData);\n\t}\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // You may also want to control name generation explicitly:\n var @default = new Gcp.Compute.RegionSslCertificate(\"default\", new()\n {\n Region = \"us-central1\",\n PrivateKey = File.ReadAllText(\"path/to/private.key\"),\n Certificate = File.ReadAllText(\"path/to/certificate.crt\"),\n });\n\n var certificate = new Random.RandomId(\"certificate\", new()\n {\n ByteLength = 4,\n Prefix = \"my-certificate-\",\n Keepers = \n {\n { \"private_key\", ComputeFileBase64Sha256(\"path/to/private.key\") },\n { \"certificate\", ComputeFileBase64Sha256(\"path/to/certificate.crt\") },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"crypto/sha256\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64sha256OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := os.ReadFile(path); err == nil {\n\t\thashedData := sha256.Sum256([]byte(fileData))\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(hashedData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionSslCertificate(ctx, \"default\", \u0026compute.RegionSslCertificateArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPrivateKey: readFileOrPanic(\"path/to/private.key\"),\n\t\t\tCertificate: readFileOrPanic(\"path/to/certificate.crt\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = random.NewRandomId(ctx, \"certificate\", \u0026random.RandomIdArgs{\n\t\t\tByteLength: pulumi.Int(4),\n\t\t\tPrefix: pulumi.String(\"my-certificate-\"),\n\t\t\tKeepers: pulumi.AnyMap{\n\t\t\t\t\"private_key\": filebase64sha256OrPanic(\"path/to/private.key\"),\n\t\t\t\t\"certificate\": filebase64sha256OrPanic(\"path/to/certificate.crt\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.RegionSslCertificate;\nimport com.pulumi.gcp.compute.RegionSslCertificateArgs;\nimport com.pulumi.random.RandomId;\nimport com.pulumi.random.RandomIdArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionSslCertificate(\"default\", RegionSslCertificateArgs.builder() \n .region(\"us-central1\")\n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n var certificate = new RandomId(\"certificate\", RandomIdArgs.builder() \n .byteLength(4)\n .prefix(\"my-certificate-\")\n .keepers(Map.ofEntries(\n Map.entry(\"private_key\", computeFileBase64Sha256(\"path/to/private.key\")),\n Map.entry(\"certificate\", computeFileBase64Sha256(\"path/to/certificate.crt\"))\n ))\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Region Ssl Certificate Target Https Proxies\n\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.RegionSslCertificate;\nimport com.pulumi.gcp.compute.RegionSslCertificateArgs;\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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.RegionTargetHttpsProxy;\nimport com.pulumi.gcp.compute.RegionTargetHttpsProxyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultRegionSslCertificate = new RegionSslCertificate(\"defaultRegionSslCertificate\", RegionSslCertificateArgs.builder() \n .region(\"us-central1\")\n .namePrefix(\"my-certificate-\")\n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n var defaultRegionHealthCheck = new RegionHealthCheck(\"defaultRegionHealthCheck\", RegionHealthCheckArgs.builder() \n .region(\"us-central1\")\n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var defaultRegionBackendService = new RegionBackendService(\"defaultRegionBackendService\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .timeoutSec(10)\n .healthChecks(defaultRegionHealthCheck.id())\n .build());\n\n var defaultRegionUrlMap = new RegionUrlMap(\"defaultRegionUrlMap\", RegionUrlMapArgs.builder() \n .region(\"us-central1\")\n .description(\"a description\")\n .defaultService(defaultRegionBackendService.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultRegionBackendService.id())\n .pathRules(RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultRegionBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultRegionTargetHttpsProxy = new RegionTargetHttpsProxy(\"defaultRegionTargetHttpsProxy\", RegionTargetHttpsProxyArgs.builder() \n .region(\"us-central1\")\n .urlMap(defaultRegionUrlMap.id())\n .sslCertificates(defaultRegionSslCertificate.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Using with Region Target HTTPS Proxies\n # //\n # // SSL certificates cannot be updated after creation. In order to apply\n # // the specified configuration, the provider will destroy the existing\n # // resource and create a replacement. To effectively use an SSL\n # // certificate resource with a Target HTTPS Proxy resource, it's\n # // recommended to specify create_before_destroy in a lifecycle block.\n # // Either omit the Instance Template name attribute, specify a partial\n # // name with name_prefix, or use random_id resource. Example:\n defaultRegionSslCertificate:\n type: gcp:compute:RegionSslCertificate\n properties:\n region: us-central1\n namePrefix: my-certificate-\n privateKey:\n fn::readFile: path/to/private.key\n certificate:\n fn::readFile: path/to/certificate.crt\n defaultRegionTargetHttpsProxy:\n type: gcp:compute:RegionTargetHttpsProxy\n properties:\n region: us-central1\n urlMap: ${defaultRegionUrlMap.id}\n sslCertificates:\n - ${defaultRegionSslCertificate.id}\n defaultRegionUrlMap:\n type: gcp:compute:RegionUrlMap\n properties:\n region: us-central1\n description: a description\n defaultService: ${defaultRegionBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultRegionBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultRegionBackendService.id}\n defaultRegionBackendService:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n loadBalancingScheme: INTERNAL_MANAGED\n timeoutSec: 10\n healthChecks:\n - ${defaultRegionHealthCheck.id}\n defaultRegionHealthCheck:\n type: gcp:compute:RegionHealthCheck\n properties:\n region: us-central1\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionSslCertificate can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionSslCertificate:RegionSslCertificate default projects/{{project}}/regions/{{region}}/sslCertificates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionSslCertificate:RegionSslCertificate default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionSslCertificate:RegionSslCertificate default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionSslCertificate:RegionSslCertificate default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Ssl Certificate Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.RegionSslCertificate(\"default\", {\n region: \"us-central1\",\n namePrefix: \"my-certificate-\",\n description: \"a description\",\n privateKey: fs.readFileSync(\"path/to/private.key\"),\n certificate: fs.readFileSync(\"path/to/certificate.crt\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.RegionSslCertificate(\"default\",\n region=\"us-central1\",\n name_prefix=\"my-certificate-\",\n description=\"a description\",\n private_key=(lambda path: open(path).read())(\"path/to/private.key\"),\n certificate=(lambda path: open(path).read())(\"path/to/certificate.crt\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.RegionSslCertificate(\"default\", new()\n {\n Region = \"us-central1\",\n NamePrefix = \"my-certificate-\",\n Description = \"a description\",\n PrivateKey = File.ReadAllText(\"path/to/private.key\"),\n Certificate = File.ReadAllText(\"path/to/certificate.crt\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionSslCertificate(ctx, \"default\", \u0026compute.RegionSslCertificateArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNamePrefix: pulumi.String(\"my-certificate-\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tPrivateKey: readFileOrPanic(\"path/to/private.key\"),\n\t\t\tCertificate: readFileOrPanic(\"path/to/certificate.crt\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.RegionSslCertificate;\nimport com.pulumi.gcp.compute.RegionSslCertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionSslCertificate(\"default\", RegionSslCertificateArgs.builder() \n .region(\"us-central1\")\n .namePrefix(\"my-certificate-\")\n .description(\"a description\")\n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:RegionSslCertificate\n properties:\n region: us-central1\n namePrefix: my-certificate-\n description: a description\n privateKey:\n fn::readFile: path/to/private.key\n certificate:\n fn::readFile: path/to/certificate.crt\n```\n{{% /example %}}\n{{% example %}}\n### Region Ssl Certificate Random Provider\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as crypto from \"crypto\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nfunc computeFilebase64sha256(path string) string {\n\tconst fileData = Buffer.from(fs.readFileSync(path), 'binary')\n\treturn crypto.createHash('sha256').update(fileData).digest('hex')\n}\n\n// You may also want to control name generation explicitly:\nconst _default = new gcp.compute.RegionSslCertificate(\"default\", {\n region: \"us-central1\",\n privateKey: fs.readFileSync(\"path/to/private.key\"),\n certificate: fs.readFileSync(\"path/to/certificate.crt\"),\n});\nconst certificate = new random.RandomId(\"certificate\", {\n byteLength: 4,\n prefix: \"my-certificate-\",\n keepers: {\n private_key: computeFilebase64sha256(\"path/to/private.key\"),\n certificate: computeFilebase64sha256(\"path/to/certificate.crt\"),\n },\n});\n```\n```python\nimport pulumi\nimport base64\nimport hashlib\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ndef computeFilebase64sha256(path):\n\tfileData = open(path).read().encode()\n\thashedData = hashlib.sha256(fileData.encode()).digest()\n\treturn base64.b64encode(hashedData).decode()\n\n# You may also want to control name generation explicitly:\ndefault = gcp.compute.RegionSslCertificate(\"default\",\n region=\"us-central1\",\n private_key=(lambda path: open(path).read())(\"path/to/private.key\"),\n certificate=(lambda path: open(path).read())(\"path/to/certificate.crt\"))\ncertificate = random.RandomId(\"certificate\",\n byte_length=4,\n prefix=\"my-certificate-\",\n keepers={\n \"private_key\": computeFilebase64sha256(\"path/to/private.key\"),\n \"certificate\": computeFilebase64sha256(\"path/to/certificate.crt\"),\n })\n```\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Security.Cryptography;\nusing System.Text;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\n\tprivate static string ComputeFileBase64Sha256(string path) {\n\t\tvar fileData = Encoding.UTF8.GetBytes(File.ReadAllText(path));\n\t\tvar hashData = SHA256.Create().ComputeHash(fileData);\n\t\treturn Convert.ToBase64String(hashData);\n\t}\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // You may also want to control name generation explicitly:\n var @default = new Gcp.Compute.RegionSslCertificate(\"default\", new()\n {\n Region = \"us-central1\",\n PrivateKey = File.ReadAllText(\"path/to/private.key\"),\n Certificate = File.ReadAllText(\"path/to/certificate.crt\"),\n });\n\n var certificate = new Random.RandomId(\"certificate\", new()\n {\n ByteLength = 4,\n Prefix = \"my-certificate-\",\n Keepers = \n {\n { \"private_key\", ComputeFileBase64Sha256(\"path/to/private.key\") },\n { \"certificate\", ComputeFileBase64Sha256(\"path/to/certificate.crt\") },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"crypto/sha256\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64sha256OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := os.ReadFile(path); err == nil {\n\t\thashedData := sha256.Sum256([]byte(fileData))\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(hashedData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewRegionSslCertificate(ctx, \"default\", \u0026compute.RegionSslCertificateArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPrivateKey: readFileOrPanic(\"path/to/private.key\"),\n\t\t\tCertificate: readFileOrPanic(\"path/to/certificate.crt\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = random.NewRandomId(ctx, \"certificate\", \u0026random.RandomIdArgs{\n\t\t\tByteLength: pulumi.Int(4),\n\t\t\tPrefix: pulumi.String(\"my-certificate-\"),\n\t\t\tKeepers: pulumi.AnyMap{\n\t\t\t\t\"private_key\": filebase64sha256OrPanic(\"path/to/private.key\"),\n\t\t\t\t\"certificate\": filebase64sha256OrPanic(\"path/to/certificate.crt\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.RegionSslCertificate;\nimport com.pulumi.gcp.compute.RegionSslCertificateArgs;\nimport com.pulumi.random.RandomId;\nimport com.pulumi.random.RandomIdArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionSslCertificate(\"default\", RegionSslCertificateArgs.builder() \n .region(\"us-central1\")\n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n var certificate = new RandomId(\"certificate\", RandomIdArgs.builder() \n .byteLength(4)\n .prefix(\"my-certificate-\")\n .keepers(Map.ofEntries(\n Map.entry(\"private_key\", computeFileBase64Sha256(\"path/to/private.key\")),\n Map.entry(\"certificate\", computeFileBase64Sha256(\"path/to/certificate.crt\"))\n ))\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Region Ssl Certificate Target Https Proxies\n\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.RegionSslCertificate;\nimport com.pulumi.gcp.compute.RegionSslCertificateArgs;\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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.RegionTargetHttpsProxy;\nimport com.pulumi.gcp.compute.RegionTargetHttpsProxyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultRegionSslCertificate = new RegionSslCertificate(\"defaultRegionSslCertificate\", RegionSslCertificateArgs.builder() \n .region(\"us-central1\")\n .namePrefix(\"my-certificate-\")\n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n var defaultRegionHealthCheck = new RegionHealthCheck(\"defaultRegionHealthCheck\", RegionHealthCheckArgs.builder() \n .region(\"us-central1\")\n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var defaultRegionBackendService = new RegionBackendService(\"defaultRegionBackendService\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .timeoutSec(10)\n .healthChecks(defaultRegionHealthCheck.id())\n .build());\n\n var defaultRegionUrlMap = new RegionUrlMap(\"defaultRegionUrlMap\", RegionUrlMapArgs.builder() \n .region(\"us-central1\")\n .description(\"a description\")\n .defaultService(defaultRegionBackendService.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultRegionBackendService.id())\n .pathRules(RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultRegionBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultRegionTargetHttpsProxy = new RegionTargetHttpsProxy(\"defaultRegionTargetHttpsProxy\", RegionTargetHttpsProxyArgs.builder() \n .region(\"us-central1\")\n .urlMap(defaultRegionUrlMap.id())\n .sslCertificates(defaultRegionSslCertificate.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Using with Region Target HTTPS Proxies\n # //\n # // SSL certificates cannot be updated after creation. In order to apply\n # // the specified configuration, Terraform will destroy the existing\n # // resource and create a replacement. To effectively use an SSL\n # // certificate resource with a Target HTTPS Proxy resource, it's\n # // recommended to specify create_before_destroy in a lifecycle block.\n # // Either omit the Instance Template name attribute, specify a partial\n # // name with name_prefix, or use random_id resource. Example:\n defaultRegionSslCertificate:\n type: gcp:compute:RegionSslCertificate\n properties:\n region: us-central1\n namePrefix: my-certificate-\n privateKey:\n fn::readFile: path/to/private.key\n certificate:\n fn::readFile: path/to/certificate.crt\n defaultRegionTargetHttpsProxy:\n type: gcp:compute:RegionTargetHttpsProxy\n properties:\n region: us-central1\n urlMap: ${defaultRegionUrlMap.id}\n sslCertificates:\n - ${defaultRegionSslCertificate.id}\n defaultRegionUrlMap:\n type: gcp:compute:RegionUrlMap\n properties:\n region: us-central1\n description: a description\n defaultService: ${defaultRegionBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultRegionBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultRegionBackendService.id}\n defaultRegionBackendService:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n loadBalancingScheme: INTERNAL_MANAGED\n timeoutSec: 10\n healthChecks:\n - ${defaultRegionHealthCheck.id}\n defaultRegionHealthCheck:\n type: gcp:compute:RegionHealthCheck\n properties:\n region: us-central1\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionSslCertificate can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionSslCertificate:RegionSslCertificate default projects/{{project}}/regions/{{region}}/sslCertificates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionSslCertificate:RegionSslCertificate default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionSslCertificate:RegionSslCertificate default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionSslCertificate:RegionSslCertificate default {{name}}\n```\n\n ", "properties": { "certificate": { "type": "string", @@ -141304,7 +142752,7 @@ } }, "gcp:compute/regionTargetHttpProxy:RegionTargetHttpProxy": { - "description": "Represents a RegionTargetHttpProxy resource, which is used by one or more\nforwarding rules to route incoming HTTP requests to a URL map.\n\nTo get more information about RegionTargetHttpProxy, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionTargetHttpProxies)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/load-balancing/http/target-proxies)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Target Http Proxy Basic\n\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.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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.RegionTargetHttpProxy;\nimport com.pulumi.gcp.compute.RegionTargetHttpProxyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultRegionHealthCheck = new RegionHealthCheck(\"defaultRegionHealthCheck\", RegionHealthCheckArgs.builder() \n .region(\"us-central1\")\n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var defaultRegionBackendService = new RegionBackendService(\"defaultRegionBackendService\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .healthChecks(defaultRegionHealthCheck.id())\n .build());\n\n var defaultRegionUrlMap = new RegionUrlMap(\"defaultRegionUrlMap\", RegionUrlMapArgs.builder() \n .region(\"us-central1\")\n .defaultService(defaultRegionBackendService.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultRegionBackendService.id())\n .pathRules(RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultRegionBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultRegionTargetHttpProxy = new RegionTargetHttpProxy(\"defaultRegionTargetHttpProxy\", RegionTargetHttpProxyArgs.builder() \n .region(\"us-central1\")\n .urlMap(defaultRegionUrlMap.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultRegionTargetHttpProxy:\n type: gcp:compute:RegionTargetHttpProxy\n properties:\n region: us-central1\n urlMap: ${defaultRegionUrlMap.id}\n defaultRegionUrlMap:\n type: gcp:compute:RegionUrlMap\n properties:\n region: us-central1\n defaultService: ${defaultRegionBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultRegionBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultRegionBackendService.id}\n defaultRegionBackendService:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n timeoutSec: 10\n loadBalancingScheme: INTERNAL_MANAGED\n healthChecks:\n - ${defaultRegionHealthCheck.id}\n defaultRegionHealthCheck:\n type: gcp:compute:RegionHealthCheck\n properties:\n region: us-central1\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% example %}}\n### Region Target Http Proxy Https Redirect\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultRegionUrlMap = new gcp.compute.RegionUrlMap(\"defaultRegionUrlMap\", {\n region: \"us-central1\",\n defaultUrlRedirect: {\n httpsRedirect: true,\n stripQuery: false,\n },\n});\nconst defaultRegionTargetHttpProxy = new gcp.compute.RegionTargetHttpProxy(\"defaultRegionTargetHttpProxy\", {\n region: \"us-central1\",\n urlMap: defaultRegionUrlMap.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_region_url_map = gcp.compute.RegionUrlMap(\"defaultRegionUrlMap\",\n region=\"us-central1\",\n default_url_redirect=gcp.compute.RegionUrlMapDefaultUrlRedirectArgs(\n https_redirect=True,\n strip_query=False,\n ))\ndefault_region_target_http_proxy = gcp.compute.RegionTargetHttpProxy(\"defaultRegionTargetHttpProxy\",\n region=\"us-central1\",\n url_map=default_region_url_map.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultRegionUrlMap = new Gcp.Compute.RegionUrlMap(\"defaultRegionUrlMap\", new()\n {\n Region = \"us-central1\",\n DefaultUrlRedirect = new Gcp.Compute.Inputs.RegionUrlMapDefaultUrlRedirectArgs\n {\n HttpsRedirect = true,\n StripQuery = false,\n },\n });\n\n var defaultRegionTargetHttpProxy = new Gcp.Compute.RegionTargetHttpProxy(\"defaultRegionTargetHttpProxy\", new()\n {\n Region = \"us-central1\",\n UrlMap = defaultRegionUrlMap.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdefaultRegionUrlMap, err := compute.NewRegionUrlMap(ctx, \"defaultRegionUrlMap\", \u0026compute.RegionUrlMapArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDefaultUrlRedirect: \u0026compute.RegionUrlMapDefaultUrlRedirectArgs{\n\t\t\t\tHttpsRedirect: pulumi.Bool(true),\n\t\t\t\tStripQuery: 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\t_, err = compute.NewRegionTargetHttpProxy(ctx, \"defaultRegionTargetHttpProxy\", \u0026compute.RegionTargetHttpProxyArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tUrlMap: defaultRegionUrlMap.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.RegionUrlMap;\nimport com.pulumi.gcp.compute.RegionUrlMapArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultUrlRedirectArgs;\nimport com.pulumi.gcp.compute.RegionTargetHttpProxy;\nimport com.pulumi.gcp.compute.RegionTargetHttpProxyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultRegionUrlMap = new RegionUrlMap(\"defaultRegionUrlMap\", RegionUrlMapArgs.builder() \n .region(\"us-central1\")\n .defaultUrlRedirect(RegionUrlMapDefaultUrlRedirectArgs.builder()\n .httpsRedirect(true)\n .stripQuery(false)\n .build())\n .build());\n\n var defaultRegionTargetHttpProxy = new RegionTargetHttpProxy(\"defaultRegionTargetHttpProxy\", RegionTargetHttpProxyArgs.builder() \n .region(\"us-central1\")\n .urlMap(defaultRegionUrlMap.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultRegionTargetHttpProxy:\n type: gcp:compute:RegionTargetHttpProxy\n properties:\n region: us-central1\n urlMap: ${defaultRegionUrlMap.id}\n defaultRegionUrlMap:\n type: gcp:compute:RegionUrlMap\n properties:\n region: us-central1\n defaultUrlRedirect:\n httpsRedirect: true\n stripQuery: false\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionTargetHttpProxy can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpProxy:RegionTargetHttpProxy default projects/{{project}}/regions/{{region}}/targetHttpProxies/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpProxy:RegionTargetHttpProxy default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpProxy:RegionTargetHttpProxy default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpProxy:RegionTargetHttpProxy default {{name}}\n```\n\n ", + "description": "Represents a RegionTargetHttpProxy resource, which is used by one or more\nforwarding rules to route incoming HTTP requests to a URL map.\n\n\nTo get more information about RegionTargetHttpProxy, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionTargetHttpProxies)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/load-balancing/http/target-proxies)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Target Http Proxy Basic\n\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.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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.RegionTargetHttpProxy;\nimport com.pulumi.gcp.compute.RegionTargetHttpProxyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultRegionHealthCheck = new RegionHealthCheck(\"defaultRegionHealthCheck\", RegionHealthCheckArgs.builder() \n .region(\"us-central1\")\n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var defaultRegionBackendService = new RegionBackendService(\"defaultRegionBackendService\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .healthChecks(defaultRegionHealthCheck.id())\n .build());\n\n var defaultRegionUrlMap = new RegionUrlMap(\"defaultRegionUrlMap\", RegionUrlMapArgs.builder() \n .region(\"us-central1\")\n .defaultService(defaultRegionBackendService.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultRegionBackendService.id())\n .pathRules(RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultRegionBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultRegionTargetHttpProxy = new RegionTargetHttpProxy(\"defaultRegionTargetHttpProxy\", RegionTargetHttpProxyArgs.builder() \n .region(\"us-central1\")\n .urlMap(defaultRegionUrlMap.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultRegionTargetHttpProxy:\n type: gcp:compute:RegionTargetHttpProxy\n properties:\n region: us-central1\n urlMap: ${defaultRegionUrlMap.id}\n defaultRegionUrlMap:\n type: gcp:compute:RegionUrlMap\n properties:\n region: us-central1\n defaultService: ${defaultRegionBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultRegionBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultRegionBackendService.id}\n defaultRegionBackendService:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n timeoutSec: 10\n loadBalancingScheme: INTERNAL_MANAGED\n healthChecks:\n - ${defaultRegionHealthCheck.id}\n defaultRegionHealthCheck:\n type: gcp:compute:RegionHealthCheck\n properties:\n region: us-central1\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% example %}}\n### Region Target Http Proxy Https Redirect\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultRegionUrlMap = new gcp.compute.RegionUrlMap(\"defaultRegionUrlMap\", {\n region: \"us-central1\",\n defaultUrlRedirect: {\n httpsRedirect: true,\n stripQuery: false,\n },\n});\nconst defaultRegionTargetHttpProxy = new gcp.compute.RegionTargetHttpProxy(\"defaultRegionTargetHttpProxy\", {\n region: \"us-central1\",\n urlMap: defaultRegionUrlMap.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_region_url_map = gcp.compute.RegionUrlMap(\"defaultRegionUrlMap\",\n region=\"us-central1\",\n default_url_redirect=gcp.compute.RegionUrlMapDefaultUrlRedirectArgs(\n https_redirect=True,\n strip_query=False,\n ))\ndefault_region_target_http_proxy = gcp.compute.RegionTargetHttpProxy(\"defaultRegionTargetHttpProxy\",\n region=\"us-central1\",\n url_map=default_region_url_map.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultRegionUrlMap = new Gcp.Compute.RegionUrlMap(\"defaultRegionUrlMap\", new()\n {\n Region = \"us-central1\",\n DefaultUrlRedirect = new Gcp.Compute.Inputs.RegionUrlMapDefaultUrlRedirectArgs\n {\n HttpsRedirect = true,\n StripQuery = false,\n },\n });\n\n var defaultRegionTargetHttpProxy = new Gcp.Compute.RegionTargetHttpProxy(\"defaultRegionTargetHttpProxy\", new()\n {\n Region = \"us-central1\",\n UrlMap = defaultRegionUrlMap.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdefaultRegionUrlMap, err := compute.NewRegionUrlMap(ctx, \"defaultRegionUrlMap\", \u0026compute.RegionUrlMapArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tDefaultUrlRedirect: \u0026compute.RegionUrlMapDefaultUrlRedirectArgs{\n\t\t\t\tHttpsRedirect: pulumi.Bool(true),\n\t\t\t\tStripQuery: 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\t_, err = compute.NewRegionTargetHttpProxy(ctx, \"defaultRegionTargetHttpProxy\", \u0026compute.RegionTargetHttpProxyArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tUrlMap: defaultRegionUrlMap.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.RegionUrlMap;\nimport com.pulumi.gcp.compute.RegionUrlMapArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultUrlRedirectArgs;\nimport com.pulumi.gcp.compute.RegionTargetHttpProxy;\nimport com.pulumi.gcp.compute.RegionTargetHttpProxyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultRegionUrlMap = new RegionUrlMap(\"defaultRegionUrlMap\", RegionUrlMapArgs.builder() \n .region(\"us-central1\")\n .defaultUrlRedirect(RegionUrlMapDefaultUrlRedirectArgs.builder()\n .httpsRedirect(true)\n .stripQuery(false)\n .build())\n .build());\n\n var defaultRegionTargetHttpProxy = new RegionTargetHttpProxy(\"defaultRegionTargetHttpProxy\", RegionTargetHttpProxyArgs.builder() \n .region(\"us-central1\")\n .urlMap(defaultRegionUrlMap.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultRegionTargetHttpProxy:\n type: gcp:compute:RegionTargetHttpProxy\n properties:\n region: us-central1\n urlMap: ${defaultRegionUrlMap.id}\n defaultRegionUrlMap:\n type: gcp:compute:RegionUrlMap\n properties:\n region: us-central1\n defaultUrlRedirect:\n httpsRedirect: true\n stripQuery: false\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionTargetHttpProxy can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpProxy:RegionTargetHttpProxy default projects/{{project}}/regions/{{region}}/targetHttpProxies/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpProxy:RegionTargetHttpProxy default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpProxy:RegionTargetHttpProxy default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpProxy:RegionTargetHttpProxy default {{name}}\n```\n\n ", "properties": { "creationTimestamp": { "type": "string", @@ -141421,7 +142869,7 @@ } }, "gcp:compute/regionTargetHttpsProxy:RegionTargetHttpsProxy": { - "description": "Represents a RegionTargetHttpsProxy resource, which is used by one or more\nforwarding rules to route incoming HTTPS requests to a URL map.\n\nTo get more information about RegionTargetHttpsProxy, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionTargetHttpsProxies)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/load-balancing/http/target-proxies)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Target Https Proxy Basic\n\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.RegionSslCertificate;\nimport com.pulumi.gcp.compute.RegionSslCertificateArgs;\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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.RegionTargetHttpsProxy;\nimport com.pulumi.gcp.compute.RegionTargetHttpsProxyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultRegionSslCertificate = new RegionSslCertificate(\"defaultRegionSslCertificate\", RegionSslCertificateArgs.builder() \n .region(\"us-central1\")\n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n var defaultRegionHealthCheck = new RegionHealthCheck(\"defaultRegionHealthCheck\", RegionHealthCheckArgs.builder() \n .region(\"us-central1\")\n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var defaultRegionBackendService = new RegionBackendService(\"defaultRegionBackendService\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .timeoutSec(10)\n .healthChecks(defaultRegionHealthCheck.id())\n .build());\n\n var defaultRegionUrlMap = new RegionUrlMap(\"defaultRegionUrlMap\", RegionUrlMapArgs.builder() \n .region(\"us-central1\")\n .description(\"a description\")\n .defaultService(defaultRegionBackendService.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultRegionBackendService.id())\n .pathRules(RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultRegionBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultRegionTargetHttpsProxy = new RegionTargetHttpsProxy(\"defaultRegionTargetHttpsProxy\", RegionTargetHttpsProxyArgs.builder() \n .region(\"us-central1\")\n .urlMap(defaultRegionUrlMap.id())\n .sslCertificates(defaultRegionSslCertificate.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultRegionTargetHttpsProxy:\n type: gcp:compute:RegionTargetHttpsProxy\n properties:\n region: us-central1\n urlMap: ${defaultRegionUrlMap.id}\n sslCertificates:\n - ${defaultRegionSslCertificate.id}\n defaultRegionSslCertificate:\n type: gcp:compute:RegionSslCertificate\n properties:\n region: us-central1\n privateKey:\n fn::readFile: path/to/private.key\n certificate:\n fn::readFile: path/to/certificate.crt\n defaultRegionUrlMap:\n type: gcp:compute:RegionUrlMap\n properties:\n region: us-central1\n description: a description\n defaultService: ${defaultRegionBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultRegionBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultRegionBackendService.id}\n defaultRegionBackendService:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n loadBalancingScheme: INTERNAL_MANAGED\n timeoutSec: 10\n healthChecks:\n - ${defaultRegionHealthCheck.id}\n defaultRegionHealthCheck:\n type: gcp:compute:RegionHealthCheck\n properties:\n region: us-central1\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionTargetHttpsProxy can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpsProxy:RegionTargetHttpsProxy default projects/{{project}}/regions/{{region}}/targetHttpsProxies/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpsProxy:RegionTargetHttpsProxy default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpsProxy:RegionTargetHttpsProxy default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpsProxy:RegionTargetHttpsProxy default {{name}}\n```\n\n ", + "description": "Represents a RegionTargetHttpsProxy resource, which is used by one or more\nforwarding rules to route incoming HTTPS requests to a URL map.\n\n\nTo get more information about RegionTargetHttpsProxy, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionTargetHttpsProxies)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/load-balancing/http/target-proxies)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Target Https Proxy Basic\n\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.RegionSslCertificate;\nimport com.pulumi.gcp.compute.RegionSslCertificateArgs;\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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.RegionTargetHttpsProxy;\nimport com.pulumi.gcp.compute.RegionTargetHttpsProxyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultRegionSslCertificate = new RegionSslCertificate(\"defaultRegionSslCertificate\", RegionSslCertificateArgs.builder() \n .region(\"us-central1\")\n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n var defaultRegionHealthCheck = new RegionHealthCheck(\"defaultRegionHealthCheck\", RegionHealthCheckArgs.builder() \n .region(\"us-central1\")\n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var defaultRegionBackendService = new RegionBackendService(\"defaultRegionBackendService\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .timeoutSec(10)\n .healthChecks(defaultRegionHealthCheck.id())\n .build());\n\n var defaultRegionUrlMap = new RegionUrlMap(\"defaultRegionUrlMap\", RegionUrlMapArgs.builder() \n .region(\"us-central1\")\n .description(\"a description\")\n .defaultService(defaultRegionBackendService.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultRegionBackendService.id())\n .pathRules(RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultRegionBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultRegionTargetHttpsProxy = new RegionTargetHttpsProxy(\"defaultRegionTargetHttpsProxy\", RegionTargetHttpsProxyArgs.builder() \n .region(\"us-central1\")\n .urlMap(defaultRegionUrlMap.id())\n .sslCertificates(defaultRegionSslCertificate.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultRegionTargetHttpsProxy:\n type: gcp:compute:RegionTargetHttpsProxy\n properties:\n region: us-central1\n urlMap: ${defaultRegionUrlMap.id}\n sslCertificates:\n - ${defaultRegionSslCertificate.id}\n defaultRegionSslCertificate:\n type: gcp:compute:RegionSslCertificate\n properties:\n region: us-central1\n privateKey:\n fn::readFile: path/to/private.key\n certificate:\n fn::readFile: path/to/certificate.crt\n defaultRegionUrlMap:\n type: gcp:compute:RegionUrlMap\n properties:\n region: us-central1\n description: a description\n defaultService: ${defaultRegionBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultRegionBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultRegionBackendService.id}\n defaultRegionBackendService:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n loadBalancingScheme: INTERNAL_MANAGED\n timeoutSec: 10\n healthChecks:\n - ${defaultRegionHealthCheck.id}\n defaultRegionHealthCheck:\n type: gcp:compute:RegionHealthCheck\n properties:\n region: us-central1\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionTargetHttpsProxy can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpsProxy:RegionTargetHttpsProxy default projects/{{project}}/regions/{{region}}/targetHttpsProxies/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpsProxy:RegionTargetHttpsProxy default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpsProxy:RegionTargetHttpsProxy default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionTargetHttpsProxy:RegionTargetHttpsProxy default {{name}}\n```\n\n ", "properties": { "creationTimestamp": { "type": "string", @@ -141723,7 +143171,7 @@ } }, "gcp:compute/regionUrlMap:RegionUrlMap": { - "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{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Url Map Basic\n\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.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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionHealthCheck(\"default\", RegionHealthCheckArgs.builder() \n .region(\"us-central1\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .requestPath(\"/\")\n .build())\n .build());\n\n var login = new RegionBackendService(\"login\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .build());\n\n var home = new RegionBackendService(\"home\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .build());\n\n var regionurlmap = new RegionUrlMap(\"regionurlmap\", RegionUrlMapArgs.builder() \n .region(\"us-central1\")\n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .pathRules( \n RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .service(home.id())\n .build(),\n RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/login\")\n .service(login.id())\n .build())\n .build())\n .tests(RegionUrlMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionurlmap:\n type: gcp:compute:RegionUrlMap\n properties:\n region: us-central1\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 service: ${home.id}\n - paths:\n - /login\n service: ${login.id}\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n login:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n loadBalancingScheme: INTERNAL_MANAGED\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n home:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n loadBalancingScheme: INTERNAL_MANAGED\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n default:\n type: gcp:compute:RegionHealthCheck\n properties:\n region: us-central1\n checkIntervalSec: 1\n timeoutSec: 1\n httpHealthCheck:\n port: 80\n requestPath: /\n```\n{{% /example %}}\n{{% example %}}\n### Region Url Map Default Route Action\n\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.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.inputs.RegionUrlMapDefaultRouteActionArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionRetryPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionRetryPolicyPerTryTimeoutArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionRequestMirrorPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionUrlRewriteArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionCorsPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionFaultInjectionPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelayArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelayFixedDelayArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionFaultInjectionPolicyAbortArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionTimeoutArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionHealthCheck(\"default\", RegionHealthCheckArgs.builder() \n .region(\"us-central1\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .requestPath(\"/\")\n .build())\n .build());\n\n var login = new RegionBackendService(\"login\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .build());\n\n var home = new RegionBackendService(\"home\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .build());\n\n var regionurlmap = new RegionUrlMap(\"regionurlmap\", RegionUrlMapArgs.builder() \n .region(\"us-central1\")\n .description(\"a description\")\n .defaultRouteAction(RegionUrlMapDefaultRouteActionArgs.builder()\n .retryPolicy(RegionUrlMapDefaultRouteActionRetryPolicyArgs.builder()\n .retryConditions( \n \"5xx\",\n \"gateway-error\")\n .numRetries(3)\n .perTryTimeout(RegionUrlMapDefaultRouteActionRetryPolicyPerTryTimeoutArgs.builder()\n .seconds(0)\n .nanos(500)\n .build())\n .build())\n .requestMirrorPolicy(RegionUrlMapDefaultRouteActionRequestMirrorPolicyArgs.builder()\n .backendService(home.id())\n .build())\n .weightedBackendServices( \n RegionUrlMapDefaultRouteActionWeightedBackendServiceArgs.builder()\n .backendService(login.id())\n .weight(200)\n .headerAction(RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionArgs.builder()\n .requestHeadersToAdds(RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"foo-request-1\")\n .headerValue(\"bar\")\n .replace(true)\n .build())\n .requestHeadersToRemoves(\"fizz\")\n .responseHeadersToAdds(RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"foo-response-1\")\n .headerValue(\"bar\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"buzz\")\n .build())\n .build(),\n RegionUrlMapDefaultRouteActionWeightedBackendServiceArgs.builder()\n .backendService(home.id())\n .weight(100)\n .headerAction(RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionArgs.builder()\n .requestHeadersToAdds( \n RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"foo-request-1\")\n .headerValue(\"bar\")\n .replace(true)\n .build(),\n RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"foo-request-2\")\n .headerValue(\"bar\")\n .replace(true)\n .build())\n .requestHeadersToRemoves(\"fizz\")\n .responseHeadersToAdds( \n RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"foo-response-2\")\n .headerValue(\"bar\")\n .replace(true)\n .build(),\n RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"foo-response-1\")\n .headerValue(\"bar\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"buzz\")\n .build())\n .build())\n .urlRewrite(RegionUrlMapDefaultRouteActionUrlRewriteArgs.builder()\n .hostRewrite(\"dev.example.com\")\n .pathPrefixRewrite(\"/v1/api/\")\n .build())\n .corsPolicy(RegionUrlMapDefaultRouteActionCorsPolicyArgs.builder()\n .disabled(false)\n .allowCredentials(true)\n .allowHeaders(\"foobar\")\n .allowMethods( \n \"GET\",\n \"POST\")\n .allowOrigins(\"example.com\")\n .exposeHeaders(\"foobar\")\n .maxAge(60)\n .build())\n .faultInjectionPolicy(RegionUrlMapDefaultRouteActionFaultInjectionPolicyArgs.builder()\n .delay(RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelayArgs.builder()\n .fixedDelay(RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelayFixedDelayArgs.builder()\n .seconds(0)\n .nanos(500)\n .build())\n .percentage(0.5)\n .build())\n .abort(RegionUrlMapDefaultRouteActionFaultInjectionPolicyAbortArgs.builder()\n .httpStatus(500)\n .percentage(0.5)\n .build())\n .build())\n .timeout(RegionUrlMapDefaultRouteActionTimeoutArgs.builder()\n .seconds(0)\n .nanos(500)\n .build())\n .build())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .pathRules( \n RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .service(home.id())\n .build(),\n RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/login\")\n .service(login.id())\n .build())\n .build())\n .tests(RegionUrlMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionurlmap:\n type: gcp:compute:RegionUrlMap\n properties:\n region: us-central1\n description: a description\n defaultRouteAction:\n retryPolicy:\n retryConditions:\n - 5xx\n - gateway-error\n numRetries: 3\n perTryTimeout:\n seconds: 0\n nanos: 500\n requestMirrorPolicy:\n backendService: ${home.id}\n weightedBackendServices:\n - backendService: ${login.id}\n weight: 200\n headerAction:\n requestHeadersToAdds:\n - headerName: foo-request-1\n headerValue: bar\n replace: true\n requestHeadersToRemoves:\n - fizz\n responseHeadersToAdds:\n - headerName: foo-response-1\n headerValue: bar\n replace: true\n responseHeadersToRemoves:\n - buzz\n - backendService: ${home.id}\n weight: 100\n headerAction:\n requestHeadersToAdds:\n - headerName: foo-request-1\n headerValue: bar\n replace: true\n - headerName: foo-request-2\n headerValue: bar\n replace: true\n requestHeadersToRemoves:\n - fizz\n responseHeadersToAdds:\n - headerName: foo-response-2\n headerValue: bar\n replace: true\n - headerName: foo-response-1\n headerValue: bar\n replace: true\n responseHeadersToRemoves:\n - buzz\n urlRewrite:\n hostRewrite: dev.example.com\n pathPrefixRewrite: /v1/api/\n corsPolicy:\n disabled: false\n allowCredentials: true\n allowHeaders:\n - foobar\n allowMethods:\n - GET\n - POST\n allowOrigins:\n - example.com\n exposeHeaders:\n - foobar\n maxAge: 60\n faultInjectionPolicy:\n delay:\n fixedDelay:\n seconds: 0\n nanos: 500\n percentage: 0.5\n abort:\n httpStatus: 500\n percentage: 0.5\n timeout:\n seconds: 0\n nanos: 500\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 service: ${home.id}\n - paths:\n - /login\n service: ${login.id}\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n login:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n loadBalancingScheme: INTERNAL_MANAGED\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n home:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n loadBalancingScheme: INTERNAL_MANAGED\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n default:\n type: gcp:compute:RegionHealthCheck\n properties:\n region: us-central1\n checkIntervalSec: 1\n timeoutSec: 1\n httpHealthCheck:\n port: 80\n requestPath: /\n```\n{{% /example %}}\n{{% example %}}\n### Region Url Map L7 Ilb Path\n\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.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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionHealthCheck(\"default\", RegionHealthCheckArgs.builder() \n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new RegionBackendService(\"home\", RegionBackendServiceArgs.builder() \n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .build());\n\n var regionurlmap = new RegionUrlMap(\"regionurlmap\", RegionUrlMapArgs.builder() \n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .pathRules(RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .routeAction(RegionUrlMapPathMatcherPathRuleRouteActionArgs.builder()\n .corsPolicy(RegionUrlMapPathMatcherPathRuleRouteActionCorsPolicyArgs.builder()\n .allowCredentials(true)\n .allowHeaders(\"Allowed content\")\n .allowMethods(\"GET\")\n .allowOrigins(\"Allowed origin\")\n .exposeHeaders(\"Exposed header\")\n .maxAge(30)\n .disabled(false)\n .build())\n .faultInjectionPolicy(RegionUrlMapPathMatcherPathRuleRouteActionFaultInjectionPolicyArgs.builder()\n .abort(RegionUrlMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortArgs.builder()\n .httpStatus(234)\n .percentage(5.6)\n .build())\n .delay(RegionUrlMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs.builder()\n .fixedDelay(RegionUrlMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs.builder()\n .seconds(0)\n .nanos(50000)\n .build())\n .percentage(7.8)\n .build())\n .build())\n .requestMirrorPolicy(RegionUrlMapPathMatcherPathRuleRouteActionRequestMirrorPolicyArgs.builder()\n .backendService(home.id())\n .build())\n .retryPolicy(RegionUrlMapPathMatcherPathRuleRouteActionRetryPolicyArgs.builder()\n .numRetries(4)\n .perTryTimeout(RegionUrlMapPathMatcherPathRuleRouteActionRetryPolicyPerTryTimeoutArgs.builder()\n .seconds(30)\n .build())\n .retryConditions( \n \"5xx\",\n \"deadline-exceeded\")\n .build())\n .timeout(RegionUrlMapPathMatcherPathRuleRouteActionTimeoutArgs.builder()\n .seconds(20)\n .nanos(750000000)\n .build())\n .urlRewrite(RegionUrlMapPathMatcherPathRuleRouteActionUrlRewriteArgs.builder()\n .hostRewrite(\"dev.example.com\")\n .pathPrefixRewrite(\"/v1/api/\")\n .build())\n .weightedBackendServices(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs.builder()\n .backendService(home.id())\n .weight(400)\n .headerAction(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs.builder()\n .requestHeadersToRemoves(\"RemoveMe\")\n .requestHeadersToAdds(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"RemoveMe\")\n .responseHeadersToAdds(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(false)\n .build())\n .build())\n .build())\n .build())\n .build())\n .build())\n .tests(RegionUrlMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionurlmap:\n type: gcp:compute:RegionUrlMap\n properties:\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 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:RegionBackendService\n properties:\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n loadBalancingScheme: INTERNAL_MANAGED\n default:\n type: gcp:compute:RegionHealthCheck\n properties:\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% example %}}\n### Region Url Map L7 Ilb Path Partial\n\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.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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionHealthCheck(\"default\", RegionHealthCheckArgs.builder() \n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new RegionBackendService(\"home\", RegionBackendServiceArgs.builder() \n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .build());\n\n var regionurlmap = new RegionUrlMap(\"regionurlmap\", RegionUrlMapArgs.builder() \n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .pathRules(RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .routeAction(RegionUrlMapPathMatcherPathRuleRouteActionArgs.builder()\n .retryPolicy(RegionUrlMapPathMatcherPathRuleRouteActionRetryPolicyArgs.builder()\n .numRetries(4)\n .perTryTimeout(RegionUrlMapPathMatcherPathRuleRouteActionRetryPolicyPerTryTimeoutArgs.builder()\n .seconds(30)\n .build())\n .retryConditions( \n \"5xx\",\n \"deadline-exceeded\")\n .build())\n .timeout(RegionUrlMapPathMatcherPathRuleRouteActionTimeoutArgs.builder()\n .seconds(20)\n .nanos(750000000)\n .build())\n .urlRewrite(RegionUrlMapPathMatcherPathRuleRouteActionUrlRewriteArgs.builder()\n .hostRewrite(\"dev.example.com\")\n .pathPrefixRewrite(\"/v1/api/\")\n .build())\n .weightedBackendServices(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs.builder()\n .backendService(home.id())\n .weight(400)\n .headerAction(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs.builder()\n .responseHeadersToAdds(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(false)\n .build())\n .build())\n .build())\n .build())\n .build())\n .build())\n .tests(RegionUrlMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionurlmap:\n type: gcp:compute:RegionUrlMap\n properties:\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 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 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:RegionBackendService\n properties:\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n loadBalancingScheme: INTERNAL_MANAGED\n default:\n type: gcp:compute:RegionHealthCheck\n properties:\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% example %}}\n### Region Url Map L7 Ilb Route\n\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.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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionHealthCheck(\"default\", RegionHealthCheckArgs.builder() \n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new RegionBackendService(\"home\", RegionBackendServiceArgs.builder() \n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .build());\n\n var regionurlmap = new RegionUrlMap(\"regionurlmap\", RegionUrlMapArgs.builder() \n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .routeRules(RegionUrlMapPathMatcherRouteRuleArgs.builder()\n .priority(1)\n .headerAction(RegionUrlMapPathMatcherRouteRuleHeaderActionArgs.builder()\n .requestHeadersToRemoves(\"RemoveMe2\")\n .requestHeadersToAdds(RegionUrlMapPathMatcherRouteRuleHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"AddSomethingElse\")\n .headerValue(\"MyOtherValue\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"RemoveMe3\")\n .responseHeadersToAdds(RegionUrlMapPathMatcherRouteRuleHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(false)\n .build())\n .build())\n .matchRules(RegionUrlMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .fullPathMatch(\"a full path\")\n .headerMatches(RegionUrlMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs.builder()\n .headerName(\"someheader\")\n .exactMatch(\"match this exactly\")\n .invertMatch(true)\n .build())\n .ignoreCase(true)\n .metadataFilters(RegionUrlMapPathMatcherRouteRuleMatchRuleMetadataFilterArgs.builder()\n .filterMatchCriteria(\"MATCH_ANY\")\n .filterLabels(RegionUrlMapPathMatcherRouteRuleMatchRuleMetadataFilterFilterLabelArgs.builder()\n .name(\"PLANET\")\n .value(\"MARS\")\n .build())\n .build())\n .queryParameterMatches(RegionUrlMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs.builder()\n .name(\"a query parameter\")\n .presentMatch(true)\n .build())\n .build())\n .urlRedirect(RegionUrlMapPathMatcherRouteRuleUrlRedirectArgs.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(RegionUrlMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionurlmap:\n type: gcp:compute:RegionUrlMap\n properties:\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:RegionBackendService\n properties:\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n loadBalancingScheme: INTERNAL_MANAGED\n default:\n type: gcp:compute:RegionHealthCheck\n properties:\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% example %}}\n### Region Url Map L7 Ilb Route Partial\n\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.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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionHealthCheck(\"default\", RegionHealthCheckArgs.builder() \n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new RegionBackendService(\"home\", RegionBackendServiceArgs.builder() \n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .build());\n\n var regionurlmap = new RegionUrlMap(\"regionurlmap\", RegionUrlMapArgs.builder() \n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .routeRules(RegionUrlMapPathMatcherRouteRuleArgs.builder()\n .priority(1)\n .service(home.id())\n .headerAction(RegionUrlMapPathMatcherRouteRuleHeaderActionArgs.builder()\n .requestHeadersToRemoves(\"RemoveMe2\")\n .build())\n .matchRules(RegionUrlMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .fullPathMatch(\"a full path\")\n .headerMatches(RegionUrlMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs.builder()\n .headerName(\"someheader\")\n .exactMatch(\"match this exactly\")\n .invertMatch(true)\n .build())\n .queryParameterMatches(RegionUrlMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs.builder()\n .name(\"a query parameter\")\n .presentMatch(true)\n .build())\n .build())\n .build())\n .build())\n .tests(RegionUrlMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionurlmap:\n type: gcp:compute:RegionUrlMap\n properties:\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 service: ${home.id}\n headerAction:\n requestHeadersToRemoves:\n - RemoveMe2\n matchRules:\n - fullPathMatch: a full path\n headerMatches:\n - headerName: someheader\n exactMatch: match this exactly\n invertMatch: true\n queryParameterMatches:\n - name: a query parameter\n presentMatch: true\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n home:\n type: gcp:compute:RegionBackendService\n properties:\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n loadBalancingScheme: INTERNAL_MANAGED\n default:\n type: gcp:compute:RegionHealthCheck\n properties:\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionUrlMap can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionUrlMap:RegionUrlMap default projects/{{project}}/regions/{{region}}/urlMaps/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionUrlMap:RegionUrlMap default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionUrlMap:RegionUrlMap default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionUrlMap:RegionUrlMap 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\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Region Url Map Basic\n\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.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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionHealthCheck(\"default\", RegionHealthCheckArgs.builder() \n .region(\"us-central1\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .requestPath(\"/\")\n .build())\n .build());\n\n var login = new RegionBackendService(\"login\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .build());\n\n var home = new RegionBackendService(\"home\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .build());\n\n var regionurlmap = new RegionUrlMap(\"regionurlmap\", RegionUrlMapArgs.builder() \n .region(\"us-central1\")\n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .pathRules( \n RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .service(home.id())\n .build(),\n RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/login\")\n .service(login.id())\n .build())\n .build())\n .tests(RegionUrlMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionurlmap:\n type: gcp:compute:RegionUrlMap\n properties:\n region: us-central1\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 service: ${home.id}\n - paths:\n - /login\n service: ${login.id}\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n login:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n loadBalancingScheme: INTERNAL_MANAGED\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n home:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n loadBalancingScheme: INTERNAL_MANAGED\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n default:\n type: gcp:compute:RegionHealthCheck\n properties:\n region: us-central1\n checkIntervalSec: 1\n timeoutSec: 1\n httpHealthCheck:\n port: 80\n requestPath: /\n```\n{{% /example %}}\n{{% example %}}\n### Region Url Map Default Route Action\n\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.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.inputs.RegionUrlMapDefaultRouteActionArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionRetryPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionRetryPolicyPerTryTimeoutArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionRequestMirrorPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionUrlRewriteArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionCorsPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionFaultInjectionPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelayArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelayFixedDelayArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionFaultInjectionPolicyAbortArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapDefaultRouteActionTimeoutArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionHealthCheck(\"default\", RegionHealthCheckArgs.builder() \n .region(\"us-central1\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .requestPath(\"/\")\n .build())\n .build());\n\n var login = new RegionBackendService(\"login\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .build());\n\n var home = new RegionBackendService(\"home\", RegionBackendServiceArgs.builder() \n .region(\"us-central1\")\n .protocol(\"HTTP\")\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .build());\n\n var regionurlmap = new RegionUrlMap(\"regionurlmap\", RegionUrlMapArgs.builder() \n .region(\"us-central1\")\n .description(\"a description\")\n .defaultRouteAction(RegionUrlMapDefaultRouteActionArgs.builder()\n .retryPolicy(RegionUrlMapDefaultRouteActionRetryPolicyArgs.builder()\n .retryConditions( \n \"5xx\",\n \"gateway-error\")\n .numRetries(3)\n .perTryTimeout(RegionUrlMapDefaultRouteActionRetryPolicyPerTryTimeoutArgs.builder()\n .seconds(0)\n .nanos(500)\n .build())\n .build())\n .requestMirrorPolicy(RegionUrlMapDefaultRouteActionRequestMirrorPolicyArgs.builder()\n .backendService(home.id())\n .build())\n .weightedBackendServices( \n RegionUrlMapDefaultRouteActionWeightedBackendServiceArgs.builder()\n .backendService(login.id())\n .weight(200)\n .headerAction(RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionArgs.builder()\n .requestHeadersToAdds(RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"foo-request-1\")\n .headerValue(\"bar\")\n .replace(true)\n .build())\n .requestHeadersToRemoves(\"fizz\")\n .responseHeadersToAdds(RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"foo-response-1\")\n .headerValue(\"bar\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"buzz\")\n .build())\n .build(),\n RegionUrlMapDefaultRouteActionWeightedBackendServiceArgs.builder()\n .backendService(home.id())\n .weight(100)\n .headerAction(RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionArgs.builder()\n .requestHeadersToAdds( \n RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"foo-request-1\")\n .headerValue(\"bar\")\n .replace(true)\n .build(),\n RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"foo-request-2\")\n .headerValue(\"bar\")\n .replace(true)\n .build())\n .requestHeadersToRemoves(\"fizz\")\n .responseHeadersToAdds( \n RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"foo-response-2\")\n .headerValue(\"bar\")\n .replace(true)\n .build(),\n RegionUrlMapDefaultRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"foo-response-1\")\n .headerValue(\"bar\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"buzz\")\n .build())\n .build())\n .urlRewrite(RegionUrlMapDefaultRouteActionUrlRewriteArgs.builder()\n .hostRewrite(\"dev.example.com\")\n .pathPrefixRewrite(\"/v1/api/\")\n .build())\n .corsPolicy(RegionUrlMapDefaultRouteActionCorsPolicyArgs.builder()\n .disabled(false)\n .allowCredentials(true)\n .allowHeaders(\"foobar\")\n .allowMethods( \n \"GET\",\n \"POST\")\n .allowOrigins(\"example.com\")\n .exposeHeaders(\"foobar\")\n .maxAge(60)\n .build())\n .faultInjectionPolicy(RegionUrlMapDefaultRouteActionFaultInjectionPolicyArgs.builder()\n .delay(RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelayArgs.builder()\n .fixedDelay(RegionUrlMapDefaultRouteActionFaultInjectionPolicyDelayFixedDelayArgs.builder()\n .seconds(0)\n .nanos(500)\n .build())\n .percentage(0.5)\n .build())\n .abort(RegionUrlMapDefaultRouteActionFaultInjectionPolicyAbortArgs.builder()\n .httpStatus(500)\n .percentage(0.5)\n .build())\n .build())\n .timeout(RegionUrlMapDefaultRouteActionTimeoutArgs.builder()\n .seconds(0)\n .nanos(500)\n .build())\n .build())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .pathRules( \n RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .service(home.id())\n .build(),\n RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/login\")\n .service(login.id())\n .build())\n .build())\n .tests(RegionUrlMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionurlmap:\n type: gcp:compute:RegionUrlMap\n properties:\n region: us-central1\n description: a description\n defaultRouteAction:\n retryPolicy:\n retryConditions:\n - 5xx\n - gateway-error\n numRetries: 3\n perTryTimeout:\n seconds: 0\n nanos: 500\n requestMirrorPolicy:\n backendService: ${home.id}\n weightedBackendServices:\n - backendService: ${login.id}\n weight: 200\n headerAction:\n requestHeadersToAdds:\n - headerName: foo-request-1\n headerValue: bar\n replace: true\n requestHeadersToRemoves:\n - fizz\n responseHeadersToAdds:\n - headerName: foo-response-1\n headerValue: bar\n replace: true\n responseHeadersToRemoves:\n - buzz\n - backendService: ${home.id}\n weight: 100\n headerAction:\n requestHeadersToAdds:\n - headerName: foo-request-1\n headerValue: bar\n replace: true\n - headerName: foo-request-2\n headerValue: bar\n replace: true\n requestHeadersToRemoves:\n - fizz\n responseHeadersToAdds:\n - headerName: foo-response-2\n headerValue: bar\n replace: true\n - headerName: foo-response-1\n headerValue: bar\n replace: true\n responseHeadersToRemoves:\n - buzz\n urlRewrite:\n hostRewrite: dev.example.com\n pathPrefixRewrite: /v1/api/\n corsPolicy:\n disabled: false\n allowCredentials: true\n allowHeaders:\n - foobar\n allowMethods:\n - GET\n - POST\n allowOrigins:\n - example.com\n exposeHeaders:\n - foobar\n maxAge: 60\n faultInjectionPolicy:\n delay:\n fixedDelay:\n seconds: 0\n nanos: 500\n percentage: 0.5\n abort:\n httpStatus: 500\n percentage: 0.5\n timeout:\n seconds: 0\n nanos: 500\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 service: ${home.id}\n - paths:\n - /login\n service: ${login.id}\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n login:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n loadBalancingScheme: INTERNAL_MANAGED\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n home:\n type: gcp:compute:RegionBackendService\n properties:\n region: us-central1\n protocol: HTTP\n loadBalancingScheme: INTERNAL_MANAGED\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n default:\n type: gcp:compute:RegionHealthCheck\n properties:\n region: us-central1\n checkIntervalSec: 1\n timeoutSec: 1\n httpHealthCheck:\n port: 80\n requestPath: /\n```\n{{% /example %}}\n{{% example %}}\n### Region Url Map L7 Ilb Path\n\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.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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionHealthCheck(\"default\", RegionHealthCheckArgs.builder() \n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new RegionBackendService(\"home\", RegionBackendServiceArgs.builder() \n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .build());\n\n var regionurlmap = new RegionUrlMap(\"regionurlmap\", RegionUrlMapArgs.builder() \n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .pathRules(RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .routeAction(RegionUrlMapPathMatcherPathRuleRouteActionArgs.builder()\n .corsPolicy(RegionUrlMapPathMatcherPathRuleRouteActionCorsPolicyArgs.builder()\n .allowCredentials(true)\n .allowHeaders(\"Allowed content\")\n .allowMethods(\"GET\")\n .allowOrigins(\"Allowed origin\")\n .exposeHeaders(\"Exposed header\")\n .maxAge(30)\n .disabled(false)\n .build())\n .faultInjectionPolicy(RegionUrlMapPathMatcherPathRuleRouteActionFaultInjectionPolicyArgs.builder()\n .abort(RegionUrlMapPathMatcherPathRuleRouteActionFaultInjectionPolicyAbortArgs.builder()\n .httpStatus(234)\n .percentage(5.6)\n .build())\n .delay(RegionUrlMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayArgs.builder()\n .fixedDelay(RegionUrlMapPathMatcherPathRuleRouteActionFaultInjectionPolicyDelayFixedDelayArgs.builder()\n .seconds(0)\n .nanos(50000)\n .build())\n .percentage(7.8)\n .build())\n .build())\n .requestMirrorPolicy(RegionUrlMapPathMatcherPathRuleRouteActionRequestMirrorPolicyArgs.builder()\n .backendService(home.id())\n .build())\n .retryPolicy(RegionUrlMapPathMatcherPathRuleRouteActionRetryPolicyArgs.builder()\n .numRetries(4)\n .perTryTimeout(RegionUrlMapPathMatcherPathRuleRouteActionRetryPolicyPerTryTimeoutArgs.builder()\n .seconds(30)\n .build())\n .retryConditions( \n \"5xx\",\n \"deadline-exceeded\")\n .build())\n .timeout(RegionUrlMapPathMatcherPathRuleRouteActionTimeoutArgs.builder()\n .seconds(20)\n .nanos(750000000)\n .build())\n .urlRewrite(RegionUrlMapPathMatcherPathRuleRouteActionUrlRewriteArgs.builder()\n .hostRewrite(\"dev.example.com\")\n .pathPrefixRewrite(\"/v1/api/\")\n .build())\n .weightedBackendServices(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs.builder()\n .backendService(home.id())\n .weight(400)\n .headerAction(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs.builder()\n .requestHeadersToRemoves(\"RemoveMe\")\n .requestHeadersToAdds(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"RemoveMe\")\n .responseHeadersToAdds(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(false)\n .build())\n .build())\n .build())\n .build())\n .build())\n .build())\n .tests(RegionUrlMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionurlmap:\n type: gcp:compute:RegionUrlMap\n properties:\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 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:RegionBackendService\n properties:\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n loadBalancingScheme: INTERNAL_MANAGED\n default:\n type: gcp:compute:RegionHealthCheck\n properties:\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% example %}}\n### Region Url Map L7 Ilb Path Partial\n\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.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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionHealthCheck(\"default\", RegionHealthCheckArgs.builder() \n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new RegionBackendService(\"home\", RegionBackendServiceArgs.builder() \n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .build());\n\n var regionurlmap = new RegionUrlMap(\"regionurlmap\", RegionUrlMapArgs.builder() \n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .pathRules(RegionUrlMapPathMatcherPathRuleArgs.builder()\n .paths(\"/home\")\n .routeAction(RegionUrlMapPathMatcherPathRuleRouteActionArgs.builder()\n .retryPolicy(RegionUrlMapPathMatcherPathRuleRouteActionRetryPolicyArgs.builder()\n .numRetries(4)\n .perTryTimeout(RegionUrlMapPathMatcherPathRuleRouteActionRetryPolicyPerTryTimeoutArgs.builder()\n .seconds(30)\n .build())\n .retryConditions( \n \"5xx\",\n \"deadline-exceeded\")\n .build())\n .timeout(RegionUrlMapPathMatcherPathRuleRouteActionTimeoutArgs.builder()\n .seconds(20)\n .nanos(750000000)\n .build())\n .urlRewrite(RegionUrlMapPathMatcherPathRuleRouteActionUrlRewriteArgs.builder()\n .hostRewrite(\"dev.example.com\")\n .pathPrefixRewrite(\"/v1/api/\")\n .build())\n .weightedBackendServices(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceArgs.builder()\n .backendService(home.id())\n .weight(400)\n .headerAction(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionArgs.builder()\n .responseHeadersToAdds(RegionUrlMapPathMatcherPathRuleRouteActionWeightedBackendServiceHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(false)\n .build())\n .build())\n .build())\n .build())\n .build())\n .build())\n .tests(RegionUrlMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionurlmap:\n type: gcp:compute:RegionUrlMap\n properties:\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 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 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:RegionBackendService\n properties:\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n loadBalancingScheme: INTERNAL_MANAGED\n default:\n type: gcp:compute:RegionHealthCheck\n properties:\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% example %}}\n### Region Url Map L7 Ilb Route\n\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.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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionHealthCheck(\"default\", RegionHealthCheckArgs.builder() \n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new RegionBackendService(\"home\", RegionBackendServiceArgs.builder() \n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .build());\n\n var regionurlmap = new RegionUrlMap(\"regionurlmap\", RegionUrlMapArgs.builder() \n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .routeRules(RegionUrlMapPathMatcherRouteRuleArgs.builder()\n .priority(1)\n .headerAction(RegionUrlMapPathMatcherRouteRuleHeaderActionArgs.builder()\n .requestHeadersToRemoves(\"RemoveMe2\")\n .requestHeadersToAdds(RegionUrlMapPathMatcherRouteRuleHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"AddSomethingElse\")\n .headerValue(\"MyOtherValue\")\n .replace(true)\n .build())\n .responseHeadersToRemoves(\"RemoveMe3\")\n .responseHeadersToAdds(RegionUrlMapPathMatcherRouteRuleHeaderActionResponseHeadersToAddArgs.builder()\n .headerName(\"AddMe\")\n .headerValue(\"MyValue\")\n .replace(false)\n .build())\n .build())\n .matchRules(RegionUrlMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .fullPathMatch(\"a full path\")\n .headerMatches(RegionUrlMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs.builder()\n .headerName(\"someheader\")\n .exactMatch(\"match this exactly\")\n .invertMatch(true)\n .build())\n .ignoreCase(true)\n .metadataFilters(RegionUrlMapPathMatcherRouteRuleMatchRuleMetadataFilterArgs.builder()\n .filterMatchCriteria(\"MATCH_ANY\")\n .filterLabels(RegionUrlMapPathMatcherRouteRuleMatchRuleMetadataFilterFilterLabelArgs.builder()\n .name(\"PLANET\")\n .value(\"MARS\")\n .build())\n .build())\n .queryParameterMatches(RegionUrlMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs.builder()\n .name(\"a query parameter\")\n .presentMatch(true)\n .build())\n .build())\n .urlRedirect(RegionUrlMapPathMatcherRouteRuleUrlRedirectArgs.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(RegionUrlMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionurlmap:\n type: gcp:compute:RegionUrlMap\n properties:\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:RegionBackendService\n properties:\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n loadBalancingScheme: INTERNAL_MANAGED\n default:\n type: gcp:compute:RegionHealthCheck\n properties:\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% example %}}\n### Region Url Map L7 Ilb Route Partial\n\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.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.inputs.RegionUrlMapHostRuleArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapPathMatcherArgs;\nimport com.pulumi.gcp.compute.inputs.RegionUrlMapTestArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 RegionHealthCheck(\"default\", RegionHealthCheckArgs.builder() \n .httpHealthCheck(RegionHealthCheckHttpHealthCheckArgs.builder()\n .port(80)\n .build())\n .build());\n\n var home = new RegionBackendService(\"home\", RegionBackendServiceArgs.builder() \n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(default_.id())\n .loadBalancingScheme(\"INTERNAL_MANAGED\")\n .build());\n\n var regionurlmap = new RegionUrlMap(\"regionurlmap\", RegionUrlMapArgs.builder() \n .description(\"a description\")\n .defaultService(home.id())\n .hostRules(RegionUrlMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(RegionUrlMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(home.id())\n .routeRules(RegionUrlMapPathMatcherRouteRuleArgs.builder()\n .priority(1)\n .service(home.id())\n .headerAction(RegionUrlMapPathMatcherRouteRuleHeaderActionArgs.builder()\n .requestHeadersToRemoves(\"RemoveMe2\")\n .build())\n .matchRules(RegionUrlMapPathMatcherRouteRuleMatchRuleArgs.builder()\n .fullPathMatch(\"a full path\")\n .headerMatches(RegionUrlMapPathMatcherRouteRuleMatchRuleHeaderMatchArgs.builder()\n .headerName(\"someheader\")\n .exactMatch(\"match this exactly\")\n .invertMatch(true)\n .build())\n .queryParameterMatches(RegionUrlMapPathMatcherRouteRuleMatchRuleQueryParameterMatchArgs.builder()\n .name(\"a query parameter\")\n .presentMatch(true)\n .build())\n .build())\n .build())\n .build())\n .tests(RegionUrlMapTestArgs.builder()\n .service(home.id())\n .host(\"hi.com\")\n .path(\"/home\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n regionurlmap:\n type: gcp:compute:RegionUrlMap\n properties:\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 service: ${home.id}\n headerAction:\n requestHeadersToRemoves:\n - RemoveMe2\n matchRules:\n - fullPathMatch: a full path\n headerMatches:\n - headerName: someheader\n exactMatch: match this exactly\n invertMatch: true\n queryParameterMatches:\n - name: a query parameter\n presentMatch: true\n tests:\n - service: ${home.id}\n host: hi.com\n path: /home\n home:\n type: gcp:compute:RegionBackendService\n properties:\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${default.id}\n loadBalancingScheme: INTERNAL_MANAGED\n default:\n type: gcp:compute:RegionHealthCheck\n properties:\n httpHealthCheck:\n port: 80\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRegionUrlMap can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/regionUrlMap:RegionUrlMap default projects/{{project}}/regions/{{region}}/urlMaps/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionUrlMap:RegionUrlMap default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionUrlMap:RegionUrlMap default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/regionUrlMap:RegionUrlMap default {{name}}\n```\n\n ", "properties": { "creationTimestamp": { "type": "string", @@ -142821,108 +144269,116 @@ "type": "integer", "description": "Timeout (in seconds) for TCP established connections.\nDefaults to 1200s if not set.\n" }, - "tcpTransitoryIdleTimeoutSec": { - "type": "integer", - "description": "Timeout (in seconds) for TCP transitory connections.\nDefaults to 30s if not set.\n" - }, - "udpIdleTimeoutSec": { - "type": "integer", - "description": "Timeout (in seconds) for UDP connections. Defaults to 30s if not set.\n" - } - }, - "required": [ - "enableDynamicPortAllocation", - "name", - "natIpAllocateOption", - "project", - "region", - "router", - "sourceSubnetworkIpRangesToNat" - ], - "inputProperties": { - "drainNatIps": { - "type": "array", - "items": { - "type": "string" - }, - "description": "A list of URLs of the IP resources to be drained. These IPs must be\nvalid static external IPs that have been assigned to the NAT.\n" - }, - "enableDynamicPortAllocation": { - "type": "boolean", - "description": "Enable Dynamic Port Allocation.\nIf minPortsPerVm is set, minPortsPerVm must be set to a power of two greater than or equal to 32.\nIf minPortsPerVm is not set, a minimum of 32 ports will be allocated to a VM from this NAT config.\nIf maxPortsPerVm is set, maxPortsPerVm must be set to a power of two greater than minPortsPerVm.\nIf maxPortsPerVm is not set, a maximum of 65536 ports will be allocated to a VM from this NAT config.\nMutually exclusive with enableEndpointIndependentMapping.\n" - }, - "enableEndpointIndependentMapping": { - "type": "boolean", - "description": "Specifies if endpoint independent mapping is enabled. This is enabled by default. For more information\nsee the [official documentation](https://cloud.google.com/nat/docs/overview#specs-rfcs).\n" - }, - "icmpIdleTimeoutSec": { - "type": "integer", - "description": "Timeout (in seconds) for ICMP connections. Defaults to 30s if not set.\n" - }, - "logConfig": { - "$ref": "#/types/gcp:compute/RouterNatLogConfig:RouterNatLogConfig", - "description": "Configuration for logging on NAT\nStructure is documented below.\n" - }, - "maxPortsPerVm": { - "type": "integer", - "description": "Maximum number of ports allocated to a VM from this NAT.\nThis field can only be set when enableDynamicPortAllocation is enabled.\n" - }, - "minPortsPerVm": { - "type": "integer", - "description": "Minimum number of ports allocated to a VM from this NAT.\n" - }, - "name": { - "type": "string", - "description": "Name of the NAT service. The name must be 1-63 characters long and\ncomply with RFC1035.\n", - "willReplaceOnChanges": true - }, - "natIpAllocateOption": { - "type": "string", - "description": "How external IPs should be allocated for this NAT. Valid values are\n`AUTO_ONLY` for only allowing NAT IPs allocated by Google Cloud\nPlatform, or `MANUAL_ONLY` for only user-allocated NAT IP addresses.\nPossible values are `MANUAL_ONLY` and `AUTO_ONLY`.\n" - }, - "natIps": { - "type": "array", - "items": { - "type": "string" - }, - "description": "Self-links of NAT IPs. Only valid if natIpAllocateOption\nis set to MANUAL_ONLY.\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 - }, - "region": { - "type": "string", - "description": "Region where the router and NAT reside.\n", - "willReplaceOnChanges": true - }, - "router": { - "type": "string", - "description": "The name of the Cloud Router in which this NAT will be configured.\n", - "willReplaceOnChanges": true - }, - "rules": { - "type": "array", - "items": { - "$ref": "#/types/gcp:compute/RouterNatRule:RouterNatRule" - }, - "description": "A list of rules associated with this NAT.\nStructure is documented below.\n" - }, - "sourceSubnetworkIpRangesToNat": { - "type": "string", - "description": "How NAT should be configured per Subnetwork.\nIf `ALL_SUBNETWORKS_ALL_IP_RANGES`, all of the\nIP ranges in every Subnetwork are allowed to Nat.\nIf `ALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES`, all of the primary IP\nranges in every Subnetwork are allowed to Nat.\n`LIST_OF_SUBNETWORKS`: A list of Subnetworks are allowed to Nat\n(specified in the field subnetwork below). Note that if this field\ncontains ALL_SUBNETWORKS_ALL_IP_RANGES or\nALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES, then there should not be any\nother RouterNat section in any Router for this network in this region.\nPossible values are `ALL_SUBNETWORKS_ALL_IP_RANGES`, `ALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES`, and `LIST_OF_SUBNETWORKS`.\n" - }, - "subnetworks": { - "type": "array", - "items": { - "$ref": "#/types/gcp:compute/RouterNatSubnetwork:RouterNatSubnetwork" - }, - "description": "One or more subnetwork NAT configurations. Only used if\n`source_subnetwork_ip_ranges_to_nat` is set to `LIST_OF_SUBNETWORKS`\nStructure is documented below.\n" - }, - "tcpEstablishedIdleTimeoutSec": { + "tcpTimeWaitTimeoutSec": { + "type": "integer", + "description": "Timeout (in seconds) for TCP connections that are in TIME_WAIT state.\nDefaults to 120s if not set.\n" + }, + "tcpTransitoryIdleTimeoutSec": { + "type": "integer", + "description": "Timeout (in seconds) for TCP transitory connections.\nDefaults to 30s if not set.\n" + }, + "udpIdleTimeoutSec": { + "type": "integer", + "description": "Timeout (in seconds) for UDP connections. Defaults to 30s if not set.\n" + } + }, + "required": [ + "enableDynamicPortAllocation", + "name", + "natIpAllocateOption", + "project", + "region", + "router", + "sourceSubnetworkIpRangesToNat" + ], + "inputProperties": { + "drainNatIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "A list of URLs of the IP resources to be drained. These IPs must be\nvalid static external IPs that have been assigned to the NAT.\n" + }, + "enableDynamicPortAllocation": { + "type": "boolean", + "description": "Enable Dynamic Port Allocation.\nIf minPortsPerVm is set, minPortsPerVm must be set to a power of two greater than or equal to 32.\nIf minPortsPerVm is not set, a minimum of 32 ports will be allocated to a VM from this NAT config.\nIf maxPortsPerVm is set, maxPortsPerVm must be set to a power of two greater than minPortsPerVm.\nIf maxPortsPerVm is not set, a maximum of 65536 ports will be allocated to a VM from this NAT config.\nMutually exclusive with enableEndpointIndependentMapping.\n" + }, + "enableEndpointIndependentMapping": { + "type": "boolean", + "description": "Specifies if endpoint independent mapping is enabled. This is enabled by default. For more information\nsee the [official documentation](https://cloud.google.com/nat/docs/overview#specs-rfcs).\n" + }, + "icmpIdleTimeoutSec": { + "type": "integer", + "description": "Timeout (in seconds) for ICMP connections. Defaults to 30s if not set.\n" + }, + "logConfig": { + "$ref": "#/types/gcp:compute/RouterNatLogConfig:RouterNatLogConfig", + "description": "Configuration for logging on NAT\nStructure is documented below.\n" + }, + "maxPortsPerVm": { + "type": "integer", + "description": "Maximum number of ports allocated to a VM from this NAT.\nThis field can only be set when enableDynamicPortAllocation is enabled.\n" + }, + "minPortsPerVm": { + "type": "integer", + "description": "Minimum number of ports allocated to a VM from this NAT.\n" + }, + "name": { + "type": "string", + "description": "Name of the NAT service. The name must be 1-63 characters long and\ncomply with RFC1035.\n", + "willReplaceOnChanges": true + }, + "natIpAllocateOption": { + "type": "string", + "description": "How external IPs should be allocated for this NAT. Valid values are\n`AUTO_ONLY` for only allowing NAT IPs allocated by Google Cloud\nPlatform, or `MANUAL_ONLY` for only user-allocated NAT IP addresses.\nPossible values are `MANUAL_ONLY` and `AUTO_ONLY`.\n" + }, + "natIps": { + "type": "array", + "items": { + "type": "string" + }, + "description": "Self-links of NAT IPs. Only valid if natIpAllocateOption\nis set to MANUAL_ONLY.\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 + }, + "region": { + "type": "string", + "description": "Region where the router and NAT reside.\n", + "willReplaceOnChanges": true + }, + "router": { + "type": "string", + "description": "The name of the Cloud Router in which this NAT will be configured.\n", + "willReplaceOnChanges": true + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RouterNatRule:RouterNatRule" + }, + "description": "A list of rules associated with this NAT.\nStructure is documented below.\n" + }, + "sourceSubnetworkIpRangesToNat": { + "type": "string", + "description": "How NAT should be configured per Subnetwork.\nIf `ALL_SUBNETWORKS_ALL_IP_RANGES`, all of the\nIP ranges in every Subnetwork are allowed to Nat.\nIf `ALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES`, all of the primary IP\nranges in every Subnetwork are allowed to Nat.\n`LIST_OF_SUBNETWORKS`: A list of Subnetworks are allowed to Nat\n(specified in the field subnetwork below). Note that if this field\ncontains ALL_SUBNETWORKS_ALL_IP_RANGES or\nALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES, then there should not be any\nother RouterNat section in any Router for this network in this region.\nPossible values are `ALL_SUBNETWORKS_ALL_IP_RANGES`, `ALL_SUBNETWORKS_ALL_PRIMARY_IP_RANGES`, and `LIST_OF_SUBNETWORKS`.\n" + }, + "subnetworks": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/RouterNatSubnetwork:RouterNatSubnetwork" + }, + "description": "One or more subnetwork NAT configurations. Only used if\n`source_subnetwork_ip_ranges_to_nat` is set to `LIST_OF_SUBNETWORKS`\nStructure is documented below.\n" + }, + "tcpEstablishedIdleTimeoutSec": { + "type": "integer", + "description": "Timeout (in seconds) for TCP established connections.\nDefaults to 1200s if not set.\n" + }, + "tcpTimeWaitTimeoutSec": { "type": "integer", - "description": "Timeout (in seconds) for TCP established connections.\nDefaults to 1200s if not set.\n" + "description": "Timeout (in seconds) for TCP connections that are in TIME_WAIT state.\nDefaults to 120s if not set.\n" }, "tcpTransitoryIdleTimeoutSec": { "type": "integer", @@ -143025,6 +144481,10 @@ "type": "integer", "description": "Timeout (in seconds) for TCP established connections.\nDefaults to 1200s if not set.\n" }, + "tcpTimeWaitTimeoutSec": { + "type": "integer", + "description": "Timeout (in seconds) for TCP connections that are in TIME_WAIT state.\nDefaults to 120s if not set.\n" + }, "tcpTransitoryIdleTimeoutSec": { "type": "integer", "description": "Timeout (in seconds) for TCP transitory connections.\nDefaults to 30s if not set.\n" @@ -143285,7 +144745,7 @@ } }, "gcp:compute/sSLCertificate:SSLCertificate": { - "description": "An SslCertificate resource, used for HTTPS load balancing. This resource\nprovides a mechanism to upload an SSL key and certificate to\nthe load balancer to serve secure connections from the user.\n\n\nTo get more information about SslCertificate, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/sslCertificates)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates)\n\n\u003e **Warning:** All arguments including `certificate` and `private_key` will be stored in the raw\nstate as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Ssl Certificate Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.SSLCertificate(\"default\", {\n namePrefix: \"my-certificate-\",\n description: \"a description\",\n privateKey: fs.readFileSync(\"path/to/private.key\"),\n certificate: fs.readFileSync(\"path/to/certificate.crt\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.SSLCertificate(\"default\",\n name_prefix=\"my-certificate-\",\n description=\"a description\",\n private_key=(lambda path: open(path).read())(\"path/to/private.key\"),\n certificate=(lambda path: open(path).read())(\"path/to/certificate.crt\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.SSLCertificate(\"default\", new()\n {\n NamePrefix = \"my-certificate-\",\n Description = \"a description\",\n PrivateKey = File.ReadAllText(\"path/to/private.key\"),\n Certificate = File.ReadAllText(\"path/to/certificate.crt\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewSSLCertificate(ctx, \"default\", \u0026compute.SSLCertificateArgs{\n\t\t\tNamePrefix: pulumi.String(\"my-certificate-\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tPrivateKey: readFileOrPanic(\"path/to/private.key\"),\n\t\t\tCertificate: readFileOrPanic(\"path/to/certificate.crt\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.SSLCertificate;\nimport com.pulumi.gcp.compute.SSLCertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SSLCertificate(\"default\", SSLCertificateArgs.builder() \n .namePrefix(\"my-certificate-\")\n .description(\"a description\")\n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:SSLCertificate\n properties:\n namePrefix: my-certificate-\n description: a description\n privateKey:\n fn::readFile: path/to/private.key\n certificate:\n fn::readFile: path/to/certificate.crt\n```\n{{% /example %}}\n{{% example %}}\n### Ssl Certificate Random Provider\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as crypto from \"crypto\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nfunc computeFilebase64sha256(path string) string {\n\tconst fileData = Buffer.from(fs.readFileSync(path), 'binary')\n\treturn crypto.createHash('sha256').update(fileData).digest('hex')\n}\n\n// You may also want to control name generation explicitly:\nconst _default = new gcp.compute.SSLCertificate(\"default\", {\n privateKey: fs.readFileSync(\"path/to/private.key\"),\n certificate: fs.readFileSync(\"path/to/certificate.crt\"),\n});\nconst certificate = new random.RandomId(\"certificate\", {\n byteLength: 4,\n prefix: \"my-certificate-\",\n keepers: {\n private_key: computeFilebase64sha256(\"path/to/private.key\"),\n certificate: computeFilebase64sha256(\"path/to/certificate.crt\"),\n },\n});\n```\n```python\nimport pulumi\nimport base64\nimport hashlib\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ndef computeFilebase64sha256(path):\n\tfileData = open(path).read().encode()\n\thashedData = hashlib.sha256(fileData.encode()).digest()\n\treturn base64.b64encode(hashedData).decode()\n\n# You may also want to control name generation explicitly:\ndefault = gcp.compute.SSLCertificate(\"default\",\n private_key=(lambda path: open(path).read())(\"path/to/private.key\"),\n certificate=(lambda path: open(path).read())(\"path/to/certificate.crt\"))\ncertificate = random.RandomId(\"certificate\",\n byte_length=4,\n prefix=\"my-certificate-\",\n keepers={\n \"private_key\": computeFilebase64sha256(\"path/to/private.key\"),\n \"certificate\": computeFilebase64sha256(\"path/to/certificate.crt\"),\n })\n```\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Security.Cryptography;\nusing System.Text;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\n\tprivate static string ComputeFileBase64Sha256(string path) {\n\t\tvar fileData = Encoding.UTF8.GetBytes(File.ReadAllText(path));\n\t\tvar hashData = SHA256.Create().ComputeHash(fileData);\n\t\treturn Convert.ToBase64String(hashData);\n\t}\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // You may also want to control name generation explicitly:\n var @default = new Gcp.Compute.SSLCertificate(\"default\", new()\n {\n PrivateKey = File.ReadAllText(\"path/to/private.key\"),\n Certificate = File.ReadAllText(\"path/to/certificate.crt\"),\n });\n\n var certificate = new Random.RandomId(\"certificate\", new()\n {\n ByteLength = 4,\n Prefix = \"my-certificate-\",\n Keepers = \n {\n { \"private_key\", ComputeFileBase64Sha256(\"path/to/private.key\") },\n { \"certificate\", ComputeFileBase64Sha256(\"path/to/certificate.crt\") },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"crypto/sha256\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64sha256OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := os.ReadFile(path); err == nil {\n\t\thashedData := sha256.Sum256([]byte(fileData))\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(hashedData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewSSLCertificate(ctx, \"default\", \u0026compute.SSLCertificateArgs{\n\t\t\tPrivateKey: readFileOrPanic(\"path/to/private.key\"),\n\t\t\tCertificate: readFileOrPanic(\"path/to/certificate.crt\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = random.NewRandomId(ctx, \"certificate\", \u0026random.RandomIdArgs{\n\t\t\tByteLength: pulumi.Int(4),\n\t\t\tPrefix: pulumi.String(\"my-certificate-\"),\n\t\t\tKeepers: pulumi.AnyMap{\n\t\t\t\t\"private_key\": filebase64sha256OrPanic(\"path/to/private.key\"),\n\t\t\t\t\"certificate\": filebase64sha256OrPanic(\"path/to/certificate.crt\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.SSLCertificate;\nimport com.pulumi.gcp.compute.SSLCertificateArgs;\nimport com.pulumi.random.RandomId;\nimport com.pulumi.random.RandomIdArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SSLCertificate(\"default\", SSLCertificateArgs.builder() \n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n var certificate = new RandomId(\"certificate\", RandomIdArgs.builder() \n .byteLength(4)\n .prefix(\"my-certificate-\")\n .keepers(Map.ofEntries(\n Map.entry(\"private_key\", computeFileBase64Sha256(\"path/to/private.key\")),\n Map.entry(\"certificate\", computeFileBase64Sha256(\"path/to/certificate.crt\"))\n ))\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Ssl Certificate Target Https Proxies\n\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.SSLCertificate;\nimport com.pulumi.gcp.compute.SSLCertificateArgs;\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 com.pulumi.gcp.compute.TargetHttpsProxy;\nimport com.pulumi.gcp.compute.TargetHttpsProxyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultSSLCertificate = new SSLCertificate(\"defaultSSLCertificate\", SSLCertificateArgs.builder() \n .namePrefix(\"my-certificate-\")\n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder() \n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultTargetHttpsProxy = new TargetHttpsProxy(\"defaultTargetHttpsProxy\", TargetHttpsProxyArgs.builder() \n .urlMap(defaultURLMap.id())\n .sslCertificates(defaultSSLCertificate.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Using with Target HTTPS Proxies\n # //\n # // SSL certificates cannot be updated after creation. In order to apply\n # // the specified configuration, the provider will destroy the existing\n # // resource and create a replacement. Example:\n defaultSSLCertificate:\n type: gcp:compute:SSLCertificate\n properties:\n namePrefix: my-certificate-\n privateKey:\n fn::readFile: path/to/private.key\n certificate:\n fn::readFile: path/to/certificate.crt\n defaultTargetHttpsProxy:\n type: gcp:compute:TargetHttpsProxy\n properties:\n urlMap: ${defaultURLMap.id}\n sslCertificates:\n - ${defaultSSLCertificate.id}\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSslCertificate can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/sSLCertificate:SSLCertificate default projects/{{project}}/global/sslCertificates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/sSLCertificate:SSLCertificate default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/sSLCertificate:SSLCertificate default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Ssl Certificate Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.compute.SSLCertificate(\"default\", {\n namePrefix: \"my-certificate-\",\n description: \"a description\",\n privateKey: fs.readFileSync(\"path/to/private.key\"),\n certificate: fs.readFileSync(\"path/to/certificate.crt\"),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.SSLCertificate(\"default\",\n name_prefix=\"my-certificate-\",\n description=\"a description\",\n private_key=(lambda path: open(path).read())(\"path/to/private.key\"),\n certificate=(lambda path: open(path).read())(\"path/to/certificate.crt\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Compute.SSLCertificate(\"default\", new()\n {\n NamePrefix = \"my-certificate-\",\n Description = \"a description\",\n PrivateKey = File.ReadAllText(\"path/to/private.key\"),\n Certificate = File.ReadAllText(\"path/to/certificate.crt\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewSSLCertificate(ctx, \"default\", \u0026compute.SSLCertificateArgs{\n\t\t\tNamePrefix: pulumi.String(\"my-certificate-\"),\n\t\t\tDescription: pulumi.String(\"a description\"),\n\t\t\tPrivateKey: readFileOrPanic(\"path/to/private.key\"),\n\t\t\tCertificate: readFileOrPanic(\"path/to/certificate.crt\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.SSLCertificate;\nimport com.pulumi.gcp.compute.SSLCertificateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SSLCertificate(\"default\", SSLCertificateArgs.builder() \n .namePrefix(\"my-certificate-\")\n .description(\"a description\")\n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:compute:SSLCertificate\n properties:\n namePrefix: my-certificate-\n description: a description\n privateKey:\n fn::readFile: path/to/private.key\n certificate:\n fn::readFile: path/to/certificate.crt\n```\n{{% /example %}}\n{{% example %}}\n### Ssl Certificate Random Provider\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as crypto from \"crypto\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nfunc computeFilebase64sha256(path string) string {\n\tconst fileData = Buffer.from(fs.readFileSync(path), 'binary')\n\treturn crypto.createHash('sha256').update(fileData).digest('hex')\n}\n\n// You may also want to control name generation explicitly:\nconst _default = new gcp.compute.SSLCertificate(\"default\", {\n privateKey: fs.readFileSync(\"path/to/private.key\"),\n certificate: fs.readFileSync(\"path/to/certificate.crt\"),\n});\nconst certificate = new random.RandomId(\"certificate\", {\n byteLength: 4,\n prefix: \"my-certificate-\",\n keepers: {\n private_key: computeFilebase64sha256(\"path/to/private.key\"),\n certificate: computeFilebase64sha256(\"path/to/certificate.crt\"),\n },\n});\n```\n```python\nimport pulumi\nimport base64\nimport hashlib\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ndef computeFilebase64sha256(path):\n\tfileData = open(path).read().encode()\n\thashedData = hashlib.sha256(fileData.encode()).digest()\n\treturn base64.b64encode(hashedData).decode()\n\n# You may also want to control name generation explicitly:\ndefault = gcp.compute.SSLCertificate(\"default\",\n private_key=(lambda path: open(path).read())(\"path/to/private.key\"),\n certificate=(lambda path: open(path).read())(\"path/to/certificate.crt\"))\ncertificate = random.RandomId(\"certificate\",\n byte_length=4,\n prefix=\"my-certificate-\",\n keepers={\n \"private_key\": computeFilebase64sha256(\"path/to/private.key\"),\n \"certificate\": computeFilebase64sha256(\"path/to/certificate.crt\"),\n })\n```\n```csharp\nusing System;\nusing System.Collections.Generic;\nusing System.IO;\nusing System.Security.Cryptography;\nusing System.Text;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\n\tprivate static string ComputeFileBase64Sha256(string path) {\n\t\tvar fileData = Encoding.UTF8.GetBytes(File.ReadAllText(path));\n\t\tvar hashData = SHA256.Create().ComputeHash(fileData);\n\t\treturn Convert.ToBase64String(hashData);\n\t}\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // You may also want to control name generation explicitly:\n var @default = new Gcp.Compute.SSLCertificate(\"default\", new()\n {\n PrivateKey = File.ReadAllText(\"path/to/private.key\"),\n Certificate = File.ReadAllText(\"path/to/certificate.crt\"),\n });\n\n var certificate = new Random.RandomId(\"certificate\", new()\n {\n ByteLength = 4,\n Prefix = \"my-certificate-\",\n Keepers = \n {\n { \"private_key\", ComputeFileBase64Sha256(\"path/to/private.key\") },\n { \"certificate\", ComputeFileBase64Sha256(\"path/to/certificate.crt\") },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"crypto/sha256\"\n\t\"fmt\"\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-random/sdk/v4/go/random\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc filebase64sha256OrPanic(path string) pulumi.StringPtrInput {\n\tif fileData, err := os.ReadFile(path); err == nil {\n\t\thashedData := sha256.Sum256([]byte(fileData))\n\t\treturn pulumi.String(base64.StdEncoding.EncodeToString(hashedData[:]))\n\t} else {\n\t\tpanic(err.Error())\n\t}\n}\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := compute.NewSSLCertificate(ctx, \"default\", \u0026compute.SSLCertificateArgs{\n\t\t\tPrivateKey: readFileOrPanic(\"path/to/private.key\"),\n\t\t\tCertificate: readFileOrPanic(\"path/to/certificate.crt\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = random.NewRandomId(ctx, \"certificate\", \u0026random.RandomIdArgs{\n\t\t\tByteLength: pulumi.Int(4),\n\t\t\tPrefix: pulumi.String(\"my-certificate-\"),\n\t\t\tKeepers: pulumi.AnyMap{\n\t\t\t\t\"private_key\": filebase64sha256OrPanic(\"path/to/private.key\"),\n\t\t\t\t\"certificate\": filebase64sha256OrPanic(\"path/to/certificate.crt\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.SSLCertificate;\nimport com.pulumi.gcp.compute.SSLCertificateArgs;\nimport com.pulumi.random.RandomId;\nimport com.pulumi.random.RandomIdArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SSLCertificate(\"default\", SSLCertificateArgs.builder() \n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n var certificate = new RandomId(\"certificate\", RandomIdArgs.builder() \n .byteLength(4)\n .prefix(\"my-certificate-\")\n .keepers(Map.ofEntries(\n Map.entry(\"private_key\", computeFileBase64Sha256(\"path/to/private.key\")),\n Map.entry(\"certificate\", computeFileBase64Sha256(\"path/to/certificate.crt\"))\n ))\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% example %}}\n### Ssl Certificate Target Https Proxies\n\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.SSLCertificate;\nimport com.pulumi.gcp.compute.SSLCertificateArgs;\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 com.pulumi.gcp.compute.TargetHttpsProxy;\nimport com.pulumi.gcp.compute.TargetHttpsProxyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var defaultSSLCertificate = new SSLCertificate(\"defaultSSLCertificate\", SSLCertificateArgs.builder() \n .namePrefix(\"my-certificate-\")\n .privateKey(Files.readString(Paths.get(\"path/to/private.key\")))\n .certificate(Files.readString(Paths.get(\"path/to/certificate.crt\")))\n .build());\n\n var defaultHttpHealthCheck = new HttpHealthCheck(\"defaultHttpHealthCheck\", HttpHealthCheckArgs.builder() \n .requestPath(\"/\")\n .checkIntervalSec(1)\n .timeoutSec(1)\n .build());\n\n var defaultBackendService = new BackendService(\"defaultBackendService\", BackendServiceArgs.builder() \n .portName(\"http\")\n .protocol(\"HTTP\")\n .timeoutSec(10)\n .healthChecks(defaultHttpHealthCheck.id())\n .build());\n\n var defaultURLMap = new URLMap(\"defaultURLMap\", URLMapArgs.builder() \n .description(\"a description\")\n .defaultService(defaultBackendService.id())\n .hostRules(URLMapHostRuleArgs.builder()\n .hosts(\"mysite.com\")\n .pathMatcher(\"allpaths\")\n .build())\n .pathMatchers(URLMapPathMatcherArgs.builder()\n .name(\"allpaths\")\n .defaultService(defaultBackendService.id())\n .pathRules(URLMapPathMatcherPathRuleArgs.builder()\n .paths(\"/*\")\n .service(defaultBackendService.id())\n .build())\n .build())\n .build());\n\n var defaultTargetHttpsProxy = new TargetHttpsProxy(\"defaultTargetHttpsProxy\", TargetHttpsProxyArgs.builder() \n .urlMap(defaultURLMap.id())\n .sslCertificates(defaultSSLCertificate.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Using with Target HTTPS Proxies\n # //\n # // SSL certificates cannot be updated after creation. In order to apply\n # // the specified configuration, Terraform will destroy the existing\n # // resource and create a replacement. To effectively use an SSL\n # // certificate resource with a Target HTTPS Proxy resource, it's\n # // recommended to specify create_before_destroy in a lifecycle block.\n # // Either omit the Instance Template name attribute, specify a partial\n # // name with name_prefix, or use random_id resource. Example:\n defaultSSLCertificate:\n type: gcp:compute:SSLCertificate\n properties:\n namePrefix: my-certificate-\n privateKey:\n fn::readFile: path/to/private.key\n certificate:\n fn::readFile: path/to/certificate.crt\n defaultTargetHttpsProxy:\n type: gcp:compute:TargetHttpsProxy\n properties:\n urlMap: ${defaultURLMap.id}\n sslCertificates:\n - ${defaultSSLCertificate.id}\n defaultURLMap:\n type: gcp:compute:URLMap\n properties:\n description: a description\n defaultService: ${defaultBackendService.id}\n hostRules:\n - hosts:\n - mysite.com\n pathMatcher: allpaths\n pathMatchers:\n - name: allpaths\n defaultService: ${defaultBackendService.id}\n pathRules:\n - paths:\n - /*\n service: ${defaultBackendService.id}\n defaultBackendService:\n type: gcp:compute:BackendService\n properties:\n portName: http\n protocol: HTTP\n timeoutSec: 10\n healthChecks:\n - ${defaultHttpHealthCheck.id}\n defaultHttpHealthCheck:\n type: gcp:compute:HttpHealthCheck\n properties:\n requestPath: /\n checkIntervalSec: 1\n timeoutSec: 1\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSslCertificate can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/sSLCertificate:SSLCertificate default projects/{{project}}/global/sslCertificates/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/sSLCertificate:SSLCertificate default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/sSLCertificate:SSLCertificate default {{name}}\n```\n\n ", "properties": { "certificate": { "type": "string", @@ -143581,7 +145041,7 @@ } }, "gcp:compute/securityPolicy:SecurityPolicy": { - "description": "A Security Policy defines an IP blacklist or whitelist that protects load balanced Google Cloud services by denying or permitting traffic from specified IP ranges. For more information\nsee the [official documentation](https://cloud.google.com/armor/docs/configure-security-policies)\nand the [API](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies).\n\nSecurity Policy is used by google_compute_backend_service.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst policy = new gcp.compute.SecurityPolicy(\"policy\", {rules: [\n {\n action: \"deny(403)\",\n description: \"Deny access to IPs in 9.9.9.0/24\",\n match: {\n config: {\n srcIpRanges: [\"9.9.9.0/24\"],\n },\n versionedExpr: \"SRC_IPS_V1\",\n },\n priority: 1000,\n },\n {\n action: \"allow\",\n description: \"default rule\",\n match: {\n config: {\n srcIpRanges: [\"*\"],\n },\n versionedExpr: \"SRC_IPS_V1\",\n },\n priority: 2147483647,\n },\n]});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npolicy = gcp.compute.SecurityPolicy(\"policy\", rules=[\n gcp.compute.SecurityPolicyRuleArgs(\n action=\"deny(403)\",\n description=\"Deny access to IPs in 9.9.9.0/24\",\n match=gcp.compute.SecurityPolicyRuleMatchArgs(\n config=gcp.compute.SecurityPolicyRuleMatchConfigArgs(\n src_ip_ranges=[\"9.9.9.0/24\"],\n ),\n versioned_expr=\"SRC_IPS_V1\",\n ),\n priority=1000,\n ),\n gcp.compute.SecurityPolicyRuleArgs(\n action=\"allow\",\n description=\"default rule\",\n match=gcp.compute.SecurityPolicyRuleMatchArgs(\n config=gcp.compute.SecurityPolicyRuleMatchConfigArgs(\n src_ip_ranges=[\"*\"],\n ),\n versioned_expr=\"SRC_IPS_V1\",\n ),\n priority=2147483647,\n ),\n])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var policy = new Gcp.Compute.SecurityPolicy(\"policy\", new()\n {\n Rules = new[]\n {\n new Gcp.Compute.Inputs.SecurityPolicyRuleArgs\n {\n Action = \"deny(403)\",\n Description = \"Deny access to IPs in 9.9.9.0/24\",\n Match = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchArgs\n {\n Config = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchConfigArgs\n {\n SrcIpRanges = new[]\n {\n \"9.9.9.0/24\",\n },\n },\n VersionedExpr = \"SRC_IPS_V1\",\n },\n Priority = 1000,\n },\n new Gcp.Compute.Inputs.SecurityPolicyRuleArgs\n {\n Action = \"allow\",\n Description = \"default rule\",\n Match = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchArgs\n {\n Config = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchConfigArgs\n {\n SrcIpRanges = new[]\n {\n \"*\",\n },\n },\n VersionedExpr = \"SRC_IPS_V1\",\n },\n Priority = 2147483647,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewSecurityPolicy(ctx, \"policy\", \u0026compute.SecurityPolicyArgs{\n\t\t\tRules: compute.SecurityPolicyRuleArray{\n\t\t\t\t\u0026compute.SecurityPolicyRuleArgs{\n\t\t\t\t\tAction: pulumi.String(\"deny(403)\"),\n\t\t\t\t\tDescription: pulumi.String(\"Deny access to IPs in 9.9.9.0/24\"),\n\t\t\t\t\tMatch: \u0026compute.SecurityPolicyRuleMatchArgs{\n\t\t\t\t\t\tConfig: \u0026compute.SecurityPolicyRuleMatchConfigArgs{\n\t\t\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"9.9.9.0/24\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVersionedExpr: pulumi.String(\"SRC_IPS_V1\"),\n\t\t\t\t\t},\n\t\t\t\t\tPriority: pulumi.Int(1000),\n\t\t\t\t},\n\t\t\t\t\u0026compute.SecurityPolicyRuleArgs{\n\t\t\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\t\t\tDescription: pulumi.String(\"default rule\"),\n\t\t\t\t\tMatch: \u0026compute.SecurityPolicyRuleMatchArgs{\n\t\t\t\t\t\tConfig: \u0026compute.SecurityPolicyRuleMatchConfigArgs{\n\t\t\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"*\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVersionedExpr: pulumi.String(\"SRC_IPS_V1\"),\n\t\t\t\t\t},\n\t\t\t\t\tPriority: pulumi.Int(2147483647),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.SecurityPolicy;\nimport com.pulumi.gcp.compute.SecurityPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleMatchArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleMatchConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var policy = new SecurityPolicy(\"policy\", SecurityPolicyArgs.builder() \n .rules( \n SecurityPolicyRuleArgs.builder()\n .action(\"deny(403)\")\n .description(\"Deny access to IPs in 9.9.9.0/24\")\n .match(SecurityPolicyRuleMatchArgs.builder()\n .config(SecurityPolicyRuleMatchConfigArgs.builder()\n .srcIpRanges(\"9.9.9.0/24\")\n .build())\n .versionedExpr(\"SRC_IPS_V1\")\n .build())\n .priority(\"1000\")\n .build(),\n SecurityPolicyRuleArgs.builder()\n .action(\"allow\")\n .description(\"default rule\")\n .match(SecurityPolicyRuleMatchArgs.builder()\n .config(SecurityPolicyRuleMatchConfigArgs.builder()\n .srcIpRanges(\"*\")\n .build())\n .versionedExpr(\"SRC_IPS_V1\")\n .build())\n .priority(\"2147483647\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:compute:SecurityPolicy\n properties:\n rules:\n - action: deny(403)\n description: Deny access to IPs in 9.9.9.0/24\n match:\n config:\n srcIpRanges:\n - 9.9.9.0/24\n versionedExpr: SRC_IPS_V1\n priority: '1000'\n - action: allow\n description: default rule\n match:\n config:\n srcIpRanges:\n - '*'\n versionedExpr: SRC_IPS_V1\n priority: '2147483647'\n```\n{{% /example %}}\n{{% example %}}\n### With ReCAPTCHA Configuration Options\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.recaptcha.EnterpriseKey(\"primary\", {\n displayName: \"display-name\",\n labels: {\n \"label-one\": \"value-one\",\n },\n project: \"my-project-name\",\n webSettings: {\n integrationType: \"INVISIBLE\",\n allowAllDomains: true,\n allowedDomains: [\"localhost\"],\n },\n});\nconst policy = new gcp.compute.SecurityPolicy(\"policy\", {\n description: \"basic security policy\",\n type: \"CLOUD_ARMOR\",\n recaptchaOptionsConfig: {\n redirectSiteKey: primary.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.recaptcha.EnterpriseKey(\"primary\",\n display_name=\"display-name\",\n labels={\n \"label-one\": \"value-one\",\n },\n project=\"my-project-name\",\n web_settings=gcp.recaptcha.EnterpriseKeyWebSettingsArgs(\n integration_type=\"INVISIBLE\",\n allow_all_domains=True,\n allowed_domains=[\"localhost\"],\n ))\npolicy = gcp.compute.SecurityPolicy(\"policy\",\n description=\"basic security policy\",\n type=\"CLOUD_ARMOR\",\n recaptcha_options_config=gcp.compute.SecurityPolicyRecaptchaOptionsConfigArgs(\n redirect_site_key=primary.name,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Recaptcha.EnterpriseKey(\"primary\", new()\n {\n DisplayName = \"display-name\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Project = \"my-project-name\",\n WebSettings = new Gcp.Recaptcha.Inputs.EnterpriseKeyWebSettingsArgs\n {\n IntegrationType = \"INVISIBLE\",\n AllowAllDomains = true,\n AllowedDomains = new[]\n {\n \"localhost\",\n },\n },\n });\n\n var policy = new Gcp.Compute.SecurityPolicy(\"policy\", new()\n {\n Description = \"basic security policy\",\n Type = \"CLOUD_ARMOR\",\n RecaptchaOptionsConfig = new Gcp.Compute.Inputs.SecurityPolicyRecaptchaOptionsConfigArgs\n {\n RedirectSiteKey = primary.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/recaptcha\"\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 := recaptcha.NewEnterpriseKey(ctx, \"primary\", \u0026recaptcha.EnterpriseKeyArgs{\n\t\t\tDisplayName: pulumi.String(\"display-name\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tWebSettings: \u0026recaptcha.EnterpriseKeyWebSettingsArgs{\n\t\t\t\tIntegrationType: pulumi.String(\"INVISIBLE\"),\n\t\t\t\tAllowAllDomains: pulumi.Bool(true),\n\t\t\t\tAllowedDomains: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"localhost\"),\n\t\t\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.NewSecurityPolicy(ctx, \"policy\", \u0026compute.SecurityPolicyArgs{\n\t\t\tDescription: pulumi.String(\"basic security policy\"),\n\t\t\tType: pulumi.String(\"CLOUD_ARMOR\"),\n\t\t\tRecaptchaOptionsConfig: \u0026compute.SecurityPolicyRecaptchaOptionsConfigArgs{\n\t\t\t\tRedirectSiteKey: primary.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.recaptcha.EnterpriseKey;\nimport com.pulumi.gcp.recaptcha.EnterpriseKeyArgs;\nimport com.pulumi.gcp.recaptcha.inputs.EnterpriseKeyWebSettingsArgs;\nimport com.pulumi.gcp.compute.SecurityPolicy;\nimport com.pulumi.gcp.compute.SecurityPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRecaptchaOptionsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 EnterpriseKey(\"primary\", EnterpriseKeyArgs.builder() \n .displayName(\"display-name\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .project(\"my-project-name\")\n .webSettings(EnterpriseKeyWebSettingsArgs.builder()\n .integrationType(\"INVISIBLE\")\n .allowAllDomains(true)\n .allowedDomains(\"localhost\")\n .build())\n .build());\n\n var policy = new SecurityPolicy(\"policy\", SecurityPolicyArgs.builder() \n .description(\"basic security policy\")\n .type(\"CLOUD_ARMOR\")\n .recaptchaOptionsConfig(SecurityPolicyRecaptchaOptionsConfigArgs.builder()\n .redirectSiteKey(primary.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:recaptcha:EnterpriseKey\n properties:\n displayName: display-name\n labels:\n label-one: value-one\n project: my-project-name\n webSettings:\n integrationType: INVISIBLE\n allowAllDomains: true\n allowedDomains:\n - localhost\n policy:\n type: gcp:compute:SecurityPolicy\n properties:\n description: basic security policy\n type: CLOUD_ARMOR\n recaptchaOptionsConfig:\n redirectSiteKey: ${primary.name}\n```\n{{% /example %}}\n{{% example %}}\n### With Header Actions\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst policy = new gcp.compute.SecurityPolicy(\"policy\", {rules: [\n {\n action: \"allow\",\n description: \"default rule\",\n match: {\n config: {\n srcIpRanges: [\"*\"],\n },\n versionedExpr: \"SRC_IPS_V1\",\n },\n priority: 2147483647,\n },\n {\n action: \"allow\",\n headerAction: {\n requestHeadersToAdds: [\n {\n headerName: \"reCAPTCHA-Warning\",\n headerValue: \"high\",\n },\n {\n headerName: \"X-Resource\",\n headerValue: \"test\",\n },\n ],\n },\n match: {\n expr: {\n expression: \"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\",\n },\n },\n priority: 1000,\n },\n]});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npolicy = gcp.compute.SecurityPolicy(\"policy\", rules=[\n gcp.compute.SecurityPolicyRuleArgs(\n action=\"allow\",\n description=\"default rule\",\n match=gcp.compute.SecurityPolicyRuleMatchArgs(\n config=gcp.compute.SecurityPolicyRuleMatchConfigArgs(\n src_ip_ranges=[\"*\"],\n ),\n versioned_expr=\"SRC_IPS_V1\",\n ),\n priority=2147483647,\n ),\n gcp.compute.SecurityPolicyRuleArgs(\n action=\"allow\",\n header_action=gcp.compute.SecurityPolicyRuleHeaderActionArgs(\n request_headers_to_adds=[\n gcp.compute.SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs(\n header_name=\"reCAPTCHA-Warning\",\n header_value=\"high\",\n ),\n gcp.compute.SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs(\n header_name=\"X-Resource\",\n header_value=\"test\",\n ),\n ],\n ),\n match=gcp.compute.SecurityPolicyRuleMatchArgs(\n expr=gcp.compute.SecurityPolicyRuleMatchExprArgs(\n expression=\"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\",\n ),\n ),\n priority=1000,\n ),\n])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var policy = new Gcp.Compute.SecurityPolicy(\"policy\", new()\n {\n Rules = new[]\n {\n new Gcp.Compute.Inputs.SecurityPolicyRuleArgs\n {\n Action = \"allow\",\n Description = \"default rule\",\n Match = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchArgs\n {\n Config = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchConfigArgs\n {\n SrcIpRanges = new[]\n {\n \"*\",\n },\n },\n VersionedExpr = \"SRC_IPS_V1\",\n },\n Priority = 2147483647,\n },\n new Gcp.Compute.Inputs.SecurityPolicyRuleArgs\n {\n Action = \"allow\",\n HeaderAction = new Gcp.Compute.Inputs.SecurityPolicyRuleHeaderActionArgs\n {\n RequestHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs\n {\n HeaderName = \"reCAPTCHA-Warning\",\n HeaderValue = \"high\",\n },\n new Gcp.Compute.Inputs.SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs\n {\n HeaderName = \"X-Resource\",\n HeaderValue = \"test\",\n },\n },\n },\n Match = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchArgs\n {\n Expr = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchExprArgs\n {\n Expression = \"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\",\n },\n },\n Priority = 1000,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewSecurityPolicy(ctx, \"policy\", \u0026compute.SecurityPolicyArgs{\n\t\t\tRules: compute.SecurityPolicyRuleArray{\n\t\t\t\t\u0026compute.SecurityPolicyRuleArgs{\n\t\t\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\t\t\tDescription: pulumi.String(\"default rule\"),\n\t\t\t\t\tMatch: \u0026compute.SecurityPolicyRuleMatchArgs{\n\t\t\t\t\t\tConfig: \u0026compute.SecurityPolicyRuleMatchConfigArgs{\n\t\t\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"*\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVersionedExpr: pulumi.String(\"SRC_IPS_V1\"),\n\t\t\t\t\t},\n\t\t\t\t\tPriority: pulumi.Int(2147483647),\n\t\t\t\t},\n\t\t\t\t\u0026compute.SecurityPolicyRuleArgs{\n\t\t\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\t\t\tHeaderAction: \u0026compute.SecurityPolicyRuleHeaderActionArgs{\n\t\t\t\t\t\tRequestHeadersToAdds: compute.SecurityPolicyRuleHeaderActionRequestHeadersToAddArray{\n\t\t\t\t\t\t\t\u0026compute.SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs{\n\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"reCAPTCHA-Warning\"),\n\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026compute.SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs{\n\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"X-Resource\"),\n\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"test\"),\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\tMatch: \u0026compute.SecurityPolicyRuleMatchArgs{\n\t\t\t\t\t\tExpr: \u0026compute.SecurityPolicyRuleMatchExprArgs{\n\t\t\t\t\t\t\tExpression: pulumi.String(\"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPriority: pulumi.Int(1000),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.SecurityPolicy;\nimport com.pulumi.gcp.compute.SecurityPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleMatchArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleMatchConfigArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleHeaderActionArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleMatchExprArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var policy = new SecurityPolicy(\"policy\", SecurityPolicyArgs.builder() \n .rules( \n SecurityPolicyRuleArgs.builder()\n .action(\"allow\")\n .description(\"default rule\")\n .match(SecurityPolicyRuleMatchArgs.builder()\n .config(SecurityPolicyRuleMatchConfigArgs.builder()\n .srcIpRanges(\"*\")\n .build())\n .versionedExpr(\"SRC_IPS_V1\")\n .build())\n .priority(\"2147483647\")\n .build(),\n SecurityPolicyRuleArgs.builder()\n .action(\"allow\")\n .headerAction(SecurityPolicyRuleHeaderActionArgs.builder()\n .requestHeadersToAdds( \n SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"reCAPTCHA-Warning\")\n .headerValue(\"high\")\n .build(),\n SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"X-Resource\")\n .headerValue(\"test\")\n .build())\n .build())\n .match(SecurityPolicyRuleMatchArgs.builder()\n .expr(SecurityPolicyRuleMatchExprArgs.builder()\n .expression(\"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\")\n .build())\n .build())\n .priority(\"1000\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:compute:SecurityPolicy\n properties:\n rules:\n - action: allow\n description: default rule\n match:\n config:\n srcIpRanges:\n - '*'\n versionedExpr: SRC_IPS_V1\n priority: '2147483647'\n - action: allow\n headerAction:\n requestHeadersToAdds:\n - headerName: reCAPTCHA-Warning\n headerValue: high\n - headerName: X-Resource\n headerValue: test\n match:\n expr:\n expression: request.path.matches(\"/login.html\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\n priority: '1000'\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst policy = new gcp.compute.SecurityPolicy(\"policy\", {rules: [\n {\n action: \"deny(403)\",\n description: \"Deny access to IPs in 9.9.9.0/24\",\n match: {\n config: {\n srcIpRanges: [\"9.9.9.0/24\"],\n },\n versionedExpr: \"SRC_IPS_V1\",\n },\n priority: 1000,\n },\n {\n action: \"allow\",\n description: \"default rule\",\n match: {\n config: {\n srcIpRanges: [\"*\"],\n },\n versionedExpr: \"SRC_IPS_V1\",\n },\n priority: 2147483647,\n },\n]});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npolicy = gcp.compute.SecurityPolicy(\"policy\", rules=[\n gcp.compute.SecurityPolicyRuleArgs(\n action=\"deny(403)\",\n description=\"Deny access to IPs in 9.9.9.0/24\",\n match=gcp.compute.SecurityPolicyRuleMatchArgs(\n config=gcp.compute.SecurityPolicyRuleMatchConfigArgs(\n src_ip_ranges=[\"9.9.9.0/24\"],\n ),\n versioned_expr=\"SRC_IPS_V1\",\n ),\n priority=1000,\n ),\n gcp.compute.SecurityPolicyRuleArgs(\n action=\"allow\",\n description=\"default rule\",\n match=gcp.compute.SecurityPolicyRuleMatchArgs(\n config=gcp.compute.SecurityPolicyRuleMatchConfigArgs(\n src_ip_ranges=[\"*\"],\n ),\n versioned_expr=\"SRC_IPS_V1\",\n ),\n priority=2147483647,\n ),\n])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var policy = new Gcp.Compute.SecurityPolicy(\"policy\", new()\n {\n Rules = new[]\n {\n new Gcp.Compute.Inputs.SecurityPolicyRuleArgs\n {\n Action = \"deny(403)\",\n Description = \"Deny access to IPs in 9.9.9.0/24\",\n Match = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchArgs\n {\n Config = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchConfigArgs\n {\n SrcIpRanges = new[]\n {\n \"9.9.9.0/24\",\n },\n },\n VersionedExpr = \"SRC_IPS_V1\",\n },\n Priority = 1000,\n },\n new Gcp.Compute.Inputs.SecurityPolicyRuleArgs\n {\n Action = \"allow\",\n Description = \"default rule\",\n Match = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchArgs\n {\n Config = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchConfigArgs\n {\n SrcIpRanges = new[]\n {\n \"*\",\n },\n },\n VersionedExpr = \"SRC_IPS_V1\",\n },\n Priority = 2147483647,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewSecurityPolicy(ctx, \"policy\", \u0026compute.SecurityPolicyArgs{\n\t\t\tRules: compute.SecurityPolicyRuleArray{\n\t\t\t\t\u0026compute.SecurityPolicyRuleArgs{\n\t\t\t\t\tAction: pulumi.String(\"deny(403)\"),\n\t\t\t\t\tDescription: pulumi.String(\"Deny access to IPs in 9.9.9.0/24\"),\n\t\t\t\t\tMatch: \u0026compute.SecurityPolicyRuleMatchArgs{\n\t\t\t\t\t\tConfig: \u0026compute.SecurityPolicyRuleMatchConfigArgs{\n\t\t\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"9.9.9.0/24\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVersionedExpr: pulumi.String(\"SRC_IPS_V1\"),\n\t\t\t\t\t},\n\t\t\t\t\tPriority: pulumi.Int(1000),\n\t\t\t\t},\n\t\t\t\t\u0026compute.SecurityPolicyRuleArgs{\n\t\t\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\t\t\tDescription: pulumi.String(\"default rule\"),\n\t\t\t\t\tMatch: \u0026compute.SecurityPolicyRuleMatchArgs{\n\t\t\t\t\t\tConfig: \u0026compute.SecurityPolicyRuleMatchConfigArgs{\n\t\t\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"*\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVersionedExpr: pulumi.String(\"SRC_IPS_V1\"),\n\t\t\t\t\t},\n\t\t\t\t\tPriority: pulumi.Int(2147483647),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.SecurityPolicy;\nimport com.pulumi.gcp.compute.SecurityPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleMatchArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleMatchConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var policy = new SecurityPolicy(\"policy\", SecurityPolicyArgs.builder() \n .rules( \n SecurityPolicyRuleArgs.builder()\n .action(\"deny(403)\")\n .description(\"Deny access to IPs in 9.9.9.0/24\")\n .match(SecurityPolicyRuleMatchArgs.builder()\n .config(SecurityPolicyRuleMatchConfigArgs.builder()\n .srcIpRanges(\"9.9.9.0/24\")\n .build())\n .versionedExpr(\"SRC_IPS_V1\")\n .build())\n .priority(\"1000\")\n .build(),\n SecurityPolicyRuleArgs.builder()\n .action(\"allow\")\n .description(\"default rule\")\n .match(SecurityPolicyRuleMatchArgs.builder()\n .config(SecurityPolicyRuleMatchConfigArgs.builder()\n .srcIpRanges(\"*\")\n .build())\n .versionedExpr(\"SRC_IPS_V1\")\n .build())\n .priority(\"2147483647\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:compute:SecurityPolicy\n properties:\n rules:\n - action: deny(403)\n description: Deny access to IPs in 9.9.9.0/24\n match:\n config:\n srcIpRanges:\n - 9.9.9.0/24\n versionedExpr: SRC_IPS_V1\n priority: '1000'\n - action: allow\n description: default rule\n match:\n config:\n srcIpRanges:\n - '*'\n versionedExpr: SRC_IPS_V1\n priority: '2147483647'\n```\n{{% /example %}}\n{{% example %}}\n### With ReCAPTCHA Configuration Options\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst primary = new gcp.recaptcha.EnterpriseKey(\"primary\", {\n displayName: \"display-name\",\n labels: {\n \"label-one\": \"value-one\",\n },\n project: \"my-project-name\",\n webSettings: {\n integrationType: \"INVISIBLE\",\n allowAllDomains: true,\n allowedDomains: [\"localhost\"],\n },\n});\nconst policy = new gcp.compute.SecurityPolicy(\"policy\", {\n description: \"basic security policy\",\n type: \"CLOUD_ARMOR\",\n recaptchaOptionsConfig: {\n redirectSiteKey: primary.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nprimary = gcp.recaptcha.EnterpriseKey(\"primary\",\n display_name=\"display-name\",\n labels={\n \"label-one\": \"value-one\",\n },\n project=\"my-project-name\",\n web_settings=gcp.recaptcha.EnterpriseKeyWebSettingsArgs(\n integration_type=\"INVISIBLE\",\n allow_all_domains=True,\n allowed_domains=[\"localhost\"],\n ))\npolicy = gcp.compute.SecurityPolicy(\"policy\",\n description=\"basic security policy\",\n type=\"CLOUD_ARMOR\",\n recaptcha_options_config=gcp.compute.SecurityPolicyRecaptchaOptionsConfigArgs(\n redirect_site_key=primary.name,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var primary = new Gcp.Recaptcha.EnterpriseKey(\"primary\", new()\n {\n DisplayName = \"display-name\",\n Labels = \n {\n { \"label-one\", \"value-one\" },\n },\n Project = \"my-project-name\",\n WebSettings = new Gcp.Recaptcha.Inputs.EnterpriseKeyWebSettingsArgs\n {\n IntegrationType = \"INVISIBLE\",\n AllowAllDomains = true,\n AllowedDomains = new[]\n {\n \"localhost\",\n },\n },\n });\n\n var policy = new Gcp.Compute.SecurityPolicy(\"policy\", new()\n {\n Description = \"basic security policy\",\n Type = \"CLOUD_ARMOR\",\n RecaptchaOptionsConfig = new Gcp.Compute.Inputs.SecurityPolicyRecaptchaOptionsConfigArgs\n {\n RedirectSiteKey = primary.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/recaptcha\"\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 := recaptcha.NewEnterpriseKey(ctx, \"primary\", \u0026recaptcha.EnterpriseKeyArgs{\n\t\t\tDisplayName: pulumi.String(\"display-name\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"my-project-name\"),\n\t\t\tWebSettings: \u0026recaptcha.EnterpriseKeyWebSettingsArgs{\n\t\t\t\tIntegrationType: pulumi.String(\"INVISIBLE\"),\n\t\t\t\tAllowAllDomains: pulumi.Bool(true),\n\t\t\t\tAllowedDomains: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"localhost\"),\n\t\t\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.NewSecurityPolicy(ctx, \"policy\", \u0026compute.SecurityPolicyArgs{\n\t\t\tDescription: pulumi.String(\"basic security policy\"),\n\t\t\tType: pulumi.String(\"CLOUD_ARMOR\"),\n\t\t\tRecaptchaOptionsConfig: \u0026compute.SecurityPolicyRecaptchaOptionsConfigArgs{\n\t\t\t\tRedirectSiteKey: primary.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.recaptcha.EnterpriseKey;\nimport com.pulumi.gcp.recaptcha.EnterpriseKeyArgs;\nimport com.pulumi.gcp.recaptcha.inputs.EnterpriseKeyWebSettingsArgs;\nimport com.pulumi.gcp.compute.SecurityPolicy;\nimport com.pulumi.gcp.compute.SecurityPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRecaptchaOptionsConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 EnterpriseKey(\"primary\", EnterpriseKeyArgs.builder() \n .displayName(\"display-name\")\n .labels(Map.of(\"label-one\", \"value-one\"))\n .project(\"my-project-name\")\n .webSettings(EnterpriseKeyWebSettingsArgs.builder()\n .integrationType(\"INVISIBLE\")\n .allowAllDomains(true)\n .allowedDomains(\"localhost\")\n .build())\n .build());\n\n var policy = new SecurityPolicy(\"policy\", SecurityPolicyArgs.builder() \n .description(\"basic security policy\")\n .type(\"CLOUD_ARMOR\")\n .recaptchaOptionsConfig(SecurityPolicyRecaptchaOptionsConfigArgs.builder()\n .redirectSiteKey(primary.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:recaptcha:EnterpriseKey\n properties:\n displayName: display-name\n labels:\n label-one: value-one\n project: my-project-name\n webSettings:\n integrationType: INVISIBLE\n allowAllDomains: true\n allowedDomains:\n - localhost\n policy:\n type: gcp:compute:SecurityPolicy\n properties:\n description: basic security policy\n type: CLOUD_ARMOR\n recaptchaOptionsConfig:\n redirectSiteKey: ${primary.name}\n```\n{{% /example %}}\n{{% example %}}\n### With Header Actions\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst policy = new gcp.compute.SecurityPolicy(\"policy\", {rules: [\n {\n action: \"allow\",\n description: \"default rule\",\n match: {\n config: {\n srcIpRanges: [\"*\"],\n },\n versionedExpr: \"SRC_IPS_V1\",\n },\n priority: 2147483647,\n },\n {\n action: \"allow\",\n headerAction: {\n requestHeadersToAdds: [\n {\n headerName: \"reCAPTCHA-Warning\",\n headerValue: \"high\",\n },\n {\n headerName: \"X-Resource\",\n headerValue: \"test\",\n },\n ],\n },\n match: {\n expr: {\n expression: \"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\",\n },\n },\n priority: 1000,\n },\n]});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npolicy = gcp.compute.SecurityPolicy(\"policy\", rules=[\n gcp.compute.SecurityPolicyRuleArgs(\n action=\"allow\",\n description=\"default rule\",\n match=gcp.compute.SecurityPolicyRuleMatchArgs(\n config=gcp.compute.SecurityPolicyRuleMatchConfigArgs(\n src_ip_ranges=[\"*\"],\n ),\n versioned_expr=\"SRC_IPS_V1\",\n ),\n priority=2147483647,\n ),\n gcp.compute.SecurityPolicyRuleArgs(\n action=\"allow\",\n header_action=gcp.compute.SecurityPolicyRuleHeaderActionArgs(\n request_headers_to_adds=[\n gcp.compute.SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs(\n header_name=\"reCAPTCHA-Warning\",\n header_value=\"high\",\n ),\n gcp.compute.SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs(\n header_name=\"X-Resource\",\n header_value=\"test\",\n ),\n ],\n ),\n match=gcp.compute.SecurityPolicyRuleMatchArgs(\n expr=gcp.compute.SecurityPolicyRuleMatchExprArgs(\n expression=\"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\",\n ),\n ),\n priority=1000,\n ),\n])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var policy = new Gcp.Compute.SecurityPolicy(\"policy\", new()\n {\n Rules = new[]\n {\n new Gcp.Compute.Inputs.SecurityPolicyRuleArgs\n {\n Action = \"allow\",\n Description = \"default rule\",\n Match = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchArgs\n {\n Config = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchConfigArgs\n {\n SrcIpRanges = new[]\n {\n \"*\",\n },\n },\n VersionedExpr = \"SRC_IPS_V1\",\n },\n Priority = 2147483647,\n },\n new Gcp.Compute.Inputs.SecurityPolicyRuleArgs\n {\n Action = \"allow\",\n HeaderAction = new Gcp.Compute.Inputs.SecurityPolicyRuleHeaderActionArgs\n {\n RequestHeadersToAdds = new[]\n {\n new Gcp.Compute.Inputs.SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs\n {\n HeaderName = \"reCAPTCHA-Warning\",\n HeaderValue = \"high\",\n },\n new Gcp.Compute.Inputs.SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs\n {\n HeaderName = \"X-Resource\",\n HeaderValue = \"test\",\n },\n },\n },\n Match = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchArgs\n {\n Expr = new Gcp.Compute.Inputs.SecurityPolicyRuleMatchExprArgs\n {\n Expression = \"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\",\n },\n },\n Priority = 1000,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewSecurityPolicy(ctx, \"policy\", \u0026compute.SecurityPolicyArgs{\n\t\t\tRules: compute.SecurityPolicyRuleArray{\n\t\t\t\t\u0026compute.SecurityPolicyRuleArgs{\n\t\t\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\t\t\tDescription: pulumi.String(\"default rule\"),\n\t\t\t\t\tMatch: \u0026compute.SecurityPolicyRuleMatchArgs{\n\t\t\t\t\t\tConfig: \u0026compute.SecurityPolicyRuleMatchConfigArgs{\n\t\t\t\t\t\t\tSrcIpRanges: pulumi.StringArray{\n\t\t\t\t\t\t\t\tpulumi.String(\"*\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t},\n\t\t\t\t\t\tVersionedExpr: pulumi.String(\"SRC_IPS_V1\"),\n\t\t\t\t\t},\n\t\t\t\t\tPriority: pulumi.Int(2147483647),\n\t\t\t\t},\n\t\t\t\t\u0026compute.SecurityPolicyRuleArgs{\n\t\t\t\t\tAction: pulumi.String(\"allow\"),\n\t\t\t\t\tHeaderAction: \u0026compute.SecurityPolicyRuleHeaderActionArgs{\n\t\t\t\t\t\tRequestHeadersToAdds: compute.SecurityPolicyRuleHeaderActionRequestHeadersToAddArray{\n\t\t\t\t\t\t\t\u0026compute.SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs{\n\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"reCAPTCHA-Warning\"),\n\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"high\"),\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\u0026compute.SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs{\n\t\t\t\t\t\t\t\tHeaderName: pulumi.String(\"X-Resource\"),\n\t\t\t\t\t\t\t\tHeaderValue: pulumi.String(\"test\"),\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\tMatch: \u0026compute.SecurityPolicyRuleMatchArgs{\n\t\t\t\t\t\tExpr: \u0026compute.SecurityPolicyRuleMatchExprArgs{\n\t\t\t\t\t\t\tExpression: pulumi.String(\"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\tPriority: pulumi.Int(1000),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.SecurityPolicy;\nimport com.pulumi.gcp.compute.SecurityPolicyArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleMatchArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleMatchConfigArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleHeaderActionArgs;\nimport com.pulumi.gcp.compute.inputs.SecurityPolicyRuleMatchExprArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var policy = new SecurityPolicy(\"policy\", SecurityPolicyArgs.builder() \n .rules( \n SecurityPolicyRuleArgs.builder()\n .action(\"allow\")\n .description(\"default rule\")\n .match(SecurityPolicyRuleMatchArgs.builder()\n .config(SecurityPolicyRuleMatchConfigArgs.builder()\n .srcIpRanges(\"*\")\n .build())\n .versionedExpr(\"SRC_IPS_V1\")\n .build())\n .priority(\"2147483647\")\n .build(),\n SecurityPolicyRuleArgs.builder()\n .action(\"allow\")\n .headerAction(SecurityPolicyRuleHeaderActionArgs.builder()\n .requestHeadersToAdds( \n SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"reCAPTCHA-Warning\")\n .headerValue(\"high\")\n .build(),\n SecurityPolicyRuleHeaderActionRequestHeadersToAddArgs.builder()\n .headerName(\"X-Resource\")\n .headerValue(\"test\")\n .build())\n .build())\n .match(SecurityPolicyRuleMatchArgs.builder()\n .expr(SecurityPolicyRuleMatchExprArgs.builder()\n .expression(\"request.path.matches(\\\"/login.html\\\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\")\n .build())\n .build())\n .priority(\"1000\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:compute:SecurityPolicy\n properties:\n rules:\n - action: allow\n description: default rule\n match:\n config:\n srcIpRanges:\n - '*'\n versionedExpr: SRC_IPS_V1\n priority: '2147483647'\n - action: allow\n headerAction:\n requestHeadersToAdds:\n - headerName: reCAPTCHA-Warning\n headerValue: high\n - headerName: X-Resource\n headerValue: test\n match:\n expr:\n expression: request.path.matches(\"/login.html\") \u0026\u0026 token.recaptcha_session.score \u003c 0.2\n priority: '1000'\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSecurity policies can be imported using any of the following formats\n\n```sh\n $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy projects/{{project}}/global/securityPolicies/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{name}}\n```\n\n ", "properties": { "adaptiveProtectionConfig": { "$ref": "#/types/gcp:compute/SecurityPolicyAdaptiveProtectionConfig:SecurityPolicyAdaptiveProtectionConfig", @@ -143620,7 +145080,7 @@ }, "selfLink": { "type": "string", - "description": "The URI of the created resourc\n" + "description": "The URI of the created resource.\n" }, "type": { "type": "string", @@ -143717,7 +145177,7 @@ }, "selfLink": { "type": "string", - "description": "The URI of the created resourc\n" + "description": "The URI of the created resource.\n" }, "type": { "type": "string", @@ -143728,7 +145188,7 @@ } }, "gcp:compute/securityScanConfig:SecurityScanConfig": { - "description": "A ScanConfig resource contains the configurations to launch a scan.\n\nTo get more information about ScanConfig, see:\n\n* [API documentation](https://cloud.google.com/security-scanner/docs/reference/rest/v1beta/projects.scanConfigs)\n* How-to Guides\n * [Using Cloud Security Scanner](https://cloud.google.com/security-scanner/docs/scanning)\n\n\u003e **Warning:** All arguments including `authentication.google_account.password` and `authentication.custom_account.password` will be stored in the raw state as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Scan Config Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst scannerStaticIp = new gcp.compute.Address(\"scannerStaticIp\", {}, {\n provider: google_beta,\n});\nconst scan_config = new gcp.compute.SecurityScanConfig(\"scan-config\", {\n displayName: \"scan-config\",\n startingUrls: [pulumi.interpolate`http://${scannerStaticIp.address}`],\n targetPlatforms: [\"COMPUTE\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscanner_static_ip = gcp.compute.Address(\"scannerStaticIp\", opts=pulumi.ResourceOptions(provider=google_beta))\nscan_config = gcp.compute.SecurityScanConfig(\"scan-config\",\n display_name=\"scan-config\",\n starting_urls=[scanner_static_ip.address.apply(lambda address: f\"http://{address}\")],\n target_platforms=[\"COMPUTE\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var scannerStaticIp = new Gcp.Compute.Address(\"scannerStaticIp\", new()\n {\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var scan_config = new Gcp.Compute.SecurityScanConfig(\"scan-config\", new()\n {\n DisplayName = \"scan-config\",\n StartingUrls = new[]\n {\n scannerStaticIp.IPAddress.Apply(address =\u003e $\"http://{address}\"),\n },\n TargetPlatforms = new[]\n {\n \"COMPUTE\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tscannerStaticIp, err := compute.NewAddress(ctx, \"scannerStaticIp\", nil, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSecurityScanConfig(ctx, \"scan-config\", \u0026compute.SecurityScanConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"scan-config\"),\n\t\t\tStartingUrls: pulumi.StringArray{\n\t\t\t\tscannerStaticIp.Address.ApplyT(func(address string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"http://%v\", address), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tTargetPlatforms: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"COMPUTE\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.Address;\nimport com.pulumi.gcp.compute.AddressArgs;\nimport com.pulumi.gcp.compute.SecurityScanConfig;\nimport com.pulumi.gcp.compute.SecurityScanConfigArgs;\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 scannerStaticIp = new Address(\"scannerStaticIp\", AddressArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var scan_config = new SecurityScanConfig(\"scan-config\", SecurityScanConfigArgs.builder() \n .displayName(\"scan-config\")\n .startingUrls(scannerStaticIp.address().applyValue(address -\u003e String.format(\"http://%s\", address)))\n .targetPlatforms(\"COMPUTE\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n scannerStaticIp:\n type: gcp:compute:Address\n options:\n provider: ${[\"google-beta\"]}\n scan-config:\n type: gcp:compute:SecurityScanConfig\n properties:\n displayName: scan-config\n startingUrls:\n - http://${scannerStaticIp.address}\n targetPlatforms:\n - COMPUTE\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nScanConfig can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/securityScanConfig:SecurityScanConfig default projects/{{project}}/scanConfigs/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/securityScanConfig:SecurityScanConfig default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/securityScanConfig:SecurityScanConfig default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Scan Config Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst scannerStaticIp = new gcp.compute.Address(\"scannerStaticIp\", {}, {\n provider: google_beta,\n});\nconst scan_config = new gcp.compute.SecurityScanConfig(\"scan-config\", {\n displayName: \"terraform-scan-config\",\n startingUrls: [pulumi.interpolate`http://${scannerStaticIp.address}`],\n targetPlatforms: [\"COMPUTE\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nscanner_static_ip = gcp.compute.Address(\"scannerStaticIp\", opts=pulumi.ResourceOptions(provider=google_beta))\nscan_config = gcp.compute.SecurityScanConfig(\"scan-config\",\n display_name=\"terraform-scan-config\",\n starting_urls=[scanner_static_ip.address.apply(lambda address: f\"http://{address}\")],\n target_platforms=[\"COMPUTE\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var scannerStaticIp = new Gcp.Compute.Address(\"scannerStaticIp\", new()\n {\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var scan_config = new Gcp.Compute.SecurityScanConfig(\"scan-config\", new()\n {\n DisplayName = \"terraform-scan-config\",\n StartingUrls = new[]\n {\n scannerStaticIp.IPAddress.Apply(address =\u003e $\"http://{address}\"),\n },\n TargetPlatforms = new[]\n {\n \"COMPUTE\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tscannerStaticIp, err := compute.NewAddress(ctx, \"scannerStaticIp\", nil, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSecurityScanConfig(ctx, \"scan-config\", \u0026compute.SecurityScanConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"terraform-scan-config\"),\n\t\t\tStartingUrls: pulumi.StringArray{\n\t\t\t\tscannerStaticIp.Address.ApplyT(func(address string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"http://%v\", address), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tTargetPlatforms: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"COMPUTE\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.Address;\nimport com.pulumi.gcp.compute.AddressArgs;\nimport com.pulumi.gcp.compute.SecurityScanConfig;\nimport com.pulumi.gcp.compute.SecurityScanConfigArgs;\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 scannerStaticIp = new Address(\"scannerStaticIp\", AddressArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var scan_config = new SecurityScanConfig(\"scan-config\", SecurityScanConfigArgs.builder() \n .displayName(\"terraform-scan-config\")\n .startingUrls(scannerStaticIp.address().applyValue(address -\u003e String.format(\"http://%s\", address)))\n .targetPlatforms(\"COMPUTE\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n scannerStaticIp:\n type: gcp:compute:Address\n options:\n provider: ${[\"google-beta\"]}\n scan-config:\n type: gcp:compute:SecurityScanConfig\n properties:\n displayName: terraform-scan-config\n startingUrls:\n - http://${scannerStaticIp.address}\n targetPlatforms:\n - COMPUTE\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nScanConfig can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/securityScanConfig:SecurityScanConfig default projects/{{project}}/scanConfigs/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/securityScanConfig:SecurityScanConfig default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/securityScanConfig:SecurityScanConfig default {{name}}\n```\n\n ", "properties": { "authentication": { "$ref": "#/types/gcp:compute/SecurityScanConfigAuthentication:SecurityScanConfigAuthentication", @@ -144231,7 +145691,7 @@ } }, "gcp:compute/snapshot:Snapshot": { - "description": "Represents a Persistent Disk Snapshot resource.\n\nUse snapshots to back up data from your persistent disks. Snapshots are\ndifferent from public images and custom images, which are used primarily\nto create instances or configure instance templates. Snapshots are useful\nfor periodic backup of the data on your persistent disks. You can create\nsnapshots from persistent disks even while they are attached to running\ninstances.\n\nSnapshots are incremental, so you can create regular snapshots on a\npersistent disk faster and at a much lower cost than if you regularly\ncreated a full image of the disk.\n\n\nTo get more information about Snapshot, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/snapshots)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/disks/create-snapshots)\n\n\u003e **Warning:** All arguments including `snapshot_encryption_key.raw_key` and `source_disk_encryption_key.raw_key` will be stored in the raw\nstate as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Snapshot Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst debian = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst persistent = new gcp.compute.Disk(\"persistent\", {\n image: debian.then(debian =\u003e debian.selfLink),\n size: 10,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst snapshot = new gcp.compute.Snapshot(\"snapshot\", {\n sourceDisk: persistent.id,\n zone: \"us-central1-a\",\n labels: {\n my_label: \"value\",\n },\n storageLocations: [\"us-central1\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndebian = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\npersistent = gcp.compute.Disk(\"persistent\",\n image=debian.self_link,\n size=10,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nsnapshot = gcp.compute.Snapshot(\"snapshot\",\n source_disk=persistent.id,\n zone=\"us-central1-a\",\n labels={\n \"my_label\": \"value\",\n },\n storage_locations=[\"us-central1\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var debian = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var persistent = new Gcp.Compute.Disk(\"persistent\", new()\n {\n Image = debian.Apply(getImageResult =\u003e getImageResult.SelfLink),\n Size = 10,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var snapshot = new Gcp.Compute.Snapshot(\"snapshot\", new()\n {\n SourceDisk = persistent.Id,\n Zone = \"us-central1-a\",\n Labels = \n {\n { \"my_label\", \"value\" },\n },\n StorageLocations = new[]\n {\n \"us-central1\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdebian, 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\tpersistent, err := compute.NewDisk(ctx, \"persistent\", \u0026compute.DiskArgs{\n\t\t\tImage: *pulumi.String(debian.SelfLink),\n\t\t\tSize: pulumi.Int(10),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSnapshot(ctx, \"snapshot\", \u0026compute.SnapshotArgs{\n\t\t\tSourceDisk: persistent.ID(),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_label\": pulumi.String(\"value\"),\n\t\t\t},\n\t\t\tStorageLocations: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-central1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.Snapshot;\nimport com.pulumi.gcp.compute.SnapshotArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 debian = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var persistent = new Disk(\"persistent\", DiskArgs.builder() \n .image(debian.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .size(10)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var snapshot = new Snapshot(\"snapshot\", SnapshotArgs.builder() \n .sourceDisk(persistent.id())\n .zone(\"us-central1-a\")\n .labels(Map.of(\"my_label\", \"value\"))\n .storageLocations(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n snapshot:\n type: gcp:compute:Snapshot\n properties:\n sourceDisk: ${persistent.id}\n zone: us-central1-a\n labels:\n my_label: value\n storageLocations:\n - us-central1\n persistent:\n type: gcp:compute:Disk\n properties:\n image: ${debian.selfLink}\n size: 10\n type: pd-ssd\n zone: us-central1-a\nvariables:\n debian:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% example %}}\n### Snapshot Chainname\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst debian = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst persistent = new gcp.compute.Disk(\"persistent\", {\n image: debian.then(debian =\u003e debian.selfLink),\n size: 10,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst snapshot = new gcp.compute.Snapshot(\"snapshot\", {\n sourceDisk: persistent.id,\n zone: \"us-central1-a\",\n chainName: \"snapshot-chain\",\n labels: {\n my_label: \"value\",\n },\n storageLocations: [\"us-central1\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndebian = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\npersistent = gcp.compute.Disk(\"persistent\",\n image=debian.self_link,\n size=10,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nsnapshot = gcp.compute.Snapshot(\"snapshot\",\n source_disk=persistent.id,\n zone=\"us-central1-a\",\n chain_name=\"snapshot-chain\",\n labels={\n \"my_label\": \"value\",\n },\n storage_locations=[\"us-central1\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var debian = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var persistent = new Gcp.Compute.Disk(\"persistent\", new()\n {\n Image = debian.Apply(getImageResult =\u003e getImageResult.SelfLink),\n Size = 10,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var snapshot = new Gcp.Compute.Snapshot(\"snapshot\", new()\n {\n SourceDisk = persistent.Id,\n Zone = \"us-central1-a\",\n ChainName = \"snapshot-chain\",\n Labels = \n {\n { \"my_label\", \"value\" },\n },\n StorageLocations = new[]\n {\n \"us-central1\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdebian, 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\tpersistent, err := compute.NewDisk(ctx, \"persistent\", \u0026compute.DiskArgs{\n\t\t\tImage: *pulumi.String(debian.SelfLink),\n\t\t\tSize: pulumi.Int(10),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSnapshot(ctx, \"snapshot\", \u0026compute.SnapshotArgs{\n\t\t\tSourceDisk: persistent.ID(),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tChainName: pulumi.String(\"snapshot-chain\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_label\": pulumi.String(\"value\"),\n\t\t\t},\n\t\t\tStorageLocations: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-central1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.Snapshot;\nimport com.pulumi.gcp.compute.SnapshotArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 debian = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var persistent = new Disk(\"persistent\", DiskArgs.builder() \n .image(debian.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .size(10)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var snapshot = new Snapshot(\"snapshot\", SnapshotArgs.builder() \n .sourceDisk(persistent.id())\n .zone(\"us-central1-a\")\n .chainName(\"snapshot-chain\")\n .labels(Map.of(\"my_label\", \"value\"))\n .storageLocations(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n snapshot:\n type: gcp:compute:Snapshot\n properties:\n sourceDisk: ${persistent.id}\n zone: us-central1-a\n chainName: snapshot-chain\n labels:\n my_label: value\n storageLocations:\n - us-central1\n persistent:\n type: gcp:compute:Disk\n properties:\n image: ${debian.selfLink}\n size: 10\n type: pd-ssd\n zone: us-central1-a\nvariables:\n debian:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSnapshot can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/snapshot:Snapshot default projects/{{project}}/global/snapshots/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/snapshot:Snapshot default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/snapshot:Snapshot default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Snapshot Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst debian = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst persistent = new gcp.compute.Disk(\"persistent\", {\n image: debian.then(debian =\u003e debian.selfLink),\n size: 10,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst snapshot = new gcp.compute.Snapshot(\"snapshot\", {\n sourceDisk: persistent.id,\n zone: \"us-central1-a\",\n labels: {\n my_label: \"value\",\n },\n storageLocations: [\"us-central1\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndebian = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\npersistent = gcp.compute.Disk(\"persistent\",\n image=debian.self_link,\n size=10,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nsnapshot = gcp.compute.Snapshot(\"snapshot\",\n source_disk=persistent.id,\n zone=\"us-central1-a\",\n labels={\n \"my_label\": \"value\",\n },\n storage_locations=[\"us-central1\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var debian = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var persistent = new Gcp.Compute.Disk(\"persistent\", new()\n {\n Image = debian.Apply(getImageResult =\u003e getImageResult.SelfLink),\n Size = 10,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var snapshot = new Gcp.Compute.Snapshot(\"snapshot\", new()\n {\n SourceDisk = persistent.Id,\n Zone = \"us-central1-a\",\n Labels = \n {\n { \"my_label\", \"value\" },\n },\n StorageLocations = new[]\n {\n \"us-central1\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdebian, 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\tpersistent, err := compute.NewDisk(ctx, \"persistent\", \u0026compute.DiskArgs{\n\t\t\tImage: *pulumi.String(debian.SelfLink),\n\t\t\tSize: pulumi.Int(10),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSnapshot(ctx, \"snapshot\", \u0026compute.SnapshotArgs{\n\t\t\tSourceDisk: persistent.ID(),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_label\": pulumi.String(\"value\"),\n\t\t\t},\n\t\t\tStorageLocations: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-central1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.Snapshot;\nimport com.pulumi.gcp.compute.SnapshotArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 debian = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var persistent = new Disk(\"persistent\", DiskArgs.builder() \n .image(debian.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .size(10)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var snapshot = new Snapshot(\"snapshot\", SnapshotArgs.builder() \n .sourceDisk(persistent.id())\n .zone(\"us-central1-a\")\n .labels(Map.of(\"my_label\", \"value\"))\n .storageLocations(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n snapshot:\n type: gcp:compute:Snapshot\n properties:\n sourceDisk: ${persistent.id}\n zone: us-central1-a\n labels:\n my_label: value\n storageLocations:\n - us-central1\n persistent:\n type: gcp:compute:Disk\n properties:\n image: ${debian.selfLink}\n size: 10\n type: pd-ssd\n zone: us-central1-a\nvariables:\n debian:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% example %}}\n### Snapshot Chainname\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst debian = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst persistent = new gcp.compute.Disk(\"persistent\", {\n image: debian.then(debian =\u003e debian.selfLink),\n size: 10,\n type: \"pd-ssd\",\n zone: \"us-central1-a\",\n});\nconst snapshot = new gcp.compute.Snapshot(\"snapshot\", {\n sourceDisk: persistent.id,\n zone: \"us-central1-a\",\n chainName: \"snapshot-chain\",\n labels: {\n my_label: \"value\",\n },\n storageLocations: [\"us-central1\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndebian = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\npersistent = gcp.compute.Disk(\"persistent\",\n image=debian.self_link,\n size=10,\n type=\"pd-ssd\",\n zone=\"us-central1-a\")\nsnapshot = gcp.compute.Snapshot(\"snapshot\",\n source_disk=persistent.id,\n zone=\"us-central1-a\",\n chain_name=\"snapshot-chain\",\n labels={\n \"my_label\": \"value\",\n },\n storage_locations=[\"us-central1\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var debian = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var persistent = new Gcp.Compute.Disk(\"persistent\", new()\n {\n Image = debian.Apply(getImageResult =\u003e getImageResult.SelfLink),\n Size = 10,\n Type = \"pd-ssd\",\n Zone = \"us-central1-a\",\n });\n\n var snapshot = new Gcp.Compute.Snapshot(\"snapshot\", new()\n {\n SourceDisk = persistent.Id,\n Zone = \"us-central1-a\",\n ChainName = \"snapshot-chain\",\n Labels = \n {\n { \"my_label\", \"value\" },\n },\n StorageLocations = new[]\n {\n \"us-central1\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdebian, 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\tpersistent, err := compute.NewDisk(ctx, \"persistent\", \u0026compute.DiskArgs{\n\t\t\tImage: *pulumi.String(debian.SelfLink),\n\t\t\tSize: pulumi.Int(10),\n\t\t\tType: pulumi.String(\"pd-ssd\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewSnapshot(ctx, \"snapshot\", \u0026compute.SnapshotArgs{\n\t\t\tSourceDisk: persistent.ID(),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tChainName: pulumi.String(\"snapshot-chain\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_label\": pulumi.String(\"value\"),\n\t\t\t},\n\t\t\tStorageLocations: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"us-central1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.Disk;\nimport com.pulumi.gcp.compute.DiskArgs;\nimport com.pulumi.gcp.compute.Snapshot;\nimport com.pulumi.gcp.compute.SnapshotArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 debian = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var persistent = new Disk(\"persistent\", DiskArgs.builder() \n .image(debian.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .size(10)\n .type(\"pd-ssd\")\n .zone(\"us-central1-a\")\n .build());\n\n var snapshot = new Snapshot(\"snapshot\", SnapshotArgs.builder() \n .sourceDisk(persistent.id())\n .zone(\"us-central1-a\")\n .chainName(\"snapshot-chain\")\n .labels(Map.of(\"my_label\", \"value\"))\n .storageLocations(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n snapshot:\n type: gcp:compute:Snapshot\n properties:\n sourceDisk: ${persistent.id}\n zone: us-central1-a\n chainName: snapshot-chain\n labels:\n my_label: value\n storageLocations:\n - us-central1\n persistent:\n type: gcp:compute:Disk\n properties:\n image: ${debian.selfLink}\n size: 10\n type: pd-ssd\n zone: us-central1-a\nvariables:\n debian:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSnapshot can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/snapshot:Snapshot default projects/{{project}}/global/snapshots/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/snapshot:Snapshot default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/snapshot:Snapshot default {{name}}\n```\n\n ", "properties": { "chainName": { "type": "string", @@ -144824,7 +146284,7 @@ "items": { "$ref": "#/types/gcp:compute/SubnetworkSecondaryIpRange:SubnetworkSecondaryIpRange" }, - "description": "An array of configurations for secondary IP ranges for VM instances\ncontained in this subnetwork. The primary IP of such VM must belong\nto the primary ipCidrRange of the subnetwork. The alias IPs may belong\nto either primary or secondary ranges.\nStructure is documented below.\n" + "description": "An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such\nVM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary\nranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html)\nto avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following\nsyntax: 'example=[]' For more details about this behavior, see [this\nsection](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value).\n" }, "selfLink": { "type": "string", @@ -144913,7 +146373,7 @@ "items": { "$ref": "#/types/gcp:compute/SubnetworkSecondaryIpRange:SubnetworkSecondaryIpRange" }, - "description": "An array of configurations for secondary IP ranges for VM instances\ncontained in this subnetwork. The primary IP of such VM must belong\nto the primary ipCidrRange of the subnetwork. The alias IPs may belong\nto either primary or secondary ranges.\nStructure is documented below.\n" + "description": "An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such\nVM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary\nranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html)\nto avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following\nsyntax: 'example=[]' For more details about this behavior, see [this\nsection](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value).\n" }, "stackType": { "type": "string", @@ -145007,7 +146467,7 @@ "items": { "$ref": "#/types/gcp:compute/SubnetworkSecondaryIpRange:SubnetworkSecondaryIpRange" }, - "description": "An array of configurations for secondary IP ranges for VM instances\ncontained in this subnetwork. The primary IP of such VM must belong\nto the primary ipCidrRange of the subnetwork. The alias IPs may belong\nto either primary or secondary ranges.\nStructure is documented below.\n" + "description": "An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such\nVM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary\nranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html)\nto avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following\nsyntax: 'example=[]' For more details about this behavior, see [this\nsection](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value).\n" }, "selfLink": { "type": "string", @@ -145781,7 +147241,7 @@ }, "network": { "type": "string", - "description": "The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to.\n" + "description": "The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to\nthe network that the default network interface belongs to.\n" }, "project": { "type": "string", @@ -145827,7 +147287,7 @@ }, "network": { "type": "string", - "description": "The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to.\n", + "description": "The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to\nthe network that the default network interface belongs to.\n", "willReplaceOnChanges": true }, "project": { @@ -145873,7 +147333,7 @@ }, "network": { "type": "string", - "description": "The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to.\n", + "description": "The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to\nthe network that the default network interface belongs to.\n", "willReplaceOnChanges": true }, "project": { @@ -145918,7 +147378,7 @@ "items": { "type": "string" }, - "description": "List of instances in the pool. They can be given as\nURLs, or in the form of \"zone/name\". Note that the instances need not exist\nat the time of target pool creation, so there is no need to use the\ninterpolation to create a dependency on the instances from the\ntarget pool.\n" + "description": "List of instances in the pool. They can be given as URLs, or in the form of \"zone/name\". Note that the instances need\nnot exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a\ndependency on the instances from the target pool.\n" }, "name": { "type": "string", @@ -145972,7 +147432,7 @@ "items": { "type": "string" }, - "description": "List of instances in the pool. They can be given as\nURLs, or in the form of \"zone/name\". Note that the instances need not exist\nat the time of target pool creation, so there is no need to use the\ninterpolation to create a dependency on the instances from the\ntarget pool.\n" + "description": "List of instances in the pool. They can be given as URLs, or in the form of \"zone/name\". Note that the instances need\nnot exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a\ndependency on the instances from the target pool.\n" }, "name": { "type": "string", @@ -146021,7 +147481,7 @@ "items": { "type": "string" }, - "description": "List of instances in the pool. They can be given as\nURLs, or in the form of \"zone/name\". Note that the instances need not exist\nat the time of target pool creation, so there is no need to use the\ninterpolation to create a dependency on the instances from the\ntarget pool.\n" + "description": "List of instances in the pool. They can be given as URLs, or in the form of \"zone/name\". Note that the instances need\nnot exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a\ndependency on the instances from the target pool.\n" }, "name": { "type": "string", @@ -146663,7 +148123,7 @@ } }, "gcp:compute/vPNTunnel:VPNTunnel": { - "description": "VPN tunnel resource.\n\n\nTo get more information about VpnTunnel, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/vpnTunnels)\n* How-to Guides\n * [Cloud VPN Overview](https://cloud.google.com/vpn/docs/concepts/overview)\n * [Networks and Tunnel Routing](https://cloud.google.com/vpn/docs/concepts/choosing-networks-routing)\n\n\u003e **Warning:** All arguments including `shared_secret` will be stored in the raw\nstate as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Vpn Tunnel Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network1 = new gcp.compute.Network(\"network1\", {});\nconst targetGateway = new gcp.compute.VPNGateway(\"targetGateway\", {network: network1.id});\nconst vpnStaticIp = new gcp.compute.Address(\"vpnStaticIp\", {});\nconst frEsp = new gcp.compute.ForwardingRule(\"frEsp\", {\n ipProtocol: \"ESP\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n});\nconst frUdp500 = new gcp.compute.ForwardingRule(\"frUdp500\", {\n ipProtocol: \"UDP\",\n portRange: \"500\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n});\nconst frUdp4500 = new gcp.compute.ForwardingRule(\"frUdp4500\", {\n ipProtocol: \"UDP\",\n portRange: \"4500\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n});\nconst tunnel1 = new gcp.compute.VPNTunnel(\"tunnel1\", {\n peerIp: \"15.0.0.120\",\n sharedSecret: \"a secret message\",\n targetVpnGateway: targetGateway.id,\n}, {\n dependsOn: [\n frEsp,\n frUdp500,\n frUdp4500,\n ],\n});\nconst route1 = new gcp.compute.Route(\"route1\", {\n network: network1.name,\n destRange: \"15.0.0.0/24\",\n priority: 1000,\n nextHopVpnTunnel: tunnel1.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork1 = gcp.compute.Network(\"network1\")\ntarget_gateway = gcp.compute.VPNGateway(\"targetGateway\", network=network1.id)\nvpn_static_ip = gcp.compute.Address(\"vpnStaticIp\")\nfr_esp = gcp.compute.ForwardingRule(\"frEsp\",\n ip_protocol=\"ESP\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id)\nfr_udp500 = gcp.compute.ForwardingRule(\"frUdp500\",\n ip_protocol=\"UDP\",\n port_range=\"500\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id)\nfr_udp4500 = gcp.compute.ForwardingRule(\"frUdp4500\",\n ip_protocol=\"UDP\",\n port_range=\"4500\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id)\ntunnel1 = gcp.compute.VPNTunnel(\"tunnel1\",\n peer_ip=\"15.0.0.120\",\n shared_secret=\"a secret message\",\n target_vpn_gateway=target_gateway.id,\n opts=pulumi.ResourceOptions(depends_on=[\n fr_esp,\n fr_udp500,\n fr_udp4500,\n ]))\nroute1 = gcp.compute.Route(\"route1\",\n network=network1.name,\n dest_range=\"15.0.0.0/24\",\n priority=1000,\n next_hop_vpn_tunnel=tunnel1.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network1 = new Gcp.Compute.Network(\"network1\");\n\n var targetGateway = new Gcp.Compute.VPNGateway(\"targetGateway\", new()\n {\n Network = network1.Id,\n });\n\n var vpnStaticIp = new Gcp.Compute.Address(\"vpnStaticIp\");\n\n var frEsp = new Gcp.Compute.ForwardingRule(\"frEsp\", new()\n {\n IpProtocol = \"ESP\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n });\n\n var frUdp500 = new Gcp.Compute.ForwardingRule(\"frUdp500\", new()\n {\n IpProtocol = \"UDP\",\n PortRange = \"500\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n });\n\n var frUdp4500 = new Gcp.Compute.ForwardingRule(\"frUdp4500\", new()\n {\n IpProtocol = \"UDP\",\n PortRange = \"4500\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n });\n\n var tunnel1 = new Gcp.Compute.VPNTunnel(\"tunnel1\", new()\n {\n PeerIp = \"15.0.0.120\",\n SharedSecret = \"a secret message\",\n TargetVpnGateway = targetGateway.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n frEsp,\n frUdp500,\n frUdp4500,\n },\n });\n\n var route1 = new Gcp.Compute.Route(\"route1\", new()\n {\n Network = network1.Name,\n DestRange = \"15.0.0.0/24\",\n Priority = 1000,\n NextHopVpnTunnel = tunnel1.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tnetwork1, err := compute.NewNetwork(ctx, \"network1\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttargetGateway, err := compute.NewVPNGateway(ctx, \"targetGateway\", \u0026compute.VPNGatewayArgs{\n\t\t\tNetwork: network1.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvpnStaticIp, err := compute.NewAddress(ctx, \"vpnStaticIp\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrEsp, err := compute.NewForwardingRule(ctx, \"frEsp\", \u0026compute.ForwardingRuleArgs{\n\t\t\tIpProtocol: pulumi.String(\"ESP\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrUdp500, err := compute.NewForwardingRule(ctx, \"frUdp500\", \u0026compute.ForwardingRuleArgs{\n\t\t\tIpProtocol: pulumi.String(\"UDP\"),\n\t\t\tPortRange: pulumi.String(\"500\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrUdp4500, err := compute.NewForwardingRule(ctx, \"frUdp4500\", \u0026compute.ForwardingRuleArgs{\n\t\t\tIpProtocol: pulumi.String(\"UDP\"),\n\t\t\tPortRange: pulumi.String(\"4500\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\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\tPeerIp: pulumi.String(\"15.0.0.120\"),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tTargetVpnGateway: targetGateway.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfrEsp,\n\t\t\tfrUdp500,\n\t\t\tfrUdp4500,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRoute(ctx, \"route1\", \u0026compute.RouteArgs{\n\t\t\tNetwork: network1.Name,\n\t\t\tDestRange: pulumi.String(\"15.0.0.0/24\"),\n\t\t\tPriority: pulumi.Int(1000),\n\t\t\tNextHopVpnTunnel: tunnel1.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.VPNGateway;\nimport com.pulumi.gcp.compute.VPNGatewayArgs;\nimport com.pulumi.gcp.compute.Address;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.compute.VPNTunnel;\nimport com.pulumi.gcp.compute.VPNTunnelArgs;\nimport com.pulumi.gcp.compute.Route;\nimport com.pulumi.gcp.compute.RouteArgs;\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 network1 = new Network(\"network1\");\n\n var targetGateway = new VPNGateway(\"targetGateway\", VPNGatewayArgs.builder() \n .network(network1.id())\n .build());\n\n var vpnStaticIp = new Address(\"vpnStaticIp\");\n\n var frEsp = new ForwardingRule(\"frEsp\", ForwardingRuleArgs.builder() \n .ipProtocol(\"ESP\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build());\n\n var frUdp500 = new ForwardingRule(\"frUdp500\", ForwardingRuleArgs.builder() \n .ipProtocol(\"UDP\")\n .portRange(\"500\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build());\n\n var frUdp4500 = new ForwardingRule(\"frUdp4500\", ForwardingRuleArgs.builder() \n .ipProtocol(\"UDP\")\n .portRange(\"4500\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build());\n\n var tunnel1 = new VPNTunnel(\"tunnel1\", VPNTunnelArgs.builder() \n .peerIp(\"15.0.0.120\")\n .sharedSecret(\"a secret message\")\n .targetVpnGateway(targetGateway.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n frEsp,\n frUdp500,\n frUdp4500)\n .build());\n\n var route1 = new Route(\"route1\", RouteArgs.builder() \n .network(network1.name())\n .destRange(\"15.0.0.0/24\")\n .priority(1000)\n .nextHopVpnTunnel(tunnel1.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tunnel1:\n type: gcp:compute:VPNTunnel\n properties:\n peerIp: 15.0.0.120\n sharedSecret: a secret message\n targetVpnGateway: ${targetGateway.id}\n options:\n dependson:\n - ${frEsp}\n - ${frUdp500}\n - ${frUdp4500}\n targetGateway:\n type: gcp:compute:VPNGateway\n properties:\n network: ${network1.id}\n network1:\n type: gcp:compute:Network\n vpnStaticIp:\n type: gcp:compute:Address\n frEsp:\n type: gcp:compute:ForwardingRule\n properties:\n ipProtocol: ESP\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n frUdp500:\n type: gcp:compute:ForwardingRule\n properties:\n ipProtocol: UDP\n portRange: '500'\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n frUdp4500:\n type: gcp:compute:ForwardingRule\n properties:\n ipProtocol: UDP\n portRange: '4500'\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n route1:\n type: gcp:compute:Route\n properties:\n network: ${network1.name}\n destRange: 15.0.0.0/24\n priority: 1000\n nextHopVpnTunnel: ${tunnel1.id}\n```\n{{% /example %}}\n{{% example %}}\n### Vpn Tunnel Beta\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network1 = new gcp.compute.Network(\"network1\", {}, {\n provider: google_beta,\n});\nconst targetGateway = new gcp.compute.VPNGateway(\"targetGateway\", {network: network1.id}, {\n provider: google_beta,\n});\nconst vpnStaticIp = new gcp.compute.Address(\"vpnStaticIp\", {}, {\n provider: google_beta,\n});\nconst frEsp = new gcp.compute.ForwardingRule(\"frEsp\", {\n ipProtocol: \"ESP\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n}, {\n provider: google_beta,\n});\nconst frUdp500 = new gcp.compute.ForwardingRule(\"frUdp500\", {\n ipProtocol: \"UDP\",\n portRange: \"500\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n}, {\n provider: google_beta,\n});\nconst frUdp4500 = new gcp.compute.ForwardingRule(\"frUdp4500\", {\n ipProtocol: \"UDP\",\n portRange: \"4500\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n}, {\n provider: google_beta,\n});\nconst tunnel1 = new gcp.compute.VPNTunnel(\"tunnel1\", {\n peerIp: \"15.0.0.120\",\n sharedSecret: \"a secret message\",\n targetVpnGateway: targetGateway.id,\n labels: {\n foo: \"bar\",\n },\n}, {\n provider: google_beta,\n dependsOn: [\n frEsp,\n frUdp500,\n frUdp4500,\n ],\n});\nconst route1 = new gcp.compute.Route(\"route1\", {\n network: network1.name,\n destRange: \"15.0.0.0/24\",\n priority: 1000,\n nextHopVpnTunnel: tunnel1.id,\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork1 = gcp.compute.Network(\"network1\", opts=pulumi.ResourceOptions(provider=google_beta))\ntarget_gateway = gcp.compute.VPNGateway(\"targetGateway\", network=network1.id,\nopts=pulumi.ResourceOptions(provider=google_beta))\nvpn_static_ip = gcp.compute.Address(\"vpnStaticIp\", opts=pulumi.ResourceOptions(provider=google_beta))\nfr_esp = gcp.compute.ForwardingRule(\"frEsp\",\n ip_protocol=\"ESP\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\nfr_udp500 = gcp.compute.ForwardingRule(\"frUdp500\",\n ip_protocol=\"UDP\",\n port_range=\"500\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\nfr_udp4500 = gcp.compute.ForwardingRule(\"frUdp4500\",\n ip_protocol=\"UDP\",\n port_range=\"4500\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\ntunnel1 = gcp.compute.VPNTunnel(\"tunnel1\",\n peer_ip=\"15.0.0.120\",\n shared_secret=\"a secret message\",\n target_vpn_gateway=target_gateway.id,\n labels={\n \"foo\": \"bar\",\n },\n opts=pulumi.ResourceOptions(provider=google_beta,\n depends_on=[\n fr_esp,\n fr_udp500,\n fr_udp4500,\n ]))\nroute1 = gcp.compute.Route(\"route1\",\n network=network1.name,\n dest_range=\"15.0.0.0/24\",\n priority=1000,\n next_hop_vpn_tunnel=tunnel1.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network1 = new Gcp.Compute.Network(\"network1\", new()\n {\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var targetGateway = new Gcp.Compute.VPNGateway(\"targetGateway\", new()\n {\n Network = network1.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var vpnStaticIp = new Gcp.Compute.Address(\"vpnStaticIp\", new()\n {\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var frEsp = new Gcp.Compute.ForwardingRule(\"frEsp\", new()\n {\n IpProtocol = \"ESP\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var frUdp500 = new Gcp.Compute.ForwardingRule(\"frUdp500\", new()\n {\n IpProtocol = \"UDP\",\n PortRange = \"500\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var frUdp4500 = new Gcp.Compute.ForwardingRule(\"frUdp4500\", new()\n {\n IpProtocol = \"UDP\",\n PortRange = \"4500\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var tunnel1 = new Gcp.Compute.VPNTunnel(\"tunnel1\", new()\n {\n PeerIp = \"15.0.0.120\",\n SharedSecret = \"a secret message\",\n TargetVpnGateway = targetGateway.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n DependsOn = new[]\n {\n frEsp,\n frUdp500,\n frUdp4500,\n },\n });\n\n var route1 = new Gcp.Compute.Route(\"route1\", new()\n {\n Network = network1.Name,\n DestRange = \"15.0.0.0/24\",\n Priority = 1000,\n NextHopVpnTunnel = tunnel1.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tnetwork1, err := compute.NewNetwork(ctx, \"network1\", nil, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttargetGateway, err := compute.NewVPNGateway(ctx, \"targetGateway\", \u0026compute.VPNGatewayArgs{\n\t\t\tNetwork: network1.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvpnStaticIp, err := compute.NewAddress(ctx, \"vpnStaticIp\", nil, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrEsp, err := compute.NewForwardingRule(ctx, \"frEsp\", \u0026compute.ForwardingRuleArgs{\n\t\t\tIpProtocol: pulumi.String(\"ESP\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrUdp500, err := compute.NewForwardingRule(ctx, \"frUdp500\", \u0026compute.ForwardingRuleArgs{\n\t\t\tIpProtocol: pulumi.String(\"UDP\"),\n\t\t\tPortRange: pulumi.String(\"500\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrUdp4500, err := compute.NewForwardingRule(ctx, \"frUdp4500\", \u0026compute.ForwardingRuleArgs{\n\t\t\tIpProtocol: pulumi.String(\"UDP\"),\n\t\t\tPortRange: pulumi.String(\"4500\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t}, pulumi.Provider(google_beta))\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\tPeerIp: pulumi.String(\"15.0.0.120\"),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tTargetVpnGateway: targetGateway.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta), pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfrEsp,\n\t\t\tfrUdp500,\n\t\t\tfrUdp4500,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRoute(ctx, \"route1\", \u0026compute.RouteArgs{\n\t\t\tNetwork: network1.Name,\n\t\t\tDestRange: pulumi.String(\"15.0.0.0/24\"),\n\t\t\tPriority: pulumi.Int(1000),\n\t\t\tNextHopVpnTunnel: tunnel1.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.VPNGateway;\nimport com.pulumi.gcp.compute.VPNGatewayArgs;\nimport com.pulumi.gcp.compute.Address;\nimport com.pulumi.gcp.compute.AddressArgs;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.compute.VPNTunnel;\nimport com.pulumi.gcp.compute.VPNTunnelArgs;\nimport com.pulumi.gcp.compute.Route;\nimport com.pulumi.gcp.compute.RouteArgs;\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 network1 = new Network(\"network1\", NetworkArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var targetGateway = new VPNGateway(\"targetGateway\", VPNGatewayArgs.builder() \n .network(network1.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var vpnStaticIp = new Address(\"vpnStaticIp\", AddressArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var frEsp = new ForwardingRule(\"frEsp\", ForwardingRuleArgs.builder() \n .ipProtocol(\"ESP\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var frUdp500 = new ForwardingRule(\"frUdp500\", ForwardingRuleArgs.builder() \n .ipProtocol(\"UDP\")\n .portRange(\"500\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var frUdp4500 = new ForwardingRule(\"frUdp4500\", ForwardingRuleArgs.builder() \n .ipProtocol(\"UDP\")\n .portRange(\"4500\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var tunnel1 = new VPNTunnel(\"tunnel1\", VPNTunnelArgs.builder() \n .peerIp(\"15.0.0.120\")\n .sharedSecret(\"a secret message\")\n .targetVpnGateway(targetGateway.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .dependsOn( \n frEsp,\n frUdp500,\n frUdp4500)\n .build());\n\n var route1 = new Route(\"route1\", RouteArgs.builder() \n .network(network1.name())\n .destRange(\"15.0.0.0/24\")\n .priority(1000)\n .nextHopVpnTunnel(tunnel1.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tunnel1:\n type: gcp:compute:VPNTunnel\n properties:\n peerIp: 15.0.0.120\n sharedSecret: a secret message\n targetVpnGateway: ${targetGateway.id}\n labels:\n foo: bar\n options:\n provider: ${[\"google-beta\"]}\n dependson:\n - ${frEsp}\n - ${frUdp500}\n - ${frUdp4500}\n targetGateway:\n type: gcp:compute:VPNGateway\n properties:\n network: ${network1.id}\n options:\n provider: ${[\"google-beta\"]}\n network1:\n type: gcp:compute:Network\n options:\n provider: ${[\"google-beta\"]}\n vpnStaticIp:\n type: gcp:compute:Address\n options:\n provider: ${[\"google-beta\"]}\n frEsp:\n type: gcp:compute:ForwardingRule\n properties:\n ipProtocol: ESP\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n options:\n provider: ${[\"google-beta\"]}\n frUdp500:\n type: gcp:compute:ForwardingRule\n properties:\n ipProtocol: UDP\n portRange: '500'\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n options:\n provider: ${[\"google-beta\"]}\n frUdp4500:\n type: gcp:compute:ForwardingRule\n properties:\n ipProtocol: UDP\n portRange: '4500'\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n options:\n provider: ${[\"google-beta\"]}\n route1:\n type: gcp:compute:Route\n properties:\n network: ${network1.name}\n destRange: 15.0.0.0/24\n priority: 1000\n nextHopVpnTunnel: ${tunnel1.id}\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nVpnTunnel can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/vPNTunnel:VPNTunnel default projects/{{project}}/regions/{{region}}/vpnTunnels/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/vPNTunnel:VPNTunnel default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/vPNTunnel:VPNTunnel default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/vPNTunnel:VPNTunnel default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Vpn Tunnel Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network1 = new gcp.compute.Network(\"network1\", {});\nconst targetGateway = new gcp.compute.VPNGateway(\"targetGateway\", {network: network1.id});\nconst vpnStaticIp = new gcp.compute.Address(\"vpnStaticIp\", {});\nconst frEsp = new gcp.compute.ForwardingRule(\"frEsp\", {\n ipProtocol: \"ESP\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n});\nconst frUdp500 = new gcp.compute.ForwardingRule(\"frUdp500\", {\n ipProtocol: \"UDP\",\n portRange: \"500\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n});\nconst frUdp4500 = new gcp.compute.ForwardingRule(\"frUdp4500\", {\n ipProtocol: \"UDP\",\n portRange: \"4500\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n});\nconst tunnel1 = new gcp.compute.VPNTunnel(\"tunnel1\", {\n peerIp: \"15.0.0.120\",\n sharedSecret: \"a secret message\",\n targetVpnGateway: targetGateway.id,\n}, {\n dependsOn: [\n frEsp,\n frUdp500,\n frUdp4500,\n ],\n});\nconst route1 = new gcp.compute.Route(\"route1\", {\n network: network1.name,\n destRange: \"15.0.0.0/24\",\n priority: 1000,\n nextHopVpnTunnel: tunnel1.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork1 = gcp.compute.Network(\"network1\")\ntarget_gateway = gcp.compute.VPNGateway(\"targetGateway\", network=network1.id)\nvpn_static_ip = gcp.compute.Address(\"vpnStaticIp\")\nfr_esp = gcp.compute.ForwardingRule(\"frEsp\",\n ip_protocol=\"ESP\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id)\nfr_udp500 = gcp.compute.ForwardingRule(\"frUdp500\",\n ip_protocol=\"UDP\",\n port_range=\"500\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id)\nfr_udp4500 = gcp.compute.ForwardingRule(\"frUdp4500\",\n ip_protocol=\"UDP\",\n port_range=\"4500\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id)\ntunnel1 = gcp.compute.VPNTunnel(\"tunnel1\",\n peer_ip=\"15.0.0.120\",\n shared_secret=\"a secret message\",\n target_vpn_gateway=target_gateway.id,\n opts=pulumi.ResourceOptions(depends_on=[\n fr_esp,\n fr_udp500,\n fr_udp4500,\n ]))\nroute1 = gcp.compute.Route(\"route1\",\n network=network1.name,\n dest_range=\"15.0.0.0/24\",\n priority=1000,\n next_hop_vpn_tunnel=tunnel1.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network1 = new Gcp.Compute.Network(\"network1\");\n\n var targetGateway = new Gcp.Compute.VPNGateway(\"targetGateway\", new()\n {\n Network = network1.Id,\n });\n\n var vpnStaticIp = new Gcp.Compute.Address(\"vpnStaticIp\");\n\n var frEsp = new Gcp.Compute.ForwardingRule(\"frEsp\", new()\n {\n IpProtocol = \"ESP\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n });\n\n var frUdp500 = new Gcp.Compute.ForwardingRule(\"frUdp500\", new()\n {\n IpProtocol = \"UDP\",\n PortRange = \"500\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n });\n\n var frUdp4500 = new Gcp.Compute.ForwardingRule(\"frUdp4500\", new()\n {\n IpProtocol = \"UDP\",\n PortRange = \"4500\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n });\n\n var tunnel1 = new Gcp.Compute.VPNTunnel(\"tunnel1\", new()\n {\n PeerIp = \"15.0.0.120\",\n SharedSecret = \"a secret message\",\n TargetVpnGateway = targetGateway.Id,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n frEsp,\n frUdp500,\n frUdp4500,\n },\n });\n\n var route1 = new Gcp.Compute.Route(\"route1\", new()\n {\n Network = network1.Name,\n DestRange = \"15.0.0.0/24\",\n Priority = 1000,\n NextHopVpnTunnel = tunnel1.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tnetwork1, err := compute.NewNetwork(ctx, \"network1\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttargetGateway, err := compute.NewVPNGateway(ctx, \"targetGateway\", \u0026compute.VPNGatewayArgs{\n\t\t\tNetwork: network1.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvpnStaticIp, err := compute.NewAddress(ctx, \"vpnStaticIp\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrEsp, err := compute.NewForwardingRule(ctx, \"frEsp\", \u0026compute.ForwardingRuleArgs{\n\t\t\tIpProtocol: pulumi.String(\"ESP\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrUdp500, err := compute.NewForwardingRule(ctx, \"frUdp500\", \u0026compute.ForwardingRuleArgs{\n\t\t\tIpProtocol: pulumi.String(\"UDP\"),\n\t\t\tPortRange: pulumi.String(\"500\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrUdp4500, err := compute.NewForwardingRule(ctx, \"frUdp4500\", \u0026compute.ForwardingRuleArgs{\n\t\t\tIpProtocol: pulumi.String(\"UDP\"),\n\t\t\tPortRange: pulumi.String(\"4500\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\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\tPeerIp: pulumi.String(\"15.0.0.120\"),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tTargetVpnGateway: targetGateway.ID(),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfrEsp,\n\t\t\tfrUdp500,\n\t\t\tfrUdp4500,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRoute(ctx, \"route1\", \u0026compute.RouteArgs{\n\t\t\tNetwork: network1.Name,\n\t\t\tDestRange: pulumi.String(\"15.0.0.0/24\"),\n\t\t\tPriority: pulumi.Int(1000),\n\t\t\tNextHopVpnTunnel: tunnel1.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.VPNGateway;\nimport com.pulumi.gcp.compute.VPNGatewayArgs;\nimport com.pulumi.gcp.compute.Address;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.compute.VPNTunnel;\nimport com.pulumi.gcp.compute.VPNTunnelArgs;\nimport com.pulumi.gcp.compute.Route;\nimport com.pulumi.gcp.compute.RouteArgs;\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 network1 = new Network(\"network1\");\n\n var targetGateway = new VPNGateway(\"targetGateway\", VPNGatewayArgs.builder() \n .network(network1.id())\n .build());\n\n var vpnStaticIp = new Address(\"vpnStaticIp\");\n\n var frEsp = new ForwardingRule(\"frEsp\", ForwardingRuleArgs.builder() \n .ipProtocol(\"ESP\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build());\n\n var frUdp500 = new ForwardingRule(\"frUdp500\", ForwardingRuleArgs.builder() \n .ipProtocol(\"UDP\")\n .portRange(\"500\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build());\n\n var frUdp4500 = new ForwardingRule(\"frUdp4500\", ForwardingRuleArgs.builder() \n .ipProtocol(\"UDP\")\n .portRange(\"4500\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build());\n\n var tunnel1 = new VPNTunnel(\"tunnel1\", VPNTunnelArgs.builder() \n .peerIp(\"15.0.0.120\")\n .sharedSecret(\"a secret message\")\n .targetVpnGateway(targetGateway.id())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n frEsp,\n frUdp500,\n frUdp4500)\n .build());\n\n var route1 = new Route(\"route1\", RouteArgs.builder() \n .network(network1.name())\n .destRange(\"15.0.0.0/24\")\n .priority(1000)\n .nextHopVpnTunnel(tunnel1.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tunnel1:\n type: gcp:compute:VPNTunnel\n properties:\n peerIp: 15.0.0.120\n sharedSecret: a secret message\n targetVpnGateway: ${targetGateway.id}\n options:\n dependson:\n - ${frEsp}\n - ${frUdp500}\n - ${frUdp4500}\n targetGateway:\n type: gcp:compute:VPNGateway\n properties:\n network: ${network1.id}\n network1:\n type: gcp:compute:Network\n vpnStaticIp:\n type: gcp:compute:Address\n frEsp:\n type: gcp:compute:ForwardingRule\n properties:\n ipProtocol: ESP\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n frUdp500:\n type: gcp:compute:ForwardingRule\n properties:\n ipProtocol: UDP\n portRange: '500'\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n frUdp4500:\n type: gcp:compute:ForwardingRule\n properties:\n ipProtocol: UDP\n portRange: '4500'\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n route1:\n type: gcp:compute:Route\n properties:\n network: ${network1.name}\n destRange: 15.0.0.0/24\n priority: 1000\n nextHopVpnTunnel: ${tunnel1.id}\n```\n{{% /example %}}\n{{% example %}}\n### Vpn Tunnel Beta\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network1 = new gcp.compute.Network(\"network1\", {}, {\n provider: google_beta,\n});\nconst targetGateway = new gcp.compute.VPNGateway(\"targetGateway\", {network: network1.id}, {\n provider: google_beta,\n});\nconst vpnStaticIp = new gcp.compute.Address(\"vpnStaticIp\", {}, {\n provider: google_beta,\n});\nconst frEsp = new gcp.compute.ForwardingRule(\"frEsp\", {\n ipProtocol: \"ESP\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n}, {\n provider: google_beta,\n});\nconst frUdp500 = new gcp.compute.ForwardingRule(\"frUdp500\", {\n ipProtocol: \"UDP\",\n portRange: \"500\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n}, {\n provider: google_beta,\n});\nconst frUdp4500 = new gcp.compute.ForwardingRule(\"frUdp4500\", {\n ipProtocol: \"UDP\",\n portRange: \"4500\",\n ipAddress: vpnStaticIp.address,\n target: targetGateway.id,\n}, {\n provider: google_beta,\n});\nconst tunnel1 = new gcp.compute.VPNTunnel(\"tunnel1\", {\n peerIp: \"15.0.0.120\",\n sharedSecret: \"a secret message\",\n targetVpnGateway: targetGateway.id,\n labels: {\n foo: \"bar\",\n },\n}, {\n provider: google_beta,\n dependsOn: [\n frEsp,\n frUdp500,\n frUdp4500,\n ],\n});\nconst route1 = new gcp.compute.Route(\"route1\", {\n network: network1.name,\n destRange: \"15.0.0.0/24\",\n priority: 1000,\n nextHopVpnTunnel: tunnel1.id,\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork1 = gcp.compute.Network(\"network1\", opts=pulumi.ResourceOptions(provider=google_beta))\ntarget_gateway = gcp.compute.VPNGateway(\"targetGateway\", network=network1.id,\nopts=pulumi.ResourceOptions(provider=google_beta))\nvpn_static_ip = gcp.compute.Address(\"vpnStaticIp\", opts=pulumi.ResourceOptions(provider=google_beta))\nfr_esp = gcp.compute.ForwardingRule(\"frEsp\",\n ip_protocol=\"ESP\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\nfr_udp500 = gcp.compute.ForwardingRule(\"frUdp500\",\n ip_protocol=\"UDP\",\n port_range=\"500\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\nfr_udp4500 = gcp.compute.ForwardingRule(\"frUdp4500\",\n ip_protocol=\"UDP\",\n port_range=\"4500\",\n ip_address=vpn_static_ip.address,\n target=target_gateway.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\ntunnel1 = gcp.compute.VPNTunnel(\"tunnel1\",\n peer_ip=\"15.0.0.120\",\n shared_secret=\"a secret message\",\n target_vpn_gateway=target_gateway.id,\n labels={\n \"foo\": \"bar\",\n },\n opts=pulumi.ResourceOptions(provider=google_beta,\n depends_on=[\n fr_esp,\n fr_udp500,\n fr_udp4500,\n ]))\nroute1 = gcp.compute.Route(\"route1\",\n network=network1.name,\n dest_range=\"15.0.0.0/24\",\n priority=1000,\n next_hop_vpn_tunnel=tunnel1.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network1 = new Gcp.Compute.Network(\"network1\", new()\n {\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var targetGateway = new Gcp.Compute.VPNGateway(\"targetGateway\", new()\n {\n Network = network1.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var vpnStaticIp = new Gcp.Compute.Address(\"vpnStaticIp\", new()\n {\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var frEsp = new Gcp.Compute.ForwardingRule(\"frEsp\", new()\n {\n IpProtocol = \"ESP\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var frUdp500 = new Gcp.Compute.ForwardingRule(\"frUdp500\", new()\n {\n IpProtocol = \"UDP\",\n PortRange = \"500\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var frUdp4500 = new Gcp.Compute.ForwardingRule(\"frUdp4500\", new()\n {\n IpProtocol = \"UDP\",\n PortRange = \"4500\",\n IpAddress = vpnStaticIp.IPAddress,\n Target = targetGateway.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var tunnel1 = new Gcp.Compute.VPNTunnel(\"tunnel1\", new()\n {\n PeerIp = \"15.0.0.120\",\n SharedSecret = \"a secret message\",\n TargetVpnGateway = targetGateway.Id,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n DependsOn = new[]\n {\n frEsp,\n frUdp500,\n frUdp4500,\n },\n });\n\n var route1 = new Gcp.Compute.Route(\"route1\", new()\n {\n Network = network1.Name,\n DestRange = \"15.0.0.0/24\",\n Priority = 1000,\n NextHopVpnTunnel = tunnel1.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tnetwork1, err := compute.NewNetwork(ctx, \"network1\", nil, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\ttargetGateway, err := compute.NewVPNGateway(ctx, \"targetGateway\", \u0026compute.VPNGatewayArgs{\n\t\t\tNetwork: network1.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvpnStaticIp, err := compute.NewAddress(ctx, \"vpnStaticIp\", nil, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrEsp, err := compute.NewForwardingRule(ctx, \"frEsp\", \u0026compute.ForwardingRuleArgs{\n\t\t\tIpProtocol: pulumi.String(\"ESP\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrUdp500, err := compute.NewForwardingRule(ctx, \"frUdp500\", \u0026compute.ForwardingRuleArgs{\n\t\t\tIpProtocol: pulumi.String(\"UDP\"),\n\t\t\tPortRange: pulumi.String(\"500\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tfrUdp4500, err := compute.NewForwardingRule(ctx, \"frUdp4500\", \u0026compute.ForwardingRuleArgs{\n\t\t\tIpProtocol: pulumi.String(\"UDP\"),\n\t\t\tPortRange: pulumi.String(\"4500\"),\n\t\t\tIpAddress: vpnStaticIp.Address,\n\t\t\tTarget: targetGateway.ID(),\n\t\t}, pulumi.Provider(google_beta))\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\tPeerIp: pulumi.String(\"15.0.0.120\"),\n\t\t\tSharedSecret: pulumi.String(\"a secret message\"),\n\t\t\tTargetVpnGateway: targetGateway.ID(),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta), pulumi.DependsOn([]pulumi.Resource{\n\t\t\tfrEsp,\n\t\t\tfrUdp500,\n\t\t\tfrUdp4500,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewRoute(ctx, \"route1\", \u0026compute.RouteArgs{\n\t\t\tNetwork: network1.Name,\n\t\t\tDestRange: pulumi.String(\"15.0.0.0/24\"),\n\t\t\tPriority: pulumi.Int(1000),\n\t\t\tNextHopVpnTunnel: tunnel1.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.VPNGateway;\nimport com.pulumi.gcp.compute.VPNGatewayArgs;\nimport com.pulumi.gcp.compute.Address;\nimport com.pulumi.gcp.compute.AddressArgs;\nimport com.pulumi.gcp.compute.ForwardingRule;\nimport com.pulumi.gcp.compute.ForwardingRuleArgs;\nimport com.pulumi.gcp.compute.VPNTunnel;\nimport com.pulumi.gcp.compute.VPNTunnelArgs;\nimport com.pulumi.gcp.compute.Route;\nimport com.pulumi.gcp.compute.RouteArgs;\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 network1 = new Network(\"network1\", NetworkArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var targetGateway = new VPNGateway(\"targetGateway\", VPNGatewayArgs.builder() \n .network(network1.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var vpnStaticIp = new Address(\"vpnStaticIp\", AddressArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var frEsp = new ForwardingRule(\"frEsp\", ForwardingRuleArgs.builder() \n .ipProtocol(\"ESP\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var frUdp500 = new ForwardingRule(\"frUdp500\", ForwardingRuleArgs.builder() \n .ipProtocol(\"UDP\")\n .portRange(\"500\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var frUdp4500 = new ForwardingRule(\"frUdp4500\", ForwardingRuleArgs.builder() \n .ipProtocol(\"UDP\")\n .portRange(\"4500\")\n .ipAddress(vpnStaticIp.address())\n .target(targetGateway.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var tunnel1 = new VPNTunnel(\"tunnel1\", VPNTunnelArgs.builder() \n .peerIp(\"15.0.0.120\")\n .sharedSecret(\"a secret message\")\n .targetVpnGateway(targetGateway.id())\n .labels(Map.of(\"foo\", \"bar\"))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .dependsOn( \n frEsp,\n frUdp500,\n frUdp4500)\n .build());\n\n var route1 = new Route(\"route1\", RouteArgs.builder() \n .network(network1.name())\n .destRange(\"15.0.0.0/24\")\n .priority(1000)\n .nextHopVpnTunnel(tunnel1.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tunnel1:\n type: gcp:compute:VPNTunnel\n properties:\n peerIp: 15.0.0.120\n sharedSecret: a secret message\n targetVpnGateway: ${targetGateway.id}\n labels:\n foo: bar\n options:\n provider: ${[\"google-beta\"]}\n dependson:\n - ${frEsp}\n - ${frUdp500}\n - ${frUdp4500}\n targetGateway:\n type: gcp:compute:VPNGateway\n properties:\n network: ${network1.id}\n options:\n provider: ${[\"google-beta\"]}\n network1:\n type: gcp:compute:Network\n options:\n provider: ${[\"google-beta\"]}\n vpnStaticIp:\n type: gcp:compute:Address\n options:\n provider: ${[\"google-beta\"]}\n frEsp:\n type: gcp:compute:ForwardingRule\n properties:\n ipProtocol: ESP\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n options:\n provider: ${[\"google-beta\"]}\n frUdp500:\n type: gcp:compute:ForwardingRule\n properties:\n ipProtocol: UDP\n portRange: '500'\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n options:\n provider: ${[\"google-beta\"]}\n frUdp4500:\n type: gcp:compute:ForwardingRule\n properties:\n ipProtocol: UDP\n portRange: '4500'\n ipAddress: ${vpnStaticIp.address}\n target: ${targetGateway.id}\n options:\n provider: ${[\"google-beta\"]}\n route1:\n type: gcp:compute:Route\n properties:\n network: ${network1.name}\n destRange: 15.0.0.0/24\n priority: 1000\n nextHopVpnTunnel: ${tunnel1.id}\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nVpnTunnel can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:compute/vPNTunnel:VPNTunnel default projects/{{project}}/regions/{{region}}/vpnTunnels/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/vPNTunnel:VPNTunnel default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/vPNTunnel:VPNTunnel default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:compute/vPNTunnel:VPNTunnel default {{name}}\n```\n\n ", "properties": { "creationTimestamp": { "type": "string", @@ -147008,7 +148468,7 @@ } }, "gcp:container/attachedCluster:AttachedCluster": { - "description": "An Anthos cluster running on customer owned infrastructure.\n\n\nTo get more information about Cluster, see:\n\n* [API documentation](https://cloud.google.com/anthos/clusters/docs/multi-cloud/reference/rest)\n* How-to Guides\n * [API reference](https://cloud.google.com/anthos/clusters/docs/multi-cloud/reference/rest/v1/projects.locations.attachedClusters)\n * [Multicloud overview](https://cloud.google.com/anthos/clusters/docs/multi-cloud)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Container Attached Cluster Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst versions = project.then(project =\u003e gcp.container.getAttachedVersions({\n location: \"us-west1\",\n project: project.projectId,\n}));\nconst primary = new gcp.container.AttachedCluster(\"primary\", {\n location: \"us-west1\",\n project: project.then(project =\u003e project.projectId),\n description: \"Test cluster\",\n distribution: \"aks\",\n oidcConfig: {\n issuerUrl: \"https://oidc.issuer.url\",\n },\n platformVersion: versions.then(versions =\u003e versions.validVersions?.[0]),\n fleet: {\n project: project.then(project =\u003e `projects/${project.number}`),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nversions = gcp.container.get_attached_versions(location=\"us-west1\",\n project=project.project_id)\nprimary = gcp.container.AttachedCluster(\"primary\",\n location=\"us-west1\",\n project=project.project_id,\n description=\"Test cluster\",\n distribution=\"aks\",\n oidc_config=gcp.container.AttachedClusterOidcConfigArgs(\n issuer_url=\"https://oidc.issuer.url\",\n ),\n platform_version=versions.valid_versions[0],\n fleet=gcp.container.AttachedClusterFleetArgs(\n project=f\"projects/{project.number}\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var versions = Gcp.Container.GetAttachedVersions.Invoke(new()\n {\n Location = \"us-west1\",\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n });\n\n var primary = new Gcp.Container.AttachedCluster(\"primary\", new()\n {\n Location = \"us-west1\",\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Description = \"Test cluster\",\n Distribution = \"aks\",\n OidcConfig = new Gcp.Container.Inputs.AttachedClusterOidcConfigArgs\n {\n IssuerUrl = \"https://oidc.issuer.url\",\n },\n PlatformVersion = versions.Apply(getAttachedVersionsResult =\u003e getAttachedVersionsResult.ValidVersions[0]),\n Fleet = new Gcp.Container.Inputs.AttachedClusterFleetArgs\n {\n Project = $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tversions, err := container.GetAttachedVersions(ctx, \u0026container.GetAttachedVersionsArgs{\n\t\t\tLocation: \"us-west1\",\n\t\t\tProject: project.ProjectId,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = container.NewAttachedCluster(ctx, \"primary\", \u0026container.AttachedClusterArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tDescription: pulumi.String(\"Test cluster\"),\n\t\t\tDistribution: pulumi.String(\"aks\"),\n\t\t\tOidcConfig: \u0026container.AttachedClusterOidcConfigArgs{\n\t\t\t\tIssuerUrl: pulumi.String(\"https://oidc.issuer.url\"),\n\t\t\t},\n\t\t\tPlatformVersion: *pulumi.String(versions.ValidVersions[0]),\n\t\t\tFleet: \u0026container.AttachedClusterFleetArgs{\n\t\t\t\tProject: pulumi.String(fmt.Sprintf(\"projects/%v\", project.Number)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.container.ContainerFunctions;\nimport com.pulumi.gcp.container.inputs.GetAttachedVersionsArgs;\nimport com.pulumi.gcp.container.AttachedCluster;\nimport com.pulumi.gcp.container.AttachedClusterArgs;\nimport com.pulumi.gcp.container.inputs.AttachedClusterOidcConfigArgs;\nimport com.pulumi.gcp.container.inputs.AttachedClusterFleetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 versions = ContainerFunctions.getAttachedVersions(GetAttachedVersionsArgs.builder()\n .location(\"us-west1\")\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .build());\n\n var primary = new AttachedCluster(\"primary\", AttachedClusterArgs.builder() \n .location(\"us-west1\")\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .description(\"Test cluster\")\n .distribution(\"aks\")\n .oidcConfig(AttachedClusterOidcConfigArgs.builder()\n .issuerUrl(\"https://oidc.issuer.url\")\n .build())\n .platformVersion(versions.applyValue(getAttachedVersionsResult -\u003e getAttachedVersionsResult.validVersions()[0]))\n .fleet(AttachedClusterFleetArgs.builder()\n .project(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:AttachedCluster\n properties:\n location: us-west1\n project: ${project.projectId}\n description: Test cluster\n distribution: aks\n oidcConfig:\n issuerUrl: https://oidc.issuer.url\n platformVersion: ${versions.validVersions[0]}\n fleet:\n project: projects/${project.number}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n versions:\n fn::invoke:\n Function: gcp:container:getAttachedVersions\n Arguments:\n location: us-west1\n project: ${project.projectId}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCluster can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:container/attachedCluster:AttachedCluster default projects/{{project}}/locations/{{location}}/attachedClusters/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:container/attachedCluster:AttachedCluster default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:container/attachedCluster:AttachedCluster default {{location}}/{{name}}\n```\n\n ", + "description": "An Anthos cluster running on customer owned infrastructure.\n\n\nTo get more information about Cluster, see:\n\n* [API documentation](https://cloud.google.com/anthos/clusters/docs/multi-cloud/reference/rest)\n* How-to Guides\n * [API reference](https://cloud.google.com/anthos/clusters/docs/multi-cloud/reference/rest/v1/projects.locations.attachedClusters)\n * [Multicloud overview](https://cloud.google.com/anthos/clusters/docs/multi-cloud)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Container Attached Cluster Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst versions = project.then(project =\u003e gcp.container.getAttachedVersions({\n location: \"us-west1\",\n project: project.projectId,\n}));\nconst primary = new gcp.container.AttachedCluster(\"primary\", {\n location: \"us-west1\",\n project: project.then(project =\u003e project.projectId),\n description: \"Test cluster\",\n distribution: \"aks\",\n oidcConfig: {\n issuerUrl: \"https://oidc.issuer.url\",\n },\n platformVersion: versions.then(versions =\u003e versions.validVersions?.[0]),\n fleet: {\n project: project.then(project =\u003e `projects/${project.number}`),\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nversions = gcp.container.get_attached_versions(location=\"us-west1\",\n project=project.project_id)\nprimary = gcp.container.AttachedCluster(\"primary\",\n location=\"us-west1\",\n project=project.project_id,\n description=\"Test cluster\",\n distribution=\"aks\",\n oidc_config=gcp.container.AttachedClusterOidcConfigArgs(\n issuer_url=\"https://oidc.issuer.url\",\n ),\n platform_version=versions.valid_versions[0],\n fleet=gcp.container.AttachedClusterFleetArgs(\n project=f\"projects/{project.number}\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var versions = Gcp.Container.GetAttachedVersions.Invoke(new()\n {\n Location = \"us-west1\",\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n });\n\n var primary = new Gcp.Container.AttachedCluster(\"primary\", new()\n {\n Location = \"us-west1\",\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Description = \"Test cluster\",\n Distribution = \"aks\",\n OidcConfig = new Gcp.Container.Inputs.AttachedClusterOidcConfigArgs\n {\n IssuerUrl = \"https://oidc.issuer.url\",\n },\n PlatformVersion = versions.Apply(getAttachedVersionsResult =\u003e getAttachedVersionsResult.ValidVersions[0]),\n Fleet = new Gcp.Container.Inputs.AttachedClusterFleetArgs\n {\n Project = $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tversions, err := container.GetAttachedVersions(ctx, \u0026container.GetAttachedVersionsArgs{\n\t\t\tLocation: \"us-west1\",\n\t\t\tProject: project.ProjectId,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = container.NewAttachedCluster(ctx, \"primary\", \u0026container.AttachedClusterArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tDescription: pulumi.String(\"Test cluster\"),\n\t\t\tDistribution: pulumi.String(\"aks\"),\n\t\t\tOidcConfig: \u0026container.AttachedClusterOidcConfigArgs{\n\t\t\t\tIssuerUrl: pulumi.String(\"https://oidc.issuer.url\"),\n\t\t\t},\n\t\t\tPlatformVersion: *pulumi.String(versions.ValidVersions[0]),\n\t\t\tFleet: \u0026container.AttachedClusterFleetArgs{\n\t\t\t\tProject: pulumi.String(fmt.Sprintf(\"projects/%v\", project.Number)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.container.ContainerFunctions;\nimport com.pulumi.gcp.container.inputs.GetAttachedVersionsArgs;\nimport com.pulumi.gcp.container.AttachedCluster;\nimport com.pulumi.gcp.container.AttachedClusterArgs;\nimport com.pulumi.gcp.container.inputs.AttachedClusterOidcConfigArgs;\nimport com.pulumi.gcp.container.inputs.AttachedClusterFleetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 versions = ContainerFunctions.getAttachedVersions(GetAttachedVersionsArgs.builder()\n .location(\"us-west1\")\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .build());\n\n var primary = new AttachedCluster(\"primary\", AttachedClusterArgs.builder() \n .location(\"us-west1\")\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .description(\"Test cluster\")\n .distribution(\"aks\")\n .oidcConfig(AttachedClusterOidcConfigArgs.builder()\n .issuerUrl(\"https://oidc.issuer.url\")\n .build())\n .platformVersion(versions.applyValue(getAttachedVersionsResult -\u003e getAttachedVersionsResult.validVersions()[0]))\n .fleet(AttachedClusterFleetArgs.builder()\n .project(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:AttachedCluster\n properties:\n location: us-west1\n project: ${project.projectId}\n description: Test cluster\n distribution: aks\n oidcConfig:\n issuerUrl: https://oidc.issuer.url\n platformVersion: ${versions.validVersions[0]}\n fleet:\n project: projects/${project.number}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n versions:\n fn::invoke:\n Function: gcp:container:getAttachedVersions\n Arguments:\n location: us-west1\n project: ${project.projectId}\n```\n{{% /example %}}\n{{% example %}}\n### Container Attached Cluster Ignore Errors\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst versions = project.then(project =\u003e gcp.container.getAttachedVersions({\n location: \"us-west1\",\n project: project.projectId,\n}));\nconst primary = new gcp.container.AttachedCluster(\"primary\", {\n location: \"us-west1\",\n project: project.then(project =\u003e project.projectId),\n description: \"Test cluster\",\n distribution: \"aks\",\n oidcConfig: {\n issuerUrl: \"https://oidc.issuer.url\",\n },\n platformVersion: versions.then(versions =\u003e versions.validVersions?.[0]),\n fleet: {\n project: project.then(project =\u003e `projects/${project.number}`),\n },\n deletionPolicy: \"DELETE_IGNORE_ERRORS\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nversions = gcp.container.get_attached_versions(location=\"us-west1\",\n project=project.project_id)\nprimary = gcp.container.AttachedCluster(\"primary\",\n location=\"us-west1\",\n project=project.project_id,\n description=\"Test cluster\",\n distribution=\"aks\",\n oidc_config=gcp.container.AttachedClusterOidcConfigArgs(\n issuer_url=\"https://oidc.issuer.url\",\n ),\n platform_version=versions.valid_versions[0],\n fleet=gcp.container.AttachedClusterFleetArgs(\n project=f\"projects/{project.number}\",\n ),\n deletion_policy=\"DELETE_IGNORE_ERRORS\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var versions = Gcp.Container.GetAttachedVersions.Invoke(new()\n {\n Location = \"us-west1\",\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n });\n\n var primary = new Gcp.Container.AttachedCluster(\"primary\", new()\n {\n Location = \"us-west1\",\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Description = \"Test cluster\",\n Distribution = \"aks\",\n OidcConfig = new Gcp.Container.Inputs.AttachedClusterOidcConfigArgs\n {\n IssuerUrl = \"https://oidc.issuer.url\",\n },\n PlatformVersion = versions.Apply(getAttachedVersionsResult =\u003e getAttachedVersionsResult.ValidVersions[0]),\n Fleet = new Gcp.Container.Inputs.AttachedClusterFleetArgs\n {\n Project = $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}\",\n },\n DeletionPolicy = \"DELETE_IGNORE_ERRORS\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tversions, err := container.GetAttachedVersions(ctx, \u0026container.GetAttachedVersionsArgs{\n\t\t\tLocation: \"us-west1\",\n\t\t\tProject: project.ProjectId,\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = container.NewAttachedCluster(ctx, \"primary\", \u0026container.AttachedClusterArgs{\n\t\t\tLocation: pulumi.String(\"us-west1\"),\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tDescription: pulumi.String(\"Test cluster\"),\n\t\t\tDistribution: pulumi.String(\"aks\"),\n\t\t\tOidcConfig: \u0026container.AttachedClusterOidcConfigArgs{\n\t\t\t\tIssuerUrl: pulumi.String(\"https://oidc.issuer.url\"),\n\t\t\t},\n\t\t\tPlatformVersion: *pulumi.String(versions.ValidVersions[0]),\n\t\t\tFleet: \u0026container.AttachedClusterFleetArgs{\n\t\t\t\tProject: pulumi.String(fmt.Sprintf(\"projects/%v\", project.Number)),\n\t\t\t},\n\t\t\tDeletionPolicy: pulumi.String(\"DELETE_IGNORE_ERRORS\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.container.ContainerFunctions;\nimport com.pulumi.gcp.container.inputs.GetAttachedVersionsArgs;\nimport com.pulumi.gcp.container.AttachedCluster;\nimport com.pulumi.gcp.container.AttachedClusterArgs;\nimport com.pulumi.gcp.container.inputs.AttachedClusterOidcConfigArgs;\nimport com.pulumi.gcp.container.inputs.AttachedClusterFleetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 versions = ContainerFunctions.getAttachedVersions(GetAttachedVersionsArgs.builder()\n .location(\"us-west1\")\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .build());\n\n var primary = new AttachedCluster(\"primary\", AttachedClusterArgs.builder() \n .location(\"us-west1\")\n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .description(\"Test cluster\")\n .distribution(\"aks\")\n .oidcConfig(AttachedClusterOidcConfigArgs.builder()\n .issuerUrl(\"https://oidc.issuer.url\")\n .build())\n .platformVersion(versions.applyValue(getAttachedVersionsResult -\u003e getAttachedVersionsResult.validVersions()[0]))\n .fleet(AttachedClusterFleetArgs.builder()\n .project(String.format(\"projects/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build())\n .deletionPolicy(\"DELETE_IGNORE_ERRORS\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n primary:\n type: gcp:container:AttachedCluster\n properties:\n location: us-west1\n project: ${project.projectId}\n description: Test cluster\n distribution: aks\n oidcConfig:\n issuerUrl: https://oidc.issuer.url\n platformVersion: ${versions.validVersions[0]}\n fleet:\n project: projects/${project.number}\n deletionPolicy: DELETE_IGNORE_ERRORS\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n versions:\n fn::invoke:\n Function: gcp:container:getAttachedVersions\n Arguments:\n location: us-west1\n project: ${project.projectId}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCluster can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:container/attachedCluster:AttachedCluster default projects/{{project}}/locations/{{location}}/attachedClusters/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:container/attachedCluster:AttachedCluster default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:container/attachedCluster:AttachedCluster default {{location}}/{{name}}\n```\n\n ", "properties": { "annotations": { "type": "object", @@ -147029,6 +148489,10 @@ "type": "string", "description": "Output only. The time at which this cluster was created.\n" }, + "deletionPolicy": { + "type": "string", + "description": "Policy to determine what flags to send on delete.\n" + }, "description": { "type": "string", "description": "A human readable description of this attached cluster. Cannot be longer\nthan 255 UTF-8 encoded bytes.\n" @@ -147135,6 +148599,10 @@ "$ref": "#/types/gcp:container/AttachedClusterAuthorization:AttachedClusterAuthorization", "description": "Configuration related to the cluster RBAC settings.\nStructure is documented below.\n" }, + "deletionPolicy": { + "type": "string", + "description": "Policy to determine what flags to send on delete.\n" + }, "description": { "type": "string", "description": "A human readable description of this attached cluster. Cannot be longer\nthan 255 UTF-8 encoded bytes.\n" @@ -147209,6 +148677,10 @@ "type": "string", "description": "Output only. The time at which this cluster was created.\n" }, + "deletionPolicy": { + "type": "string", + "description": "Policy to determine what flags to send on delete.\n" + }, "description": { "type": "string", "description": "A human readable description of this attached cluster. Cannot be longer\nthan 255 UTF-8 encoded bytes.\n" @@ -148443,7 +149915,7 @@ } }, "gcp:container/cluster:Cluster": { - "description": "Manages a Google Kubernetes Engine (GKE) cluster. For more information see\n[the official documentation](https://cloud.google.com/container-engine/docs/clusters)\nand [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters).\n\n\u003e **Warning:** All arguments and attributes, including basic auth username and\npasswords as well as certificate outputs will be stored in the raw state as\nplaintext. [Read more about secrets in state](https://www.pulumi.com/docs/intro/concepts/programming-model/#secrets).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### With A Separately Managed Node Pool (Recommended)\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.serviceaccount.Account(\"default\", {\n accountId: \"service-account-id\",\n displayName: \"Service Account\",\n});\nconst primary = new gcp.container.Cluster(\"primary\", {\n location: \"us-central1\",\n removeDefaultNodePool: true,\n initialNodeCount: 1,\n});\nconst primaryPreemptibleNodes = new gcp.container.NodePool(\"primaryPreemptibleNodes\", {\n location: \"us-central1\",\n cluster: primary.name,\n nodeCount: 1,\n nodeConfig: {\n preemptible: true,\n machineType: \"e2-medium\",\n serviceAccount: _default.email,\n oauthScopes: [\"https://www.googleapis.com/auth/cloud-platform\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.service_account.Account(\"default\",\n account_id=\"service-account-id\",\n display_name=\"Service Account\")\nprimary = gcp.container.Cluster(\"primary\",\n location=\"us-central1\",\n remove_default_node_pool=True,\n initial_node_count=1)\nprimary_preemptible_nodes = gcp.container.NodePool(\"primaryPreemptibleNodes\",\n location=\"us-central1\",\n cluster=primary.name,\n node_count=1,\n node_config=gcp.container.NodePoolNodeConfigArgs(\n preemptible=True,\n machine_type=\"e2-medium\",\n service_account=default.email,\n oauth_scopes=[\"https://www.googleapis.com/auth/cloud-platform\"],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.ServiceAccount.Account(\"default\", new()\n {\n AccountId = \"service-account-id\",\n DisplayName = \"Service Account\",\n });\n\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Location = \"us-central1\",\n RemoveDefaultNodePool = true,\n InitialNodeCount = 1,\n });\n\n var primaryPreemptibleNodes = new Gcp.Container.NodePool(\"primaryPreemptibleNodes\", new()\n {\n Location = \"us-central1\",\n Cluster = primary.Name,\n NodeCount = 1,\n NodeConfig = new Gcp.Container.Inputs.NodePoolNodeConfigArgs\n {\n Preemptible = true,\n MachineType = \"e2-medium\",\n ServiceAccount = @default.Email,\n OauthScopes = new[]\n {\n \"https://www.googleapis.com/auth/cloud-platform\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := serviceAccount.NewAccount(ctx, \"default\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"service-account-id\"),\n\t\t\tDisplayName: pulumi.String(\"Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRemoveDefaultNodePool: pulumi.Bool(true),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = container.NewNodePool(ctx, \"primaryPreemptibleNodes\", \u0026container.NodePoolArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tCluster: primary.Name,\n\t\t\tNodeCount: pulumi.Int(1),\n\t\t\tNodeConfig: \u0026container.NodePoolNodeConfigArgs{\n\t\t\t\tPreemptible: pulumi.Bool(true),\n\t\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\t\tServiceAccount: _default.Email,\n\t\t\t\tOauthScopes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://www.googleapis.com/auth/cloud-platform\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.NodePool;\nimport com.pulumi.gcp.container.NodePoolArgs;\nimport com.pulumi.gcp.container.inputs.NodePoolNodeConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Account(\"default\", AccountArgs.builder() \n .accountId(\"service-account-id\")\n .displayName(\"Service Account\")\n .build());\n\n var primary = new Cluster(\"primary\", ClusterArgs.builder() \n .location(\"us-central1\")\n .removeDefaultNodePool(true)\n .initialNodeCount(1)\n .build());\n\n var primaryPreemptibleNodes = new NodePool(\"primaryPreemptibleNodes\", NodePoolArgs.builder() \n .location(\"us-central1\")\n .cluster(primary.name())\n .nodeCount(1)\n .nodeConfig(NodePoolNodeConfigArgs.builder()\n .preemptible(true)\n .machineType(\"e2-medium\")\n .serviceAccount(default_.email())\n .oauthScopes(\"https://www.googleapis.com/auth/cloud-platform\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:serviceAccount:Account\n properties:\n accountId: service-account-id\n displayName: Service Account\n primary:\n type: gcp:container:Cluster\n properties:\n location: us-central1\n # We can't create a cluster with no node pool defined, but we want to only use\n # # separately managed node pools. So we create the smallest possible default\n # # node pool and immediately delete it.\n removeDefaultNodePool: true\n initialNodeCount: 1\n primaryPreemptibleNodes:\n type: gcp:container:NodePool\n properties:\n location: us-central1\n cluster: ${primary.name}\n nodeCount: 1\n nodeConfig:\n preemptible: true\n machineType: e2-medium\n serviceAccount: ${default.email}\n oauthScopes:\n - https://www.googleapis.com/auth/cloud-platform\n```\n\n\u003e **Note:** It is recommended that node pools be created and managed as separate resources as in the example above.\nThis allows node pools to be added and removed without recreating the cluster. Node pools defined directly in the\n`gcp.container.Cluster` resource cannot be removed without re-creating the cluster.\n{{% /example %}}\n{{% example %}}\n### With The Default Node Pool\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterNodeConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Account(\"default\", AccountArgs.builder() \n .accountId(\"service-account-id\")\n .displayName(\"Service Account\")\n .build());\n\n var primary = new Cluster(\"primary\", ClusterArgs.builder() \n .location(\"us-central1-a\")\n .initialNodeCount(3)\n .nodeConfig(ClusterNodeConfigArgs.builder()\n .serviceAccount(default_.email())\n .oauthScopes(\"https://www.googleapis.com/auth/cloud-platform\")\n .labels(Map.of(\"foo\", \"bar\"))\n .tags( \n \"foo\",\n \"bar\")\n .build())\n .timeouts(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:serviceAccount:Account\n properties:\n accountId: service-account-id\n displayName: Service Account\n primary:\n type: gcp:container:Cluster\n properties:\n location: us-central1-a\n initialNodeCount: 3\n nodeConfig:\n serviceAccount: ${default.email}\n oauthScopes:\n - https://www.googleapis.com/auth/cloud-platform\n labels:\n foo: bar\n tags:\n - foo\n - bar\n timeouts:\n - create: 30m\n update: 40m\n```\n{{% /example %}}\n{{% example %}}\n### Autopilot\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.serviceaccount.Account(\"default\", {\n accountId: \"service-account-id\",\n displayName: \"Service Account\",\n});\nconst primary = new gcp.container.Cluster(\"primary\", {\n enableAutopilot: true,\n location: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.service_account.Account(\"default\",\n account_id=\"service-account-id\",\n display_name=\"Service Account\")\nprimary = gcp.container.Cluster(\"primary\",\n enable_autopilot=True,\n location=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.ServiceAccount.Account(\"default\", new()\n {\n AccountId = \"service-account-id\",\n DisplayName = \"Service Account\",\n });\n\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n EnableAutopilot = true,\n Location = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := serviceAccount.NewAccount(ctx, \"default\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"service-account-id\"),\n\t\t\tDisplayName: pulumi.String(\"Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tEnableAutopilot: pulumi.Bool(true),\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Account(\"default\", AccountArgs.builder() \n .accountId(\"service-account-id\")\n .displayName(\"Service Account\")\n .build());\n\n var primary = new Cluster(\"primary\", ClusterArgs.builder() \n .enableAutopilot(true)\n .location(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:serviceAccount:Account\n properties:\n accountId: service-account-id\n displayName: Service Account\n primary:\n type: gcp:container:Cluster\n properties:\n enableAutopilot: true\n location: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGKE clusters can be imported using the `project` , `location`, and `name`. If the project is omitted, the default provider value will be used. Examples\n\n```sh\n $ pulumi import gcp:container/cluster:Cluster mycluster projects/my-gcp-project/locations/us-east1-a/clusters/my-cluster\n```\n\n\n\n```sh\n $ pulumi import gcp:container/cluster:Cluster mycluster my-gcp-project/us-east1-a/my-cluster\n```\n\n\n\n```sh\n $ pulumi import gcp:container/cluster:Cluster mycluster us-east1-a/my-cluster\n```\n\n For example, the following fields will show diffs if set in config* `min_master_version` * `remove_default_node_pool` ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### With A Separately Managed Node Pool (Recommended)\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.serviceaccount.Account(\"default\", {\n accountId: \"service-account-id\",\n displayName: \"Service Account\",\n});\nconst primary = new gcp.container.Cluster(\"primary\", {\n location: \"us-central1\",\n removeDefaultNodePool: true,\n initialNodeCount: 1,\n});\nconst primaryPreemptibleNodes = new gcp.container.NodePool(\"primaryPreemptibleNodes\", {\n location: \"us-central1\",\n cluster: primary.name,\n nodeCount: 1,\n nodeConfig: {\n preemptible: true,\n machineType: \"e2-medium\",\n serviceAccount: _default.email,\n oauthScopes: [\"https://www.googleapis.com/auth/cloud-platform\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.service_account.Account(\"default\",\n account_id=\"service-account-id\",\n display_name=\"Service Account\")\nprimary = gcp.container.Cluster(\"primary\",\n location=\"us-central1\",\n remove_default_node_pool=True,\n initial_node_count=1)\nprimary_preemptible_nodes = gcp.container.NodePool(\"primaryPreemptibleNodes\",\n location=\"us-central1\",\n cluster=primary.name,\n node_count=1,\n node_config=gcp.container.NodePoolNodeConfigArgs(\n preemptible=True,\n machine_type=\"e2-medium\",\n service_account=default.email,\n oauth_scopes=[\"https://www.googleapis.com/auth/cloud-platform\"],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.ServiceAccount.Account(\"default\", new()\n {\n AccountId = \"service-account-id\",\n DisplayName = \"Service Account\",\n });\n\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Location = \"us-central1\",\n RemoveDefaultNodePool = true,\n InitialNodeCount = 1,\n });\n\n var primaryPreemptibleNodes = new Gcp.Container.NodePool(\"primaryPreemptibleNodes\", new()\n {\n Location = \"us-central1\",\n Cluster = primary.Name,\n NodeCount = 1,\n NodeConfig = new Gcp.Container.Inputs.NodePoolNodeConfigArgs\n {\n Preemptible = true,\n MachineType = \"e2-medium\",\n ServiceAccount = @default.Email,\n OauthScopes = new[]\n {\n \"https://www.googleapis.com/auth/cloud-platform\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := serviceAccount.NewAccount(ctx, \"default\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"service-account-id\"),\n\t\t\tDisplayName: pulumi.String(\"Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRemoveDefaultNodePool: pulumi.Bool(true),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = container.NewNodePool(ctx, \"primaryPreemptibleNodes\", \u0026container.NodePoolArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tCluster: primary.Name,\n\t\t\tNodeCount: pulumi.Int(1),\n\t\t\tNodeConfig: \u0026container.NodePoolNodeConfigArgs{\n\t\t\t\tPreemptible: pulumi.Bool(true),\n\t\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\t\tServiceAccount: _default.Email,\n\t\t\t\tOauthScopes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://www.googleapis.com/auth/cloud-platform\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.NodePool;\nimport com.pulumi.gcp.container.NodePoolArgs;\nimport com.pulumi.gcp.container.inputs.NodePoolNodeConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Account(\"default\", AccountArgs.builder() \n .accountId(\"service-account-id\")\n .displayName(\"Service Account\")\n .build());\n\n var primary = new Cluster(\"primary\", ClusterArgs.builder() \n .location(\"us-central1\")\n .removeDefaultNodePool(true)\n .initialNodeCount(1)\n .build());\n\n var primaryPreemptibleNodes = new NodePool(\"primaryPreemptibleNodes\", NodePoolArgs.builder() \n .location(\"us-central1\")\n .cluster(primary.name())\n .nodeCount(1)\n .nodeConfig(NodePoolNodeConfigArgs.builder()\n .preemptible(true)\n .machineType(\"e2-medium\")\n .serviceAccount(default_.email())\n .oauthScopes(\"https://www.googleapis.com/auth/cloud-platform\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:serviceAccount:Account\n properties:\n accountId: service-account-id\n displayName: Service Account\n primary:\n type: gcp:container:Cluster\n properties:\n location: us-central1\n # We can't create a cluster with no node pool defined, but we want to only use\n # # separately managed node pools. So we create the smallest possible default\n # # node pool and immediately delete it.\n removeDefaultNodePool: true\n initialNodeCount: 1\n primaryPreemptibleNodes:\n type: gcp:container:NodePool\n properties:\n location: us-central1\n cluster: ${primary.name}\n nodeCount: 1\n nodeConfig:\n preemptible: true\n machineType: e2-medium\n serviceAccount: ${default.email}\n oauthScopes:\n - https://www.googleapis.com/auth/cloud-platform\n```\n\n\u003e **Note:** It is recommended that node pools be created and managed as separate resources as in the example above.\nThis allows node pools to be added and removed without recreating the cluster. Node pools defined directly in the\n`gcp.container.Cluster` resource cannot be removed without re-creating the cluster.\n{{% /example %}}\n{{% example %}}\n### With The Default Node Pool\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterNodeConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Account(\"default\", AccountArgs.builder() \n .accountId(\"service-account-id\")\n .displayName(\"Service Account\")\n .build());\n\n var primary = new Cluster(\"primary\", ClusterArgs.builder() \n .location(\"us-central1-a\")\n .initialNodeCount(3)\n .nodeConfig(ClusterNodeConfigArgs.builder()\n .serviceAccount(default_.email())\n .oauthScopes(\"https://www.googleapis.com/auth/cloud-platform\")\n .labels(Map.of(\"foo\", \"bar\"))\n .tags( \n \"foo\",\n \"bar\")\n .build())\n .timeouts(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:serviceAccount:Account\n properties:\n accountId: service-account-id\n displayName: Service Account\n primary:\n type: gcp:container:Cluster\n properties:\n location: us-central1-a\n initialNodeCount: 3\n nodeConfig:\n serviceAccount: ${default.email}\n oauthScopes:\n - https://www.googleapis.com/auth/cloud-platform\n labels:\n foo: bar\n tags:\n - foo\n - bar\n timeouts:\n - create: 30m\n update: 40m\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGKE clusters can be imported using the `project` , `location`, and `name`. If the project is omitted, the default provider value will be used. Examples\n\n```sh\n $ pulumi import gcp:container/cluster:Cluster mycluster projects/my-gcp-project/locations/us-east1-a/clusters/my-cluster\n```\n\n\n\n```sh\n $ pulumi import gcp:container/cluster:Cluster mycluster my-gcp-project/us-east1-a/my-cluster\n```\n\n\n\n```sh\n $ pulumi import gcp:container/cluster:Cluster mycluster us-east1-a/my-cluster\n```\n\n For example, the following fields will show diffs if set in config- `min_master_version` - `remove_default_node_pool` ", "properties": { "addonsConfig": { "$ref": "#/types/gcp:container/ClusterAddonsConfig:ClusterAddonsConfig", @@ -148467,7 +149939,7 @@ }, "clusterTelemetry": { "$ref": "#/types/gcp:container/ClusterClusterTelemetry:ClusterClusterTelemetry", - "description": "Configuration for\n[ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature,\nStructure is documented below.\n" + "description": ") Configuration for\n[ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature,\nStructure is documented below.\n" }, "confidentialNodes": { "$ref": "#/types/gcp:container/ClusterConfidentialNodes:ClusterConfidentialNodes", @@ -148520,7 +149992,7 @@ }, "enableL4IlbSubsetting": { "type": "boolean", - "description": "Whether L4ILB Subsetting is enabled for this cluster.\n" + "description": ")\nWhether L4ILB Subsetting is enabled for this cluster.\n" }, "enableLegacyAbac": { "type": "boolean", @@ -148544,7 +150016,7 @@ }, "identityServiceConfig": { "$ref": "#/types/gcp:container/ClusterIdentityServiceConfig:ClusterIdentityServiceConfig", - "description": ". Structure is documented below.\n" + "description": "). Structure is documented below.\n" }, "initialNodeCount": { "type": "integer", @@ -148592,7 +150064,7 @@ }, "minMasterVersion": { "type": "string", - "description": "The minimum version of the master. GKE\nwill auto-update the master to new versions, so this does not guarantee the\ncurrent master version--use the read-only `master_version` field to obtain that.\nIf unset, the cluster's version will be set by GKE to the version of the most recent\nofficial release (which is not necessarily the latest version). Most users will find\nthe `gcp.container.getEngineVersions` data source useful - it indicates which versions\nare available. If you intend to specify versions manually,\n[the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version)\ndescribe the various acceptable formats for this field.\n" + "description": "The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the\ncurrent master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be\nset by GKE to the version of the most recent official release (which is not necessarily the latest version).\n" }, "monitoringConfig": { "$ref": "#/types/gcp:container/ClusterMonitoringConfig:ClusterMonitoringConfig", @@ -148620,7 +150092,7 @@ }, "nodeConfig": { "$ref": "#/types/gcp:container/ClusterNodeConfig:ClusterNodeConfig", - "description": "Parameters used in creating the default node pool.\nGenerally, this field should not be used at the same time as a\n`gcp.container.NodePool` or a `node_pool` block; this configuration\nmanages the default node pool, which isn't recommended to be used.\nStructure is documented below.\n" + "description": "The configuration of the nodepool\n" }, "nodeLocations": { "type": "array", @@ -148646,7 +150118,7 @@ }, "nodeVersion": { "type": "string", - "description": "The Kubernetes version on the nodes. Must either be unset\nor set to the same value as `min_master_version` on create. Defaults to the default\nversion set by GKE which is not necessarily the latest version. This only affects\nnodes in the default node pool. While a fuzzy version can be specified, it's\nrecommended that you specify explicit versions as the provider will see spurious diffs\nwhen fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's\n`version_prefix` field to approximate fuzzy versions.\nTo update nodes in other node pools, use the `version` attribute on the node pool.\n" + "description": "The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create.\nDefaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the\ndefault node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as\nTerraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's\nversion_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools,\nuse the version attribute on the node pool.\n" }, "notificationConfig": { "$ref": "#/types/gcp:container/ClusterNotificationConfig:ClusterNotificationConfig", @@ -148673,7 +150145,7 @@ }, "releaseChannel": { "$ref": "#/types/gcp:container/ClusterReleaseChannel:ClusterReleaseChannel", - "description": "Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels)\nfeature, which provide more control over automatic upgrades of your GKE clusters.\nWhen updating this field, GKE imposes specific version requirements. See\n[Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel)\nfor more details; the `gcp.container.getEngineVersions` datasource can provide\nthe default version for a channel. Note that removing the `release_channel`\nfield from your config will cause the provider to stop managing your cluster's\nrelease channel, but will not unenroll it. Instead, use the `\"UNSPECIFIED\"`\nchannel. Structure is documented below.\n" + "description": "Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE\nclusters. Note that removing this field from your config will not unenroll it. Instead, use the \"UNSPECIFIED\" channel.\n" }, "removeDefaultNodePool": { "type": "boolean", @@ -148797,7 +150269,7 @@ }, "clusterTelemetry": { "$ref": "#/types/gcp:container/ClusterClusterTelemetry:ClusterClusterTelemetry", - "description": "Configuration for\n[ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature,\nStructure is documented below.\n" + "description": ") Configuration for\n[ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature,\nStructure is documented below.\n" }, "confidentialNodes": { "$ref": "#/types/gcp:container/ClusterConfidentialNodes:ClusterConfidentialNodes", @@ -148857,7 +150329,7 @@ }, "enableL4IlbSubsetting": { "type": "boolean", - "description": "Whether L4ILB Subsetting is enabled for this cluster.\n" + "description": ")\nWhether L4ILB Subsetting is enabled for this cluster.\n" }, "enableLegacyAbac": { "type": "boolean", @@ -148878,7 +150350,7 @@ }, "identityServiceConfig": { "$ref": "#/types/gcp:container/ClusterIdentityServiceConfig:ClusterIdentityServiceConfig", - "description": ". Structure is documented below.\n" + "description": "). Structure is documented below.\n" }, "initialNodeCount": { "type": "integer", @@ -148921,7 +150393,7 @@ }, "minMasterVersion": { "type": "string", - "description": "The minimum version of the master. GKE\nwill auto-update the master to new versions, so this does not guarantee the\ncurrent master version--use the read-only `master_version` field to obtain that.\nIf unset, the cluster's version will be set by GKE to the version of the most recent\nofficial release (which is not necessarily the latest version). Most users will find\nthe `gcp.container.getEngineVersions` data source useful - it indicates which versions\nare available. If you intend to specify versions manually,\n[the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version)\ndescribe the various acceptable formats for this field.\n" + "description": "The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the\ncurrent master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be\nset by GKE to the version of the most recent official release (which is not necessarily the latest version).\n" }, "monitoringConfig": { "$ref": "#/types/gcp:container/ClusterMonitoringConfig:ClusterMonitoringConfig", @@ -148952,7 +150424,7 @@ }, "nodeConfig": { "$ref": "#/types/gcp:container/ClusterNodeConfig:ClusterNodeConfig", - "description": "Parameters used in creating the default node pool.\nGenerally, this field should not be used at the same time as a\n`gcp.container.NodePool` or a `node_pool` block; this configuration\nmanages the default node pool, which isn't recommended to be used.\nStructure is documented below.\n", + "description": "The configuration of the nodepool\n", "willReplaceOnChanges": true }, "nodeLocations": { @@ -148980,7 +150452,7 @@ }, "nodeVersion": { "type": "string", - "description": "The Kubernetes version on the nodes. Must either be unset\nor set to the same value as `min_master_version` on create. Defaults to the default\nversion set by GKE which is not necessarily the latest version. This only affects\nnodes in the default node pool. While a fuzzy version can be specified, it's\nrecommended that you specify explicit versions as the provider will see spurious diffs\nwhen fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's\n`version_prefix` field to approximate fuzzy versions.\nTo update nodes in other node pools, use the `version` attribute on the node pool.\n" + "description": "The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create.\nDefaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the\ndefault node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as\nTerraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's\nversion_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools,\nuse the version attribute on the node pool.\n" }, "notificationConfig": { "$ref": "#/types/gcp:container/ClusterNotificationConfig:ClusterNotificationConfig", @@ -149005,7 +150477,7 @@ }, "releaseChannel": { "$ref": "#/types/gcp:container/ClusterReleaseChannel:ClusterReleaseChannel", - "description": "Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels)\nfeature, which provide more control over automatic upgrades of your GKE clusters.\nWhen updating this field, GKE imposes specific version requirements. See\n[Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel)\nfor more details; the `gcp.container.getEngineVersions` datasource can provide\nthe default version for a channel. Note that removing the `release_channel`\nfield from your config will cause the provider to stop managing your cluster's\nrelease channel, but will not unenroll it. Instead, use the `\"UNSPECIFIED\"`\nchannel. Structure is documented below.\n" + "description": "Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE\nclusters. Note that removing this field from your config will not unenroll it. Instead, use the \"UNSPECIFIED\" channel.\n" }, "removeDefaultNodePool": { "type": "boolean", @@ -149070,7 +150542,7 @@ }, "clusterTelemetry": { "$ref": "#/types/gcp:container/ClusterClusterTelemetry:ClusterClusterTelemetry", - "description": "Configuration for\n[ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature,\nStructure is documented below.\n" + "description": ") Configuration for\n[ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature,\nStructure is documented below.\n" }, "confidentialNodes": { "$ref": "#/types/gcp:container/ClusterConfidentialNodes:ClusterConfidentialNodes", @@ -149130,7 +150602,7 @@ }, "enableL4IlbSubsetting": { "type": "boolean", - "description": "Whether L4ILB Subsetting is enabled for this cluster.\n" + "description": ")\nWhether L4ILB Subsetting is enabled for this cluster.\n" }, "enableLegacyAbac": { "type": "boolean", @@ -149155,7 +150627,7 @@ }, "identityServiceConfig": { "$ref": "#/types/gcp:container/ClusterIdentityServiceConfig:ClusterIdentityServiceConfig", - "description": ". Structure is documented below.\n" + "description": "). Structure is documented below.\n" }, "initialNodeCount": { "type": "integer", @@ -149206,7 +150678,7 @@ }, "minMasterVersion": { "type": "string", - "description": "The minimum version of the master. GKE\nwill auto-update the master to new versions, so this does not guarantee the\ncurrent master version--use the read-only `master_version` field to obtain that.\nIf unset, the cluster's version will be set by GKE to the version of the most recent\nofficial release (which is not necessarily the latest version). Most users will find\nthe `gcp.container.getEngineVersions` data source useful - it indicates which versions\nare available. If you intend to specify versions manually,\n[the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version)\ndescribe the various acceptable formats for this field.\n" + "description": "The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the\ncurrent master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be\nset by GKE to the version of the most recent official release (which is not necessarily the latest version).\n" }, "monitoringConfig": { "$ref": "#/types/gcp:container/ClusterMonitoringConfig:ClusterMonitoringConfig", @@ -149237,7 +150709,7 @@ }, "nodeConfig": { "$ref": "#/types/gcp:container/ClusterNodeConfig:ClusterNodeConfig", - "description": "Parameters used in creating the default node pool.\nGenerally, this field should not be used at the same time as a\n`gcp.container.NodePool` or a `node_pool` block; this configuration\nmanages the default node pool, which isn't recommended to be used.\nStructure is documented below.\n", + "description": "The configuration of the nodepool\n", "willReplaceOnChanges": true }, "nodeLocations": { @@ -149265,7 +150737,7 @@ }, "nodeVersion": { "type": "string", - "description": "The Kubernetes version on the nodes. Must either be unset\nor set to the same value as `min_master_version` on create. Defaults to the default\nversion set by GKE which is not necessarily the latest version. This only affects\nnodes in the default node pool. While a fuzzy version can be specified, it's\nrecommended that you specify explicit versions as the provider will see spurious diffs\nwhen fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's\n`version_prefix` field to approximate fuzzy versions.\nTo update nodes in other node pools, use the `version` attribute on the node pool.\n" + "description": "The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create.\nDefaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the\ndefault node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as\nTerraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's\nversion_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools,\nuse the version attribute on the node pool.\n" }, "notificationConfig": { "$ref": "#/types/gcp:container/ClusterNotificationConfig:ClusterNotificationConfig", @@ -149293,7 +150765,7 @@ }, "releaseChannel": { "$ref": "#/types/gcp:container/ClusterReleaseChannel:ClusterReleaseChannel", - "description": "Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels)\nfeature, which provide more control over automatic upgrades of your GKE clusters.\nWhen updating this field, GKE imposes specific version requirements. See\n[Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel)\nfor more details; the `gcp.container.getEngineVersions` datasource can provide\nthe default version for a channel. Note that removing the `release_channel`\nfield from your config will cause the provider to stop managing your cluster's\nrelease channel, but will not unenroll it. Instead, use the `\"UNSPECIFIED\"`\nchannel. Structure is documented below.\n" + "description": "Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE\nclusters. Note that removing this field from your config will not unenroll it. Instead, use the \"UNSPECIFIED\" channel.\n" }, "removeDefaultNodePool": { "type": "boolean", @@ -149348,7 +150820,7 @@ } }, "gcp:container/nodePool:NodePool": { - "description": "Manages a node pool in a Google Kubernetes Engine (GKE) cluster separately from\nthe cluster control plane. For more information see [the official documentation](https://cloud.google.com/container-engine/docs/node-pools)\nand [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters.nodePools).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Using A Separately Managed Node Pool (Recommended)\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.serviceaccount.Account(\"default\", {\n accountId: \"service-account-id\",\n displayName: \"Service Account\",\n});\nconst primary = new gcp.container.Cluster(\"primary\", {\n location: \"us-central1\",\n removeDefaultNodePool: true,\n initialNodeCount: 1,\n});\nconst primaryPreemptibleNodes = new gcp.container.NodePool(\"primaryPreemptibleNodes\", {\n cluster: primary.id,\n nodeCount: 1,\n nodeConfig: {\n preemptible: true,\n machineType: \"e2-medium\",\n serviceAccount: _default.email,\n oauthScopes: [\"https://www.googleapis.com/auth/cloud-platform\"],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.service_account.Account(\"default\",\n account_id=\"service-account-id\",\n display_name=\"Service Account\")\nprimary = gcp.container.Cluster(\"primary\",\n location=\"us-central1\",\n remove_default_node_pool=True,\n initial_node_count=1)\nprimary_preemptible_nodes = gcp.container.NodePool(\"primaryPreemptibleNodes\",\n cluster=primary.id,\n node_count=1,\n node_config=gcp.container.NodePoolNodeConfigArgs(\n preemptible=True,\n machine_type=\"e2-medium\",\n service_account=default.email,\n oauth_scopes=[\"https://www.googleapis.com/auth/cloud-platform\"],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.ServiceAccount.Account(\"default\", new()\n {\n AccountId = \"service-account-id\",\n DisplayName = \"Service Account\",\n });\n\n var primary = new Gcp.Container.Cluster(\"primary\", new()\n {\n Location = \"us-central1\",\n RemoveDefaultNodePool = true,\n InitialNodeCount = 1,\n });\n\n var primaryPreemptibleNodes = new Gcp.Container.NodePool(\"primaryPreemptibleNodes\", new()\n {\n Cluster = primary.Id,\n NodeCount = 1,\n NodeConfig = new Gcp.Container.Inputs.NodePoolNodeConfigArgs\n {\n Preemptible = true,\n MachineType = \"e2-medium\",\n ServiceAccount = @default.Email,\n OauthScopes = new[]\n {\n \"https://www.googleapis.com/auth/cloud-platform\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := serviceAccount.NewAccount(ctx, \"default\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"service-account-id\"),\n\t\t\tDisplayName: pulumi.String(\"Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprimary, err := container.NewCluster(ctx, \"primary\", \u0026container.ClusterArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRemoveDefaultNodePool: pulumi.Bool(true),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = container.NewNodePool(ctx, \"primaryPreemptibleNodes\", \u0026container.NodePoolArgs{\n\t\t\tCluster: primary.ID(),\n\t\t\tNodeCount: pulumi.Int(1),\n\t\t\tNodeConfig: \u0026container.NodePoolNodeConfigArgs{\n\t\t\t\tPreemptible: pulumi.Bool(true),\n\t\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\t\tServiceAccount: _default.Email,\n\t\t\t\tOauthScopes: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://www.googleapis.com/auth/cloud-platform\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.NodePool;\nimport com.pulumi.gcp.container.NodePoolArgs;\nimport com.pulumi.gcp.container.inputs.NodePoolNodeConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Account(\"default\", AccountArgs.builder() \n .accountId(\"service-account-id\")\n .displayName(\"Service Account\")\n .build());\n\n var primary = new Cluster(\"primary\", ClusterArgs.builder() \n .location(\"us-central1\")\n .removeDefaultNodePool(true)\n .initialNodeCount(1)\n .build());\n\n var primaryPreemptibleNodes = new NodePool(\"primaryPreemptibleNodes\", NodePoolArgs.builder() \n .cluster(primary.id())\n .nodeCount(1)\n .nodeConfig(NodePoolNodeConfigArgs.builder()\n .preemptible(true)\n .machineType(\"e2-medium\")\n .serviceAccount(default_.email())\n .oauthScopes(\"https://www.googleapis.com/auth/cloud-platform\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:serviceAccount:Account\n properties:\n accountId: service-account-id\n displayName: Service Account\n primary:\n type: gcp:container:Cluster\n properties:\n location: us-central1\n # We can't create a cluster with no node pool defined, but we want to only use\n # # separately managed node pools. So we create the smallest possible default\n # # node pool and immediately delete it.\n removeDefaultNodePool: true\n initialNodeCount: 1\n primaryPreemptibleNodes:\n type: gcp:container:NodePool\n properties:\n cluster: ${primary.id}\n nodeCount: 1\n nodeConfig:\n preemptible: true\n machineType: e2-medium\n serviceAccount: ${default.email}\n oauthScopes:\n - https://www.googleapis.com/auth/cloud-platform\n```\n{{% /example %}}\n{{% example %}}\n### 2 Node Pools, 1 Separately Managed + The Default Node Pool\n\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterNodeConfigArgs;\nimport com.pulumi.gcp.container.NodePool;\nimport com.pulumi.gcp.container.NodePoolArgs;\nimport com.pulumi.gcp.container.inputs.NodePoolNodeConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Account(\"default\", AccountArgs.builder() \n .accountId(\"service-account-id\")\n .displayName(\"Service Account\")\n .build());\n\n var primary = new Cluster(\"primary\", ClusterArgs.builder() \n .location(\"us-central1-a\")\n .initialNodeCount(3)\n .nodeLocations(\"us-central1-c\")\n .nodeConfig(ClusterNodeConfigArgs.builder()\n .serviceAccount(default_.email())\n .oauthScopes(\"https://www.googleapis.com/auth/cloud-platform\")\n .guestAccelerators(ClusterNodeConfigGuestAcceleratorArgs.builder()\n .type(\"nvidia-tesla-k80\")\n .count(1)\n .build())\n .build())\n .build());\n\n var np = new NodePool(\"np\", NodePoolArgs.builder() \n .cluster(primary.id())\n .nodeConfig(NodePoolNodeConfigArgs.builder()\n .machineType(\"e2-medium\")\n .serviceAccount(default_.email())\n .oauthScopes(\"https://www.googleapis.com/auth/cloud-platform\")\n .build())\n .timeouts(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:serviceAccount:Account\n properties:\n accountId: service-account-id\n displayName: Service Account\n np:\n type: gcp:container:NodePool\n properties:\n cluster: ${primary.id}\n nodeConfig:\n machineType: e2-medium\n serviceAccount: ${default.email}\n oauthScopes:\n - https://www.googleapis.com/auth/cloud-platform\n timeouts:\n - create: 30m\n update: 20m\n primary:\n type: gcp:container:Cluster\n properties:\n location: us-central1-a\n initialNodeCount: 3\n nodeLocations:\n - us-central1-c\n nodeConfig:\n serviceAccount: ${default.email}\n oauthScopes:\n - https://www.googleapis.com/auth/cloud-platform\n guestAccelerators:\n - type: nvidia-tesla-k80\n count: 1\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nNode pools can be imported using the `project`, `location`, `cluster` and `name`. If the project is omitted, the project value in the provider configuration will be used. Examples\n\n```sh\n $ pulumi import gcp:container/nodePool:NodePool mainpool my-gcp-project/us-east1-a/my-cluster/main-pool\n```\n\n\n\n```sh\n $ pulumi import gcp:container/nodePool:NodePool mainpool us-east1/my-cluster/main-pool\n```\n\n ", + "description": "\n\n\n## Import\n\nNode pools can be imported using the `project`, `location`, `cluster` and `name`. If the project is omitted, the project value in the provider configuration will be used. Examples\n\n```sh\n $ pulumi import gcp:container/nodePool:NodePool mainpool my-gcp-project/us-east1-a/my-cluster/main-pool\n```\n\n\n\n```sh\n $ pulumi import gcp:container/nodePool:NodePool mainpool us-east1/my-cluster/main-pool\n```\n\n ", "properties": { "autoscaling": { "$ref": "#/types/gcp:container/NodePoolAutoscaling:NodePoolAutoscaling", @@ -149360,7 +150832,7 @@ }, "initialNodeCount": { "type": "integer", - "description": "The initial number of nodes for the pool. In\nregional or multi-zonal clusters, this is the number of nodes per zone. Changing\nthis will force recreation of the resource. WARNING: Resizing your node pool manually\nmay change this value in your existing cluster, which will trigger destruction\nand recreation on the next provider run (to rectify the discrepancy). If you don't\nneed this value, don't set it. If you do need it, you can use a lifecycle block to\nignore subsqeuent changes to this field.\n" + "description": "The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone.\nChanging this will force recreation of the resource.\n" }, "instanceGroupUrls": { "type": "array", @@ -149390,7 +150862,7 @@ }, "name": { "type": "string", - "description": "The name of the node pool. If left blank, the provider will\nauto-generate a unique name.\n" + "description": "The name of the node pool. If left blank, Terraform will auto-generate a unique name.\n" }, "namePrefix": { "type": "string", @@ -149432,7 +150904,7 @@ }, "version": { "type": "string", - "description": "The Kubernetes version for the nodes in this pool. Note that if this field\nand `auto_upgrade` are both specified, they will fight each other for what the node version should\nbe, so setting both is highly discouraged. While a fuzzy version can be specified, it's\nrecommended that you specify explicit versions as the provider will see spurious diffs\nwhen fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's\n`version_prefix` field to approximate fuzzy versions in a provider-compatible way.\n" + "description": "The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they\nwill fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version\ncan be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy\nversions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy\nversions in a Terraform-compatible way.\n" } }, "required": [ @@ -149466,7 +150938,7 @@ }, "initialNodeCount": { "type": "integer", - "description": "The initial number of nodes for the pool. In\nregional or multi-zonal clusters, this is the number of nodes per zone. Changing\nthis will force recreation of the resource. WARNING: Resizing your node pool manually\nmay change this value in your existing cluster, which will trigger destruction\nand recreation on the next provider run (to rectify the discrepancy). If you don't\nneed this value, don't set it. If you do need it, you can use a lifecycle block to\nignore subsqeuent changes to this field.\n", + "description": "The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone.\nChanging this will force recreation of the resource.\n", "willReplaceOnChanges": true }, "location": { @@ -149485,7 +150957,7 @@ }, "name": { "type": "string", - "description": "The name of the node pool. If left blank, the provider will\nauto-generate a unique name.\n", + "description": "The name of the node pool. If left blank, Terraform will auto-generate a unique name.\n", "willReplaceOnChanges": true }, "namePrefix": { @@ -149529,7 +151001,7 @@ }, "version": { "type": "string", - "description": "The Kubernetes version for the nodes in this pool. Note that if this field\nand `auto_upgrade` are both specified, they will fight each other for what the node version should\nbe, so setting both is highly discouraged. While a fuzzy version can be specified, it's\nrecommended that you specify explicit versions as the provider will see spurious diffs\nwhen fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's\n`version_prefix` field to approximate fuzzy versions in a provider-compatible way.\n" + "description": "The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they\nwill fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version\ncan be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy\nversions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy\nversions in a Terraform-compatible way.\n" } }, "requiredInputs": [ @@ -149549,7 +151021,7 @@ }, "initialNodeCount": { "type": "integer", - "description": "The initial number of nodes for the pool. In\nregional or multi-zonal clusters, this is the number of nodes per zone. Changing\nthis will force recreation of the resource. WARNING: Resizing your node pool manually\nmay change this value in your existing cluster, which will trigger destruction\nand recreation on the next provider run (to rectify the discrepancy). If you don't\nneed this value, don't set it. If you do need it, you can use a lifecycle block to\nignore subsqeuent changes to this field.\n", + "description": "The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone.\nChanging this will force recreation of the resource.\n", "willReplaceOnChanges": true }, "instanceGroupUrls": { @@ -149582,7 +151054,7 @@ }, "name": { "type": "string", - "description": "The name of the node pool. If left blank, the provider will\nauto-generate a unique name.\n", + "description": "The name of the node pool. If left blank, Terraform will auto-generate a unique name.\n", "willReplaceOnChanges": true }, "namePrefix": { @@ -149629,7 +151101,7 @@ }, "version": { "type": "string", - "description": "The Kubernetes version for the nodes in this pool. Note that if this field\nand `auto_upgrade` are both specified, they will fight each other for what the node version should\nbe, so setting both is highly discouraged. While a fuzzy version can be specified, it's\nrecommended that you specify explicit versions as the provider will see spurious diffs\nwhen fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's\n`version_prefix` field to approximate fuzzy versions in a provider-compatible way.\n" + "description": "The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they\nwill fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version\ncan be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy\nversions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy\nversions in a Terraform-compatible way.\n" } }, "type": "object" @@ -150177,7 +151649,7 @@ } }, "gcp:datacatalog/entryGroup:EntryGroup": { - "description": "An EntryGroup resource represents a logical grouping of zero or more Data Catalog Entry resources.\n\n\nTo get more information about EntryGroup, see:\n\n* [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1/projects.locations.entryGroups)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/data-catalog/docs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Catalog Entry Group Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicEntryGroup = new gcp.datacatalog.EntryGroup(\"basicEntryGroup\", {entryGroupId: \"my_group\"});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_entry_group = gcp.datacatalog.EntryGroup(\"basicEntryGroup\", entry_group_id=\"my_group\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicEntryGroup = new Gcp.DataCatalog.EntryGroup(\"basicEntryGroup\", new()\n {\n EntryGroupId = \"my_group\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewEntryGroup(ctx, \"basicEntryGroup\", \u0026datacatalog.EntryGroupArgs{\n\t\t\tEntryGroupId: pulumi.String(\"my_group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.EntryGroup;\nimport com.pulumi.gcp.datacatalog.EntryGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicEntryGroup = new EntryGroup(\"basicEntryGroup\", EntryGroupArgs.builder() \n .entryGroupId(\"my_group\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicEntryGroup:\n type: gcp:datacatalog:EntryGroup\n properties:\n entryGroupId: my_group\n```\n{{% /example %}}\n{{% example %}}\n### Data Catalog Entry Group Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicEntryGroup = new gcp.datacatalog.EntryGroup(\"basicEntryGroup\", {\n description: \"example entry group\",\n displayName: \"entry group\",\n entryGroupId: \"my_group\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_entry_group = gcp.datacatalog.EntryGroup(\"basicEntryGroup\",\n description=\"example entry group\",\n display_name=\"entry group\",\n entry_group_id=\"my_group\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicEntryGroup = new Gcp.DataCatalog.EntryGroup(\"basicEntryGroup\", new()\n {\n Description = \"example entry group\",\n DisplayName = \"entry group\",\n EntryGroupId = \"my_group\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewEntryGroup(ctx, \"basicEntryGroup\", \u0026datacatalog.EntryGroupArgs{\n\t\t\tDescription: pulumi.String(\"example entry group\"),\n\t\t\tDisplayName: pulumi.String(\"entry group\"),\n\t\t\tEntryGroupId: pulumi.String(\"my_group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.EntryGroup;\nimport com.pulumi.gcp.datacatalog.EntryGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicEntryGroup = new EntryGroup(\"basicEntryGroup\", EntryGroupArgs.builder() \n .description(\"example entry group\")\n .displayName(\"entry group\")\n .entryGroupId(\"my_group\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicEntryGroup:\n type: gcp:datacatalog:EntryGroup\n properties:\n description: example entry group\n displayName: entry group\n entryGroupId: my_group\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nEntryGroup can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:datacatalog/entryGroup:EntryGroup default {{name}}\n```\n\n ", + "description": "An EntryGroup resource represents a logical grouping of zero or more Data Catalog Entry resources.\n\n\nTo get more information about EntryGroup, see:\n\n* [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1/projects.locations.entryGroups)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/data-catalog/docs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Catalog Entry Group Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicEntryGroup = new gcp.datacatalog.EntryGroup(\"basicEntryGroup\", {entryGroupId: \"my_group\"});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_entry_group = gcp.datacatalog.EntryGroup(\"basicEntryGroup\", entry_group_id=\"my_group\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicEntryGroup = new Gcp.DataCatalog.EntryGroup(\"basicEntryGroup\", new()\n {\n EntryGroupId = \"my_group\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewEntryGroup(ctx, \"basicEntryGroup\", \u0026datacatalog.EntryGroupArgs{\n\t\t\tEntryGroupId: pulumi.String(\"my_group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.EntryGroup;\nimport com.pulumi.gcp.datacatalog.EntryGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicEntryGroup = new EntryGroup(\"basicEntryGroup\", EntryGroupArgs.builder() \n .entryGroupId(\"my_group\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicEntryGroup:\n type: gcp:datacatalog:EntryGroup\n properties:\n entryGroupId: my_group\n```\n{{% /example %}}\n{{% example %}}\n### Data Catalog Entry Group Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicEntryGroup = new gcp.datacatalog.EntryGroup(\"basicEntryGroup\", {\n description: \"entry group created by Terraform\",\n displayName: \"terraform entry group\",\n entryGroupId: \"my_group\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_entry_group = gcp.datacatalog.EntryGroup(\"basicEntryGroup\",\n description=\"entry group created by Terraform\",\n display_name=\"terraform entry group\",\n entry_group_id=\"my_group\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicEntryGroup = new Gcp.DataCatalog.EntryGroup(\"basicEntryGroup\", new()\n {\n Description = \"entry group created by Terraform\",\n DisplayName = \"terraform entry group\",\n EntryGroupId = \"my_group\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewEntryGroup(ctx, \"basicEntryGroup\", \u0026datacatalog.EntryGroupArgs{\n\t\t\tDescription: pulumi.String(\"entry group created by Terraform\"),\n\t\t\tDisplayName: pulumi.String(\"terraform entry group\"),\n\t\t\tEntryGroupId: pulumi.String(\"my_group\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.EntryGroup;\nimport com.pulumi.gcp.datacatalog.EntryGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicEntryGroup = new EntryGroup(\"basicEntryGroup\", EntryGroupArgs.builder() \n .description(\"entry group created by Terraform\")\n .displayName(\"terraform entry group\")\n .entryGroupId(\"my_group\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicEntryGroup:\n type: gcp:datacatalog:EntryGroup\n properties:\n description: entry group created by Terraform\n displayName: terraform entry group\n entryGroupId: my_group\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nEntryGroup can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:datacatalog/entryGroup:EntryGroup default {{name}}\n```\n\n ", "properties": { "description": { "type": "string", @@ -150581,7 +152053,7 @@ } }, "gcp:datacatalog/policyTag:PolicyTag": { - "description": "Denotes one policy tag in a taxonomy.\n\nTo get more information about PolicyTag, see:\n\n* [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies.policyTags)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/data-catalog/docs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Catalog Taxonomies Policy Tag Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myTaxonomy = new gcp.datacatalog.Taxonomy(\"myTaxonomy\", {\n region: \"us\",\n displayName: \"taxonomy_display_name\",\n description: \"A collection of policy tags\",\n activatedPolicyTypes: [\"FINE_GRAINED_ACCESS_CONTROL\"],\n}, {\n provider: google_beta,\n});\nconst basicPolicyTag = new gcp.datacatalog.PolicyTag(\"basicPolicyTag\", {\n taxonomy: myTaxonomy.id,\n displayName: \"Low security\",\n description: \"A policy tag normally associated with low security items\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_taxonomy = gcp.datacatalog.Taxonomy(\"myTaxonomy\",\n region=\"us\",\n display_name=\"taxonomy_display_name\",\n description=\"A collection of policy tags\",\n activated_policy_types=[\"FINE_GRAINED_ACCESS_CONTROL\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\nbasic_policy_tag = gcp.datacatalog.PolicyTag(\"basicPolicyTag\",\n taxonomy=my_taxonomy.id,\n display_name=\"Low security\",\n description=\"A policy tag normally associated with low security items\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myTaxonomy = new Gcp.DataCatalog.Taxonomy(\"myTaxonomy\", new()\n {\n Region = \"us\",\n DisplayName = \"taxonomy_display_name\",\n Description = \"A collection of policy tags\",\n ActivatedPolicyTypes = new[]\n {\n \"FINE_GRAINED_ACCESS_CONTROL\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var basicPolicyTag = new Gcp.DataCatalog.PolicyTag(\"basicPolicyTag\", new()\n {\n Taxonomy = myTaxonomy.Id,\n DisplayName = \"Low security\",\n Description = \"A policy tag normally associated with low security items\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyTaxonomy, err := datacatalog.NewTaxonomy(ctx, \"myTaxonomy\", \u0026datacatalog.TaxonomyArgs{\n\t\t\tRegion: pulumi.String(\"us\"),\n\t\t\tDisplayName: pulumi.String(\"taxonomy_display_name\"),\n\t\t\tDescription: pulumi.String(\"A collection of policy tags\"),\n\t\t\tActivatedPolicyTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"FINE_GRAINED_ACCESS_CONTROL\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datacatalog.NewPolicyTag(ctx, \"basicPolicyTag\", \u0026datacatalog.PolicyTagArgs{\n\t\t\tTaxonomy: myTaxonomy.ID(),\n\t\t\tDisplayName: pulumi.String(\"Low security\"),\n\t\t\tDescription: pulumi.String(\"A policy tag normally associated with low security items\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.Taxonomy;\nimport com.pulumi.gcp.datacatalog.TaxonomyArgs;\nimport com.pulumi.gcp.datacatalog.PolicyTag;\nimport com.pulumi.gcp.datacatalog.PolicyTagArgs;\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 myTaxonomy = new Taxonomy(\"myTaxonomy\", TaxonomyArgs.builder() \n .region(\"us\")\n .displayName(\"taxonomy_display_name\")\n .description(\"A collection of policy tags\")\n .activatedPolicyTypes(\"FINE_GRAINED_ACCESS_CONTROL\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var basicPolicyTag = new PolicyTag(\"basicPolicyTag\", PolicyTagArgs.builder() \n .taxonomy(myTaxonomy.id())\n .displayName(\"Low security\")\n .description(\"A policy tag normally associated with low security items\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicPolicyTag:\n type: gcp:datacatalog:PolicyTag\n properties:\n taxonomy: ${myTaxonomy.id}\n displayName: Low security\n description: A policy tag normally associated with low security items\n options:\n provider: ${[\"google-beta\"]}\n myTaxonomy:\n type: gcp:datacatalog:Taxonomy\n properties:\n region: us\n displayName: taxonomy_display_name\n description: A collection of policy tags\n activatedPolicyTypes:\n - FINE_GRAINED_ACCESS_CONTROL\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Data Catalog Taxonomies Policy Tag Child Policies\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myTaxonomy = new gcp.datacatalog.Taxonomy(\"myTaxonomy\", {\n region: \"us\",\n displayName: \"taxonomy_display_name\",\n description: \"A collection of policy tags\",\n activatedPolicyTypes: [\"FINE_GRAINED_ACCESS_CONTROL\"],\n}, {\n provider: google_beta,\n});\nconst parentPolicy = new gcp.datacatalog.PolicyTag(\"parentPolicy\", {\n taxonomy: myTaxonomy.id,\n displayName: \"High\",\n description: \"A policy tag category used for high security access\",\n}, {\n provider: google_beta,\n});\nconst childPolicy = new gcp.datacatalog.PolicyTag(\"childPolicy\", {\n taxonomy: myTaxonomy.id,\n displayName: \"ssn\",\n description: \"A hash of the users ssn\",\n parentPolicyTag: parentPolicy.id,\n}, {\n provider: google_beta,\n});\nconst childPolicy2 = new gcp.datacatalog.PolicyTag(\"childPolicy2\", {\n taxonomy: myTaxonomy.id,\n displayName: \"dob\",\n description: \"The users date of birth\",\n parentPolicyTag: parentPolicy.id,\n}, {\n provider: google_beta,\n dependsOn: [childPolicy],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_taxonomy = gcp.datacatalog.Taxonomy(\"myTaxonomy\",\n region=\"us\",\n display_name=\"taxonomy_display_name\",\n description=\"A collection of policy tags\",\n activated_policy_types=[\"FINE_GRAINED_ACCESS_CONTROL\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\nparent_policy = gcp.datacatalog.PolicyTag(\"parentPolicy\",\n taxonomy=my_taxonomy.id,\n display_name=\"High\",\n description=\"A policy tag category used for high security access\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nchild_policy = gcp.datacatalog.PolicyTag(\"childPolicy\",\n taxonomy=my_taxonomy.id,\n display_name=\"ssn\",\n description=\"A hash of the users ssn\",\n parent_policy_tag=parent_policy.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\nchild_policy2 = gcp.datacatalog.PolicyTag(\"childPolicy2\",\n taxonomy=my_taxonomy.id,\n display_name=\"dob\",\n description=\"The users date of birth\",\n parent_policy_tag=parent_policy.id,\n opts=pulumi.ResourceOptions(provider=google_beta,\n depends_on=[child_policy]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myTaxonomy = new Gcp.DataCatalog.Taxonomy(\"myTaxonomy\", new()\n {\n Region = \"us\",\n DisplayName = \"taxonomy_display_name\",\n Description = \"A collection of policy tags\",\n ActivatedPolicyTypes = new[]\n {\n \"FINE_GRAINED_ACCESS_CONTROL\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var parentPolicy = new Gcp.DataCatalog.PolicyTag(\"parentPolicy\", new()\n {\n Taxonomy = myTaxonomy.Id,\n DisplayName = \"High\",\n Description = \"A policy tag category used for high security access\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var childPolicy = new Gcp.DataCatalog.PolicyTag(\"childPolicy\", new()\n {\n Taxonomy = myTaxonomy.Id,\n DisplayName = \"ssn\",\n Description = \"A hash of the users ssn\",\n ParentPolicyTag = parentPolicy.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var childPolicy2 = new Gcp.DataCatalog.PolicyTag(\"childPolicy2\", new()\n {\n Taxonomy = myTaxonomy.Id,\n DisplayName = \"dob\",\n Description = \"The users date of birth\",\n ParentPolicyTag = parentPolicy.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n DependsOn = new[]\n {\n childPolicy,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyTaxonomy, err := datacatalog.NewTaxonomy(ctx, \"myTaxonomy\", \u0026datacatalog.TaxonomyArgs{\n\t\t\tRegion: pulumi.String(\"us\"),\n\t\t\tDisplayName: pulumi.String(\"taxonomy_display_name\"),\n\t\t\tDescription: pulumi.String(\"A collection of policy tags\"),\n\t\t\tActivatedPolicyTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"FINE_GRAINED_ACCESS_CONTROL\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tparentPolicy, err := datacatalog.NewPolicyTag(ctx, \"parentPolicy\", \u0026datacatalog.PolicyTagArgs{\n\t\t\tTaxonomy: myTaxonomy.ID(),\n\t\t\tDisplayName: pulumi.String(\"High\"),\n\t\t\tDescription: pulumi.String(\"A policy tag category used for high security access\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tchildPolicy, err := datacatalog.NewPolicyTag(ctx, \"childPolicy\", \u0026datacatalog.PolicyTagArgs{\n\t\t\tTaxonomy: myTaxonomy.ID(),\n\t\t\tDisplayName: pulumi.String(\"ssn\"),\n\t\t\tDescription: pulumi.String(\"A hash of the users ssn\"),\n\t\t\tParentPolicyTag: parentPolicy.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datacatalog.NewPolicyTag(ctx, \"childPolicy2\", \u0026datacatalog.PolicyTagArgs{\n\t\t\tTaxonomy: myTaxonomy.ID(),\n\t\t\tDisplayName: pulumi.String(\"dob\"),\n\t\t\tDescription: pulumi.String(\"The users date of birth\"),\n\t\t\tParentPolicyTag: parentPolicy.ID(),\n\t\t}, pulumi.Provider(google_beta), pulumi.DependsOn([]pulumi.Resource{\n\t\t\tchildPolicy,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.Taxonomy;\nimport com.pulumi.gcp.datacatalog.TaxonomyArgs;\nimport com.pulumi.gcp.datacatalog.PolicyTag;\nimport com.pulumi.gcp.datacatalog.PolicyTagArgs;\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 myTaxonomy = new Taxonomy(\"myTaxonomy\", TaxonomyArgs.builder() \n .region(\"us\")\n .displayName(\"taxonomy_display_name\")\n .description(\"A collection of policy tags\")\n .activatedPolicyTypes(\"FINE_GRAINED_ACCESS_CONTROL\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var parentPolicy = new PolicyTag(\"parentPolicy\", PolicyTagArgs.builder() \n .taxonomy(myTaxonomy.id())\n .displayName(\"High\")\n .description(\"A policy tag category used for high security access\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var childPolicy = new PolicyTag(\"childPolicy\", PolicyTagArgs.builder() \n .taxonomy(myTaxonomy.id())\n .displayName(\"ssn\")\n .description(\"A hash of the users ssn\")\n .parentPolicyTag(parentPolicy.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var childPolicy2 = new PolicyTag(\"childPolicy2\", PolicyTagArgs.builder() \n .taxonomy(myTaxonomy.id())\n .displayName(\"dob\")\n .description(\"The users date of birth\")\n .parentPolicyTag(parentPolicy.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .dependsOn(childPolicy)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n parentPolicy:\n type: gcp:datacatalog:PolicyTag\n properties:\n taxonomy: ${myTaxonomy.id}\n displayName: High\n description: A policy tag category used for high security access\n options:\n provider: ${[\"google-beta\"]}\n childPolicy:\n type: gcp:datacatalog:PolicyTag\n properties:\n taxonomy: ${myTaxonomy.id}\n displayName: ssn\n description: A hash of the users ssn\n parentPolicyTag: ${parentPolicy.id}\n options:\n provider: ${[\"google-beta\"]}\n childPolicy2:\n type: gcp:datacatalog:PolicyTag\n properties:\n taxonomy: ${myTaxonomy.id}\n displayName: dob\n description: The users date of birth\n parentPolicyTag: ${parentPolicy.id}\n options:\n provider: ${[\"google-beta\"]}\n dependson:\n - ${childPolicy}\n myTaxonomy:\n type: gcp:datacatalog:Taxonomy\n properties:\n region: us\n displayName: taxonomy_display_name\n description: A collection of policy tags\n activatedPolicyTypes:\n - FINE_GRAINED_ACCESS_CONTROL\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPolicyTag can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:datacatalog/policyTag:PolicyTag default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Catalog Taxonomies Policy Tag Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myTaxonomy = new gcp.datacatalog.Taxonomy(\"myTaxonomy\", {\n region: \"us\",\n displayName: \"taxonomy_display_name\",\n description: \"A collection of policy tags\",\n activatedPolicyTypes: [\"FINE_GRAINED_ACCESS_CONTROL\"],\n}, {\n provider: google_beta,\n});\nconst basicPolicyTag = new gcp.datacatalog.PolicyTag(\"basicPolicyTag\", {\n taxonomy: myTaxonomy.id,\n displayName: \"Low security\",\n description: \"A policy tag normally associated with low security items\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_taxonomy = gcp.datacatalog.Taxonomy(\"myTaxonomy\",\n region=\"us\",\n display_name=\"taxonomy_display_name\",\n description=\"A collection of policy tags\",\n activated_policy_types=[\"FINE_GRAINED_ACCESS_CONTROL\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\nbasic_policy_tag = gcp.datacatalog.PolicyTag(\"basicPolicyTag\",\n taxonomy=my_taxonomy.id,\n display_name=\"Low security\",\n description=\"A policy tag normally associated with low security items\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myTaxonomy = new Gcp.DataCatalog.Taxonomy(\"myTaxonomy\", new()\n {\n Region = \"us\",\n DisplayName = \"taxonomy_display_name\",\n Description = \"A collection of policy tags\",\n ActivatedPolicyTypes = new[]\n {\n \"FINE_GRAINED_ACCESS_CONTROL\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var basicPolicyTag = new Gcp.DataCatalog.PolicyTag(\"basicPolicyTag\", new()\n {\n Taxonomy = myTaxonomy.Id,\n DisplayName = \"Low security\",\n Description = \"A policy tag normally associated with low security items\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyTaxonomy, err := datacatalog.NewTaxonomy(ctx, \"myTaxonomy\", \u0026datacatalog.TaxonomyArgs{\n\t\t\tRegion: pulumi.String(\"us\"),\n\t\t\tDisplayName: pulumi.String(\"taxonomy_display_name\"),\n\t\t\tDescription: pulumi.String(\"A collection of policy tags\"),\n\t\t\tActivatedPolicyTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"FINE_GRAINED_ACCESS_CONTROL\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datacatalog.NewPolicyTag(ctx, \"basicPolicyTag\", \u0026datacatalog.PolicyTagArgs{\n\t\t\tTaxonomy: myTaxonomy.ID(),\n\t\t\tDisplayName: pulumi.String(\"Low security\"),\n\t\t\tDescription: pulumi.String(\"A policy tag normally associated with low security items\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.Taxonomy;\nimport com.pulumi.gcp.datacatalog.TaxonomyArgs;\nimport com.pulumi.gcp.datacatalog.PolicyTag;\nimport com.pulumi.gcp.datacatalog.PolicyTagArgs;\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 myTaxonomy = new Taxonomy(\"myTaxonomy\", TaxonomyArgs.builder() \n .region(\"us\")\n .displayName(\"taxonomy_display_name\")\n .description(\"A collection of policy tags\")\n .activatedPolicyTypes(\"FINE_GRAINED_ACCESS_CONTROL\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var basicPolicyTag = new PolicyTag(\"basicPolicyTag\", PolicyTagArgs.builder() \n .taxonomy(myTaxonomy.id())\n .displayName(\"Low security\")\n .description(\"A policy tag normally associated with low security items\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicPolicyTag:\n type: gcp:datacatalog:PolicyTag\n properties:\n taxonomy: ${myTaxonomy.id}\n displayName: Low security\n description: A policy tag normally associated with low security items\n options:\n provider: ${[\"google-beta\"]}\n myTaxonomy:\n type: gcp:datacatalog:Taxonomy\n properties:\n region: us\n displayName: taxonomy_display_name\n description: A collection of policy tags\n activatedPolicyTypes:\n - FINE_GRAINED_ACCESS_CONTROL\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Data Catalog Taxonomies Policy Tag Child Policies\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myTaxonomy = new gcp.datacatalog.Taxonomy(\"myTaxonomy\", {\n region: \"us\",\n displayName: \"taxonomy_display_name\",\n description: \"A collection of policy tags\",\n activatedPolicyTypes: [\"FINE_GRAINED_ACCESS_CONTROL\"],\n}, {\n provider: google_beta,\n});\nconst parentPolicy = new gcp.datacatalog.PolicyTag(\"parentPolicy\", {\n taxonomy: myTaxonomy.id,\n displayName: \"High\",\n description: \"A policy tag category used for high security access\",\n}, {\n provider: google_beta,\n});\nconst childPolicy = new gcp.datacatalog.PolicyTag(\"childPolicy\", {\n taxonomy: myTaxonomy.id,\n displayName: \"ssn\",\n description: \"A hash of the users ssn\",\n parentPolicyTag: parentPolicy.id,\n}, {\n provider: google_beta,\n});\nconst childPolicy2 = new gcp.datacatalog.PolicyTag(\"childPolicy2\", {\n taxonomy: myTaxonomy.id,\n displayName: \"dob\",\n description: \"The users date of birth\",\n parentPolicyTag: parentPolicy.id,\n}, {\n provider: google_beta,\n dependsOn: [childPolicy],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_taxonomy = gcp.datacatalog.Taxonomy(\"myTaxonomy\",\n region=\"us\",\n display_name=\"taxonomy_display_name\",\n description=\"A collection of policy tags\",\n activated_policy_types=[\"FINE_GRAINED_ACCESS_CONTROL\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\nparent_policy = gcp.datacatalog.PolicyTag(\"parentPolicy\",\n taxonomy=my_taxonomy.id,\n display_name=\"High\",\n description=\"A policy tag category used for high security access\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nchild_policy = gcp.datacatalog.PolicyTag(\"childPolicy\",\n taxonomy=my_taxonomy.id,\n display_name=\"ssn\",\n description=\"A hash of the users ssn\",\n parent_policy_tag=parent_policy.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\nchild_policy2 = gcp.datacatalog.PolicyTag(\"childPolicy2\",\n taxonomy=my_taxonomy.id,\n display_name=\"dob\",\n description=\"The users date of birth\",\n parent_policy_tag=parent_policy.id,\n opts=pulumi.ResourceOptions(provider=google_beta,\n depends_on=[child_policy]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myTaxonomy = new Gcp.DataCatalog.Taxonomy(\"myTaxonomy\", new()\n {\n Region = \"us\",\n DisplayName = \"taxonomy_display_name\",\n Description = \"A collection of policy tags\",\n ActivatedPolicyTypes = new[]\n {\n \"FINE_GRAINED_ACCESS_CONTROL\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var parentPolicy = new Gcp.DataCatalog.PolicyTag(\"parentPolicy\", new()\n {\n Taxonomy = myTaxonomy.Id,\n DisplayName = \"High\",\n Description = \"A policy tag category used for high security access\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var childPolicy = new Gcp.DataCatalog.PolicyTag(\"childPolicy\", new()\n {\n Taxonomy = myTaxonomy.Id,\n DisplayName = \"ssn\",\n Description = \"A hash of the users ssn\",\n ParentPolicyTag = parentPolicy.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var childPolicy2 = new Gcp.DataCatalog.PolicyTag(\"childPolicy2\", new()\n {\n Taxonomy = myTaxonomy.Id,\n DisplayName = \"dob\",\n Description = \"The users date of birth\",\n ParentPolicyTag = parentPolicy.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n DependsOn = new[]\n {\n childPolicy,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyTaxonomy, err := datacatalog.NewTaxonomy(ctx, \"myTaxonomy\", \u0026datacatalog.TaxonomyArgs{\n\t\t\tRegion: pulumi.String(\"us\"),\n\t\t\tDisplayName: pulumi.String(\"taxonomy_display_name\"),\n\t\t\tDescription: pulumi.String(\"A collection of policy tags\"),\n\t\t\tActivatedPolicyTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"FINE_GRAINED_ACCESS_CONTROL\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tparentPolicy, err := datacatalog.NewPolicyTag(ctx, \"parentPolicy\", \u0026datacatalog.PolicyTagArgs{\n\t\t\tTaxonomy: myTaxonomy.ID(),\n\t\t\tDisplayName: pulumi.String(\"High\"),\n\t\t\tDescription: pulumi.String(\"A policy tag category used for high security access\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tchildPolicy, err := datacatalog.NewPolicyTag(ctx, \"childPolicy\", \u0026datacatalog.PolicyTagArgs{\n\t\t\tTaxonomy: myTaxonomy.ID(),\n\t\t\tDisplayName: pulumi.String(\"ssn\"),\n\t\t\tDescription: pulumi.String(\"A hash of the users ssn\"),\n\t\t\tParentPolicyTag: parentPolicy.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datacatalog.NewPolicyTag(ctx, \"childPolicy2\", \u0026datacatalog.PolicyTagArgs{\n\t\t\tTaxonomy: myTaxonomy.ID(),\n\t\t\tDisplayName: pulumi.String(\"dob\"),\n\t\t\tDescription: pulumi.String(\"The users date of birth\"),\n\t\t\tParentPolicyTag: parentPolicy.ID(),\n\t\t}, pulumi.Provider(google_beta), pulumi.DependsOn([]pulumi.Resource{\n\t\t\tchildPolicy,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.Taxonomy;\nimport com.pulumi.gcp.datacatalog.TaxonomyArgs;\nimport com.pulumi.gcp.datacatalog.PolicyTag;\nimport com.pulumi.gcp.datacatalog.PolicyTagArgs;\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 myTaxonomy = new Taxonomy(\"myTaxonomy\", TaxonomyArgs.builder() \n .region(\"us\")\n .displayName(\"taxonomy_display_name\")\n .description(\"A collection of policy tags\")\n .activatedPolicyTypes(\"FINE_GRAINED_ACCESS_CONTROL\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var parentPolicy = new PolicyTag(\"parentPolicy\", PolicyTagArgs.builder() \n .taxonomy(myTaxonomy.id())\n .displayName(\"High\")\n .description(\"A policy tag category used for high security access\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var childPolicy = new PolicyTag(\"childPolicy\", PolicyTagArgs.builder() \n .taxonomy(myTaxonomy.id())\n .displayName(\"ssn\")\n .description(\"A hash of the users ssn\")\n .parentPolicyTag(parentPolicy.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var childPolicy2 = new PolicyTag(\"childPolicy2\", PolicyTagArgs.builder() \n .taxonomy(myTaxonomy.id())\n .displayName(\"dob\")\n .description(\"The users date of birth\")\n .parentPolicyTag(parentPolicy.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .dependsOn(childPolicy)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n parentPolicy:\n type: gcp:datacatalog:PolicyTag\n properties:\n taxonomy: ${myTaxonomy.id}\n displayName: High\n description: A policy tag category used for high security access\n options:\n provider: ${[\"google-beta\"]}\n childPolicy:\n type: gcp:datacatalog:PolicyTag\n properties:\n taxonomy: ${myTaxonomy.id}\n displayName: ssn\n description: A hash of the users ssn\n parentPolicyTag: ${parentPolicy.id}\n options:\n provider: ${[\"google-beta\"]}\n childPolicy2:\n type: gcp:datacatalog:PolicyTag\n properties:\n taxonomy: ${myTaxonomy.id}\n displayName: dob\n description: The users date of birth\n parentPolicyTag: ${parentPolicy.id}\n options:\n provider: ${[\"google-beta\"]}\n dependson:\n - ${childPolicy}\n myTaxonomy:\n type: gcp:datacatalog:Taxonomy\n properties:\n region: us\n displayName: taxonomy_display_name\n description: A collection of policy tags\n activatedPolicyTypes:\n - FINE_GRAINED_ACCESS_CONTROL\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPolicyTag can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:datacatalog/policyTag:PolicyTag default {{name}}\n```\n\n ", "properties": { "childPolicyTags": { "type": "array", @@ -150676,7 +152148,7 @@ } }, "gcp:datacatalog/policyTagIamBinding:PolicyTagIamBinding": { - "description": "Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case:\n\n* `gcp.datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached.\n* `gcp.datacatalog.PolicyTagIamBinding`: 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 policytag are preserved.\n* `gcp.datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved.\n\n\u003e **Note:** `gcp.datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.PolicyTagIamBinding` and `gcp.datacatalog.PolicyTagIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_policy\n\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.datacatalog.PolicyTagIamPolicy(\"policy\", {\n policyTag: google_data_catalog_policy_tag.basic_policy_tag.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.datacatalog.PolicyTagIamPolicy(\"policy\",\n policy_tag=google_data_catalog_policy_tag[\"basic_policy_tag\"][\"name\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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.DataCatalog.PolicyTagIamPolicy(\"policy\", new()\n {\n PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 = datacatalog.NewPolicyTagIamPolicy(ctx, \"policy\", \u0026datacatalog.PolicyTagIamPolicyArgs{\n\t\t\tPolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datacatalog.PolicyTagIamPolicy;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamPolicyArgs;\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 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 PolicyTagIamPolicy(\"policy\", PolicyTagIamPolicyArgs.builder() \n .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:datacatalog:PolicyTagIamPolicy\n properties:\n policyTag: ${google_data_catalog_policy_tag.basic_policy_tag.name}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\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\n## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.datacatalog.PolicyTagIamBinding(\"binding\", {\n policyTag: google_data_catalog_policy_tag.basic_policy_tag.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.datacatalog.PolicyTagIamBinding(\"binding\",\n policy_tag=google_data_catalog_policy_tag[\"basic_policy_tag\"][\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.DataCatalog.PolicyTagIamBinding(\"binding\", new()\n {\n PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewPolicyTagIamBinding(ctx, \"binding\", \u0026datacatalog.PolicyTagIamBindingArgs{\n\t\t\tPolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamBinding;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamBindingArgs;\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 binding = new PolicyTagIamBinding(\"binding\", PolicyTagIamBindingArgs.builder() \n .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:datacatalog:PolicyTagIamBinding\n properties:\n policyTag: ${google_data_catalog_policy_tag.basic_policy_tag.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.datacatalog.PolicyTagIamMember(\"member\", {\n policyTag: google_data_catalog_policy_tag.basic_policy_tag.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.datacatalog.PolicyTagIamMember(\"member\",\n policy_tag=google_data_catalog_policy_tag[\"basic_policy_tag\"][\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.DataCatalog.PolicyTagIamMember(\"member\", new()\n {\n PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewPolicyTagIamMember(ctx, \"member\", \u0026datacatalog.PolicyTagIamMemberArgs{\n\t\t\tPolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamMember;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamMemberArgs;\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 member = new PolicyTagIamMember(\"member\", PolicyTagIamMemberArgs.builder() \n .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:datacatalog:PolicyTagIamMember\n properties:\n policyTag: ${google_data_catalog_policy_tag.basic_policy_tag.name}\n role: roles/viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamBinding:PolicyTagIamBinding editor \"{{policy_tag}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamBinding:PolicyTagIamBinding editor \"{{policy_tag}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamBinding:PolicyTagIamBinding editor {{policy_tag}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamBinding:PolicyTagIamBinding editor \"{{policy_tag}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamBinding:PolicyTagIamBinding editor \"{{policy_tag}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamBinding:PolicyTagIamBinding editor {{policy_tag}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:datacatalog/PolicyTagIamBindingCondition:PolicyTagIamBindingCondition" @@ -150765,7 +152237,7 @@ } }, "gcp:datacatalog/policyTagIamMember:PolicyTagIamMember": { - "description": "Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case:\n\n* `gcp.datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached.\n* `gcp.datacatalog.PolicyTagIamBinding`: 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 policytag are preserved.\n* `gcp.datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved.\n\n\u003e **Note:** `gcp.datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.PolicyTagIamBinding` and `gcp.datacatalog.PolicyTagIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_policy\n\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.datacatalog.PolicyTagIamPolicy(\"policy\", {\n policyTag: google_data_catalog_policy_tag.basic_policy_tag.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.datacatalog.PolicyTagIamPolicy(\"policy\",\n policy_tag=google_data_catalog_policy_tag[\"basic_policy_tag\"][\"name\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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.DataCatalog.PolicyTagIamPolicy(\"policy\", new()\n {\n PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 = datacatalog.NewPolicyTagIamPolicy(ctx, \"policy\", \u0026datacatalog.PolicyTagIamPolicyArgs{\n\t\t\tPolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datacatalog.PolicyTagIamPolicy;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamPolicyArgs;\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 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 PolicyTagIamPolicy(\"policy\", PolicyTagIamPolicyArgs.builder() \n .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:datacatalog:PolicyTagIamPolicy\n properties:\n policyTag: ${google_data_catalog_policy_tag.basic_policy_tag.name}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\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\n## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.datacatalog.PolicyTagIamBinding(\"binding\", {\n policyTag: google_data_catalog_policy_tag.basic_policy_tag.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.datacatalog.PolicyTagIamBinding(\"binding\",\n policy_tag=google_data_catalog_policy_tag[\"basic_policy_tag\"][\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.DataCatalog.PolicyTagIamBinding(\"binding\", new()\n {\n PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewPolicyTagIamBinding(ctx, \"binding\", \u0026datacatalog.PolicyTagIamBindingArgs{\n\t\t\tPolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamBinding;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamBindingArgs;\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 binding = new PolicyTagIamBinding(\"binding\", PolicyTagIamBindingArgs.builder() \n .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:datacatalog:PolicyTagIamBinding\n properties:\n policyTag: ${google_data_catalog_policy_tag.basic_policy_tag.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.datacatalog.PolicyTagIamMember(\"member\", {\n policyTag: google_data_catalog_policy_tag.basic_policy_tag.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.datacatalog.PolicyTagIamMember(\"member\",\n policy_tag=google_data_catalog_policy_tag[\"basic_policy_tag\"][\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.DataCatalog.PolicyTagIamMember(\"member\", new()\n {\n PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewPolicyTagIamMember(ctx, \"member\", \u0026datacatalog.PolicyTagIamMemberArgs{\n\t\t\tPolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamMember;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamMemberArgs;\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 member = new PolicyTagIamMember(\"member\", PolicyTagIamMemberArgs.builder() \n .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:datacatalog:PolicyTagIamMember\n properties:\n policyTag: ${google_data_catalog_policy_tag.basic_policy_tag.name}\n role: roles/viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamMember:PolicyTagIamMember editor \"{{policy_tag}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamMember:PolicyTagIamMember editor \"{{policy_tag}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamMember:PolicyTagIamMember editor {{policy_tag}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamMember:PolicyTagIamMember editor \"{{policy_tag}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamMember:PolicyTagIamMember editor \"{{policy_tag}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamMember:PolicyTagIamMember editor {{policy_tag}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:datacatalog/PolicyTagIamMemberCondition:PolicyTagIamMemberCondition" @@ -150847,7 +152319,7 @@ } }, "gcp:datacatalog/policyTagIamPolicy:PolicyTagIamPolicy": { - "description": "Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case:\n\n* `gcp.datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached.\n* `gcp.datacatalog.PolicyTagIamBinding`: 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 policytag are preserved.\n* `gcp.datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved.\n\n\u003e **Note:** `gcp.datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.PolicyTagIamBinding` and `gcp.datacatalog.PolicyTagIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_policy\n\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.datacatalog.PolicyTagIamPolicy(\"policy\", {\n policyTag: google_data_catalog_policy_tag.basic_policy_tag.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.datacatalog.PolicyTagIamPolicy(\"policy\",\n policy_tag=google_data_catalog_policy_tag[\"basic_policy_tag\"][\"name\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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.DataCatalog.PolicyTagIamPolicy(\"policy\", new()\n {\n PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 = datacatalog.NewPolicyTagIamPolicy(ctx, \"policy\", \u0026datacatalog.PolicyTagIamPolicyArgs{\n\t\t\tPolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datacatalog.PolicyTagIamPolicy;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamPolicyArgs;\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 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 PolicyTagIamPolicy(\"policy\", PolicyTagIamPolicyArgs.builder() \n .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:datacatalog:PolicyTagIamPolicy\n properties:\n policyTag: ${google_data_catalog_policy_tag.basic_policy_tag.name}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\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\n## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.datacatalog.PolicyTagIamBinding(\"binding\", {\n policyTag: google_data_catalog_policy_tag.basic_policy_tag.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.datacatalog.PolicyTagIamBinding(\"binding\",\n policy_tag=google_data_catalog_policy_tag[\"basic_policy_tag\"][\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.DataCatalog.PolicyTagIamBinding(\"binding\", new()\n {\n PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewPolicyTagIamBinding(ctx, \"binding\", \u0026datacatalog.PolicyTagIamBindingArgs{\n\t\t\tPolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamBinding;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamBindingArgs;\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 binding = new PolicyTagIamBinding(\"binding\", PolicyTagIamBindingArgs.builder() \n .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:datacatalog:PolicyTagIamBinding\n properties:\n policyTag: ${google_data_catalog_policy_tag.basic_policy_tag.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.datacatalog.PolicyTagIamMember(\"member\", {\n policyTag: google_data_catalog_policy_tag.basic_policy_tag.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.datacatalog.PolicyTagIamMember(\"member\",\n policy_tag=google_data_catalog_policy_tag[\"basic_policy_tag\"][\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.DataCatalog.PolicyTagIamMember(\"member\", new()\n {\n PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewPolicyTagIamMember(ctx, \"member\", \u0026datacatalog.PolicyTagIamMemberArgs{\n\t\t\tPolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamMember;\nimport com.pulumi.gcp.datacatalog.PolicyTagIamMemberArgs;\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 member = new PolicyTagIamMember(\"member\", PolicyTagIamMemberArgs.builder() \n .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:datacatalog:PolicyTagIamMember\n properties:\n policyTag: ${google_data_catalog_policy_tag.basic_policy_tag.name}\n role: roles/viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamPolicy:PolicyTagIamPolicy editor \"{{policy_tag}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamPolicy:PolicyTagIamPolicy editor \"{{policy_tag}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamPolicy:PolicyTagIamPolicy editor {{policy_tag}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamPolicy:PolicyTagIamPolicy editor \"{{policy_tag}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamPolicy:PolicyTagIamPolicy editor \"{{policy_tag}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/policyTagIamPolicy:PolicyTagIamPolicy editor {{policy_tag}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "etag": { "type": "string", @@ -151430,7 +152902,7 @@ } }, "gcp:datacatalog/taxonomy:Taxonomy": { - "description": "A collection of policy tags that classify data along a common axis.\n\nTo get more information about Taxonomy, see:\n\n* [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/data-catalog/docs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Catalog Taxonomy Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicTaxonomy = new gcp.datacatalog.Taxonomy(\"basicTaxonomy\", {\n region: \"us\",\n displayName: \"my_display_name\",\n description: \"A collection of policy tags\",\n activatedPolicyTypes: [\"FINE_GRAINED_ACCESS_CONTROL\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_taxonomy = gcp.datacatalog.Taxonomy(\"basicTaxonomy\",\n region=\"us\",\n display_name=\"my_display_name\",\n description=\"A collection of policy tags\",\n activated_policy_types=[\"FINE_GRAINED_ACCESS_CONTROL\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicTaxonomy = new Gcp.DataCatalog.Taxonomy(\"basicTaxonomy\", new()\n {\n Region = \"us\",\n DisplayName = \"my_display_name\",\n Description = \"A collection of policy tags\",\n ActivatedPolicyTypes = new[]\n {\n \"FINE_GRAINED_ACCESS_CONTROL\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewTaxonomy(ctx, \"basicTaxonomy\", \u0026datacatalog.TaxonomyArgs{\n\t\t\tRegion: pulumi.String(\"us\"),\n\t\t\tDisplayName: pulumi.String(\"my_display_name\"),\n\t\t\tDescription: pulumi.String(\"A collection of policy tags\"),\n\t\t\tActivatedPolicyTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"FINE_GRAINED_ACCESS_CONTROL\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.Taxonomy;\nimport com.pulumi.gcp.datacatalog.TaxonomyArgs;\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 basicTaxonomy = new Taxonomy(\"basicTaxonomy\", TaxonomyArgs.builder() \n .region(\"us\")\n .displayName(\"my_display_name\")\n .description(\"A collection of policy tags\")\n .activatedPolicyTypes(\"FINE_GRAINED_ACCESS_CONTROL\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicTaxonomy:\n type: gcp:datacatalog:Taxonomy\n properties:\n region: us\n displayName: my_display_name\n description: A collection of policy tags\n activatedPolicyTypes:\n - FINE_GRAINED_ACCESS_CONTROL\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nTaxonomy can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomy:Taxonomy default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Catalog Taxonomy Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicTaxonomy = new gcp.datacatalog.Taxonomy(\"basicTaxonomy\", {\n region: \"us\",\n displayName: \"my_display_name\",\n description: \"A collection of policy tags\",\n activatedPolicyTypes: [\"FINE_GRAINED_ACCESS_CONTROL\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_taxonomy = gcp.datacatalog.Taxonomy(\"basicTaxonomy\",\n region=\"us\",\n display_name=\"my_display_name\",\n description=\"A collection of policy tags\",\n activated_policy_types=[\"FINE_GRAINED_ACCESS_CONTROL\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicTaxonomy = new Gcp.DataCatalog.Taxonomy(\"basicTaxonomy\", new()\n {\n Region = \"us\",\n DisplayName = \"my_display_name\",\n Description = \"A collection of policy tags\",\n ActivatedPolicyTypes = new[]\n {\n \"FINE_GRAINED_ACCESS_CONTROL\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewTaxonomy(ctx, \"basicTaxonomy\", \u0026datacatalog.TaxonomyArgs{\n\t\t\tRegion: pulumi.String(\"us\"),\n\t\t\tDisplayName: pulumi.String(\"my_display_name\"),\n\t\t\tDescription: pulumi.String(\"A collection of policy tags\"),\n\t\t\tActivatedPolicyTypes: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"FINE_GRAINED_ACCESS_CONTROL\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.Taxonomy;\nimport com.pulumi.gcp.datacatalog.TaxonomyArgs;\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 basicTaxonomy = new Taxonomy(\"basicTaxonomy\", TaxonomyArgs.builder() \n .region(\"us\")\n .displayName(\"my_display_name\")\n .description(\"A collection of policy tags\")\n .activatedPolicyTypes(\"FINE_GRAINED_ACCESS_CONTROL\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicTaxonomy:\n type: gcp:datacatalog:Taxonomy\n properties:\n region: us\n displayName: my_display_name\n description: A collection of policy tags\n activatedPolicyTypes:\n - FINE_GRAINED_ACCESS_CONTROL\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nTaxonomy can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomy:Taxonomy default {{name}}\n```\n\n ", "properties": { "activatedPolicyTypes": { "type": "array", @@ -151533,7 +153005,7 @@ } }, "gcp:datacatalog/taxonomyIamBinding:TaxonomyIamBinding": { - "description": "Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case:\n\n* `gcp.datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached.\n* `gcp.datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved.\n* `gcp.datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved.\n\n\u003e **Note:** `gcp.datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.TaxonomyIamBinding` and `gcp.datacatalog.TaxonomyIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_data\\_catalog\\_taxonomy\\_iam\\_policy\n\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.datacatalog.TaxonomyIamPolicy(\"policy\", {\n taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.datacatalog.TaxonomyIamPolicy(\"policy\",\n taxonomy=google_data_catalog_taxonomy[\"basic_taxonomy\"][\"name\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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.DataCatalog.TaxonomyIamPolicy(\"policy\", new()\n {\n Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 = datacatalog.NewTaxonomyIamPolicy(ctx, \"policy\", \u0026datacatalog.TaxonomyIamPolicyArgs{\n\t\t\tTaxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datacatalog.TaxonomyIamPolicy;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamPolicyArgs;\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 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 TaxonomyIamPolicy(\"policy\", TaxonomyIamPolicyArgs.builder() \n .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:datacatalog:TaxonomyIamPolicy\n properties:\n taxonomy: ${google_data_catalog_taxonomy.basic_taxonomy.name}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\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\n## google\\_data\\_catalog\\_taxonomy\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.datacatalog.TaxonomyIamBinding(\"binding\", {\n taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.datacatalog.TaxonomyIamBinding(\"binding\",\n taxonomy=google_data_catalog_taxonomy[\"basic_taxonomy\"][\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.DataCatalog.TaxonomyIamBinding(\"binding\", new()\n {\n Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewTaxonomyIamBinding(ctx, \"binding\", \u0026datacatalog.TaxonomyIamBindingArgs{\n\t\t\tTaxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamBinding;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamBindingArgs;\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 binding = new TaxonomyIamBinding(\"binding\", TaxonomyIamBindingArgs.builder() \n .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:datacatalog:TaxonomyIamBinding\n properties:\n taxonomy: ${google_data_catalog_taxonomy.basic_taxonomy.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_data\\_catalog\\_taxonomy\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.datacatalog.TaxonomyIamMember(\"member\", {\n taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.datacatalog.TaxonomyIamMember(\"member\",\n taxonomy=google_data_catalog_taxonomy[\"basic_taxonomy\"][\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.DataCatalog.TaxonomyIamMember(\"member\", new()\n {\n Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewTaxonomyIamMember(ctx, \"member\", \u0026datacatalog.TaxonomyIamMemberArgs{\n\t\t\tTaxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamMember;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamMemberArgs;\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 member = new TaxonomyIamMember(\"member\", TaxonomyIamMemberArgs.builder() \n .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:datacatalog:TaxonomyIamMember\n properties:\n taxonomy: ${google_data_catalog_taxonomy.basic_taxonomy.name}\n role: roles/viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamBinding:TaxonomyIamBinding editor \"projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamBinding:TaxonomyIamBinding editor \"projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamBinding:TaxonomyIamBinding editor projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamBinding:TaxonomyIamBinding editor \"projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamBinding:TaxonomyIamBinding editor \"projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamBinding:TaxonomyIamBinding editor projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:datacatalog/TaxonomyIamBindingCondition:TaxonomyIamBindingCondition" @@ -151649,7 +153121,7 @@ } }, "gcp:datacatalog/taxonomyIamMember:TaxonomyIamMember": { - "description": "Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case:\n\n* `gcp.datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached.\n* `gcp.datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved.\n* `gcp.datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved.\n\n\u003e **Note:** `gcp.datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.TaxonomyIamBinding` and `gcp.datacatalog.TaxonomyIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_data\\_catalog\\_taxonomy\\_iam\\_policy\n\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.datacatalog.TaxonomyIamPolicy(\"policy\", {\n taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.datacatalog.TaxonomyIamPolicy(\"policy\",\n taxonomy=google_data_catalog_taxonomy[\"basic_taxonomy\"][\"name\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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.DataCatalog.TaxonomyIamPolicy(\"policy\", new()\n {\n Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 = datacatalog.NewTaxonomyIamPolicy(ctx, \"policy\", \u0026datacatalog.TaxonomyIamPolicyArgs{\n\t\t\tTaxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datacatalog.TaxonomyIamPolicy;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamPolicyArgs;\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 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 TaxonomyIamPolicy(\"policy\", TaxonomyIamPolicyArgs.builder() \n .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:datacatalog:TaxonomyIamPolicy\n properties:\n taxonomy: ${google_data_catalog_taxonomy.basic_taxonomy.name}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\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\n## google\\_data\\_catalog\\_taxonomy\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.datacatalog.TaxonomyIamBinding(\"binding\", {\n taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.datacatalog.TaxonomyIamBinding(\"binding\",\n taxonomy=google_data_catalog_taxonomy[\"basic_taxonomy\"][\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.DataCatalog.TaxonomyIamBinding(\"binding\", new()\n {\n Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewTaxonomyIamBinding(ctx, \"binding\", \u0026datacatalog.TaxonomyIamBindingArgs{\n\t\t\tTaxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamBinding;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamBindingArgs;\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 binding = new TaxonomyIamBinding(\"binding\", TaxonomyIamBindingArgs.builder() \n .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:datacatalog:TaxonomyIamBinding\n properties:\n taxonomy: ${google_data_catalog_taxonomy.basic_taxonomy.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_data\\_catalog\\_taxonomy\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.datacatalog.TaxonomyIamMember(\"member\", {\n taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.datacatalog.TaxonomyIamMember(\"member\",\n taxonomy=google_data_catalog_taxonomy[\"basic_taxonomy\"][\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.DataCatalog.TaxonomyIamMember(\"member\", new()\n {\n Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewTaxonomyIamMember(ctx, \"member\", \u0026datacatalog.TaxonomyIamMemberArgs{\n\t\t\tTaxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamMember;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamMemberArgs;\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 member = new TaxonomyIamMember(\"member\", TaxonomyIamMemberArgs.builder() \n .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:datacatalog:TaxonomyIamMember\n properties:\n taxonomy: ${google_data_catalog_taxonomy.basic_taxonomy.name}\n role: roles/viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamMember:TaxonomyIamMember editor \"projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamMember:TaxonomyIamMember editor \"projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamMember:TaxonomyIamMember editor projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamMember:TaxonomyIamMember editor \"projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamMember:TaxonomyIamMember editor \"projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamMember:TaxonomyIamMember editor projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:datacatalog/TaxonomyIamMemberCondition:TaxonomyIamMemberCondition" @@ -151758,7 +153230,7 @@ } }, "gcp:datacatalog/taxonomyIamPolicy:TaxonomyIamPolicy": { - "description": "Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case:\n\n* `gcp.datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached.\n* `gcp.datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved.\n* `gcp.datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved.\n\n\u003e **Note:** `gcp.datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.TaxonomyIamBinding` and `gcp.datacatalog.TaxonomyIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_data\\_catalog\\_taxonomy\\_iam\\_policy\n\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.datacatalog.TaxonomyIamPolicy(\"policy\", {\n taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name,\n policyData: admin.then(admin =\u003e admin.policyData),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.datacatalog.TaxonomyIamPolicy(\"policy\",\n taxonomy=google_data_catalog_taxonomy[\"basic_taxonomy\"][\"name\"],\n policy_data=admin.policy_data,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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.DataCatalog.TaxonomyIamPolicy(\"policy\", new()\n {\n Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name,\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 = datacatalog.NewTaxonomyIamPolicy(ctx, \"policy\", \u0026datacatalog.TaxonomyIamPolicyArgs{\n\t\t\tTaxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name),\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datacatalog.TaxonomyIamPolicy;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamPolicyArgs;\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 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 TaxonomyIamPolicy(\"policy\", TaxonomyIamPolicyArgs.builder() \n .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:datacatalog:TaxonomyIamPolicy\n properties:\n taxonomy: ${google_data_catalog_taxonomy.basic_taxonomy.name}\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\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\n## google\\_data\\_catalog\\_taxonomy\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.datacatalog.TaxonomyIamBinding(\"binding\", {\n taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name,\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.datacatalog.TaxonomyIamBinding(\"binding\",\n taxonomy=google_data_catalog_taxonomy[\"basic_taxonomy\"][\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.DataCatalog.TaxonomyIamBinding(\"binding\", new()\n {\n Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name,\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewTaxonomyIamBinding(ctx, \"binding\", \u0026datacatalog.TaxonomyIamBindingArgs{\n\t\t\tTaxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamBinding;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamBindingArgs;\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 binding = new TaxonomyIamBinding(\"binding\", TaxonomyIamBindingArgs.builder() \n .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name())\n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:datacatalog:TaxonomyIamBinding\n properties:\n taxonomy: ${google_data_catalog_taxonomy.basic_taxonomy.name}\n role: roles/viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_data\\_catalog\\_taxonomy\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.datacatalog.TaxonomyIamMember(\"member\", {\n taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name,\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.datacatalog.TaxonomyIamMember(\"member\",\n taxonomy=google_data_catalog_taxonomy[\"basic_taxonomy\"][\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.DataCatalog.TaxonomyIamMember(\"member\", new()\n {\n Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name,\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datacatalog.NewTaxonomyIamMember(ctx, \"member\", \u0026datacatalog.TaxonomyIamMemberArgs{\n\t\t\tTaxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name),\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamMember;\nimport com.pulumi.gcp.datacatalog.TaxonomyIamMemberArgs;\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 member = new TaxonomyIamMember(\"member\", TaxonomyIamMemberArgs.builder() \n .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name())\n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:datacatalog:TaxonomyIamMember\n properties:\n taxonomy: ${google_data_catalog_taxonomy.basic_taxonomy.name}\n role: roles/viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamPolicy:TaxonomyIamPolicy editor \"projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamPolicy:TaxonomyIamPolicy editor \"projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamPolicy:TaxonomyIamPolicy editor projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamPolicy:TaxonomyIamPolicy editor \"projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamPolicy:TaxonomyIamPolicy editor \"projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:datacatalog/taxonomyIamPolicy:TaxonomyIamPolicy editor projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "etag": { "type": "string", @@ -151856,15 +153328,14 @@ "additionalProperties": { "$ref": "pulumi.json#/Any" }, - "description": "User labels to be specified for the job. Keys and values\nshould follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions)\npage. **Note**: This field is marked as deprecated as the API does not currently\nsupport adding labels.\n**NOTE**: Google-provided Dataflow templates often provide default labels\nthat begin with `goog-dataflow-provided`. Unless explicitly set in config, these\nlabels will be ignored to prevent diffs on re-apply.\n" + "description": "User labels to be specified for the job. Keys and values\nshould follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions)\npage.\n**NOTE**: Google-provided Dataflow templates often provide default labels\nthat begin with `goog-dataflow-provided`. Unless explicitly set in config, these\nlabels will be ignored to prevent diffs on re-apply.\n" }, "name": { "type": "string", "description": "A unique name for the resource, required by Dataflow.\n" }, "onDelete": { - "type": "string", - "description": "One of \"drain\" or \"cancel\". Specifies behavior of\ndeletion during `pulumi destroy`. See above note.\n" + "type": "string" }, "parameters": { "type": "object", @@ -151908,7 +153379,7 @@ "additionalProperties": { "$ref": "pulumi.json#/Any" }, - "description": "User labels to be specified for the job. Keys and values\nshould follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions)\npage. **Note**: This field is marked as deprecated as the API does not currently\nsupport adding labels.\n**NOTE**: Google-provided Dataflow templates often provide default labels\nthat begin with `goog-dataflow-provided`. Unless explicitly set in config, these\nlabels will be ignored to prevent diffs on re-apply.\n" + "description": "User labels to be specified for the job. Keys and values\nshould follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions)\npage.\n**NOTE**: Google-provided Dataflow templates often provide default labels\nthat begin with `goog-dataflow-provided`. Unless explicitly set in config, these\nlabels will be ignored to prevent diffs on re-apply.\n" }, "name": { "type": "string", @@ -151916,8 +153387,7 @@ "willReplaceOnChanges": true }, "onDelete": { - "type": "string", - "description": "One of \"drain\" or \"cancel\". Specifies behavior of\ndeletion during `pulumi destroy`. See above note.\n" + "type": "string" }, "parameters": { "type": "object", @@ -151960,7 +153430,7 @@ "additionalProperties": { "$ref": "pulumi.json#/Any" }, - "description": "User labels to be specified for the job. Keys and values\nshould follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions)\npage. **Note**: This field is marked as deprecated as the API does not currently\nsupport adding labels.\n**NOTE**: Google-provided Dataflow templates often provide default labels\nthat begin with `goog-dataflow-provided`. Unless explicitly set in config, these\nlabels will be ignored to prevent diffs on re-apply.\n" + "description": "User labels to be specified for the job. Keys and values\nshould follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions)\npage.\n**NOTE**: Google-provided Dataflow templates often provide default labels\nthat begin with `goog-dataflow-provided`. Unless explicitly set in config, these\nlabels will be ignored to prevent diffs on re-apply.\n" }, "name": { "type": "string", @@ -151968,8 +153438,7 @@ "willReplaceOnChanges": true }, "onDelete": { - "type": "string", - "description": "One of \"drain\" or \"cancel\". Specifies behavior of\ndeletion during `pulumi destroy`. See above note.\n" + "type": "string" }, "parameters": { "type": "object", @@ -152051,7 +153520,7 @@ }, "onDelete": { "type": "string", - "description": "One of \"drain\" or \"cancel\". Specifies behavior of deletion during `pulumi destroy`. See above note.\n" + "description": "One of \"drain\" or \"cancel\". Specifies behavior of deletion during terraform destroy.\n" }, "parameters": { "type": "object", @@ -152074,7 +153543,7 @@ }, "skipWaitOnJobTermination": { "type": "boolean", - "description": "If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note.\n" + "description": "If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from\nterraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are\ndifferent, e.g. by embedding a release ID or by using a random_id.\n" }, "state": { "type": "string", @@ -152165,7 +153634,7 @@ }, "onDelete": { "type": "string", - "description": "One of \"drain\" or \"cancel\". Specifies behavior of deletion during `pulumi destroy`. See above note.\n" + "description": "One of \"drain\" or \"cancel\". Specifies behavior of deletion during terraform destroy.\n" }, "parameters": { "type": "object", @@ -152190,7 +153659,7 @@ }, "skipWaitOnJobTermination": { "type": "boolean", - "description": "If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note.\n" + "description": "If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from\nterraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are\ndifferent, e.g. by embedding a release ID or by using a random_id.\n" }, "subnetwork": { "type": "string", @@ -152274,7 +153743,7 @@ }, "onDelete": { "type": "string", - "description": "One of \"drain\" or \"cancel\". Specifies behavior of deletion during `pulumi destroy`. See above note.\n" + "description": "One of \"drain\" or \"cancel\". Specifies behavior of deletion during terraform destroy.\n" }, "parameters": { "type": "object", @@ -152299,7 +153768,7 @@ }, "skipWaitOnJobTermination": { "type": "boolean", - "description": "If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note.\n" + "description": "If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from\nterraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are\ndifferent, e.g. by embedding a release ID or by using a random_id.\n" }, "state": { "type": "string", @@ -152409,7 +153878,7 @@ } }, "gcp:datafusion/instance:Instance": { - "description": "Represents a Data Fusion instance.\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/data-fusion/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Fusion Instance Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicInstance = new gcp.datafusion.Instance(\"basicInstance\", {\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"BASIC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_instance = gcp.datafusion.Instance(\"basicInstance\",\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"BASIC\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicInstance = new Gcp.DataFusion.Instance(\"basicInstance\", new()\n {\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"BASIC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"basicInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicInstance = new Instance(\"basicInstance\", InstanceArgs.builder() \n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"BASIC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicInstance:\n type: gcp:datafusion:Instance\n properties:\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: BASIC\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Full\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.appengine.getDefaultServiceAccount({});\nconst network = new gcp.compute.Network(\"network\", {});\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"privateIpAlloc\", {\n addressType: \"INTERNAL\",\n purpose: \"VPC_PEERING\",\n prefixLength: 22,\n network: network.id,\n});\nconst extendedInstance = new gcp.datafusion.Instance(\"extendedInstance\", {\n description: \"My Data Fusion instance\",\n displayName: \"My Data Fusion instance\",\n region: \"us-central1\",\n type: \"BASIC\",\n enableStackdriverLogging: true,\n enableStackdriverMonitoring: true,\n privateInstance: true,\n version: \"6.6.0\",\n dataprocServiceAccount: _default.then(_default =\u003e _default.email),\n labels: {\n example_key: \"example_value\",\n },\n networkConfig: {\n network: \"default\",\n ipAllocation: pulumi.all([privateIpAlloc.address, privateIpAlloc.prefixLength]).apply(([address, prefixLength]) =\u003e `${address}/${prefixLength}`),\n },\n options: {\n prober_test_run: \"true\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.appengine.get_default_service_account()\nnetwork = gcp.compute.Network(\"network\")\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"privateIpAlloc\",\n address_type=\"INTERNAL\",\n purpose=\"VPC_PEERING\",\n prefix_length=22,\n network=network.id)\nextended_instance = gcp.datafusion.Instance(\"extendedInstance\",\n description=\"My Data Fusion instance\",\n display_name=\"My Data Fusion instance\",\n region=\"us-central1\",\n type=\"BASIC\",\n enable_stackdriver_logging=True,\n enable_stackdriver_monitoring=True,\n private_instance=True,\n version=\"6.6.0\",\n dataproc_service_account=default.email,\n labels={\n \"example_key\": \"example_value\",\n },\n network_config=gcp.datafusion.InstanceNetworkConfigArgs(\n network=\"default\",\n ip_allocation=pulumi.Output.all(private_ip_alloc.address, private_ip_alloc.prefix_length).apply(lambda address, prefix_length: f\"{address}/{prefix_length}\"),\n ),\n options={\n \"prober_test_run\": \"true\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.AppEngine.GetDefaultServiceAccount.Invoke();\n\n var network = new Gcp.Compute.Network(\"network\");\n\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"privateIpAlloc\", new()\n {\n AddressType = \"INTERNAL\",\n Purpose = \"VPC_PEERING\",\n PrefixLength = 22,\n Network = network.Id,\n });\n\n var extendedInstance = new Gcp.DataFusion.Instance(\"extendedInstance\", new()\n {\n Description = \"My Data Fusion instance\",\n DisplayName = \"My Data Fusion instance\",\n Region = \"us-central1\",\n Type = \"BASIC\",\n EnableStackdriverLogging = true,\n EnableStackdriverMonitoring = true,\n PrivateInstance = true,\n Version = \"6.6.0\",\n DataprocServiceAccount = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Email)),\n Labels = \n {\n { \"example_key\", \"example_value\" },\n },\n NetworkConfig = new Gcp.DataFusion.Inputs.InstanceNetworkConfigArgs\n {\n Network = \"default\",\n IpAllocation = Output.Tuple(privateIpAlloc.Address, privateIpAlloc.PrefixLength).Apply(values =\u003e\n {\n var address = values.Item1;\n var prefixLength = values.Item2;\n return $\"{address}/{prefixLength}\";\n }),\n },\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/appengine\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := appengine.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"privateIpAlloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tPrefixLength: pulumi.Int(22),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"extendedInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tDescription: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tDisplayName: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tEnableStackdriverLogging: pulumi.Bool(true),\n\t\t\tEnableStackdriverMonitoring: pulumi.Bool(true),\n\t\t\tPrivateInstance: pulumi.Bool(true),\n\t\t\tVersion: pulumi.String(\"6.6.0\"),\n\t\t\tDataprocServiceAccount: *pulumi.String(_default.Email),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"example_key\": pulumi.String(\"example_value\"),\n\t\t\t},\n\t\t\tNetworkConfig: \u0026datafusion.InstanceNetworkConfigArgs{\n\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\tIpAllocation: pulumi.All(privateIpAlloc.Address, privateIpAlloc.PrefixLength).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\taddress := _args[0].(string)\n\t\t\t\t\tprefixLength := _args[1].(*int)\n\t\t\t\t\treturn fmt.Sprintf(\"%v/%v\", address, prefixLength), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"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.appengine.AppengineFunctions;\nimport com.pulumi.gcp.appengine.inputs.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceNetworkConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = AppengineFunctions.getDefaultServiceAccount();\n\n var network = new Network(\"network\");\n\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder() \n .addressType(\"INTERNAL\")\n .purpose(\"VPC_PEERING\")\n .prefixLength(22)\n .network(network.id())\n .build());\n\n var extendedInstance = new Instance(\"extendedInstance\", InstanceArgs.builder() \n .description(\"My Data Fusion instance\")\n .displayName(\"My Data Fusion instance\")\n .region(\"us-central1\")\n .type(\"BASIC\")\n .enableStackdriverLogging(true)\n .enableStackdriverMonitoring(true)\n .privateInstance(true)\n .version(\"6.6.0\")\n .dataprocServiceAccount(default_.email())\n .labels(Map.of(\"example_key\", \"example_value\"))\n .networkConfig(InstanceNetworkConfigArgs.builder()\n .network(\"default\")\n .ipAllocation(Output.tuple(privateIpAlloc.address(), privateIpAlloc.prefixLength()).applyValue(values -\u003e {\n var address = values.t1;\n var prefixLength = values.t2;\n return String.format(\"%s/%s\", address,prefixLength);\n }))\n .build())\n .options(Map.of(\"prober_test_run\", \"true\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n extendedInstance:\n type: gcp:datafusion:Instance\n properties:\n description: My Data Fusion instance\n displayName: My Data Fusion instance\n region: us-central1\n type: BASIC\n enableStackdriverLogging: true\n enableStackdriverMonitoring: true\n privateInstance: true\n version: 6.6.0\n dataprocServiceAccount: ${default.email}\n labels:\n example_key: example_value\n networkConfig:\n network: default\n ipAllocation: ${privateIpAlloc.address}/${privateIpAlloc.prefixLength}\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n network:\n type: gcp:compute:Network\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n properties:\n addressType: INTERNAL\n purpose: VPC_PEERING\n prefixLength: 22\n network: ${network.id}\nvariables:\n default:\n fn::invoke:\n Function: gcp:appengine:getDefaultServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Cmek\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRing(\"keyRing\", {location: \"us-central1\"});\nconst cryptoKey = new gcp.kms.CryptoKey(\"cryptoKey\", {keyRing: keyRing.id});\nconst project = gcp.organizations.getProject({});\nconst cryptoKeyBinding = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", {\n cryptoKeyId: cryptoKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com`)],\n});\nconst cmek = new gcp.datafusion.Instance(\"cmek\", {\n region: \"us-central1\",\n type: \"BASIC\",\n cryptoKeyConfig: {\n keyReference: cryptoKey.id,\n },\n}, {\n dependsOn: [cryptoKeyBinding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRing(\"keyRing\", location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"cryptoKey\", key_ring=key_ring.id)\nproject = gcp.organizations.get_project()\ncrypto_key_binding = gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\",\n crypto_key_id=crypto_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[f\"serviceAccount:service-{project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\"])\ncmek = gcp.datafusion.Instance(\"cmek\",\n region=\"us-central1\",\n type=\"BASIC\",\n crypto_key_config=gcp.datafusion.InstanceCryptoKeyConfigArgs(\n key_reference=crypto_key.id,\n ),\n opts=pulumi.ResourceOptions(depends_on=[crypto_key_binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRing(\"keyRing\", new()\n {\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"cryptoKey\", new()\n {\n KeyRing = keyRing.Id,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cryptoKeyBinding = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", new()\n {\n CryptoKeyId = cryptoKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datafusion.iam.gserviceaccount.com\",\n },\n });\n\n var cmek = new Gcp.DataFusion.Instance(\"cmek\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n CryptoKeyConfig = new Gcp.DataFusion.Inputs.InstanceCryptoKeyConfigArgs\n {\n KeyReference = cryptoKey.Id,\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n cryptoKeyBinding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyRing, err := kms.NewKeyRing(ctx, \"keyRing\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"cryptoKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyBinding, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKeyBinding\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: cryptoKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datafusion.iam.gserviceaccount.com\", project.Number)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"cmek\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tCryptoKeyConfig: \u0026datafusion.InstanceCryptoKeyConfigArgs{\n\t\t\t\tKeyReference: cryptoKey.ID(),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyBinding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceCryptoKeyConfigArgs;\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 keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .keyRing(keyRing.id())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var cryptoKeyBinding = new CryptoKeyIAMBinding(\"cryptoKeyBinding\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(cryptoKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(String.format(\"serviceAccount:service-%s@gcp-sa-datafusion.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var cmek = new Instance(\"cmek\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .cryptoKeyConfig(InstanceCryptoKeyConfigArgs.builder()\n .keyReference(cryptoKey.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyBinding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cmek:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n cryptoKeyConfig:\n keyReference: ${cryptoKey.id}\n options:\n dependson:\n - ${cryptoKeyBinding}\n cryptoKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n cryptoKeyBinding:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${cryptoKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Enterprise\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst enterpriseInstance = new gcp.datafusion.Instance(\"enterpriseInstance\", {\n enableRbac: true,\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"ENTERPRISE\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nenterprise_instance = gcp.datafusion.Instance(\"enterpriseInstance\",\n enable_rbac=True,\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"ENTERPRISE\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var enterpriseInstance = new Gcp.DataFusion.Instance(\"enterpriseInstance\", new()\n {\n EnableRbac = true,\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"ENTERPRISE\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"enterpriseInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tEnableRbac: pulumi.Bool(true),\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"ENTERPRISE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var enterpriseInstance = new Instance(\"enterpriseInstance\", InstanceArgs.builder() \n .enableRbac(true)\n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"ENTERPRISE\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n enterpriseInstance:\n type: gcp:datafusion:Instance\n properties:\n enableRbac: true\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: ENTERPRISE\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Event\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst eventTopic = new gcp.pubsub.Topic(\"eventTopic\", {});\nconst eventInstance = new gcp.datafusion.Instance(\"eventInstance\", {\n region: \"us-central1\",\n type: \"BASIC\",\n version: \"6.7.0\",\n eventPublishConfig: {\n enabled: true,\n topic: eventTopic.id,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nevent_topic = gcp.pubsub.Topic(\"eventTopic\")\nevent_instance = gcp.datafusion.Instance(\"eventInstance\",\n region=\"us-central1\",\n type=\"BASIC\",\n version=\"6.7.0\",\n event_publish_config=gcp.datafusion.InstanceEventPublishConfigArgs(\n enabled=True,\n topic=event_topic.id,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var eventTopic = new Gcp.PubSub.Topic(\"eventTopic\");\n\n var eventInstance = new Gcp.DataFusion.Instance(\"eventInstance\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n Version = \"6.7.0\",\n EventPublishConfig = new Gcp.DataFusion.Inputs.InstanceEventPublishConfigArgs\n {\n Enabled = true,\n Topic = eventTopic.Id,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\teventTopic, err := pubsub.NewTopic(ctx, \"eventTopic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"eventInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tVersion: pulumi.String(\"6.7.0\"),\n\t\t\tEventPublishConfig: \u0026datafusion.InstanceEventPublishConfigArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tTopic: eventTopic.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceEventPublishConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var eventTopic = new Topic(\"eventTopic\");\n\n var eventInstance = new Instance(\"eventInstance\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .version(\"6.7.0\")\n .eventPublishConfig(InstanceEventPublishConfigArgs.builder()\n .enabled(true)\n .topic(eventTopic.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n eventInstance:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n version: 6.7.0\n eventPublishConfig:\n enabled: true\n topic: ${eventTopic.id}\n eventTopic:\n type: gcp:pubsub:Topic\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Zone\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst zone = new gcp.datafusion.Instance(\"zone\", {\n region: \"us-central1\",\n type: \"DEVELOPER\",\n zone: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nzone = gcp.datafusion.Instance(\"zone\",\n region=\"us-central1\",\n type=\"DEVELOPER\",\n zone=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var zone = new Gcp.DataFusion.Instance(\"zone\", new()\n {\n Region = \"us-central1\",\n Type = \"DEVELOPER\",\n Zone = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"zone\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"DEVELOPER\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var zone = new Instance(\"zone\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"DEVELOPER\")\n .zone(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n zone:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: DEVELOPER\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:datafusion/instance:Instance default projects/{{project}}/locations/{{region}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:datafusion/instance:Instance default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:datafusion/instance:Instance default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:datafusion/instance:Instance default {{name}}\n```\n\n ", + "description": "Represents a Data Fusion instance.\n\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/data-fusion/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Fusion Instance Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicInstance = new gcp.datafusion.Instance(\"basicInstance\", {\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"BASIC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_instance = gcp.datafusion.Instance(\"basicInstance\",\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"BASIC\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicInstance = new Gcp.DataFusion.Instance(\"basicInstance\", new()\n {\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"BASIC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"basicInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicInstance = new Instance(\"basicInstance\", InstanceArgs.builder() \n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"BASIC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicInstance:\n type: gcp:datafusion:Instance\n properties:\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: BASIC\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.appengine.getDefaultServiceAccount({});\nconst network = new gcp.compute.Network(\"network\", {});\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"privateIpAlloc\", {\n addressType: \"INTERNAL\",\n purpose: \"VPC_PEERING\",\n prefixLength: 22,\n network: network.id,\n});\nconst extendedInstance = new gcp.datafusion.Instance(\"extendedInstance\", {\n description: \"My Data Fusion instance\",\n displayName: \"My Data Fusion instance\",\n region: \"us-central1\",\n type: \"BASIC\",\n enableStackdriverLogging: true,\n enableStackdriverMonitoring: true,\n privateInstance: true,\n version: \"6.6.0\",\n dataprocServiceAccount: _default.then(_default =\u003e _default.email),\n labels: {\n example_key: \"example_value\",\n },\n networkConfig: {\n network: \"default\",\n ipAllocation: pulumi.all([privateIpAlloc.address, privateIpAlloc.prefixLength]).apply(([address, prefixLength]) =\u003e `${address}/${prefixLength}`),\n },\n options: {\n prober_test_run: \"true\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.appengine.get_default_service_account()\nnetwork = gcp.compute.Network(\"network\")\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"privateIpAlloc\",\n address_type=\"INTERNAL\",\n purpose=\"VPC_PEERING\",\n prefix_length=22,\n network=network.id)\nextended_instance = gcp.datafusion.Instance(\"extendedInstance\",\n description=\"My Data Fusion instance\",\n display_name=\"My Data Fusion instance\",\n region=\"us-central1\",\n type=\"BASIC\",\n enable_stackdriver_logging=True,\n enable_stackdriver_monitoring=True,\n private_instance=True,\n version=\"6.6.0\",\n dataproc_service_account=default.email,\n labels={\n \"example_key\": \"example_value\",\n },\n network_config=gcp.datafusion.InstanceNetworkConfigArgs(\n network=\"default\",\n ip_allocation=pulumi.Output.all(private_ip_alloc.address, private_ip_alloc.prefix_length).apply(lambda address, prefix_length: f\"{address}/{prefix_length}\"),\n ),\n options={\n \"prober_test_run\": \"true\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.AppEngine.GetDefaultServiceAccount.Invoke();\n\n var network = new Gcp.Compute.Network(\"network\");\n\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"privateIpAlloc\", new()\n {\n AddressType = \"INTERNAL\",\n Purpose = \"VPC_PEERING\",\n PrefixLength = 22,\n Network = network.Id,\n });\n\n var extendedInstance = new Gcp.DataFusion.Instance(\"extendedInstance\", new()\n {\n Description = \"My Data Fusion instance\",\n DisplayName = \"My Data Fusion instance\",\n Region = \"us-central1\",\n Type = \"BASIC\",\n EnableStackdriverLogging = true,\n EnableStackdriverMonitoring = true,\n PrivateInstance = true,\n Version = \"6.6.0\",\n DataprocServiceAccount = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Email)),\n Labels = \n {\n { \"example_key\", \"example_value\" },\n },\n NetworkConfig = new Gcp.DataFusion.Inputs.InstanceNetworkConfigArgs\n {\n Network = \"default\",\n IpAllocation = Output.Tuple(privateIpAlloc.Address, privateIpAlloc.PrefixLength).Apply(values =\u003e\n {\n var address = values.Item1;\n var prefixLength = values.Item2;\n return $\"{address}/{prefixLength}\";\n }),\n },\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/appengine\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := appengine.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"privateIpAlloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tPrefixLength: pulumi.Int(22),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"extendedInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tDescription: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tDisplayName: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tEnableStackdriverLogging: pulumi.Bool(true),\n\t\t\tEnableStackdriverMonitoring: pulumi.Bool(true),\n\t\t\tPrivateInstance: pulumi.Bool(true),\n\t\t\tVersion: pulumi.String(\"6.6.0\"),\n\t\t\tDataprocServiceAccount: *pulumi.String(_default.Email),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"example_key\": pulumi.String(\"example_value\"),\n\t\t\t},\n\t\t\tNetworkConfig: \u0026datafusion.InstanceNetworkConfigArgs{\n\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\tIpAllocation: pulumi.All(privateIpAlloc.Address, privateIpAlloc.PrefixLength).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\taddress := _args[0].(string)\n\t\t\t\t\tprefixLength := _args[1].(*int)\n\t\t\t\t\treturn fmt.Sprintf(\"%v/%v\", address, prefixLength), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"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.appengine.AppengineFunctions;\nimport com.pulumi.gcp.appengine.inputs.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceNetworkConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = AppengineFunctions.getDefaultServiceAccount();\n\n var network = new Network(\"network\");\n\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder() \n .addressType(\"INTERNAL\")\n .purpose(\"VPC_PEERING\")\n .prefixLength(22)\n .network(network.id())\n .build());\n\n var extendedInstance = new Instance(\"extendedInstance\", InstanceArgs.builder() \n .description(\"My Data Fusion instance\")\n .displayName(\"My Data Fusion instance\")\n .region(\"us-central1\")\n .type(\"BASIC\")\n .enableStackdriverLogging(true)\n .enableStackdriverMonitoring(true)\n .privateInstance(true)\n .version(\"6.6.0\")\n .dataprocServiceAccount(default_.email())\n .labels(Map.of(\"example_key\", \"example_value\"))\n .networkConfig(InstanceNetworkConfigArgs.builder()\n .network(\"default\")\n .ipAllocation(Output.tuple(privateIpAlloc.address(), privateIpAlloc.prefixLength()).applyValue(values -\u003e {\n var address = values.t1;\n var prefixLength = values.t2;\n return String.format(\"%s/%s\", address,prefixLength);\n }))\n .build())\n .options(Map.of(\"prober_test_run\", \"true\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n extendedInstance:\n type: gcp:datafusion:Instance\n properties:\n description: My Data Fusion instance\n displayName: My Data Fusion instance\n region: us-central1\n type: BASIC\n enableStackdriverLogging: true\n enableStackdriverMonitoring: true\n privateInstance: true\n version: 6.6.0\n dataprocServiceAccount: ${default.email}\n labels:\n example_key: example_value\n networkConfig:\n network: default\n ipAllocation: ${privateIpAlloc.address}/${privateIpAlloc.prefixLength}\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n network:\n type: gcp:compute:Network\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n properties:\n addressType: INTERNAL\n purpose: VPC_PEERING\n prefixLength: 22\n network: ${network.id}\nvariables:\n default:\n fn::invoke:\n Function: gcp:appengine:getDefaultServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Cmek\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRing(\"keyRing\", {location: \"us-central1\"});\nconst cryptoKey = new gcp.kms.CryptoKey(\"cryptoKey\", {keyRing: keyRing.id});\nconst project = gcp.organizations.getProject({});\nconst cryptoKeyBinding = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", {\n cryptoKeyId: cryptoKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com`)],\n});\nconst cmek = new gcp.datafusion.Instance(\"cmek\", {\n region: \"us-central1\",\n type: \"BASIC\",\n cryptoKeyConfig: {\n keyReference: cryptoKey.id,\n },\n}, {\n dependsOn: [cryptoKeyBinding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRing(\"keyRing\", location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"cryptoKey\", key_ring=key_ring.id)\nproject = gcp.organizations.get_project()\ncrypto_key_binding = gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\",\n crypto_key_id=crypto_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[f\"serviceAccount:service-{project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\"])\ncmek = gcp.datafusion.Instance(\"cmek\",\n region=\"us-central1\",\n type=\"BASIC\",\n crypto_key_config=gcp.datafusion.InstanceCryptoKeyConfigArgs(\n key_reference=crypto_key.id,\n ),\n opts=pulumi.ResourceOptions(depends_on=[crypto_key_binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRing(\"keyRing\", new()\n {\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"cryptoKey\", new()\n {\n KeyRing = keyRing.Id,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cryptoKeyBinding = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", new()\n {\n CryptoKeyId = cryptoKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datafusion.iam.gserviceaccount.com\",\n },\n });\n\n var cmek = new Gcp.DataFusion.Instance(\"cmek\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n CryptoKeyConfig = new Gcp.DataFusion.Inputs.InstanceCryptoKeyConfigArgs\n {\n KeyReference = cryptoKey.Id,\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n cryptoKeyBinding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyRing, err := kms.NewKeyRing(ctx, \"keyRing\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"cryptoKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyBinding, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKeyBinding\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: cryptoKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datafusion.iam.gserviceaccount.com\", project.Number)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"cmek\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tCryptoKeyConfig: \u0026datafusion.InstanceCryptoKeyConfigArgs{\n\t\t\t\tKeyReference: cryptoKey.ID(),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyBinding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceCryptoKeyConfigArgs;\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 keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .keyRing(keyRing.id())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var cryptoKeyBinding = new CryptoKeyIAMBinding(\"cryptoKeyBinding\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(cryptoKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(String.format(\"serviceAccount:service-%s@gcp-sa-datafusion.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var cmek = new Instance(\"cmek\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .cryptoKeyConfig(InstanceCryptoKeyConfigArgs.builder()\n .keyReference(cryptoKey.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyBinding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cmek:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n cryptoKeyConfig:\n keyReference: ${cryptoKey.id}\n options:\n dependson:\n - ${cryptoKeyBinding}\n cryptoKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n cryptoKeyBinding:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${cryptoKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Enterprise\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst enterpriseInstance = new gcp.datafusion.Instance(\"enterpriseInstance\", {\n enableRbac: true,\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"ENTERPRISE\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nenterprise_instance = gcp.datafusion.Instance(\"enterpriseInstance\",\n enable_rbac=True,\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"ENTERPRISE\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var enterpriseInstance = new Gcp.DataFusion.Instance(\"enterpriseInstance\", new()\n {\n EnableRbac = true,\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"ENTERPRISE\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"enterpriseInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tEnableRbac: pulumi.Bool(true),\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"ENTERPRISE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var enterpriseInstance = new Instance(\"enterpriseInstance\", InstanceArgs.builder() \n .enableRbac(true)\n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"ENTERPRISE\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n enterpriseInstance:\n type: gcp:datafusion:Instance\n properties:\n enableRbac: true\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: ENTERPRISE\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Event\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst eventTopic = new gcp.pubsub.Topic(\"eventTopic\", {});\nconst eventInstance = new gcp.datafusion.Instance(\"eventInstance\", {\n region: \"us-central1\",\n type: \"BASIC\",\n version: \"6.7.0\",\n eventPublishConfig: {\n enabled: true,\n topic: eventTopic.id,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nevent_topic = gcp.pubsub.Topic(\"eventTopic\")\nevent_instance = gcp.datafusion.Instance(\"eventInstance\",\n region=\"us-central1\",\n type=\"BASIC\",\n version=\"6.7.0\",\n event_publish_config=gcp.datafusion.InstanceEventPublishConfigArgs(\n enabled=True,\n topic=event_topic.id,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var eventTopic = new Gcp.PubSub.Topic(\"eventTopic\");\n\n var eventInstance = new Gcp.DataFusion.Instance(\"eventInstance\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n Version = \"6.7.0\",\n EventPublishConfig = new Gcp.DataFusion.Inputs.InstanceEventPublishConfigArgs\n {\n Enabled = true,\n Topic = eventTopic.Id,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\teventTopic, err := pubsub.NewTopic(ctx, \"eventTopic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"eventInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tVersion: pulumi.String(\"6.7.0\"),\n\t\t\tEventPublishConfig: \u0026datafusion.InstanceEventPublishConfigArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tTopic: eventTopic.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceEventPublishConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var eventTopic = new Topic(\"eventTopic\");\n\n var eventInstance = new Instance(\"eventInstance\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .version(\"6.7.0\")\n .eventPublishConfig(InstanceEventPublishConfigArgs.builder()\n .enabled(true)\n .topic(eventTopic.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n eventInstance:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n version: 6.7.0\n eventPublishConfig:\n enabled: true\n topic: ${eventTopic.id}\n eventTopic:\n type: gcp:pubsub:Topic\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Zone\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst zone = new gcp.datafusion.Instance(\"zone\", {\n region: \"us-central1\",\n type: \"DEVELOPER\",\n zone: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nzone = gcp.datafusion.Instance(\"zone\",\n region=\"us-central1\",\n type=\"DEVELOPER\",\n zone=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var zone = new Gcp.DataFusion.Instance(\"zone\", new()\n {\n Region = \"us-central1\",\n Type = \"DEVELOPER\",\n Zone = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"zone\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"DEVELOPER\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var zone = new Instance(\"zone\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"DEVELOPER\")\n .zone(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n zone:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: DEVELOPER\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:datafusion/instance:Instance default projects/{{project}}/locations/{{region}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:datafusion/instance:Instance default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:datafusion/instance:Instance default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:datafusion/instance:Instance default {{name}}\n```\n\n ", "properties": { "apiEndpoint": { "type": "string", @@ -152504,7 +153973,7 @@ }, "state": { "type": "string", - "description": "The current state of this Data Fusion instance.\n* CREATING: Instance is being created\n* RUNNING: Instance is running and ready for requests\n* FAILED: Instance creation failed\n* DELETING: Instance is being deleted\n* UPGRADING: Instance is being upgraded\n* RESTARTING: Instance is being restarted\n" + "description": "The current state of this Data Fusion instance.\n- CREATING: Instance is being created\n- RUNNING: Instance is running and ready for requests\n- FAILED: Instance creation failed\n- DELETING: Instance is being deleted\n- UPGRADING: Instance is being upgraded\n- RESTARTING: Instance is being restarted\n" }, "stateMessage": { "type": "string", @@ -152516,7 +153985,7 @@ }, "type": { "type": "string", - "description": "Represents the type of Data Fusion instance. Each type is configured with\nthe default settings for processing and memory.\n* BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines\nusing point and click UI. However, there are certain limitations, such as fewer number\nof concurrent pipelines, no support for streaming pipelines, etc.\n* ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features\navailable, such as support for streaming pipelines, higher number of concurrent pipelines, etc.\n* DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but\nwith restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration\npipelines at low cost.\nPossible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`.\n" + "description": "Represents the type of Data Fusion instance. Each type is configured with\nthe default settings for processing and memory.\n- BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines\nusing point and click UI. However, there are certain limitations, such as fewer number\nof concurrent pipelines, no support for streaming pipelines, etc.\n- ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features\navailable, such as support for streaming pipelines, higher number of concurrent pipelines, etc.\n- DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but\nwith restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration\npipelines at low cost.\nPossible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`.\n" }, "updateTime": { "type": "string", @@ -152628,7 +154097,7 @@ }, "type": { "type": "string", - "description": "Represents the type of Data Fusion instance. Each type is configured with\nthe default settings for processing and memory.\n* BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines\nusing point and click UI. However, there are certain limitations, such as fewer number\nof concurrent pipelines, no support for streaming pipelines, etc.\n* ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features\navailable, such as support for streaming pipelines, higher number of concurrent pipelines, etc.\n* DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but\nwith restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration\npipelines at low cost.\nPossible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`.\n", + "description": "Represents the type of Data Fusion instance. Each type is configured with\nthe default settings for processing and memory.\n- BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines\nusing point and click UI. However, there are certain limitations, such as fewer number\nof concurrent pipelines, no support for streaming pipelines, etc.\n- ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features\navailable, such as support for streaming pipelines, higher number of concurrent pipelines, etc.\n- DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but\nwith restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration\npipelines at low cost.\nPossible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`.\n", "willReplaceOnChanges": true }, "version": { @@ -152751,7 +154220,7 @@ }, "state": { "type": "string", - "description": "The current state of this Data Fusion instance.\n* CREATING: Instance is being created\n* RUNNING: Instance is running and ready for requests\n* FAILED: Instance creation failed\n* DELETING: Instance is being deleted\n* UPGRADING: Instance is being upgraded\n* RESTARTING: Instance is being restarted\n" + "description": "The current state of this Data Fusion instance.\n- CREATING: Instance is being created\n- RUNNING: Instance is running and ready for requests\n- FAILED: Instance creation failed\n- DELETING: Instance is being deleted\n- UPGRADING: Instance is being upgraded\n- RESTARTING: Instance is being restarted\n" }, "stateMessage": { "type": "string", @@ -152763,7 +154232,7 @@ }, "type": { "type": "string", - "description": "Represents the type of Data Fusion instance. Each type is configured with\nthe default settings for processing and memory.\n* BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines\nusing point and click UI. However, there are certain limitations, such as fewer number\nof concurrent pipelines, no support for streaming pipelines, etc.\n* ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features\navailable, such as support for streaming pipelines, higher number of concurrent pipelines, etc.\n* DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but\nwith restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration\npipelines at low cost.\nPossible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`.\n", + "description": "Represents the type of Data Fusion instance. Each type is configured with\nthe default settings for processing and memory.\n- BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines\nusing point and click UI. However, there are certain limitations, such as fewer number\nof concurrent pipelines, no support for streaming pipelines, etc.\n- ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features\navailable, such as support for streaming pipelines, higher number of concurrent pipelines, etc.\n- DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but\nwith restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration\npipelines at low cost.\nPossible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`.\n", "willReplaceOnChanges": true }, "updateTime": { @@ -154395,12 +155864,10 @@ } }, "project": { - "type": "string", - "description": "The project in which the cluster belongs. If it\nis not provided, the provider will use a default.\n" + "type": "string" }, "region": { - "type": "string", - "description": "The region in which the cluster belongs. If it\nis not provided, the provider will use a default.\n" + "type": "string" }, "role": { "type": "string", @@ -154433,12 +155900,10 @@ }, "project": { "type": "string", - "description": "The project in which the cluster belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "region": { "type": "string", - "description": "The region in which the cluster belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "role": { @@ -154476,12 +155941,10 @@ }, "project": { "type": "string", - "description": "The project in which the cluster belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "region": { "type": "string", - "description": "The region in which the cluster belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "role": { @@ -154511,12 +155974,10 @@ "type": "string" }, "project": { - "type": "string", - "description": "The project in which the cluster belongs. If it\nis not provided, the provider will use a default.\n" + "type": "string" }, "region": { - "type": "string", - "description": "The region in which the cluster belongs. If it\nis not provided, the provider will use a default.\n" + "type": "string" }, "role": { "type": "string", @@ -154547,12 +156008,10 @@ }, "project": { "type": "string", - "description": "The project in which the cluster belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "region": { "type": "string", - "description": "The region in which the cluster belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "role": { @@ -154588,12 +156047,10 @@ }, "project": { "type": "string", - "description": "The project in which the cluster belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "region": { "type": "string", - "description": "The region in which the cluster belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "role": { @@ -154621,12 +156078,10 @@ "description": "The policy data generated by a `gcp.organizations.getIAMPolicy` data source.\n" }, "project": { - "type": "string", - "description": "The project in which the cluster belongs. If it\nis not provided, the provider will use a default.\n" + "type": "string" }, "region": { - "type": "string", - "description": "The region in which the cluster belongs. If it\nis not provided, the provider will use a default.\n" + "type": "string" } }, "required": [ @@ -154648,12 +156103,10 @@ }, "project": { "type": "string", - "description": "The project in which the cluster belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "region": { "type": "string", - "description": "The region in which the cluster belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true } }, @@ -154679,12 +156132,10 @@ }, "project": { "type": "string", - "description": "The project in which the cluster belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "region": { "type": "string", - "description": "The region in which the cluster belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true } }, @@ -154964,12 +156415,10 @@ } }, "project": { - "type": "string", - "description": "The project in which the job belongs. If it\nis not provided, the provider will use a default.\n" + "type": "string" }, "region": { - "type": "string", - "description": "The region in which the job belongs. If it\nis not provided, the provider will use a default.\n" + "type": "string" }, "role": { "type": "string", @@ -155001,12 +156450,10 @@ }, "project": { "type": "string", - "description": "The project in which the job belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "region": { "type": "string", - "description": "The region in which the job belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "role": { @@ -155043,12 +156490,10 @@ }, "project": { "type": "string", - "description": "The project in which the job belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "region": { "type": "string", - "description": "The region in which the job belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "role": { @@ -155077,12 +156522,10 @@ "type": "string" }, "project": { - "type": "string", - "description": "The project in which the job belongs. If it\nis not provided, the provider will use a default.\n" + "type": "string" }, "region": { - "type": "string", - "description": "The region in which the job belongs. If it\nis not provided, the provider will use a default.\n" + "type": "string" }, "role": { "type": "string", @@ -155112,12 +156555,10 @@ }, "project": { "type": "string", - "description": "The project in which the job belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "region": { "type": "string", - "description": "The region in which the job belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "role": { @@ -155152,12 +156593,10 @@ }, "project": { "type": "string", - "description": "The project in which the job belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "region": { "type": "string", - "description": "The region in which the job belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "role": { @@ -155184,12 +156623,10 @@ "description": "The policy data generated by a `gcp.organizations.getIAMPolicy` data source.\n" }, "project": { - "type": "string", - "description": "The project in which the job belongs. If it\nis not provided, the provider will use a default.\n" + "type": "string" }, "region": { - "type": "string", - "description": "The region in which the job belongs. If it\nis not provided, the provider will use a default.\n" + "type": "string" } }, "required": [ @@ -155210,12 +156647,10 @@ }, "project": { "type": "string", - "description": "The project in which the job belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "region": { "type": "string", - "description": "The region in which the job belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true } }, @@ -155240,12 +156675,10 @@ }, "project": { "type": "string", - "description": "The project in which the job belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true }, "region": { "type": "string", - "description": "The region in which the job belongs. If it\nis not provided, the provider will use a default.\n", "willReplaceOnChanges": true } }, @@ -156955,7 +158388,7 @@ } }, "gcp:datastream/stream:Stream": { - "description": "A resource representing streaming data from a source to a destination.\n\n\nTo get more information about Stream, see:\n\n* [API documentation](https://cloud.google.com/datastream/docs/reference/rest/v1/projects.locations.streams)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/datastream/docs/create-a-stream)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Datastream Stream Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst project = gcp.organizations.getProject({});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n databaseVersion: \"MYSQL_8_0\",\n region: \"us-central1\",\n settings: {\n tier: \"db-f1-micro\",\n backupConfiguration: {\n enabled: true,\n binaryLogEnabled: true,\n },\n ipConfiguration: {\n authorizedNetworks: [\n {\n value: \"34.71.242.81\",\n },\n {\n value: \"34.72.28.29\",\n },\n {\n value: \"34.67.6.157\",\n },\n {\n value: \"34.67.234.134\",\n },\n {\n value: \"34.72.239.218\",\n },\n ],\n },\n },\n deletionProtection: true,\n});\nconst db = new gcp.sql.Database(\"db\", {instance: instance.name});\nconst pwd = new random.RandomPassword(\"pwd\", {\n length: 16,\n special: false,\n});\nconst user = new gcp.sql.User(\"user\", {\n instance: instance.name,\n host: \"%\",\n password: pwd.result,\n});\nconst sourceConnectionProfile = new gcp.datastream.ConnectionProfile(\"sourceConnectionProfile\", {\n displayName: \"Source connection profile\",\n location: \"us-central1\",\n connectionProfileId: \"source-profile\",\n mysqlProfile: {\n hostname: instance.publicIpAddress,\n username: user.name,\n password: user.password,\n },\n});\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst viewer = new gcp.storage.BucketIAMMember(\"viewer\", {\n bucket: bucket.name,\n role: \"roles/storage.objectViewer\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com`),\n});\nconst creator = new gcp.storage.BucketIAMMember(\"creator\", {\n bucket: bucket.name,\n role: \"roles/storage.objectCreator\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com`),\n});\nconst reader = new gcp.storage.BucketIAMMember(\"reader\", {\n bucket: bucket.name,\n role: \"roles/storage.legacyBucketReader\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com`),\n});\nconst destinationConnectionProfile = new gcp.datastream.ConnectionProfile(\"destinationConnectionProfile\", {\n displayName: \"Connection profile\",\n location: \"us-central1\",\n connectionProfileId: \"destination-profile\",\n gcsProfile: {\n bucket: bucket.name,\n rootPath: \"/path\",\n },\n});\nconst _default = new gcp.datastream.Stream(\"default\", {\n streamId: \"my-stream\",\n desiredState: \"NOT_STARTED\",\n location: \"us-central1\",\n displayName: \"my stream\",\n labels: {\n key: \"value\",\n },\n sourceConfig: {\n sourceConnectionProfile: sourceConnectionProfile.id,\n mysqlSourceConfig: {\n includeObjects: {\n mysqlDatabases: [{\n database: \"my-database\",\n mysqlTables: [{\n table: \"includedTable\",\n mysqlColumns: [{\n column: \"includedColumn\",\n dataType: \"VARCHAR\",\n collation: \"utf8mb4\",\n primaryKey: false,\n nullable: false,\n ordinalPosition: 0,\n }],\n }],\n }],\n },\n excludeObjects: {\n mysqlDatabases: [{\n database: \"my-database\",\n mysqlTables: [{\n table: \"excludedTable\",\n mysqlColumns: [{\n column: \"excludedColumn\",\n dataType: \"VARCHAR\",\n collation: \"utf8mb4\",\n primaryKey: false,\n nullable: false,\n ordinalPosition: 0,\n }],\n }],\n }],\n },\n maxConcurrentCdcTasks: 5,\n },\n },\n destinationConfig: {\n destinationConnectionProfile: destinationConnectionProfile.id,\n gcsDestinationConfig: {\n path: \"mydata\",\n fileRotationMb: 200,\n fileRotationInterval: \"900s\",\n jsonFileFormat: {\n schemaFileFormat: \"NO_SCHEMA_FILE\",\n compression: \"GZIP\",\n },\n },\n },\n backfillAll: {\n mysqlExcludedObjects: {\n mysqlDatabases: [{\n database: \"my-database\",\n mysqlTables: [{\n table: \"excludedTable\",\n mysqlColumns: [{\n column: \"excludedColumn\",\n dataType: \"VARCHAR\",\n collation: \"utf8mb4\",\n primaryKey: false,\n nullable: false,\n ordinalPosition: 0,\n }],\n }],\n }],\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\nproject = gcp.organizations.get_project()\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n database_version=\"MYSQL_8_0\",\n region=\"us-central1\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n backup_configuration=gcp.sql.DatabaseInstanceSettingsBackupConfigurationArgs(\n enabled=True,\n binary_log_enabled=True,\n ),\n ip_configuration=gcp.sql.DatabaseInstanceSettingsIpConfigurationArgs(\n authorized_networks=[\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.71.242.81\",\n ),\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.72.28.29\",\n ),\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.67.6.157\",\n ),\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.67.234.134\",\n ),\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.72.239.218\",\n ),\n ],\n ),\n ),\n deletion_protection=True)\ndb = gcp.sql.Database(\"db\", instance=instance.name)\npwd = random.RandomPassword(\"pwd\",\n length=16,\n special=False)\nuser = gcp.sql.User(\"user\",\n instance=instance.name,\n host=\"%\",\n password=pwd.result)\nsource_connection_profile = gcp.datastream.ConnectionProfile(\"sourceConnectionProfile\",\n display_name=\"Source connection profile\",\n location=\"us-central1\",\n connection_profile_id=\"source-profile\",\n mysql_profile=gcp.datastream.ConnectionProfileMysqlProfileArgs(\n hostname=instance.public_ip_address,\n username=user.name,\n password=user.password,\n ))\nbucket = gcp.storage.Bucket(\"bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nviewer = gcp.storage.BucketIAMMember(\"viewer\",\n bucket=bucket.name,\n role=\"roles/storage.objectViewer\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-datastream.iam.gserviceaccount.com\")\ncreator = gcp.storage.BucketIAMMember(\"creator\",\n bucket=bucket.name,\n role=\"roles/storage.objectCreator\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-datastream.iam.gserviceaccount.com\")\nreader = gcp.storage.BucketIAMMember(\"reader\",\n bucket=bucket.name,\n role=\"roles/storage.legacyBucketReader\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-datastream.iam.gserviceaccount.com\")\ndestination_connection_profile = gcp.datastream.ConnectionProfile(\"destinationConnectionProfile\",\n display_name=\"Connection profile\",\n location=\"us-central1\",\n connection_profile_id=\"destination-profile\",\n gcs_profile=gcp.datastream.ConnectionProfileGcsProfileArgs(\n bucket=bucket.name,\n root_path=\"/path\",\n ))\ndefault = gcp.datastream.Stream(\"default\",\n stream_id=\"my-stream\",\n desired_state=\"NOT_STARTED\",\n location=\"us-central1\",\n display_name=\"my stream\",\n labels={\n \"key\": \"value\",\n },\n source_config=gcp.datastream.StreamSourceConfigArgs(\n source_connection_profile=source_connection_profile.id,\n mysql_source_config=gcp.datastream.StreamSourceConfigMysqlSourceConfigArgs(\n include_objects=gcp.datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsArgs(\n mysql_databases=[gcp.datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseArgs(\n database=\"my-database\",\n mysql_tables=[gcp.datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableArgs(\n table=\"includedTable\",\n mysql_columns=[gcp.datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs(\n column=\"includedColumn\",\n data_type=\"VARCHAR\",\n collation=\"utf8mb4\",\n primary_key=False,\n nullable=False,\n ordinal_position=0,\n )],\n )],\n )],\n ),\n exclude_objects=gcp.datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsArgs(\n mysql_databases=[gcp.datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseArgs(\n database=\"my-database\",\n mysql_tables=[gcp.datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableArgs(\n table=\"excludedTable\",\n mysql_columns=[gcp.datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs(\n column=\"excludedColumn\",\n data_type=\"VARCHAR\",\n collation=\"utf8mb4\",\n primary_key=False,\n nullable=False,\n ordinal_position=0,\n )],\n )],\n )],\n ),\n max_concurrent_cdc_tasks=5,\n ),\n ),\n destination_config=gcp.datastream.StreamDestinationConfigArgs(\n destination_connection_profile=destination_connection_profile.id,\n gcs_destination_config=gcp.datastream.StreamDestinationConfigGcsDestinationConfigArgs(\n path=\"mydata\",\n file_rotation_mb=200,\n file_rotation_interval=\"900s\",\n json_file_format=gcp.datastream.StreamDestinationConfigGcsDestinationConfigJsonFileFormatArgs(\n schema_file_format=\"NO_SCHEMA_FILE\",\n compression=\"GZIP\",\n ),\n ),\n ),\n backfill_all=gcp.datastream.StreamBackfillAllArgs(\n mysql_excluded_objects=gcp.datastream.StreamBackfillAllMysqlExcludedObjectsArgs(\n mysql_databases=[gcp.datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseArgs(\n database=\"my-database\",\n mysql_tables=[gcp.datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableArgs(\n table=\"excludedTable\",\n mysql_columns=[gcp.datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableMysqlColumnArgs(\n column=\"excludedColumn\",\n data_type=\"VARCHAR\",\n collation=\"utf8mb4\",\n primary_key=False,\n nullable=False,\n ordinal_position=0,\n )],\n )],\n )],\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n DatabaseVersion = \"MYSQL_8_0\",\n Region = \"us-central1\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n BackupConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsBackupConfigurationArgs\n {\n Enabled = true,\n BinaryLogEnabled = true,\n },\n IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs\n {\n AuthorizedNetworks = new[]\n {\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.71.242.81\",\n },\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.72.28.29\",\n },\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.67.6.157\",\n },\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.67.234.134\",\n },\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.72.239.218\",\n },\n },\n },\n },\n DeletionProtection = true,\n });\n\n var db = new Gcp.Sql.Database(\"db\", new()\n {\n Instance = instance.Name,\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 Instance = instance.Name,\n Host = \"%\",\n Password = pwd.Result,\n });\n\n var sourceConnectionProfile = new Gcp.Datastream.ConnectionProfile(\"sourceConnectionProfile\", new()\n {\n DisplayName = \"Source connection profile\",\n Location = \"us-central1\",\n ConnectionProfileId = \"source-profile\",\n MysqlProfile = new Gcp.Datastream.Inputs.ConnectionProfileMysqlProfileArgs\n {\n Hostname = instance.PublicIpAddress,\n Username = user.Name,\n Password = user.Password,\n },\n });\n\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var viewer = new Gcp.Storage.BucketIAMMember(\"viewer\", new()\n {\n Bucket = bucket.Name,\n Role = \"roles/storage.objectViewer\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datastream.iam.gserviceaccount.com\",\n });\n\n var creator = new Gcp.Storage.BucketIAMMember(\"creator\", new()\n {\n Bucket = bucket.Name,\n Role = \"roles/storage.objectCreator\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datastream.iam.gserviceaccount.com\",\n });\n\n var reader = new Gcp.Storage.BucketIAMMember(\"reader\", new()\n {\n Bucket = bucket.Name,\n Role = \"roles/storage.legacyBucketReader\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datastream.iam.gserviceaccount.com\",\n });\n\n var destinationConnectionProfile = new Gcp.Datastream.ConnectionProfile(\"destinationConnectionProfile\", new()\n {\n DisplayName = \"Connection profile\",\n Location = \"us-central1\",\n ConnectionProfileId = \"destination-profile\",\n GcsProfile = new Gcp.Datastream.Inputs.ConnectionProfileGcsProfileArgs\n {\n Bucket = bucket.Name,\n RootPath = \"/path\",\n },\n });\n\n var @default = new Gcp.Datastream.Stream(\"default\", new()\n {\n StreamId = \"my-stream\",\n DesiredState = \"NOT_STARTED\",\n Location = \"us-central1\",\n DisplayName = \"my stream\",\n Labels = \n {\n { \"key\", \"value\" },\n },\n SourceConfig = new Gcp.Datastream.Inputs.StreamSourceConfigArgs\n {\n SourceConnectionProfile = sourceConnectionProfile.Id,\n MysqlSourceConfig = new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigArgs\n {\n IncludeObjects = new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigIncludeObjectsArgs\n {\n MysqlDatabases = new[]\n {\n new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseArgs\n {\n Database = \"my-database\",\n MysqlTables = new[]\n {\n new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableArgs\n {\n Table = \"includedTable\",\n MysqlColumns = new[]\n {\n new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs\n {\n Column = \"includedColumn\",\n DataType = \"VARCHAR\",\n Collation = \"utf8mb4\",\n PrimaryKey = false,\n Nullable = false,\n OrdinalPosition = 0,\n },\n },\n },\n },\n },\n },\n },\n ExcludeObjects = new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigExcludeObjectsArgs\n {\n MysqlDatabases = new[]\n {\n new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseArgs\n {\n Database = \"my-database\",\n MysqlTables = new[]\n {\n new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableArgs\n {\n Table = \"excludedTable\",\n MysqlColumns = new[]\n {\n new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs\n {\n Column = \"excludedColumn\",\n DataType = \"VARCHAR\",\n Collation = \"utf8mb4\",\n PrimaryKey = false,\n Nullable = false,\n OrdinalPosition = 0,\n },\n },\n },\n },\n },\n },\n },\n MaxConcurrentCdcTasks = 5,\n },\n },\n DestinationConfig = new Gcp.Datastream.Inputs.StreamDestinationConfigArgs\n {\n DestinationConnectionProfile = destinationConnectionProfile.Id,\n GcsDestinationConfig = new Gcp.Datastream.Inputs.StreamDestinationConfigGcsDestinationConfigArgs\n {\n Path = \"mydata\",\n FileRotationMb = 200,\n FileRotationInterval = \"900s\",\n JsonFileFormat = new Gcp.Datastream.Inputs.StreamDestinationConfigGcsDestinationConfigJsonFileFormatArgs\n {\n SchemaFileFormat = \"NO_SCHEMA_FILE\",\n Compression = \"GZIP\",\n },\n },\n },\n BackfillAll = new Gcp.Datastream.Inputs.StreamBackfillAllArgs\n {\n MysqlExcludedObjects = new Gcp.Datastream.Inputs.StreamBackfillAllMysqlExcludedObjectsArgs\n {\n MysqlDatabases = new[]\n {\n new Gcp.Datastream.Inputs.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseArgs\n {\n Database = \"my-database\",\n MysqlTables = new[]\n {\n new Gcp.Datastream.Inputs.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableArgs\n {\n Table = \"excludedTable\",\n MysqlColumns = new[]\n {\n new Gcp.Datastream.Inputs.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableMysqlColumnArgs\n {\n Column = \"excludedColumn\",\n DataType = \"VARCHAR\",\n Collation = \"utf8mb4\",\n PrimaryKey = false,\n Nullable = false,\n OrdinalPosition = 0,\n },\n },\n },\n },\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/v6/go/gcp/datastream\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/storage\"\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\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0\"),\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\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\tIpConfiguration: \u0026sql.DatabaseInstanceSettingsIpConfigurationArgs{\n\t\t\t\t\tAuthorizedNetworks: sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArray{\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.71.242.81\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.72.28.29\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.67.6.157\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.67.234.134\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.72.239.218\"),\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\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sql.NewDatabase(ctx, \"db\", \u0026sql.DatabaseArgs{\n\t\t\tInstance: instance.Name,\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\tInstance: instance.Name,\n\t\t\tHost: pulumi.String(\"%\"),\n\t\t\tPassword: pwd.Result,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsourceConnectionProfile, err := datastream.NewConnectionProfile(ctx, \"sourceConnectionProfile\", \u0026datastream.ConnectionProfileArgs{\n\t\t\tDisplayName: pulumi.String(\"Source connection profile\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"source-profile\"),\n\t\t\tMysqlProfile: \u0026datastream.ConnectionProfileMysqlProfileArgs{\n\t\t\t\tHostname: instance.PublicIpAddress,\n\t\t\t\tUsername: user.Name,\n\t\t\t\tPassword: user.Password,\n\t\t\t},\n\t\t})\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\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\t_, err = storage.NewBucketIAMMember(ctx, \"viewer\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: bucket.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.objectViewer\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datastream.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 = storage.NewBucketIAMMember(ctx, \"creator\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: bucket.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.objectCreator\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datastream.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 = storage.NewBucketIAMMember(ctx, \"reader\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: bucket.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.legacyBucketReader\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datastream.iam.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdestinationConnectionProfile, err := datastream.NewConnectionProfile(ctx, \"destinationConnectionProfile\", \u0026datastream.ConnectionProfileArgs{\n\t\t\tDisplayName: pulumi.String(\"Connection profile\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"destination-profile\"),\n\t\t\tGcsProfile: \u0026datastream.ConnectionProfileGcsProfileArgs{\n\t\t\t\tBucket: bucket.Name,\n\t\t\t\tRootPath: pulumi.String(\"/path\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datastream.NewStream(ctx, \"default\", \u0026datastream.StreamArgs{\n\t\t\tStreamId: pulumi.String(\"my-stream\"),\n\t\t\tDesiredState: pulumi.String(\"NOT_STARTED\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDisplayName: pulumi.String(\"my stream\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"key\": pulumi.String(\"value\"),\n\t\t\t},\n\t\t\tSourceConfig: \u0026datastream.StreamSourceConfigArgs{\n\t\t\t\tSourceConnectionProfile: sourceConnectionProfile.ID(),\n\t\t\t\tMysqlSourceConfig: \u0026datastream.StreamSourceConfigMysqlSourceConfigArgs{\n\t\t\t\t\tIncludeObjects: \u0026datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsArgs{\n\t\t\t\t\t\tMysqlDatabases: datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseArray{\n\t\t\t\t\t\t\t\u0026datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseArgs{\n\t\t\t\t\t\t\t\tDatabase: pulumi.String(\"my-database\"),\n\t\t\t\t\t\t\t\tMysqlTables: datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableArray{\n\t\t\t\t\t\t\t\t\t\u0026datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableArgs{\n\t\t\t\t\t\t\t\t\t\tTable: pulumi.String(\"includedTable\"),\n\t\t\t\t\t\t\t\t\t\tMysqlColumns: datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableMysqlColumnArray{\n\t\t\t\t\t\t\t\t\t\t\t\u0026datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs{\n\t\t\t\t\t\t\t\t\t\t\t\tColumn: pulumi.String(\"includedColumn\"),\n\t\t\t\t\t\t\t\t\t\t\t\tDataType: pulumi.String(\"VARCHAR\"),\n\t\t\t\t\t\t\t\t\t\t\t\tCollation: pulumi.String(\"utf8mb4\"),\n\t\t\t\t\t\t\t\t\t\t\t\tPrimaryKey: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t\t\t\t\tNullable: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t\t\t\t\tOrdinalPosition: pulumi.Int(0),\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\tExcludeObjects: \u0026datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsArgs{\n\t\t\t\t\t\tMysqlDatabases: datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseArray{\n\t\t\t\t\t\t\t\u0026datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseArgs{\n\t\t\t\t\t\t\t\tDatabase: pulumi.String(\"my-database\"),\n\t\t\t\t\t\t\t\tMysqlTables: datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableArray{\n\t\t\t\t\t\t\t\t\t\u0026datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableArgs{\n\t\t\t\t\t\t\t\t\t\tTable: pulumi.String(\"excludedTable\"),\n\t\t\t\t\t\t\t\t\t\tMysqlColumns: datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableMysqlColumnArray{\n\t\t\t\t\t\t\t\t\t\t\t\u0026datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs{\n\t\t\t\t\t\t\t\t\t\t\t\tColumn: pulumi.String(\"excludedColumn\"),\n\t\t\t\t\t\t\t\t\t\t\t\tDataType: pulumi.String(\"VARCHAR\"),\n\t\t\t\t\t\t\t\t\t\t\t\tCollation: pulumi.String(\"utf8mb4\"),\n\t\t\t\t\t\t\t\t\t\t\t\tPrimaryKey: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t\t\t\t\tNullable: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t\t\t\t\tOrdinalPosition: pulumi.Int(0),\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\tMaxConcurrentCdcTasks: pulumi.Int(5),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDestinationConfig: \u0026datastream.StreamDestinationConfigArgs{\n\t\t\t\tDestinationConnectionProfile: destinationConnectionProfile.ID(),\n\t\t\t\tGcsDestinationConfig: \u0026datastream.StreamDestinationConfigGcsDestinationConfigArgs{\n\t\t\t\t\tPath: pulumi.String(\"mydata\"),\n\t\t\t\t\tFileRotationMb: pulumi.Int(200),\n\t\t\t\t\tFileRotationInterval: pulumi.String(\"900s\"),\n\t\t\t\t\tJsonFileFormat: \u0026datastream.StreamDestinationConfigGcsDestinationConfigJsonFileFormatArgs{\n\t\t\t\t\t\tSchemaFileFormat: pulumi.String(\"NO_SCHEMA_FILE\"),\n\t\t\t\t\t\tCompression: pulumi.String(\"GZIP\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackfillAll: \u0026datastream.StreamBackfillAllArgs{\n\t\t\t\tMysqlExcludedObjects: \u0026datastream.StreamBackfillAllMysqlExcludedObjectsArgs{\n\t\t\t\t\tMysqlDatabases: datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseArray{\n\t\t\t\t\t\t\u0026datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseArgs{\n\t\t\t\t\t\t\tDatabase: pulumi.String(\"my-database\"),\n\t\t\t\t\t\t\tMysqlTables: datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableArray{\n\t\t\t\t\t\t\t\t\u0026datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableArgs{\n\t\t\t\t\t\t\t\t\tTable: pulumi.String(\"excludedTable\"),\n\t\t\t\t\t\t\t\t\tMysqlColumns: datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableMysqlColumnArray{\n\t\t\t\t\t\t\t\t\t\t\u0026datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableMysqlColumnArgs{\n\t\t\t\t\t\t\t\t\t\t\tColumn: pulumi.String(\"excludedColumn\"),\n\t\t\t\t\t\t\t\t\t\t\tDataType: pulumi.String(\"VARCHAR\"),\n\t\t\t\t\t\t\t\t\t\t\tCollation: pulumi.String(\"utf8mb4\"),\n\t\t\t\t\t\t\t\t\t\t\tPrimaryKey: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t\t\t\tNullable: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t\t\t\tOrdinalPosition: pulumi.Int(0),\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.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.inputs.DatabaseInstanceSettingsBackupConfigurationArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs;\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.datastream.ConnectionProfile;\nimport com.pulumi.gcp.datastream.ConnectionProfileArgs;\nimport com.pulumi.gcp.datastream.inputs.ConnectionProfileMysqlProfileArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.datastream.inputs.ConnectionProfileGcsProfileArgs;\nimport com.pulumi.gcp.datastream.Stream;\nimport com.pulumi.gcp.datastream.StreamArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamSourceConfigArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamSourceConfigMysqlSourceConfigArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamSourceConfigMysqlSourceConfigIncludeObjectsArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamSourceConfigMysqlSourceConfigExcludeObjectsArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamDestinationConfigArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamDestinationConfigGcsDestinationConfigArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamDestinationConfigGcsDestinationConfigJsonFileFormatArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamBackfillAllArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamBackfillAllMysqlExcludedObjectsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder() \n .databaseVersion(\"MYSQL_8_0\")\n .region(\"us-central1\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .backupConfiguration(DatabaseInstanceSettingsBackupConfigurationArgs.builder()\n .enabled(true)\n .binaryLogEnabled(true)\n .build())\n .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder()\n .authorizedNetworks( \n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.71.242.81\")\n .build(),\n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.72.28.29\")\n .build(),\n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.67.6.157\")\n .build(),\n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.67.234.134\")\n .build(),\n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.72.239.218\")\n .build())\n .build())\n .build())\n .deletionProtection(true)\n .build());\n\n var db = new Database(\"db\", DatabaseArgs.builder() \n .instance(instance.name())\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 .instance(instance.name())\n .host(\"%\")\n .password(pwd.result())\n .build());\n\n var sourceConnectionProfile = new ConnectionProfile(\"sourceConnectionProfile\", ConnectionProfileArgs.builder() \n .displayName(\"Source connection profile\")\n .location(\"us-central1\")\n .connectionProfileId(\"source-profile\")\n .mysqlProfile(ConnectionProfileMysqlProfileArgs.builder()\n .hostname(instance.publicIpAddress())\n .username(user.name())\n .password(user.password())\n .build())\n .build());\n\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var viewer = new BucketIAMMember(\"viewer\", BucketIAMMemberArgs.builder() \n .bucket(bucket.name())\n .role(\"roles/storage.objectViewer\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-datastream.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var creator = new BucketIAMMember(\"creator\", BucketIAMMemberArgs.builder() \n .bucket(bucket.name())\n .role(\"roles/storage.objectCreator\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-datastream.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var reader = new BucketIAMMember(\"reader\", BucketIAMMemberArgs.builder() \n .bucket(bucket.name())\n .role(\"roles/storage.legacyBucketReader\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-datastream.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var destinationConnectionProfile = new ConnectionProfile(\"destinationConnectionProfile\", ConnectionProfileArgs.builder() \n .displayName(\"Connection profile\")\n .location(\"us-central1\")\n .connectionProfileId(\"destination-profile\")\n .gcsProfile(ConnectionProfileGcsProfileArgs.builder()\n .bucket(bucket.name())\n .rootPath(\"/path\")\n .build())\n .build());\n\n var default_ = new Stream(\"default\", StreamArgs.builder() \n .streamId(\"my-stream\")\n .desiredState(\"NOT_STARTED\")\n .location(\"us-central1\")\n .displayName(\"my stream\")\n .labels(Map.of(\"key\", \"value\"))\n .sourceConfig(StreamSourceConfigArgs.builder()\n .sourceConnectionProfile(sourceConnectionProfile.id())\n .mysqlSourceConfig(StreamSourceConfigMysqlSourceConfigArgs.builder()\n .includeObjects(StreamSourceConfigMysqlSourceConfigIncludeObjectsArgs.builder()\n .mysqlDatabases(StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseArgs.builder()\n .database(\"my-database\")\n .mysqlTables(StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableArgs.builder()\n .table(\"includedTable\")\n .mysqlColumns(StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs.builder()\n .column(\"includedColumn\")\n .dataType(\"VARCHAR\")\n .collation(\"utf8mb4\")\n .primaryKey(false)\n .nullable(false)\n .ordinalPosition(0)\n .build())\n .build())\n .build())\n .build())\n .excludeObjects(StreamSourceConfigMysqlSourceConfigExcludeObjectsArgs.builder()\n .mysqlDatabases(StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseArgs.builder()\n .database(\"my-database\")\n .mysqlTables(StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableArgs.builder()\n .table(\"excludedTable\")\n .mysqlColumns(StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs.builder()\n .column(\"excludedColumn\")\n .dataType(\"VARCHAR\")\n .collation(\"utf8mb4\")\n .primaryKey(false)\n .nullable(false)\n .ordinalPosition(0)\n .build())\n .build())\n .build())\n .build())\n .maxConcurrentCdcTasks(5)\n .build())\n .build())\n .destinationConfig(StreamDestinationConfigArgs.builder()\n .destinationConnectionProfile(destinationConnectionProfile.id())\n .gcsDestinationConfig(StreamDestinationConfigGcsDestinationConfigArgs.builder()\n .path(\"mydata\")\n .fileRotationMb(200)\n .fileRotationInterval(\"900s\")\n .jsonFileFormat(StreamDestinationConfigGcsDestinationConfigJsonFileFormatArgs.builder()\n .schemaFileFormat(\"NO_SCHEMA_FILE\")\n .compression(\"GZIP\")\n .build())\n .build())\n .build())\n .backfillAll(StreamBackfillAllArgs.builder()\n .mysqlExcludedObjects(StreamBackfillAllMysqlExcludedObjectsArgs.builder()\n .mysqlDatabases(StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseArgs.builder()\n .database(\"my-database\")\n .mysqlTables(StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableArgs.builder()\n .table(\"excludedTable\")\n .mysqlColumns(StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableMysqlColumnArgs.builder()\n .column(\"excludedColumn\")\n .dataType(\"VARCHAR\")\n .collation(\"utf8mb4\")\n .primaryKey(false)\n .nullable(false)\n .ordinalPosition(0)\n .build())\n .build())\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n databaseVersion: MYSQL_8_0\n region: us-central1\n settings:\n tier: db-f1-micro\n backupConfiguration:\n enabled: true\n binaryLogEnabled: true\n ipConfiguration:\n authorizedNetworks:\n - value: 34.71.242.81\n - value: 34.72.28.29\n - value: 34.67.6.157\n - value: 34.67.234.134\n - value: 34.72.239.218\n deletionProtection: true\n db:\n type: gcp:sql:Database\n properties:\n instance: ${instance.name}\n pwd:\n type: random:RandomPassword\n properties:\n length: 16\n special: false\n user:\n type: gcp:sql:User\n properties:\n instance: ${instance.name}\n host: '%'\n password: ${pwd.result}\n sourceConnectionProfile:\n type: gcp:datastream:ConnectionProfile\n properties:\n displayName: Source connection profile\n location: us-central1\n connectionProfileId: source-profile\n mysqlProfile:\n hostname: ${instance.publicIpAddress}\n username: ${user.name}\n password: ${user.password}\n bucket:\n type: gcp:storage:Bucket\n properties:\n location: US\n uniformBucketLevelAccess: true\n viewer:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${bucket.name}\n role: roles/storage.objectViewer\n member: serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com\n creator:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${bucket.name}\n role: roles/storage.objectCreator\n member: serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com\n reader:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${bucket.name}\n role: roles/storage.legacyBucketReader\n member: serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com\n destinationConnectionProfile:\n type: gcp:datastream:ConnectionProfile\n properties:\n displayName: Connection profile\n location: us-central1\n connectionProfileId: destination-profile\n gcsProfile:\n bucket: ${bucket.name}\n rootPath: /path\n default:\n type: gcp:datastream:Stream\n properties:\n streamId: my-stream\n desiredState: NOT_STARTED\n location: us-central1\n displayName: my stream\n labels:\n key: value\n sourceConfig:\n sourceConnectionProfile: ${sourceConnectionProfile.id}\n mysqlSourceConfig:\n includeObjects:\n mysqlDatabases:\n - database: my-database\n mysqlTables:\n - table: includedTable\n mysqlColumns:\n - column: includedColumn\n dataType: VARCHAR\n collation: utf8mb4\n primaryKey: false\n nullable: false\n ordinalPosition: 0\n excludeObjects:\n mysqlDatabases:\n - database: my-database\n mysqlTables:\n - table: excludedTable\n mysqlColumns:\n - column: excludedColumn\n dataType: VARCHAR\n collation: utf8mb4\n primaryKey: false\n nullable: false\n ordinalPosition: 0\n maxConcurrentCdcTasks: 5\n destinationConfig:\n destinationConnectionProfile: ${destinationConnectionProfile.id}\n gcsDestinationConfig:\n path: mydata\n fileRotationMb: 200\n fileRotationInterval: 900s\n jsonFileFormat:\n schemaFileFormat: NO_SCHEMA_FILE\n compression: GZIP\n backfillAll:\n mysqlExcludedObjects:\n mysqlDatabases:\n - database: my-database\n mysqlTables:\n - table: excludedTable\n mysqlColumns:\n - column: excludedColumn\n dataType: VARCHAR\n collation: utf8mb4\n primaryKey: false\n nullable: false\n ordinalPosition: 0\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nStream can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:datastream/stream:Stream default projects/{{project}}/locations/{{location}}/streams/{{stream_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:datastream/stream:Stream default {{project}}/{{location}}/{{stream_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:datastream/stream:Stream default {{location}}/{{stream_id}}\n```\n\n ", + "description": "A resource representing streaming data from a source to a destination.\n\n\nTo get more information about Stream, see:\n\n* [API documentation](https://cloud.google.com/datastream/docs/reference/rest/v1/projects.locations.streams)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/datastream/docs/create-a-stream)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Datastream Stream Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst project = gcp.organizations.getProject({});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n databaseVersion: \"MYSQL_8_0\",\n region: \"us-central1\",\n settings: {\n tier: \"db-f1-micro\",\n backupConfiguration: {\n enabled: true,\n binaryLogEnabled: true,\n },\n ipConfiguration: {\n authorizedNetworks: [\n {\n value: \"34.71.242.81\",\n },\n {\n value: \"34.72.28.29\",\n },\n {\n value: \"34.67.6.157\",\n },\n {\n value: \"34.67.234.134\",\n },\n {\n value: \"34.72.239.218\",\n },\n ],\n },\n },\n deletionProtection: true,\n});\nconst db = new gcp.sql.Database(\"db\", {instance: instance.name});\nconst pwd = new random.RandomPassword(\"pwd\", {\n length: 16,\n special: false,\n});\nconst user = new gcp.sql.User(\"user\", {\n instance: instance.name,\n host: \"%\",\n password: pwd.result,\n});\nconst sourceConnectionProfile = new gcp.datastream.ConnectionProfile(\"sourceConnectionProfile\", {\n displayName: \"Source connection profile\",\n location: \"us-central1\",\n connectionProfileId: \"source-profile\",\n mysqlProfile: {\n hostname: instance.publicIpAddress,\n username: user.name,\n password: user.password,\n },\n});\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n location: \"US\",\n uniformBucketLevelAccess: true,\n});\nconst viewer = new gcp.storage.BucketIAMMember(\"viewer\", {\n bucket: bucket.name,\n role: \"roles/storage.objectViewer\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com`),\n});\nconst creator = new gcp.storage.BucketIAMMember(\"creator\", {\n bucket: bucket.name,\n role: \"roles/storage.objectCreator\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com`),\n});\nconst reader = new gcp.storage.BucketIAMMember(\"reader\", {\n bucket: bucket.name,\n role: \"roles/storage.legacyBucketReader\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com`),\n});\nconst keyUser = new gcp.kms.CryptoKeyIAMMember(\"keyUser\", {\n cryptoKeyId: \"kms-name\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com`),\n});\nconst destinationConnectionProfile = new gcp.datastream.ConnectionProfile(\"destinationConnectionProfile\", {\n displayName: \"Connection profile\",\n location: \"us-central1\",\n connectionProfileId: \"destination-profile\",\n gcsProfile: {\n bucket: bucket.name,\n rootPath: \"/path\",\n },\n});\nconst _default = new gcp.datastream.Stream(\"default\", {\n streamId: \"my-stream\",\n desiredState: \"NOT_STARTED\",\n location: \"us-central1\",\n displayName: \"my stream\",\n labels: {\n key: \"value\",\n },\n sourceConfig: {\n sourceConnectionProfile: sourceConnectionProfile.id,\n mysqlSourceConfig: {\n includeObjects: {\n mysqlDatabases: [{\n database: \"my-database\",\n mysqlTables: [{\n table: \"includedTable\",\n mysqlColumns: [{\n column: \"includedColumn\",\n dataType: \"VARCHAR\",\n collation: \"utf8mb4\",\n primaryKey: false,\n nullable: false,\n ordinalPosition: 0,\n }],\n }],\n }],\n },\n excludeObjects: {\n mysqlDatabases: [{\n database: \"my-database\",\n mysqlTables: [{\n table: \"excludedTable\",\n mysqlColumns: [{\n column: \"excludedColumn\",\n dataType: \"VARCHAR\",\n collation: \"utf8mb4\",\n primaryKey: false,\n nullable: false,\n ordinalPosition: 0,\n }],\n }],\n }],\n },\n maxConcurrentCdcTasks: 5,\n },\n },\n destinationConfig: {\n destinationConnectionProfile: destinationConnectionProfile.id,\n gcsDestinationConfig: {\n path: \"mydata\",\n fileRotationMb: 200,\n fileRotationInterval: \"900s\",\n jsonFileFormat: {\n schemaFileFormat: \"NO_SCHEMA_FILE\",\n compression: \"GZIP\",\n },\n },\n },\n backfillAll: {\n mysqlExcludedObjects: {\n mysqlDatabases: [{\n database: \"my-database\",\n mysqlTables: [{\n table: \"excludedTable\",\n mysqlColumns: [{\n column: \"excludedColumn\",\n dataType: \"VARCHAR\",\n collation: \"utf8mb4\",\n primaryKey: false,\n nullable: false,\n ordinalPosition: 0,\n }],\n }],\n }],\n },\n },\n customerManagedEncryptionKey: \"kms-name\",\n}, {\n dependsOn: [keyUser],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\nproject = gcp.organizations.get_project()\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n database_version=\"MYSQL_8_0\",\n region=\"us-central1\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n backup_configuration=gcp.sql.DatabaseInstanceSettingsBackupConfigurationArgs(\n enabled=True,\n binary_log_enabled=True,\n ),\n ip_configuration=gcp.sql.DatabaseInstanceSettingsIpConfigurationArgs(\n authorized_networks=[\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.71.242.81\",\n ),\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.72.28.29\",\n ),\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.67.6.157\",\n ),\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.67.234.134\",\n ),\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.72.239.218\",\n ),\n ],\n ),\n ),\n deletion_protection=True)\ndb = gcp.sql.Database(\"db\", instance=instance.name)\npwd = random.RandomPassword(\"pwd\",\n length=16,\n special=False)\nuser = gcp.sql.User(\"user\",\n instance=instance.name,\n host=\"%\",\n password=pwd.result)\nsource_connection_profile = gcp.datastream.ConnectionProfile(\"sourceConnectionProfile\",\n display_name=\"Source connection profile\",\n location=\"us-central1\",\n connection_profile_id=\"source-profile\",\n mysql_profile=gcp.datastream.ConnectionProfileMysqlProfileArgs(\n hostname=instance.public_ip_address,\n username=user.name,\n password=user.password,\n ))\nbucket = gcp.storage.Bucket(\"bucket\",\n location=\"US\",\n uniform_bucket_level_access=True)\nviewer = gcp.storage.BucketIAMMember(\"viewer\",\n bucket=bucket.name,\n role=\"roles/storage.objectViewer\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-datastream.iam.gserviceaccount.com\")\ncreator = gcp.storage.BucketIAMMember(\"creator\",\n bucket=bucket.name,\n role=\"roles/storage.objectCreator\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-datastream.iam.gserviceaccount.com\")\nreader = gcp.storage.BucketIAMMember(\"reader\",\n bucket=bucket.name,\n role=\"roles/storage.legacyBucketReader\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-datastream.iam.gserviceaccount.com\")\nkey_user = gcp.kms.CryptoKeyIAMMember(\"keyUser\",\n crypto_key_id=\"kms-name\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-datastream.iam.gserviceaccount.com\")\ndestination_connection_profile = gcp.datastream.ConnectionProfile(\"destinationConnectionProfile\",\n display_name=\"Connection profile\",\n location=\"us-central1\",\n connection_profile_id=\"destination-profile\",\n gcs_profile=gcp.datastream.ConnectionProfileGcsProfileArgs(\n bucket=bucket.name,\n root_path=\"/path\",\n ))\ndefault = gcp.datastream.Stream(\"default\",\n stream_id=\"my-stream\",\n desired_state=\"NOT_STARTED\",\n location=\"us-central1\",\n display_name=\"my stream\",\n labels={\n \"key\": \"value\",\n },\n source_config=gcp.datastream.StreamSourceConfigArgs(\n source_connection_profile=source_connection_profile.id,\n mysql_source_config=gcp.datastream.StreamSourceConfigMysqlSourceConfigArgs(\n include_objects=gcp.datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsArgs(\n mysql_databases=[gcp.datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseArgs(\n database=\"my-database\",\n mysql_tables=[gcp.datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableArgs(\n table=\"includedTable\",\n mysql_columns=[gcp.datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs(\n column=\"includedColumn\",\n data_type=\"VARCHAR\",\n collation=\"utf8mb4\",\n primary_key=False,\n nullable=False,\n ordinal_position=0,\n )],\n )],\n )],\n ),\n exclude_objects=gcp.datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsArgs(\n mysql_databases=[gcp.datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseArgs(\n database=\"my-database\",\n mysql_tables=[gcp.datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableArgs(\n table=\"excludedTable\",\n mysql_columns=[gcp.datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs(\n column=\"excludedColumn\",\n data_type=\"VARCHAR\",\n collation=\"utf8mb4\",\n primary_key=False,\n nullable=False,\n ordinal_position=0,\n )],\n )],\n )],\n ),\n max_concurrent_cdc_tasks=5,\n ),\n ),\n destination_config=gcp.datastream.StreamDestinationConfigArgs(\n destination_connection_profile=destination_connection_profile.id,\n gcs_destination_config=gcp.datastream.StreamDestinationConfigGcsDestinationConfigArgs(\n path=\"mydata\",\n file_rotation_mb=200,\n file_rotation_interval=\"900s\",\n json_file_format=gcp.datastream.StreamDestinationConfigGcsDestinationConfigJsonFileFormatArgs(\n schema_file_format=\"NO_SCHEMA_FILE\",\n compression=\"GZIP\",\n ),\n ),\n ),\n backfill_all=gcp.datastream.StreamBackfillAllArgs(\n mysql_excluded_objects=gcp.datastream.StreamBackfillAllMysqlExcludedObjectsArgs(\n mysql_databases=[gcp.datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseArgs(\n database=\"my-database\",\n mysql_tables=[gcp.datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableArgs(\n table=\"excludedTable\",\n mysql_columns=[gcp.datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableMysqlColumnArgs(\n column=\"excludedColumn\",\n data_type=\"VARCHAR\",\n collation=\"utf8mb4\",\n primary_key=False,\n nullable=False,\n ordinal_position=0,\n )],\n )],\n )],\n ),\n ),\n customer_managed_encryption_key=\"kms-name\",\n opts=pulumi.ResourceOptions(depends_on=[key_user]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n DatabaseVersion = \"MYSQL_8_0\",\n Region = \"us-central1\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n BackupConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsBackupConfigurationArgs\n {\n Enabled = true,\n BinaryLogEnabled = true,\n },\n IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs\n {\n AuthorizedNetworks = new[]\n {\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.71.242.81\",\n },\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.72.28.29\",\n },\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.67.6.157\",\n },\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.67.234.134\",\n },\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.72.239.218\",\n },\n },\n },\n },\n DeletionProtection = true,\n });\n\n var db = new Gcp.Sql.Database(\"db\", new()\n {\n Instance = instance.Name,\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 Instance = instance.Name,\n Host = \"%\",\n Password = pwd.Result,\n });\n\n var sourceConnectionProfile = new Gcp.Datastream.ConnectionProfile(\"sourceConnectionProfile\", new()\n {\n DisplayName = \"Source connection profile\",\n Location = \"us-central1\",\n ConnectionProfileId = \"source-profile\",\n MysqlProfile = new Gcp.Datastream.Inputs.ConnectionProfileMysqlProfileArgs\n {\n Hostname = instance.PublicIpAddress,\n Username = user.Name,\n Password = user.Password,\n },\n });\n\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Location = \"US\",\n UniformBucketLevelAccess = true,\n });\n\n var viewer = new Gcp.Storage.BucketIAMMember(\"viewer\", new()\n {\n Bucket = bucket.Name,\n Role = \"roles/storage.objectViewer\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datastream.iam.gserviceaccount.com\",\n });\n\n var creator = new Gcp.Storage.BucketIAMMember(\"creator\", new()\n {\n Bucket = bucket.Name,\n Role = \"roles/storage.objectCreator\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datastream.iam.gserviceaccount.com\",\n });\n\n var reader = new Gcp.Storage.BucketIAMMember(\"reader\", new()\n {\n Bucket = bucket.Name,\n Role = \"roles/storage.legacyBucketReader\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datastream.iam.gserviceaccount.com\",\n });\n\n var keyUser = new Gcp.Kms.CryptoKeyIAMMember(\"keyUser\", new()\n {\n CryptoKeyId = \"kms-name\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datastream.iam.gserviceaccount.com\",\n });\n\n var destinationConnectionProfile = new Gcp.Datastream.ConnectionProfile(\"destinationConnectionProfile\", new()\n {\n DisplayName = \"Connection profile\",\n Location = \"us-central1\",\n ConnectionProfileId = \"destination-profile\",\n GcsProfile = new Gcp.Datastream.Inputs.ConnectionProfileGcsProfileArgs\n {\n Bucket = bucket.Name,\n RootPath = \"/path\",\n },\n });\n\n var @default = new Gcp.Datastream.Stream(\"default\", new()\n {\n StreamId = \"my-stream\",\n DesiredState = \"NOT_STARTED\",\n Location = \"us-central1\",\n DisplayName = \"my stream\",\n Labels = \n {\n { \"key\", \"value\" },\n },\n SourceConfig = new Gcp.Datastream.Inputs.StreamSourceConfigArgs\n {\n SourceConnectionProfile = sourceConnectionProfile.Id,\n MysqlSourceConfig = new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigArgs\n {\n IncludeObjects = new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigIncludeObjectsArgs\n {\n MysqlDatabases = new[]\n {\n new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseArgs\n {\n Database = \"my-database\",\n MysqlTables = new[]\n {\n new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableArgs\n {\n Table = \"includedTable\",\n MysqlColumns = new[]\n {\n new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs\n {\n Column = \"includedColumn\",\n DataType = \"VARCHAR\",\n Collation = \"utf8mb4\",\n PrimaryKey = false,\n Nullable = false,\n OrdinalPosition = 0,\n },\n },\n },\n },\n },\n },\n },\n ExcludeObjects = new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigExcludeObjectsArgs\n {\n MysqlDatabases = new[]\n {\n new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseArgs\n {\n Database = \"my-database\",\n MysqlTables = new[]\n {\n new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableArgs\n {\n Table = \"excludedTable\",\n MysqlColumns = new[]\n {\n new Gcp.Datastream.Inputs.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs\n {\n Column = \"excludedColumn\",\n DataType = \"VARCHAR\",\n Collation = \"utf8mb4\",\n PrimaryKey = false,\n Nullable = false,\n OrdinalPosition = 0,\n },\n },\n },\n },\n },\n },\n },\n MaxConcurrentCdcTasks = 5,\n },\n },\n DestinationConfig = new Gcp.Datastream.Inputs.StreamDestinationConfigArgs\n {\n DestinationConnectionProfile = destinationConnectionProfile.Id,\n GcsDestinationConfig = new Gcp.Datastream.Inputs.StreamDestinationConfigGcsDestinationConfigArgs\n {\n Path = \"mydata\",\n FileRotationMb = 200,\n FileRotationInterval = \"900s\",\n JsonFileFormat = new Gcp.Datastream.Inputs.StreamDestinationConfigGcsDestinationConfigJsonFileFormatArgs\n {\n SchemaFileFormat = \"NO_SCHEMA_FILE\",\n Compression = \"GZIP\",\n },\n },\n },\n BackfillAll = new Gcp.Datastream.Inputs.StreamBackfillAllArgs\n {\n MysqlExcludedObjects = new Gcp.Datastream.Inputs.StreamBackfillAllMysqlExcludedObjectsArgs\n {\n MysqlDatabases = new[]\n {\n new Gcp.Datastream.Inputs.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseArgs\n {\n Database = \"my-database\",\n MysqlTables = new[]\n {\n new Gcp.Datastream.Inputs.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableArgs\n {\n Table = \"excludedTable\",\n MysqlColumns = new[]\n {\n new Gcp.Datastream.Inputs.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableMysqlColumnArgs\n {\n Column = \"excludedColumn\",\n DataType = \"VARCHAR\",\n Collation = \"utf8mb4\",\n PrimaryKey = false,\n Nullable = false,\n OrdinalPosition = 0,\n },\n },\n },\n },\n },\n },\n },\n },\n CustomerManagedEncryptionKey = \"kms-name\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n keyUser,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datastream\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/sql\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/storage\"\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\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0\"),\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\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\tIpConfiguration: \u0026sql.DatabaseInstanceSettingsIpConfigurationArgs{\n\t\t\t\t\tAuthorizedNetworks: sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArray{\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.71.242.81\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.72.28.29\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.67.6.157\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.67.234.134\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.72.239.218\"),\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\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sql.NewDatabase(ctx, \"db\", \u0026sql.DatabaseArgs{\n\t\t\tInstance: instance.Name,\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\tInstance: instance.Name,\n\t\t\tHost: pulumi.String(\"%\"),\n\t\t\tPassword: pwd.Result,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsourceConnectionProfile, err := datastream.NewConnectionProfile(ctx, \"sourceConnectionProfile\", \u0026datastream.ConnectionProfileArgs{\n\t\t\tDisplayName: pulumi.String(\"Source connection profile\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"source-profile\"),\n\t\t\tMysqlProfile: \u0026datastream.ConnectionProfileMysqlProfileArgs{\n\t\t\t\tHostname: instance.PublicIpAddress,\n\t\t\t\tUsername: user.Name,\n\t\t\t\tPassword: user.Password,\n\t\t\t},\n\t\t})\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\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\t_, err = storage.NewBucketIAMMember(ctx, \"viewer\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: bucket.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.objectViewer\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datastream.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 = storage.NewBucketIAMMember(ctx, \"creator\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: bucket.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.objectCreator\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datastream.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 = storage.NewBucketIAMMember(ctx, \"reader\", \u0026storage.BucketIAMMemberArgs{\n\t\t\tBucket: bucket.Name,\n\t\t\tRole: pulumi.String(\"roles/storage.legacyBucketReader\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datastream.iam.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyUser, err := kms.NewCryptoKeyIAMMember(ctx, \"keyUser\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"kms-name\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datastream.iam.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdestinationConnectionProfile, err := datastream.NewConnectionProfile(ctx, \"destinationConnectionProfile\", \u0026datastream.ConnectionProfileArgs{\n\t\t\tDisplayName: pulumi.String(\"Connection profile\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"destination-profile\"),\n\t\t\tGcsProfile: \u0026datastream.ConnectionProfileGcsProfileArgs{\n\t\t\t\tBucket: bucket.Name,\n\t\t\t\tRootPath: pulumi.String(\"/path\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datastream.NewStream(ctx, \"default\", \u0026datastream.StreamArgs{\n\t\t\tStreamId: pulumi.String(\"my-stream\"),\n\t\t\tDesiredState: pulumi.String(\"NOT_STARTED\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDisplayName: pulumi.String(\"my stream\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"key\": pulumi.String(\"value\"),\n\t\t\t},\n\t\t\tSourceConfig: \u0026datastream.StreamSourceConfigArgs{\n\t\t\t\tSourceConnectionProfile: sourceConnectionProfile.ID(),\n\t\t\t\tMysqlSourceConfig: \u0026datastream.StreamSourceConfigMysqlSourceConfigArgs{\n\t\t\t\t\tIncludeObjects: \u0026datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsArgs{\n\t\t\t\t\t\tMysqlDatabases: datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseArray{\n\t\t\t\t\t\t\t\u0026datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseArgs{\n\t\t\t\t\t\t\t\tDatabase: pulumi.String(\"my-database\"),\n\t\t\t\t\t\t\t\tMysqlTables: datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableArray{\n\t\t\t\t\t\t\t\t\t\u0026datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableArgs{\n\t\t\t\t\t\t\t\t\t\tTable: pulumi.String(\"includedTable\"),\n\t\t\t\t\t\t\t\t\t\tMysqlColumns: datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableMysqlColumnArray{\n\t\t\t\t\t\t\t\t\t\t\t\u0026datastream.StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs{\n\t\t\t\t\t\t\t\t\t\t\t\tColumn: pulumi.String(\"includedColumn\"),\n\t\t\t\t\t\t\t\t\t\t\t\tDataType: pulumi.String(\"VARCHAR\"),\n\t\t\t\t\t\t\t\t\t\t\t\tCollation: pulumi.String(\"utf8mb4\"),\n\t\t\t\t\t\t\t\t\t\t\t\tPrimaryKey: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t\t\t\t\tNullable: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t\t\t\t\tOrdinalPosition: pulumi.Int(0),\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\tExcludeObjects: \u0026datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsArgs{\n\t\t\t\t\t\tMysqlDatabases: datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseArray{\n\t\t\t\t\t\t\t\u0026datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseArgs{\n\t\t\t\t\t\t\t\tDatabase: pulumi.String(\"my-database\"),\n\t\t\t\t\t\t\t\tMysqlTables: datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableArray{\n\t\t\t\t\t\t\t\t\t\u0026datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableArgs{\n\t\t\t\t\t\t\t\t\t\tTable: pulumi.String(\"excludedTable\"),\n\t\t\t\t\t\t\t\t\t\tMysqlColumns: datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableMysqlColumnArray{\n\t\t\t\t\t\t\t\t\t\t\t\u0026datastream.StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs{\n\t\t\t\t\t\t\t\t\t\t\t\tColumn: pulumi.String(\"excludedColumn\"),\n\t\t\t\t\t\t\t\t\t\t\t\tDataType: pulumi.String(\"VARCHAR\"),\n\t\t\t\t\t\t\t\t\t\t\t\tCollation: pulumi.String(\"utf8mb4\"),\n\t\t\t\t\t\t\t\t\t\t\t\tPrimaryKey: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t\t\t\t\tNullable: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t\t\t\t\tOrdinalPosition: pulumi.Int(0),\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\tMaxConcurrentCdcTasks: pulumi.Int(5),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDestinationConfig: \u0026datastream.StreamDestinationConfigArgs{\n\t\t\t\tDestinationConnectionProfile: destinationConnectionProfile.ID(),\n\t\t\t\tGcsDestinationConfig: \u0026datastream.StreamDestinationConfigGcsDestinationConfigArgs{\n\t\t\t\t\tPath: pulumi.String(\"mydata\"),\n\t\t\t\t\tFileRotationMb: pulumi.Int(200),\n\t\t\t\t\tFileRotationInterval: pulumi.String(\"900s\"),\n\t\t\t\t\tJsonFileFormat: \u0026datastream.StreamDestinationConfigGcsDestinationConfigJsonFileFormatArgs{\n\t\t\t\t\t\tSchemaFileFormat: pulumi.String(\"NO_SCHEMA_FILE\"),\n\t\t\t\t\t\tCompression: pulumi.String(\"GZIP\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tBackfillAll: \u0026datastream.StreamBackfillAllArgs{\n\t\t\t\tMysqlExcludedObjects: \u0026datastream.StreamBackfillAllMysqlExcludedObjectsArgs{\n\t\t\t\t\tMysqlDatabases: datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseArray{\n\t\t\t\t\t\t\u0026datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseArgs{\n\t\t\t\t\t\t\tDatabase: pulumi.String(\"my-database\"),\n\t\t\t\t\t\t\tMysqlTables: datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableArray{\n\t\t\t\t\t\t\t\t\u0026datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableArgs{\n\t\t\t\t\t\t\t\t\tTable: pulumi.String(\"excludedTable\"),\n\t\t\t\t\t\t\t\t\tMysqlColumns: datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableMysqlColumnArray{\n\t\t\t\t\t\t\t\t\t\t\u0026datastream.StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableMysqlColumnArgs{\n\t\t\t\t\t\t\t\t\t\t\tColumn: pulumi.String(\"excludedColumn\"),\n\t\t\t\t\t\t\t\t\t\t\tDataType: pulumi.String(\"VARCHAR\"),\n\t\t\t\t\t\t\t\t\t\t\tCollation: pulumi.String(\"utf8mb4\"),\n\t\t\t\t\t\t\t\t\t\t\tPrimaryKey: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t\t\t\tNullable: pulumi.Bool(false),\n\t\t\t\t\t\t\t\t\t\t\tOrdinalPosition: pulumi.Int(0),\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\tCustomerManagedEncryptionKey: pulumi.String(\"kms-name\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tkeyUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.inputs.DatabaseInstanceSettingsBackupConfigurationArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs;\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.datastream.ConnectionProfile;\nimport com.pulumi.gcp.datastream.ConnectionProfileArgs;\nimport com.pulumi.gcp.datastream.inputs.ConnectionProfileMysqlProfileArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketIAMMember;\nimport com.pulumi.gcp.storage.BucketIAMMemberArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.datastream.inputs.ConnectionProfileGcsProfileArgs;\nimport com.pulumi.gcp.datastream.Stream;\nimport com.pulumi.gcp.datastream.StreamArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamSourceConfigArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamSourceConfigMysqlSourceConfigArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamSourceConfigMysqlSourceConfigIncludeObjectsArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamSourceConfigMysqlSourceConfigExcludeObjectsArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamDestinationConfigArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamDestinationConfigGcsDestinationConfigArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamDestinationConfigGcsDestinationConfigJsonFileFormatArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamBackfillAllArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamBackfillAllMysqlExcludedObjectsArgs;\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 instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder() \n .databaseVersion(\"MYSQL_8_0\")\n .region(\"us-central1\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .backupConfiguration(DatabaseInstanceSettingsBackupConfigurationArgs.builder()\n .enabled(true)\n .binaryLogEnabled(true)\n .build())\n .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder()\n .authorizedNetworks( \n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.71.242.81\")\n .build(),\n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.72.28.29\")\n .build(),\n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.67.6.157\")\n .build(),\n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.67.234.134\")\n .build(),\n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.72.239.218\")\n .build())\n .build())\n .build())\n .deletionProtection(true)\n .build());\n\n var db = new Database(\"db\", DatabaseArgs.builder() \n .instance(instance.name())\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 .instance(instance.name())\n .host(\"%\")\n .password(pwd.result())\n .build());\n\n var sourceConnectionProfile = new ConnectionProfile(\"sourceConnectionProfile\", ConnectionProfileArgs.builder() \n .displayName(\"Source connection profile\")\n .location(\"us-central1\")\n .connectionProfileId(\"source-profile\")\n .mysqlProfile(ConnectionProfileMysqlProfileArgs.builder()\n .hostname(instance.publicIpAddress())\n .username(user.name())\n .password(user.password())\n .build())\n .build());\n\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .location(\"US\")\n .uniformBucketLevelAccess(true)\n .build());\n\n var viewer = new BucketIAMMember(\"viewer\", BucketIAMMemberArgs.builder() \n .bucket(bucket.name())\n .role(\"roles/storage.objectViewer\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-datastream.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var creator = new BucketIAMMember(\"creator\", BucketIAMMemberArgs.builder() \n .bucket(bucket.name())\n .role(\"roles/storage.objectCreator\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-datastream.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var reader = new BucketIAMMember(\"reader\", BucketIAMMemberArgs.builder() \n .bucket(bucket.name())\n .role(\"roles/storage.legacyBucketReader\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-datastream.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var keyUser = new CryptoKeyIAMMember(\"keyUser\", CryptoKeyIAMMemberArgs.builder() \n .cryptoKeyId(\"kms-name\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-datastream.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var destinationConnectionProfile = new ConnectionProfile(\"destinationConnectionProfile\", ConnectionProfileArgs.builder() \n .displayName(\"Connection profile\")\n .location(\"us-central1\")\n .connectionProfileId(\"destination-profile\")\n .gcsProfile(ConnectionProfileGcsProfileArgs.builder()\n .bucket(bucket.name())\n .rootPath(\"/path\")\n .build())\n .build());\n\n var default_ = new Stream(\"default\", StreamArgs.builder() \n .streamId(\"my-stream\")\n .desiredState(\"NOT_STARTED\")\n .location(\"us-central1\")\n .displayName(\"my stream\")\n .labels(Map.of(\"key\", \"value\"))\n .sourceConfig(StreamSourceConfigArgs.builder()\n .sourceConnectionProfile(sourceConnectionProfile.id())\n .mysqlSourceConfig(StreamSourceConfigMysqlSourceConfigArgs.builder()\n .includeObjects(StreamSourceConfigMysqlSourceConfigIncludeObjectsArgs.builder()\n .mysqlDatabases(StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseArgs.builder()\n .database(\"my-database\")\n .mysqlTables(StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableArgs.builder()\n .table(\"includedTable\")\n .mysqlColumns(StreamSourceConfigMysqlSourceConfigIncludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs.builder()\n .column(\"includedColumn\")\n .dataType(\"VARCHAR\")\n .collation(\"utf8mb4\")\n .primaryKey(false)\n .nullable(false)\n .ordinalPosition(0)\n .build())\n .build())\n .build())\n .build())\n .excludeObjects(StreamSourceConfigMysqlSourceConfigExcludeObjectsArgs.builder()\n .mysqlDatabases(StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseArgs.builder()\n .database(\"my-database\")\n .mysqlTables(StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableArgs.builder()\n .table(\"excludedTable\")\n .mysqlColumns(StreamSourceConfigMysqlSourceConfigExcludeObjectsMysqlDatabaseMysqlTableMysqlColumnArgs.builder()\n .column(\"excludedColumn\")\n .dataType(\"VARCHAR\")\n .collation(\"utf8mb4\")\n .primaryKey(false)\n .nullable(false)\n .ordinalPosition(0)\n .build())\n .build())\n .build())\n .build())\n .maxConcurrentCdcTasks(5)\n .build())\n .build())\n .destinationConfig(StreamDestinationConfigArgs.builder()\n .destinationConnectionProfile(destinationConnectionProfile.id())\n .gcsDestinationConfig(StreamDestinationConfigGcsDestinationConfigArgs.builder()\n .path(\"mydata\")\n .fileRotationMb(200)\n .fileRotationInterval(\"900s\")\n .jsonFileFormat(StreamDestinationConfigGcsDestinationConfigJsonFileFormatArgs.builder()\n .schemaFileFormat(\"NO_SCHEMA_FILE\")\n .compression(\"GZIP\")\n .build())\n .build())\n .build())\n .backfillAll(StreamBackfillAllArgs.builder()\n .mysqlExcludedObjects(StreamBackfillAllMysqlExcludedObjectsArgs.builder()\n .mysqlDatabases(StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseArgs.builder()\n .database(\"my-database\")\n .mysqlTables(StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableArgs.builder()\n .table(\"excludedTable\")\n .mysqlColumns(StreamBackfillAllMysqlExcludedObjectsMysqlDatabaseMysqlTableMysqlColumnArgs.builder()\n .column(\"excludedColumn\")\n .dataType(\"VARCHAR\")\n .collation(\"utf8mb4\")\n .primaryKey(false)\n .nullable(false)\n .ordinalPosition(0)\n .build())\n .build())\n .build())\n .build())\n .build())\n .customerManagedEncryptionKey(\"kms-name\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(keyUser)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n databaseVersion: MYSQL_8_0\n region: us-central1\n settings:\n tier: db-f1-micro\n backupConfiguration:\n enabled: true\n binaryLogEnabled: true\n ipConfiguration:\n authorizedNetworks:\n - value: 34.71.242.81\n - value: 34.72.28.29\n - value: 34.67.6.157\n - value: 34.67.234.134\n - value: 34.72.239.218\n deletionProtection: true\n db:\n type: gcp:sql:Database\n properties:\n instance: ${instance.name}\n pwd:\n type: random:RandomPassword\n properties:\n length: 16\n special: false\n user:\n type: gcp:sql:User\n properties:\n instance: ${instance.name}\n host: '%'\n password: ${pwd.result}\n sourceConnectionProfile:\n type: gcp:datastream:ConnectionProfile\n properties:\n displayName: Source connection profile\n location: us-central1\n connectionProfileId: source-profile\n mysqlProfile:\n hostname: ${instance.publicIpAddress}\n username: ${user.name}\n password: ${user.password}\n bucket:\n type: gcp:storage:Bucket\n properties:\n location: US\n uniformBucketLevelAccess: true\n viewer:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${bucket.name}\n role: roles/storage.objectViewer\n member: serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com\n creator:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${bucket.name}\n role: roles/storage.objectCreator\n member: serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com\n reader:\n type: gcp:storage:BucketIAMMember\n properties:\n bucket: ${bucket.name}\n role: roles/storage.legacyBucketReader\n member: serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com\n keyUser:\n type: gcp:kms:CryptoKeyIAMMember\n properties:\n cryptoKeyId: kms-name\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com\n destinationConnectionProfile:\n type: gcp:datastream:ConnectionProfile\n properties:\n displayName: Connection profile\n location: us-central1\n connectionProfileId: destination-profile\n gcsProfile:\n bucket: ${bucket.name}\n rootPath: /path\n default:\n type: gcp:datastream:Stream\n properties:\n streamId: my-stream\n desiredState: NOT_STARTED\n location: us-central1\n displayName: my stream\n labels:\n key: value\n sourceConfig:\n sourceConnectionProfile: ${sourceConnectionProfile.id}\n mysqlSourceConfig:\n includeObjects:\n mysqlDatabases:\n - database: my-database\n mysqlTables:\n - table: includedTable\n mysqlColumns:\n - column: includedColumn\n dataType: VARCHAR\n collation: utf8mb4\n primaryKey: false\n nullable: false\n ordinalPosition: 0\n excludeObjects:\n mysqlDatabases:\n - database: my-database\n mysqlTables:\n - table: excludedTable\n mysqlColumns:\n - column: excludedColumn\n dataType: VARCHAR\n collation: utf8mb4\n primaryKey: false\n nullable: false\n ordinalPosition: 0\n maxConcurrentCdcTasks: 5\n destinationConfig:\n destinationConnectionProfile: ${destinationConnectionProfile.id}\n gcsDestinationConfig:\n path: mydata\n fileRotationMb: 200\n fileRotationInterval: 900s\n jsonFileFormat:\n schemaFileFormat: NO_SCHEMA_FILE\n compression: GZIP\n backfillAll:\n mysqlExcludedObjects:\n mysqlDatabases:\n - database: my-database\n mysqlTables:\n - table: excludedTable\n mysqlColumns:\n - column: excludedColumn\n dataType: VARCHAR\n collation: utf8mb4\n primaryKey: false\n nullable: false\n ordinalPosition: 0\n customerManagedEncryptionKey: kms-name\n options:\n dependson:\n - ${keyUser}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Datastream Stream Bigquery\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst project = gcp.organizations.getProject({});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n databaseVersion: \"MYSQL_8_0\",\n region: \"us-central1\",\n settings: {\n tier: \"db-f1-micro\",\n backupConfiguration: {\n enabled: true,\n binaryLogEnabled: true,\n },\n ipConfiguration: {\n authorizedNetworks: [\n {\n value: \"34.71.242.81\",\n },\n {\n value: \"34.72.28.29\",\n },\n {\n value: \"34.67.6.157\",\n },\n {\n value: \"34.67.234.134\",\n },\n {\n value: \"34.72.239.218\",\n },\n ],\n },\n },\n deletionProtection: true,\n});\nconst db = new gcp.sql.Database(\"db\", {instance: instance.name});\nconst pwd = new random.RandomPassword(\"pwd\", {\n length: 16,\n special: false,\n});\nconst user = new gcp.sql.User(\"user\", {\n instance: instance.name,\n host: \"%\",\n password: pwd.result,\n});\nconst sourceConnectionProfile = new gcp.datastream.ConnectionProfile(\"sourceConnectionProfile\", {\n displayName: \"Source connection profile\",\n location: \"us-central1\",\n connectionProfileId: \"source-profile\",\n mysqlProfile: {\n hostname: instance.publicIpAddress,\n username: user.name,\n password: user.password,\n },\n});\nconst bqSa = gcp.bigquery.getDefaultServiceAccount({});\nconst bigqueryKeyUser = new gcp.kms.CryptoKeyIAMMember(\"bigqueryKeyUser\", {\n cryptoKeyId: \"bigquery-kms-name\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member: bqSa.then(bqSa =\u003e `serviceAccount:${bqSa.email}`),\n});\nconst destinationConnectionProfile = new gcp.datastream.ConnectionProfile(\"destinationConnectionProfile\", {\n displayName: \"Connection profile\",\n location: \"us-central1\",\n connectionProfileId: \"destination-profile\",\n bigqueryProfile: {},\n});\nconst _default = new gcp.datastream.Stream(\"default\", {\n streamId: \"my-stream\",\n location: \"us-central1\",\n displayName: \"my stream\",\n sourceConfig: {\n sourceConnectionProfile: sourceConnectionProfile.id,\n mysqlSourceConfig: {},\n },\n destinationConfig: {\n destinationConnectionProfile: destinationConnectionProfile.id,\n bigqueryDestinationConfig: {\n sourceHierarchyDatasets: {\n datasetTemplate: {\n location: \"us-central1\",\n kmsKeyName: \"bigquery-kms-name\",\n },\n },\n },\n },\n backfillNone: {},\n}, {\n dependsOn: [bigqueryKeyUser],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\nproject = gcp.organizations.get_project()\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n database_version=\"MYSQL_8_0\",\n region=\"us-central1\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n backup_configuration=gcp.sql.DatabaseInstanceSettingsBackupConfigurationArgs(\n enabled=True,\n binary_log_enabled=True,\n ),\n ip_configuration=gcp.sql.DatabaseInstanceSettingsIpConfigurationArgs(\n authorized_networks=[\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.71.242.81\",\n ),\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.72.28.29\",\n ),\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.67.6.157\",\n ),\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.67.234.134\",\n ),\n gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs(\n value=\"34.72.239.218\",\n ),\n ],\n ),\n ),\n deletion_protection=True)\ndb = gcp.sql.Database(\"db\", instance=instance.name)\npwd = random.RandomPassword(\"pwd\",\n length=16,\n special=False)\nuser = gcp.sql.User(\"user\",\n instance=instance.name,\n host=\"%\",\n password=pwd.result)\nsource_connection_profile = gcp.datastream.ConnectionProfile(\"sourceConnectionProfile\",\n display_name=\"Source connection profile\",\n location=\"us-central1\",\n connection_profile_id=\"source-profile\",\n mysql_profile=gcp.datastream.ConnectionProfileMysqlProfileArgs(\n hostname=instance.public_ip_address,\n username=user.name,\n password=user.password,\n ))\nbq_sa = gcp.bigquery.get_default_service_account()\nbigquery_key_user = gcp.kms.CryptoKeyIAMMember(\"bigqueryKeyUser\",\n crypto_key_id=\"bigquery-kms-name\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n member=f\"serviceAccount:{bq_sa.email}\")\ndestination_connection_profile = gcp.datastream.ConnectionProfile(\"destinationConnectionProfile\",\n display_name=\"Connection profile\",\n location=\"us-central1\",\n connection_profile_id=\"destination-profile\",\n bigquery_profile=gcp.datastream.ConnectionProfileBigqueryProfileArgs())\ndefault = gcp.datastream.Stream(\"default\",\n stream_id=\"my-stream\",\n location=\"us-central1\",\n display_name=\"my stream\",\n source_config=gcp.datastream.StreamSourceConfigArgs(\n source_connection_profile=source_connection_profile.id,\n mysql_source_config=gcp.datastream.StreamSourceConfigMysqlSourceConfigArgs(),\n ),\n destination_config=gcp.datastream.StreamDestinationConfigArgs(\n destination_connection_profile=destination_connection_profile.id,\n bigquery_destination_config=gcp.datastream.StreamDestinationConfigBigqueryDestinationConfigArgs(\n source_hierarchy_datasets=gcp.datastream.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsArgs(\n dataset_template=gcp.datastream.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs(\n location=\"us-central1\",\n kms_key_name=\"bigquery-kms-name\",\n ),\n ),\n ),\n ),\n backfill_none=gcp.datastream.StreamBackfillNoneArgs(),\n opts=pulumi.ResourceOptions(depends_on=[bigquery_key_user]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\n DatabaseVersion = \"MYSQL_8_0\",\n Region = \"us-central1\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n BackupConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsBackupConfigurationArgs\n {\n Enabled = true,\n BinaryLogEnabled = true,\n },\n IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs\n {\n AuthorizedNetworks = new[]\n {\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.71.242.81\",\n },\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.72.28.29\",\n },\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.67.6.157\",\n },\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.67.234.134\",\n },\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs\n {\n Value = \"34.72.239.218\",\n },\n },\n },\n },\n DeletionProtection = true,\n });\n\n var db = new Gcp.Sql.Database(\"db\", new()\n {\n Instance = instance.Name,\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 Instance = instance.Name,\n Host = \"%\",\n Password = pwd.Result,\n });\n\n var sourceConnectionProfile = new Gcp.Datastream.ConnectionProfile(\"sourceConnectionProfile\", new()\n {\n DisplayName = \"Source connection profile\",\n Location = \"us-central1\",\n ConnectionProfileId = \"source-profile\",\n MysqlProfile = new Gcp.Datastream.Inputs.ConnectionProfileMysqlProfileArgs\n {\n Hostname = instance.PublicIpAddress,\n Username = user.Name,\n Password = user.Password,\n },\n });\n\n var bqSa = Gcp.BigQuery.GetDefaultServiceAccount.Invoke();\n\n var bigqueryKeyUser = new Gcp.Kms.CryptoKeyIAMMember(\"bigqueryKeyUser\", new()\n {\n CryptoKeyId = \"bigquery-kms-name\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Member = $\"serviceAccount:{bqSa.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Email)}\",\n });\n\n var destinationConnectionProfile = new Gcp.Datastream.ConnectionProfile(\"destinationConnectionProfile\", new()\n {\n DisplayName = \"Connection profile\",\n Location = \"us-central1\",\n ConnectionProfileId = \"destination-profile\",\n BigqueryProfile = null,\n });\n\n var @default = new Gcp.Datastream.Stream(\"default\", new()\n {\n StreamId = \"my-stream\",\n Location = \"us-central1\",\n DisplayName = \"my stream\",\n SourceConfig = new Gcp.Datastream.Inputs.StreamSourceConfigArgs\n {\n SourceConnectionProfile = sourceConnectionProfile.Id,\n MysqlSourceConfig = null,\n },\n DestinationConfig = new Gcp.Datastream.Inputs.StreamDestinationConfigArgs\n {\n DestinationConnectionProfile = destinationConnectionProfile.Id,\n BigqueryDestinationConfig = new Gcp.Datastream.Inputs.StreamDestinationConfigBigqueryDestinationConfigArgs\n {\n SourceHierarchyDatasets = new Gcp.Datastream.Inputs.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsArgs\n {\n DatasetTemplate = new Gcp.Datastream.Inputs.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs\n {\n Location = \"us-central1\",\n KmsKeyName = \"bigquery-kms-name\",\n },\n },\n },\n },\n BackfillNone = null,\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n bigqueryKeyUser,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datastream\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tinstance, err := sql.NewDatabaseInstance(ctx, \"instance\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0\"),\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\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\tIpConfiguration: \u0026sql.DatabaseInstanceSettingsIpConfigurationArgs{\n\t\t\t\t\tAuthorizedNetworks: sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArray{\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.71.242.81\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.72.28.29\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.67.6.157\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.67.234.134\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{\n\t\t\t\t\t\t\tValue: pulumi.String(\"34.72.239.218\"),\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\tDeletionProtection: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sql.NewDatabase(ctx, \"db\", \u0026sql.DatabaseArgs{\n\t\t\tInstance: instance.Name,\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\tInstance: instance.Name,\n\t\t\tHost: pulumi.String(\"%\"),\n\t\t\tPassword: pwd.Result,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsourceConnectionProfile, err := datastream.NewConnectionProfile(ctx, \"sourceConnectionProfile\", \u0026datastream.ConnectionProfileArgs{\n\t\t\tDisplayName: pulumi.String(\"Source connection profile\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"source-profile\"),\n\t\t\tMysqlProfile: \u0026datastream.ConnectionProfileMysqlProfileArgs{\n\t\t\t\tHostname: instance.PublicIpAddress,\n\t\t\t\tUsername: user.Name,\n\t\t\t\tPassword: user.Password,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqSa, err := bigquery.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbigqueryKeyUser, err := kms.NewCryptoKeyIAMMember(ctx, \"bigqueryKeyUser\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"bigquery-kms-name\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:%v\", bqSa.Email)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdestinationConnectionProfile, err := datastream.NewConnectionProfile(ctx, \"destinationConnectionProfile\", \u0026datastream.ConnectionProfileArgs{\n\t\t\tDisplayName: pulumi.String(\"Connection profile\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tConnectionProfileId: pulumi.String(\"destination-profile\"),\n\t\t\tBigqueryProfile: nil,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datastream.NewStream(ctx, \"default\", \u0026datastream.StreamArgs{\n\t\t\tStreamId: pulumi.String(\"my-stream\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tDisplayName: pulumi.String(\"my stream\"),\n\t\t\tSourceConfig: \u0026datastream.StreamSourceConfigArgs{\n\t\t\t\tSourceConnectionProfile: sourceConnectionProfile.ID(),\n\t\t\t\tMysqlSourceConfig: nil,\n\t\t\t},\n\t\t\tDestinationConfig: \u0026datastream.StreamDestinationConfigArgs{\n\t\t\t\tDestinationConnectionProfile: destinationConnectionProfile.ID(),\n\t\t\t\tBigqueryDestinationConfig: \u0026datastream.StreamDestinationConfigBigqueryDestinationConfigArgs{\n\t\t\t\t\tSourceHierarchyDatasets: \u0026datastream.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsArgs{\n\t\t\t\t\t\tDatasetTemplate: \u0026datastream.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs{\n\t\t\t\t\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\t\t\t\t\tKmsKeyName: pulumi.String(\"bigquery-kms-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\tBackfillNone: nil,\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tbigqueryKeyUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.inputs.DatabaseInstanceSettingsBackupConfigurationArgs;\nimport com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs;\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.datastream.ConnectionProfile;\nimport com.pulumi.gcp.datastream.ConnectionProfileArgs;\nimport com.pulumi.gcp.datastream.inputs.ConnectionProfileMysqlProfileArgs;\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.datastream.inputs.ConnectionProfileBigqueryProfileArgs;\nimport com.pulumi.gcp.datastream.Stream;\nimport com.pulumi.gcp.datastream.StreamArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamSourceConfigArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamSourceConfigMysqlSourceConfigArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamDestinationConfigArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamDestinationConfigBigqueryDestinationConfigArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs;\nimport com.pulumi.gcp.datastream.inputs.StreamBackfillNoneArgs;\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 instance = new DatabaseInstance(\"instance\", DatabaseInstanceArgs.builder() \n .databaseVersion(\"MYSQL_8_0\")\n .region(\"us-central1\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .backupConfiguration(DatabaseInstanceSettingsBackupConfigurationArgs.builder()\n .enabled(true)\n .binaryLogEnabled(true)\n .build())\n .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder()\n .authorizedNetworks( \n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.71.242.81\")\n .build(),\n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.72.28.29\")\n .build(),\n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.67.6.157\")\n .build(),\n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.67.234.134\")\n .build(),\n DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder()\n .value(\"34.72.239.218\")\n .build())\n .build())\n .build())\n .deletionProtection(true)\n .build());\n\n var db = new Database(\"db\", DatabaseArgs.builder() \n .instance(instance.name())\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 .instance(instance.name())\n .host(\"%\")\n .password(pwd.result())\n .build());\n\n var sourceConnectionProfile = new ConnectionProfile(\"sourceConnectionProfile\", ConnectionProfileArgs.builder() \n .displayName(\"Source connection profile\")\n .location(\"us-central1\")\n .connectionProfileId(\"source-profile\")\n .mysqlProfile(ConnectionProfileMysqlProfileArgs.builder()\n .hostname(instance.publicIpAddress())\n .username(user.name())\n .password(user.password())\n .build())\n .build());\n\n final var bqSa = BigqueryFunctions.getDefaultServiceAccount();\n\n var bigqueryKeyUser = new CryptoKeyIAMMember(\"bigqueryKeyUser\", CryptoKeyIAMMemberArgs.builder() \n .cryptoKeyId(\"bigquery-kms-name\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .member(String.format(\"serviceAccount:%s\", bqSa.applyValue(getDefaultServiceAccountResult -\u003e getDefaultServiceAccountResult.email())))\n .build());\n\n var destinationConnectionProfile = new ConnectionProfile(\"destinationConnectionProfile\", ConnectionProfileArgs.builder() \n .displayName(\"Connection profile\")\n .location(\"us-central1\")\n .connectionProfileId(\"destination-profile\")\n .bigqueryProfile()\n .build());\n\n var default_ = new Stream(\"default\", StreamArgs.builder() \n .streamId(\"my-stream\")\n .location(\"us-central1\")\n .displayName(\"my stream\")\n .sourceConfig(StreamSourceConfigArgs.builder()\n .sourceConnectionProfile(sourceConnectionProfile.id())\n .mysqlSourceConfig()\n .build())\n .destinationConfig(StreamDestinationConfigArgs.builder()\n .destinationConnectionProfile(destinationConnectionProfile.id())\n .bigqueryDestinationConfig(StreamDestinationConfigBigqueryDestinationConfigArgs.builder()\n .sourceHierarchyDatasets(StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsArgs.builder()\n .datasetTemplate(StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs.builder()\n .location(\"us-central1\")\n .kmsKeyName(\"bigquery-kms-name\")\n .build())\n .build())\n .build())\n .build())\n .backfillNone()\n .build(), CustomResourceOptions.builder()\n .dependsOn(bigqueryKeyUser)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n databaseVersion: MYSQL_8_0\n region: us-central1\n settings:\n tier: db-f1-micro\n backupConfiguration:\n enabled: true\n binaryLogEnabled: true\n ipConfiguration:\n authorizedNetworks:\n - value: 34.71.242.81\n - value: 34.72.28.29\n - value: 34.67.6.157\n - value: 34.67.234.134\n - value: 34.72.239.218\n deletionProtection: true\n db:\n type: gcp:sql:Database\n properties:\n instance: ${instance.name}\n pwd:\n type: random:RandomPassword\n properties:\n length: 16\n special: false\n user:\n type: gcp:sql:User\n properties:\n instance: ${instance.name}\n host: '%'\n password: ${pwd.result}\n sourceConnectionProfile:\n type: gcp:datastream:ConnectionProfile\n properties:\n displayName: Source connection profile\n location: us-central1\n connectionProfileId: source-profile\n mysqlProfile:\n hostname: ${instance.publicIpAddress}\n username: ${user.name}\n password: ${user.password}\n bigqueryKeyUser:\n type: gcp:kms:CryptoKeyIAMMember\n properties:\n cryptoKeyId: bigquery-kms-name\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n member: serviceAccount:${bqSa.email}\n destinationConnectionProfile:\n type: gcp:datastream:ConnectionProfile\n properties:\n displayName: Connection profile\n location: us-central1\n connectionProfileId: destination-profile\n bigqueryProfile: {}\n default:\n type: gcp:datastream:Stream\n properties:\n streamId: my-stream\n location: us-central1\n displayName: my stream\n sourceConfig:\n sourceConnectionProfile: ${sourceConnectionProfile.id}\n mysqlSourceConfig: {}\n destinationConfig:\n destinationConnectionProfile: ${destinationConnectionProfile.id}\n bigqueryDestinationConfig:\n sourceHierarchyDatasets:\n datasetTemplate:\n location: us-central1\n kmsKeyName: bigquery-kms-name\n backfillNone: {}\n options:\n dependson:\n - ${bigqueryKeyUser}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n bqSa:\n fn::invoke:\n Function: gcp:bigquery:getDefaultServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nStream can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:datastream/stream:Stream default projects/{{project}}/locations/{{location}}/streams/{{stream_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:datastream/stream:Stream default {{project}}/{{location}}/{{stream_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:datastream/stream:Stream default {{location}}/{{stream_id}}\n```\n\n ", "properties": { "backfillAll": { "$ref": "#/types/gcp:datastream/StreamBackfillAll:StreamBackfillAll", @@ -156965,6 +158398,10 @@ "$ref": "#/types/gcp:datastream/StreamBackfillNone:StreamBackfillNone", "description": "Backfill strategy to disable automatic backfill for the Stream's objects.\n" }, + "customerManagedEncryptionKey": { + "type": "string", + "description": "A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data\nwill be encrypted using an internal Stream-specific encryption key provisioned through KMS.\n" + }, "desiredState": { "type": "string", "description": "Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream.\n" @@ -157028,6 +158465,11 @@ "$ref": "#/types/gcp:datastream/StreamBackfillNone:StreamBackfillNone", "description": "Backfill strategy to disable automatic backfill for the Stream's objects.\n" }, + "customerManagedEncryptionKey": { + "type": "string", + "description": "A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data\nwill be encrypted using an internal Stream-specific encryption key provisioned through KMS.\n", + "willReplaceOnChanges": true + }, "desiredState": { "type": "string", "description": "Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream.\n" @@ -157085,6 +158527,11 @@ "$ref": "#/types/gcp:datastream/StreamBackfillNone:StreamBackfillNone", "description": "Backfill strategy to disable automatic backfill for the Stream's objects.\n" }, + "customerManagedEncryptionKey": { + "type": "string", + "description": "A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data\nwill be encrypted using an internal Stream-specific encryption key provisioned through KMS.\n", + "willReplaceOnChanges": true + }, "desiredState": { "type": "string", "description": "Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream.\n" @@ -157136,7 +158583,7 @@ } }, "gcp:deploymentmanager/deployment:Deployment": { - "description": "A collection of resources that are deployed and managed together using\na configuration file\n\n\n\n\u003e **Warning:** This resource is intended only to manage a Deployment resource,\nand attempts to manage the Deployment's resources in the provider as well\nwill likely result in errors or unexpected behavior as the two tools\nfight over ownership. We strongly discourage doing so unless you are an\nexperienced user of both tools.\n\nIn addition, due to limitations of the API, the provider will treat\ndeployments in preview as recreate-only for any update operation other\nthan actually deploying an in-preview deployment (i.e. `preview=true` to\n`preview=false`).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Deployment Manager Deployment Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst deployment = new gcp.deploymentmanager.Deployment(\"deployment\", {\n target: {\n config: {\n content: fs.readFileSync(\"path/to/config.yml\"),\n },\n },\n labels: [{\n key: \"foo\",\n value: \"bar\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndeployment = gcp.deploymentmanager.Deployment(\"deployment\",\n target=gcp.deploymentmanager.DeploymentTargetArgs(\n config=gcp.deploymentmanager.DeploymentTargetConfigArgs(\n content=(lambda path: open(path).read())(\"path/to/config.yml\"),\n ),\n ),\n labels=[gcp.deploymentmanager.DeploymentLabelArgs(\n key=\"foo\",\n value=\"bar\",\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var deployment = new Gcp.DeploymentManager.Deployment(\"deployment\", new()\n {\n Target = new Gcp.DeploymentManager.Inputs.DeploymentTargetArgs\n {\n Config = new Gcp.DeploymentManager.Inputs.DeploymentTargetConfigArgs\n {\n Content = File.ReadAllText(\"path/to/config.yml\"),\n },\n },\n Labels = new[]\n {\n new Gcp.DeploymentManager.Inputs.DeploymentLabelArgs\n {\n Key = \"foo\",\n Value = \"bar\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/deploymentmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := deploymentmanager.NewDeployment(ctx, \"deployment\", \u0026deploymentmanager.DeploymentArgs{\n\t\t\tTarget: \u0026deploymentmanager.DeploymentTargetArgs{\n\t\t\t\tConfig: \u0026deploymentmanager.DeploymentTargetConfigArgs{\n\t\t\t\t\tContent: readFileOrPanic(\"path/to/config.yml\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: deploymentmanager.DeploymentLabelArray{\n\t\t\t\t\u0026deploymentmanager.DeploymentLabelArgs{\n\t\t\t\t\tKey: pulumi.String(\"foo\"),\n\t\t\t\t\tValue: pulumi.String(\"bar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.deploymentmanager.Deployment;\nimport com.pulumi.gcp.deploymentmanager.DeploymentArgs;\nimport com.pulumi.gcp.deploymentmanager.inputs.DeploymentTargetArgs;\nimport com.pulumi.gcp.deploymentmanager.inputs.DeploymentTargetConfigArgs;\nimport com.pulumi.gcp.deploymentmanager.inputs.DeploymentLabelArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var deployment = new Deployment(\"deployment\", DeploymentArgs.builder() \n .target(DeploymentTargetArgs.builder()\n .config(DeploymentTargetConfigArgs.builder()\n .content(Files.readString(Paths.get(\"path/to/config.yml\")))\n .build())\n .build())\n .labels(DeploymentLabelArgs.builder()\n .key(\"foo\")\n .value(\"bar\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n deployment:\n type: gcp:deploymentmanager:Deployment\n properties:\n target:\n config:\n content:\n fn::readFile: path/to/config.yml\n labels:\n - key: foo\n value: bar\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDeployment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:deploymentmanager/deployment:Deployment default projects/{{project}}/deployments/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:deploymentmanager/deployment:Deployment default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:deploymentmanager/deployment:Deployment default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Deployment Manager Deployment Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as fs from \"fs\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst deployment = new gcp.deploymentmanager.Deployment(\"deployment\", {\n target: {\n config: {\n content: fs.readFileSync(\"path/to/config.yml\"),\n },\n },\n labels: [{\n key: \"foo\",\n value: \"bar\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndeployment = gcp.deploymentmanager.Deployment(\"deployment\",\n target=gcp.deploymentmanager.DeploymentTargetArgs(\n config=gcp.deploymentmanager.DeploymentTargetConfigArgs(\n content=(lambda path: open(path).read())(\"path/to/config.yml\"),\n ),\n ),\n labels=[gcp.deploymentmanager.DeploymentLabelArgs(\n key=\"foo\",\n value=\"bar\",\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.IO;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var deployment = new Gcp.DeploymentManager.Deployment(\"deployment\", new()\n {\n Target = new Gcp.DeploymentManager.Inputs.DeploymentTargetArgs\n {\n Config = new Gcp.DeploymentManager.Inputs.DeploymentTargetConfigArgs\n {\n Content = File.ReadAllText(\"path/to/config.yml\"),\n },\n },\n Labels = new[]\n {\n new Gcp.DeploymentManager.Inputs.DeploymentLabelArgs\n {\n Key = \"foo\",\n Value = \"bar\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"os\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/deploymentmanager\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc readFileOrPanic(path string) pulumi.StringPtrInput {\n\tdata, err := os.ReadFile(path)\n\tif err != nil {\n\t\tpanic(err.Error())\n\t}\n\treturn pulumi.String(string(data))\n}\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := deploymentmanager.NewDeployment(ctx, \"deployment\", \u0026deploymentmanager.DeploymentArgs{\n\t\t\tTarget: \u0026deploymentmanager.DeploymentTargetArgs{\n\t\t\t\tConfig: \u0026deploymentmanager.DeploymentTargetConfigArgs{\n\t\t\t\t\tContent: readFileOrPanic(\"path/to/config.yml\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: deploymentmanager.DeploymentLabelArray{\n\t\t\t\t\u0026deploymentmanager.DeploymentLabelArgs{\n\t\t\t\t\tKey: pulumi.String(\"foo\"),\n\t\t\t\t\tValue: pulumi.String(\"bar\"),\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.deploymentmanager.Deployment;\nimport com.pulumi.gcp.deploymentmanager.DeploymentArgs;\nimport com.pulumi.gcp.deploymentmanager.inputs.DeploymentTargetArgs;\nimport com.pulumi.gcp.deploymentmanager.inputs.DeploymentTargetConfigArgs;\nimport com.pulumi.gcp.deploymentmanager.inputs.DeploymentLabelArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var deployment = new Deployment(\"deployment\", DeploymentArgs.builder() \n .target(DeploymentTargetArgs.builder()\n .config(DeploymentTargetConfigArgs.builder()\n .content(Files.readString(Paths.get(\"path/to/config.yml\")))\n .build())\n .build())\n .labels(DeploymentLabelArgs.builder()\n .key(\"foo\")\n .value(\"bar\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n deployment:\n type: gcp:deploymentmanager:Deployment\n properties:\n target:\n config:\n content:\n fn::readFile: path/to/config.yml\n labels:\n - key: foo\n value: bar\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDeployment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:deploymentmanager/deployment:Deployment default projects/{{project}}/deployments/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:deploymentmanager/deployment:Deployment default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:deploymentmanager/deployment:Deployment default {{name}}\n```\n\n ", "properties": { "createPolicy": { "type": "string", @@ -157171,7 +158618,7 @@ }, "preview": { "type": "boolean", - "description": "If set to true, a deployment is created with \"shell\" resources\nthat are not actually instantiated. This allows you to preview a\ndeployment. It can be updated to false to actually deploy\nwith real resources.\n~\u003e**NOTE:** Deployment Manager does not allow update\nof a deployment in preview (unless updating to preview=false). Thus,\nthe provider will force-recreate deployments if either preview is updated\nto true or if other fields are updated while preview is true.\n" + "description": "If set to true, a deployment is created with \"shell\" resources that are not actually instantiated. This allows you to\npreview a deployment. It can be updated to false to actually deploy with real resources. ~\u003e**NOTE:** Deployment Manager\ndoes not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate\ndeployments if either preview is updated to true or if other fields are updated while preview is true.\n" }, "project": { "type": "string", @@ -157223,7 +158670,7 @@ }, "preview": { "type": "boolean", - "description": "If set to true, a deployment is created with \"shell\" resources\nthat are not actually instantiated. This allows you to preview a\ndeployment. It can be updated to false to actually deploy\nwith real resources.\n~\u003e**NOTE:** Deployment Manager does not allow update\nof a deployment in preview (unless updating to preview=false). Thus,\nthe provider will force-recreate deployments if either preview is updated\nto true or if other fields are updated while preview is true.\n" + "description": "If set to true, a deployment is created with \"shell\" resources that are not actually instantiated. This allows you to\npreview a deployment. It can be updated to false to actually deploy with real resources. ~\u003e**NOTE:** Deployment Manager\ndoes not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate\ndeployments if either preview is updated to true or if other fields are updated while preview is true.\n" }, "project": { "type": "string", @@ -157277,7 +158724,7 @@ }, "preview": { "type": "boolean", - "description": "If set to true, a deployment is created with \"shell\" resources\nthat are not actually instantiated. This allows you to preview a\ndeployment. It can be updated to false to actually deploy\nwith real resources.\n~\u003e**NOTE:** Deployment Manager does not allow update\nof a deployment in preview (unless updating to preview=false). Thus,\nthe provider will force-recreate deployments if either preview is updated\nto true or if other fields are updated while preview is true.\n" + "description": "If set to true, a deployment is created with \"shell\" resources that are not actually instantiated. This allows you to\npreview a deployment. It can be updated to false to actually deploy with real resources. ~\u003e**NOTE:** Deployment Manager\ndoes not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate\ndeployments if either preview is updated to true or if other fields are updated while preview is true.\n" }, "project": { "type": "string", @@ -157348,7 +158795,7 @@ }, "tier": { "type": "string", - "description": "The agent tier. If not specified, TIER_STANDARD is assumed.\n* TIER_STANDARD: Standard tier.\n* TIER_ENTERPRISE: Enterprise tier (Essentials).\n* TIER_ENTERPRISE_PLUS: Enterprise tier (Plus).\nNOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between\nthe the provider state and Dialogflow if the agent tier is changed outside of the provider.\n" + "description": "The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE:\nEnterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the\nprovider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the\nagent tier is changed outside of Terraform. Possible values: [\"TIER_STANDARD\", \"TIER_ENTERPRISE\",\n\"TIER_ENTERPRISE_PLUS\"]\n" }, "timeZone": { "type": "string", @@ -157412,7 +158859,7 @@ }, "tier": { "type": "string", - "description": "The agent tier. If not specified, TIER_STANDARD is assumed.\n* TIER_STANDARD: Standard tier.\n* TIER_ENTERPRISE: Enterprise tier (Essentials).\n* TIER_ENTERPRISE_PLUS: Enterprise tier (Plus).\nNOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between\nthe the provider state and Dialogflow if the agent tier is changed outside of the provider.\n" + "description": "The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE:\nEnterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the\nprovider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the\nagent tier is changed outside of Terraform. Possible values: [\"TIER_STANDARD\", \"TIER_ENTERPRISE\",\n\"TIER_ENTERPRISE_PLUS\"]\n" }, "timeZone": { "type": "string", @@ -157478,7 +158925,7 @@ }, "tier": { "type": "string", - "description": "The agent tier. If not specified, TIER_STANDARD is assumed.\n* TIER_STANDARD: Standard tier.\n* TIER_ENTERPRISE: Enterprise tier (Essentials).\n* TIER_ENTERPRISE_PLUS: Enterprise tier (Plus).\nNOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between\nthe the provider state and Dialogflow if the agent tier is changed outside of the provider.\n" + "description": "The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE:\nEnterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the\nprovider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the\nagent tier is changed outside of Terraform. Possible values: [\"TIER_STANDARD\", \"TIER_ENTERPRISE\",\n\"TIER_ENTERPRISE_PLUS\"]\n" }, "timeZone": { "type": "string", @@ -158878,7 +160325,7 @@ } }, "gcp:diagflow/intent:Intent": { - "description": "Represents a Dialogflow intent. Intents convert a number of user expressions or patterns into an action. An action\nis an extraction of a user command or sentence semantics.\n\n\nTo get more information about Intent, see:\n\n* [API documentation](https://cloud.google.com/dialogflow/docs/reference/rest/v2/projects.agent.intents)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/dialogflow/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Dialogflow Intent Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicAgent = new gcp.diagflow.Agent(\"basicAgent\", {\n displayName: \"example_agent\",\n defaultLanguageCode: \"en\",\n timeZone: \"America/New_York\",\n});\nconst basicIntent = new gcp.diagflow.Intent(\"basicIntent\", {displayName: \"basic-intent\"}, {\n dependsOn: [basicAgent],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_agent = gcp.diagflow.Agent(\"basicAgent\",\n display_name=\"example_agent\",\n default_language_code=\"en\",\n time_zone=\"America/New_York\")\nbasic_intent = gcp.diagflow.Intent(\"basicIntent\", display_name=\"basic-intent\",\nopts=pulumi.ResourceOptions(depends_on=[basic_agent]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicAgent = new Gcp.Diagflow.Agent(\"basicAgent\", new()\n {\n DisplayName = \"example_agent\",\n DefaultLanguageCode = \"en\",\n TimeZone = \"America/New_York\",\n });\n\n var basicIntent = new Gcp.Diagflow.Intent(\"basicIntent\", new()\n {\n DisplayName = \"basic-intent\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n basicAgent,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/diagflow\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicAgent, err := diagflow.NewAgent(ctx, \"basicAgent\", \u0026diagflow.AgentArgs{\n\t\t\tDisplayName: pulumi.String(\"example_agent\"),\n\t\t\tDefaultLanguageCode: pulumi.String(\"en\"),\n\t\t\tTimeZone: pulumi.String(\"America/New_York\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = diagflow.NewIntent(ctx, \"basicIntent\", \u0026diagflow.IntentArgs{\n\t\t\tDisplayName: pulumi.String(\"basic-intent\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tbasicAgent,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.diagflow.Agent;\nimport com.pulumi.gcp.diagflow.AgentArgs;\nimport com.pulumi.gcp.diagflow.Intent;\nimport com.pulumi.gcp.diagflow.IntentArgs;\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 basicAgent = new Agent(\"basicAgent\", AgentArgs.builder() \n .displayName(\"example_agent\")\n .defaultLanguageCode(\"en\")\n .timeZone(\"America/New_York\")\n .build());\n\n var basicIntent = new Intent(\"basicIntent\", IntentArgs.builder() \n .displayName(\"basic-intent\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(basicAgent)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicAgent:\n type: gcp:diagflow:Agent\n properties:\n displayName: example_agent\n defaultLanguageCode: en\n timeZone: America/New_York\n basicIntent:\n type: gcp:diagflow:Intent\n properties:\n displayName: basic-intent\n options:\n dependson:\n - ${basicAgent}\n```\n{{% /example %}}\n{{% example %}}\n### Dialogflow Intent Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst agentProjectProject = new gcp.organizations.Project(\"agentProjectProject\", {\n projectId: \"tf-test-dialogflow\",\n orgId: \"123456789\",\n});\nconst agentProjectService = new gcp.projects.Service(\"agentProjectService\", {\n project: agentProjectProject.projectId,\n service: \"dialogflow.googleapis.com\",\n disableDependentServices: false,\n});\nconst dialogflowServiceAccount = new gcp.serviceaccount.Account(\"dialogflowServiceAccount\", {accountId: \"tf-test-dialogflow\"});\nconst agentCreate = new gcp.projects.IAMMember(\"agentCreate\", {\n project: agentProjectService.project,\n role: \"roles/dialogflow.admin\",\n member: pulumi.interpolate`serviceAccount:${dialogflowServiceAccount.email}`,\n});\nconst basicAgent = new gcp.diagflow.Agent(\"basicAgent\", {\n project: agentProjectProject.projectId,\n displayName: \"example_agent\",\n defaultLanguageCode: \"en\",\n timeZone: \"America/New_York\",\n});\nconst fullIntent = new gcp.diagflow.Intent(\"fullIntent\", {\n project: agentProjectProject.projectId,\n displayName: \"full-intent\",\n webhookState: \"WEBHOOK_STATE_ENABLED\",\n priority: 1,\n isFallback: false,\n mlDisabled: true,\n action: \"some_action\",\n resetContexts: true,\n inputContextNames: [pulumi.interpolate`projects/${agentProjectProject.projectId}/agent/sessions/-/contexts/some_id`],\n events: [\"some_event\"],\n defaultResponsePlatforms: [\n \"FACEBOOK\",\n \"SLACK\",\n ],\n}, {\n dependsOn: [basicAgent],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nagent_project_project = gcp.organizations.Project(\"agentProjectProject\",\n project_id=\"tf-test-dialogflow\",\n org_id=\"123456789\")\nagent_project_service = gcp.projects.Service(\"agentProjectService\",\n project=agent_project_project.project_id,\n service=\"dialogflow.googleapis.com\",\n disable_dependent_services=False)\ndialogflow_service_account = gcp.service_account.Account(\"dialogflowServiceAccount\", account_id=\"tf-test-dialogflow\")\nagent_create = gcp.projects.IAMMember(\"agentCreate\",\n project=agent_project_service.project,\n role=\"roles/dialogflow.admin\",\n member=dialogflow_service_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\nbasic_agent = gcp.diagflow.Agent(\"basicAgent\",\n project=agent_project_project.project_id,\n display_name=\"example_agent\",\n default_language_code=\"en\",\n time_zone=\"America/New_York\")\nfull_intent = gcp.diagflow.Intent(\"fullIntent\",\n project=agent_project_project.project_id,\n display_name=\"full-intent\",\n webhook_state=\"WEBHOOK_STATE_ENABLED\",\n priority=1,\n is_fallback=False,\n ml_disabled=True,\n action=\"some_action\",\n reset_contexts=True,\n input_context_names=[agent_project_project.project_id.apply(lambda project_id: f\"projects/{project_id}/agent/sessions/-/contexts/some_id\")],\n events=[\"some_event\"],\n default_response_platforms=[\n \"FACEBOOK\",\n \"SLACK\",\n ],\n opts=pulumi.ResourceOptions(depends_on=[basic_agent]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var agentProjectProject = new Gcp.Organizations.Project(\"agentProjectProject\", new()\n {\n ProjectId = \"tf-test-dialogflow\",\n OrgId = \"123456789\",\n });\n\n var agentProjectService = new Gcp.Projects.Service(\"agentProjectService\", new()\n {\n Project = agentProjectProject.ProjectId,\n ServiceName = \"dialogflow.googleapis.com\",\n DisableDependentServices = false,\n });\n\n var dialogflowServiceAccount = new Gcp.ServiceAccount.Account(\"dialogflowServiceAccount\", new()\n {\n AccountId = \"tf-test-dialogflow\",\n });\n\n var agentCreate = new Gcp.Projects.IAMMember(\"agentCreate\", new()\n {\n Project = agentProjectService.Project,\n Role = \"roles/dialogflow.admin\",\n Member = dialogflowServiceAccount.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n var basicAgent = new Gcp.Diagflow.Agent(\"basicAgent\", new()\n {\n Project = agentProjectProject.ProjectId,\n DisplayName = \"example_agent\",\n DefaultLanguageCode = \"en\",\n TimeZone = \"America/New_York\",\n });\n\n var fullIntent = new Gcp.Diagflow.Intent(\"fullIntent\", new()\n {\n Project = agentProjectProject.ProjectId,\n DisplayName = \"full-intent\",\n WebhookState = \"WEBHOOK_STATE_ENABLED\",\n Priority = 1,\n IsFallback = false,\n MlDisabled = true,\n Action = \"some_action\",\n ResetContexts = true,\n InputContextNames = new[]\n {\n agentProjectProject.ProjectId.Apply(projectId =\u003e $\"projects/{projectId}/agent/sessions/-/contexts/some_id\"),\n },\n Events = new[]\n {\n \"some_event\",\n },\n DefaultResponsePlatforms = new[]\n {\n \"FACEBOOK\",\n \"SLACK\",\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n basicAgent,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/diagflow\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tagentProjectProject, err := organizations.NewProject(ctx, \"agentProjectProject\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test-dialogflow\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tagentProjectService, err := projects.NewService(ctx, \"agentProjectService\", \u0026projects.ServiceArgs{\n\t\t\tProject: agentProjectProject.ProjectId,\n\t\t\tService: pulumi.String(\"dialogflow.googleapis.com\"),\n\t\t\tDisableDependentServices: pulumi.Bool(false),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdialogflowServiceAccount, err := serviceAccount.NewAccount(ctx, \"dialogflowServiceAccount\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"tf-test-dialogflow\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = projects.NewIAMMember(ctx, \"agentCreate\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: agentProjectService.Project,\n\t\t\tRole: pulumi.String(\"roles/dialogflow.admin\"),\n\t\t\tMember: dialogflowServiceAccount.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\tbasicAgent, err := diagflow.NewAgent(ctx, \"basicAgent\", \u0026diagflow.AgentArgs{\n\t\t\tProject: agentProjectProject.ProjectId,\n\t\t\tDisplayName: pulumi.String(\"example_agent\"),\n\t\t\tDefaultLanguageCode: pulumi.String(\"en\"),\n\t\t\tTimeZone: pulumi.String(\"America/New_York\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = diagflow.NewIntent(ctx, \"fullIntent\", \u0026diagflow.IntentArgs{\n\t\t\tProject: agentProjectProject.ProjectId,\n\t\t\tDisplayName: pulumi.String(\"full-intent\"),\n\t\t\tWebhookState: pulumi.String(\"WEBHOOK_STATE_ENABLED\"),\n\t\t\tPriority: pulumi.Int(1),\n\t\t\tIsFallback: pulumi.Bool(false),\n\t\t\tMlDisabled: pulumi.Bool(true),\n\t\t\tAction: pulumi.String(\"some_action\"),\n\t\t\tResetContexts: pulumi.Bool(true),\n\t\t\tInputContextNames: pulumi.StringArray{\n\t\t\t\tagentProjectProject.ProjectId.ApplyT(func(projectId string) (string, error) {\n\t\t\t\t\treturn fmt.Sprintf(\"projects/%v/agent/sessions/-/contexts/some_id\", projectId), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tEvents: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"some_event\"),\n\t\t\t},\n\t\t\tDefaultResponsePlatforms: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"FACEBOOK\"),\n\t\t\t\tpulumi.String(\"SLACK\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tbasicAgent,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.diagflow.Agent;\nimport com.pulumi.gcp.diagflow.AgentArgs;\nimport com.pulumi.gcp.diagflow.Intent;\nimport com.pulumi.gcp.diagflow.IntentArgs;\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 agentProjectProject = new Project(\"agentProjectProject\", ProjectArgs.builder() \n .projectId(\"tf-test-dialogflow\")\n .orgId(\"123456789\")\n .build());\n\n var agentProjectService = new Service(\"agentProjectService\", ServiceArgs.builder() \n .project(agentProjectProject.projectId())\n .service(\"dialogflow.googleapis.com\")\n .disableDependentServices(false)\n .build());\n\n var dialogflowServiceAccount = new Account(\"dialogflowServiceAccount\", AccountArgs.builder() \n .accountId(\"tf-test-dialogflow\")\n .build());\n\n var agentCreate = new IAMMember(\"agentCreate\", IAMMemberArgs.builder() \n .project(agentProjectService.project())\n .role(\"roles/dialogflow.admin\")\n .member(dialogflowServiceAccount.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n var basicAgent = new Agent(\"basicAgent\", AgentArgs.builder() \n .project(agentProjectProject.projectId())\n .displayName(\"example_agent\")\n .defaultLanguageCode(\"en\")\n .timeZone(\"America/New_York\")\n .build());\n\n var fullIntent = new Intent(\"fullIntent\", IntentArgs.builder() \n .project(agentProjectProject.projectId())\n .displayName(\"full-intent\")\n .webhookState(\"WEBHOOK_STATE_ENABLED\")\n .priority(1)\n .isFallback(false)\n .mlDisabled(true)\n .action(\"some_action\")\n .resetContexts(true)\n .inputContextNames(agentProjectProject.projectId().applyValue(projectId -\u003e String.format(\"projects/%s/agent/sessions/-/contexts/some_id\", projectId)))\n .events(\"some_event\")\n .defaultResponsePlatforms( \n \"FACEBOOK\",\n \"SLACK\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(basicAgent)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n agentProjectProject:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test-dialogflow\n orgId: '123456789'\n agentProjectService:\n type: gcp:projects:Service\n properties:\n project: ${agentProjectProject.projectId}\n service: dialogflow.googleapis.com\n disableDependentServices: false\n dialogflowServiceAccount:\n type: gcp:serviceAccount:Account\n properties:\n accountId: tf-test-dialogflow\n agentCreate:\n type: gcp:projects:IAMMember\n properties:\n project: ${agentProjectService.project}\n role: roles/dialogflow.admin\n member: serviceAccount:${dialogflowServiceAccount.email}\n basicAgent:\n type: gcp:diagflow:Agent\n properties:\n project: ${agentProjectProject.projectId}\n displayName: example_agent\n defaultLanguageCode: en\n timeZone: America/New_York\n fullIntent:\n type: gcp:diagflow:Intent\n properties:\n project: ${agentProjectProject.projectId}\n displayName: full-intent\n webhookState: WEBHOOK_STATE_ENABLED\n priority: 1\n isFallback: false\n mlDisabled: true\n action: some_action\n resetContexts: true\n inputContextNames:\n - projects/${agentProjectProject.projectId}/agent/sessions/-/contexts/some_id\n events:\n - some_event\n defaultResponsePlatforms:\n - FACEBOOK\n - SLACK\n options:\n dependson:\n - ${basicAgent}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nIntent can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:diagflow/intent:Intent default {{name}}\n```\n\n ", + "description": "Represents a Dialogflow intent. Intents convert a number of user expressions or patterns into an action. An action\nis an extraction of a user command or sentence semantics.\n\n\nTo get more information about Intent, see:\n\n* [API documentation](https://cloud.google.com/dialogflow/docs/reference/rest/v2/projects.agent.intents)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/dialogflow/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Dialogflow Intent Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicAgent = new gcp.diagflow.Agent(\"basicAgent\", {\n displayName: \"example_agent\",\n defaultLanguageCode: \"en\",\n timeZone: \"America/New_York\",\n});\nconst basicIntent = new gcp.diagflow.Intent(\"basicIntent\", {displayName: \"basic-intent\"}, {\n dependsOn: [basicAgent],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_agent = gcp.diagflow.Agent(\"basicAgent\",\n display_name=\"example_agent\",\n default_language_code=\"en\",\n time_zone=\"America/New_York\")\nbasic_intent = gcp.diagflow.Intent(\"basicIntent\", display_name=\"basic-intent\",\nopts=pulumi.ResourceOptions(depends_on=[basic_agent]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicAgent = new Gcp.Diagflow.Agent(\"basicAgent\", new()\n {\n DisplayName = \"example_agent\",\n DefaultLanguageCode = \"en\",\n TimeZone = \"America/New_York\",\n });\n\n var basicIntent = new Gcp.Diagflow.Intent(\"basicIntent\", new()\n {\n DisplayName = \"basic-intent\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n basicAgent,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/diagflow\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbasicAgent, err := diagflow.NewAgent(ctx, \"basicAgent\", \u0026diagflow.AgentArgs{\n\t\t\tDisplayName: pulumi.String(\"example_agent\"),\n\t\t\tDefaultLanguageCode: pulumi.String(\"en\"),\n\t\t\tTimeZone: pulumi.String(\"America/New_York\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = diagflow.NewIntent(ctx, \"basicIntent\", \u0026diagflow.IntentArgs{\n\t\t\tDisplayName: pulumi.String(\"basic-intent\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tbasicAgent,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.diagflow.Agent;\nimport com.pulumi.gcp.diagflow.AgentArgs;\nimport com.pulumi.gcp.diagflow.Intent;\nimport com.pulumi.gcp.diagflow.IntentArgs;\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 basicAgent = new Agent(\"basicAgent\", AgentArgs.builder() \n .displayName(\"example_agent\")\n .defaultLanguageCode(\"en\")\n .timeZone(\"America/New_York\")\n .build());\n\n var basicIntent = new Intent(\"basicIntent\", IntentArgs.builder() \n .displayName(\"basic-intent\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(basicAgent)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicAgent:\n type: gcp:diagflow:Agent\n properties:\n displayName: example_agent\n defaultLanguageCode: en\n timeZone: America/New_York\n basicIntent:\n type: gcp:diagflow:Intent\n properties:\n displayName: basic-intent\n options:\n dependson:\n - ${basicAgent}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nIntent can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:diagflow/intent:Intent default {{name}}\n```\n\n ", "properties": { "action": { "type": "string", @@ -159385,7 +160832,7 @@ } }, "gcp:dns/managedZone:ManagedZone": { - "description": "A zone is a subtree of the DNS namespace under one administrative\nresponsibility. A ManagedZone is a resource that represents a DNS zone\nhosted by the Cloud DNS service.\n\nTo get more information about ManagedZone, see:\n\n* [API documentation](https://cloud.google.com/dns/api/v1/managedZones)\n* How-to Guides\n * [Managing Zones](https://cloud.google.com/dns/zones/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Dns Managed Zone Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example_zone = new gcp.dns.ManagedZone(\"example-zone\", {\n description: \"Example DNS zone\",\n dnsName: \"my-domain.com.\",\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_zone = gcp.dns.ManagedZone(\"example-zone\",\n description=\"Example DNS zone\",\n dns_name=\"my-domain.com.\",\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example_zone = new Gcp.Dns.ManagedZone(\"example-zone\", new()\n {\n Description = \"Example DNS zone\",\n DnsName = \"my-domain.com.\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dns.NewManagedZone(ctx, \"example-zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tDescription: pulumi.String(\"Example DNS zone\"),\n\t\t\tDnsName: pulumi.String(\"my-domain.com.\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_zone = new ManagedZone(\"example-zone\", ManagedZoneArgs.builder() \n .description(\"Example DNS zone\")\n .dnsName(\"my-domain.com.\")\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-zone:\n type: gcp:dns:ManagedZone\n properties:\n description: Example DNS zone\n dnsName: my-domain.com.\n labels:\n foo: bar\n```\n{{% /example %}}\n{{% example %}}\n### Dns Managed Zone Private\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network_1 = new gcp.compute.Network(\"network-1\", {autoCreateSubnetworks: false});\nconst network_2 = new gcp.compute.Network(\"network-2\", {autoCreateSubnetworks: false});\nconst private_zone = new gcp.dns.ManagedZone(\"private-zone\", {\n dnsName: \"private.example.com.\",\n description: \"Example private DNS zone\",\n labels: {\n foo: \"bar\",\n },\n visibility: \"private\",\n privateVisibilityConfig: {\n networks: [\n {\n networkUrl: network_1.id,\n },\n {\n networkUrl: network_2.id,\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_1 = gcp.compute.Network(\"network-1\", auto_create_subnetworks=False)\nnetwork_2 = gcp.compute.Network(\"network-2\", auto_create_subnetworks=False)\nprivate_zone = gcp.dns.ManagedZone(\"private-zone\",\n dns_name=\"private.example.com.\",\n description=\"Example private DNS zone\",\n labels={\n \"foo\": \"bar\",\n },\n visibility=\"private\",\n private_visibility_config=gcp.dns.ManagedZonePrivateVisibilityConfigArgs(\n networks=[\n gcp.dns.ManagedZonePrivateVisibilityConfigNetworkArgs(\n network_url=network_1.id,\n ),\n gcp.dns.ManagedZonePrivateVisibilityConfigNetworkArgs(\n network_url=network_2.id,\n ),\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network_1 = new Gcp.Compute.Network(\"network-1\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var network_2 = new Gcp.Compute.Network(\"network-2\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var private_zone = new Gcp.Dns.ManagedZone(\"private-zone\", new()\n {\n DnsName = \"private.example.com.\",\n Description = \"Example private DNS zone\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\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_1.Id,\n },\n new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigNetworkArgs\n {\n NetworkUrl = network_2.Id,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"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, \"network-1\", \u0026compute.NetworkArgs{\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.NewNetwork(ctx, \"network-2\", \u0026compute.NetworkArgs{\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 = dns.NewManagedZone(ctx, \"private-zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tDnsName: pulumi.String(\"private.example.com.\"),\n\t\t\tDescription: pulumi.String(\"Example private DNS zone\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\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_1.ID(),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dns.ManagedZonePrivateVisibilityConfigNetworkArgs{\n\t\t\t\t\t\tNetworkUrl: network_2.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.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZonePrivateVisibilityConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_1 = new Network(\"network-1\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var network_2 = new Network(\"network-2\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var private_zone = new ManagedZone(\"private-zone\", ManagedZoneArgs.builder() \n .dnsName(\"private.example.com.\")\n .description(\"Example private DNS zone\")\n .labels(Map.of(\"foo\", \"bar\"))\n .visibility(\"private\")\n .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder()\n .networks( \n ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network_1.id())\n .build(),\n ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network_2.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n private-zone:\n type: gcp:dns:ManagedZone\n properties:\n dnsName: private.example.com.\n description: Example private DNS zone\n labels:\n foo: bar\n visibility: private\n privateVisibilityConfig:\n networks:\n - networkUrl: ${[\"network-1\"].id}\n - networkUrl: ${[\"network-2\"].id}\n network-1:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n network-2:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% example %}}\n### Dns Managed Zone Private Forwarding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network_1 = new gcp.compute.Network(\"network-1\", {autoCreateSubnetworks: false});\nconst network_2 = new gcp.compute.Network(\"network-2\", {autoCreateSubnetworks: false});\nconst private_zone = new gcp.dns.ManagedZone(\"private-zone\", {\n dnsName: \"private.example.com.\",\n description: \"Example private DNS zone\",\n labels: {\n foo: \"bar\",\n },\n visibility: \"private\",\n privateVisibilityConfig: {\n networks: [\n {\n networkUrl: network_1.id,\n },\n {\n networkUrl: network_2.id,\n },\n ],\n },\n forwardingConfig: {\n targetNameServers: [\n {\n ipv4Address: \"172.16.1.10\",\n },\n {\n ipv4Address: \"172.16.1.20\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_1 = gcp.compute.Network(\"network-1\", auto_create_subnetworks=False)\nnetwork_2 = gcp.compute.Network(\"network-2\", auto_create_subnetworks=False)\nprivate_zone = gcp.dns.ManagedZone(\"private-zone\",\n dns_name=\"private.example.com.\",\n description=\"Example private DNS zone\",\n labels={\n \"foo\": \"bar\",\n },\n visibility=\"private\",\n private_visibility_config=gcp.dns.ManagedZonePrivateVisibilityConfigArgs(\n networks=[\n gcp.dns.ManagedZonePrivateVisibilityConfigNetworkArgs(\n network_url=network_1.id,\n ),\n gcp.dns.ManagedZonePrivateVisibilityConfigNetworkArgs(\n network_url=network_2.id,\n ),\n ],\n ),\n forwarding_config=gcp.dns.ManagedZoneForwardingConfigArgs(\n target_name_servers=[\n gcp.dns.ManagedZoneForwardingConfigTargetNameServerArgs(\n ipv4_address=\"172.16.1.10\",\n ),\n gcp.dns.ManagedZoneForwardingConfigTargetNameServerArgs(\n ipv4_address=\"172.16.1.20\",\n ),\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network_1 = new Gcp.Compute.Network(\"network-1\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var network_2 = new Gcp.Compute.Network(\"network-2\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var private_zone = new Gcp.Dns.ManagedZone(\"private-zone\", new()\n {\n DnsName = \"private.example.com.\",\n Description = \"Example private DNS zone\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\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_1.Id,\n },\n new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigNetworkArgs\n {\n NetworkUrl = network_2.Id,\n },\n },\n },\n ForwardingConfig = new Gcp.Dns.Inputs.ManagedZoneForwardingConfigArgs\n {\n TargetNameServers = new[]\n {\n new Gcp.Dns.Inputs.ManagedZoneForwardingConfigTargetNameServerArgs\n {\n Ipv4Address = \"172.16.1.10\",\n },\n new Gcp.Dns.Inputs.ManagedZoneForwardingConfigTargetNameServerArgs\n {\n Ipv4Address = \"172.16.1.20\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"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, \"network-1\", \u0026compute.NetworkArgs{\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.NewNetwork(ctx, \"network-2\", \u0026compute.NetworkArgs{\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 = dns.NewManagedZone(ctx, \"private-zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tDnsName: pulumi.String(\"private.example.com.\"),\n\t\t\tDescription: pulumi.String(\"Example private DNS zone\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\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_1.ID(),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dns.ManagedZonePrivateVisibilityConfigNetworkArgs{\n\t\t\t\t\t\tNetworkUrl: network_2.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tForwardingConfig: \u0026dns.ManagedZoneForwardingConfigArgs{\n\t\t\t\tTargetNameServers: dns.ManagedZoneForwardingConfigTargetNameServerArray{\n\t\t\t\t\t\u0026dns.ManagedZoneForwardingConfigTargetNameServerArgs{\n\t\t\t\t\t\tIpv4Address: pulumi.String(\"172.16.1.10\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dns.ManagedZoneForwardingConfigTargetNameServerArgs{\n\t\t\t\t\t\tIpv4Address: pulumi.String(\"172.16.1.20\"),\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.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZonePrivateVisibilityConfigArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZoneForwardingConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_1 = new Network(\"network-1\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var network_2 = new Network(\"network-2\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var private_zone = new ManagedZone(\"private-zone\", ManagedZoneArgs.builder() \n .dnsName(\"private.example.com.\")\n .description(\"Example private DNS zone\")\n .labels(Map.of(\"foo\", \"bar\"))\n .visibility(\"private\")\n .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder()\n .networks( \n ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network_1.id())\n .build(),\n ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network_2.id())\n .build())\n .build())\n .forwardingConfig(ManagedZoneForwardingConfigArgs.builder()\n .targetNameServers( \n ManagedZoneForwardingConfigTargetNameServerArgs.builder()\n .ipv4Address(\"172.16.1.10\")\n .build(),\n ManagedZoneForwardingConfigTargetNameServerArgs.builder()\n .ipv4Address(\"172.16.1.20\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n private-zone:\n type: gcp:dns:ManagedZone\n properties:\n dnsName: private.example.com.\n description: Example private DNS zone\n labels:\n foo: bar\n visibility: private\n privateVisibilityConfig:\n networks:\n - networkUrl: ${[\"network-1\"].id}\n - networkUrl: ${[\"network-2\"].id}\n forwardingConfig:\n targetNameServers:\n - ipv4Address: 172.16.1.10\n - ipv4Address: 172.16.1.20\n network-1:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n network-2:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% example %}}\n### Dns Managed Zone Private Gke\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network_1 = new gcp.compute.Network(\"network-1\", {autoCreateSubnetworks: false});\nconst subnetwork_1 = new gcp.compute.Subnetwork(\"subnetwork-1\", {\n network: network_1.name,\n ipCidrRange: \"10.0.36.0/24\",\n region: \"us-central1\",\n privateIpGoogleAccess: true,\n secondaryIpRanges: [\n {\n rangeName: \"pod\",\n ipCidrRange: \"10.0.0.0/19\",\n },\n {\n rangeName: \"svc\",\n ipCidrRange: \"10.0.32.0/22\",\n },\n ],\n});\nconst cluster_1 = new gcp.container.Cluster(\"cluster-1\", {\n location: \"us-central1-c\",\n initialNodeCount: 1,\n networkingMode: \"VPC_NATIVE\",\n defaultSnatStatus: {\n disabled: true,\n },\n network: network_1.name,\n subnetwork: subnetwork_1.name,\n privateClusterConfig: {\n enablePrivateEndpoint: true,\n enablePrivateNodes: true,\n masterIpv4CidrBlock: \"10.42.0.0/28\",\n masterGlobalAccessConfig: {\n enabled: true,\n },\n },\n masterAuthorizedNetworksConfig: {},\n ipAllocationPolicy: {\n clusterSecondaryRangeName: subnetwork_1.secondaryIpRanges.apply(secondaryIpRanges =\u003e secondaryIpRanges[0].rangeName),\n servicesSecondaryRangeName: subnetwork_1.secondaryIpRanges.apply(secondaryIpRanges =\u003e secondaryIpRanges[1].rangeName),\n },\n});\nconst private_zone_gke = new gcp.dns.ManagedZone(\"private-zone-gke\", {\n dnsName: \"private.example.com.\",\n description: \"Example private DNS zone\",\n labels: {\n foo: \"bar\",\n },\n visibility: \"private\",\n privateVisibilityConfig: {\n networks: [{\n networkUrl: network_1.id,\n }],\n gkeClusters: [{\n gkeClusterName: cluster_1.id,\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_1 = gcp.compute.Network(\"network-1\", auto_create_subnetworks=False)\nsubnetwork_1 = gcp.compute.Subnetwork(\"subnetwork-1\",\n network=network_1.name,\n ip_cidr_range=\"10.0.36.0/24\",\n region=\"us-central1\",\n private_ip_google_access=True,\n secondary_ip_ranges=[\n gcp.compute.SubnetworkSecondaryIpRangeArgs(\n range_name=\"pod\",\n ip_cidr_range=\"10.0.0.0/19\",\n ),\n gcp.compute.SubnetworkSecondaryIpRangeArgs(\n range_name=\"svc\",\n ip_cidr_range=\"10.0.32.0/22\",\n ),\n ])\ncluster_1 = gcp.container.Cluster(\"cluster-1\",\n location=\"us-central1-c\",\n initial_node_count=1,\n networking_mode=\"VPC_NATIVE\",\n default_snat_status=gcp.container.ClusterDefaultSnatStatusArgs(\n disabled=True,\n ),\n network=network_1.name,\n subnetwork=subnetwork_1.name,\n private_cluster_config=gcp.container.ClusterPrivateClusterConfigArgs(\n enable_private_endpoint=True,\n enable_private_nodes=True,\n master_ipv4_cidr_block=\"10.42.0.0/28\",\n master_global_access_config=gcp.container.ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs(\n enabled=True,\n ),\n ),\n master_authorized_networks_config=gcp.container.ClusterMasterAuthorizedNetworksConfigArgs(),\n ip_allocation_policy=gcp.container.ClusterIpAllocationPolicyArgs(\n cluster_secondary_range_name=subnetwork_1.secondary_ip_ranges[0].range_name,\n services_secondary_range_name=subnetwork_1.secondary_ip_ranges[1].range_name,\n ))\nprivate_zone_gke = gcp.dns.ManagedZone(\"private-zone-gke\",\n dns_name=\"private.example.com.\",\n description=\"Example private DNS zone\",\n labels={\n \"foo\": \"bar\",\n },\n visibility=\"private\",\n private_visibility_config=gcp.dns.ManagedZonePrivateVisibilityConfigArgs(\n networks=[gcp.dns.ManagedZonePrivateVisibilityConfigNetworkArgs(\n network_url=network_1.id,\n )],\n gke_clusters=[gcp.dns.ManagedZonePrivateVisibilityConfigGkeClusterArgs(\n gke_cluster_name=cluster_1.id,\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network_1 = new Gcp.Compute.Network(\"network-1\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var subnetwork_1 = new Gcp.Compute.Subnetwork(\"subnetwork-1\", new()\n {\n Network = network_1.Name,\n IpCidrRange = \"10.0.36.0/24\",\n Region = \"us-central1\",\n PrivateIpGoogleAccess = true,\n SecondaryIpRanges = new[]\n {\n new Gcp.Compute.Inputs.SubnetworkSecondaryIpRangeArgs\n {\n RangeName = \"pod\",\n IpCidrRange = \"10.0.0.0/19\",\n },\n new Gcp.Compute.Inputs.SubnetworkSecondaryIpRangeArgs\n {\n RangeName = \"svc\",\n IpCidrRange = \"10.0.32.0/22\",\n },\n },\n });\n\n var cluster_1 = new Gcp.Container.Cluster(\"cluster-1\", new()\n {\n Location = \"us-central1-c\",\n InitialNodeCount = 1,\n NetworkingMode = \"VPC_NATIVE\",\n DefaultSnatStatus = new Gcp.Container.Inputs.ClusterDefaultSnatStatusArgs\n {\n Disabled = true,\n },\n Network = network_1.Name,\n Subnetwork = subnetwork_1.Name,\n PrivateClusterConfig = new Gcp.Container.Inputs.ClusterPrivateClusterConfigArgs\n {\n EnablePrivateEndpoint = true,\n EnablePrivateNodes = true,\n MasterIpv4CidrBlock = \"10.42.0.0/28\",\n MasterGlobalAccessConfig = new Gcp.Container.Inputs.ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs\n {\n Enabled = true,\n },\n },\n MasterAuthorizedNetworksConfig = null,\n IpAllocationPolicy = new Gcp.Container.Inputs.ClusterIpAllocationPolicyArgs\n {\n ClusterSecondaryRangeName = subnetwork_1.SecondaryIpRanges.Apply(secondaryIpRanges =\u003e secondaryIpRanges[0].RangeName),\n ServicesSecondaryRangeName = subnetwork_1.SecondaryIpRanges.Apply(secondaryIpRanges =\u003e secondaryIpRanges[1].RangeName),\n },\n });\n\n var private_zone_gke = new Gcp.Dns.ManagedZone(\"private-zone-gke\", new()\n {\n DnsName = \"private.example.com.\",\n Description = \"Example private DNS zone\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\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_1.Id,\n },\n },\n GkeClusters = new[]\n {\n new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigGkeClusterArgs\n {\n GkeClusterName = cluster_1.Id,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"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, \"network-1\", \u0026compute.NetworkArgs{\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-1\", \u0026compute.SubnetworkArgs{\n\t\t\tNetwork: network_1.Name,\n\t\t\tIpCidrRange: pulumi.String(\"10.0.36.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPrivateIpGoogleAccess: pulumi.Bool(true),\n\t\t\tSecondaryIpRanges: compute.SubnetworkSecondaryIpRangeArray{\n\t\t\t\t\u0026compute.SubnetworkSecondaryIpRangeArgs{\n\t\t\t\t\tRangeName: pulumi.String(\"pod\"),\n\t\t\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/19\"),\n\t\t\t\t},\n\t\t\t\t\u0026compute.SubnetworkSecondaryIpRangeArgs{\n\t\t\t\t\tRangeName: pulumi.String(\"svc\"),\n\t\t\t\t\tIpCidrRange: pulumi.String(\"10.0.32.0/22\"),\n\t\t\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 = container.NewCluster(ctx, \"cluster-1\", \u0026container.ClusterArgs{\n\t\t\tLocation: pulumi.String(\"us-central1-c\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tNetworkingMode: pulumi.String(\"VPC_NATIVE\"),\n\t\t\tDefaultSnatStatus: \u0026container.ClusterDefaultSnatStatusArgs{\n\t\t\t\tDisabled: pulumi.Bool(true),\n\t\t\t},\n\t\t\tNetwork: network_1.Name,\n\t\t\tSubnetwork: subnetwork_1.Name,\n\t\t\tPrivateClusterConfig: \u0026container.ClusterPrivateClusterConfigArgs{\n\t\t\t\tEnablePrivateEndpoint: pulumi.Bool(true),\n\t\t\t\tEnablePrivateNodes: pulumi.Bool(true),\n\t\t\t\tMasterIpv4CidrBlock: pulumi.String(\"10.42.0.0/28\"),\n\t\t\t\tMasterGlobalAccessConfig: \u0026container.ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tMasterAuthorizedNetworksConfig: nil,\n\t\t\tIpAllocationPolicy: \u0026container.ClusterIpAllocationPolicyArgs{\n\t\t\t\tClusterSecondaryRangeName: subnetwork_1.SecondaryIpRanges.ApplyT(func(secondaryIpRanges []compute.SubnetworkSecondaryIpRange) (*string, error) {\n\t\t\t\t\treturn \u0026secondaryIpRanges[0].RangeName, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\tServicesSecondaryRangeName: subnetwork_1.SecondaryIpRanges.ApplyT(func(secondaryIpRanges []compute.SubnetworkSecondaryIpRange) (*string, error) {\n\t\t\t\t\treturn \u0026secondaryIpRanges[1].RangeName, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dns.NewManagedZone(ctx, \"private-zone-gke\", \u0026dns.ManagedZoneArgs{\n\t\t\tDnsName: pulumi.String(\"private.example.com.\"),\n\t\t\tDescription: pulumi.String(\"Example private DNS zone\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\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_1.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tGkeClusters: dns.ManagedZonePrivateVisibilityConfigGkeClusterArray{\n\t\t\t\t\t\u0026dns.ManagedZonePrivateVisibilityConfigGkeClusterArgs{\n\t\t\t\t\t\tGkeClusterName: cluster_1.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.inputs.SubnetworkSecondaryIpRangeArgs;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterDefaultSnatStatusArgs;\nimport com.pulumi.gcp.container.inputs.ClusterPrivateClusterConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterMasterAuthorizedNetworksConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterIpAllocationPolicyArgs;\nimport com.pulumi.gcp.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZonePrivateVisibilityConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_1 = new Network(\"network-1\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var subnetwork_1 = new Subnetwork(\"subnetwork-1\", SubnetworkArgs.builder() \n .network(network_1.name())\n .ipCidrRange(\"10.0.36.0/24\")\n .region(\"us-central1\")\n .privateIpGoogleAccess(true)\n .secondaryIpRanges( \n SubnetworkSecondaryIpRangeArgs.builder()\n .rangeName(\"pod\")\n .ipCidrRange(\"10.0.0.0/19\")\n .build(),\n SubnetworkSecondaryIpRangeArgs.builder()\n .rangeName(\"svc\")\n .ipCidrRange(\"10.0.32.0/22\")\n .build())\n .build());\n\n var cluster_1 = new Cluster(\"cluster-1\", ClusterArgs.builder() \n .location(\"us-central1-c\")\n .initialNodeCount(1)\n .networkingMode(\"VPC_NATIVE\")\n .defaultSnatStatus(ClusterDefaultSnatStatusArgs.builder()\n .disabled(true)\n .build())\n .network(network_1.name())\n .subnetwork(subnetwork_1.name())\n .privateClusterConfig(ClusterPrivateClusterConfigArgs.builder()\n .enablePrivateEndpoint(true)\n .enablePrivateNodes(true)\n .masterIpv4CidrBlock(\"10.42.0.0/28\")\n .masterGlobalAccessConfig(ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .masterAuthorizedNetworksConfig()\n .ipAllocationPolicy(ClusterIpAllocationPolicyArgs.builder()\n .clusterSecondaryRangeName(subnetwork_1.secondaryIpRanges().applyValue(secondaryIpRanges -\u003e secondaryIpRanges[0].rangeName()))\n .servicesSecondaryRangeName(subnetwork_1.secondaryIpRanges().applyValue(secondaryIpRanges -\u003e secondaryIpRanges[1].rangeName()))\n .build())\n .build());\n\n var private_zone_gke = new ManagedZone(\"private-zone-gke\", ManagedZoneArgs.builder() \n .dnsName(\"private.example.com.\")\n .description(\"Example private DNS zone\")\n .labels(Map.of(\"foo\", \"bar\"))\n .visibility(\"private\")\n .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder()\n .networks(ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network_1.id())\n .build())\n .gkeClusters(ManagedZonePrivateVisibilityConfigGkeClusterArgs.builder()\n .gkeClusterName(cluster_1.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n private-zone-gke:\n type: gcp:dns:ManagedZone\n properties:\n dnsName: private.example.com.\n description: Example private DNS zone\n labels:\n foo: bar\n visibility: private\n privateVisibilityConfig:\n networks:\n - networkUrl: ${[\"network-1\"].id}\n gkeClusters:\n - gkeClusterName: ${[\"cluster-1\"].id}\n network-1:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n subnetwork-1:\n type: gcp:compute:Subnetwork\n properties:\n network: ${[\"network-1\"].name}\n ipCidrRange: 10.0.36.0/24\n region: us-central1\n privateIpGoogleAccess: true\n secondaryIpRanges:\n - rangeName: pod\n ipCidrRange: 10.0.0.0/19\n - rangeName: svc\n ipCidrRange: 10.0.32.0/22\n cluster-1:\n type: gcp:container:Cluster\n properties:\n location: us-central1-c\n initialNodeCount: 1\n networkingMode: VPC_NATIVE\n defaultSnatStatus:\n disabled: true\n network: ${[\"network-1\"].name}\n subnetwork: ${[\"subnetwork-1\"].name}\n privateClusterConfig:\n enablePrivateEndpoint: true\n enablePrivateNodes: true\n masterIpv4CidrBlock: 10.42.0.0/28\n masterGlobalAccessConfig:\n enabled: true\n masterAuthorizedNetworksConfig: {}\n ipAllocationPolicy:\n clusterSecondaryRangeName: ${[\"subnetwork-1\"].secondaryIpRanges[0].rangeName}\n servicesSecondaryRangeName: ${[\"subnetwork-1\"].secondaryIpRanges[1].rangeName}\n```\n{{% /example %}}\n{{% example %}}\n### Dns Managed Zone Private Peering\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network_source = new gcp.compute.Network(\"network-source\", {autoCreateSubnetworks: false});\nconst network_target = new gcp.compute.Network(\"network-target\", {autoCreateSubnetworks: false});\nconst peering_zone = new gcp.dns.ManagedZone(\"peering-zone\", {\n dnsName: \"peering.example.com.\",\n description: \"Example private DNS peering zone\",\n visibility: \"private\",\n privateVisibilityConfig: {\n networks: [{\n networkUrl: network_source.id,\n }],\n },\n peeringConfig: {\n targetNetwork: {\n networkUrl: network_target.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_source = gcp.compute.Network(\"network-source\", auto_create_subnetworks=False)\nnetwork_target = gcp.compute.Network(\"network-target\", auto_create_subnetworks=False)\npeering_zone = gcp.dns.ManagedZone(\"peering-zone\",\n dns_name=\"peering.example.com.\",\n description=\"Example private DNS peering zone\",\n visibility=\"private\",\n private_visibility_config=gcp.dns.ManagedZonePrivateVisibilityConfigArgs(\n networks=[gcp.dns.ManagedZonePrivateVisibilityConfigNetworkArgs(\n network_url=network_source.id,\n )],\n ),\n peering_config=gcp.dns.ManagedZonePeeringConfigArgs(\n target_network=gcp.dns.ManagedZonePeeringConfigTargetNetworkArgs(\n network_url=network_target.id,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network_source = new Gcp.Compute.Network(\"network-source\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var network_target = new Gcp.Compute.Network(\"network-target\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var peering_zone = new Gcp.Dns.ManagedZone(\"peering-zone\", new()\n {\n DnsName = \"peering.example.com.\",\n Description = \"Example private DNS peering zone\",\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_source.Id,\n },\n },\n },\n PeeringConfig = new Gcp.Dns.Inputs.ManagedZonePeeringConfigArgs\n {\n TargetNetwork = new Gcp.Dns.Inputs.ManagedZonePeeringConfigTargetNetworkArgs\n {\n NetworkUrl = network_target.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"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, \"network-source\", \u0026compute.NetworkArgs{\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.NewNetwork(ctx, \"network-target\", \u0026compute.NetworkArgs{\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 = dns.NewManagedZone(ctx, \"peering-zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tDnsName: pulumi.String(\"peering.example.com.\"),\n\t\t\tDescription: pulumi.String(\"Example private DNS peering zone\"),\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_source.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPeeringConfig: \u0026dns.ManagedZonePeeringConfigArgs{\n\t\t\t\tTargetNetwork: \u0026dns.ManagedZonePeeringConfigTargetNetworkArgs{\n\t\t\t\t\tNetworkUrl: network_target.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.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.dns.inputs.ManagedZonePeeringConfigArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZonePeeringConfigTargetNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_source = new Network(\"network-source\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var network_target = new Network(\"network-target\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var peering_zone = new ManagedZone(\"peering-zone\", ManagedZoneArgs.builder() \n .dnsName(\"peering.example.com.\")\n .description(\"Example private DNS peering zone\")\n .visibility(\"private\")\n .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder()\n .networks(ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network_source.id())\n .build())\n .build())\n .peeringConfig(ManagedZonePeeringConfigArgs.builder()\n .targetNetwork(ManagedZonePeeringConfigTargetNetworkArgs.builder()\n .networkUrl(network_target.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n peering-zone:\n type: gcp:dns:ManagedZone\n properties:\n dnsName: peering.example.com.\n description: Example private DNS peering zone\n visibility: private\n privateVisibilityConfig:\n networks:\n - networkUrl: ${[\"network-source\"].id}\n peeringConfig:\n targetNetwork:\n networkUrl: ${[\"network-target\"].id}\n network-source:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n network-target:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% example %}}\n### Dns Managed Zone Service Directory\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.servicedirectory.Namespace(\"example\", {\n namespaceId: \"example\",\n location: \"us-central1\",\n}, {\n provider: google_beta,\n});\nconst sd_zone = new gcp.dns.ManagedZone(\"sd-zone\", {\n dnsName: \"services.example.com.\",\n description: \"Example private DNS Service Directory zone\",\n visibility: \"private\",\n serviceDirectoryConfig: {\n namespace: {\n namespaceUrl: example.id,\n },\n },\n}, {\n provider: google_beta,\n});\nconst network = new gcp.compute.Network(\"network\", {autoCreateSubnetworks: false}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.servicedirectory.Namespace(\"example\",\n namespace_id=\"example\",\n location=\"us-central1\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nsd_zone = gcp.dns.ManagedZone(\"sd-zone\",\n dns_name=\"services.example.com.\",\n description=\"Example private DNS Service Directory zone\",\n visibility=\"private\",\n service_directory_config=gcp.dns.ManagedZoneServiceDirectoryConfigArgs(\n namespace=gcp.dns.ManagedZoneServiceDirectoryConfigNamespaceArgs(\n namespace_url=example.id,\n ),\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\nnetwork = gcp.compute.Network(\"network\", auto_create_subnetworks=False,\nopts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.ServiceDirectory.Namespace(\"example\", new()\n {\n NamespaceId = \"example\",\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var sd_zone = new Gcp.Dns.ManagedZone(\"sd-zone\", new()\n {\n DnsName = \"services.example.com.\",\n Description = \"Example private DNS Service Directory zone\",\n Visibility = \"private\",\n ServiceDirectoryConfig = new Gcp.Dns.Inputs.ManagedZoneServiceDirectoryConfigArgs\n {\n Namespace = new Gcp.Dns.Inputs.ManagedZoneServiceDirectoryConfigNamespaceArgs\n {\n NamespaceUrl = example.Id,\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n AutoCreateSubnetworks = false,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\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 := servicedirectory.NewNamespace(ctx, \"example\", \u0026servicedirectory.NamespaceArgs{\n\t\t\tNamespaceId: pulumi.String(\"example\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dns.NewManagedZone(ctx, \"sd-zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tDnsName: pulumi.String(\"services.example.com.\"),\n\t\t\tDescription: pulumi.String(\"Example private DNS Service Directory zone\"),\n\t\t\tVisibility: pulumi.String(\"private\"),\n\t\t\tServiceDirectoryConfig: \u0026dns.ManagedZoneServiceDirectoryConfigArgs{\n\t\t\t\tNamespace: \u0026dns.ManagedZoneServiceDirectoryConfigNamespaceArgs{\n\t\t\t\t\tNamespaceUrl: example.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.Namespace;\nimport com.pulumi.gcp.servicedirectory.NamespaceArgs;\nimport com.pulumi.gcp.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZoneServiceDirectoryConfigArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZoneServiceDirectoryConfigNamespaceArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\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 Namespace(\"example\", NamespaceArgs.builder() \n .namespaceId(\"example\")\n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var sd_zone = new ManagedZone(\"sd-zone\", ManagedZoneArgs.builder() \n .dnsName(\"services.example.com.\")\n .description(\"Example private DNS Service Directory zone\")\n .visibility(\"private\")\n .serviceDirectoryConfig(ManagedZoneServiceDirectoryConfigArgs.builder()\n .namespace(ManagedZoneServiceDirectoryConfigNamespaceArgs.builder()\n .namespaceUrl(example.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sd-zone:\n type: gcp:dns:ManagedZone\n properties:\n dnsName: services.example.com.\n description: Example private DNS Service Directory zone\n visibility: private\n serviceDirectoryConfig:\n namespace:\n namespaceUrl: ${example.id}\n options:\n provider: ${[\"google-beta\"]}\n example:\n type: gcp:servicedirectory:Namespace\n properties:\n namespaceId: example\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n network:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Dns Managed Zone Cloud Logging\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cloud_logging_enabled_zone = new gcp.dns.ManagedZone(\"cloud-logging-enabled-zone\", {\n cloudLoggingConfig: {\n enableLogging: true,\n },\n description: \"Example cloud logging enabled DNS zone\",\n dnsName: \"services.example.com.\",\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncloud_logging_enabled_zone = gcp.dns.ManagedZone(\"cloud-logging-enabled-zone\",\n cloud_logging_config=gcp.dns.ManagedZoneCloudLoggingConfigArgs(\n enable_logging=True,\n ),\n description=\"Example cloud logging enabled DNS zone\",\n dns_name=\"services.example.com.\",\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloud_logging_enabled_zone = new Gcp.Dns.ManagedZone(\"cloud-logging-enabled-zone\", new()\n {\n CloudLoggingConfig = new Gcp.Dns.Inputs.ManagedZoneCloudLoggingConfigArgs\n {\n EnableLogging = true,\n },\n Description = \"Example cloud logging enabled DNS zone\",\n DnsName = \"services.example.com.\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dns.NewManagedZone(ctx, \"cloud-logging-enabled-zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tCloudLoggingConfig: \u0026dns.ManagedZoneCloudLoggingConfigArgs{\n\t\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"Example cloud logging enabled DNS zone\"),\n\t\t\tDnsName: pulumi.String(\"services.example.com.\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZoneCloudLoggingConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloud_logging_enabled_zone = new ManagedZone(\"cloud-logging-enabled-zone\", ManagedZoneArgs.builder() \n .cloudLoggingConfig(ManagedZoneCloudLoggingConfigArgs.builder()\n .enableLogging(true)\n .build())\n .description(\"Example cloud logging enabled DNS zone\")\n .dnsName(\"services.example.com.\")\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cloud-logging-enabled-zone:\n type: gcp:dns:ManagedZone\n properties:\n cloudLoggingConfig:\n enableLogging: true\n description: Example cloud logging enabled DNS zone\n dnsName: services.example.com.\n labels:\n foo: bar\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nManagedZone can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:dns/managedZone:ManagedZone default projects/{{project}}/managedZones/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:dns/managedZone:ManagedZone default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:dns/managedZone:ManagedZone default {{name}}\n```\n\n ", + "description": "A zone is a subtree of the DNS namespace under one administrative\nresponsibility. A ManagedZone is a resource that represents a DNS zone\nhosted by the Cloud DNS service.\n\n\nTo get more information about ManagedZone, see:\n\n* [API documentation](https://cloud.google.com/dns/api/v1/managedZones)\n* How-to Guides\n * [Managing Zones](https://cloud.google.com/dns/zones/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Dns Managed Zone Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst rnd = new random.RandomId(\"rnd\", {byteLength: 4});\nconst example_zone = new gcp.dns.ManagedZone(\"example-zone\", {\n description: \"Example DNS zone\",\n dnsName: pulumi.interpolate`example-${rnd.hex}.com.`,\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\nrnd = random.RandomId(\"rnd\", byte_length=4)\nexample_zone = gcp.dns.ManagedZone(\"example-zone\",\n description=\"Example DNS zone\",\n dns_name=rnd.hex.apply(lambda hex: f\"example-{hex}.com.\"),\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var rnd = new Random.RandomId(\"rnd\", new()\n {\n ByteLength = 4,\n });\n\n var example_zone = new Gcp.Dns.ManagedZone(\"example-zone\", new()\n {\n Description = \"Example DNS zone\",\n DnsName = rnd.Hex.Apply(hex =\u003e $\"example-{hex}.com.\"),\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\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\trnd, err := random.NewRandomId(ctx, \"rnd\", \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 = dns.NewManagedZone(ctx, \"example-zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tDescription: pulumi.String(\"Example DNS zone\"),\n\t\t\tDnsName: rnd.Hex.ApplyT(func(hex string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"example-%v.com.\", hex), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.random.RandomId;\nimport com.pulumi.random.RandomIdArgs;\nimport com.pulumi.gcp.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var rnd = new RandomId(\"rnd\", RandomIdArgs.builder() \n .byteLength(4)\n .build());\n\n var example_zone = new ManagedZone(\"example-zone\", ManagedZoneArgs.builder() \n .description(\"Example DNS zone\")\n .dnsName(rnd.hex().applyValue(hex -\u003e String.format(\"example-%s.com.\", hex)))\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-zone:\n type: gcp:dns:ManagedZone\n properties:\n description: Example DNS zone\n dnsName: example-${rnd.hex}.com.\n labels:\n foo: bar\n rnd:\n type: random:RandomId\n properties:\n byteLength: 4\n```\n{{% /example %}}\n{{% example %}}\n### Dns Managed Zone Private\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network_1 = new gcp.compute.Network(\"network-1\", {autoCreateSubnetworks: false});\nconst network_2 = new gcp.compute.Network(\"network-2\", {autoCreateSubnetworks: false});\nconst private_zone = new gcp.dns.ManagedZone(\"private-zone\", {\n dnsName: \"private.example.com.\",\n description: \"Example private DNS zone\",\n labels: {\n foo: \"bar\",\n },\n visibility: \"private\",\n privateVisibilityConfig: {\n networks: [\n {\n networkUrl: network_1.id,\n },\n {\n networkUrl: network_2.id,\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_1 = gcp.compute.Network(\"network-1\", auto_create_subnetworks=False)\nnetwork_2 = gcp.compute.Network(\"network-2\", auto_create_subnetworks=False)\nprivate_zone = gcp.dns.ManagedZone(\"private-zone\",\n dns_name=\"private.example.com.\",\n description=\"Example private DNS zone\",\n labels={\n \"foo\": \"bar\",\n },\n visibility=\"private\",\n private_visibility_config=gcp.dns.ManagedZonePrivateVisibilityConfigArgs(\n networks=[\n gcp.dns.ManagedZonePrivateVisibilityConfigNetworkArgs(\n network_url=network_1.id,\n ),\n gcp.dns.ManagedZonePrivateVisibilityConfigNetworkArgs(\n network_url=network_2.id,\n ),\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network_1 = new Gcp.Compute.Network(\"network-1\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var network_2 = new Gcp.Compute.Network(\"network-2\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var private_zone = new Gcp.Dns.ManagedZone(\"private-zone\", new()\n {\n DnsName = \"private.example.com.\",\n Description = \"Example private DNS zone\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\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_1.Id,\n },\n new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigNetworkArgs\n {\n NetworkUrl = network_2.Id,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"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, \"network-1\", \u0026compute.NetworkArgs{\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.NewNetwork(ctx, \"network-2\", \u0026compute.NetworkArgs{\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 = dns.NewManagedZone(ctx, \"private-zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tDnsName: pulumi.String(\"private.example.com.\"),\n\t\t\tDescription: pulumi.String(\"Example private DNS zone\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\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_1.ID(),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dns.ManagedZonePrivateVisibilityConfigNetworkArgs{\n\t\t\t\t\t\tNetworkUrl: network_2.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.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZonePrivateVisibilityConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_1 = new Network(\"network-1\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var network_2 = new Network(\"network-2\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var private_zone = new ManagedZone(\"private-zone\", ManagedZoneArgs.builder() \n .dnsName(\"private.example.com.\")\n .description(\"Example private DNS zone\")\n .labels(Map.of(\"foo\", \"bar\"))\n .visibility(\"private\")\n .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder()\n .networks( \n ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network_1.id())\n .build(),\n ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network_2.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n private-zone:\n type: gcp:dns:ManagedZone\n properties:\n dnsName: private.example.com.\n description: Example private DNS zone\n labels:\n foo: bar\n visibility: private\n privateVisibilityConfig:\n networks:\n - networkUrl: ${[\"network-1\"].id}\n - networkUrl: ${[\"network-2\"].id}\n network-1:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n network-2:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% example %}}\n### Dns Managed Zone Private Forwarding\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network_1 = new gcp.compute.Network(\"network-1\", {autoCreateSubnetworks: false});\nconst network_2 = new gcp.compute.Network(\"network-2\", {autoCreateSubnetworks: false});\nconst private_zone = new gcp.dns.ManagedZone(\"private-zone\", {\n dnsName: \"private.example.com.\",\n description: \"Example private DNS zone\",\n labels: {\n foo: \"bar\",\n },\n visibility: \"private\",\n privateVisibilityConfig: {\n networks: [\n {\n networkUrl: network_1.id,\n },\n {\n networkUrl: network_2.id,\n },\n ],\n },\n forwardingConfig: {\n targetNameServers: [\n {\n ipv4Address: \"172.16.1.10\",\n },\n {\n ipv4Address: \"172.16.1.20\",\n },\n ],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_1 = gcp.compute.Network(\"network-1\", auto_create_subnetworks=False)\nnetwork_2 = gcp.compute.Network(\"network-2\", auto_create_subnetworks=False)\nprivate_zone = gcp.dns.ManagedZone(\"private-zone\",\n dns_name=\"private.example.com.\",\n description=\"Example private DNS zone\",\n labels={\n \"foo\": \"bar\",\n },\n visibility=\"private\",\n private_visibility_config=gcp.dns.ManagedZonePrivateVisibilityConfigArgs(\n networks=[\n gcp.dns.ManagedZonePrivateVisibilityConfigNetworkArgs(\n network_url=network_1.id,\n ),\n gcp.dns.ManagedZonePrivateVisibilityConfigNetworkArgs(\n network_url=network_2.id,\n ),\n ],\n ),\n forwarding_config=gcp.dns.ManagedZoneForwardingConfigArgs(\n target_name_servers=[\n gcp.dns.ManagedZoneForwardingConfigTargetNameServerArgs(\n ipv4_address=\"172.16.1.10\",\n ),\n gcp.dns.ManagedZoneForwardingConfigTargetNameServerArgs(\n ipv4_address=\"172.16.1.20\",\n ),\n ],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network_1 = new Gcp.Compute.Network(\"network-1\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var network_2 = new Gcp.Compute.Network(\"network-2\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var private_zone = new Gcp.Dns.ManagedZone(\"private-zone\", new()\n {\n DnsName = \"private.example.com.\",\n Description = \"Example private DNS zone\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\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_1.Id,\n },\n new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigNetworkArgs\n {\n NetworkUrl = network_2.Id,\n },\n },\n },\n ForwardingConfig = new Gcp.Dns.Inputs.ManagedZoneForwardingConfigArgs\n {\n TargetNameServers = new[]\n {\n new Gcp.Dns.Inputs.ManagedZoneForwardingConfigTargetNameServerArgs\n {\n Ipv4Address = \"172.16.1.10\",\n },\n new Gcp.Dns.Inputs.ManagedZoneForwardingConfigTargetNameServerArgs\n {\n Ipv4Address = \"172.16.1.20\",\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"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, \"network-1\", \u0026compute.NetworkArgs{\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.NewNetwork(ctx, \"network-2\", \u0026compute.NetworkArgs{\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 = dns.NewManagedZone(ctx, \"private-zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tDnsName: pulumi.String(\"private.example.com.\"),\n\t\t\tDescription: pulumi.String(\"Example private DNS zone\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\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_1.ID(),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dns.ManagedZonePrivateVisibilityConfigNetworkArgs{\n\t\t\t\t\t\tNetworkUrl: network_2.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tForwardingConfig: \u0026dns.ManagedZoneForwardingConfigArgs{\n\t\t\t\tTargetNameServers: dns.ManagedZoneForwardingConfigTargetNameServerArray{\n\t\t\t\t\t\u0026dns.ManagedZoneForwardingConfigTargetNameServerArgs{\n\t\t\t\t\t\tIpv4Address: pulumi.String(\"172.16.1.10\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dns.ManagedZoneForwardingConfigTargetNameServerArgs{\n\t\t\t\t\t\tIpv4Address: pulumi.String(\"172.16.1.20\"),\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.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZonePrivateVisibilityConfigArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZoneForwardingConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_1 = new Network(\"network-1\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var network_2 = new Network(\"network-2\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var private_zone = new ManagedZone(\"private-zone\", ManagedZoneArgs.builder() \n .dnsName(\"private.example.com.\")\n .description(\"Example private DNS zone\")\n .labels(Map.of(\"foo\", \"bar\"))\n .visibility(\"private\")\n .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder()\n .networks( \n ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network_1.id())\n .build(),\n ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network_2.id())\n .build())\n .build())\n .forwardingConfig(ManagedZoneForwardingConfigArgs.builder()\n .targetNameServers( \n ManagedZoneForwardingConfigTargetNameServerArgs.builder()\n .ipv4Address(\"172.16.1.10\")\n .build(),\n ManagedZoneForwardingConfigTargetNameServerArgs.builder()\n .ipv4Address(\"172.16.1.20\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n private-zone:\n type: gcp:dns:ManagedZone\n properties:\n dnsName: private.example.com.\n description: Example private DNS zone\n labels:\n foo: bar\n visibility: private\n privateVisibilityConfig:\n networks:\n - networkUrl: ${[\"network-1\"].id}\n - networkUrl: ${[\"network-2\"].id}\n forwardingConfig:\n targetNameServers:\n - ipv4Address: 172.16.1.10\n - ipv4Address: 172.16.1.20\n network-1:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n network-2:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% example %}}\n### Dns Managed Zone Private Gke\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network_1 = new gcp.compute.Network(\"network-1\", {autoCreateSubnetworks: false});\nconst subnetwork_1 = new gcp.compute.Subnetwork(\"subnetwork-1\", {\n network: network_1.name,\n ipCidrRange: \"10.0.36.0/24\",\n region: \"us-central1\",\n privateIpGoogleAccess: true,\n secondaryIpRanges: [\n {\n rangeName: \"pod\",\n ipCidrRange: \"10.0.0.0/19\",\n },\n {\n rangeName: \"svc\",\n ipCidrRange: \"10.0.32.0/22\",\n },\n ],\n});\nconst cluster_1 = new gcp.container.Cluster(\"cluster-1\", {\n location: \"us-central1-c\",\n initialNodeCount: 1,\n networkingMode: \"VPC_NATIVE\",\n defaultSnatStatus: {\n disabled: true,\n },\n network: network_1.name,\n subnetwork: subnetwork_1.name,\n privateClusterConfig: {\n enablePrivateEndpoint: true,\n enablePrivateNodes: true,\n masterIpv4CidrBlock: \"10.42.0.0/28\",\n masterGlobalAccessConfig: {\n enabled: true,\n },\n },\n masterAuthorizedNetworksConfig: {},\n ipAllocationPolicy: {\n clusterSecondaryRangeName: subnetwork_1.secondaryIpRanges.apply(secondaryIpRanges =\u003e secondaryIpRanges[0].rangeName),\n servicesSecondaryRangeName: subnetwork_1.secondaryIpRanges.apply(secondaryIpRanges =\u003e secondaryIpRanges[1].rangeName),\n },\n});\nconst private_zone_gke = new gcp.dns.ManagedZone(\"private-zone-gke\", {\n dnsName: \"private.example.com.\",\n description: \"Example private DNS zone\",\n labels: {\n foo: \"bar\",\n },\n visibility: \"private\",\n privateVisibilityConfig: {\n networks: [{\n networkUrl: network_1.id,\n }],\n gkeClusters: [{\n gkeClusterName: cluster_1.id,\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_1 = gcp.compute.Network(\"network-1\", auto_create_subnetworks=False)\nsubnetwork_1 = gcp.compute.Subnetwork(\"subnetwork-1\",\n network=network_1.name,\n ip_cidr_range=\"10.0.36.0/24\",\n region=\"us-central1\",\n private_ip_google_access=True,\n secondary_ip_ranges=[\n gcp.compute.SubnetworkSecondaryIpRangeArgs(\n range_name=\"pod\",\n ip_cidr_range=\"10.0.0.0/19\",\n ),\n gcp.compute.SubnetworkSecondaryIpRangeArgs(\n range_name=\"svc\",\n ip_cidr_range=\"10.0.32.0/22\",\n ),\n ])\ncluster_1 = gcp.container.Cluster(\"cluster-1\",\n location=\"us-central1-c\",\n initial_node_count=1,\n networking_mode=\"VPC_NATIVE\",\n default_snat_status=gcp.container.ClusterDefaultSnatStatusArgs(\n disabled=True,\n ),\n network=network_1.name,\n subnetwork=subnetwork_1.name,\n private_cluster_config=gcp.container.ClusterPrivateClusterConfigArgs(\n enable_private_endpoint=True,\n enable_private_nodes=True,\n master_ipv4_cidr_block=\"10.42.0.0/28\",\n master_global_access_config=gcp.container.ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs(\n enabled=True,\n ),\n ),\n master_authorized_networks_config=gcp.container.ClusterMasterAuthorizedNetworksConfigArgs(),\n ip_allocation_policy=gcp.container.ClusterIpAllocationPolicyArgs(\n cluster_secondary_range_name=subnetwork_1.secondary_ip_ranges[0].range_name,\n services_secondary_range_name=subnetwork_1.secondary_ip_ranges[1].range_name,\n ))\nprivate_zone_gke = gcp.dns.ManagedZone(\"private-zone-gke\",\n dns_name=\"private.example.com.\",\n description=\"Example private DNS zone\",\n labels={\n \"foo\": \"bar\",\n },\n visibility=\"private\",\n private_visibility_config=gcp.dns.ManagedZonePrivateVisibilityConfigArgs(\n networks=[gcp.dns.ManagedZonePrivateVisibilityConfigNetworkArgs(\n network_url=network_1.id,\n )],\n gke_clusters=[gcp.dns.ManagedZonePrivateVisibilityConfigGkeClusterArgs(\n gke_cluster_name=cluster_1.id,\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network_1 = new Gcp.Compute.Network(\"network-1\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var subnetwork_1 = new Gcp.Compute.Subnetwork(\"subnetwork-1\", new()\n {\n Network = network_1.Name,\n IpCidrRange = \"10.0.36.0/24\",\n Region = \"us-central1\",\n PrivateIpGoogleAccess = true,\n SecondaryIpRanges = new[]\n {\n new Gcp.Compute.Inputs.SubnetworkSecondaryIpRangeArgs\n {\n RangeName = \"pod\",\n IpCidrRange = \"10.0.0.0/19\",\n },\n new Gcp.Compute.Inputs.SubnetworkSecondaryIpRangeArgs\n {\n RangeName = \"svc\",\n IpCidrRange = \"10.0.32.0/22\",\n },\n },\n });\n\n var cluster_1 = new Gcp.Container.Cluster(\"cluster-1\", new()\n {\n Location = \"us-central1-c\",\n InitialNodeCount = 1,\n NetworkingMode = \"VPC_NATIVE\",\n DefaultSnatStatus = new Gcp.Container.Inputs.ClusterDefaultSnatStatusArgs\n {\n Disabled = true,\n },\n Network = network_1.Name,\n Subnetwork = subnetwork_1.Name,\n PrivateClusterConfig = new Gcp.Container.Inputs.ClusterPrivateClusterConfigArgs\n {\n EnablePrivateEndpoint = true,\n EnablePrivateNodes = true,\n MasterIpv4CidrBlock = \"10.42.0.0/28\",\n MasterGlobalAccessConfig = new Gcp.Container.Inputs.ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs\n {\n Enabled = true,\n },\n },\n MasterAuthorizedNetworksConfig = null,\n IpAllocationPolicy = new Gcp.Container.Inputs.ClusterIpAllocationPolicyArgs\n {\n ClusterSecondaryRangeName = subnetwork_1.SecondaryIpRanges.Apply(secondaryIpRanges =\u003e secondaryIpRanges[0].RangeName),\n ServicesSecondaryRangeName = subnetwork_1.SecondaryIpRanges.Apply(secondaryIpRanges =\u003e secondaryIpRanges[1].RangeName),\n },\n });\n\n var private_zone_gke = new Gcp.Dns.ManagedZone(\"private-zone-gke\", new()\n {\n DnsName = \"private.example.com.\",\n Description = \"Example private DNS zone\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\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_1.Id,\n },\n },\n GkeClusters = new[]\n {\n new Gcp.Dns.Inputs.ManagedZonePrivateVisibilityConfigGkeClusterArgs\n {\n GkeClusterName = cluster_1.Id,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/container\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"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, \"network-1\", \u0026compute.NetworkArgs{\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-1\", \u0026compute.SubnetworkArgs{\n\t\t\tNetwork: network_1.Name,\n\t\t\tIpCidrRange: pulumi.String(\"10.0.36.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tPrivateIpGoogleAccess: pulumi.Bool(true),\n\t\t\tSecondaryIpRanges: compute.SubnetworkSecondaryIpRangeArray{\n\t\t\t\t\u0026compute.SubnetworkSecondaryIpRangeArgs{\n\t\t\t\t\tRangeName: pulumi.String(\"pod\"),\n\t\t\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/19\"),\n\t\t\t\t},\n\t\t\t\t\u0026compute.SubnetworkSecondaryIpRangeArgs{\n\t\t\t\t\tRangeName: pulumi.String(\"svc\"),\n\t\t\t\t\tIpCidrRange: pulumi.String(\"10.0.32.0/22\"),\n\t\t\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 = container.NewCluster(ctx, \"cluster-1\", \u0026container.ClusterArgs{\n\t\t\tLocation: pulumi.String(\"us-central1-c\"),\n\t\t\tInitialNodeCount: pulumi.Int(1),\n\t\t\tNetworkingMode: pulumi.String(\"VPC_NATIVE\"),\n\t\t\tDefaultSnatStatus: \u0026container.ClusterDefaultSnatStatusArgs{\n\t\t\t\tDisabled: pulumi.Bool(true),\n\t\t\t},\n\t\t\tNetwork: network_1.Name,\n\t\t\tSubnetwork: subnetwork_1.Name,\n\t\t\tPrivateClusterConfig: \u0026container.ClusterPrivateClusterConfigArgs{\n\t\t\t\tEnablePrivateEndpoint: pulumi.Bool(true),\n\t\t\t\tEnablePrivateNodes: pulumi.Bool(true),\n\t\t\t\tMasterIpv4CidrBlock: pulumi.String(\"10.42.0.0/28\"),\n\t\t\t\tMasterGlobalAccessConfig: \u0026container.ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs{\n\t\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\t},\n\t\t\t},\n\t\t\tMasterAuthorizedNetworksConfig: nil,\n\t\t\tIpAllocationPolicy: \u0026container.ClusterIpAllocationPolicyArgs{\n\t\t\t\tClusterSecondaryRangeName: subnetwork_1.SecondaryIpRanges.ApplyT(func(secondaryIpRanges []compute.SubnetworkSecondaryIpRange) (*string, error) {\n\t\t\t\t\treturn \u0026secondaryIpRanges[0].RangeName, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t\tServicesSecondaryRangeName: subnetwork_1.SecondaryIpRanges.ApplyT(func(secondaryIpRanges []compute.SubnetworkSecondaryIpRange) (*string, error) {\n\t\t\t\t\treturn \u0026secondaryIpRanges[1].RangeName, nil\n\t\t\t\t}).(pulumi.StringPtrOutput),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dns.NewManagedZone(ctx, \"private-zone-gke\", \u0026dns.ManagedZoneArgs{\n\t\t\tDnsName: pulumi.String(\"private.example.com.\"),\n\t\t\tDescription: pulumi.String(\"Example private DNS zone\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\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_1.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tGkeClusters: dns.ManagedZonePrivateVisibilityConfigGkeClusterArray{\n\t\t\t\t\t\u0026dns.ManagedZonePrivateVisibilityConfigGkeClusterArgs{\n\t\t\t\t\t\tGkeClusterName: cluster_1.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.inputs.SubnetworkSecondaryIpRangeArgs;\nimport com.pulumi.gcp.container.Cluster;\nimport com.pulumi.gcp.container.ClusterArgs;\nimport com.pulumi.gcp.container.inputs.ClusterDefaultSnatStatusArgs;\nimport com.pulumi.gcp.container.inputs.ClusterPrivateClusterConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterMasterAuthorizedNetworksConfigArgs;\nimport com.pulumi.gcp.container.inputs.ClusterIpAllocationPolicyArgs;\nimport com.pulumi.gcp.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZonePrivateVisibilityConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_1 = new Network(\"network-1\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var subnetwork_1 = new Subnetwork(\"subnetwork-1\", SubnetworkArgs.builder() \n .network(network_1.name())\n .ipCidrRange(\"10.0.36.0/24\")\n .region(\"us-central1\")\n .privateIpGoogleAccess(true)\n .secondaryIpRanges( \n SubnetworkSecondaryIpRangeArgs.builder()\n .rangeName(\"pod\")\n .ipCidrRange(\"10.0.0.0/19\")\n .build(),\n SubnetworkSecondaryIpRangeArgs.builder()\n .rangeName(\"svc\")\n .ipCidrRange(\"10.0.32.0/22\")\n .build())\n .build());\n\n var cluster_1 = new Cluster(\"cluster-1\", ClusterArgs.builder() \n .location(\"us-central1-c\")\n .initialNodeCount(1)\n .networkingMode(\"VPC_NATIVE\")\n .defaultSnatStatus(ClusterDefaultSnatStatusArgs.builder()\n .disabled(true)\n .build())\n .network(network_1.name())\n .subnetwork(subnetwork_1.name())\n .privateClusterConfig(ClusterPrivateClusterConfigArgs.builder()\n .enablePrivateEndpoint(true)\n .enablePrivateNodes(true)\n .masterIpv4CidrBlock(\"10.42.0.0/28\")\n .masterGlobalAccessConfig(ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs.builder()\n .enabled(true)\n .build())\n .build())\n .masterAuthorizedNetworksConfig()\n .ipAllocationPolicy(ClusterIpAllocationPolicyArgs.builder()\n .clusterSecondaryRangeName(subnetwork_1.secondaryIpRanges().applyValue(secondaryIpRanges -\u003e secondaryIpRanges[0].rangeName()))\n .servicesSecondaryRangeName(subnetwork_1.secondaryIpRanges().applyValue(secondaryIpRanges -\u003e secondaryIpRanges[1].rangeName()))\n .build())\n .build());\n\n var private_zone_gke = new ManagedZone(\"private-zone-gke\", ManagedZoneArgs.builder() \n .dnsName(\"private.example.com.\")\n .description(\"Example private DNS zone\")\n .labels(Map.of(\"foo\", \"bar\"))\n .visibility(\"private\")\n .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder()\n .networks(ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network_1.id())\n .build())\n .gkeClusters(ManagedZonePrivateVisibilityConfigGkeClusterArgs.builder()\n .gkeClusterName(cluster_1.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n private-zone-gke:\n type: gcp:dns:ManagedZone\n properties:\n dnsName: private.example.com.\n description: Example private DNS zone\n labels:\n foo: bar\n visibility: private\n privateVisibilityConfig:\n networks:\n - networkUrl: ${[\"network-1\"].id}\n gkeClusters:\n - gkeClusterName: ${[\"cluster-1\"].id}\n network-1:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n subnetwork-1:\n type: gcp:compute:Subnetwork\n properties:\n network: ${[\"network-1\"].name}\n ipCidrRange: 10.0.36.0/24\n region: us-central1\n privateIpGoogleAccess: true\n secondaryIpRanges:\n - rangeName: pod\n ipCidrRange: 10.0.0.0/19\n - rangeName: svc\n ipCidrRange: 10.0.32.0/22\n cluster-1:\n type: gcp:container:Cluster\n properties:\n location: us-central1-c\n initialNodeCount: 1\n networkingMode: VPC_NATIVE\n defaultSnatStatus:\n disabled: true\n network: ${[\"network-1\"].name}\n subnetwork: ${[\"subnetwork-1\"].name}\n privateClusterConfig:\n enablePrivateEndpoint: true\n enablePrivateNodes: true\n masterIpv4CidrBlock: 10.42.0.0/28\n masterGlobalAccessConfig:\n enabled: true\n masterAuthorizedNetworksConfig: {}\n ipAllocationPolicy:\n clusterSecondaryRangeName: ${[\"subnetwork-1\"].secondaryIpRanges[0].rangeName}\n servicesSecondaryRangeName: ${[\"subnetwork-1\"].secondaryIpRanges[1].rangeName}\n```\n{{% /example %}}\n{{% example %}}\n### Dns Managed Zone Private Peering\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network_source = new gcp.compute.Network(\"network-source\", {autoCreateSubnetworks: false});\nconst network_target = new gcp.compute.Network(\"network-target\", {autoCreateSubnetworks: false});\nconst peering_zone = new gcp.dns.ManagedZone(\"peering-zone\", {\n dnsName: \"peering.example.com.\",\n description: \"Example private DNS peering zone\",\n visibility: \"private\",\n privateVisibilityConfig: {\n networks: [{\n networkUrl: network_source.id,\n }],\n },\n peeringConfig: {\n targetNetwork: {\n networkUrl: network_target.id,\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_source = gcp.compute.Network(\"network-source\", auto_create_subnetworks=False)\nnetwork_target = gcp.compute.Network(\"network-target\", auto_create_subnetworks=False)\npeering_zone = gcp.dns.ManagedZone(\"peering-zone\",\n dns_name=\"peering.example.com.\",\n description=\"Example private DNS peering zone\",\n visibility=\"private\",\n private_visibility_config=gcp.dns.ManagedZonePrivateVisibilityConfigArgs(\n networks=[gcp.dns.ManagedZonePrivateVisibilityConfigNetworkArgs(\n network_url=network_source.id,\n )],\n ),\n peering_config=gcp.dns.ManagedZonePeeringConfigArgs(\n target_network=gcp.dns.ManagedZonePeeringConfigTargetNetworkArgs(\n network_url=network_target.id,\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network_source = new Gcp.Compute.Network(\"network-source\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var network_target = new Gcp.Compute.Network(\"network-target\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var peering_zone = new Gcp.Dns.ManagedZone(\"peering-zone\", new()\n {\n DnsName = \"peering.example.com.\",\n Description = \"Example private DNS peering zone\",\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_source.Id,\n },\n },\n },\n PeeringConfig = new Gcp.Dns.Inputs.ManagedZonePeeringConfigArgs\n {\n TargetNetwork = new Gcp.Dns.Inputs.ManagedZonePeeringConfigTargetNetworkArgs\n {\n NetworkUrl = network_target.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"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, \"network-source\", \u0026compute.NetworkArgs{\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.NewNetwork(ctx, \"network-target\", \u0026compute.NetworkArgs{\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 = dns.NewManagedZone(ctx, \"peering-zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tDnsName: pulumi.String(\"peering.example.com.\"),\n\t\t\tDescription: pulumi.String(\"Example private DNS peering zone\"),\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_source.ID(),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tPeeringConfig: \u0026dns.ManagedZonePeeringConfigArgs{\n\t\t\t\tTargetNetwork: \u0026dns.ManagedZonePeeringConfigTargetNetworkArgs{\n\t\t\t\t\tNetworkUrl: network_target.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.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.dns.inputs.ManagedZonePeeringConfigArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZonePeeringConfigTargetNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_source = new Network(\"network-source\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var network_target = new Network(\"network-target\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var peering_zone = new ManagedZone(\"peering-zone\", ManagedZoneArgs.builder() \n .dnsName(\"peering.example.com.\")\n .description(\"Example private DNS peering zone\")\n .visibility(\"private\")\n .privateVisibilityConfig(ManagedZonePrivateVisibilityConfigArgs.builder()\n .networks(ManagedZonePrivateVisibilityConfigNetworkArgs.builder()\n .networkUrl(network_source.id())\n .build())\n .build())\n .peeringConfig(ManagedZonePeeringConfigArgs.builder()\n .targetNetwork(ManagedZonePeeringConfigTargetNetworkArgs.builder()\n .networkUrl(network_target.id())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n peering-zone:\n type: gcp:dns:ManagedZone\n properties:\n dnsName: peering.example.com.\n description: Example private DNS peering zone\n visibility: private\n privateVisibilityConfig:\n networks:\n - networkUrl: ${[\"network-source\"].id}\n peeringConfig:\n targetNetwork:\n networkUrl: ${[\"network-target\"].id}\n network-source:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n network-target:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% example %}}\n### Dns Managed Zone Service Directory\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.servicedirectory.Namespace(\"example\", {\n namespaceId: \"example\",\n location: \"us-central1\",\n}, {\n provider: google_beta,\n});\nconst sd_zone = new gcp.dns.ManagedZone(\"sd-zone\", {\n dnsName: \"services.example.com.\",\n description: \"Example private DNS Service Directory zone\",\n visibility: \"private\",\n serviceDirectoryConfig: {\n namespace: {\n namespaceUrl: example.id,\n },\n },\n}, {\n provider: google_beta,\n});\nconst network = new gcp.compute.Network(\"network\", {autoCreateSubnetworks: false}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.servicedirectory.Namespace(\"example\",\n namespace_id=\"example\",\n location=\"us-central1\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nsd_zone = gcp.dns.ManagedZone(\"sd-zone\",\n dns_name=\"services.example.com.\",\n description=\"Example private DNS Service Directory zone\",\n visibility=\"private\",\n service_directory_config=gcp.dns.ManagedZoneServiceDirectoryConfigArgs(\n namespace=gcp.dns.ManagedZoneServiceDirectoryConfigNamespaceArgs(\n namespace_url=example.id,\n ),\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\nnetwork = gcp.compute.Network(\"network\", auto_create_subnetworks=False,\nopts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.ServiceDirectory.Namespace(\"example\", new()\n {\n NamespaceId = \"example\",\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var sd_zone = new Gcp.Dns.ManagedZone(\"sd-zone\", new()\n {\n DnsName = \"services.example.com.\",\n Description = \"Example private DNS Service Directory zone\",\n Visibility = \"private\",\n ServiceDirectoryConfig = new Gcp.Dns.Inputs.ManagedZoneServiceDirectoryConfigArgs\n {\n Namespace = new Gcp.Dns.Inputs.ManagedZoneServiceDirectoryConfigNamespaceArgs\n {\n NamespaceUrl = example.Id,\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var network = new Gcp.Compute.Network(\"network\", new()\n {\n AutoCreateSubnetworks = false,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\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 := servicedirectory.NewNamespace(ctx, \"example\", \u0026servicedirectory.NamespaceArgs{\n\t\t\tNamespaceId: pulumi.String(\"example\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = dns.NewManagedZone(ctx, \"sd-zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tDnsName: pulumi.String(\"services.example.com.\"),\n\t\t\tDescription: pulumi.String(\"Example private DNS Service Directory zone\"),\n\t\t\tVisibility: pulumi.String(\"private\"),\n\t\t\tServiceDirectoryConfig: \u0026dns.ManagedZoneServiceDirectoryConfigArgs{\n\t\t\t\tNamespace: \u0026dns.ManagedZoneServiceDirectoryConfigNamespaceArgs{\n\t\t\t\t\tNamespaceUrl: example.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewNetwork(ctx, \"network\", \u0026compute.NetworkArgs{\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.Namespace;\nimport com.pulumi.gcp.servicedirectory.NamespaceArgs;\nimport com.pulumi.gcp.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZoneServiceDirectoryConfigArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZoneServiceDirectoryConfigNamespaceArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\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 Namespace(\"example\", NamespaceArgs.builder() \n .namespaceId(\"example\")\n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var sd_zone = new ManagedZone(\"sd-zone\", ManagedZoneArgs.builder() \n .dnsName(\"services.example.com.\")\n .description(\"Example private DNS Service Directory zone\")\n .visibility(\"private\")\n .serviceDirectoryConfig(ManagedZoneServiceDirectoryConfigArgs.builder()\n .namespace(ManagedZoneServiceDirectoryConfigNamespaceArgs.builder()\n .namespaceUrl(example.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var network = new Network(\"network\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sd-zone:\n type: gcp:dns:ManagedZone\n properties:\n dnsName: services.example.com.\n description: Example private DNS Service Directory zone\n visibility: private\n serviceDirectoryConfig:\n namespace:\n namespaceUrl: ${example.id}\n options:\n provider: ${[\"google-beta\"]}\n example:\n type: gcp:servicedirectory:Namespace\n properties:\n namespaceId: example\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n network:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Dns Managed Zone Cloud Logging\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cloud_logging_enabled_zone = new gcp.dns.ManagedZone(\"cloud-logging-enabled-zone\", {\n cloudLoggingConfig: {\n enableLogging: true,\n },\n description: \"Example cloud logging enabled DNS zone\",\n dnsName: \"services.example.com.\",\n labels: {\n foo: \"bar\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncloud_logging_enabled_zone = gcp.dns.ManagedZone(\"cloud-logging-enabled-zone\",\n cloud_logging_config=gcp.dns.ManagedZoneCloudLoggingConfigArgs(\n enable_logging=True,\n ),\n description=\"Example cloud logging enabled DNS zone\",\n dns_name=\"services.example.com.\",\n labels={\n \"foo\": \"bar\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cloud_logging_enabled_zone = new Gcp.Dns.ManagedZone(\"cloud-logging-enabled-zone\", new()\n {\n CloudLoggingConfig = new Gcp.Dns.Inputs.ManagedZoneCloudLoggingConfigArgs\n {\n EnableLogging = true,\n },\n Description = \"Example cloud logging enabled DNS zone\",\n DnsName = \"services.example.com.\",\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := dns.NewManagedZone(ctx, \"cloud-logging-enabled-zone\", \u0026dns.ManagedZoneArgs{\n\t\t\tCloudLoggingConfig: \u0026dns.ManagedZoneCloudLoggingConfigArgs{\n\t\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\t},\n\t\t\tDescription: pulumi.String(\"Example cloud logging enabled DNS zone\"),\n\t\t\tDnsName: pulumi.String(\"services.example.com.\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.dns.ManagedZone;\nimport com.pulumi.gcp.dns.ManagedZoneArgs;\nimport com.pulumi.gcp.dns.inputs.ManagedZoneCloudLoggingConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cloud_logging_enabled_zone = new ManagedZone(\"cloud-logging-enabled-zone\", ManagedZoneArgs.builder() \n .cloudLoggingConfig(ManagedZoneCloudLoggingConfigArgs.builder()\n .enableLogging(true)\n .build())\n .description(\"Example cloud logging enabled DNS zone\")\n .dnsName(\"services.example.com.\")\n .labels(Map.of(\"foo\", \"bar\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cloud-logging-enabled-zone:\n type: gcp:dns:ManagedZone\n properties:\n cloudLoggingConfig:\n enableLogging: true\n description: Example cloud logging enabled DNS zone\n dnsName: services.example.com.\n labels:\n foo: bar\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nManagedZone can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:dns/managedZone:ManagedZone default projects/{{project}}/managedZones/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:dns/managedZone:ManagedZone default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:dns/managedZone:ManagedZone default {{name}}\n```\n\n ", "properties": { "cloudLoggingConfig": { "$ref": "#/types/gcp:dns/ManagedZoneCloudLoggingConfig:ManagedZoneCloudLoggingConfig", @@ -159397,7 +160844,7 @@ }, "description": { "type": "string", - "description": "A textual description field. Defaults to 'Managed by Pulumi'.\n", + "description": "A textual description field. Defaults to 'Managed by Terraform'.\n", "default": "Managed by Pulumi" }, "dnsName": { @@ -159452,11 +160899,11 @@ }, "reverseLookup": { "type": "boolean", - "description": "Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse\nlookup queries using automatically configured records for VPC resources. This only applies\nto networks listed under `private_visibility_config`.\n" + "description": "Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using\nautomatically configured records for VPC resources. This only applies to networks listed under\n'private_visibility_config'.\n" }, "serviceDirectoryConfig": { "$ref": "#/types/gcp:dns/ManagedZoneServiceDirectoryConfig:ManagedZoneServiceDirectoryConfig", - "description": "The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone.\nStructure is documented below.\n" + "description": "The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains\ninformation related to the namespace associated with the zone.\n" }, "visibility": { "type": "string", @@ -159480,7 +160927,7 @@ }, "description": { "type": "string", - "description": "A textual description field. Defaults to 'Managed by Pulumi'.\n", + "description": "A textual description field. Defaults to 'Managed by Terraform'.\n", "default": "Managed by Pulumi" }, "dnsName": { @@ -159527,12 +160974,12 @@ }, "reverseLookup": { "type": "boolean", - "description": "Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse\nlookup queries using automatically configured records for VPC resources. This only applies\nto networks listed under `private_visibility_config`.\n", + "description": "Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using\nautomatically configured records for VPC resources. This only applies to networks listed under\n'private_visibility_config'.\n", "willReplaceOnChanges": true }, "serviceDirectoryConfig": { "$ref": "#/types/gcp:dns/ManagedZoneServiceDirectoryConfig:ManagedZoneServiceDirectoryConfig", - "description": "The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone.\nStructure is documented below.\n", + "description": "The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains\ninformation related to the namespace associated with the zone.\n", "willReplaceOnChanges": true }, "visibility": { @@ -159557,7 +161004,7 @@ }, "description": { "type": "string", - "description": "A textual description field. Defaults to 'Managed by Pulumi'.\n", + "description": "A textual description field. Defaults to 'Managed by Terraform'.\n", "default": "Managed by Pulumi" }, "dnsName": { @@ -159615,12 +161062,12 @@ }, "reverseLookup": { "type": "boolean", - "description": "Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse\nlookup queries using automatically configured records for VPC resources. This only applies\nto networks listed under `private_visibility_config`.\n", + "description": "Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using\nautomatically configured records for VPC resources. This only applies to networks listed under\n'private_visibility_config'.\n", "willReplaceOnChanges": true }, "serviceDirectoryConfig": { "$ref": "#/types/gcp:dns/ManagedZoneServiceDirectoryConfig:ManagedZoneServiceDirectoryConfig", - "description": "The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone.\nStructure is documented below.\n", + "description": "The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains\ninformation related to the namespace associated with the zone.\n", "willReplaceOnChanges": true }, "visibility": { @@ -159633,7 +161080,7 @@ } }, "gcp:dns/policy:Policy": { - "description": "A policy is a collection of DNS rules applied to one or more Virtual\nPrivate Cloud resources.\n\nTo get more information about Policy, see:\n\n* [API documentation](https://cloud.google.com/dns/docs/reference/v1beta2/policies)\n* How-to Guides\n * [Using DNS server policies](https://cloud.google.com/dns/zones/#using-dns-server-policies)\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Dns Policy Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network_1 = new gcp.compute.Network(\"network-1\", {autoCreateSubnetworks: false});\nconst network_2 = new gcp.compute.Network(\"network-2\", {autoCreateSubnetworks: false});\nconst example_policy = new gcp.dns.Policy(\"example-policy\", {\n enableInboundForwarding: true,\n enableLogging: true,\n alternativeNameServerConfig: {\n targetNameServers: [\n {\n ipv4Address: \"172.16.1.10\",\n forwardingPath: \"private\",\n },\n {\n ipv4Address: \"172.16.1.20\",\n },\n ],\n },\n networks: [\n {\n networkUrl: network_1.id,\n },\n {\n networkUrl: network_2.id,\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_1 = gcp.compute.Network(\"network-1\", auto_create_subnetworks=False)\nnetwork_2 = gcp.compute.Network(\"network-2\", auto_create_subnetworks=False)\nexample_policy = gcp.dns.Policy(\"example-policy\",\n enable_inbound_forwarding=True,\n enable_logging=True,\n alternative_name_server_config=gcp.dns.PolicyAlternativeNameServerConfigArgs(\n target_name_servers=[\n gcp.dns.PolicyAlternativeNameServerConfigTargetNameServerArgs(\n ipv4_address=\"172.16.1.10\",\n forwarding_path=\"private\",\n ),\n gcp.dns.PolicyAlternativeNameServerConfigTargetNameServerArgs(\n ipv4_address=\"172.16.1.20\",\n ),\n ],\n ),\n networks=[\n gcp.dns.PolicyNetworkArgs(\n network_url=network_1.id,\n ),\n gcp.dns.PolicyNetworkArgs(\n network_url=network_2.id,\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network_1 = new Gcp.Compute.Network(\"network-1\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var network_2 = new Gcp.Compute.Network(\"network-2\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var example_policy = new Gcp.Dns.Policy(\"example-policy\", new()\n {\n EnableInboundForwarding = true,\n EnableLogging = true,\n AlternativeNameServerConfig = new Gcp.Dns.Inputs.PolicyAlternativeNameServerConfigArgs\n {\n TargetNameServers = new[]\n {\n new Gcp.Dns.Inputs.PolicyAlternativeNameServerConfigTargetNameServerArgs\n {\n Ipv4Address = \"172.16.1.10\",\n ForwardingPath = \"private\",\n },\n new Gcp.Dns.Inputs.PolicyAlternativeNameServerConfigTargetNameServerArgs\n {\n Ipv4Address = \"172.16.1.20\",\n },\n },\n },\n Networks = new[]\n {\n new Gcp.Dns.Inputs.PolicyNetworkArgs\n {\n NetworkUrl = network_1.Id,\n },\n new Gcp.Dns.Inputs.PolicyNetworkArgs\n {\n NetworkUrl = network_2.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"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, \"network-1\", \u0026compute.NetworkArgs{\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.NewNetwork(ctx, \"network-2\", \u0026compute.NetworkArgs{\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 = dns.NewPolicy(ctx, \"example-policy\", \u0026dns.PolicyArgs{\n\t\t\tEnableInboundForwarding: pulumi.Bool(true),\n\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\tAlternativeNameServerConfig: \u0026dns.PolicyAlternativeNameServerConfigArgs{\n\t\t\t\tTargetNameServers: dns.PolicyAlternativeNameServerConfigTargetNameServerArray{\n\t\t\t\t\t\u0026dns.PolicyAlternativeNameServerConfigTargetNameServerArgs{\n\t\t\t\t\t\tIpv4Address: pulumi.String(\"172.16.1.10\"),\n\t\t\t\t\t\tForwardingPath: pulumi.String(\"private\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dns.PolicyAlternativeNameServerConfigTargetNameServerArgs{\n\t\t\t\t\t\tIpv4Address: pulumi.String(\"172.16.1.20\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworks: dns.PolicyNetworkArray{\n\t\t\t\t\u0026dns.PolicyNetworkArgs{\n\t\t\t\t\tNetworkUrl: network_1.ID(),\n\t\t\t\t},\n\t\t\t\t\u0026dns.PolicyNetworkArgs{\n\t\t\t\t\tNetworkUrl: network_2.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.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.dns.Policy;\nimport com.pulumi.gcp.dns.PolicyArgs;\nimport com.pulumi.gcp.dns.inputs.PolicyAlternativeNameServerConfigArgs;\nimport com.pulumi.gcp.dns.inputs.PolicyNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_1 = new Network(\"network-1\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var network_2 = new Network(\"network-2\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var example_policy = new Policy(\"example-policy\", PolicyArgs.builder() \n .enableInboundForwarding(true)\n .enableLogging(true)\n .alternativeNameServerConfig(PolicyAlternativeNameServerConfigArgs.builder()\n .targetNameServers( \n PolicyAlternativeNameServerConfigTargetNameServerArgs.builder()\n .ipv4Address(\"172.16.1.10\")\n .forwardingPath(\"private\")\n .build(),\n PolicyAlternativeNameServerConfigTargetNameServerArgs.builder()\n .ipv4Address(\"172.16.1.20\")\n .build())\n .build())\n .networks( \n PolicyNetworkArgs.builder()\n .networkUrl(network_1.id())\n .build(),\n PolicyNetworkArgs.builder()\n .networkUrl(network_2.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-policy:\n type: gcp:dns:Policy\n properties:\n enableInboundForwarding: true\n enableLogging: true\n alternativeNameServerConfig:\n targetNameServers:\n - ipv4Address: 172.16.1.10\n forwardingPath: private\n - ipv4Address: 172.16.1.20\n networks:\n - networkUrl: ${[\"network-1\"].id}\n - networkUrl: ${[\"network-2\"].id}\n network-1:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n network-2:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPolicy can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:dns/policy:Policy default projects/{{project}}/policies/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:dns/policy:Policy default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:dns/policy:Policy default {{name}}\n```\n\n ", + "description": "A policy is a collection of DNS rules applied to one or more Virtual\nPrivate Cloud resources.\n\n\nTo get more information about Policy, see:\n\n* [API documentation](https://cloud.google.com/dns/docs/reference/v1beta2/policies)\n* How-to Guides\n * [Using DNS server policies](https://cloud.google.com/dns/zones/#using-dns-server-policies)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Dns Policy Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst network_1 = new gcp.compute.Network(\"network-1\", {autoCreateSubnetworks: false});\nconst network_2 = new gcp.compute.Network(\"network-2\", {autoCreateSubnetworks: false});\nconst example_policy = new gcp.dns.Policy(\"example-policy\", {\n enableInboundForwarding: true,\n enableLogging: true,\n alternativeNameServerConfig: {\n targetNameServers: [\n {\n ipv4Address: \"172.16.1.10\",\n forwardingPath: \"private\",\n },\n {\n ipv4Address: \"172.16.1.20\",\n },\n ],\n },\n networks: [\n {\n networkUrl: network_1.id,\n },\n {\n networkUrl: network_2.id,\n },\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nnetwork_1 = gcp.compute.Network(\"network-1\", auto_create_subnetworks=False)\nnetwork_2 = gcp.compute.Network(\"network-2\", auto_create_subnetworks=False)\nexample_policy = gcp.dns.Policy(\"example-policy\",\n enable_inbound_forwarding=True,\n enable_logging=True,\n alternative_name_server_config=gcp.dns.PolicyAlternativeNameServerConfigArgs(\n target_name_servers=[\n gcp.dns.PolicyAlternativeNameServerConfigTargetNameServerArgs(\n ipv4_address=\"172.16.1.10\",\n forwarding_path=\"private\",\n ),\n gcp.dns.PolicyAlternativeNameServerConfigTargetNameServerArgs(\n ipv4_address=\"172.16.1.20\",\n ),\n ],\n ),\n networks=[\n gcp.dns.PolicyNetworkArgs(\n network_url=network_1.id,\n ),\n gcp.dns.PolicyNetworkArgs(\n network_url=network_2.id,\n ),\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var network_1 = new Gcp.Compute.Network(\"network-1\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var network_2 = new Gcp.Compute.Network(\"network-2\", new()\n {\n AutoCreateSubnetworks = false,\n });\n\n var example_policy = new Gcp.Dns.Policy(\"example-policy\", new()\n {\n EnableInboundForwarding = true,\n EnableLogging = true,\n AlternativeNameServerConfig = new Gcp.Dns.Inputs.PolicyAlternativeNameServerConfigArgs\n {\n TargetNameServers = new[]\n {\n new Gcp.Dns.Inputs.PolicyAlternativeNameServerConfigTargetNameServerArgs\n {\n Ipv4Address = \"172.16.1.10\",\n ForwardingPath = \"private\",\n },\n new Gcp.Dns.Inputs.PolicyAlternativeNameServerConfigTargetNameServerArgs\n {\n Ipv4Address = \"172.16.1.20\",\n },\n },\n },\n Networks = new[]\n {\n new Gcp.Dns.Inputs.PolicyNetworkArgs\n {\n NetworkUrl = network_1.Id,\n },\n new Gcp.Dns.Inputs.PolicyNetworkArgs\n {\n NetworkUrl = network_2.Id,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns\"\n\t\"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, \"network-1\", \u0026compute.NetworkArgs{\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.NewNetwork(ctx, \"network-2\", \u0026compute.NetworkArgs{\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 = dns.NewPolicy(ctx, \"example-policy\", \u0026dns.PolicyArgs{\n\t\t\tEnableInboundForwarding: pulumi.Bool(true),\n\t\t\tEnableLogging: pulumi.Bool(true),\n\t\t\tAlternativeNameServerConfig: \u0026dns.PolicyAlternativeNameServerConfigArgs{\n\t\t\t\tTargetNameServers: dns.PolicyAlternativeNameServerConfigTargetNameServerArray{\n\t\t\t\t\t\u0026dns.PolicyAlternativeNameServerConfigTargetNameServerArgs{\n\t\t\t\t\t\tIpv4Address: pulumi.String(\"172.16.1.10\"),\n\t\t\t\t\t\tForwardingPath: pulumi.String(\"private\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026dns.PolicyAlternativeNameServerConfigTargetNameServerArgs{\n\t\t\t\t\t\tIpv4Address: pulumi.String(\"172.16.1.20\"),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tNetworks: dns.PolicyNetworkArray{\n\t\t\t\t\u0026dns.PolicyNetworkArgs{\n\t\t\t\t\tNetworkUrl: network_1.ID(),\n\t\t\t\t},\n\t\t\t\t\u0026dns.PolicyNetworkArgs{\n\t\t\t\t\tNetworkUrl: network_2.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.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.dns.Policy;\nimport com.pulumi.gcp.dns.PolicyArgs;\nimport com.pulumi.gcp.dns.inputs.PolicyAlternativeNameServerConfigArgs;\nimport com.pulumi.gcp.dns.inputs.PolicyNetworkArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_1 = new Network(\"network-1\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var network_2 = new Network(\"network-2\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build());\n\n var example_policy = new Policy(\"example-policy\", PolicyArgs.builder() \n .enableInboundForwarding(true)\n .enableLogging(true)\n .alternativeNameServerConfig(PolicyAlternativeNameServerConfigArgs.builder()\n .targetNameServers( \n PolicyAlternativeNameServerConfigTargetNameServerArgs.builder()\n .ipv4Address(\"172.16.1.10\")\n .forwardingPath(\"private\")\n .build(),\n PolicyAlternativeNameServerConfigTargetNameServerArgs.builder()\n .ipv4Address(\"172.16.1.20\")\n .build())\n .build())\n .networks( \n PolicyNetworkArgs.builder()\n .networkUrl(network_1.id())\n .build(),\n PolicyNetworkArgs.builder()\n .networkUrl(network_2.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-policy:\n type: gcp:dns:Policy\n properties:\n enableInboundForwarding: true\n enableLogging: true\n alternativeNameServerConfig:\n targetNameServers:\n - ipv4Address: 172.16.1.10\n forwardingPath: private\n - ipv4Address: 172.16.1.20\n networks:\n - networkUrl: ${[\"network-1\"].id}\n - networkUrl: ${[\"network-2\"].id}\n network-1:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n network-2:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nPolicy can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:dns/policy:Policy default projects/{{project}}/policies/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:dns/policy:Policy default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:dns/policy:Policy default {{name}}\n```\n\n ", "properties": { "alternativeNameServerConfig": { "$ref": "#/types/gcp:dns/PolicyAlternativeNameServerConfig:PolicyAlternativeNameServerConfig", @@ -159641,7 +161088,7 @@ }, "description": { "type": "string", - "description": "A textual description field. Defaults to 'Managed by Pulumi'.\n" + "description": "A textual description field. Defaults to 'Managed by Terraform'.\n" }, "enableInboundForwarding": { "type": "boolean", @@ -159678,7 +161125,7 @@ }, "description": { "type": "string", - "description": "A textual description field. Defaults to 'Managed by Pulumi'.\n" + "description": "A textual description field. Defaults to 'Managed by Terraform'.\n" }, "enableInboundForwarding": { "type": "boolean", @@ -159715,7 +161162,7 @@ }, "description": { "type": "string", - "description": "A textual description field. Defaults to 'Managed by Pulumi'.\n" + "description": "A textual description field. Defaults to 'Managed by Terraform'.\n" }, "enableInboundForwarding": { "type": "boolean", @@ -160679,7 +162126,7 @@ } }, "gcp:essentialcontacts/contact:Contact": { - "description": "A contact that will receive notifications from Google Cloud.\n\nTo get more information about Contact, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/docs/reference/essentialcontacts/rest/v1/projects.contacts)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/resource-manager/docs/managing-notification-contacts)\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 Essential Contacts API will return a 403 error.\nYour account must have the `serviceusage.services.use` permission on the\n`billing_project` you defined.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Essential Contact\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst contact = new gcp.essentialcontacts.Contact(\"contact\", {\n parent: project.then(project =\u003e project.id),\n email: \"foo@bar.com\",\n languageTag: \"en-GB\",\n notificationCategorySubscriptions: [\"ALL\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ncontact = gcp.essentialcontacts.Contact(\"contact\",\n parent=project.id,\n email=\"foo@bar.com\",\n language_tag=\"en-GB\",\n notification_category_subscriptions=[\"ALL\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var contact = new Gcp.EssentialContacts.Contact(\"contact\", new()\n {\n Parent = project.Apply(getProjectResult =\u003e getProjectResult.Id),\n Email = \"foo@bar.com\",\n LanguageTag = \"en-GB\",\n NotificationCategorySubscriptions = new[]\n {\n \"ALL\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/essentialcontacts\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = essentialcontacts.NewContact(ctx, \"contact\", \u0026essentialcontacts.ContactArgs{\n\t\t\tParent: *pulumi.String(project.Id),\n\t\t\tEmail: pulumi.String(\"foo@bar.com\"),\n\t\t\tLanguageTag: pulumi.String(\"en-GB\"),\n\t\t\tNotificationCategorySubscriptions: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"ALL\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.essentialcontacts.Contact;\nimport com.pulumi.gcp.essentialcontacts.ContactArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 contact = new Contact(\"contact\", ContactArgs.builder() \n .parent(project.applyValue(getProjectResult -\u003e getProjectResult.id()))\n .email(\"foo@bar.com\")\n .languageTag(\"en-GB\")\n .notificationCategorySubscriptions(\"ALL\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n contact:\n type: gcp:essentialcontacts:Contact\n properties:\n parent: ${project.id}\n email: foo@bar.com\n languageTag: en-GB\n notificationCategorySubscriptions:\n - ALL\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nContact can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:essentialcontacts/contact:Contact default {{name}}\n```\n\n ", + "description": "A contact that will receive notifications from Google Cloud.\n\n\nTo get more information about Contact, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/docs/reference/essentialcontacts/rest/v1/projects.contacts)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/resource-manager/docs/managing-notification-contacts)\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 Essential Contacts API will return a 403 error. \nYour account must have the `serviceusage.services.use` permission on the \n`billing_project` you defined.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Essential Contact\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst contact = new gcp.essentialcontacts.Contact(\"contact\", {\n parent: project.then(project =\u003e project.id),\n email: \"foo@bar.com\",\n languageTag: \"en-GB\",\n notificationCategorySubscriptions: [\"ALL\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\ncontact = gcp.essentialcontacts.Contact(\"contact\",\n parent=project.id,\n email=\"foo@bar.com\",\n language_tag=\"en-GB\",\n notification_category_subscriptions=[\"ALL\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var contact = new Gcp.EssentialContacts.Contact(\"contact\", new()\n {\n Parent = project.Apply(getProjectResult =\u003e getProjectResult.Id),\n Email = \"foo@bar.com\",\n LanguageTag = \"en-GB\",\n NotificationCategorySubscriptions = new[]\n {\n \"ALL\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/essentialcontacts\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = essentialcontacts.NewContact(ctx, \"contact\", \u0026essentialcontacts.ContactArgs{\n\t\t\tParent: *pulumi.String(project.Id),\n\t\t\tEmail: pulumi.String(\"foo@bar.com\"),\n\t\t\tLanguageTag: pulumi.String(\"en-GB\"),\n\t\t\tNotificationCategorySubscriptions: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"ALL\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.essentialcontacts.Contact;\nimport com.pulumi.gcp.essentialcontacts.ContactArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 contact = new Contact(\"contact\", ContactArgs.builder() \n .parent(project.applyValue(getProjectResult -\u003e getProjectResult.id()))\n .email(\"foo@bar.com\")\n .languageTag(\"en-GB\")\n .notificationCategorySubscriptions(\"ALL\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n contact:\n type: gcp:essentialcontacts:Contact\n properties:\n parent: ${project.id}\n email: foo@bar.com\n languageTag: en-GB\n notificationCategorySubscriptions:\n - ALL\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nContact can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:essentialcontacts/contact:Contact default {{name}}\n```\n\n ", "properties": { "email": { "type": "string", @@ -162466,7 +163913,7 @@ } }, "gcp:firebase/project:Project": { - "description": "A Google Cloud Firebase instance. This enables Firebase resources on a given google project.\nSince a FirebaseProject is actually also a GCP Project, a FirebaseProject uses underlying GCP\nidentifiers (most importantly, the projectId) as its own for easy interop with GCP APIs.\nOnce Firebase has been added to a Google Project it cannot be removed.\n\nTo get more information about Project, see:\n\n* [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects)\n* How-to Guides\n * [Official Documentation](https://firebase.google.com/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Firebase Project Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultProject = new gcp.organizations.Project(\"defaultProject\", {\n projectId: \"tf-test\",\n orgId: \"123456789\",\n}, {\n provider: google_beta,\n});\nconst defaultFirebase_projectProject = new gcp.firebase.Project(\"defaultFirebase/projectProject\", {project: defaultProject.projectId}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_project = gcp.organizations.Project(\"defaultProject\",\n project_id=\"tf-test\",\n org_id=\"123456789\",\n opts=pulumi.ResourceOptions(provider=google_beta))\ndefault_firebase_project_project = gcp.firebase.Project(\"defaultFirebase/projectProject\", project=default_project.project_id,\nopts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultProject = new Gcp.Organizations.Project(\"defaultProject\", new()\n {\n ProjectId = \"tf-test\",\n OrgId = \"123456789\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var defaultFirebase_projectProject = new Gcp.Firebase.Project(\"defaultFirebase/projectProject\", new()\n {\n ProjectID = defaultProject.ProjectId,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/firebase\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdefaultProject, err := organizations.NewProject(ctx, \"defaultProject\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firebase.NewProject(ctx, \"defaultFirebase/projectProject\", \u0026firebase.ProjectArgs{\n\t\t\tProject: defaultProject.ProjectId,\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.firebase.Project;\nimport com.pulumi.gcp.firebase.ProjectArgs;\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 defaultProject = new Project(\"defaultProject\", ProjectArgs.builder() \n .projectId(\"tf-test\")\n .orgId(\"123456789\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultFirebase_projectProject = new Project(\"defaultFirebase/projectProject\", ProjectArgs.builder() \n .project(defaultProject.projectId())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultProject:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test\n orgId: '123456789'\n options:\n provider: ${[\"google-beta\"]}\n defaultFirebase/projectProject:\n type: gcp:firebase:Project\n properties:\n project: ${defaultProject.projectId}\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nProject can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:firebase/project:Project default projects/{{project}}\n```\n\n\n\n```sh\n $ pulumi import gcp:firebase/project:Project default {{project}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nProject can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:firebase/project:Project default projects/{{project}}\n```\n\n\n\n```sh\n $ pulumi import gcp:firebase/project:Project default {{project}}\n```\n\n ", "properties": { "displayName": { "type": "string", @@ -162529,7 +163976,7 @@ } }, "gcp:firebase/projectLocation:ProjectLocation": { - "description": "Sets the default Google Cloud Platform (GCP) resource location for the specified FirebaseProject.\nThis method creates an App Engine application with a default Cloud Storage bucket, located in the specified\nlocationId. This location must be one of the available GCP resource locations.\nAfter the default GCP resource location is finalized, or if it was already set, it cannot be changed.\nThe default GCP resource location for the specified FirebaseProject might already be set because either the\nGCP Project already has an App Engine application or defaultLocation.finalize was previously called with a\nspecified locationId. Any new calls to defaultLocation.finalize with a different specified locationId will\nreturn a 409 error.\n\nTo get more information about ProjectLocation, see:\n\n* [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.defaultLocation/finalize)\n* How-to Guides\n * [Official Documentation](https://firebase.google.com/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Firebase Project Location Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultProject = new gcp.organizations.Project(\"defaultProject\", {\n projectId: \"tf-test\",\n orgId: \"123456789\",\n}, {\n provider: google_beta,\n});\nconst defaultFirebase_projectProject = new gcp.firebase.Project(\"defaultFirebase/projectProject\", {project: defaultProject.projectId}, {\n provider: google_beta,\n});\nconst basic = new gcp.firebase.ProjectLocation(\"basic\", {\n project: defaultFirebase / projectProject.project,\n locationId: \"us-central\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_project = gcp.organizations.Project(\"defaultProject\",\n project_id=\"tf-test\",\n org_id=\"123456789\",\n opts=pulumi.ResourceOptions(provider=google_beta))\ndefault_firebase_project_project = gcp.firebase.Project(\"defaultFirebase/projectProject\", project=default_project.project_id,\nopts=pulumi.ResourceOptions(provider=google_beta))\nbasic = gcp.firebase.ProjectLocation(\"basic\",\n project=default_firebase / project_project[\"project\"],\n location_id=\"us-central\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultProject = new Gcp.Organizations.Project(\"defaultProject\", new()\n {\n ProjectId = \"tf-test\",\n OrgId = \"123456789\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var defaultFirebase_projectProject = new Gcp.Firebase.Project(\"defaultFirebase/projectProject\", new()\n {\n ProjectID = defaultProject.ProjectId,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var basic = new Gcp.Firebase.ProjectLocation(\"basic\", new()\n {\n Project = defaultFirebase / projectProject.Project,\n LocationId = \"us-central\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/firebase\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdefaultProject, err := organizations.NewProject(ctx, \"defaultProject\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firebase.NewProject(ctx, \"defaultFirebase/projectProject\", \u0026firebase.ProjectArgs{\n\t\t\tProject: defaultProject.ProjectId,\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = firebase.NewProjectLocation(ctx, \"basic\", \u0026firebase.ProjectLocationArgs{\n\t\t\tProject: defaultFirebase / projectProject.Project,\n\t\t\tLocationId: pulumi.String(\"us-central\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.firebase.Project;\nimport com.pulumi.gcp.firebase.ProjectArgs;\nimport com.pulumi.gcp.firebase.ProjectLocation;\nimport com.pulumi.gcp.firebase.ProjectLocationArgs;\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 defaultProject = new Project(\"defaultProject\", ProjectArgs.builder() \n .projectId(\"tf-test\")\n .orgId(\"123456789\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultFirebase_projectProject = new Project(\"defaultFirebase/projectProject\", ProjectArgs.builder() \n .project(defaultProject.projectId())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var basic = new ProjectLocation(\"basic\", ProjectLocationArgs.builder() \n .project(defaultFirebase / projectProject.project())\n .locationId(\"us-central\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nProjectLocation can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:firebase/projectLocation:ProjectLocation default projects/{{project}}\n```\n\n\n\n```sh\n $ pulumi import gcp:firebase/projectLocation:ProjectLocation default {{project}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nProjectLocation can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:firebase/projectLocation:ProjectLocation default projects/{{project}}\n```\n\n\n\n```sh\n $ pulumi import gcp:firebase/projectLocation:ProjectLocation default {{project}}\n```\n\n ", "properties": { "locationId": { "type": "string", @@ -162630,7 +164077,7 @@ } }, "gcp:firebase/webApp:WebApp": { - "description": "A Google Cloud Firebase web application instance\n\nTo get more information about WebApp, see:\n\n* [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.webApps)\n* How-to Guides\n * [Official Documentation](https://firebase.google.com/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Firebase Web App Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultProject = new gcp.organizations.Project(\"defaultProject\", {\n projectId: \"tf-test\",\n orgId: \"123456789\",\n}, {\n provider: google_beta,\n});\nconst defaultFirebase_projectProject = new gcp.firebase.Project(\"defaultFirebase/projectProject\", {project: defaultProject.projectId}, {\n provider: google_beta,\n});\nconst basicWebApp = new gcp.firebase.WebApp(\"basicWebApp\", {\n project: defaultProject.projectId,\n displayName: \"Display Name Basic\",\n deletionPolicy: \"DELETE\",\n}, {\n provider: google_beta,\n dependsOn: [defaultFirebase / projectProject],\n});\nconst basicWebAppConfig = gcp.firebase.getWebAppConfigOutput({\n webAppId: basicWebApp.appId,\n});\nconst defaultBucket = new gcp.storage.Bucket(\"defaultBucket\", {location: \"US\"}, {\n provider: google_beta,\n});\nconst defaultBucketObject = new gcp.storage.BucketObject(\"defaultBucketObject\", {\n bucket: defaultBucket.name,\n content: pulumi.all([basicWebApp.appId, basicWebAppConfig, basicWebAppConfig, basicWebAppConfig[\"database_url\"] || \"\", basicWebAppConfig[\"storage_bucket\"] || \"\", basicWebAppConfig[\"messaging_sender_id\"] || \"\", basicWebAppConfig[\"measurement_id\"] || \"\"]).apply(([appId, basicWebAppConfig, basicWebAppConfig1, s, s1, s2, s3]) =\u003e JSON.stringify({\n appId: appId,\n apiKey: basicWebAppConfig.apiKey,\n authDomain: basicWebAppConfig1.authDomain,\n databaseURL: s,\n storageBucket: s1,\n messagingSenderId: s2,\n measurementId: s3,\n })),\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\ndefault_project = gcp.organizations.Project(\"defaultProject\",\n project_id=\"tf-test\",\n org_id=\"123456789\",\n opts=pulumi.ResourceOptions(provider=google_beta))\ndefault_firebase_project_project = gcp.firebase.Project(\"defaultFirebase/projectProject\", project=default_project.project_id,\nopts=pulumi.ResourceOptions(provider=google_beta))\nbasic_web_app = gcp.firebase.WebApp(\"basicWebApp\",\n project=default_project.project_id,\n display_name=\"Display Name Basic\",\n deletion_policy=\"DELETE\",\n opts=pulumi.ResourceOptions(provider=google_beta,\n depends_on=[default_firebase / project_project]))\nbasic_web_app_config = gcp.firebase.get_web_app_config_output(web_app_id=basic_web_app.app_id)\ndefault_bucket = gcp.storage.Bucket(\"defaultBucket\", location=\"US\",\nopts=pulumi.ResourceOptions(provider=google_beta))\ndefault_bucket_object = gcp.storage.BucketObject(\"defaultBucketObject\",\n bucket=default_bucket.name,\n content=pulumi.Output.all(basic_web_app.app_id, basic_web_app_config, basic_web_app_config, (lambda v, def: v if v is not None else def)(basic_web_app_config[\"database_url\"], \"\"), (lambda v, def: v if v is not None else def)(basic_web_app_config[\"storage_bucket\"], \"\"), (lambda v, def: v if v is not None else def)(basic_web_app_config[\"messaging_sender_id\"], \"\"), (lambda v, def: v if v is not None else def)(basic_web_app_config[\"measurement_id\"], \"\")).apply(lambda app_id, basic_web_app_config, basic_web_app_config1, s, s1, s2, s3: json.dumps({\n \"appId\": app_id,\n \"apiKey\": basic_web_app_config.api_key,\n \"authDomain\": basic_web_app_config1.auth_domain,\n \"databaseURL\": s,\n \"storageBucket\": s1,\n \"messagingSenderId\": s2,\n \"measurementId\": s3,\n })),\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultProject = new Gcp.Organizations.Project(\"defaultProject\", new()\n {\n ProjectId = \"tf-test\",\n OrgId = \"123456789\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var defaultFirebase_projectProject = new Gcp.Firebase.Project(\"defaultFirebase/projectProject\", new()\n {\n ProjectID = defaultProject.ProjectId,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var basicWebApp = new Gcp.Firebase.WebApp(\"basicWebApp\", new()\n {\n Project = defaultProject.ProjectId,\n DisplayName = \"Display Name Basic\",\n DeletionPolicy = \"DELETE\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n DependsOn = new[]\n {\n defaultFirebase / projectProject,\n },\n });\n\n var basicWebAppConfig = Gcp.Firebase.GetWebAppConfig.Invoke(new()\n {\n WebAppId = basicWebApp.AppId,\n });\n\n var defaultBucket = new Gcp.Storage.Bucket(\"defaultBucket\", new()\n {\n Location = \"US\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var defaultBucketObject = new Gcp.Storage.BucketObject(\"defaultBucketObject\", new()\n {\n Bucket = defaultBucket.Name,\n Content = Output.Tuple(basicWebApp.AppId, basicWebAppConfig, basicWebAppConfig, basicWebAppConfig[\"database_url\"] ?? \"\", basicWebAppConfig[\"storage_bucket\"] ?? \"\", basicWebAppConfig[\"messaging_sender_id\"] ?? \"\", basicWebAppConfig[\"measurement_id\"] ?? \"\").Apply(values =\u003e\n {\n var appId = values.Item1;\n var basicWebAppConfig = values.Item2;\n var basicWebAppConfig1 = values.Item3;\n var s = values.Item4;\n var s1 = values.Item5;\n var s2 = values.Item6;\n var s3 = values.Item7;\n return JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"appId\"] = appId,\n [\"apiKey\"] = basicWebAppConfig.Apply(getWebAppConfigResult =\u003e getWebAppConfigResult.ApiKey),\n [\"authDomain\"] = basicWebAppConfig1.AuthDomain,\n [\"databaseURL\"] = s,\n [\"storageBucket\"] = s1,\n [\"messagingSenderId\"] = s2,\n [\"measurementId\"] = s3,\n });\n }),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\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.firebase.Project;\nimport com.pulumi.gcp.firebase.ProjectArgs;\nimport com.pulumi.gcp.firebase.WebApp;\nimport com.pulumi.gcp.firebase.WebAppArgs;\nimport com.pulumi.gcp.firebase.FirebaseFunctions;\nimport com.pulumi.gcp.firebase.inputs.GetWebAppConfigArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketObject;\nimport com.pulumi.gcp.storage.BucketObjectArgs;\nimport 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 defaultProject = new Project(\"defaultProject\", ProjectArgs.builder() \n .projectId(\"tf-test\")\n .orgId(\"123456789\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultFirebase_projectProject = new Project(\"defaultFirebase/projectProject\", ProjectArgs.builder() \n .project(defaultProject.projectId())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var basicWebApp = new WebApp(\"basicWebApp\", WebAppArgs.builder() \n .project(defaultProject.projectId())\n .displayName(\"Display Name Basic\")\n .deletionPolicy(\"DELETE\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .dependsOn(defaultFirebase / projectProject)\n .build());\n\n final var basicWebAppConfig = FirebaseFunctions.getWebAppConfig(GetWebAppConfigArgs.builder()\n .webAppId(basicWebApp.appId())\n .build());\n\n var defaultBucket = new Bucket(\"defaultBucket\", BucketArgs.builder() \n .location(\"US\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultBucketObject = new BucketObject(\"defaultBucketObject\", BucketObjectArgs.builder() \n .bucket(defaultBucket.name())\n .content(Output.tuple(basicWebApp.appId(), basicWebAppConfig.applyValue(getWebAppConfigResult -\u003e getWebAppConfigResult), basicWebAppConfig.applyValue(getWebAppConfigResult -\u003e getWebAppConfigResult), basicWebAppConfig.applyValue(getWebAppConfigResult -\u003e getWebAppConfigResult)[\"database_url\"], basicWebAppConfig.applyValue(getWebAppConfigResult -\u003e getWebAppConfigResult)[\"storage_bucket\"], basicWebAppConfig.applyValue(getWebAppConfigResult -\u003e getWebAppConfigResult)[\"messaging_sender_id\"], basicWebAppConfig.applyValue(getWebAppConfigResult -\u003e getWebAppConfigResult)[\"measurement_id\"]).applyValue(values -\u003e {\n var appId = values.t1;\n var basicWebAppConfig = values.t2;\n var basicWebAppConfig1 = values.t3;\n var s = values.t4;\n var s1 = values.t5;\n var s2 = values.t6;\n var s3 = values.t7;\n return serializeJson(\n jsonObject(\n jsonProperty(\"appId\", appId),\n jsonProperty(\"apiKey\", basicWebAppConfig.applyValue(getWebAppConfigResult -\u003e getWebAppConfigResult.apiKey())),\n jsonProperty(\"authDomain\", basicWebAppConfig1.authDomain()),\n jsonProperty(\"databaseURL\", s),\n jsonProperty(\"storageBucket\", s1),\n jsonProperty(\"messagingSenderId\", s2),\n jsonProperty(\"measurementId\", s3)\n ));\n }))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nWebApp can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:firebase/webApp:WebApp default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:firebase/webApp:WebApp default {{project}} {{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:firebase/webApp:WebApp default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nWebApp can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:firebase/webApp:WebApp default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:firebase/webApp:WebApp default {{project}} {{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:firebase/webApp:WebApp default {{name}}\n```\n\n ", "properties": { "appId": { "type": "string", @@ -162890,7 +164337,7 @@ } }, "gcp:firestore/document:Document": { - "description": "In Cloud Firestore, the unit of storage is the document. A document is a lightweight record\nthat contains fields, which map to values. Each document is identified by a name.\n\n\nTo get more information about Document, see:\n\n* [API documentation](https://cloud.google.com/firestore/docs/reference/rest/v1/projects.databases.documents)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/firestore/docs/manage-data/add-data)\n\n\u003e **Warning:** This resource creates a Firestore Document on a project that already has\nFirestore enabled. If you haven't already enabled it, you can create a\n`gcp.appengine.Application` resource with `database_type` set to\n`\"CLOUD_FIRESTORE\"` to do so. Your Firestore location will be the same as\nthe App Engine location specified.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Firestore Document Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst mydoc = new gcp.firestore.Document(\"mydoc\", {\n collection: \"somenewcollection\",\n documentId: \"my-doc\",\n fields: \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\",\n project: \"my-project-name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmydoc = gcp.firestore.Document(\"mydoc\",\n collection=\"somenewcollection\",\n document_id=\"my-doc\",\n fields=\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\",\n project=\"my-project-name\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var mydoc = new Gcp.Firestore.Document(\"mydoc\", new()\n {\n Collection = \"somenewcollection\",\n DocumentId = \"my-doc\",\n Fields = \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\",\n Project = \"my-project-name\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := firestore.NewDocument(ctx, \"mydoc\", \u0026firestore.DocumentArgs{\n\t\t\tCollection: pulumi.String(\"somenewcollection\"),\n\t\t\tDocumentId: pulumi.String(\"my-doc\"),\n\t\t\tFields: pulumi.String(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\"),\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.firestore.Document;\nimport com.pulumi.gcp.firestore.DocumentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var mydoc = new Document(\"mydoc\", DocumentArgs.builder() \n .collection(\"somenewcollection\")\n .documentId(\"my-doc\")\n .fields(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\")\n .project(\"my-project-name\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n mydoc:\n type: gcp:firestore:Document\n properties:\n collection: somenewcollection\n documentId: my-doc\n fields: '{\"something\":{\"mapValue\":{\"fields\":{\"akey\":{\"stringValue\":\"avalue\"}}}}}'\n project: my-project-name\n```\n{{% /example %}}\n{{% example %}}\n### Firestore Document Nested Document\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst mydoc = new gcp.firestore.Document(\"mydoc\", {\n collection: \"somenewcollection\",\n documentId: \"my-doc\",\n fields: \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\",\n project: \"my-project-name\",\n});\nconst subDocument = new gcp.firestore.Document(\"subDocument\", {\n collection: pulumi.interpolate`${mydoc.path}/subdocs`,\n documentId: \"bitcoinkey\",\n fields: \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"ayo\\\":{\\\"stringValue\\\":\\\"val2\\\"}}}}}\",\n project: \"my-project-name\",\n});\nconst subSubDocument = new gcp.firestore.Document(\"subSubDocument\", {\n collection: pulumi.interpolate`${subDocument.path}/subsubdocs`,\n documentId: \"asecret\",\n fields: \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"secret\\\":{\\\"stringValue\\\":\\\"hithere\\\"}}}}}\",\n project: \"my-project-name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmydoc = gcp.firestore.Document(\"mydoc\",\n collection=\"somenewcollection\",\n document_id=\"my-doc\",\n fields=\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\",\n project=\"my-project-name\")\nsub_document = gcp.firestore.Document(\"subDocument\",\n collection=mydoc.path.apply(lambda path: f\"{path}/subdocs\"),\n document_id=\"bitcoinkey\",\n fields=\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"ayo\\\":{\\\"stringValue\\\":\\\"val2\\\"}}}}}\",\n project=\"my-project-name\")\nsub_sub_document = gcp.firestore.Document(\"subSubDocument\",\n collection=sub_document.path.apply(lambda path: f\"{path}/subsubdocs\"),\n document_id=\"asecret\",\n fields=\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"secret\\\":{\\\"stringValue\\\":\\\"hithere\\\"}}}}}\",\n project=\"my-project-name\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var mydoc = new Gcp.Firestore.Document(\"mydoc\", new()\n {\n Collection = \"somenewcollection\",\n DocumentId = \"my-doc\",\n Fields = \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\",\n Project = \"my-project-name\",\n });\n\n var subDocument = new Gcp.Firestore.Document(\"subDocument\", new()\n {\n Collection = mydoc.Path.Apply(path =\u003e $\"{path}/subdocs\"),\n DocumentId = \"bitcoinkey\",\n Fields = \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"ayo\\\":{\\\"stringValue\\\":\\\"val2\\\"}}}}}\",\n Project = \"my-project-name\",\n });\n\n var subSubDocument = new Gcp.Firestore.Document(\"subSubDocument\", new()\n {\n Collection = subDocument.Path.Apply(path =\u003e $\"{path}/subsubdocs\"),\n DocumentId = \"asecret\",\n Fields = \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"secret\\\":{\\\"stringValue\\\":\\\"hithere\\\"}}}}}\",\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/v6/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\tmydoc, err := firestore.NewDocument(ctx, \"mydoc\", \u0026firestore.DocumentArgs{\n\t\t\tCollection: pulumi.String(\"somenewcollection\"),\n\t\t\tDocumentId: pulumi.String(\"my-doc\"),\n\t\t\tFields: pulumi.String(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\"),\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\tsubDocument, err := firestore.NewDocument(ctx, \"subDocument\", \u0026firestore.DocumentArgs{\n\t\t\tCollection: mydoc.Path.ApplyT(func(path string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"%v/subdocs\", path), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tDocumentId: pulumi.String(\"bitcoinkey\"),\n\t\t\tFields: pulumi.String(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"ayo\\\":{\\\"stringValue\\\":\\\"val2\\\"}}}}}\"),\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 = firestore.NewDocument(ctx, \"subSubDocument\", \u0026firestore.DocumentArgs{\n\t\t\tCollection: subDocument.Path.ApplyT(func(path string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"%v/subsubdocs\", path), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tDocumentId: pulumi.String(\"asecret\"),\n\t\t\tFields: pulumi.String(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"secret\\\":{\\\"stringValue\\\":\\\"hithere\\\"}}}}}\"),\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.firestore.Document;\nimport com.pulumi.gcp.firestore.DocumentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var mydoc = new Document(\"mydoc\", DocumentArgs.builder() \n .collection(\"somenewcollection\")\n .documentId(\"my-doc\")\n .fields(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\")\n .project(\"my-project-name\")\n .build());\n\n var subDocument = new Document(\"subDocument\", DocumentArgs.builder() \n .collection(mydoc.path().applyValue(path -\u003e String.format(\"%s/subdocs\", path)))\n .documentId(\"bitcoinkey\")\n .fields(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"ayo\\\":{\\\"stringValue\\\":\\\"val2\\\"}}}}}\")\n .project(\"my-project-name\")\n .build());\n\n var subSubDocument = new Document(\"subSubDocument\", DocumentArgs.builder() \n .collection(subDocument.path().applyValue(path -\u003e String.format(\"%s/subsubdocs\", path)))\n .documentId(\"asecret\")\n .fields(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"secret\\\":{\\\"stringValue\\\":\\\"hithere\\\"}}}}}\")\n .project(\"my-project-name\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n mydoc:\n type: gcp:firestore:Document\n properties:\n collection: somenewcollection\n documentId: my-doc\n fields: '{\"something\":{\"mapValue\":{\"fields\":{\"akey\":{\"stringValue\":\"avalue\"}}}}}'\n project: my-project-name\n subDocument:\n type: gcp:firestore:Document\n properties:\n collection: ${mydoc.path}/subdocs\n documentId: bitcoinkey\n fields: '{\"something\":{\"mapValue\":{\"fields\":{\"ayo\":{\"stringValue\":\"val2\"}}}}}'\n project: my-project-name\n subSubDocument:\n type: gcp:firestore:Document\n properties:\n collection: ${subDocument.path}/subsubdocs\n documentId: asecret\n fields: '{\"something\":{\"mapValue\":{\"fields\":{\"secret\":{\"stringValue\":\"hithere\"}}}}}'\n project: my-project-name\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDocument can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:firestore/document:Document default {{name}}\n```\n\n ", + "description": "In Cloud Firestore, the unit of storage is the document. A document is a lightweight record\nthat contains fields, which map to values. Each document is identified by a name.\n\n\nTo get more information about Document, see:\n\n* [API documentation](https://cloud.google.com/firestore/docs/reference/rest/v1/projects.databases.documents)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/firestore/docs/manage-data/add-data)\n\n\u003e **Warning:** This resource creates a Firestore Document on a project that already has\nFirestore enabled. If you haven't already enabled it, you can create a\n`gcp.appengine.Application` resource with `database_type` set to\n`\"CLOUD_FIRESTORE\"` to do so. Your Firestore location will be the same as\nthe App Engine location specified.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Firestore Document Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst mydoc = new gcp.firestore.Document(\"mydoc\", {\n collection: \"somenewcollection\",\n documentId: `my-doc-%{random_suffix}`,\n fields: \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\",\n project: \"my-project-name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmydoc = gcp.firestore.Document(\"mydoc\",\n collection=\"somenewcollection\",\n document_id=\"my-doc-%{random_suffix}\",\n fields=\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\",\n project=\"my-project-name\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var mydoc = new Gcp.Firestore.Document(\"mydoc\", new()\n {\n Collection = \"somenewcollection\",\n DocumentId = \"my-doc-%{random_suffix}\",\n Fields = \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\",\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/v6/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\t_, err := firestore.NewDocument(ctx, \"mydoc\", \u0026firestore.DocumentArgs{\n\t\t\tCollection: pulumi.String(\"somenewcollection\"),\n\t\t\tDocumentId: pulumi.String(fmt.Sprintf(\"my-doc-%vrandom_suffix}\", \"%{\")),\n\t\t\tFields: pulumi.String(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\"),\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.firestore.Document;\nimport com.pulumi.gcp.firestore.DocumentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var mydoc = new Document(\"mydoc\", DocumentArgs.builder() \n .collection(\"somenewcollection\")\n .documentId(\"my-doc-%{random_suffix}\")\n .fields(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\")\n .project(\"my-project-name\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n mydoc:\n type: gcp:firestore:Document\n properties:\n collection: somenewcollection\n documentId: my-doc-%{random_suffix}\n fields: '{\"something\":{\"mapValue\":{\"fields\":{\"akey\":{\"stringValue\":\"avalue\"}}}}}'\n project: my-project-name\n```\n{{% /example %}}\n{{% example %}}\n### Firestore Document Nested Document\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst mydoc = new gcp.firestore.Document(\"mydoc\", {\n collection: \"somenewcollection\",\n documentId: `my-doc-%{random_suffix}`,\n fields: \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\",\n project: \"my-project-name\",\n});\nconst subDocument = new gcp.firestore.Document(\"subDocument\", {\n collection: pulumi.interpolate`${mydoc.path}/subdocs`,\n documentId: \"bitcoinkey\",\n fields: \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"ayo\\\":{\\\"stringValue\\\":\\\"val2\\\"}}}}}\",\n project: \"my-project-name\",\n});\nconst subSubDocument = new gcp.firestore.Document(\"subSubDocument\", {\n collection: pulumi.interpolate`${subDocument.path}/subsubdocs`,\n documentId: \"asecret\",\n fields: \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"secret\\\":{\\\"stringValue\\\":\\\"hithere\\\"}}}}}\",\n project: \"my-project-name\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmydoc = gcp.firestore.Document(\"mydoc\",\n collection=\"somenewcollection\",\n document_id=\"my-doc-%{random_suffix}\",\n fields=\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\",\n project=\"my-project-name\")\nsub_document = gcp.firestore.Document(\"subDocument\",\n collection=mydoc.path.apply(lambda path: f\"{path}/subdocs\"),\n document_id=\"bitcoinkey\",\n fields=\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"ayo\\\":{\\\"stringValue\\\":\\\"val2\\\"}}}}}\",\n project=\"my-project-name\")\nsub_sub_document = gcp.firestore.Document(\"subSubDocument\",\n collection=sub_document.path.apply(lambda path: f\"{path}/subsubdocs\"),\n document_id=\"asecret\",\n fields=\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"secret\\\":{\\\"stringValue\\\":\\\"hithere\\\"}}}}}\",\n project=\"my-project-name\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var mydoc = new Gcp.Firestore.Document(\"mydoc\", new()\n {\n Collection = \"somenewcollection\",\n DocumentId = \"my-doc-%{random_suffix}\",\n Fields = \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\",\n Project = \"my-project-name\",\n });\n\n var subDocument = new Gcp.Firestore.Document(\"subDocument\", new()\n {\n Collection = mydoc.Path.Apply(path =\u003e $\"{path}/subdocs\"),\n DocumentId = \"bitcoinkey\",\n Fields = \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"ayo\\\":{\\\"stringValue\\\":\\\"val2\\\"}}}}}\",\n Project = \"my-project-name\",\n });\n\n var subSubDocument = new Gcp.Firestore.Document(\"subSubDocument\", new()\n {\n Collection = subDocument.Path.Apply(path =\u003e $\"{path}/subsubdocs\"),\n DocumentId = \"asecret\",\n Fields = \"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"secret\\\":{\\\"stringValue\\\":\\\"hithere\\\"}}}}}\",\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/v6/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\tmydoc, err := firestore.NewDocument(ctx, \"mydoc\", \u0026firestore.DocumentArgs{\n\t\t\tCollection: pulumi.String(\"somenewcollection\"),\n\t\t\tDocumentId: pulumi.String(fmt.Sprintf(\"my-doc-%vrandom_suffix}\", \"%{\")),\n\t\t\tFields: pulumi.String(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\"),\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\tsubDocument, err := firestore.NewDocument(ctx, \"subDocument\", \u0026firestore.DocumentArgs{\n\t\t\tCollection: mydoc.Path.ApplyT(func(path string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"%v/subdocs\", path), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tDocumentId: pulumi.String(\"bitcoinkey\"),\n\t\t\tFields: pulumi.String(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"ayo\\\":{\\\"stringValue\\\":\\\"val2\\\"}}}}}\"),\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 = firestore.NewDocument(ctx, \"subSubDocument\", \u0026firestore.DocumentArgs{\n\t\t\tCollection: subDocument.Path.ApplyT(func(path string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"%v/subsubdocs\", path), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tDocumentId: pulumi.String(\"asecret\"),\n\t\t\tFields: pulumi.String(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"secret\\\":{\\\"stringValue\\\":\\\"hithere\\\"}}}}}\"),\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.firestore.Document;\nimport com.pulumi.gcp.firestore.DocumentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var mydoc = new Document(\"mydoc\", DocumentArgs.builder() \n .collection(\"somenewcollection\")\n .documentId(\"my-doc-%{random_suffix}\")\n .fields(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"akey\\\":{\\\"stringValue\\\":\\\"avalue\\\"}}}}}\")\n .project(\"my-project-name\")\n .build());\n\n var subDocument = new Document(\"subDocument\", DocumentArgs.builder() \n .collection(mydoc.path().applyValue(path -\u003e String.format(\"%s/subdocs\", path)))\n .documentId(\"bitcoinkey\")\n .fields(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"ayo\\\":{\\\"stringValue\\\":\\\"val2\\\"}}}}}\")\n .project(\"my-project-name\")\n .build());\n\n var subSubDocument = new Document(\"subSubDocument\", DocumentArgs.builder() \n .collection(subDocument.path().applyValue(path -\u003e String.format(\"%s/subsubdocs\", path)))\n .documentId(\"asecret\")\n .fields(\"{\\\"something\\\":{\\\"mapValue\\\":{\\\"fields\\\":{\\\"secret\\\":{\\\"stringValue\\\":\\\"hithere\\\"}}}}}\")\n .project(\"my-project-name\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n mydoc:\n type: gcp:firestore:Document\n properties:\n collection: somenewcollection\n documentId: my-doc-%{random_suffix}\n fields: '{\"something\":{\"mapValue\":{\"fields\":{\"akey\":{\"stringValue\":\"avalue\"}}}}}'\n project: my-project-name\n subDocument:\n type: gcp:firestore:Document\n properties:\n collection: ${mydoc.path}/subdocs\n documentId: bitcoinkey\n fields: '{\"something\":{\"mapValue\":{\"fields\":{\"ayo\":{\"stringValue\":\"val2\"}}}}}'\n project: my-project-name\n subSubDocument:\n type: gcp:firestore:Document\n properties:\n collection: ${subDocument.path}/subsubdocs\n documentId: asecret\n fields: '{\"something\":{\"mapValue\":{\"fields\":{\"secret\":{\"stringValue\":\"hithere\"}}}}}'\n project: my-project-name\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDocument can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:firestore/document:Document default {{name}}\n```\n\n ", "properties": { "collection": { "type": "string", @@ -163248,10 +164695,11 @@ } }, "gcp:folder/iAMBinding:IAMBinding": { - "description": "Allows creation and management of a single binding within IAM policy for\nan existing Google Cloud Platform folder.\n\n\u003e **Note:** This resource _must not_ be used in conjunction with\n `gcp.folder.IAMPolicy` or they will fight over what your policy\n should be.\n\n\u003e **Note:** On create, this resource will overwrite members of any existing roles.\n Use `pulumi import` and inspect the output to ensure\n your existing members are preserved.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst department1 = new gcp.organizations.Folder(\"department1\", {\n displayName: \"Department 1\",\n parent: \"organizations/1234567\",\n});\nconst admin = new gcp.folder.IAMBinding(\"admin\", {\n folder: department1.name,\n role: \"roles/editor\",\n members: [\"user:alice@gmail.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndepartment1 = gcp.organizations.Folder(\"department1\",\n display_name=\"Department 1\",\n parent=\"organizations/1234567\")\nadmin = gcp.folder.IAMBinding(\"admin\",\n folder=department1.name,\n role=\"roles/editor\",\n members=[\"user:alice@gmail.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var department1 = new Gcp.Organizations.Folder(\"department1\", new()\n {\n DisplayName = \"Department 1\",\n Parent = \"organizations/1234567\",\n });\n\n var admin = new Gcp.Folder.IAMBinding(\"admin\", new()\n {\n Folder = department1.Name,\n Role = \"roles/editor\",\n Members = new[]\n {\n \"user:alice@gmail.com\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdepartment1, err := organizations.NewFolder(ctx, \"department1\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"Department 1\"),\n\t\t\tParent: pulumi.String(\"organizations/1234567\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = folder.NewIAMBinding(ctx, \"admin\", \u0026folder.IAMBindingArgs{\n\t\t\tFolder: department1.Name,\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:alice@gmail.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.organizations.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.folder.IAMBinding;\nimport com.pulumi.gcp.folder.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var department1 = new Folder(\"department1\", FolderArgs.builder() \n .displayName(\"Department 1\")\n .parent(\"organizations/1234567\")\n .build());\n\n var admin = new IAMBinding(\"admin\", IAMBindingArgs.builder() \n .folder(department1.name())\n .role(\"roles/editor\")\n .members(\"user:alice@gmail.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n department1:\n type: gcp:organizations:Folder\n properties:\n displayName: Department 1\n parent: organizations/1234567\n admin:\n type: gcp:folder:IAMBinding\n properties:\n folder: ${department1.name}\n role: roles/editor\n members:\n - user:alice@gmail.com\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nIAM binding imports use space-delimited identifiers; first the resource in question and then the role.\n\nThese bindings can be imported using the `folder` and role, e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMBinding:IAMBinding viewer \"folder-name roles/viewer\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM binding with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `folder`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder \"folder roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `folder` and role, e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder \"folder roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `folder`.\n\n```sh\n $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder folder\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder \"folder foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:folder/iAMBinding:IAMBinding to include the title of condition, e.g. `google_folder_iam_binding.my_folder \"folder roles/{{role_id}} condition-title\"`\n```\n\n ", "properties": { "condition": { - "$ref": "#/types/gcp:folder/IAMBindingCondition:IAMBindingCondition" + "$ref": "#/types/gcp:folder/IAMBindingCondition:IAMBindingCondition", + "description": "An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding.\nStructure is documented below.\n" }, "etag": { "type": "string", @@ -163265,12 +164713,11 @@ "type": "array", "items": { "type": "string" - }, - "description": "An array of identities that will be granted the privilege in the `role`.\nEach entry can have one of the following values:\n* **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding\n" + } }, "role": { "type": "string", - "description": "The role that should be applied. Only one\n`gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n" + "description": "The role that should be applied. Only one\n`gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format\n`organizations/{{org_id}}/roles/{{role_id}}`.\n" } }, "required": [ @@ -163282,6 +164729,7 @@ "inputProperties": { "condition": { "$ref": "#/types/gcp:folder/IAMBindingCondition:IAMBindingCondition", + "description": "An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "folder": { @@ -163293,12 +164741,11 @@ "type": "array", "items": { "type": "string" - }, - "description": "An array of identities that will be granted the privilege in the `role`.\nEach entry can have one of the following values:\n* **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding\n" + } }, "role": { "type": "string", - "description": "The role that should be applied. Only one\n`gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n", + "description": "The role that should be applied. Only one\n`gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format\n`organizations/{{org_id}}/roles/{{role_id}}`.\n", "willReplaceOnChanges": true } }, @@ -163312,6 +164759,7 @@ "properties": { "condition": { "$ref": "#/types/gcp:folder/IAMBindingCondition:IAMBindingCondition", + "description": "An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "etag": { @@ -163327,12 +164775,11 @@ "type": "array", "items": { "type": "string" - }, - "description": "An array of identities that will be granted the privilege in the `role`.\nEach entry can have one of the following values:\n* **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com.\n* **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com.\n* **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com.\n* **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com.\n* For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding\n" + } }, "role": { "type": "string", - "description": "The role that should be applied. Only one\n`gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n", + "description": "The role that should be applied. Only one\n`gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format\n`organizations/{{org_id}}/roles/{{role_id}}`.\n", "willReplaceOnChanges": true } }, @@ -163340,7 +164787,7 @@ } }, "gcp:folder/iAMMember:IAMMember": { - "description": "Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case:\n\n* `gcp.folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached.\n* `gcp.folder.IAMBinding`: 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 folder are preserved.\n* `gcp.folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved.\n* `gcp.folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service.\n\n\n\u003e **Note:** `gcp.folder.IAMPolicy` **cannot** be used in conjunction with `gcp.folder.IAMBinding`, `gcp.folder.IAMMember`, or `gcp.folder.IamAuditConfig` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.folder.IAMBinding` resources **can be** used in conjunction with `gcp.folder.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, \n IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource.\n\n## google\\_folder\\_iam\\_policy\n\n!\u003e **Be careful!** You can accidentally lock yourself out of your folder\n using this resource. Deleting a `gcp.folder.IAMPolicy` removes access\n from anyone without permissions on its parent folder/organization. Proceed with caution.\n It's not recommended to use `gcp.folder.IAMPolicy` with your provider folder\n to avoid locking yourself out, and it should generally only be used with folders\n fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before\n applying the change.\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst folder = new gcp.folder.IAMPolicy(\"folder\", {\n folder: \"folders/1234567\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nfolder = gcp.folder.IAMPolicy(\"folder\",\n folder=\"folders/1234567\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var folder = new Gcp.Folder.IAMPolicy(\"folder\", new()\n {\n Folder = \"folders/1234567\",\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/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = folder.NewIAMPolicy(ctx, \"folder\", \u0026folder.IAMPolicyArgs{\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\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.folder.IAMPolicy;\nimport com.pulumi.gcp.folder.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var folder = new IAMPolicy(\"folder\", IAMPolicyArgs.builder() \n .folder(\"folders/1234567\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMPolicy\n properties:\n folder: folders/1234567\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n role: \"roles/compute.admin\",\n }],\n});\nconst folder = new gcp.folder.IAMPolicy(\"folder\", {\n folder: \"folders/1234567\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n role=\"roles/compute.admin\",\n)])\nfolder = gcp.folder.IAMPolicy(\"folder\",\n folder=\"folders/1234567\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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 Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/compute.admin\",\n },\n },\n });\n\n var folder = new Gcp.Folder.IAMPolicy(\"folder\", new()\n {\n Folder = \"folders/1234567\",\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/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tCondition: {\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t},\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\tRole: \"roles/compute.admin\",\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 = folder.NewIAMPolicy(ctx, \"folder\", \u0026folder.IAMPolicyArgs{\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\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.folder.IAMPolicy;\nimport com.pulumi.gcp.folder.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 .condition(GetIAMPolicyBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .role(\"roles/compute.admin\")\n .build())\n .build());\n\n var folder = new IAMPolicy(\"folder\", IAMPolicyArgs.builder() \n .folder(\"folders/1234567\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMPolicy\n properties:\n folder: folders/1234567\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n role: roles/compute.admin\n```\n\n## google\\_folder\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IAMBinding(\"folder\", {\n folder: \"folders/1234567\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IAMBinding(\"folder\",\n folder=\"folders/1234567\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IAMBinding(\"folder\", new()\n {\n Folder = \"folders/1234567\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIAMBinding(ctx, \"folder\", \u0026folder.IAMBindingArgs{\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IAMBinding;\nimport com.pulumi.gcp.folder.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IAMBinding(\"folder\", IAMBindingArgs.builder() \n .folder(\"folders/1234567\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMBinding\n properties:\n folder: folders/1234567\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IAMBinding(\"folder\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n folder: \"folders/1234567\",\n members: [\"user:jane@example.com\"],\n role: \"roles/container.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IAMBinding(\"folder\",\n condition=gcp.folder.IAMBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n folder=\"folders/1234567\",\n members=[\"user:jane@example.com\"],\n role=\"roles/container.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IAMBinding(\"folder\", new()\n {\n Condition = new Gcp.Folder.Inputs.IAMBindingConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Folder = \"folders/1234567\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/container.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIAMBinding(ctx, \"folder\", \u0026folder.IAMBindingArgs{\n\t\t\tCondition: \u0026folder.IAMBindingConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/container.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IAMBinding;\nimport com.pulumi.gcp.folder.IAMBindingArgs;\nimport com.pulumi.gcp.folder.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IAMBinding(\"folder\", IAMBindingArgs.builder() \n .condition(IAMBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .folder(\"folders/1234567\")\n .members(\"user:jane@example.com\")\n .role(\"roles/container.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMBinding\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n folder: folders/1234567\n members:\n - user:jane@example.com\n role: roles/container.admin\n```\n\n## google\\_folder\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IAMMember(\"folder\", {\n folder: \"folders/1234567\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IAMMember(\"folder\",\n folder=\"folders/1234567\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IAMMember(\"folder\", new()\n {\n Folder = \"folders/1234567\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIAMMember(ctx, \"folder\", \u0026folder.IAMMemberArgs{\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IAMMember;\nimport com.pulumi.gcp.folder.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IAMMember(\"folder\", IAMMemberArgs.builder() \n .folder(\"folders/1234567\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMMember\n properties:\n folder: folders/1234567\n member: user:jane@example.com\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IAMMember(\"folder\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n folder: \"folders/1234567\",\n member: \"user:jane@example.com\",\n role: \"roles/firebase.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IAMMember(\"folder\",\n condition=gcp.folder.IAMMemberConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n folder=\"folders/1234567\",\n member=\"user:jane@example.com\",\n role=\"roles/firebase.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IAMMember(\"folder\", new()\n {\n Condition = new Gcp.Folder.Inputs.IAMMemberConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Folder = \"folders/1234567\",\n Member = \"user:jane@example.com\",\n Role = \"roles/firebase.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIAMMember(ctx, \"folder\", \u0026folder.IAMMemberArgs{\n\t\t\tCondition: \u0026folder.IAMMemberConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/firebase.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IAMMember;\nimport com.pulumi.gcp.folder.IAMMemberArgs;\nimport com.pulumi.gcp.folder.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IAMMember(\"folder\", IAMMemberArgs.builder() \n .condition(IAMMemberConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .folder(\"folders/1234567\")\n .member(\"user:jane@example.com\")\n .role(\"roles/firebase.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMMember\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n folder: folders/1234567\n member: user:jane@example.com\n role: roles/firebase.admin\n```\n\n## google\\_folder\\_iam\\_audit\\_config\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IamAuditConfig(\"folder\", {\n auditLogConfigs: [\n {\n logType: \"ADMIN_READ\",\n },\n {\n exemptedMembers: [\"user:joebloggs@hashicorp.com\"],\n logType: \"DATA_READ\",\n },\n ],\n folder: \"folders/1234567\",\n service: \"allServices\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IamAuditConfig(\"folder\",\n audit_log_configs=[\n gcp.folder.IamAuditConfigAuditLogConfigArgs(\n log_type=\"ADMIN_READ\",\n ),\n gcp.folder.IamAuditConfigAuditLogConfigArgs(\n exempted_members=[\"user:joebloggs@hashicorp.com\"],\n log_type=\"DATA_READ\",\n ),\n ],\n folder=\"folders/1234567\",\n service=\"allServices\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IamAuditConfig(\"folder\", new()\n {\n AuditLogConfigs = new[]\n {\n new Gcp.Folder.Inputs.IamAuditConfigAuditLogConfigArgs\n {\n LogType = \"ADMIN_READ\",\n },\n new Gcp.Folder.Inputs.IamAuditConfigAuditLogConfigArgs\n {\n ExemptedMembers = new[]\n {\n \"user:joebloggs@hashicorp.com\",\n },\n LogType = \"DATA_READ\",\n },\n },\n Folder = \"folders/1234567\",\n Service = \"allServices\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIamAuditConfig(ctx, \"folder\", \u0026folder.IamAuditConfigArgs{\n\t\t\tAuditLogConfigs: folder.IamAuditConfigAuditLogConfigArray{\n\t\t\t\t\u0026folder.IamAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tLogType: pulumi.String(\"ADMIN_READ\"),\n\t\t\t\t},\n\t\t\t\t\u0026folder.IamAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tExemptedMembers: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"user:joebloggs@hashicorp.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tLogType: pulumi.String(\"DATA_READ\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tService: pulumi.String(\"allServices\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IamAuditConfig;\nimport com.pulumi.gcp.folder.IamAuditConfigArgs;\nimport com.pulumi.gcp.folder.inputs.IamAuditConfigAuditLogConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IamAuditConfig(\"folder\", IamAuditConfigArgs.builder() \n .auditLogConfigs( \n IamAuditConfigAuditLogConfigArgs.builder()\n .logType(\"ADMIN_READ\")\n .build(),\n IamAuditConfigAuditLogConfigArgs.builder()\n .exemptedMembers(\"user:joebloggs@hashicorp.com\")\n .logType(\"DATA_READ\")\n .build())\n .folder(\"folders/1234567\")\n .service(\"allServices\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IamAuditConfig\n properties:\n auditLogConfigs:\n - logType: ADMIN_READ\n - exemptedMembers:\n - user:joebloggs@hashicorp.com\n logType: DATA_READ\n folder: folders/1234567\n service: allServices\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `folder`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMMember:IAMMember my_folder \"folder roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `folder` and role, e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMMember:IAMMember my_folder \"folder roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `folder`.\n\n```sh\n $ pulumi import gcp:folder/iAMMember:IAMMember my_folder folder\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMMember:IAMMember my_folder \"folder foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:folder/iAMMember:IAMMember to include the title of condition, e.g. `google_folder_iam_binding.my_folder \"folder roles/{{role_id}} condition-title\"`\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `folder`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMMember:IAMMember my_folder \"folder roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `folder` and role, e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMMember:IAMMember my_folder \"folder roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `folder`.\n\n```sh\n $ pulumi import gcp:folder/iAMMember:IAMMember my_folder folder\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMMember:IAMMember my_folder \"folder foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:folder/iAMMember:IAMMember to include the title of condition, e.g. `google_folder_iam_binding.my_folder \"folder roles/{{role_id}} condition-title\"`\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:folder/IAMMemberCondition:IAMMemberCondition", @@ -163425,7 +164872,7 @@ } }, "gcp:folder/iAMPolicy:IAMPolicy": { - "description": "Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case:\n\n* `gcp.folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached.\n* `gcp.folder.IAMBinding`: 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 folder are preserved.\n* `gcp.folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved.\n* `gcp.folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service.\n\n\n\u003e **Note:** `gcp.folder.IAMPolicy` **cannot** be used in conjunction with `gcp.folder.IAMBinding`, `gcp.folder.IAMMember`, or `gcp.folder.IamAuditConfig` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.folder.IAMBinding` resources **can be** used in conjunction with `gcp.folder.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, \n IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource.\n\n## google\\_folder\\_iam\\_policy\n\n!\u003e **Be careful!** You can accidentally lock yourself out of your folder\n using this resource. Deleting a `gcp.folder.IAMPolicy` removes access\n from anyone without permissions on its parent folder/organization. Proceed with caution.\n It's not recommended to use `gcp.folder.IAMPolicy` with your provider folder\n to avoid locking yourself out, and it should generally only be used with folders\n fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before\n applying the change.\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst folder = new gcp.folder.IAMPolicy(\"folder\", {\n folder: \"folders/1234567\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nfolder = gcp.folder.IAMPolicy(\"folder\",\n folder=\"folders/1234567\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var folder = new Gcp.Folder.IAMPolicy(\"folder\", new()\n {\n Folder = \"folders/1234567\",\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/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = folder.NewIAMPolicy(ctx, \"folder\", \u0026folder.IAMPolicyArgs{\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\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.folder.IAMPolicy;\nimport com.pulumi.gcp.folder.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var folder = new IAMPolicy(\"folder\", IAMPolicyArgs.builder() \n .folder(\"folders/1234567\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMPolicy\n properties:\n folder: folders/1234567\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n role: \"roles/compute.admin\",\n }],\n});\nconst folder = new gcp.folder.IAMPolicy(\"folder\", {\n folder: \"folders/1234567\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n role=\"roles/compute.admin\",\n)])\nfolder = gcp.folder.IAMPolicy(\"folder\",\n folder=\"folders/1234567\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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 Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/compute.admin\",\n },\n },\n });\n\n var folder = new Gcp.Folder.IAMPolicy(\"folder\", new()\n {\n Folder = \"folders/1234567\",\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/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tCondition: {\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t},\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\tRole: \"roles/compute.admin\",\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 = folder.NewIAMPolicy(ctx, \"folder\", \u0026folder.IAMPolicyArgs{\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\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.folder.IAMPolicy;\nimport com.pulumi.gcp.folder.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 .condition(GetIAMPolicyBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .role(\"roles/compute.admin\")\n .build())\n .build());\n\n var folder = new IAMPolicy(\"folder\", IAMPolicyArgs.builder() \n .folder(\"folders/1234567\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMPolicy\n properties:\n folder: folders/1234567\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n role: roles/compute.admin\n```\n\n## google\\_folder\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IAMBinding(\"folder\", {\n folder: \"folders/1234567\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IAMBinding(\"folder\",\n folder=\"folders/1234567\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IAMBinding(\"folder\", new()\n {\n Folder = \"folders/1234567\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIAMBinding(ctx, \"folder\", \u0026folder.IAMBindingArgs{\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IAMBinding;\nimport com.pulumi.gcp.folder.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IAMBinding(\"folder\", IAMBindingArgs.builder() \n .folder(\"folders/1234567\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMBinding\n properties:\n folder: folders/1234567\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IAMBinding(\"folder\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n folder: \"folders/1234567\",\n members: [\"user:jane@example.com\"],\n role: \"roles/container.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IAMBinding(\"folder\",\n condition=gcp.folder.IAMBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n folder=\"folders/1234567\",\n members=[\"user:jane@example.com\"],\n role=\"roles/container.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IAMBinding(\"folder\", new()\n {\n Condition = new Gcp.Folder.Inputs.IAMBindingConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Folder = \"folders/1234567\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/container.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIAMBinding(ctx, \"folder\", \u0026folder.IAMBindingArgs{\n\t\t\tCondition: \u0026folder.IAMBindingConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/container.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IAMBinding;\nimport com.pulumi.gcp.folder.IAMBindingArgs;\nimport com.pulumi.gcp.folder.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IAMBinding(\"folder\", IAMBindingArgs.builder() \n .condition(IAMBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .folder(\"folders/1234567\")\n .members(\"user:jane@example.com\")\n .role(\"roles/container.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMBinding\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n folder: folders/1234567\n members:\n - user:jane@example.com\n role: roles/container.admin\n```\n\n## google\\_folder\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IAMMember(\"folder\", {\n folder: \"folders/1234567\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IAMMember(\"folder\",\n folder=\"folders/1234567\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IAMMember(\"folder\", new()\n {\n Folder = \"folders/1234567\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIAMMember(ctx, \"folder\", \u0026folder.IAMMemberArgs{\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IAMMember;\nimport com.pulumi.gcp.folder.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IAMMember(\"folder\", IAMMemberArgs.builder() \n .folder(\"folders/1234567\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMMember\n properties:\n folder: folders/1234567\n member: user:jane@example.com\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IAMMember(\"folder\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n folder: \"folders/1234567\",\n member: \"user:jane@example.com\",\n role: \"roles/firebase.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IAMMember(\"folder\",\n condition=gcp.folder.IAMMemberConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n folder=\"folders/1234567\",\n member=\"user:jane@example.com\",\n role=\"roles/firebase.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IAMMember(\"folder\", new()\n {\n Condition = new Gcp.Folder.Inputs.IAMMemberConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Folder = \"folders/1234567\",\n Member = \"user:jane@example.com\",\n Role = \"roles/firebase.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIAMMember(ctx, \"folder\", \u0026folder.IAMMemberArgs{\n\t\t\tCondition: \u0026folder.IAMMemberConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/firebase.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IAMMember;\nimport com.pulumi.gcp.folder.IAMMemberArgs;\nimport com.pulumi.gcp.folder.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IAMMember(\"folder\", IAMMemberArgs.builder() \n .condition(IAMMemberConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .folder(\"folders/1234567\")\n .member(\"user:jane@example.com\")\n .role(\"roles/firebase.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMMember\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n folder: folders/1234567\n member: user:jane@example.com\n role: roles/firebase.admin\n```\n\n## google\\_folder\\_iam\\_audit\\_config\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IamAuditConfig(\"folder\", {\n auditLogConfigs: [\n {\n logType: \"ADMIN_READ\",\n },\n {\n exemptedMembers: [\"user:joebloggs@hashicorp.com\"],\n logType: \"DATA_READ\",\n },\n ],\n folder: \"folders/1234567\",\n service: \"allServices\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IamAuditConfig(\"folder\",\n audit_log_configs=[\n gcp.folder.IamAuditConfigAuditLogConfigArgs(\n log_type=\"ADMIN_READ\",\n ),\n gcp.folder.IamAuditConfigAuditLogConfigArgs(\n exempted_members=[\"user:joebloggs@hashicorp.com\"],\n log_type=\"DATA_READ\",\n ),\n ],\n folder=\"folders/1234567\",\n service=\"allServices\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IamAuditConfig(\"folder\", new()\n {\n AuditLogConfigs = new[]\n {\n new Gcp.Folder.Inputs.IamAuditConfigAuditLogConfigArgs\n {\n LogType = \"ADMIN_READ\",\n },\n new Gcp.Folder.Inputs.IamAuditConfigAuditLogConfigArgs\n {\n ExemptedMembers = new[]\n {\n \"user:joebloggs@hashicorp.com\",\n },\n LogType = \"DATA_READ\",\n },\n },\n Folder = \"folders/1234567\",\n Service = \"allServices\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIamAuditConfig(ctx, \"folder\", \u0026folder.IamAuditConfigArgs{\n\t\t\tAuditLogConfigs: folder.IamAuditConfigAuditLogConfigArray{\n\t\t\t\t\u0026folder.IamAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tLogType: pulumi.String(\"ADMIN_READ\"),\n\t\t\t\t},\n\t\t\t\t\u0026folder.IamAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tExemptedMembers: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"user:joebloggs@hashicorp.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tLogType: pulumi.String(\"DATA_READ\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tService: pulumi.String(\"allServices\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IamAuditConfig;\nimport com.pulumi.gcp.folder.IamAuditConfigArgs;\nimport com.pulumi.gcp.folder.inputs.IamAuditConfigAuditLogConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IamAuditConfig(\"folder\", IamAuditConfigArgs.builder() \n .auditLogConfigs( \n IamAuditConfigAuditLogConfigArgs.builder()\n .logType(\"ADMIN_READ\")\n .build(),\n IamAuditConfigAuditLogConfigArgs.builder()\n .exemptedMembers(\"user:joebloggs@hashicorp.com\")\n .logType(\"DATA_READ\")\n .build())\n .folder(\"folders/1234567\")\n .service(\"allServices\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IamAuditConfig\n properties:\n auditLogConfigs:\n - logType: ADMIN_READ\n - exemptedMembers:\n - user:joebloggs@hashicorp.com\n logType: DATA_READ\n folder: folders/1234567\n service: allServices\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `folder`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMPolicy:IAMPolicy my_folder \"folder roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `folder` and role, e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMPolicy:IAMPolicy my_folder \"folder roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `folder`.\n\n```sh\n $ pulumi import gcp:folder/iAMPolicy:IAMPolicy my_folder folder\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMPolicy:IAMPolicy my_folder \"folder foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:folder/iAMPolicy:IAMPolicy to include the title of condition, e.g. `google_folder_iam_binding.my_folder \"folder roles/{{role_id}} condition-title\"`\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `folder`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMPolicy:IAMPolicy my_folder \"folder roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `folder` and role, e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMPolicy:IAMPolicy my_folder \"folder roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `folder`.\n\n```sh\n $ pulumi import gcp:folder/iAMPolicy:IAMPolicy my_folder folder\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:folder/iAMPolicy:IAMPolicy my_folder \"folder foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:folder/iAMPolicy:IAMPolicy to include the title of condition, e.g. `google_folder_iam_binding.my_folder \"folder roles/{{role_id}} condition-title\"`\n```\n\n ", "properties": { "etag": { "type": "string", @@ -163481,7 +164928,7 @@ } }, "gcp:folder/iamAuditConfig:IamAuditConfig": { - "description": "Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case:\n\n* `gcp.folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached.\n* `gcp.folder.IAMBinding`: 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 folder are preserved.\n* `gcp.folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved.\n* `gcp.folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service.\n\n\n\u003e **Note:** `gcp.folder.IAMPolicy` **cannot** be used in conjunction with `gcp.folder.IAMBinding`, `gcp.folder.IAMMember`, or `gcp.folder.IamAuditConfig` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.folder.IAMBinding` resources **can be** used in conjunction with `gcp.folder.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, \n IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource.\n\n## google\\_folder\\_iam\\_policy\n\n!\u003e **Be careful!** You can accidentally lock yourself out of your folder\n using this resource. Deleting a `gcp.folder.IAMPolicy` removes access\n from anyone without permissions on its parent folder/organization. Proceed with caution.\n It's not recommended to use `gcp.folder.IAMPolicy` with your provider folder\n to avoid locking yourself out, and it should generally only be used with folders\n fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before\n applying the change.\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst folder = new gcp.folder.IAMPolicy(\"folder\", {\n folder: \"folders/1234567\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nfolder = gcp.folder.IAMPolicy(\"folder\",\n folder=\"folders/1234567\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var folder = new Gcp.Folder.IAMPolicy(\"folder\", new()\n {\n Folder = \"folders/1234567\",\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/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = folder.NewIAMPolicy(ctx, \"folder\", \u0026folder.IAMPolicyArgs{\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\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.folder.IAMPolicy;\nimport com.pulumi.gcp.folder.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var folder = new IAMPolicy(\"folder\", IAMPolicyArgs.builder() \n .folder(\"folders/1234567\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMPolicy\n properties:\n folder: folders/1234567\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n role: \"roles/compute.admin\",\n }],\n});\nconst folder = new gcp.folder.IAMPolicy(\"folder\", {\n folder: \"folders/1234567\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n role=\"roles/compute.admin\",\n)])\nfolder = gcp.folder.IAMPolicy(\"folder\",\n folder=\"folders/1234567\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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 Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/compute.admin\",\n },\n },\n });\n\n var folder = new Gcp.Folder.IAMPolicy(\"folder\", new()\n {\n Folder = \"folders/1234567\",\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/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tCondition: {\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t},\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\tRole: \"roles/compute.admin\",\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 = folder.NewIAMPolicy(ctx, \"folder\", \u0026folder.IAMPolicyArgs{\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\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.folder.IAMPolicy;\nimport com.pulumi.gcp.folder.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 .condition(GetIAMPolicyBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .role(\"roles/compute.admin\")\n .build())\n .build());\n\n var folder = new IAMPolicy(\"folder\", IAMPolicyArgs.builder() \n .folder(\"folders/1234567\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMPolicy\n properties:\n folder: folders/1234567\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n role: roles/compute.admin\n```\n\n## google\\_folder\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IAMBinding(\"folder\", {\n folder: \"folders/1234567\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IAMBinding(\"folder\",\n folder=\"folders/1234567\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IAMBinding(\"folder\", new()\n {\n Folder = \"folders/1234567\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIAMBinding(ctx, \"folder\", \u0026folder.IAMBindingArgs{\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IAMBinding;\nimport com.pulumi.gcp.folder.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IAMBinding(\"folder\", IAMBindingArgs.builder() \n .folder(\"folders/1234567\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMBinding\n properties:\n folder: folders/1234567\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IAMBinding(\"folder\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n folder: \"folders/1234567\",\n members: [\"user:jane@example.com\"],\n role: \"roles/container.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IAMBinding(\"folder\",\n condition=gcp.folder.IAMBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n folder=\"folders/1234567\",\n members=[\"user:jane@example.com\"],\n role=\"roles/container.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IAMBinding(\"folder\", new()\n {\n Condition = new Gcp.Folder.Inputs.IAMBindingConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Folder = \"folders/1234567\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/container.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIAMBinding(ctx, \"folder\", \u0026folder.IAMBindingArgs{\n\t\t\tCondition: \u0026folder.IAMBindingConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/container.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IAMBinding;\nimport com.pulumi.gcp.folder.IAMBindingArgs;\nimport com.pulumi.gcp.folder.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IAMBinding(\"folder\", IAMBindingArgs.builder() \n .condition(IAMBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .folder(\"folders/1234567\")\n .members(\"user:jane@example.com\")\n .role(\"roles/container.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMBinding\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n folder: folders/1234567\n members:\n - user:jane@example.com\n role: roles/container.admin\n```\n\n## google\\_folder\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IAMMember(\"folder\", {\n folder: \"folders/1234567\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IAMMember(\"folder\",\n folder=\"folders/1234567\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IAMMember(\"folder\", new()\n {\n Folder = \"folders/1234567\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIAMMember(ctx, \"folder\", \u0026folder.IAMMemberArgs{\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IAMMember;\nimport com.pulumi.gcp.folder.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IAMMember(\"folder\", IAMMemberArgs.builder() \n .folder(\"folders/1234567\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMMember\n properties:\n folder: folders/1234567\n member: user:jane@example.com\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IAMMember(\"folder\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n folder: \"folders/1234567\",\n member: \"user:jane@example.com\",\n role: \"roles/firebase.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IAMMember(\"folder\",\n condition=gcp.folder.IAMMemberConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n folder=\"folders/1234567\",\n member=\"user:jane@example.com\",\n role=\"roles/firebase.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IAMMember(\"folder\", new()\n {\n Condition = new Gcp.Folder.Inputs.IAMMemberConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Folder = \"folders/1234567\",\n Member = \"user:jane@example.com\",\n Role = \"roles/firebase.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIAMMember(ctx, \"folder\", \u0026folder.IAMMemberArgs{\n\t\t\tCondition: \u0026folder.IAMMemberConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/firebase.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IAMMember;\nimport com.pulumi.gcp.folder.IAMMemberArgs;\nimport com.pulumi.gcp.folder.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IAMMember(\"folder\", IAMMemberArgs.builder() \n .condition(IAMMemberConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .folder(\"folders/1234567\")\n .member(\"user:jane@example.com\")\n .role(\"roles/firebase.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IAMMember\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n folder: folders/1234567\n member: user:jane@example.com\n role: roles/firebase.admin\n```\n\n## google\\_folder\\_iam\\_audit\\_config\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst folder = new gcp.folder.IamAuditConfig(\"folder\", {\n auditLogConfigs: [\n {\n logType: \"ADMIN_READ\",\n },\n {\n exemptedMembers: [\"user:joebloggs@hashicorp.com\"],\n logType: \"DATA_READ\",\n },\n ],\n folder: \"folders/1234567\",\n service: \"allServices\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfolder = gcp.folder.IamAuditConfig(\"folder\",\n audit_log_configs=[\n gcp.folder.IamAuditConfigAuditLogConfigArgs(\n log_type=\"ADMIN_READ\",\n ),\n gcp.folder.IamAuditConfigAuditLogConfigArgs(\n exempted_members=[\"user:joebloggs@hashicorp.com\"],\n log_type=\"DATA_READ\",\n ),\n ],\n folder=\"folders/1234567\",\n service=\"allServices\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var folder = new Gcp.Folder.IamAuditConfig(\"folder\", new()\n {\n AuditLogConfigs = new[]\n {\n new Gcp.Folder.Inputs.IamAuditConfigAuditLogConfigArgs\n {\n LogType = \"ADMIN_READ\",\n },\n new Gcp.Folder.Inputs.IamAuditConfigAuditLogConfigArgs\n {\n ExemptedMembers = new[]\n {\n \"user:joebloggs@hashicorp.com\",\n },\n LogType = \"DATA_READ\",\n },\n },\n Folder = \"folders/1234567\",\n Service = \"allServices\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := folder.NewIamAuditConfig(ctx, \"folder\", \u0026folder.IamAuditConfigArgs{\n\t\t\tAuditLogConfigs: folder.IamAuditConfigAuditLogConfigArray{\n\t\t\t\t\u0026folder.IamAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tLogType: pulumi.String(\"ADMIN_READ\"),\n\t\t\t\t},\n\t\t\t\t\u0026folder.IamAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tExemptedMembers: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"user:joebloggs@hashicorp.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tLogType: pulumi.String(\"DATA_READ\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tFolder: pulumi.String(\"folders/1234567\"),\n\t\t\tService: pulumi.String(\"allServices\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.folder.IamAuditConfig;\nimport com.pulumi.gcp.folder.IamAuditConfigArgs;\nimport com.pulumi.gcp.folder.inputs.IamAuditConfigAuditLogConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var folder = new IamAuditConfig(\"folder\", IamAuditConfigArgs.builder() \n .auditLogConfigs( \n IamAuditConfigAuditLogConfigArgs.builder()\n .logType(\"ADMIN_READ\")\n .build(),\n IamAuditConfigAuditLogConfigArgs.builder()\n .exemptedMembers(\"user:joebloggs@hashicorp.com\")\n .logType(\"DATA_READ\")\n .build())\n .folder(\"folders/1234567\")\n .service(\"allServices\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n folder:\n type: gcp:folder:IamAuditConfig\n properties:\n auditLogConfigs:\n - logType: ADMIN_READ\n - exemptedMembers:\n - user:joebloggs@hashicorp.com\n logType: DATA_READ\n folder: folders/1234567\n service: allServices\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `folder`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:folder/iamAuditConfig:IamAuditConfig my_folder \"folder roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `folder` and role, e.g.\n\n```sh\n $ pulumi import gcp:folder/iamAuditConfig:IamAuditConfig my_folder \"folder roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `folder`.\n\n```sh\n $ pulumi import gcp:folder/iamAuditConfig:IamAuditConfig my_folder folder\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:folder/iamAuditConfig:IamAuditConfig my_folder \"folder foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:folder/iamAuditConfig:IamAuditConfig to include the title of condition, e.g. `google_folder_iam_binding.my_folder \"folder roles/{{role_id}} condition-title\"`\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `folder`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:folder/iamAuditConfig:IamAuditConfig my_folder \"folder roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `folder` and role, e.g.\n\n```sh\n $ pulumi import gcp:folder/iamAuditConfig:IamAuditConfig my_folder \"folder roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `folder`.\n\n```sh\n $ pulumi import gcp:folder/iamAuditConfig:IamAuditConfig my_folder folder\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:folder/iamAuditConfig:IamAuditConfig my_folder \"folder foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:folder/iamAuditConfig:IamAuditConfig to include the title of condition, e.g. `google_folder_iam_binding.my_folder \"folder roles/{{role_id}} condition-title\"`\n```\n\n ", "properties": { "auditLogConfigs": { "type": "array", @@ -163676,7 +165123,7 @@ } }, "gcp:gameservices/gameServerCluster:GameServerCluster": { - "description": "A game server cluster resource.\n\nTo get more information about GameServerCluster, see:\n\n* [API documentation](https://cloud.google.com/game-servers/docs/reference/rest/v1beta/projects.locations.realms.gameServerClusters)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/game-servers/docs)\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nGameServerCluster can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:gameservices/gameServerCluster:GameServerCluster default projects/{{project}}/locations/{{location}}/realms/{{realm_id}}/gameServerClusters/{{cluster_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerCluster:GameServerCluster default {{project}}/{{location}}/{{realm_id}}/{{cluster_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerCluster:GameServerCluster default {{location}}/{{realm_id}}/{{cluster_id}}\n```\n\n ", + "description": "A game server cluster resource.\n\n\nTo get more information about GameServerCluster, see:\n\n* [API documentation](https://cloud.google.com/game-servers/docs/reference/rest/v1beta/projects.locations.realms.gameServerClusters)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/game-servers/docs)\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nGameServerCluster can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:gameservices/gameServerCluster:GameServerCluster default projects/{{project}}/locations/{{location}}/realms/{{realm_id}}/gameServerClusters/{{cluster_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerCluster:GameServerCluster default {{project}}/{{location}}/{{realm_id}}/{{cluster_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerCluster:GameServerCluster default {{location}}/{{realm_id}}/{{cluster_id}}\n```\n\n ", "properties": { "clusterId": { "type": "string", @@ -163808,7 +165255,7 @@ } }, "gcp:gameservices/gameServerConfig:GameServerConfig": { - "description": "A game server config resource. Configs are global and immutable.\n\nTo get more information about GameServerConfig, see:\n\n* [API documentation](https://cloud.google.com/game-servers/docs/reference/rest/v1beta/projects.locations.gameServerDeployments.configs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/game-servers/docs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Game Service Config Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultGameServerDeployment = new gcp.gameservices.GameServerDeployment(\"defaultGameServerDeployment\", {\n deploymentId: \"tf-test-deployment\",\n description: \"a deployment description\",\n});\nconst defaultGameServerConfig = new gcp.gameservices.GameServerConfig(\"defaultGameServerConfig\", {\n configId: \"tf-test-config\",\n deploymentId: defaultGameServerDeployment.deploymentId,\n description: \"a config description\",\n fleetConfigs: [{\n name: \"something-unique\",\n fleetSpec: JSON.stringify({\n replicas: 1,\n scheduling: \"Packed\",\n template: {\n metadata: {\n name: \"tf-test-game-server-template\",\n },\n spec: {\n ports: [{\n name: \"default\",\n portPolicy: \"Dynamic\",\n containerPort: 7654,\n protocol: \"UDP\",\n }],\n template: {\n spec: {\n containers: [{\n name: \"simple-udp-server\",\n image: \"gcr.io/agones-images/udp-server:0.14\",\n }],\n },\n },\n },\n },\n }),\n }],\n scalingConfigs: [{\n name: \"scaling-config-name\",\n fleetAutoscalerSpec: JSON.stringify({\n policy: {\n type: \"Webhook\",\n webhook: {\n service: {\n name: \"autoscaler-webhook-service\",\n namespace: \"default\",\n path: \"scale\",\n },\n },\n },\n }),\n selectors: [{\n labels: {\n one: \"two\",\n },\n }],\n schedules: [{\n cronJobDuration: \"3.500s\",\n cronSpec: \"0 0 * * 0\",\n }],\n }],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\ndefault_game_server_deployment = gcp.gameservices.GameServerDeployment(\"defaultGameServerDeployment\",\n deployment_id=\"tf-test-deployment\",\n description=\"a deployment description\")\ndefault_game_server_config = gcp.gameservices.GameServerConfig(\"defaultGameServerConfig\",\n config_id=\"tf-test-config\",\n deployment_id=default_game_server_deployment.deployment_id,\n description=\"a config description\",\n fleet_configs=[gcp.gameservices.GameServerConfigFleetConfigArgs(\n name=\"something-unique\",\n fleet_spec=json.dumps({\n \"replicas\": 1,\n \"scheduling\": \"Packed\",\n \"template\": {\n \"metadata\": {\n \"name\": \"tf-test-game-server-template\",\n },\n \"spec\": {\n \"ports\": [{\n \"name\": \"default\",\n \"portPolicy\": \"Dynamic\",\n \"containerPort\": 7654,\n \"protocol\": \"UDP\",\n }],\n \"template\": {\n \"spec\": {\n \"containers\": [{\n \"name\": \"simple-udp-server\",\n \"image\": \"gcr.io/agones-images/udp-server:0.14\",\n }],\n },\n },\n },\n },\n }),\n )],\n scaling_configs=[gcp.gameservices.GameServerConfigScalingConfigArgs(\n name=\"scaling-config-name\",\n fleet_autoscaler_spec=json.dumps({\n \"policy\": {\n \"type\": \"Webhook\",\n \"webhook\": {\n \"service\": {\n \"name\": \"autoscaler-webhook-service\",\n \"namespace\": \"default\",\n \"path\": \"scale\",\n },\n },\n },\n }),\n selectors=[gcp.gameservices.GameServerConfigScalingConfigSelectorArgs(\n labels={\n \"one\": \"two\",\n },\n )],\n schedules=[gcp.gameservices.GameServerConfigScalingConfigScheduleArgs(\n cron_job_duration=\"3.500s\",\n cron_spec=\"0 0 * * 0\",\n )],\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultGameServerDeployment = new Gcp.GameServices.GameServerDeployment(\"defaultGameServerDeployment\", new()\n {\n DeploymentId = \"tf-test-deployment\",\n Description = \"a deployment description\",\n });\n\n var defaultGameServerConfig = new Gcp.GameServices.GameServerConfig(\"defaultGameServerConfig\", new()\n {\n ConfigId = \"tf-test-config\",\n DeploymentId = defaultGameServerDeployment.DeploymentId,\n Description = \"a config description\",\n FleetConfigs = new[]\n {\n new Gcp.GameServices.Inputs.GameServerConfigFleetConfigArgs\n {\n Name = \"something-unique\",\n FleetSpec = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"replicas\"] = 1,\n [\"scheduling\"] = \"Packed\",\n [\"template\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"metadata\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"tf-test-game-server-template\",\n },\n [\"spec\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"ports\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"default\",\n [\"portPolicy\"] = \"Dynamic\",\n [\"containerPort\"] = 7654,\n [\"protocol\"] = \"UDP\",\n },\n },\n [\"template\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"spec\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"containers\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"simple-udp-server\",\n [\"image\"] = \"gcr.io/agones-images/udp-server:0.14\",\n },\n },\n },\n },\n },\n },\n }),\n },\n },\n ScalingConfigs = new[]\n {\n new Gcp.GameServices.Inputs.GameServerConfigScalingConfigArgs\n {\n Name = \"scaling-config-name\",\n FleetAutoscalerSpec = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"policy\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"type\"] = \"Webhook\",\n [\"webhook\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"service\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"autoscaler-webhook-service\",\n [\"namespace\"] = \"default\",\n [\"path\"] = \"scale\",\n },\n },\n },\n }),\n Selectors = new[]\n {\n new Gcp.GameServices.Inputs.GameServerConfigScalingConfigSelectorArgs\n {\n Labels = \n {\n { \"one\", \"two\" },\n },\n },\n },\n Schedules = new[]\n {\n new Gcp.GameServices.Inputs.GameServerConfigScalingConfigScheduleArgs\n {\n CronJobDuration = \"3.500s\",\n CronSpec = \"0 0 * * 0\",\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/v6/go/gcp/gameservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultGameServerDeployment, err := gameservices.NewGameServerDeployment(ctx, \"defaultGameServerDeployment\", \u0026gameservices.GameServerDeploymentArgs{\n\t\t\tDeploymentId: pulumi.String(\"tf-test-deployment\"),\n\t\t\tDescription: pulumi.String(\"a deployment description\"),\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\"replicas\": 1,\n\t\t\t\"scheduling\": \"Packed\",\n\t\t\t\"template\": map[string]interface{}{\n\t\t\t\t\"metadata\": map[string]interface{}{\n\t\t\t\t\t\"name\": \"tf-test-game-server-template\",\n\t\t\t\t},\n\t\t\t\t\"spec\": map[string]interface{}{\n\t\t\t\t\t\"ports\": []map[string]interface{}{\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"name\": \"default\",\n\t\t\t\t\t\t\t\"portPolicy\": \"Dynamic\",\n\t\t\t\t\t\t\t\"containerPort\": 7654,\n\t\t\t\t\t\t\t\"protocol\": \"UDP\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"template\": map[string]interface{}{\n\t\t\t\t\t\t\"spec\": map[string]interface{}{\n\t\t\t\t\t\t\t\"containers\": []map[string]interface{}{\n\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"name\": \"simple-udp-server\",\n\t\t\t\t\t\t\t\t\t\"image\": \"gcr.io/agones-images/udp-server:0.14\",\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\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"policy\": map[string]interface{}{\n\t\t\t\t\"type\": \"Webhook\",\n\t\t\t\t\"webhook\": map[string]interface{}{\n\t\t\t\t\t\"service\": map[string]interface{}{\n\t\t\t\t\t\t\"name\": \"autoscaler-webhook-service\",\n\t\t\t\t\t\t\"namespace\": \"default\",\n\t\t\t\t\t\t\"path\": \"scale\",\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 = gameservices.NewGameServerConfig(ctx, \"defaultGameServerConfig\", \u0026gameservices.GameServerConfigArgs{\n\t\t\tConfigId: pulumi.String(\"tf-test-config\"),\n\t\t\tDeploymentId: defaultGameServerDeployment.DeploymentId,\n\t\t\tDescription: pulumi.String(\"a config description\"),\n\t\t\tFleetConfigs: gameservices.GameServerConfigFleetConfigArray{\n\t\t\t\t\u0026gameservices.GameServerConfigFleetConfigArgs{\n\t\t\t\t\tName: pulumi.String(\"something-unique\"),\n\t\t\t\t\tFleetSpec: pulumi.String(json0),\n\t\t\t\t},\n\t\t\t},\n\t\t\tScalingConfigs: gameservices.GameServerConfigScalingConfigArray{\n\t\t\t\t\u0026gameservices.GameServerConfigScalingConfigArgs{\n\t\t\t\t\tName: pulumi.String(\"scaling-config-name\"),\n\t\t\t\t\tFleetAutoscalerSpec: pulumi.String(json1),\n\t\t\t\t\tSelectors: gameservices.GameServerConfigScalingConfigSelectorArray{\n\t\t\t\t\t\t\u0026gameservices.GameServerConfigScalingConfigSelectorArgs{\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"one\": pulumi.String(\"two\"),\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\tSchedules: gameservices.GameServerConfigScalingConfigScheduleArray{\n\t\t\t\t\t\t\u0026gameservices.GameServerConfigScalingConfigScheduleArgs{\n\t\t\t\t\t\t\tCronJobDuration: pulumi.String(\"3.500s\"),\n\t\t\t\t\t\t\tCronSpec: pulumi.String(\"0 0 * * 0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gameservices.GameServerDeployment;\nimport com.pulumi.gcp.gameservices.GameServerDeploymentArgs;\nimport com.pulumi.gcp.gameservices.GameServerConfig;\nimport com.pulumi.gcp.gameservices.GameServerConfigArgs;\nimport com.pulumi.gcp.gameservices.inputs.GameServerConfigFleetConfigArgs;\nimport com.pulumi.gcp.gameservices.inputs.GameServerConfigScalingConfigArgs;\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 defaultGameServerDeployment = new GameServerDeployment(\"defaultGameServerDeployment\", GameServerDeploymentArgs.builder() \n .deploymentId(\"tf-test-deployment\")\n .description(\"a deployment description\")\n .build());\n\n var defaultGameServerConfig = new GameServerConfig(\"defaultGameServerConfig\", GameServerConfigArgs.builder() \n .configId(\"tf-test-config\")\n .deploymentId(defaultGameServerDeployment.deploymentId())\n .description(\"a config description\")\n .fleetConfigs(GameServerConfigFleetConfigArgs.builder()\n .name(\"something-unique\")\n .fleetSpec(serializeJson(\n jsonObject(\n jsonProperty(\"replicas\", 1),\n jsonProperty(\"scheduling\", \"Packed\"),\n jsonProperty(\"template\", jsonObject(\n jsonProperty(\"metadata\", jsonObject(\n jsonProperty(\"name\", \"tf-test-game-server-template\")\n )),\n jsonProperty(\"spec\", jsonObject(\n jsonProperty(\"ports\", jsonArray(jsonObject(\n jsonProperty(\"name\", \"default\"),\n jsonProperty(\"portPolicy\", \"Dynamic\"),\n jsonProperty(\"containerPort\", 7654),\n jsonProperty(\"protocol\", \"UDP\")\n ))),\n jsonProperty(\"template\", jsonObject(\n jsonProperty(\"spec\", jsonObject(\n jsonProperty(\"containers\", jsonArray(jsonObject(\n jsonProperty(\"name\", \"simple-udp-server\"),\n jsonProperty(\"image\", \"gcr.io/agones-images/udp-server:0.14\")\n )))\n ))\n ))\n ))\n ))\n )))\n .build())\n .scalingConfigs(GameServerConfigScalingConfigArgs.builder()\n .name(\"scaling-config-name\")\n .fleetAutoscalerSpec(serializeJson(\n jsonObject(\n jsonProperty(\"policy\", jsonObject(\n jsonProperty(\"type\", \"Webhook\"),\n jsonProperty(\"webhook\", jsonObject(\n jsonProperty(\"service\", jsonObject(\n jsonProperty(\"name\", \"autoscaler-webhook-service\"),\n jsonProperty(\"namespace\", \"default\"),\n jsonProperty(\"path\", \"scale\")\n ))\n ))\n ))\n )))\n .selectors(GameServerConfigScalingConfigSelectorArgs.builder()\n .labels(Map.of(\"one\", \"two\"))\n .build())\n .schedules(GameServerConfigScalingConfigScheduleArgs.builder()\n .cronJobDuration(\"3.500s\")\n .cronSpec(\"0 0 * * 0\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultGameServerDeployment:\n type: gcp:gameservices:GameServerDeployment\n properties:\n deploymentId: tf-test-deployment\n description: a deployment description\n defaultGameServerConfig:\n type: gcp:gameservices:GameServerConfig\n properties:\n configId: tf-test-config\n deploymentId: ${defaultGameServerDeployment.deploymentId}\n description: a config description\n fleetConfigs:\n - name: something-unique\n fleetSpec:\n fn::toJSON:\n replicas: 1\n scheduling: Packed\n template:\n metadata:\n name: tf-test-game-server-template\n spec:\n ports:\n - name: default\n portPolicy: Dynamic\n containerPort: 7654\n protocol: UDP\n template:\n spec:\n containers:\n - name: simple-udp-server\n image: gcr.io/agones-images/udp-server:0.14\n scalingConfigs:\n - name: scaling-config-name\n fleetAutoscalerSpec:\n fn::toJSON:\n policy:\n type: Webhook\n webhook:\n service:\n name: autoscaler-webhook-service\n namespace: default\n path: scale\n selectors:\n - labels:\n one: two\n schedules:\n - cronJobDuration: 3.500s\n cronSpec: 0 0 * * 0\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGameServerConfig can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:gameservices/gameServerConfig:GameServerConfig default projects/{{project}}/locations/{{location}}/gameServerDeployments/{{deployment_id}}/configs/{{config_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerConfig:GameServerConfig default {{project}}/{{location}}/{{deployment_id}}/{{config_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerConfig:GameServerConfig default {{location}}/{{deployment_id}}/{{config_id}}\n```\n\n ", + "description": "A game server config resource. Configs are global and immutable.\n\n\nTo get more information about GameServerConfig, see:\n\n* [API documentation](https://cloud.google.com/game-servers/docs/reference/rest/v1beta/projects.locations.gameServerDeployments.configs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/game-servers/docs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Game Service Config Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultGameServerDeployment = new gcp.gameservices.GameServerDeployment(\"defaultGameServerDeployment\", {\n deploymentId: \"tf-test-deployment\",\n description: \"a deployment description\",\n});\nconst defaultGameServerConfig = new gcp.gameservices.GameServerConfig(\"defaultGameServerConfig\", {\n configId: \"tf-test-config\",\n deploymentId: defaultGameServerDeployment.deploymentId,\n description: \"a config description\",\n fleetConfigs: [{\n name: \"something-unique\",\n fleetSpec: JSON.stringify({\n replicas: 1,\n scheduling: \"Packed\",\n template: {\n metadata: {\n name: \"tf-test-game-server-template\",\n },\n spec: {\n ports: [{\n name: \"default\",\n portPolicy: \"Dynamic\",\n containerPort: 7654,\n protocol: \"UDP\",\n }],\n template: {\n spec: {\n containers: [{\n name: \"simple-udp-server\",\n image: \"gcr.io/agones-images/udp-server:0.14\",\n }],\n },\n },\n },\n },\n }),\n }],\n scalingConfigs: [{\n name: \"scaling-config-name\",\n fleetAutoscalerSpec: JSON.stringify({\n policy: {\n type: \"Webhook\",\n webhook: {\n service: {\n name: \"autoscaler-webhook-service\",\n namespace: \"default\",\n path: \"scale\",\n },\n },\n },\n }),\n selectors: [{\n labels: {\n one: \"two\",\n },\n }],\n schedules: [{\n cronJobDuration: \"3.500s\",\n cronSpec: \"0 0 * * 0\",\n }],\n }],\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\ndefault_game_server_deployment = gcp.gameservices.GameServerDeployment(\"defaultGameServerDeployment\",\n deployment_id=\"tf-test-deployment\",\n description=\"a deployment description\")\ndefault_game_server_config = gcp.gameservices.GameServerConfig(\"defaultGameServerConfig\",\n config_id=\"tf-test-config\",\n deployment_id=default_game_server_deployment.deployment_id,\n description=\"a config description\",\n fleet_configs=[gcp.gameservices.GameServerConfigFleetConfigArgs(\n name=\"something-unique\",\n fleet_spec=json.dumps({\n \"replicas\": 1,\n \"scheduling\": \"Packed\",\n \"template\": {\n \"metadata\": {\n \"name\": \"tf-test-game-server-template\",\n },\n \"spec\": {\n \"ports\": [{\n \"name\": \"default\",\n \"portPolicy\": \"Dynamic\",\n \"containerPort\": 7654,\n \"protocol\": \"UDP\",\n }],\n \"template\": {\n \"spec\": {\n \"containers\": [{\n \"name\": \"simple-udp-server\",\n \"image\": \"gcr.io/agones-images/udp-server:0.14\",\n }],\n },\n },\n },\n },\n }),\n )],\n scaling_configs=[gcp.gameservices.GameServerConfigScalingConfigArgs(\n name=\"scaling-config-name\",\n fleet_autoscaler_spec=json.dumps({\n \"policy\": {\n \"type\": \"Webhook\",\n \"webhook\": {\n \"service\": {\n \"name\": \"autoscaler-webhook-service\",\n \"namespace\": \"default\",\n \"path\": \"scale\",\n },\n },\n },\n }),\n selectors=[gcp.gameservices.GameServerConfigScalingConfigSelectorArgs(\n labels={\n \"one\": \"two\",\n },\n )],\n schedules=[gcp.gameservices.GameServerConfigScalingConfigScheduleArgs(\n cron_job_duration=\"3.500s\",\n cron_spec=\"0 0 * * 0\",\n )],\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultGameServerDeployment = new Gcp.GameServices.GameServerDeployment(\"defaultGameServerDeployment\", new()\n {\n DeploymentId = \"tf-test-deployment\",\n Description = \"a deployment description\",\n });\n\n var defaultGameServerConfig = new Gcp.GameServices.GameServerConfig(\"defaultGameServerConfig\", new()\n {\n ConfigId = \"tf-test-config\",\n DeploymentId = defaultGameServerDeployment.DeploymentId,\n Description = \"a config description\",\n FleetConfigs = new[]\n {\n new Gcp.GameServices.Inputs.GameServerConfigFleetConfigArgs\n {\n Name = \"something-unique\",\n FleetSpec = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"replicas\"] = 1,\n [\"scheduling\"] = \"Packed\",\n [\"template\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"metadata\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"tf-test-game-server-template\",\n },\n [\"spec\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"ports\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"default\",\n [\"portPolicy\"] = \"Dynamic\",\n [\"containerPort\"] = 7654,\n [\"protocol\"] = \"UDP\",\n },\n },\n [\"template\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"spec\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"containers\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"simple-udp-server\",\n [\"image\"] = \"gcr.io/agones-images/udp-server:0.14\",\n },\n },\n },\n },\n },\n },\n }),\n },\n },\n ScalingConfigs = new[]\n {\n new Gcp.GameServices.Inputs.GameServerConfigScalingConfigArgs\n {\n Name = \"scaling-config-name\",\n FleetAutoscalerSpec = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"policy\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"type\"] = \"Webhook\",\n [\"webhook\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"service\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"autoscaler-webhook-service\",\n [\"namespace\"] = \"default\",\n [\"path\"] = \"scale\",\n },\n },\n },\n }),\n Selectors = new[]\n {\n new Gcp.GameServices.Inputs.GameServerConfigScalingConfigSelectorArgs\n {\n Labels = \n {\n { \"one\", \"two\" },\n },\n },\n },\n Schedules = new[]\n {\n new Gcp.GameServices.Inputs.GameServerConfigScalingConfigScheduleArgs\n {\n CronJobDuration = \"3.500s\",\n CronSpec = \"0 0 * * 0\",\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/v6/go/gcp/gameservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultGameServerDeployment, err := gameservices.NewGameServerDeployment(ctx, \"defaultGameServerDeployment\", \u0026gameservices.GameServerDeploymentArgs{\n\t\t\tDeploymentId: pulumi.String(\"tf-test-deployment\"),\n\t\t\tDescription: pulumi.String(\"a deployment description\"),\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\"replicas\": 1,\n\t\t\t\"scheduling\": \"Packed\",\n\t\t\t\"template\": map[string]interface{}{\n\t\t\t\t\"metadata\": map[string]interface{}{\n\t\t\t\t\t\"name\": \"tf-test-game-server-template\",\n\t\t\t\t},\n\t\t\t\t\"spec\": map[string]interface{}{\n\t\t\t\t\t\"ports\": []map[string]interface{}{\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"name\": \"default\",\n\t\t\t\t\t\t\t\"portPolicy\": \"Dynamic\",\n\t\t\t\t\t\t\t\"containerPort\": 7654,\n\t\t\t\t\t\t\t\"protocol\": \"UDP\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"template\": map[string]interface{}{\n\t\t\t\t\t\t\"spec\": map[string]interface{}{\n\t\t\t\t\t\t\t\"containers\": []map[string]interface{}{\n\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"name\": \"simple-udp-server\",\n\t\t\t\t\t\t\t\t\t\"image\": \"gcr.io/agones-images/udp-server:0.14\",\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\tjson0 := string(tmpJSON0)\n\t\ttmpJSON1, err := json.Marshal(map[string]interface{}{\n\t\t\t\"policy\": map[string]interface{}{\n\t\t\t\t\"type\": \"Webhook\",\n\t\t\t\t\"webhook\": map[string]interface{}{\n\t\t\t\t\t\"service\": map[string]interface{}{\n\t\t\t\t\t\t\"name\": \"autoscaler-webhook-service\",\n\t\t\t\t\t\t\"namespace\": \"default\",\n\t\t\t\t\t\t\"path\": \"scale\",\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 = gameservices.NewGameServerConfig(ctx, \"defaultGameServerConfig\", \u0026gameservices.GameServerConfigArgs{\n\t\t\tConfigId: pulumi.String(\"tf-test-config\"),\n\t\t\tDeploymentId: defaultGameServerDeployment.DeploymentId,\n\t\t\tDescription: pulumi.String(\"a config description\"),\n\t\t\tFleetConfigs: gameservices.GameServerConfigFleetConfigArray{\n\t\t\t\t\u0026gameservices.GameServerConfigFleetConfigArgs{\n\t\t\t\t\tName: pulumi.String(\"something-unique\"),\n\t\t\t\t\tFleetSpec: pulumi.String(json0),\n\t\t\t\t},\n\t\t\t},\n\t\t\tScalingConfigs: gameservices.GameServerConfigScalingConfigArray{\n\t\t\t\t\u0026gameservices.GameServerConfigScalingConfigArgs{\n\t\t\t\t\tName: pulumi.String(\"scaling-config-name\"),\n\t\t\t\t\tFleetAutoscalerSpec: pulumi.String(json1),\n\t\t\t\t\tSelectors: gameservices.GameServerConfigScalingConfigSelectorArray{\n\t\t\t\t\t\t\u0026gameservices.GameServerConfigScalingConfigSelectorArgs{\n\t\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\t\"one\": pulumi.String(\"two\"),\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\tSchedules: gameservices.GameServerConfigScalingConfigScheduleArray{\n\t\t\t\t\t\t\u0026gameservices.GameServerConfigScalingConfigScheduleArgs{\n\t\t\t\t\t\t\tCronJobDuration: pulumi.String(\"3.500s\"),\n\t\t\t\t\t\t\tCronSpec: pulumi.String(\"0 0 * * 0\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gameservices.GameServerDeployment;\nimport com.pulumi.gcp.gameservices.GameServerDeploymentArgs;\nimport com.pulumi.gcp.gameservices.GameServerConfig;\nimport com.pulumi.gcp.gameservices.GameServerConfigArgs;\nimport com.pulumi.gcp.gameservices.inputs.GameServerConfigFleetConfigArgs;\nimport com.pulumi.gcp.gameservices.inputs.GameServerConfigScalingConfigArgs;\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 defaultGameServerDeployment = new GameServerDeployment(\"defaultGameServerDeployment\", GameServerDeploymentArgs.builder() \n .deploymentId(\"tf-test-deployment\")\n .description(\"a deployment description\")\n .build());\n\n var defaultGameServerConfig = new GameServerConfig(\"defaultGameServerConfig\", GameServerConfigArgs.builder() \n .configId(\"tf-test-config\")\n .deploymentId(defaultGameServerDeployment.deploymentId())\n .description(\"a config description\")\n .fleetConfigs(GameServerConfigFleetConfigArgs.builder()\n .name(\"something-unique\")\n .fleetSpec(serializeJson(\n jsonObject(\n jsonProperty(\"replicas\", 1),\n jsonProperty(\"scheduling\", \"Packed\"),\n jsonProperty(\"template\", jsonObject(\n jsonProperty(\"metadata\", jsonObject(\n jsonProperty(\"name\", \"tf-test-game-server-template\")\n )),\n jsonProperty(\"spec\", jsonObject(\n jsonProperty(\"ports\", jsonArray(jsonObject(\n jsonProperty(\"name\", \"default\"),\n jsonProperty(\"portPolicy\", \"Dynamic\"),\n jsonProperty(\"containerPort\", 7654),\n jsonProperty(\"protocol\", \"UDP\")\n ))),\n jsonProperty(\"template\", jsonObject(\n jsonProperty(\"spec\", jsonObject(\n jsonProperty(\"containers\", jsonArray(jsonObject(\n jsonProperty(\"name\", \"simple-udp-server\"),\n jsonProperty(\"image\", \"gcr.io/agones-images/udp-server:0.14\")\n )))\n ))\n ))\n ))\n ))\n )))\n .build())\n .scalingConfigs(GameServerConfigScalingConfigArgs.builder()\n .name(\"scaling-config-name\")\n .fleetAutoscalerSpec(serializeJson(\n jsonObject(\n jsonProperty(\"policy\", jsonObject(\n jsonProperty(\"type\", \"Webhook\"),\n jsonProperty(\"webhook\", jsonObject(\n jsonProperty(\"service\", jsonObject(\n jsonProperty(\"name\", \"autoscaler-webhook-service\"),\n jsonProperty(\"namespace\", \"default\"),\n jsonProperty(\"path\", \"scale\")\n ))\n ))\n ))\n )))\n .selectors(GameServerConfigScalingConfigSelectorArgs.builder()\n .labels(Map.of(\"one\", \"two\"))\n .build())\n .schedules(GameServerConfigScalingConfigScheduleArgs.builder()\n .cronJobDuration(\"3.500s\")\n .cronSpec(\"0 0 * * 0\")\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultGameServerDeployment:\n type: gcp:gameservices:GameServerDeployment\n properties:\n deploymentId: tf-test-deployment\n description: a deployment description\n defaultGameServerConfig:\n type: gcp:gameservices:GameServerConfig\n properties:\n configId: tf-test-config\n deploymentId: ${defaultGameServerDeployment.deploymentId}\n description: a config description\n fleetConfigs:\n - name: something-unique\n fleetSpec:\n fn::toJSON:\n replicas: 1\n scheduling: Packed\n template:\n metadata:\n name: tf-test-game-server-template\n spec:\n ports:\n - name: default\n portPolicy: Dynamic\n containerPort: 7654\n protocol: UDP\n template:\n spec:\n containers:\n - name: simple-udp-server\n image: gcr.io/agones-images/udp-server:0.14\n scalingConfigs:\n - name: scaling-config-name\n fleetAutoscalerSpec:\n fn::toJSON:\n policy:\n type: Webhook\n webhook:\n service:\n name: autoscaler-webhook-service\n namespace: default\n path: scale\n selectors:\n - labels:\n one: two\n schedules:\n - cronJobDuration: 3.500s\n cronSpec: 0 0 * * 0\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGameServerConfig can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:gameservices/gameServerConfig:GameServerConfig default projects/{{project}}/locations/{{location}}/gameServerDeployments/{{deployment_id}}/configs/{{config_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerConfig:GameServerConfig default {{project}}/{{location}}/{{deployment_id}}/{{config_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerConfig:GameServerConfig default {{location}}/{{deployment_id}}/{{config_id}}\n```\n\n ", "properties": { "configId": { "type": "string", @@ -163980,7 +165427,7 @@ } }, "gcp:gameservices/gameServerDeployment:GameServerDeployment": { - "description": "A game server deployment resource.\n\nTo get more information about GameServerDeployment, see:\n\n* [API documentation](https://cloud.google.com/game-servers/docs/reference/rest/v1beta/projects.locations.gameServerDeployments)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/game-servers/docs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Game Service Deployment Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.gameservices.GameServerDeployment(\"default\", {\n deploymentId: \"tf-test-deployment\",\n description: \"a deployment description\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.gameservices.GameServerDeployment(\"default\",\n deployment_id=\"tf-test-deployment\",\n description=\"a deployment description\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.GameServices.GameServerDeployment(\"default\", new()\n {\n DeploymentId = \"tf-test-deployment\",\n Description = \"a deployment description\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/gameservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gameservices.NewGameServerDeployment(ctx, \"default\", \u0026gameservices.GameServerDeploymentArgs{\n\t\t\tDeploymentId: pulumi.String(\"tf-test-deployment\"),\n\t\t\tDescription: pulumi.String(\"a deployment description\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gameservices.GameServerDeployment;\nimport com.pulumi.gcp.gameservices.GameServerDeploymentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 GameServerDeployment(\"default\", GameServerDeploymentArgs.builder() \n .deploymentId(\"tf-test-deployment\")\n .description(\"a deployment description\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:gameservices:GameServerDeployment\n properties:\n deploymentId: tf-test-deployment\n description: a deployment description\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGameServerDeployment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:gameservices/gameServerDeployment:GameServerDeployment default projects/{{project}}/locations/{{location}}/gameServerDeployments/{{deployment_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerDeployment:GameServerDeployment default {{project}}/{{location}}/{{deployment_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerDeployment:GameServerDeployment default {{location}}/{{deployment_id}}\n```\n\n ", + "description": "A game server deployment resource.\n\n\nTo get more information about GameServerDeployment, see:\n\n* [API documentation](https://cloud.google.com/game-servers/docs/reference/rest/v1beta/projects.locations.gameServerDeployments)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/game-servers/docs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Game Service Deployment Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.gameservices.GameServerDeployment(\"default\", {\n deploymentId: \"tf-test-deployment\",\n description: \"a deployment description\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.gameservices.GameServerDeployment(\"default\",\n deployment_id=\"tf-test-deployment\",\n description=\"a deployment description\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.GameServices.GameServerDeployment(\"default\", new()\n {\n DeploymentId = \"tf-test-deployment\",\n Description = \"a deployment description\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/gameservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gameservices.NewGameServerDeployment(ctx, \"default\", \u0026gameservices.GameServerDeploymentArgs{\n\t\t\tDeploymentId: pulumi.String(\"tf-test-deployment\"),\n\t\t\tDescription: pulumi.String(\"a deployment description\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gameservices.GameServerDeployment;\nimport com.pulumi.gcp.gameservices.GameServerDeploymentArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 GameServerDeployment(\"default\", GameServerDeploymentArgs.builder() \n .deploymentId(\"tf-test-deployment\")\n .description(\"a deployment description\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:gameservices:GameServerDeployment\n properties:\n deploymentId: tf-test-deployment\n description: a deployment description\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGameServerDeployment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:gameservices/gameServerDeployment:GameServerDeployment default projects/{{project}}/locations/{{location}}/gameServerDeployments/{{deployment_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerDeployment:GameServerDeployment default {{project}}/{{location}}/{{deployment_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerDeployment:GameServerDeployment default {{location}}/{{deployment_id}}\n```\n\n ", "properties": { "deploymentId": { "type": "string", @@ -164082,7 +165529,7 @@ } }, "gcp:gameservices/gameServerDeploymentRollout:GameServerDeploymentRollout": { - "description": "This represents the rollout state. This is part of the game server\ndeployment.\n\nTo get more information about GameServerDeploymentRollout, see:\n\n* [API documentation](https://cloud.google.com/game-servers/docs/reference/rest/v1beta/GameServerDeploymentRollout)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/game-servers/docs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Game Service Deployment Rollout Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultGameServerDeployment = new gcp.gameservices.GameServerDeployment(\"defaultGameServerDeployment\", {\n deploymentId: \"tf-test-deployment\",\n description: \"a deployment description\",\n});\nconst defaultGameServerConfig = new gcp.gameservices.GameServerConfig(\"defaultGameServerConfig\", {\n configId: \"tf-test-config\",\n deploymentId: defaultGameServerDeployment.deploymentId,\n description: \"a config description\",\n fleetConfigs: [{\n name: \"some-non-guid\",\n fleetSpec: JSON.stringify({\n replicas: 1,\n scheduling: \"Packed\",\n template: {\n metadata: {\n name: \"tf-test-game-server-template\",\n },\n spec: {\n ports: [{\n name: \"default\",\n portPolicy: \"Dynamic\",\n containerPort: 7654,\n protocol: \"UDP\",\n }],\n template: {\n spec: {\n containers: [{\n name: \"simple-udp-server\",\n image: \"gcr.io/agones-images/udp-server:0.14\",\n }],\n },\n },\n },\n },\n }),\n }],\n});\nconst defaultGameServerDeploymentRollout = new gcp.gameservices.GameServerDeploymentRollout(\"defaultGameServerDeploymentRollout\", {\n deploymentId: defaultGameServerDeployment.deploymentId,\n defaultGameServerConfig: defaultGameServerConfig.name,\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\ndefault_game_server_deployment = gcp.gameservices.GameServerDeployment(\"defaultGameServerDeployment\",\n deployment_id=\"tf-test-deployment\",\n description=\"a deployment description\")\ndefault_game_server_config = gcp.gameservices.GameServerConfig(\"defaultGameServerConfig\",\n config_id=\"tf-test-config\",\n deployment_id=default_game_server_deployment.deployment_id,\n description=\"a config description\",\n fleet_configs=[gcp.gameservices.GameServerConfigFleetConfigArgs(\n name=\"some-non-guid\",\n fleet_spec=json.dumps({\n \"replicas\": 1,\n \"scheduling\": \"Packed\",\n \"template\": {\n \"metadata\": {\n \"name\": \"tf-test-game-server-template\",\n },\n \"spec\": {\n \"ports\": [{\n \"name\": \"default\",\n \"portPolicy\": \"Dynamic\",\n \"containerPort\": 7654,\n \"protocol\": \"UDP\",\n }],\n \"template\": {\n \"spec\": {\n \"containers\": [{\n \"name\": \"simple-udp-server\",\n \"image\": \"gcr.io/agones-images/udp-server:0.14\",\n }],\n },\n },\n },\n },\n }),\n )])\ndefault_game_server_deployment_rollout = gcp.gameservices.GameServerDeploymentRollout(\"defaultGameServerDeploymentRollout\",\n deployment_id=default_game_server_deployment.deployment_id,\n default_game_server_config=default_game_server_config.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultGameServerDeployment = new Gcp.GameServices.GameServerDeployment(\"defaultGameServerDeployment\", new()\n {\n DeploymentId = \"tf-test-deployment\",\n Description = \"a deployment description\",\n });\n\n var defaultGameServerConfig = new Gcp.GameServices.GameServerConfig(\"defaultGameServerConfig\", new()\n {\n ConfigId = \"tf-test-config\",\n DeploymentId = defaultGameServerDeployment.DeploymentId,\n Description = \"a config description\",\n FleetConfigs = new[]\n {\n new Gcp.GameServices.Inputs.GameServerConfigFleetConfigArgs\n {\n Name = \"some-non-guid\",\n FleetSpec = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"replicas\"] = 1,\n [\"scheduling\"] = \"Packed\",\n [\"template\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"metadata\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"tf-test-game-server-template\",\n },\n [\"spec\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"ports\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"default\",\n [\"portPolicy\"] = \"Dynamic\",\n [\"containerPort\"] = 7654,\n [\"protocol\"] = \"UDP\",\n },\n },\n [\"template\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"spec\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"containers\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"simple-udp-server\",\n [\"image\"] = \"gcr.io/agones-images/udp-server:0.14\",\n },\n },\n },\n },\n },\n },\n }),\n },\n },\n });\n\n var defaultGameServerDeploymentRollout = new Gcp.GameServices.GameServerDeploymentRollout(\"defaultGameServerDeploymentRollout\", new()\n {\n DeploymentId = defaultGameServerDeployment.DeploymentId,\n DefaultGameServerConfig = defaultGameServerConfig.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/gameservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultGameServerDeployment, err := gameservices.NewGameServerDeployment(ctx, \"defaultGameServerDeployment\", \u0026gameservices.GameServerDeploymentArgs{\n\t\t\tDeploymentId: pulumi.String(\"tf-test-deployment\"),\n\t\t\tDescription: pulumi.String(\"a deployment description\"),\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\"replicas\": 1,\n\t\t\t\"scheduling\": \"Packed\",\n\t\t\t\"template\": map[string]interface{}{\n\t\t\t\t\"metadata\": map[string]interface{}{\n\t\t\t\t\t\"name\": \"tf-test-game-server-template\",\n\t\t\t\t},\n\t\t\t\t\"spec\": map[string]interface{}{\n\t\t\t\t\t\"ports\": []map[string]interface{}{\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"name\": \"default\",\n\t\t\t\t\t\t\t\"portPolicy\": \"Dynamic\",\n\t\t\t\t\t\t\t\"containerPort\": 7654,\n\t\t\t\t\t\t\t\"protocol\": \"UDP\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"template\": map[string]interface{}{\n\t\t\t\t\t\t\"spec\": map[string]interface{}{\n\t\t\t\t\t\t\t\"containers\": []map[string]interface{}{\n\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"name\": \"simple-udp-server\",\n\t\t\t\t\t\t\t\t\t\"image\": \"gcr.io/agones-images/udp-server:0.14\",\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\tjson0 := string(tmpJSON0)\n\t\tdefaultGameServerConfig, err := gameservices.NewGameServerConfig(ctx, \"defaultGameServerConfig\", \u0026gameservices.GameServerConfigArgs{\n\t\t\tConfigId: pulumi.String(\"tf-test-config\"),\n\t\t\tDeploymentId: defaultGameServerDeployment.DeploymentId,\n\t\t\tDescription: pulumi.String(\"a config description\"),\n\t\t\tFleetConfigs: gameservices.GameServerConfigFleetConfigArray{\n\t\t\t\t\u0026gameservices.GameServerConfigFleetConfigArgs{\n\t\t\t\t\tName: pulumi.String(\"some-non-guid\"),\n\t\t\t\t\tFleetSpec: pulumi.String(json0),\n\t\t\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 = gameservices.NewGameServerDeploymentRollout(ctx, \"defaultGameServerDeploymentRollout\", \u0026gameservices.GameServerDeploymentRolloutArgs{\n\t\t\tDeploymentId: defaultGameServerDeployment.DeploymentId,\n\t\t\tDefaultGameServerConfig: defaultGameServerConfig.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.gameservices.GameServerDeployment;\nimport com.pulumi.gcp.gameservices.GameServerDeploymentArgs;\nimport com.pulumi.gcp.gameservices.GameServerConfig;\nimport com.pulumi.gcp.gameservices.GameServerConfigArgs;\nimport com.pulumi.gcp.gameservices.inputs.GameServerConfigFleetConfigArgs;\nimport com.pulumi.gcp.gameservices.GameServerDeploymentRollout;\nimport com.pulumi.gcp.gameservices.GameServerDeploymentRolloutArgs;\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 defaultGameServerDeployment = new GameServerDeployment(\"defaultGameServerDeployment\", GameServerDeploymentArgs.builder() \n .deploymentId(\"tf-test-deployment\")\n .description(\"a deployment description\")\n .build());\n\n var defaultGameServerConfig = new GameServerConfig(\"defaultGameServerConfig\", GameServerConfigArgs.builder() \n .configId(\"tf-test-config\")\n .deploymentId(defaultGameServerDeployment.deploymentId())\n .description(\"a config description\")\n .fleetConfigs(GameServerConfigFleetConfigArgs.builder()\n .name(\"some-non-guid\")\n .fleetSpec(serializeJson(\n jsonObject(\n jsonProperty(\"replicas\", 1),\n jsonProperty(\"scheduling\", \"Packed\"),\n jsonProperty(\"template\", jsonObject(\n jsonProperty(\"metadata\", jsonObject(\n jsonProperty(\"name\", \"tf-test-game-server-template\")\n )),\n jsonProperty(\"spec\", jsonObject(\n jsonProperty(\"ports\", jsonArray(jsonObject(\n jsonProperty(\"name\", \"default\"),\n jsonProperty(\"portPolicy\", \"Dynamic\"),\n jsonProperty(\"containerPort\", 7654),\n jsonProperty(\"protocol\", \"UDP\")\n ))),\n jsonProperty(\"template\", jsonObject(\n jsonProperty(\"spec\", jsonObject(\n jsonProperty(\"containers\", jsonArray(jsonObject(\n jsonProperty(\"name\", \"simple-udp-server\"),\n jsonProperty(\"image\", \"gcr.io/agones-images/udp-server:0.14\")\n )))\n ))\n ))\n ))\n ))\n )))\n .build())\n .build());\n\n var defaultGameServerDeploymentRollout = new GameServerDeploymentRollout(\"defaultGameServerDeploymentRollout\", GameServerDeploymentRolloutArgs.builder() \n .deploymentId(defaultGameServerDeployment.deploymentId())\n .defaultGameServerConfig(defaultGameServerConfig.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultGameServerDeployment:\n type: gcp:gameservices:GameServerDeployment\n properties:\n deploymentId: tf-test-deployment\n description: a deployment description\n defaultGameServerConfig:\n type: gcp:gameservices:GameServerConfig\n properties:\n configId: tf-test-config\n deploymentId: ${defaultGameServerDeployment.deploymentId}\n description: a config description\n fleetConfigs:\n - name: some-non-guid\n fleetSpec:\n fn::toJSON:\n replicas: 1\n scheduling: Packed\n template:\n metadata:\n name: tf-test-game-server-template\n spec:\n ports:\n - name: default\n portPolicy: Dynamic\n containerPort: 7654\n protocol: UDP\n template:\n spec:\n containers:\n - name: simple-udp-server\n image: gcr.io/agones-images/udp-server:0.14\n defaultGameServerDeploymentRollout:\n type: gcp:gameservices:GameServerDeploymentRollout\n properties:\n deploymentId: ${defaultGameServerDeployment.deploymentId}\n defaultGameServerConfig: ${defaultGameServerConfig.name}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGameServerDeploymentRollout can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:gameservices/gameServerDeploymentRollout:GameServerDeploymentRollout default projects/{{project}}/locations/global/gameServerDeployments/{{deployment_id}}/rollout\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerDeploymentRollout:GameServerDeploymentRollout default {{project}}/{{deployment_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerDeploymentRollout:GameServerDeploymentRollout default {{deployment_id}}\n```\n\n ", + "description": "This represents the rollout state. This is part of the game server\ndeployment.\n\n\nTo get more information about GameServerDeploymentRollout, see:\n\n* [API documentation](https://cloud.google.com/game-servers/docs/reference/rest/v1beta/GameServerDeploymentRollout)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/game-servers/docs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Game Service Deployment Rollout Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultGameServerDeployment = new gcp.gameservices.GameServerDeployment(\"defaultGameServerDeployment\", {\n deploymentId: \"tf-test-deployment\",\n description: \"a deployment description\",\n});\nconst defaultGameServerConfig = new gcp.gameservices.GameServerConfig(\"defaultGameServerConfig\", {\n configId: \"tf-test-config\",\n deploymentId: defaultGameServerDeployment.deploymentId,\n description: \"a config description\",\n fleetConfigs: [{\n name: \"some-non-guid\",\n fleetSpec: JSON.stringify({\n replicas: 1,\n scheduling: \"Packed\",\n template: {\n metadata: {\n name: \"tf-test-game-server-template\",\n },\n spec: {\n ports: [{\n name: \"default\",\n portPolicy: \"Dynamic\",\n containerPort: 7654,\n protocol: \"UDP\",\n }],\n template: {\n spec: {\n containers: [{\n name: \"simple-udp-server\",\n image: \"gcr.io/agones-images/udp-server:0.14\",\n }],\n },\n },\n },\n },\n }),\n }],\n});\nconst defaultGameServerDeploymentRollout = new gcp.gameservices.GameServerDeploymentRollout(\"defaultGameServerDeploymentRollout\", {\n deploymentId: defaultGameServerDeployment.deploymentId,\n defaultGameServerConfig: defaultGameServerConfig.name,\n});\n```\n```python\nimport pulumi\nimport json\nimport pulumi_gcp as gcp\n\ndefault_game_server_deployment = gcp.gameservices.GameServerDeployment(\"defaultGameServerDeployment\",\n deployment_id=\"tf-test-deployment\",\n description=\"a deployment description\")\ndefault_game_server_config = gcp.gameservices.GameServerConfig(\"defaultGameServerConfig\",\n config_id=\"tf-test-config\",\n deployment_id=default_game_server_deployment.deployment_id,\n description=\"a config description\",\n fleet_configs=[gcp.gameservices.GameServerConfigFleetConfigArgs(\n name=\"some-non-guid\",\n fleet_spec=json.dumps({\n \"replicas\": 1,\n \"scheduling\": \"Packed\",\n \"template\": {\n \"metadata\": {\n \"name\": \"tf-test-game-server-template\",\n },\n \"spec\": {\n \"ports\": [{\n \"name\": \"default\",\n \"portPolicy\": \"Dynamic\",\n \"containerPort\": 7654,\n \"protocol\": \"UDP\",\n }],\n \"template\": {\n \"spec\": {\n \"containers\": [{\n \"name\": \"simple-udp-server\",\n \"image\": \"gcr.io/agones-images/udp-server:0.14\",\n }],\n },\n },\n },\n },\n }),\n )])\ndefault_game_server_deployment_rollout = gcp.gameservices.GameServerDeploymentRollout(\"defaultGameServerDeploymentRollout\",\n deployment_id=default_game_server_deployment.deployment_id,\n default_game_server_config=default_game_server_config.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing System.Text.Json;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultGameServerDeployment = new Gcp.GameServices.GameServerDeployment(\"defaultGameServerDeployment\", new()\n {\n DeploymentId = \"tf-test-deployment\",\n Description = \"a deployment description\",\n });\n\n var defaultGameServerConfig = new Gcp.GameServices.GameServerConfig(\"defaultGameServerConfig\", new()\n {\n ConfigId = \"tf-test-config\",\n DeploymentId = defaultGameServerDeployment.DeploymentId,\n Description = \"a config description\",\n FleetConfigs = new[]\n {\n new Gcp.GameServices.Inputs.GameServerConfigFleetConfigArgs\n {\n Name = \"some-non-guid\",\n FleetSpec = JsonSerializer.Serialize(new Dictionary\u003cstring, object?\u003e\n {\n [\"replicas\"] = 1,\n [\"scheduling\"] = \"Packed\",\n [\"template\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"metadata\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"tf-test-game-server-template\",\n },\n [\"spec\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"ports\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"default\",\n [\"portPolicy\"] = \"Dynamic\",\n [\"containerPort\"] = 7654,\n [\"protocol\"] = \"UDP\",\n },\n },\n [\"template\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"spec\"] = new Dictionary\u003cstring, object?\u003e\n {\n [\"containers\"] = new[]\n {\n new Dictionary\u003cstring, object?\u003e\n {\n [\"name\"] = \"simple-udp-server\",\n [\"image\"] = \"gcr.io/agones-images/udp-server:0.14\",\n },\n },\n },\n },\n },\n },\n }),\n },\n },\n });\n\n var defaultGameServerDeploymentRollout = new Gcp.GameServices.GameServerDeploymentRollout(\"defaultGameServerDeploymentRollout\", new()\n {\n DeploymentId = defaultGameServerDeployment.DeploymentId,\n DefaultGameServerConfig = defaultGameServerConfig.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"encoding/json\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/gameservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultGameServerDeployment, err := gameservices.NewGameServerDeployment(ctx, \"defaultGameServerDeployment\", \u0026gameservices.GameServerDeploymentArgs{\n\t\t\tDeploymentId: pulumi.String(\"tf-test-deployment\"),\n\t\t\tDescription: pulumi.String(\"a deployment description\"),\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\"replicas\": 1,\n\t\t\t\"scheduling\": \"Packed\",\n\t\t\t\"template\": map[string]interface{}{\n\t\t\t\t\"metadata\": map[string]interface{}{\n\t\t\t\t\t\"name\": \"tf-test-game-server-template\",\n\t\t\t\t},\n\t\t\t\t\"spec\": map[string]interface{}{\n\t\t\t\t\t\"ports\": []map[string]interface{}{\n\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\"name\": \"default\",\n\t\t\t\t\t\t\t\"portPolicy\": \"Dynamic\",\n\t\t\t\t\t\t\t\"containerPort\": 7654,\n\t\t\t\t\t\t\t\"protocol\": \"UDP\",\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\"template\": map[string]interface{}{\n\t\t\t\t\t\t\"spec\": map[string]interface{}{\n\t\t\t\t\t\t\t\"containers\": []map[string]interface{}{\n\t\t\t\t\t\t\t\tmap[string]interface{}{\n\t\t\t\t\t\t\t\t\t\"name\": \"simple-udp-server\",\n\t\t\t\t\t\t\t\t\t\"image\": \"gcr.io/agones-images/udp-server:0.14\",\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\tjson0 := string(tmpJSON0)\n\t\tdefaultGameServerConfig, err := gameservices.NewGameServerConfig(ctx, \"defaultGameServerConfig\", \u0026gameservices.GameServerConfigArgs{\n\t\t\tConfigId: pulumi.String(\"tf-test-config\"),\n\t\t\tDeploymentId: defaultGameServerDeployment.DeploymentId,\n\t\t\tDescription: pulumi.String(\"a config description\"),\n\t\t\tFleetConfigs: gameservices.GameServerConfigFleetConfigArray{\n\t\t\t\t\u0026gameservices.GameServerConfigFleetConfigArgs{\n\t\t\t\t\tName: pulumi.String(\"some-non-guid\"),\n\t\t\t\t\tFleetSpec: pulumi.String(json0),\n\t\t\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 = gameservices.NewGameServerDeploymentRollout(ctx, \"defaultGameServerDeploymentRollout\", \u0026gameservices.GameServerDeploymentRolloutArgs{\n\t\t\tDeploymentId: defaultGameServerDeployment.DeploymentId,\n\t\t\tDefaultGameServerConfig: defaultGameServerConfig.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.gameservices.GameServerDeployment;\nimport com.pulumi.gcp.gameservices.GameServerDeploymentArgs;\nimport com.pulumi.gcp.gameservices.GameServerConfig;\nimport com.pulumi.gcp.gameservices.GameServerConfigArgs;\nimport com.pulumi.gcp.gameservices.inputs.GameServerConfigFleetConfigArgs;\nimport com.pulumi.gcp.gameservices.GameServerDeploymentRollout;\nimport com.pulumi.gcp.gameservices.GameServerDeploymentRolloutArgs;\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 defaultGameServerDeployment = new GameServerDeployment(\"defaultGameServerDeployment\", GameServerDeploymentArgs.builder() \n .deploymentId(\"tf-test-deployment\")\n .description(\"a deployment description\")\n .build());\n\n var defaultGameServerConfig = new GameServerConfig(\"defaultGameServerConfig\", GameServerConfigArgs.builder() \n .configId(\"tf-test-config\")\n .deploymentId(defaultGameServerDeployment.deploymentId())\n .description(\"a config description\")\n .fleetConfigs(GameServerConfigFleetConfigArgs.builder()\n .name(\"some-non-guid\")\n .fleetSpec(serializeJson(\n jsonObject(\n jsonProperty(\"replicas\", 1),\n jsonProperty(\"scheduling\", \"Packed\"),\n jsonProperty(\"template\", jsonObject(\n jsonProperty(\"metadata\", jsonObject(\n jsonProperty(\"name\", \"tf-test-game-server-template\")\n )),\n jsonProperty(\"spec\", jsonObject(\n jsonProperty(\"ports\", jsonArray(jsonObject(\n jsonProperty(\"name\", \"default\"),\n jsonProperty(\"portPolicy\", \"Dynamic\"),\n jsonProperty(\"containerPort\", 7654),\n jsonProperty(\"protocol\", \"UDP\")\n ))),\n jsonProperty(\"template\", jsonObject(\n jsonProperty(\"spec\", jsonObject(\n jsonProperty(\"containers\", jsonArray(jsonObject(\n jsonProperty(\"name\", \"simple-udp-server\"),\n jsonProperty(\"image\", \"gcr.io/agones-images/udp-server:0.14\")\n )))\n ))\n ))\n ))\n ))\n )))\n .build())\n .build());\n\n var defaultGameServerDeploymentRollout = new GameServerDeploymentRollout(\"defaultGameServerDeploymentRollout\", GameServerDeploymentRolloutArgs.builder() \n .deploymentId(defaultGameServerDeployment.deploymentId())\n .defaultGameServerConfig(defaultGameServerConfig.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n defaultGameServerDeployment:\n type: gcp:gameservices:GameServerDeployment\n properties:\n deploymentId: tf-test-deployment\n description: a deployment description\n defaultGameServerConfig:\n type: gcp:gameservices:GameServerConfig\n properties:\n configId: tf-test-config\n deploymentId: ${defaultGameServerDeployment.deploymentId}\n description: a config description\n fleetConfigs:\n - name: some-non-guid\n fleetSpec:\n fn::toJSON:\n replicas: 1\n scheduling: Packed\n template:\n metadata:\n name: tf-test-game-server-template\n spec:\n ports:\n - name: default\n portPolicy: Dynamic\n containerPort: 7654\n protocol: UDP\n template:\n spec:\n containers:\n - name: simple-udp-server\n image: gcr.io/agones-images/udp-server:0.14\n defaultGameServerDeploymentRollout:\n type: gcp:gameservices:GameServerDeploymentRollout\n properties:\n deploymentId: ${defaultGameServerDeployment.deploymentId}\n defaultGameServerConfig: ${defaultGameServerConfig.name}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGameServerDeploymentRollout can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:gameservices/gameServerDeploymentRollout:GameServerDeploymentRollout default projects/{{project}}/locations/global/gameServerDeployments/{{deployment_id}}/rollout\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerDeploymentRollout:GameServerDeploymentRollout default {{project}}/{{deployment_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/gameServerDeploymentRollout:GameServerDeploymentRollout default {{deployment_id}}\n```\n\n ", "properties": { "defaultGameServerConfig": { "type": "string", @@ -164172,7 +165619,7 @@ } }, "gcp:gameservices/realm:Realm": { - "description": "A Realm resource.\n\nTo get more information about Realm, see:\n\n* [API documentation](https://cloud.google.com/game-servers/docs/reference/rest/v1beta/projects.locations.realms)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/game-servers/docs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Game Service Realm Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.gameservices.Realm(\"default\", {\n description: \"one of the nine\",\n location: \"global\",\n realmId: \"tf-test-realm\",\n timeZone: \"EST\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.gameservices.Realm(\"default\",\n description=\"one of the nine\",\n location=\"global\",\n realm_id=\"tf-test-realm\",\n time_zone=\"EST\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.GameServices.Realm(\"default\", new()\n {\n Description = \"one of the nine\",\n Location = \"global\",\n RealmId = \"tf-test-realm\",\n TimeZone = \"EST\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/gameservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gameservices.NewRealm(ctx, \"default\", \u0026gameservices.RealmArgs{\n\t\t\tDescription: pulumi.String(\"one of the nine\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tRealmId: pulumi.String(\"tf-test-realm\"),\n\t\t\tTimeZone: pulumi.String(\"EST\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gameservices.Realm;\nimport com.pulumi.gcp.gameservices.RealmArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Realm(\"default\", RealmArgs.builder() \n .description(\"one of the nine\")\n .location(\"global\")\n .realmId(\"tf-test-realm\")\n .timeZone(\"EST\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:gameservices:Realm\n properties:\n description: one of the nine\n location: global\n realmId: tf-test-realm\n timeZone: EST\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRealm can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:gameservices/realm:Realm default projects/{{project}}/locations/{{location}}/realms/{{realm_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/realm:Realm default {{project}}/{{location}}/{{realm_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/realm:Realm default {{location}}/{{realm_id}}\n```\n\n ", + "description": "A Realm resource.\n\n\nTo get more information about Realm, see:\n\n* [API documentation](https://cloud.google.com/game-servers/docs/reference/rest/v1beta/projects.locations.realms)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/game-servers/docs)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Game Service Realm Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.gameservices.Realm(\"default\", {\n description: \"one of the nine\",\n location: \"global\",\n realmId: \"tf-test-realm\",\n timeZone: \"EST\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.gameservices.Realm(\"default\",\n description=\"one of the nine\",\n location=\"global\",\n realm_id=\"tf-test-realm\",\n time_zone=\"EST\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.GameServices.Realm(\"default\", new()\n {\n Description = \"one of the nine\",\n Location = \"global\",\n RealmId = \"tf-test-realm\",\n TimeZone = \"EST\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/gameservices\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := gameservices.NewRealm(ctx, \"default\", \u0026gameservices.RealmArgs{\n\t\t\tDescription: pulumi.String(\"one of the nine\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tRealmId: pulumi.String(\"tf-test-realm\"),\n\t\t\tTimeZone: pulumi.String(\"EST\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.gameservices.Realm;\nimport com.pulumi.gcp.gameservices.RealmArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Realm(\"default\", RealmArgs.builder() \n .description(\"one of the nine\")\n .location(\"global\")\n .realmId(\"tf-test-realm\")\n .timeZone(\"EST\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:gameservices:Realm\n properties:\n description: one of the nine\n location: global\n realmId: tf-test-realm\n timeZone: EST\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nRealm can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:gameservices/realm:Realm default projects/{{project}}/locations/{{location}}/realms/{{realm_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/realm:Realm default {{project}}/{{location}}/{{realm_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:gameservices/realm:Realm default {{location}}/{{realm_id}}\n```\n\n ", "properties": { "description": { "type": "string", @@ -165438,7 +166885,7 @@ } }, "gcp:healthcare/consentStore:ConsentStore": { - "description": "The Consent Management API is a tool for tracking user consents and the documentation associated with the consents.\n\nTo get more information about ConsentStore, see:\n\n* [API documentation](https://cloud.google.com/healthcare/docs/reference/rest/v1/projects.locations.datasets.consentStores)\n* How-to Guides\n * [Creating a Consent store](https://cloud.google.com/healthcare/docs/how-tos/consent)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Healthcare Consent Store Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst my_consent = new gcp.healthcare.ConsentStore(\"my-consent\", {dataset: dataset.id});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\nmy_consent = gcp.healthcare.ConsentStore(\"my-consent\", dataset=dataset.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var my_consent = new Gcp.Healthcare.ConsentStore(\"my-consent\", new()\n {\n Dataset = dataset.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewConsentStore(ctx, \"my-consent\", \u0026healthcare.ConsentStoreArgs{\n\t\t\tDataset: dataset.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.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.ConsentStore;\nimport com.pulumi.gcp.healthcare.ConsentStoreArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var my_consent = new ConsentStore(\"my-consent\", ConsentStoreArgs.builder() \n .dataset(dataset.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n my-consent:\n type: gcp:healthcare:ConsentStore\n properties:\n dataset: ${dataset.id}\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Consent Store Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst my_consent = new gcp.healthcare.ConsentStore(\"my-consent\", {\n dataset: dataset.id,\n enableConsentCreateOnUpdate: true,\n defaultConsentTtl: \"90000s\",\n labels: {\n label1: \"labelvalue1\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\nmy_consent = gcp.healthcare.ConsentStore(\"my-consent\",\n dataset=dataset.id,\n enable_consent_create_on_update=True,\n default_consent_ttl=\"90000s\",\n labels={\n \"label1\": \"labelvalue1\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var my_consent = new Gcp.Healthcare.ConsentStore(\"my-consent\", new()\n {\n Dataset = dataset.Id,\n EnableConsentCreateOnUpdate = true,\n DefaultConsentTtl = \"90000s\",\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewConsentStore(ctx, \"my-consent\", \u0026healthcare.ConsentStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tEnableConsentCreateOnUpdate: pulumi.Bool(true),\n\t\t\tDefaultConsentTtl: pulumi.String(\"90000s\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.ConsentStore;\nimport com.pulumi.gcp.healthcare.ConsentStoreArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var my_consent = new ConsentStore(\"my-consent\", ConsentStoreArgs.builder() \n .dataset(dataset.id())\n .enableConsentCreateOnUpdate(true)\n .defaultConsentTtl(\"90000s\")\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n my-consent:\n type: gcp:healthcare:ConsentStore\n properties:\n dataset: ${dataset.id}\n enableConsentCreateOnUpdate: true\n defaultConsentTtl: 90000s\n labels:\n label1: labelvalue1\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Consent Store Iam\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst my_consent = new gcp.healthcare.ConsentStore(\"my-consent\", {dataset: dataset.id});\nconst test_account = new gcp.serviceaccount.Account(\"test-account\", {\n accountId: \"my-account\",\n displayName: \"Test Service Account\",\n});\nconst test_iam = new gcp.healthcare.ConsentStoreIamMember(\"test-iam\", {\n dataset: dataset.id,\n consentStoreId: my_consent.name,\n role: \"roles/editor\",\n member: pulumi.interpolate`serviceAccount:${test_account.email}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\nmy_consent = gcp.healthcare.ConsentStore(\"my-consent\", dataset=dataset.id)\ntest_account = gcp.service_account.Account(\"test-account\",\n account_id=\"my-account\",\n display_name=\"Test Service Account\")\ntest_iam = gcp.healthcare.ConsentStoreIamMember(\"test-iam\",\n dataset=dataset.id,\n consent_store_id=my_consent.name,\n role=\"roles/editor\",\n member=test_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var my_consent = new Gcp.Healthcare.ConsentStore(\"my-consent\", new()\n {\n Dataset = dataset.Id,\n });\n\n var test_account = new Gcp.ServiceAccount.Account(\"test-account\", new()\n {\n AccountId = \"my-account\",\n DisplayName = \"Test Service Account\",\n });\n\n var test_iam = new Gcp.Healthcare.ConsentStoreIamMember(\"test-iam\", new()\n {\n Dataset = dataset.Id,\n ConsentStoreId = my_consent.Name,\n Role = \"roles/editor\",\n Member = test_account.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewConsentStore(ctx, \"my-consent\", \u0026healthcare.ConsentStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewAccount(ctx, \"test-account\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-account\"),\n\t\t\tDisplayName: pulumi.String(\"Test Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = healthcare.NewConsentStoreIamMember(ctx, \"test-iam\", \u0026healthcare.ConsentStoreIamMemberArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tConsentStoreId: my_consent.Name,\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t\tMember: test_account.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\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.ConsentStore;\nimport com.pulumi.gcp.healthcare.ConsentStoreArgs;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamMember;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var my_consent = new ConsentStore(\"my-consent\", ConsentStoreArgs.builder() \n .dataset(dataset.id())\n .build());\n\n var test_account = new Account(\"test-account\", AccountArgs.builder() \n .accountId(\"my-account\")\n .displayName(\"Test Service Account\")\n .build());\n\n var test_iam = new ConsentStoreIamMember(\"test-iam\", ConsentStoreIamMemberArgs.builder() \n .dataset(dataset.id())\n .consentStoreId(my_consent.name())\n .role(\"roles/editor\")\n .member(test_account.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n my-consent:\n type: gcp:healthcare:ConsentStore\n properties:\n dataset: ${dataset.id}\n test-account:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-account\n displayName: Test Service Account\n test-iam:\n type: gcp:healthcare:ConsentStoreIamMember\n properties:\n dataset: ${dataset.id}\n consentStoreId: ${[\"my-consent\"].name}\n role: roles/editor\n member: serviceAccount:${[\"test-account\"].email}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nConsentStore can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:healthcare/consentStore:ConsentStore default {{dataset}}/consentStores/{{name}}\n```\n\n ", + "description": "The Consent Management API is a tool for tracking user consents and the documentation associated with the consents.\n\n\nTo get more information about ConsentStore, see:\n\n* [API documentation](https://cloud.google.com/healthcare/docs/reference/rest/v1/projects.locations.datasets.consentStores)\n* How-to Guides\n * [Creating a Consent store](https://cloud.google.com/healthcare/docs/how-tos/consent)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Healthcare Consent Store Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst my_consent = new gcp.healthcare.ConsentStore(\"my-consent\", {dataset: dataset.id});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\nmy_consent = gcp.healthcare.ConsentStore(\"my-consent\", dataset=dataset.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var my_consent = new Gcp.Healthcare.ConsentStore(\"my-consent\", new()\n {\n Dataset = dataset.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewConsentStore(ctx, \"my-consent\", \u0026healthcare.ConsentStoreArgs{\n\t\t\tDataset: dataset.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.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.ConsentStore;\nimport com.pulumi.gcp.healthcare.ConsentStoreArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var my_consent = new ConsentStore(\"my-consent\", ConsentStoreArgs.builder() \n .dataset(dataset.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n my-consent:\n type: gcp:healthcare:ConsentStore\n properties:\n dataset: ${dataset.id}\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Consent Store Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst my_consent = new gcp.healthcare.ConsentStore(\"my-consent\", {\n dataset: dataset.id,\n enableConsentCreateOnUpdate: true,\n defaultConsentTtl: \"90000s\",\n labels: {\n label1: \"labelvalue1\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\nmy_consent = gcp.healthcare.ConsentStore(\"my-consent\",\n dataset=dataset.id,\n enable_consent_create_on_update=True,\n default_consent_ttl=\"90000s\",\n labels={\n \"label1\": \"labelvalue1\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var my_consent = new Gcp.Healthcare.ConsentStore(\"my-consent\", new()\n {\n Dataset = dataset.Id,\n EnableConsentCreateOnUpdate = true,\n DefaultConsentTtl = \"90000s\",\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewConsentStore(ctx, \"my-consent\", \u0026healthcare.ConsentStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tEnableConsentCreateOnUpdate: pulumi.Bool(true),\n\t\t\tDefaultConsentTtl: pulumi.String(\"90000s\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.ConsentStore;\nimport com.pulumi.gcp.healthcare.ConsentStoreArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var my_consent = new ConsentStore(\"my-consent\", ConsentStoreArgs.builder() \n .dataset(dataset.id())\n .enableConsentCreateOnUpdate(true)\n .defaultConsentTtl(\"90000s\")\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n my-consent:\n type: gcp:healthcare:ConsentStore\n properties:\n dataset: ${dataset.id}\n enableConsentCreateOnUpdate: true\n defaultConsentTtl: 90000s\n labels:\n label1: labelvalue1\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Consent Store Iam\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst my_consent = new gcp.healthcare.ConsentStore(\"my-consent\", {dataset: dataset.id});\nconst test_account = new gcp.serviceaccount.Account(\"test-account\", {\n accountId: \"my-account\",\n displayName: \"Test Service Account\",\n});\nconst test_iam = new gcp.healthcare.ConsentStoreIamMember(\"test-iam\", {\n dataset: dataset.id,\n consentStoreId: my_consent.name,\n role: \"roles/editor\",\n member: pulumi.interpolate`serviceAccount:${test_account.email}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\nmy_consent = gcp.healthcare.ConsentStore(\"my-consent\", dataset=dataset.id)\ntest_account = gcp.service_account.Account(\"test-account\",\n account_id=\"my-account\",\n display_name=\"Test Service Account\")\ntest_iam = gcp.healthcare.ConsentStoreIamMember(\"test-iam\",\n dataset=dataset.id,\n consent_store_id=my_consent.name,\n role=\"roles/editor\",\n member=test_account.email.apply(lambda email: f\"serviceAccount:{email}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var my_consent = new Gcp.Healthcare.ConsentStore(\"my-consent\", new()\n {\n Dataset = dataset.Id,\n });\n\n var test_account = new Gcp.ServiceAccount.Account(\"test-account\", new()\n {\n AccountId = \"my-account\",\n DisplayName = \"Test Service Account\",\n });\n\n var test_iam = new Gcp.Healthcare.ConsentStoreIamMember(\"test-iam\", new()\n {\n Dataset = dataset.Id,\n ConsentStoreId = my_consent.Name,\n Role = \"roles/editor\",\n Member = test_account.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewConsentStore(ctx, \"my-consent\", \u0026healthcare.ConsentStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewAccount(ctx, \"test-account\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-account\"),\n\t\t\tDisplayName: pulumi.String(\"Test Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = healthcare.NewConsentStoreIamMember(ctx, \"test-iam\", \u0026healthcare.ConsentStoreIamMemberArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tConsentStoreId: my_consent.Name,\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t\tMember: test_account.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\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.ConsentStore;\nimport com.pulumi.gcp.healthcare.ConsentStoreArgs;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamMember;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var my_consent = new ConsentStore(\"my-consent\", ConsentStoreArgs.builder() \n .dataset(dataset.id())\n .build());\n\n var test_account = new Account(\"test-account\", AccountArgs.builder() \n .accountId(\"my-account\")\n .displayName(\"Test Service Account\")\n .build());\n\n var test_iam = new ConsentStoreIamMember(\"test-iam\", ConsentStoreIamMemberArgs.builder() \n .dataset(dataset.id())\n .consentStoreId(my_consent.name())\n .role(\"roles/editor\")\n .member(test_account.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n my-consent:\n type: gcp:healthcare:ConsentStore\n properties:\n dataset: ${dataset.id}\n test-account:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-account\n displayName: Test Service Account\n test-iam:\n type: gcp:healthcare:ConsentStoreIamMember\n properties:\n dataset: ${dataset.id}\n consentStoreId: ${[\"my-consent\"].name}\n role: roles/editor\n member: serviceAccount:${[\"test-account\"].email}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nConsentStore can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:healthcare/consentStore:ConsentStore default {{dataset}}/consentStores/{{name}}\n```\n\n ", "properties": { "dataset": { "type": "string", @@ -165531,7 +166978,7 @@ } }, "gcp:healthcare/consentStoreIamBinding:ConsentStoreIamBinding": { - "description": "Three different resources help you manage your IAM policy for Cloud Healthcare ConsentStore. Each of these resources serves a different use case:\n\n* `gcp.healthcare.ConsentStoreIamPolicy`: Authoritative. Sets the IAM policy for the consentstore and replaces any existing policy already attached.\n* `gcp.healthcare.ConsentStoreIamBinding`: 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 consentstore are preserved.\n* `gcp.healthcare.ConsentStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the consentstore are preserved.\n\n\u003e **Note:** `gcp.healthcare.ConsentStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.ConsentStoreIamBinding` and `gcp.healthcare.ConsentStoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.ConsentStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.ConsentStoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_consent\\_store\\_iam\\_policy\n\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.healthcare.ConsentStoreIamPolicy(\"policy\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.healthcare.ConsentStoreIamPolicy(\"policy\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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.Healthcare.ConsentStoreIamPolicy(\"policy\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 = healthcare.NewConsentStoreIamPolicy(ctx, \"policy\", \u0026healthcare.ConsentStoreIamPolicyArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamPolicy;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ConsentStoreIamPolicy(\"policy\", ConsentStoreIamPolicyArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:healthcare:ConsentStoreIamPolicy\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].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\n## google\\_healthcare\\_consent\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.healthcare.ConsentStoreIamBinding(\"binding\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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.healthcare.ConsentStoreIamBinding(\"binding\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.Healthcare.ConsentStoreIamBinding(\"binding\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewConsentStoreIamBinding(ctx, \"binding\", \u0026healthcare.ConsentStoreIamBindingArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamBinding;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ConsentStoreIamBinding(\"binding\", ConsentStoreIamBindingArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().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:healthcare:ConsentStoreIamBinding\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_consent\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.healthcare.ConsentStoreIamMember(\"member\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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.healthcare.ConsentStoreIamMember(\"member\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.Healthcare.ConsentStoreIamMember(\"member\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewConsentStoreIamMember(ctx, \"member\", \u0026healthcare.ConsentStoreIamMemberArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamMember;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ConsentStoreIamMember(\"member\", ConsentStoreIamMemberArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().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:healthcare:ConsentStoreIamMember\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* {{dataset}}/consentStores/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Cloud Healthcare consentstore IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamBinding:ConsentStoreIamBinding editor \"{{dataset}}/consentStores/{{consent_store}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamBinding:ConsentStoreIamBinding editor \"{{dataset}}/consentStores/{{consent_store}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamBinding:ConsentStoreIamBinding editor {{dataset}}/consentStores/{{consent_store}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "Three different resources help you manage your IAM policy for Cloud Healthcare ConsentStore. Each of these resources serves a different use case:\n\n* `gcp.healthcare.ConsentStoreIamPolicy`: Authoritative. Sets the IAM policy for the consentstore and replaces any existing policy already attached.\n* `gcp.healthcare.ConsentStoreIamBinding`: 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 consentstore are preserved.\n* `gcp.healthcare.ConsentStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the consentstore are preserved.\n\n\u003e **Note:** `gcp.healthcare.ConsentStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.ConsentStoreIamBinding` and `gcp.healthcare.ConsentStoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.ConsentStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.ConsentStoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n\n## google\\_healthcare\\_consent\\_store\\_iam\\_policy\n\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.healthcare.ConsentStoreIamPolicy(\"policy\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.healthcare.ConsentStoreIamPolicy(\"policy\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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.Healthcare.ConsentStoreIamPolicy(\"policy\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 = healthcare.NewConsentStoreIamPolicy(ctx, \"policy\", \u0026healthcare.ConsentStoreIamPolicyArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamPolicy;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ConsentStoreIamPolicy(\"policy\", ConsentStoreIamPolicyArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:healthcare:ConsentStoreIamPolicy\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].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\n## google\\_healthcare\\_consent\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.healthcare.ConsentStoreIamBinding(\"binding\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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.healthcare.ConsentStoreIamBinding(\"binding\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.Healthcare.ConsentStoreIamBinding(\"binding\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewConsentStoreIamBinding(ctx, \"binding\", \u0026healthcare.ConsentStoreIamBindingArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamBinding;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ConsentStoreIamBinding(\"binding\", ConsentStoreIamBindingArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().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:healthcare:ConsentStoreIamBinding\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_consent\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.healthcare.ConsentStoreIamMember(\"member\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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.healthcare.ConsentStoreIamMember(\"member\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.Healthcare.ConsentStoreIamMember(\"member\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewConsentStoreIamMember(ctx, \"member\", \u0026healthcare.ConsentStoreIamMemberArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamMember;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ConsentStoreIamMember(\"member\", ConsentStoreIamMemberArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().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:healthcare:ConsentStoreIamMember\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* {{dataset}}/consentStores/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Cloud Healthcare consentstore IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamBinding:ConsentStoreIamBinding editor \"{{dataset}}/consentStores/{{consent_store}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamBinding:ConsentStoreIamBinding editor \"{{dataset}}/consentStores/{{consent_store}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamBinding:ConsentStoreIamBinding editor {{dataset}}/consentStores/{{consent_store}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:healthcare/ConsentStoreIamBindingCondition:ConsentStoreIamBindingCondition" @@ -165636,7 +167083,7 @@ } }, "gcp:healthcare/consentStoreIamMember:ConsentStoreIamMember": { - "description": "Three different resources help you manage your IAM policy for Cloud Healthcare ConsentStore. Each of these resources serves a different use case:\n\n* `gcp.healthcare.ConsentStoreIamPolicy`: Authoritative. Sets the IAM policy for the consentstore and replaces any existing policy already attached.\n* `gcp.healthcare.ConsentStoreIamBinding`: 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 consentstore are preserved.\n* `gcp.healthcare.ConsentStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the consentstore are preserved.\n\n\u003e **Note:** `gcp.healthcare.ConsentStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.ConsentStoreIamBinding` and `gcp.healthcare.ConsentStoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.ConsentStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.ConsentStoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_consent\\_store\\_iam\\_policy\n\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.healthcare.ConsentStoreIamPolicy(\"policy\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.healthcare.ConsentStoreIamPolicy(\"policy\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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.Healthcare.ConsentStoreIamPolicy(\"policy\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 = healthcare.NewConsentStoreIamPolicy(ctx, \"policy\", \u0026healthcare.ConsentStoreIamPolicyArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamPolicy;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ConsentStoreIamPolicy(\"policy\", ConsentStoreIamPolicyArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:healthcare:ConsentStoreIamPolicy\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].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\n## google\\_healthcare\\_consent\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.healthcare.ConsentStoreIamBinding(\"binding\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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.healthcare.ConsentStoreIamBinding(\"binding\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.Healthcare.ConsentStoreIamBinding(\"binding\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewConsentStoreIamBinding(ctx, \"binding\", \u0026healthcare.ConsentStoreIamBindingArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamBinding;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ConsentStoreIamBinding(\"binding\", ConsentStoreIamBindingArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().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:healthcare:ConsentStoreIamBinding\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_consent\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.healthcare.ConsentStoreIamMember(\"member\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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.healthcare.ConsentStoreIamMember(\"member\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.Healthcare.ConsentStoreIamMember(\"member\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewConsentStoreIamMember(ctx, \"member\", \u0026healthcare.ConsentStoreIamMemberArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamMember;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ConsentStoreIamMember(\"member\", ConsentStoreIamMemberArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().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:healthcare:ConsentStoreIamMember\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* {{dataset}}/consentStores/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Cloud Healthcare consentstore IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamMember:ConsentStoreIamMember editor \"{{dataset}}/consentStores/{{consent_store}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamMember:ConsentStoreIamMember editor \"{{dataset}}/consentStores/{{consent_store}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamMember:ConsentStoreIamMember editor {{dataset}}/consentStores/{{consent_store}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "Three different resources help you manage your IAM policy for Cloud Healthcare ConsentStore. Each of these resources serves a different use case:\n\n* `gcp.healthcare.ConsentStoreIamPolicy`: Authoritative. Sets the IAM policy for the consentstore and replaces any existing policy already attached.\n* `gcp.healthcare.ConsentStoreIamBinding`: 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 consentstore are preserved.\n* `gcp.healthcare.ConsentStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the consentstore are preserved.\n\n\u003e **Note:** `gcp.healthcare.ConsentStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.ConsentStoreIamBinding` and `gcp.healthcare.ConsentStoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.ConsentStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.ConsentStoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n\n## google\\_healthcare\\_consent\\_store\\_iam\\_policy\n\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.healthcare.ConsentStoreIamPolicy(\"policy\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.healthcare.ConsentStoreIamPolicy(\"policy\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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.Healthcare.ConsentStoreIamPolicy(\"policy\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 = healthcare.NewConsentStoreIamPolicy(ctx, \"policy\", \u0026healthcare.ConsentStoreIamPolicyArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamPolicy;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ConsentStoreIamPolicy(\"policy\", ConsentStoreIamPolicyArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:healthcare:ConsentStoreIamPolicy\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].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\n## google\\_healthcare\\_consent\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.healthcare.ConsentStoreIamBinding(\"binding\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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.healthcare.ConsentStoreIamBinding(\"binding\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.Healthcare.ConsentStoreIamBinding(\"binding\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewConsentStoreIamBinding(ctx, \"binding\", \u0026healthcare.ConsentStoreIamBindingArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamBinding;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ConsentStoreIamBinding(\"binding\", ConsentStoreIamBindingArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().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:healthcare:ConsentStoreIamBinding\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_consent\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.healthcare.ConsentStoreIamMember(\"member\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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.healthcare.ConsentStoreIamMember(\"member\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.Healthcare.ConsentStoreIamMember(\"member\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewConsentStoreIamMember(ctx, \"member\", \u0026healthcare.ConsentStoreIamMemberArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamMember;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ConsentStoreIamMember(\"member\", ConsentStoreIamMemberArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().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:healthcare:ConsentStoreIamMember\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* {{dataset}}/consentStores/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Cloud Healthcare consentstore IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamMember:ConsentStoreIamMember editor \"{{dataset}}/consentStores/{{consent_store}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamMember:ConsentStoreIamMember editor \"{{dataset}}/consentStores/{{consent_store}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamMember:ConsentStoreIamMember editor {{dataset}}/consentStores/{{consent_store}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:healthcare/ConsentStoreIamMemberCondition:ConsentStoreIamMemberCondition" @@ -165734,7 +167181,7 @@ } }, "gcp:healthcare/consentStoreIamPolicy:ConsentStoreIamPolicy": { - "description": "Three different resources help you manage your IAM policy for Cloud Healthcare ConsentStore. Each of these resources serves a different use case:\n\n* `gcp.healthcare.ConsentStoreIamPolicy`: Authoritative. Sets the IAM policy for the consentstore and replaces any existing policy already attached.\n* `gcp.healthcare.ConsentStoreIamBinding`: 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 consentstore are preserved.\n* `gcp.healthcare.ConsentStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the consentstore are preserved.\n\n\u003e **Note:** `gcp.healthcare.ConsentStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.ConsentStoreIamBinding` and `gcp.healthcare.ConsentStoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.ConsentStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.ConsentStoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_consent\\_store\\_iam\\_policy\n\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.healthcare.ConsentStoreIamPolicy(\"policy\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.healthcare.ConsentStoreIamPolicy(\"policy\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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.Healthcare.ConsentStoreIamPolicy(\"policy\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 = healthcare.NewConsentStoreIamPolicy(ctx, \"policy\", \u0026healthcare.ConsentStoreIamPolicyArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamPolicy;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ConsentStoreIamPolicy(\"policy\", ConsentStoreIamPolicyArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:healthcare:ConsentStoreIamPolicy\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].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\n## google\\_healthcare\\_consent\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.healthcare.ConsentStoreIamBinding(\"binding\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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.healthcare.ConsentStoreIamBinding(\"binding\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.Healthcare.ConsentStoreIamBinding(\"binding\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewConsentStoreIamBinding(ctx, \"binding\", \u0026healthcare.ConsentStoreIamBindingArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamBinding;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ConsentStoreIamBinding(\"binding\", ConsentStoreIamBindingArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().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:healthcare:ConsentStoreIamBinding\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_consent\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.healthcare.ConsentStoreIamMember(\"member\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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.healthcare.ConsentStoreIamMember(\"member\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.Healthcare.ConsentStoreIamMember(\"member\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewConsentStoreIamMember(ctx, \"member\", \u0026healthcare.ConsentStoreIamMemberArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamMember;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ConsentStoreIamMember(\"member\", ConsentStoreIamMemberArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().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:healthcare:ConsentStoreIamMember\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* {{dataset}}/consentStores/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Cloud Healthcare consentstore IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamPolicy:ConsentStoreIamPolicy editor \"{{dataset}}/consentStores/{{consent_store}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamPolicy:ConsentStoreIamPolicy editor \"{{dataset}}/consentStores/{{consent_store}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamPolicy:ConsentStoreIamPolicy editor {{dataset}}/consentStores/{{consent_store}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "Three different resources help you manage your IAM policy for Cloud Healthcare ConsentStore. Each of these resources serves a different use case:\n\n* `gcp.healthcare.ConsentStoreIamPolicy`: Authoritative. Sets the IAM policy for the consentstore and replaces any existing policy already attached.\n* `gcp.healthcare.ConsentStoreIamBinding`: 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 consentstore are preserved.\n* `gcp.healthcare.ConsentStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the consentstore are preserved.\n\n\u003e **Note:** `gcp.healthcare.ConsentStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.ConsentStoreIamBinding` and `gcp.healthcare.ConsentStoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.ConsentStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.ConsentStoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n\n## google\\_healthcare\\_consent\\_store\\_iam\\_policy\n\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.healthcare.ConsentStoreIamPolicy(\"policy\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.healthcare.ConsentStoreIamPolicy(\"policy\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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.Healthcare.ConsentStoreIamPolicy(\"policy\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 = healthcare.NewConsentStoreIamPolicy(ctx, \"policy\", \u0026healthcare.ConsentStoreIamPolicyArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamPolicy;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 ConsentStoreIamPolicy(\"policy\", ConsentStoreIamPolicyArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:healthcare:ConsentStoreIamPolicy\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].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\n## google\\_healthcare\\_consent\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.healthcare.ConsentStoreIamBinding(\"binding\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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.healthcare.ConsentStoreIamBinding(\"binding\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.Healthcare.ConsentStoreIamBinding(\"binding\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewConsentStoreIamBinding(ctx, \"binding\", \u0026healthcare.ConsentStoreIamBindingArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamBinding;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ConsentStoreIamBinding(\"binding\", ConsentStoreIamBindingArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().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:healthcare:ConsentStoreIamBinding\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].name}\n role: roles/viewer\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_consent\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.healthcare.ConsentStoreIamMember(\"member\", {\n dataset: google_healthcare_consent_store[\"my-consent\"].dataset,\n consentStoreId: google_healthcare_consent_store[\"my-consent\"].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.healthcare.ConsentStoreIamMember(\"member\",\n dataset=google_healthcare_consent_store[\"my-consent\"][\"dataset\"],\n consent_store_id=google_healthcare_consent_store[\"my-consent\"][\"name\"],\n role=\"roles/viewer\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.Healthcare.ConsentStoreIamMember(\"member\", new()\n {\n Dataset = google_healthcare_consent_store.My_consent.Dataset,\n ConsentStoreId = google_healthcare_consent_store.My_consent.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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewConsentStoreIamMember(ctx, \"member\", \u0026healthcare.ConsentStoreIamMemberArgs{\n\t\t\tDataset: pulumi.Any(google_healthcare_consent_store.MyConsent.Dataset),\n\t\t\tConsentStoreId: pulumi.Any(google_healthcare_consent_store.MyConsent.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.healthcare.ConsentStoreIamMember;\nimport com.pulumi.gcp.healthcare.ConsentStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ConsentStoreIamMember(\"member\", ConsentStoreIamMemberArgs.builder() \n .dataset(google_healthcare_consent_store.my-consent().dataset())\n .consentStoreId(google_healthcare_consent_store.my-consent().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:healthcare:ConsentStoreIamMember\n properties:\n dataset: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].dataset}\n consentStoreId: ${google_healthcare_consent_store\"my-consent\"[%!s(MISSING)].name}\n role: roles/viewer\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* {{dataset}}/consentStores/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Cloud Healthcare consentstore IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamPolicy:ConsentStoreIamPolicy editor \"{{dataset}}/consentStores/{{consent_store}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamPolicy:ConsentStoreIamPolicy editor \"{{dataset}}/consentStores/{{consent_store}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/consentStoreIamPolicy:ConsentStoreIamPolicy editor {{dataset}}/consentStores/{{consent_store}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "consentStoreId": { "type": "string", @@ -165806,7 +167253,7 @@ } }, "gcp:healthcare/dataset:Dataset": { - "description": "A Healthcare `Dataset` is a toplevel logical grouping of `dicomStores`, `fhirStores` and `hl7V2Stores`.\n\nTo get more information about Dataset, see:\n\n* [API documentation](https://cloud.google.com/healthcare/docs/reference/rest/v1/projects.locations.datasets)\n* How-to Guides\n * [Creating a dataset](https://cloud.google.com/healthcare/docs/how-tos/datasets)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Healthcare Dataset Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.healthcare.Dataset(\"default\", {\n location: \"us-central1\",\n timeZone: \"UTC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.healthcare.Dataset(\"default\",\n location=\"us-central1\",\n time_zone=\"UTC\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Healthcare.Dataset(\"default\", new()\n {\n Location = \"us-central1\",\n TimeZone = \"UTC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDataset(ctx, \"default\", \u0026healthcare.DatasetArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTimeZone: pulumi.String(\"UTC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Dataset(\"default\", DatasetArgs.builder() \n .location(\"us-central1\")\n .timeZone(\"UTC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n timeZone: UTC\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDataset can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:healthcare/dataset:Dataset default projects/{{project}}/locations/{{location}}/datasets/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:healthcare/dataset:Dataset default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:healthcare/dataset:Dataset default {{location}}/{{name}}\n```\n\n ", + "description": "A Healthcare `Dataset` is a toplevel logical grouping of `dicomStores`, `fhirStores` and `hl7V2Stores`.\n\n\nTo get more information about Dataset, see:\n\n* [API documentation](https://cloud.google.com/healthcare/docs/reference/rest/v1/projects.locations.datasets)\n* How-to Guides\n * [Creating a dataset](https://cloud.google.com/healthcare/docs/how-tos/datasets)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Healthcare Dataset Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.healthcare.Dataset(\"default\", {\n location: \"us-central1\",\n timeZone: \"UTC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.healthcare.Dataset(\"default\",\n location=\"us-central1\",\n time_zone=\"UTC\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Healthcare.Dataset(\"default\", new()\n {\n Location = \"us-central1\",\n TimeZone = \"UTC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDataset(ctx, \"default\", \u0026healthcare.DatasetArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tTimeZone: pulumi.String(\"UTC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Dataset(\"default\", DatasetArgs.builder() \n .location(\"us-central1\")\n .timeZone(\"UTC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n timeZone: UTC\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDataset can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:healthcare/dataset:Dataset default projects/{{project}}/locations/{{location}}/datasets/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:healthcare/dataset:Dataset default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:healthcare/dataset:Dataset default {{location}}/{{name}}\n```\n\n ", "properties": { "location": { "type": "string", @@ -165891,7 +167338,7 @@ } }, "gcp:healthcare/datasetIamBinding:DatasetIamBinding": { - "description": "Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case:\n\n* `gcp.healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached.\n* `gcp.healthcare.DatasetIamBinding`: 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 dataset are preserved.\n* `gcp.healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved.\n\n\u003e **Note:** `gcp.healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DatasetIamBinding` and `gcp.healthcare.DatasetIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.DatasetIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_dataset\\_iam\\_policy\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst dataset = new gcp.healthcare.DatasetIamPolicy(\"dataset\", {\n datasetId: \"your-dataset-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\ndataset = gcp.healthcare.DatasetIamPolicy(\"dataset\",\n dataset_id=\"your-dataset-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var dataset = new Gcp.Healthcare.DatasetIamPolicy(\"dataset\", new()\n {\n DatasetId = \"your-dataset-id\",\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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = healthcare.NewDatasetIamPolicy(ctx, \"dataset\", \u0026healthcare.DatasetIamPolicyArgs{\n\t\t\tDatasetId: pulumi.String(\"your-dataset-id\"),\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.healthcare.DatasetIamPolicy;\nimport com.pulumi.gcp.healthcare.DatasetIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var dataset = new DatasetIamPolicy(\"dataset\", DatasetIamPolicyArgs.builder() \n .datasetId(\"your-dataset-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:DatasetIamPolicy\n properties:\n datasetId: your-dataset-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_dataset\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.DatasetIamBinding(\"dataset\", {\n datasetId: \"your-dataset-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.DatasetIamBinding(\"dataset\",\n dataset_id=\"your-dataset-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.DatasetIamBinding(\"dataset\", new()\n {\n DatasetId = \"your-dataset-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDatasetIamBinding(ctx, \"dataset\", \u0026healthcare.DatasetIamBindingArgs{\n\t\t\tDatasetId: pulumi.String(\"your-dataset-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.DatasetIamBinding;\nimport com.pulumi.gcp.healthcare.DatasetIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataset = new DatasetIamBinding(\"dataset\", DatasetIamBindingArgs.builder() \n .datasetId(\"your-dataset-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:DatasetIamBinding\n properties:\n datasetId: your-dataset-id\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_healthcare\\_dataset\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.DatasetIamMember(\"dataset\", {\n datasetId: \"your-dataset-id\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.DatasetIamMember(\"dataset\",\n dataset_id=\"your-dataset-id\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.DatasetIamMember(\"dataset\", new()\n {\n DatasetId = \"your-dataset-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDatasetIamMember(ctx, \"dataset\", \u0026healthcare.DatasetIamMemberArgs{\n\t\t\tDatasetId: pulumi.String(\"your-dataset-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.DatasetIamMember;\nimport com.pulumi.gcp.healthcare.DatasetIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataset = new DatasetIamMember(\"dataset\", DatasetIamMemberArgs.builder() \n .datasetId(\"your-dataset-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:DatasetIamMember\n properties:\n datasetId: your-dataset-id\n member: user:jane@example.com\n role: roles/editor\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `dataset_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamBinding:DatasetIamBinding dataset_iam \"your-project-id/location-name/dataset-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `dataset_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamBinding:DatasetIamBinding dataset_iam \"your-project-id/location-name/dataset-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `dataset_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamBinding:DatasetIamBinding dataset_iam your-project-id/location-name/dataset-name\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `dataset_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamBinding:DatasetIamBinding dataset_iam \"your-project-id/location-name/dataset-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `dataset_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamBinding:DatasetIamBinding dataset_iam \"your-project-id/location-name/dataset-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `dataset_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamBinding:DatasetIamBinding dataset_iam your-project-id/location-name/dataset-name\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:healthcare/DatasetIamBindingCondition:DatasetIamBindingCondition" @@ -165980,7 +167427,7 @@ } }, "gcp:healthcare/datasetIamMember:DatasetIamMember": { - "description": "Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case:\n\n* `gcp.healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached.\n* `gcp.healthcare.DatasetIamBinding`: 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 dataset are preserved.\n* `gcp.healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved.\n\n\u003e **Note:** `gcp.healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DatasetIamBinding` and `gcp.healthcare.DatasetIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.DatasetIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_dataset\\_iam\\_policy\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst dataset = new gcp.healthcare.DatasetIamPolicy(\"dataset\", {\n datasetId: \"your-dataset-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\ndataset = gcp.healthcare.DatasetIamPolicy(\"dataset\",\n dataset_id=\"your-dataset-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var dataset = new Gcp.Healthcare.DatasetIamPolicy(\"dataset\", new()\n {\n DatasetId = \"your-dataset-id\",\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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = healthcare.NewDatasetIamPolicy(ctx, \"dataset\", \u0026healthcare.DatasetIamPolicyArgs{\n\t\t\tDatasetId: pulumi.String(\"your-dataset-id\"),\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.healthcare.DatasetIamPolicy;\nimport com.pulumi.gcp.healthcare.DatasetIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var dataset = new DatasetIamPolicy(\"dataset\", DatasetIamPolicyArgs.builder() \n .datasetId(\"your-dataset-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:DatasetIamPolicy\n properties:\n datasetId: your-dataset-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_dataset\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.DatasetIamBinding(\"dataset\", {\n datasetId: \"your-dataset-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.DatasetIamBinding(\"dataset\",\n dataset_id=\"your-dataset-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.DatasetIamBinding(\"dataset\", new()\n {\n DatasetId = \"your-dataset-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDatasetIamBinding(ctx, \"dataset\", \u0026healthcare.DatasetIamBindingArgs{\n\t\t\tDatasetId: pulumi.String(\"your-dataset-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.DatasetIamBinding;\nimport com.pulumi.gcp.healthcare.DatasetIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataset = new DatasetIamBinding(\"dataset\", DatasetIamBindingArgs.builder() \n .datasetId(\"your-dataset-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:DatasetIamBinding\n properties:\n datasetId: your-dataset-id\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_healthcare\\_dataset\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.DatasetIamMember(\"dataset\", {\n datasetId: \"your-dataset-id\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.DatasetIamMember(\"dataset\",\n dataset_id=\"your-dataset-id\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.DatasetIamMember(\"dataset\", new()\n {\n DatasetId = \"your-dataset-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDatasetIamMember(ctx, \"dataset\", \u0026healthcare.DatasetIamMemberArgs{\n\t\t\tDatasetId: pulumi.String(\"your-dataset-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.DatasetIamMember;\nimport com.pulumi.gcp.healthcare.DatasetIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataset = new DatasetIamMember(\"dataset\", DatasetIamMemberArgs.builder() \n .datasetId(\"your-dataset-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:DatasetIamMember\n properties:\n datasetId: your-dataset-id\n member: user:jane@example.com\n role: roles/editor\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `dataset_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamMember:DatasetIamMember dataset_iam \"your-project-id/location-name/dataset-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `dataset_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamMember:DatasetIamMember dataset_iam \"your-project-id/location-name/dataset-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `dataset_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamMember:DatasetIamMember dataset_iam your-project-id/location-name/dataset-name\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `dataset_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamMember:DatasetIamMember dataset_iam \"your-project-id/location-name/dataset-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `dataset_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamMember:DatasetIamMember dataset_iam \"your-project-id/location-name/dataset-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `dataset_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamMember:DatasetIamMember dataset_iam your-project-id/location-name/dataset-name\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:healthcare/DatasetIamMemberCondition:DatasetIamMemberCondition" @@ -166062,7 +167509,7 @@ } }, "gcp:healthcare/datasetIamPolicy:DatasetIamPolicy": { - "description": "Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case:\n\n* `gcp.healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached.\n* `gcp.healthcare.DatasetIamBinding`: 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 dataset are preserved.\n* `gcp.healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved.\n\n\u003e **Note:** `gcp.healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DatasetIamBinding` and `gcp.healthcare.DatasetIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.DatasetIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_dataset\\_iam\\_policy\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst dataset = new gcp.healthcare.DatasetIamPolicy(\"dataset\", {\n datasetId: \"your-dataset-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\ndataset = gcp.healthcare.DatasetIamPolicy(\"dataset\",\n dataset_id=\"your-dataset-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var dataset = new Gcp.Healthcare.DatasetIamPolicy(\"dataset\", new()\n {\n DatasetId = \"your-dataset-id\",\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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = healthcare.NewDatasetIamPolicy(ctx, \"dataset\", \u0026healthcare.DatasetIamPolicyArgs{\n\t\t\tDatasetId: pulumi.String(\"your-dataset-id\"),\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.healthcare.DatasetIamPolicy;\nimport com.pulumi.gcp.healthcare.DatasetIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var dataset = new DatasetIamPolicy(\"dataset\", DatasetIamPolicyArgs.builder() \n .datasetId(\"your-dataset-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:DatasetIamPolicy\n properties:\n datasetId: your-dataset-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_dataset\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.DatasetIamBinding(\"dataset\", {\n datasetId: \"your-dataset-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.DatasetIamBinding(\"dataset\",\n dataset_id=\"your-dataset-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.DatasetIamBinding(\"dataset\", new()\n {\n DatasetId = \"your-dataset-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDatasetIamBinding(ctx, \"dataset\", \u0026healthcare.DatasetIamBindingArgs{\n\t\t\tDatasetId: pulumi.String(\"your-dataset-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.DatasetIamBinding;\nimport com.pulumi.gcp.healthcare.DatasetIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataset = new DatasetIamBinding(\"dataset\", DatasetIamBindingArgs.builder() \n .datasetId(\"your-dataset-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:DatasetIamBinding\n properties:\n datasetId: your-dataset-id\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_healthcare\\_dataset\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.DatasetIamMember(\"dataset\", {\n datasetId: \"your-dataset-id\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.DatasetIamMember(\"dataset\",\n dataset_id=\"your-dataset-id\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.DatasetIamMember(\"dataset\", new()\n {\n DatasetId = \"your-dataset-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDatasetIamMember(ctx, \"dataset\", \u0026healthcare.DatasetIamMemberArgs{\n\t\t\tDatasetId: pulumi.String(\"your-dataset-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.DatasetIamMember;\nimport com.pulumi.gcp.healthcare.DatasetIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataset = new DatasetIamMember(\"dataset\", DatasetIamMemberArgs.builder() \n .datasetId(\"your-dataset-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dataset:\n type: gcp:healthcare:DatasetIamMember\n properties:\n datasetId: your-dataset-id\n member: user:jane@example.com\n role: roles/editor\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `dataset_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamPolicy:DatasetIamPolicy dataset_iam \"your-project-id/location-name/dataset-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `dataset_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamPolicy:DatasetIamPolicy dataset_iam \"your-project-id/location-name/dataset-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `dataset_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamPolicy:DatasetIamPolicy dataset_iam your-project-id/location-name/dataset-name\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `dataset_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamPolicy:DatasetIamPolicy dataset_iam \"your-project-id/location-name/dataset-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `dataset_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamPolicy:DatasetIamPolicy dataset_iam \"your-project-id/location-name/dataset-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `dataset_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/datasetIamPolicy:DatasetIamPolicy dataset_iam your-project-id/location-name/dataset-name\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "datasetId": { "type": "string", @@ -166118,7 +167565,7 @@ } }, "gcp:healthcare/dicomStore:DicomStore": { - "description": "A DicomStore is a datastore inside a Healthcare dataset that conforms to the DICOM\n(https://www.dicomstandard.org/about/) standard for Healthcare information exchange\n\nTo get more information about DicomStore, see:\n\n* [API documentation](https://cloud.google.com/healthcare/docs/reference/rest/v1/projects.locations.datasets.dicomStores)\n* How-to Guides\n * [Creating a DICOM store](https://cloud.google.com/healthcare/docs/how-tos/dicom)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Healthcare Dicom Store Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst _default = new gcp.healthcare.DicomStore(\"default\", {\n dataset: dataset.id,\n notificationConfig: {\n pubsubTopic: topic.id,\n },\n labels: {\n label1: \"labelvalue1\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\")\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\ndefault = gcp.healthcare.DicomStore(\"default\",\n dataset=dataset.id,\n notification_config=gcp.healthcare.DicomStoreNotificationConfigArgs(\n pubsub_topic=topic.id,\n ),\n labels={\n \"label1\": \"labelvalue1\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\");\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var @default = new Gcp.Healthcare.DicomStore(\"default\", new()\n {\n Dataset = dataset.Id,\n NotificationConfig = new Gcp.Healthcare.Inputs.DicomStoreNotificationConfigArgs\n {\n PubsubTopic = topic.Id,\n },\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\ttopic, err := pubsub.NewTopic(ctx, \"topic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewDicomStore(ctx, \"default\", \u0026healthcare.DicomStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tNotificationConfig: \u0026healthcare.DicomStoreNotificationConfigArgs{\n\t\t\t\tPubsubTopic: topic.ID(),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.DicomStore;\nimport com.pulumi.gcp.healthcare.DicomStoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.DicomStoreNotificationConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var topic = new Topic(\"topic\");\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var default_ = new DicomStore(\"default\", DicomStoreArgs.builder() \n .dataset(dataset.id())\n .notificationConfig(DicomStoreNotificationConfigArgs.builder()\n .pubsubTopic(topic.id())\n .build())\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:DicomStore\n properties:\n dataset: ${dataset.id}\n notificationConfig:\n pubsubTopic: ${topic.id}\n labels:\n label1: labelvalue1\n topic:\n type: gcp:pubsub:Topic\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Dicom Store Bq Stream\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {}, {\n provider: google_beta,\n});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"}, {\n provider: google_beta,\n});\nconst bqDataset = new gcp.bigquery.Dataset(\"bqDataset\", {\n datasetId: \"dicom_bq_ds\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n deleteContentsOnDestroy: true,\n}, {\n provider: google_beta,\n});\nconst bqTable = new gcp.bigquery.Table(\"bqTable\", {\n deletionProtection: false,\n datasetId: bqDataset.datasetId,\n tableId: \"dicom_bq_tb\",\n}, {\n provider: google_beta,\n});\nconst _default = new gcp.healthcare.DicomStore(\"default\", {\n dataset: dataset.id,\n notificationConfig: {\n pubsubTopic: topic.id,\n },\n labels: {\n label1: \"labelvalue1\",\n },\n streamConfigs: [{\n bigqueryDestination: {\n tableUri: pulumi.interpolate`bq://${bqDataset.project}.${bqDataset.datasetId}.${bqTable.tableId}`,\n },\n }],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\", opts=pulumi.ResourceOptions(provider=google_beta))\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\",\nopts=pulumi.ResourceOptions(provider=google_beta))\nbq_dataset = gcp.bigquery.Dataset(\"bqDataset\",\n dataset_id=\"dicom_bq_ds\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\",\n delete_contents_on_destroy=True,\n opts=pulumi.ResourceOptions(provider=google_beta))\nbq_table = gcp.bigquery.Table(\"bqTable\",\n deletion_protection=False,\n dataset_id=bq_dataset.dataset_id,\n table_id=\"dicom_bq_tb\",\n opts=pulumi.ResourceOptions(provider=google_beta))\ndefault = gcp.healthcare.DicomStore(\"default\",\n dataset=dataset.id,\n notification_config=gcp.healthcare.DicomStoreNotificationConfigArgs(\n pubsub_topic=topic.id,\n ),\n labels={\n \"label1\": \"labelvalue1\",\n },\n stream_configs=[gcp.healthcare.DicomStoreStreamConfigArgs(\n bigquery_destination=gcp.healthcare.DicomStoreStreamConfigBigqueryDestinationArgs(\n table_uri=pulumi.Output.all(bq_dataset.project, bq_dataset.dataset_id, bq_table.table_id).apply(lambda project, dataset_id, table_id: f\"bq://{project}.{dataset_id}.{table_id}\"),\n ),\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\", new()\n {\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var bqDataset = new Gcp.BigQuery.Dataset(\"bqDataset\", new()\n {\n DatasetId = \"dicom_bq_ds\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n DeleteContentsOnDestroy = true,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var bqTable = new Gcp.BigQuery.Table(\"bqTable\", new()\n {\n DeletionProtection = false,\n DatasetId = bqDataset.DatasetId,\n TableId = \"dicom_bq_tb\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var @default = new Gcp.Healthcare.DicomStore(\"default\", new()\n {\n Dataset = dataset.Id,\n NotificationConfig = new Gcp.Healthcare.Inputs.DicomStoreNotificationConfigArgs\n {\n PubsubTopic = topic.Id,\n },\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n StreamConfigs = new[]\n {\n new Gcp.Healthcare.Inputs.DicomStoreStreamConfigArgs\n {\n BigqueryDestination = new Gcp.Healthcare.Inputs.DicomStoreStreamConfigBigqueryDestinationArgs\n {\n TableUri = Output.Tuple(bqDataset.Project, bqDataset.DatasetId, bqTable.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 },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\ttopic, err := pubsub.NewTopic(ctx, \"topic\", nil, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqDataset, err := bigquery.NewDataset(ctx, \"bqDataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dicom_bq_ds\"),\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\tDeleteContentsOnDestroy: pulumi.Bool(true),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqTable, err := bigquery.NewTable(ctx, \"bqTable\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: bqDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"dicom_bq_tb\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = healthcare.NewDicomStore(ctx, \"default\", \u0026healthcare.DicomStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tNotificationConfig: \u0026healthcare.DicomStoreNotificationConfigArgs{\n\t\t\t\tPubsubTopic: topic.ID(),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t\tStreamConfigs: healthcare.DicomStoreStreamConfigArray{\n\t\t\t\t\u0026healthcare.DicomStoreStreamConfigArgs{\n\t\t\t\t\tBigqueryDestination: \u0026healthcare.DicomStoreStreamConfigBigqueryDestinationArgs{\n\t\t\t\t\t\tTableUri: pulumi.All(bqDataset.Project, bqDataset.DatasetId, bqTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), 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},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\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.healthcare.DicomStore;\nimport com.pulumi.gcp.healthcare.DicomStoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.DicomStoreNotificationConfigArgs;\nimport com.pulumi.gcp.healthcare.inputs.DicomStoreStreamConfigArgs;\nimport com.pulumi.gcp.healthcare.inputs.DicomStoreStreamConfigBigqueryDestinationArgs;\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 topic = new Topic(\"topic\", TopicArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var bqDataset = new Dataset(\"bqDataset\", DatasetArgs.builder() \n .datasetId(\"dicom_bq_ds\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .deleteContentsOnDestroy(true)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var bqTable = new Table(\"bqTable\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(bqDataset.datasetId())\n .tableId(\"dicom_bq_tb\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var default_ = new DicomStore(\"default\", DicomStoreArgs.builder() \n .dataset(dataset.id())\n .notificationConfig(DicomStoreNotificationConfigArgs.builder()\n .pubsubTopic(topic.id())\n .build())\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .streamConfigs(DicomStoreStreamConfigArgs.builder()\n .bigqueryDestination(DicomStoreStreamConfigBigqueryDestinationArgs.builder()\n .tableUri(Output.tuple(bqDataset.project(), bqDataset.datasetId(), bqTable.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 .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:DicomStore\n properties:\n dataset: ${dataset.id}\n notificationConfig:\n pubsubTopic: ${topic.id}\n labels:\n label1: labelvalue1\n streamConfigs:\n - bigqueryDestination:\n tableUri: bq://${bqDataset.project}.${bqDataset.datasetId}.${bqTable.tableId}\n options:\n provider: ${[\"google-beta\"]}\n topic:\n type: gcp:pubsub:Topic\n options:\n provider: ${[\"google-beta\"]}\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n bqDataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dicom_bq_ds\n friendlyName: test\n description: This is a test description\n location: US\n deleteContentsOnDestroy: true\n options:\n provider: ${[\"google-beta\"]}\n bqTable:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${bqDataset.datasetId}\n tableId: dicom_bq_tb\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDicomStore can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:healthcare/dicomStore:DicomStore default {{dataset}}/dicomStores/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:healthcare/dicomStore:DicomStore default {{dataset}}/{{name}}\n```\n\n ", + "description": "A DicomStore is a datastore inside a Healthcare dataset that conforms to the DICOM\n(https://www.dicomstandard.org/about/) standard for Healthcare information exchange\n\n\nTo get more information about DicomStore, see:\n\n* [API documentation](https://cloud.google.com/healthcare/docs/reference/rest/v1/projects.locations.datasets.dicomStores)\n* How-to Guides\n * [Creating a DICOM store](https://cloud.google.com/healthcare/docs/how-tos/dicom)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Healthcare Dicom Store Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst _default = new gcp.healthcare.DicomStore(\"default\", {\n dataset: dataset.id,\n notificationConfig: {\n pubsubTopic: topic.id,\n },\n labels: {\n label1: \"labelvalue1\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\")\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\ndefault = gcp.healthcare.DicomStore(\"default\",\n dataset=dataset.id,\n notification_config=gcp.healthcare.DicomStoreNotificationConfigArgs(\n pubsub_topic=topic.id,\n ),\n labels={\n \"label1\": \"labelvalue1\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\");\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var @default = new Gcp.Healthcare.DicomStore(\"default\", new()\n {\n Dataset = dataset.Id,\n NotificationConfig = new Gcp.Healthcare.Inputs.DicomStoreNotificationConfigArgs\n {\n PubsubTopic = topic.Id,\n },\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\ttopic, err := pubsub.NewTopic(ctx, \"topic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewDicomStore(ctx, \"default\", \u0026healthcare.DicomStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tNotificationConfig: \u0026healthcare.DicomStoreNotificationConfigArgs{\n\t\t\t\tPubsubTopic: topic.ID(),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.DicomStore;\nimport com.pulumi.gcp.healthcare.DicomStoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.DicomStoreNotificationConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var topic = new Topic(\"topic\");\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var default_ = new DicomStore(\"default\", DicomStoreArgs.builder() \n .dataset(dataset.id())\n .notificationConfig(DicomStoreNotificationConfigArgs.builder()\n .pubsubTopic(topic.id())\n .build())\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:DicomStore\n properties:\n dataset: ${dataset.id}\n notificationConfig:\n pubsubTopic: ${topic.id}\n labels:\n label1: labelvalue1\n topic:\n type: gcp:pubsub:Topic\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Dicom Store Bq Stream\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {}, {\n provider: google_beta,\n});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"}, {\n provider: google_beta,\n});\nconst bqDataset = new gcp.bigquery.Dataset(\"bqDataset\", {\n datasetId: \"dicom_bq_ds\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n deleteContentsOnDestroy: true,\n}, {\n provider: google_beta,\n});\nconst bqTable = new gcp.bigquery.Table(\"bqTable\", {\n deletionProtection: false,\n datasetId: bqDataset.datasetId,\n tableId: \"dicom_bq_tb\",\n}, {\n provider: google_beta,\n});\nconst _default = new gcp.healthcare.DicomStore(\"default\", {\n dataset: dataset.id,\n notificationConfig: {\n pubsubTopic: topic.id,\n },\n labels: {\n label1: \"labelvalue1\",\n },\n streamConfigs: [{\n bigqueryDestination: {\n tableUri: pulumi.interpolate`bq://${bqDataset.project}.${bqDataset.datasetId}.${bqTable.tableId}`,\n },\n }],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\", opts=pulumi.ResourceOptions(provider=google_beta))\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\",\nopts=pulumi.ResourceOptions(provider=google_beta))\nbq_dataset = gcp.bigquery.Dataset(\"bqDataset\",\n dataset_id=\"dicom_bq_ds\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\",\n delete_contents_on_destroy=True,\n opts=pulumi.ResourceOptions(provider=google_beta))\nbq_table = gcp.bigquery.Table(\"bqTable\",\n deletion_protection=False,\n dataset_id=bq_dataset.dataset_id,\n table_id=\"dicom_bq_tb\",\n opts=pulumi.ResourceOptions(provider=google_beta))\ndefault = gcp.healthcare.DicomStore(\"default\",\n dataset=dataset.id,\n notification_config=gcp.healthcare.DicomStoreNotificationConfigArgs(\n pubsub_topic=topic.id,\n ),\n labels={\n \"label1\": \"labelvalue1\",\n },\n stream_configs=[gcp.healthcare.DicomStoreStreamConfigArgs(\n bigquery_destination=gcp.healthcare.DicomStoreStreamConfigBigqueryDestinationArgs(\n table_uri=pulumi.Output.all(bq_dataset.project, bq_dataset.dataset_id, bq_table.table_id).apply(lambda project, dataset_id, table_id: f\"bq://{project}.{dataset_id}.{table_id}\"),\n ),\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\", new()\n {\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var bqDataset = new Gcp.BigQuery.Dataset(\"bqDataset\", new()\n {\n DatasetId = \"dicom_bq_ds\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n DeleteContentsOnDestroy = true,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var bqTable = new Gcp.BigQuery.Table(\"bqTable\", new()\n {\n DeletionProtection = false,\n DatasetId = bqDataset.DatasetId,\n TableId = \"dicom_bq_tb\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var @default = new Gcp.Healthcare.DicomStore(\"default\", new()\n {\n Dataset = dataset.Id,\n NotificationConfig = new Gcp.Healthcare.Inputs.DicomStoreNotificationConfigArgs\n {\n PubsubTopic = topic.Id,\n },\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n StreamConfigs = new[]\n {\n new Gcp.Healthcare.Inputs.DicomStoreStreamConfigArgs\n {\n BigqueryDestination = new Gcp.Healthcare.Inputs.DicomStoreStreamConfigBigqueryDestinationArgs\n {\n TableUri = Output.Tuple(bqDataset.Project, bqDataset.DatasetId, bqTable.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 },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\ttopic, err := pubsub.NewTopic(ctx, \"topic\", nil, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqDataset, err := bigquery.NewDataset(ctx, \"bqDataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"dicom_bq_ds\"),\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\tDeleteContentsOnDestroy: pulumi.Bool(true),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbqTable, err := bigquery.NewTable(ctx, \"bqTable\", \u0026bigquery.TableArgs{\n\t\t\tDeletionProtection: pulumi.Bool(false),\n\t\t\tDatasetId: bqDataset.DatasetId,\n\t\t\tTableId: pulumi.String(\"dicom_bq_tb\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = healthcare.NewDicomStore(ctx, \"default\", \u0026healthcare.DicomStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tNotificationConfig: \u0026healthcare.DicomStoreNotificationConfigArgs{\n\t\t\t\tPubsubTopic: topic.ID(),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t\tStreamConfigs: healthcare.DicomStoreStreamConfigArray{\n\t\t\t\t\u0026healthcare.DicomStoreStreamConfigArgs{\n\t\t\t\t\tBigqueryDestination: \u0026healthcare.DicomStoreStreamConfigBigqueryDestinationArgs{\n\t\t\t\t\t\tTableUri: pulumi.All(bqDataset.Project, bqDataset.DatasetId, bqTable.TableId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\t\ttableId := _args[2].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v.%v\", project, datasetId, tableId), 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},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\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.healthcare.DicomStore;\nimport com.pulumi.gcp.healthcare.DicomStoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.DicomStoreNotificationConfigArgs;\nimport com.pulumi.gcp.healthcare.inputs.DicomStoreStreamConfigArgs;\nimport com.pulumi.gcp.healthcare.inputs.DicomStoreStreamConfigBigqueryDestinationArgs;\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 topic = new Topic(\"topic\", TopicArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var bqDataset = new Dataset(\"bqDataset\", DatasetArgs.builder() \n .datasetId(\"dicom_bq_ds\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .deleteContentsOnDestroy(true)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var bqTable = new Table(\"bqTable\", TableArgs.builder() \n .deletionProtection(false)\n .datasetId(bqDataset.datasetId())\n .tableId(\"dicom_bq_tb\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var default_ = new DicomStore(\"default\", DicomStoreArgs.builder() \n .dataset(dataset.id())\n .notificationConfig(DicomStoreNotificationConfigArgs.builder()\n .pubsubTopic(topic.id())\n .build())\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .streamConfigs(DicomStoreStreamConfigArgs.builder()\n .bigqueryDestination(DicomStoreStreamConfigBigqueryDestinationArgs.builder()\n .tableUri(Output.tuple(bqDataset.project(), bqDataset.datasetId(), bqTable.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 .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:DicomStore\n properties:\n dataset: ${dataset.id}\n notificationConfig:\n pubsubTopic: ${topic.id}\n labels:\n label1: labelvalue1\n streamConfigs:\n - bigqueryDestination:\n tableUri: bq://${bqDataset.project}.${bqDataset.datasetId}.${bqTable.tableId}\n options:\n provider: ${[\"google-beta\"]}\n topic:\n type: gcp:pubsub:Topic\n options:\n provider: ${[\"google-beta\"]}\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n bqDataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: dicom_bq_ds\n friendlyName: test\n description: This is a test description\n location: US\n deleteContentsOnDestroy: true\n options:\n provider: ${[\"google-beta\"]}\n bqTable:\n type: gcp:bigquery:Table\n properties:\n deletionProtection: false\n datasetId: ${bqDataset.datasetId}\n tableId: dicom_bq_tb\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDicomStore can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:healthcare/dicomStore:DicomStore default {{dataset}}/dicomStores/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:healthcare/dicomStore:DicomStore default {{dataset}}/{{name}}\n```\n\n ", "properties": { "dataset": { "type": "string", @@ -166148,7 +167595,7 @@ "items": { "$ref": "#/types/gcp:healthcare/DicomStoreStreamConfig:DicomStoreStreamConfig" }, - "description": "To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store.\nstreamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset.\nStructure is documented below.\n" + "description": "To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so\nyou can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery\ntables in a BigQuery dataset.\n" } }, "required": [ @@ -166183,7 +167630,7 @@ "items": { "$ref": "#/types/gcp:healthcare/DicomStoreStreamConfig:DicomStoreStreamConfig" }, - "description": "To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store.\nstreamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset.\nStructure is documented below.\n" + "description": "To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so\nyou can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery\ntables in a BigQuery dataset.\n" } }, "requiredInputs": [ @@ -166222,14 +167669,14 @@ "items": { "$ref": "#/types/gcp:healthcare/DicomStoreStreamConfig:DicomStoreStreamConfig" }, - "description": "To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store.\nstreamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset.\nStructure is documented below.\n" + "description": "To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so\nyou can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery\ntables in a BigQuery dataset.\n" } }, "type": "object" } }, "gcp:healthcare/dicomStoreIamBinding:DicomStoreIamBinding": { - "description": "Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case:\n\n* `gcp.healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached.\n* `gcp.healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved.\n* `gcp.healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved.\n\n\u003e **Note:** `gcp.healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DicomStoreIamBinding` and `gcp.healthcare.DicomStoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_dicom\\_store\\_iam\\_policy\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst dicomStore = new gcp.healthcare.DicomStoreIamPolicy(\"dicomStore\", {\n dicomStoreId: \"your-dicom-store-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\ndicom_store = gcp.healthcare.DicomStoreIamPolicy(\"dicomStore\",\n dicom_store_id=\"your-dicom-store-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var dicomStore = new Gcp.Healthcare.DicomStoreIamPolicy(\"dicomStore\", new()\n {\n DicomStoreId = \"your-dicom-store-id\",\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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = healthcare.NewDicomStoreIamPolicy(ctx, \"dicomStore\", \u0026healthcare.DicomStoreIamPolicyArgs{\n\t\t\tDicomStoreId: pulumi.String(\"your-dicom-store-id\"),\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.healthcare.DicomStoreIamPolicy;\nimport com.pulumi.gcp.healthcare.DicomStoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var dicomStore = new DicomStoreIamPolicy(\"dicomStore\", DicomStoreIamPolicyArgs.builder() \n .dicomStoreId(\"your-dicom-store-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dicomStore:\n type: gcp:healthcare:DicomStoreIamPolicy\n properties:\n dicomStoreId: your-dicom-store-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_dicom\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dicomStore = new gcp.healthcare.DicomStoreIamBinding(\"dicomStore\", {\n dicomStoreId: \"your-dicom-store-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndicom_store = gcp.healthcare.DicomStoreIamBinding(\"dicomStore\",\n dicom_store_id=\"your-dicom-store-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dicomStore = new Gcp.Healthcare.DicomStoreIamBinding(\"dicomStore\", new()\n {\n DicomStoreId = \"your-dicom-store-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDicomStoreIamBinding(ctx, \"dicomStore\", \u0026healthcare.DicomStoreIamBindingArgs{\n\t\t\tDicomStoreId: pulumi.String(\"your-dicom-store-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.DicomStoreIamBinding;\nimport com.pulumi.gcp.healthcare.DicomStoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dicomStore = new DicomStoreIamBinding(\"dicomStore\", DicomStoreIamBindingArgs.builder() \n .dicomStoreId(\"your-dicom-store-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dicomStore:\n type: gcp:healthcare:DicomStoreIamBinding\n properties:\n dicomStoreId: your-dicom-store-id\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_healthcare\\_dicom\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dicomStore = new gcp.healthcare.DicomStoreIamMember(\"dicomStore\", {\n dicomStoreId: \"your-dicom-store-id\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndicom_store = gcp.healthcare.DicomStoreIamMember(\"dicomStore\",\n dicom_store_id=\"your-dicom-store-id\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dicomStore = new Gcp.Healthcare.DicomStoreIamMember(\"dicomStore\", new()\n {\n DicomStoreId = \"your-dicom-store-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDicomStoreIamMember(ctx, \"dicomStore\", \u0026healthcare.DicomStoreIamMemberArgs{\n\t\t\tDicomStoreId: pulumi.String(\"your-dicom-store-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.DicomStoreIamMember;\nimport com.pulumi.gcp.healthcare.DicomStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dicomStore = new DicomStoreIamMember(\"dicomStore\", DicomStoreIamMemberArgs.builder() \n .dicomStoreId(\"your-dicom-store-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dicomStore:\n type: gcp:healthcare:DicomStoreIamMember\n properties:\n dicomStoreId: your-dicom-store-id\n member: user:jane@example.com\n role: roles/editor\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `dicom_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamBinding:DicomStoreIamBinding dicom_store_iam \"your-project-id/location-name/dataset-name/dicom-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `dicom_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamBinding:DicomStoreIamBinding dicom_store_iam \"your-project-id/location-name/dataset-name/dicom-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `dicom_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamBinding:DicomStoreIamBinding dicom_store_iam your-project-id/location-name/dataset-name/dicom-store-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `dicom_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamBinding:DicomStoreIamBinding dicom_store_iam \"your-project-id/location-name/dataset-name/dicom-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `dicom_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamBinding:DicomStoreIamBinding dicom_store_iam \"your-project-id/location-name/dataset-name/dicom-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `dicom_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamBinding:DicomStoreIamBinding dicom_store_iam your-project-id/location-name/dataset-name/dicom-store-name\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:healthcare/DicomStoreIamBindingCondition:DicomStoreIamBindingCondition" @@ -166318,7 +167765,7 @@ } }, "gcp:healthcare/dicomStoreIamMember:DicomStoreIamMember": { - "description": "Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case:\n\n* `gcp.healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached.\n* `gcp.healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved.\n* `gcp.healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved.\n\n\u003e **Note:** `gcp.healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DicomStoreIamBinding` and `gcp.healthcare.DicomStoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_dicom\\_store\\_iam\\_policy\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst dicomStore = new gcp.healthcare.DicomStoreIamPolicy(\"dicomStore\", {\n dicomStoreId: \"your-dicom-store-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\ndicom_store = gcp.healthcare.DicomStoreIamPolicy(\"dicomStore\",\n dicom_store_id=\"your-dicom-store-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var dicomStore = new Gcp.Healthcare.DicomStoreIamPolicy(\"dicomStore\", new()\n {\n DicomStoreId = \"your-dicom-store-id\",\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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = healthcare.NewDicomStoreIamPolicy(ctx, \"dicomStore\", \u0026healthcare.DicomStoreIamPolicyArgs{\n\t\t\tDicomStoreId: pulumi.String(\"your-dicom-store-id\"),\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.healthcare.DicomStoreIamPolicy;\nimport com.pulumi.gcp.healthcare.DicomStoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var dicomStore = new DicomStoreIamPolicy(\"dicomStore\", DicomStoreIamPolicyArgs.builder() \n .dicomStoreId(\"your-dicom-store-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dicomStore:\n type: gcp:healthcare:DicomStoreIamPolicy\n properties:\n dicomStoreId: your-dicom-store-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_dicom\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dicomStore = new gcp.healthcare.DicomStoreIamBinding(\"dicomStore\", {\n dicomStoreId: \"your-dicom-store-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndicom_store = gcp.healthcare.DicomStoreIamBinding(\"dicomStore\",\n dicom_store_id=\"your-dicom-store-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dicomStore = new Gcp.Healthcare.DicomStoreIamBinding(\"dicomStore\", new()\n {\n DicomStoreId = \"your-dicom-store-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDicomStoreIamBinding(ctx, \"dicomStore\", \u0026healthcare.DicomStoreIamBindingArgs{\n\t\t\tDicomStoreId: pulumi.String(\"your-dicom-store-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.DicomStoreIamBinding;\nimport com.pulumi.gcp.healthcare.DicomStoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dicomStore = new DicomStoreIamBinding(\"dicomStore\", DicomStoreIamBindingArgs.builder() \n .dicomStoreId(\"your-dicom-store-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dicomStore:\n type: gcp:healthcare:DicomStoreIamBinding\n properties:\n dicomStoreId: your-dicom-store-id\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_healthcare\\_dicom\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dicomStore = new gcp.healthcare.DicomStoreIamMember(\"dicomStore\", {\n dicomStoreId: \"your-dicom-store-id\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndicom_store = gcp.healthcare.DicomStoreIamMember(\"dicomStore\",\n dicom_store_id=\"your-dicom-store-id\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dicomStore = new Gcp.Healthcare.DicomStoreIamMember(\"dicomStore\", new()\n {\n DicomStoreId = \"your-dicom-store-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDicomStoreIamMember(ctx, \"dicomStore\", \u0026healthcare.DicomStoreIamMemberArgs{\n\t\t\tDicomStoreId: pulumi.String(\"your-dicom-store-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.DicomStoreIamMember;\nimport com.pulumi.gcp.healthcare.DicomStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dicomStore = new DicomStoreIamMember(\"dicomStore\", DicomStoreIamMemberArgs.builder() \n .dicomStoreId(\"your-dicom-store-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dicomStore:\n type: gcp:healthcare:DicomStoreIamMember\n properties:\n dicomStoreId: your-dicom-store-id\n member: user:jane@example.com\n role: roles/editor\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `dicom_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamMember:DicomStoreIamMember dicom_store_iam \"your-project-id/location-name/dataset-name/dicom-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `dicom_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamMember:DicomStoreIamMember dicom_store_iam \"your-project-id/location-name/dataset-name/dicom-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `dicom_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamMember:DicomStoreIamMember dicom_store_iam your-project-id/location-name/dataset-name/dicom-store-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `dicom_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamMember:DicomStoreIamMember dicom_store_iam \"your-project-id/location-name/dataset-name/dicom-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `dicom_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamMember:DicomStoreIamMember dicom_store_iam \"your-project-id/location-name/dataset-name/dicom-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `dicom_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamMember:DicomStoreIamMember dicom_store_iam your-project-id/location-name/dataset-name/dicom-store-name\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:healthcare/DicomStoreIamMemberCondition:DicomStoreIamMemberCondition" @@ -166400,7 +167847,7 @@ } }, "gcp:healthcare/dicomStoreIamPolicy:DicomStoreIamPolicy": { - "description": "Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case:\n\n* `gcp.healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached.\n* `gcp.healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved.\n* `gcp.healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved.\n\n\u003e **Note:** `gcp.healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DicomStoreIamBinding` and `gcp.healthcare.DicomStoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_dicom\\_store\\_iam\\_policy\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst dicomStore = new gcp.healthcare.DicomStoreIamPolicy(\"dicomStore\", {\n dicomStoreId: \"your-dicom-store-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\ndicom_store = gcp.healthcare.DicomStoreIamPolicy(\"dicomStore\",\n dicom_store_id=\"your-dicom-store-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var dicomStore = new Gcp.Healthcare.DicomStoreIamPolicy(\"dicomStore\", new()\n {\n DicomStoreId = \"your-dicom-store-id\",\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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = healthcare.NewDicomStoreIamPolicy(ctx, \"dicomStore\", \u0026healthcare.DicomStoreIamPolicyArgs{\n\t\t\tDicomStoreId: pulumi.String(\"your-dicom-store-id\"),\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.healthcare.DicomStoreIamPolicy;\nimport com.pulumi.gcp.healthcare.DicomStoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var dicomStore = new DicomStoreIamPolicy(\"dicomStore\", DicomStoreIamPolicyArgs.builder() \n .dicomStoreId(\"your-dicom-store-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dicomStore:\n type: gcp:healthcare:DicomStoreIamPolicy\n properties:\n dicomStoreId: your-dicom-store-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_dicom\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dicomStore = new gcp.healthcare.DicomStoreIamBinding(\"dicomStore\", {\n dicomStoreId: \"your-dicom-store-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndicom_store = gcp.healthcare.DicomStoreIamBinding(\"dicomStore\",\n dicom_store_id=\"your-dicom-store-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dicomStore = new Gcp.Healthcare.DicomStoreIamBinding(\"dicomStore\", new()\n {\n DicomStoreId = \"your-dicom-store-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDicomStoreIamBinding(ctx, \"dicomStore\", \u0026healthcare.DicomStoreIamBindingArgs{\n\t\t\tDicomStoreId: pulumi.String(\"your-dicom-store-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.DicomStoreIamBinding;\nimport com.pulumi.gcp.healthcare.DicomStoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dicomStore = new DicomStoreIamBinding(\"dicomStore\", DicomStoreIamBindingArgs.builder() \n .dicomStoreId(\"your-dicom-store-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dicomStore:\n type: gcp:healthcare:DicomStoreIamBinding\n properties:\n dicomStoreId: your-dicom-store-id\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_healthcare\\_dicom\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dicomStore = new gcp.healthcare.DicomStoreIamMember(\"dicomStore\", {\n dicomStoreId: \"your-dicom-store-id\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndicom_store = gcp.healthcare.DicomStoreIamMember(\"dicomStore\",\n dicom_store_id=\"your-dicom-store-id\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dicomStore = new Gcp.Healthcare.DicomStoreIamMember(\"dicomStore\", new()\n {\n DicomStoreId = \"your-dicom-store-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewDicomStoreIamMember(ctx, \"dicomStore\", \u0026healthcare.DicomStoreIamMemberArgs{\n\t\t\tDicomStoreId: pulumi.String(\"your-dicom-store-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.DicomStoreIamMember;\nimport com.pulumi.gcp.healthcare.DicomStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dicomStore = new DicomStoreIamMember(\"dicomStore\", DicomStoreIamMemberArgs.builder() \n .dicomStoreId(\"your-dicom-store-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dicomStore:\n type: gcp:healthcare:DicomStoreIamMember\n properties:\n dicomStoreId: your-dicom-store-id\n member: user:jane@example.com\n role: roles/editor\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `dicom_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamPolicy:DicomStoreIamPolicy dicom_store_iam \"your-project-id/location-name/dataset-name/dicom-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `dicom_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamPolicy:DicomStoreIamPolicy dicom_store_iam \"your-project-id/location-name/dataset-name/dicom-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `dicom_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamPolicy:DicomStoreIamPolicy dicom_store_iam your-project-id/location-name/dataset-name/dicom-store-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `dicom_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamPolicy:DicomStoreIamPolicy dicom_store_iam \"your-project-id/location-name/dataset-name/dicom-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `dicom_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamPolicy:DicomStoreIamPolicy dicom_store_iam \"your-project-id/location-name/dataset-name/dicom-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `dicom_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/dicomStoreIamPolicy:DicomStoreIamPolicy dicom_store_iam your-project-id/location-name/dataset-name/dicom-store-name\n```\n\n ", "properties": { "dicomStoreId": { "type": "string", @@ -166456,7 +167903,7 @@ } }, "gcp:healthcare/fhirStore:FhirStore": { - "description": "A FhirStore is a datastore inside a Healthcare dataset that conforms to the FHIR (https://www.hl7.org/fhir/STU3/)\nstandard for Healthcare information exchange\n\nTo get more information about FhirStore, see:\n\n* [API documentation](https://cloud.google.com/healthcare/docs/reference/rest/v1/projects.locations.datasets.fhirStores)\n* How-to Guides\n * [Creating a FHIR store](https://cloud.google.com/healthcare/docs/how-tos/fhir)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Healthcare Fhir Store Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst _default = new gcp.healthcare.FhirStore(\"default\", {\n dataset: dataset.id,\n version: \"R4\",\n enableUpdateCreate: false,\n disableReferentialIntegrity: false,\n disableResourceVersioning: false,\n enableHistoryImport: false,\n notificationConfig: {\n pubsubTopic: topic.id,\n },\n labels: {\n label1: \"labelvalue1\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\")\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\ndefault = gcp.healthcare.FhirStore(\"default\",\n dataset=dataset.id,\n version=\"R4\",\n enable_update_create=False,\n disable_referential_integrity=False,\n disable_resource_versioning=False,\n enable_history_import=False,\n notification_config=gcp.healthcare.FhirStoreNotificationConfigArgs(\n pubsub_topic=topic.id,\n ),\n labels={\n \"label1\": \"labelvalue1\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\");\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var @default = new Gcp.Healthcare.FhirStore(\"default\", new()\n {\n Dataset = dataset.Id,\n Version = \"R4\",\n EnableUpdateCreate = false,\n DisableReferentialIntegrity = false,\n DisableResourceVersioning = false,\n EnableHistoryImport = false,\n NotificationConfig = new Gcp.Healthcare.Inputs.FhirStoreNotificationConfigArgs\n {\n PubsubTopic = topic.Id,\n },\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\ttopic, err := pubsub.NewTopic(ctx, \"topic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewFhirStore(ctx, \"default\", \u0026healthcare.FhirStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tVersion: pulumi.String(\"R4\"),\n\t\t\tEnableUpdateCreate: pulumi.Bool(false),\n\t\t\tDisableReferentialIntegrity: pulumi.Bool(false),\n\t\t\tDisableResourceVersioning: pulumi.Bool(false),\n\t\t\tEnableHistoryImport: pulumi.Bool(false),\n\t\t\tNotificationConfig: \u0026healthcare.FhirStoreNotificationConfigArgs{\n\t\t\t\tPubsubTopic: topic.ID(),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.FhirStore;\nimport com.pulumi.gcp.healthcare.FhirStoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.FhirStoreNotificationConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var topic = new Topic(\"topic\");\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var default_ = new FhirStore(\"default\", FhirStoreArgs.builder() \n .dataset(dataset.id())\n .version(\"R4\")\n .enableUpdateCreate(false)\n .disableReferentialIntegrity(false)\n .disableResourceVersioning(false)\n .enableHistoryImport(false)\n .notificationConfig(FhirStoreNotificationConfigArgs.builder()\n .pubsubTopic(topic.id())\n .build())\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:FhirStore\n properties:\n dataset: ${dataset.id}\n version: R4\n enableUpdateCreate: false\n disableReferentialIntegrity: false\n disableResourceVersioning: false\n enableHistoryImport: false\n notificationConfig:\n pubsubTopic: ${topic.id}\n labels:\n label1: labelvalue1\n topic:\n type: gcp:pubsub:Topic\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Fhir Store Streaming Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst bqDataset = new gcp.bigquery.Dataset(\"bqDataset\", {\n datasetId: \"bq_example_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n deleteContentsOnDestroy: true,\n});\nconst _default = new gcp.healthcare.FhirStore(\"default\", {\n dataset: dataset.id,\n version: \"R4\",\n enableUpdateCreate: false,\n disableReferentialIntegrity: false,\n disableResourceVersioning: false,\n enableHistoryImport: false,\n labels: {\n label1: \"labelvalue1\",\n },\n streamConfigs: [{\n resourceTypes: [\"Observation\"],\n bigqueryDestination: {\n datasetUri: pulumi.interpolate`bq://${bqDataset.project}.${bqDataset.datasetId}`,\n schemaConfig: {\n recursiveStructureDepth: 3,\n },\n },\n }],\n});\nconst topic = new gcp.pubsub.Topic(\"topic\", {});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\nbq_dataset = gcp.bigquery.Dataset(\"bqDataset\",\n dataset_id=\"bq_example_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\",\n delete_contents_on_destroy=True)\ndefault = gcp.healthcare.FhirStore(\"default\",\n dataset=dataset.id,\n version=\"R4\",\n enable_update_create=False,\n disable_referential_integrity=False,\n disable_resource_versioning=False,\n enable_history_import=False,\n labels={\n \"label1\": \"labelvalue1\",\n },\n stream_configs=[gcp.healthcare.FhirStoreStreamConfigArgs(\n resource_types=[\"Observation\"],\n bigquery_destination=gcp.healthcare.FhirStoreStreamConfigBigqueryDestinationArgs(\n dataset_uri=pulumi.Output.all(bq_dataset.project, bq_dataset.dataset_id).apply(lambda project, dataset_id: f\"bq://{project}.{dataset_id}\"),\n schema_config=gcp.healthcare.FhirStoreStreamConfigBigqueryDestinationSchemaConfigArgs(\n recursive_structure_depth=3,\n ),\n ),\n )])\ntopic = gcp.pubsub.Topic(\"topic\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var bqDataset = new Gcp.BigQuery.Dataset(\"bqDataset\", new()\n {\n DatasetId = \"bq_example_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n DeleteContentsOnDestroy = true,\n });\n\n var @default = new Gcp.Healthcare.FhirStore(\"default\", new()\n {\n Dataset = dataset.Id,\n Version = \"R4\",\n EnableUpdateCreate = false,\n DisableReferentialIntegrity = false,\n DisableResourceVersioning = false,\n EnableHistoryImport = false,\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n StreamConfigs = new[]\n {\n new Gcp.Healthcare.Inputs.FhirStoreStreamConfigArgs\n {\n ResourceTypes = new[]\n {\n \"Observation\",\n },\n BigqueryDestination = new Gcp.Healthcare.Inputs.FhirStoreStreamConfigBigqueryDestinationArgs\n {\n DatasetUri = Output.Tuple(bqDataset.Project, bqDataset.DatasetId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n return $\"bq://{project}.{datasetId}\";\n }),\n SchemaConfig = new Gcp.Healthcare.Inputs.FhirStoreStreamConfigBigqueryDestinationSchemaConfigArgs\n {\n RecursiveStructureDepth = 3,\n },\n },\n },\n },\n });\n\n var topic = new Gcp.PubSub.Topic(\"topic\");\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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\tbqDataset, err := bigquery.NewDataset(ctx, \"bqDataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"bq_example_dataset\"),\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\tDeleteContentsOnDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = healthcare.NewFhirStore(ctx, \"default\", \u0026healthcare.FhirStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tVersion: pulumi.String(\"R4\"),\n\t\t\tEnableUpdateCreate: pulumi.Bool(false),\n\t\t\tDisableReferentialIntegrity: pulumi.Bool(false),\n\t\t\tDisableResourceVersioning: pulumi.Bool(false),\n\t\t\tEnableHistoryImport: pulumi.Bool(false),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t\tStreamConfigs: healthcare.FhirStoreStreamConfigArray{\n\t\t\t\t\u0026healthcare.FhirStoreStreamConfigArgs{\n\t\t\t\t\tResourceTypes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"Observation\"),\n\t\t\t\t\t},\n\t\t\t\t\tBigqueryDestination: \u0026healthcare.FhirStoreStreamConfigBigqueryDestinationArgs{\n\t\t\t\t\t\tDatasetUri: pulumi.All(bqDataset.Project, bqDataset.DatasetId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v\", project, datasetId), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t\tSchemaConfig: \u0026healthcare.FhirStoreStreamConfigBigqueryDestinationSchemaConfigArgs{\n\t\t\t\t\t\t\tRecursiveStructureDepth: pulumi.Int(3),\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\t_, err = pubsub.NewTopic(ctx, \"topic\", 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.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.healthcare.FhirStore;\nimport com.pulumi.gcp.healthcare.FhirStoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.FhirStoreStreamConfigArgs;\nimport com.pulumi.gcp.healthcare.inputs.FhirStoreStreamConfigBigqueryDestinationArgs;\nimport com.pulumi.gcp.healthcare.inputs.FhirStoreStreamConfigBigqueryDestinationSchemaConfigArgs;\nimport com.pulumi.gcp.pubsub.Topic;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var bqDataset = new Dataset(\"bqDataset\", DatasetArgs.builder() \n .datasetId(\"bq_example_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .deleteContentsOnDestroy(true)\n .build());\n\n var default_ = new FhirStore(\"default\", FhirStoreArgs.builder() \n .dataset(dataset.id())\n .version(\"R4\")\n .enableUpdateCreate(false)\n .disableReferentialIntegrity(false)\n .disableResourceVersioning(false)\n .enableHistoryImport(false)\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .streamConfigs(FhirStoreStreamConfigArgs.builder()\n .resourceTypes(\"Observation\")\n .bigqueryDestination(FhirStoreStreamConfigBigqueryDestinationArgs.builder()\n .datasetUri(Output.tuple(bqDataset.project(), bqDataset.datasetId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n return String.format(\"bq://%s.%s\", project,datasetId);\n }))\n .schemaConfig(FhirStoreStreamConfigBigqueryDestinationSchemaConfigArgs.builder()\n .recursiveStructureDepth(3)\n .build())\n .build())\n .build())\n .build());\n\n var topic = new Topic(\"topic\");\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:FhirStore\n properties:\n dataset: ${dataset.id}\n version: R4\n enableUpdateCreate: false\n disableReferentialIntegrity: false\n disableResourceVersioning: false\n enableHistoryImport: false\n labels:\n label1: labelvalue1\n streamConfigs:\n - resourceTypes:\n - Observation\n bigqueryDestination:\n datasetUri: bq://${bqDataset.project}.${bqDataset.datasetId}\n schemaConfig:\n recursiveStructureDepth: 3\n topic:\n type: gcp:pubsub:Topic\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n bqDataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: bq_example_dataset\n friendlyName: test\n description: This is a test description\n location: US\n deleteContentsOnDestroy: true\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Fhir Store Notification Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst _default = new gcp.healthcare.FhirStore(\"default\", {\n dataset: dataset.id,\n version: \"R4\",\n enableUpdateCreate: false,\n disableReferentialIntegrity: false,\n disableResourceVersioning: false,\n enableHistoryImport: false,\n labels: {\n label1: \"labelvalue1\",\n },\n notificationConfigs: [{\n pubsubTopic: topic.id,\n sendFullResource: true,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\")\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\ndefault = gcp.healthcare.FhirStore(\"default\",\n dataset=dataset.id,\n version=\"R4\",\n enable_update_create=False,\n disable_referential_integrity=False,\n disable_resource_versioning=False,\n enable_history_import=False,\n labels={\n \"label1\": \"labelvalue1\",\n },\n notification_configs=[gcp.healthcare.FhirStoreNotificationConfigArgs(\n pubsub_topic=topic.id,\n send_full_resource=True,\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\");\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var @default = new Gcp.Healthcare.FhirStore(\"default\", new()\n {\n Dataset = dataset.Id,\n Version = \"R4\",\n EnableUpdateCreate = false,\n DisableReferentialIntegrity = false,\n DisableResourceVersioning = false,\n EnableHistoryImport = false,\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n NotificationConfigs = new[]\n {\n new Gcp.Healthcare.Inputs.FhirStoreNotificationConfigArgs\n {\n PubsubTopic = topic.Id,\n SendFullResource = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\ttopic, err := pubsub.NewTopic(ctx, \"topic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewFhirStore(ctx, \"default\", \u0026healthcare.FhirStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tVersion: pulumi.String(\"R4\"),\n\t\t\tEnableUpdateCreate: pulumi.Bool(false),\n\t\t\tDisableReferentialIntegrity: pulumi.Bool(false),\n\t\t\tDisableResourceVersioning: pulumi.Bool(false),\n\t\t\tEnableHistoryImport: pulumi.Bool(false),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t\tNotificationConfigs: healthcare.FhirStoreNotificationConfigArray{\n\t\t\t\t\u0026healthcare.FhirStoreNotificationConfigArgs{\n\t\t\t\t\tPubsubTopic: topic.ID(),\n\t\t\t\t\tSendFullResource: 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.pubsub.Topic;\nimport com.pulumi.gcp.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.FhirStore;\nimport com.pulumi.gcp.healthcare.FhirStoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.FhirStoreNotificationConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var topic = new Topic(\"topic\");\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var default_ = new FhirStore(\"default\", FhirStoreArgs.builder() \n .dataset(dataset.id())\n .version(\"R4\")\n .enableUpdateCreate(false)\n .disableReferentialIntegrity(false)\n .disableResourceVersioning(false)\n .enableHistoryImport(false)\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .notificationConfigs(FhirStoreNotificationConfigArgs.builder()\n .pubsubTopic(topic.id())\n .sendFullResource(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:FhirStore\n properties:\n dataset: ${dataset.id}\n version: R4\n enableUpdateCreate: false\n disableReferentialIntegrity: false\n disableResourceVersioning: false\n enableHistoryImport: false\n labels:\n label1: labelvalue1\n notificationConfigs:\n - pubsubTopic: ${topic.id}\n sendFullResource: true\n topic:\n type: gcp:pubsub:Topic\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nFhirStore can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:healthcare/fhirStore:FhirStore default {{dataset}}/fhirStores/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:healthcare/fhirStore:FhirStore default {{dataset}}/{{name}}\n```\n\n ", + "description": "A FhirStore is a datastore inside a Healthcare dataset that conforms to the FHIR (https://www.hl7.org/fhir/STU3/)\nstandard for Healthcare information exchange\n\n\nTo get more information about FhirStore, see:\n\n* [API documentation](https://cloud.google.com/healthcare/docs/reference/rest/v1/projects.locations.datasets.fhirStores)\n* How-to Guides\n * [Creating a FHIR store](https://cloud.google.com/healthcare/docs/how-tos/fhir)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Healthcare Fhir Store Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst _default = new gcp.healthcare.FhirStore(\"default\", {\n dataset: dataset.id,\n version: \"R4\",\n enableUpdateCreate: false,\n disableReferentialIntegrity: false,\n disableResourceVersioning: false,\n enableHistoryImport: false,\n notificationConfig: {\n pubsubTopic: topic.id,\n },\n labels: {\n label1: \"labelvalue1\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\")\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\ndefault = gcp.healthcare.FhirStore(\"default\",\n dataset=dataset.id,\n version=\"R4\",\n enable_update_create=False,\n disable_referential_integrity=False,\n disable_resource_versioning=False,\n enable_history_import=False,\n notification_config=gcp.healthcare.FhirStoreNotificationConfigArgs(\n pubsub_topic=topic.id,\n ),\n labels={\n \"label1\": \"labelvalue1\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\");\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var @default = new Gcp.Healthcare.FhirStore(\"default\", new()\n {\n Dataset = dataset.Id,\n Version = \"R4\",\n EnableUpdateCreate = false,\n DisableReferentialIntegrity = false,\n DisableResourceVersioning = false,\n EnableHistoryImport = false,\n NotificationConfig = new Gcp.Healthcare.Inputs.FhirStoreNotificationConfigArgs\n {\n PubsubTopic = topic.Id,\n },\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\ttopic, err := pubsub.NewTopic(ctx, \"topic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewFhirStore(ctx, \"default\", \u0026healthcare.FhirStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tVersion: pulumi.String(\"R4\"),\n\t\t\tEnableUpdateCreate: pulumi.Bool(false),\n\t\t\tDisableReferentialIntegrity: pulumi.Bool(false),\n\t\t\tDisableResourceVersioning: pulumi.Bool(false),\n\t\t\tEnableHistoryImport: pulumi.Bool(false),\n\t\t\tNotificationConfig: \u0026healthcare.FhirStoreNotificationConfigArgs{\n\t\t\t\tPubsubTopic: topic.ID(),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.FhirStore;\nimport com.pulumi.gcp.healthcare.FhirStoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.FhirStoreNotificationConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var topic = new Topic(\"topic\");\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var default_ = new FhirStore(\"default\", FhirStoreArgs.builder() \n .dataset(dataset.id())\n .version(\"R4\")\n .enableUpdateCreate(false)\n .disableReferentialIntegrity(false)\n .disableResourceVersioning(false)\n .enableHistoryImport(false)\n .notificationConfig(FhirStoreNotificationConfigArgs.builder()\n .pubsubTopic(topic.id())\n .build())\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:FhirStore\n properties:\n dataset: ${dataset.id}\n version: R4\n enableUpdateCreate: false\n disableReferentialIntegrity: false\n disableResourceVersioning: false\n enableHistoryImport: false\n notificationConfig:\n pubsubTopic: ${topic.id}\n labels:\n label1: labelvalue1\n topic:\n type: gcp:pubsub:Topic\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Fhir Store Streaming Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst bigqueryEditor = new gcp.projects.IAMMember(\"bigqueryEditor\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/bigquery.dataEditor\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-healthcare.iam.gserviceaccount.com`),\n});\nconst bigqueryJobUser = new gcp.projects.IAMMember(\"bigqueryJobUser\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/bigquery.jobUser\",\n member: project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-healthcare.iam.gserviceaccount.com`),\n});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst bqDataset = new gcp.bigquery.Dataset(\"bqDataset\", {\n datasetId: \"bq_example_dataset\",\n friendlyName: \"test\",\n description: \"This is a test description\",\n location: \"US\",\n deleteContentsOnDestroy: true,\n});\nconst _default = new gcp.healthcare.FhirStore(\"default\", {\n dataset: dataset.id,\n version: \"R4\",\n enableUpdateCreate: false,\n disableReferentialIntegrity: false,\n disableResourceVersioning: false,\n enableHistoryImport: false,\n labels: {\n label1: \"labelvalue1\",\n },\n streamConfigs: [{\n resourceTypes: [\"Observation\"],\n bigqueryDestination: {\n datasetUri: pulumi.interpolate`bq://${bqDataset.project}.${bqDataset.datasetId}`,\n schemaConfig: {\n recursiveStructureDepth: 3,\n },\n },\n }],\n}, {\n dependsOn: [\n bigqueryEditor,\n bigqueryJobUser,\n ],\n});\nconst topic = new gcp.pubsub.Topic(\"topic\", {});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nbigquery_editor = gcp.projects.IAMMember(\"bigqueryEditor\",\n project=project.project_id,\n role=\"roles/bigquery.dataEditor\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-healthcare.iam.gserviceaccount.com\")\nbigquery_job_user = gcp.projects.IAMMember(\"bigqueryJobUser\",\n project=project.project_id,\n role=\"roles/bigquery.jobUser\",\n member=f\"serviceAccount:service-{project.number}@gcp-sa-healthcare.iam.gserviceaccount.com\")\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\nbq_dataset = gcp.bigquery.Dataset(\"bqDataset\",\n dataset_id=\"bq_example_dataset\",\n friendly_name=\"test\",\n description=\"This is a test description\",\n location=\"US\",\n delete_contents_on_destroy=True)\ndefault = gcp.healthcare.FhirStore(\"default\",\n dataset=dataset.id,\n version=\"R4\",\n enable_update_create=False,\n disable_referential_integrity=False,\n disable_resource_versioning=False,\n enable_history_import=False,\n labels={\n \"label1\": \"labelvalue1\",\n },\n stream_configs=[gcp.healthcare.FhirStoreStreamConfigArgs(\n resource_types=[\"Observation\"],\n bigquery_destination=gcp.healthcare.FhirStoreStreamConfigBigqueryDestinationArgs(\n dataset_uri=pulumi.Output.all(bq_dataset.project, bq_dataset.dataset_id).apply(lambda project, dataset_id: f\"bq://{project}.{dataset_id}\"),\n schema_config=gcp.healthcare.FhirStoreStreamConfigBigqueryDestinationSchemaConfigArgs(\n recursive_structure_depth=3,\n ),\n ),\n )],\n opts=pulumi.ResourceOptions(depends_on=[\n bigquery_editor,\n bigquery_job_user,\n ]))\ntopic = gcp.pubsub.Topic(\"topic\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var bigqueryEditor = new Gcp.Projects.IAMMember(\"bigqueryEditor\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/bigquery.dataEditor\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-healthcare.iam.gserviceaccount.com\",\n });\n\n var bigqueryJobUser = new Gcp.Projects.IAMMember(\"bigqueryJobUser\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/bigquery.jobUser\",\n Member = $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-healthcare.iam.gserviceaccount.com\",\n });\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var bqDataset = new Gcp.BigQuery.Dataset(\"bqDataset\", new()\n {\n DatasetId = \"bq_example_dataset\",\n FriendlyName = \"test\",\n Description = \"This is a test description\",\n Location = \"US\",\n DeleteContentsOnDestroy = true,\n });\n\n var @default = new Gcp.Healthcare.FhirStore(\"default\", new()\n {\n Dataset = dataset.Id,\n Version = \"R4\",\n EnableUpdateCreate = false,\n DisableReferentialIntegrity = false,\n DisableResourceVersioning = false,\n EnableHistoryImport = false,\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n StreamConfigs = new[]\n {\n new Gcp.Healthcare.Inputs.FhirStoreStreamConfigArgs\n {\n ResourceTypes = new[]\n {\n \"Observation\",\n },\n BigqueryDestination = new Gcp.Healthcare.Inputs.FhirStoreStreamConfigBigqueryDestinationArgs\n {\n DatasetUri = Output.Tuple(bqDataset.Project, bqDataset.DatasetId).Apply(values =\u003e\n {\n var project = values.Item1;\n var datasetId = values.Item2;\n return $\"bq://{project}.{datasetId}\";\n }),\n SchemaConfig = new Gcp.Healthcare.Inputs.FhirStoreStreamConfigBigqueryDestinationSchemaConfigArgs\n {\n RecursiveStructureDepth = 3,\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n bigqueryEditor,\n bigqueryJobUser,\n },\n });\n\n var topic = new Gcp.PubSub.Topic(\"topic\");\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigquery\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbigqueryEditor, err := projects.NewIAMMember(ctx, \"bigqueryEditor\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/bigquery.dataEditor\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-healthcare.iam.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbigqueryJobUser, err := projects.NewIAMMember(ctx, \"bigqueryJobUser\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/bigquery.jobUser\"),\n\t\t\tMember: pulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-healthcare.iam.gserviceaccount.com\", project.Number)),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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\tbqDataset, err := bigquery.NewDataset(ctx, \"bqDataset\", \u0026bigquery.DatasetArgs{\n\t\t\tDatasetId: pulumi.String(\"bq_example_dataset\"),\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\tDeleteContentsOnDestroy: pulumi.Bool(true),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = healthcare.NewFhirStore(ctx, \"default\", \u0026healthcare.FhirStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tVersion: pulumi.String(\"R4\"),\n\t\t\tEnableUpdateCreate: pulumi.Bool(false),\n\t\t\tDisableReferentialIntegrity: pulumi.Bool(false),\n\t\t\tDisableResourceVersioning: pulumi.Bool(false),\n\t\t\tEnableHistoryImport: pulumi.Bool(false),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t\tStreamConfigs: healthcare.FhirStoreStreamConfigArray{\n\t\t\t\t\u0026healthcare.FhirStoreStreamConfigArgs{\n\t\t\t\t\tResourceTypes: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"Observation\"),\n\t\t\t\t\t},\n\t\t\t\t\tBigqueryDestination: \u0026healthcare.FhirStoreStreamConfigBigqueryDestinationArgs{\n\t\t\t\t\t\tDatasetUri: pulumi.All(bqDataset.Project, bqDataset.DatasetId).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\t\t\tproject := _args[0].(string)\n\t\t\t\t\t\t\tdatasetId := _args[1].(string)\n\t\t\t\t\t\t\treturn fmt.Sprintf(\"bq://%v.%v\", project, datasetId), nil\n\t\t\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t\t\t\tSchemaConfig: \u0026healthcare.FhirStoreStreamConfigBigqueryDestinationSchemaConfigArgs{\n\t\t\t\t\t\t\tRecursiveStructureDepth: pulumi.Int(3),\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\tbigqueryEditor,\n\t\t\tbigqueryJobUser,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewTopic(ctx, \"topic\", 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.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.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.bigquery.Dataset;\nimport com.pulumi.gcp.bigquery.DatasetArgs;\nimport com.pulumi.gcp.healthcare.FhirStore;\nimport com.pulumi.gcp.healthcare.FhirStoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.FhirStoreStreamConfigArgs;\nimport com.pulumi.gcp.healthcare.inputs.FhirStoreStreamConfigBigqueryDestinationArgs;\nimport com.pulumi.gcp.healthcare.inputs.FhirStoreStreamConfigBigqueryDestinationSchemaConfigArgs;\nimport com.pulumi.gcp.pubsub.Topic;\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 bigqueryEditor = new IAMMember(\"bigqueryEditor\", IAMMemberArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/bigquery.dataEditor\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-healthcare.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var bigqueryJobUser = new IAMMember(\"bigqueryJobUser\", IAMMemberArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/bigquery.jobUser\")\n .member(String.format(\"serviceAccount:service-%s@gcp-sa-healthcare.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var bqDataset = new Dataset(\"bqDataset\", DatasetArgs.builder() \n .datasetId(\"bq_example_dataset\")\n .friendlyName(\"test\")\n .description(\"This is a test description\")\n .location(\"US\")\n .deleteContentsOnDestroy(true)\n .build());\n\n var default_ = new FhirStore(\"default\", FhirStoreArgs.builder() \n .dataset(dataset.id())\n .version(\"R4\")\n .enableUpdateCreate(false)\n .disableReferentialIntegrity(false)\n .disableResourceVersioning(false)\n .enableHistoryImport(false)\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .streamConfigs(FhirStoreStreamConfigArgs.builder()\n .resourceTypes(\"Observation\")\n .bigqueryDestination(FhirStoreStreamConfigBigqueryDestinationArgs.builder()\n .datasetUri(Output.tuple(bqDataset.project(), bqDataset.datasetId()).applyValue(values -\u003e {\n var project = values.t1;\n var datasetId = values.t2;\n return String.format(\"bq://%s.%s\", project.applyValue(getProjectResult -\u003e getProjectResult),datasetId);\n }))\n .schemaConfig(FhirStoreStreamConfigBigqueryDestinationSchemaConfigArgs.builder()\n .recursiveStructureDepth(3)\n .build())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn( \n bigqueryEditor,\n bigqueryJobUser)\n .build());\n\n var topic = new Topic(\"topic\");\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:FhirStore\n properties:\n dataset: ${dataset.id}\n version: R4\n enableUpdateCreate: false\n disableReferentialIntegrity: false\n disableResourceVersioning: false\n enableHistoryImport: false\n labels:\n label1: labelvalue1\n streamConfigs:\n - resourceTypes:\n - Observation\n bigqueryDestination:\n datasetUri: bq://${bqDataset.project}.${bqDataset.datasetId}\n schemaConfig:\n recursiveStructureDepth: 3\n options:\n dependson:\n - ${bigqueryEditor}\n - ${bigqueryJobUser}\n bigqueryEditor:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/bigquery.dataEditor\n member: serviceAccount:service-${project.number}@gcp-sa-healthcare.iam.gserviceaccount.com\n bigqueryJobUser:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/bigquery.jobUser\n member: serviceAccount:service-${project.number}@gcp-sa-healthcare.iam.gserviceaccount.com\n topic:\n type: gcp:pubsub:Topic\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n bqDataset:\n type: gcp:bigquery:Dataset\n properties:\n datasetId: bq_example_dataset\n friendlyName: test\n description: This is a test description\n location: US\n deleteContentsOnDestroy: true\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Fhir Store Notification Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst _default = new gcp.healthcare.FhirStore(\"default\", {\n dataset: dataset.id,\n version: \"R4\",\n enableUpdateCreate: false,\n disableReferentialIntegrity: false,\n disableResourceVersioning: false,\n enableHistoryImport: false,\n labels: {\n label1: \"labelvalue1\",\n },\n notificationConfigs: [{\n pubsubTopic: topic.id,\n sendFullResource: true,\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\")\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\ndefault = gcp.healthcare.FhirStore(\"default\",\n dataset=dataset.id,\n version=\"R4\",\n enable_update_create=False,\n disable_referential_integrity=False,\n disable_resource_versioning=False,\n enable_history_import=False,\n labels={\n \"label1\": \"labelvalue1\",\n },\n notification_configs=[gcp.healthcare.FhirStoreNotificationConfigArgs(\n pubsub_topic=topic.id,\n send_full_resource=True,\n )])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\");\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var @default = new Gcp.Healthcare.FhirStore(\"default\", new()\n {\n Dataset = dataset.Id,\n Version = \"R4\",\n EnableUpdateCreate = false,\n DisableReferentialIntegrity = false,\n DisableResourceVersioning = false,\n EnableHistoryImport = false,\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n NotificationConfigs = new[]\n {\n new Gcp.Healthcare.Inputs.FhirStoreNotificationConfigArgs\n {\n PubsubTopic = topic.Id,\n SendFullResource = true,\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\ttopic, err := pubsub.NewTopic(ctx, \"topic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewFhirStore(ctx, \"default\", \u0026healthcare.FhirStoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tVersion: pulumi.String(\"R4\"),\n\t\t\tEnableUpdateCreate: pulumi.Bool(false),\n\t\t\tDisableReferentialIntegrity: pulumi.Bool(false),\n\t\t\tDisableResourceVersioning: pulumi.Bool(false),\n\t\t\tEnableHistoryImport: pulumi.Bool(false),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t\tNotificationConfigs: healthcare.FhirStoreNotificationConfigArray{\n\t\t\t\t\u0026healthcare.FhirStoreNotificationConfigArgs{\n\t\t\t\t\tPubsubTopic: topic.ID(),\n\t\t\t\t\tSendFullResource: 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.pubsub.Topic;\nimport com.pulumi.gcp.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.FhirStore;\nimport com.pulumi.gcp.healthcare.FhirStoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.FhirStoreNotificationConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var topic = new Topic(\"topic\");\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var default_ = new FhirStore(\"default\", FhirStoreArgs.builder() \n .dataset(dataset.id())\n .version(\"R4\")\n .enableUpdateCreate(false)\n .disableReferentialIntegrity(false)\n .disableResourceVersioning(false)\n .enableHistoryImport(false)\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .notificationConfigs(FhirStoreNotificationConfigArgs.builder()\n .pubsubTopic(topic.id())\n .sendFullResource(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:healthcare:FhirStore\n properties:\n dataset: ${dataset.id}\n version: R4\n enableUpdateCreate: false\n disableReferentialIntegrity: false\n disableResourceVersioning: false\n enableHistoryImport: false\n labels:\n label1: labelvalue1\n notificationConfigs:\n - pubsubTopic: ${topic.id}\n sendFullResource: true\n topic:\n type: gcp:pubsub:Topic\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nFhirStore can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:healthcare/fhirStore:FhirStore default {{dataset}}/fhirStores/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:healthcare/fhirStore:FhirStore default {{dataset}}/{{name}}\n```\n\n ", "properties": { "dataset": { "type": "string", @@ -166656,7 +168103,7 @@ } }, "gcp:healthcare/fhirStoreIamBinding:FhirStoreIamBinding": { - "description": "Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case:\n\n* `gcp.healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached.\n* `gcp.healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved.\n* `gcp.healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved.\n\n\u003e **Note:** `gcp.healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.FhirStoreIamBinding` and `gcp.healthcare.FhirStoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_fhir\\_store\\_iam\\_policy\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst fhirStore = new gcp.healthcare.FhirStoreIamPolicy(\"fhirStore\", {\n fhirStoreId: \"your-fhir-store-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nfhir_store = gcp.healthcare.FhirStoreIamPolicy(\"fhirStore\",\n fhir_store_id=\"your-fhir-store-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var fhirStore = new Gcp.Healthcare.FhirStoreIamPolicy(\"fhirStore\", new()\n {\n FhirStoreId = \"your-fhir-store-id\",\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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = healthcare.NewFhirStoreIamPolicy(ctx, \"fhirStore\", \u0026healthcare.FhirStoreIamPolicyArgs{\n\t\t\tFhirStoreId: pulumi.String(\"your-fhir-store-id\"),\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.healthcare.FhirStoreIamPolicy;\nimport com.pulumi.gcp.healthcare.FhirStoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var fhirStore = new FhirStoreIamPolicy(\"fhirStore\", FhirStoreIamPolicyArgs.builder() \n .fhirStoreId(\"your-fhir-store-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n fhirStore:\n type: gcp:healthcare:FhirStoreIamPolicy\n properties:\n fhirStoreId: your-fhir-store-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_fhir\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst fhirStore = new gcp.healthcare.FhirStoreIamBinding(\"fhirStore\", {\n fhirStoreId: \"your-fhir-store-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfhir_store = gcp.healthcare.FhirStoreIamBinding(\"fhirStore\",\n fhir_store_id=\"your-fhir-store-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var fhirStore = new Gcp.Healthcare.FhirStoreIamBinding(\"fhirStore\", new()\n {\n FhirStoreId = \"your-fhir-store-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewFhirStoreIamBinding(ctx, \"fhirStore\", \u0026healthcare.FhirStoreIamBindingArgs{\n\t\t\tFhirStoreId: pulumi.String(\"your-fhir-store-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.FhirStoreIamBinding;\nimport com.pulumi.gcp.healthcare.FhirStoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var fhirStore = new FhirStoreIamBinding(\"fhirStore\", FhirStoreIamBindingArgs.builder() \n .fhirStoreId(\"your-fhir-store-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n fhirStore:\n type: gcp:healthcare:FhirStoreIamBinding\n properties:\n fhirStoreId: your-fhir-store-id\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_healthcare\\_fhir\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst fhirStore = new gcp.healthcare.FhirStoreIamMember(\"fhirStore\", {\n fhirStoreId: \"your-fhir-store-id\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfhir_store = gcp.healthcare.FhirStoreIamMember(\"fhirStore\",\n fhir_store_id=\"your-fhir-store-id\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var fhirStore = new Gcp.Healthcare.FhirStoreIamMember(\"fhirStore\", new()\n {\n FhirStoreId = \"your-fhir-store-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewFhirStoreIamMember(ctx, \"fhirStore\", \u0026healthcare.FhirStoreIamMemberArgs{\n\t\t\tFhirStoreId: pulumi.String(\"your-fhir-store-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.FhirStoreIamMember;\nimport com.pulumi.gcp.healthcare.FhirStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var fhirStore = new FhirStoreIamMember(\"fhirStore\", FhirStoreIamMemberArgs.builder() \n .fhirStoreId(\"your-fhir-store-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n fhirStore:\n type: gcp:healthcare:FhirStoreIamMember\n properties:\n fhirStoreId: your-fhir-store-id\n member: user:jane@example.com\n role: roles/editor\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `fhir_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamBinding:FhirStoreIamBinding fhir_store_iam \"your-project-id/location-name/dataset-name/fhir-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `fhir_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamBinding:FhirStoreIamBinding fhir_store_iam \"your-project-id/location-name/dataset-name/fhir-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `fhir_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamBinding:FhirStoreIamBinding fhir_store_iam your-project-id/location-name/dataset-name/fhir-store-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `fhir_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamBinding:FhirStoreIamBinding fhir_store_iam \"your-project-id/location-name/dataset-name/fhir-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `fhir_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamBinding:FhirStoreIamBinding fhir_store_iam \"your-project-id/location-name/dataset-name/fhir-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `fhir_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamBinding:FhirStoreIamBinding fhir_store_iam your-project-id/location-name/dataset-name/fhir-store-name\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:healthcare/FhirStoreIamBindingCondition:FhirStoreIamBindingCondition" @@ -166745,7 +168192,7 @@ } }, "gcp:healthcare/fhirStoreIamMember:FhirStoreIamMember": { - "description": "Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case:\n\n* `gcp.healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached.\n* `gcp.healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved.\n* `gcp.healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved.\n\n\u003e **Note:** `gcp.healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.FhirStoreIamBinding` and `gcp.healthcare.FhirStoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_fhir\\_store\\_iam\\_policy\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst fhirStore = new gcp.healthcare.FhirStoreIamPolicy(\"fhirStore\", {\n fhirStoreId: \"your-fhir-store-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nfhir_store = gcp.healthcare.FhirStoreIamPolicy(\"fhirStore\",\n fhir_store_id=\"your-fhir-store-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var fhirStore = new Gcp.Healthcare.FhirStoreIamPolicy(\"fhirStore\", new()\n {\n FhirStoreId = \"your-fhir-store-id\",\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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = healthcare.NewFhirStoreIamPolicy(ctx, \"fhirStore\", \u0026healthcare.FhirStoreIamPolicyArgs{\n\t\t\tFhirStoreId: pulumi.String(\"your-fhir-store-id\"),\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.healthcare.FhirStoreIamPolicy;\nimport com.pulumi.gcp.healthcare.FhirStoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var fhirStore = new FhirStoreIamPolicy(\"fhirStore\", FhirStoreIamPolicyArgs.builder() \n .fhirStoreId(\"your-fhir-store-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n fhirStore:\n type: gcp:healthcare:FhirStoreIamPolicy\n properties:\n fhirStoreId: your-fhir-store-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_fhir\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst fhirStore = new gcp.healthcare.FhirStoreIamBinding(\"fhirStore\", {\n fhirStoreId: \"your-fhir-store-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfhir_store = gcp.healthcare.FhirStoreIamBinding(\"fhirStore\",\n fhir_store_id=\"your-fhir-store-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var fhirStore = new Gcp.Healthcare.FhirStoreIamBinding(\"fhirStore\", new()\n {\n FhirStoreId = \"your-fhir-store-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewFhirStoreIamBinding(ctx, \"fhirStore\", \u0026healthcare.FhirStoreIamBindingArgs{\n\t\t\tFhirStoreId: pulumi.String(\"your-fhir-store-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.FhirStoreIamBinding;\nimport com.pulumi.gcp.healthcare.FhirStoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var fhirStore = new FhirStoreIamBinding(\"fhirStore\", FhirStoreIamBindingArgs.builder() \n .fhirStoreId(\"your-fhir-store-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n fhirStore:\n type: gcp:healthcare:FhirStoreIamBinding\n properties:\n fhirStoreId: your-fhir-store-id\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_healthcare\\_fhir\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst fhirStore = new gcp.healthcare.FhirStoreIamMember(\"fhirStore\", {\n fhirStoreId: \"your-fhir-store-id\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfhir_store = gcp.healthcare.FhirStoreIamMember(\"fhirStore\",\n fhir_store_id=\"your-fhir-store-id\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var fhirStore = new Gcp.Healthcare.FhirStoreIamMember(\"fhirStore\", new()\n {\n FhirStoreId = \"your-fhir-store-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewFhirStoreIamMember(ctx, \"fhirStore\", \u0026healthcare.FhirStoreIamMemberArgs{\n\t\t\tFhirStoreId: pulumi.String(\"your-fhir-store-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.FhirStoreIamMember;\nimport com.pulumi.gcp.healthcare.FhirStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var fhirStore = new FhirStoreIamMember(\"fhirStore\", FhirStoreIamMemberArgs.builder() \n .fhirStoreId(\"your-fhir-store-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n fhirStore:\n type: gcp:healthcare:FhirStoreIamMember\n properties:\n fhirStoreId: your-fhir-store-id\n member: user:jane@example.com\n role: roles/editor\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `fhir_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamMember:FhirStoreIamMember fhir_store_iam \"your-project-id/location-name/dataset-name/fhir-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `fhir_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamMember:FhirStoreIamMember fhir_store_iam \"your-project-id/location-name/dataset-name/fhir-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `fhir_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamMember:FhirStoreIamMember fhir_store_iam your-project-id/location-name/dataset-name/fhir-store-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `fhir_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamMember:FhirStoreIamMember fhir_store_iam \"your-project-id/location-name/dataset-name/fhir-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `fhir_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamMember:FhirStoreIamMember fhir_store_iam \"your-project-id/location-name/dataset-name/fhir-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `fhir_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamMember:FhirStoreIamMember fhir_store_iam your-project-id/location-name/dataset-name/fhir-store-name\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:healthcare/FhirStoreIamMemberCondition:FhirStoreIamMemberCondition" @@ -166827,7 +168274,7 @@ } }, "gcp:healthcare/fhirStoreIamPolicy:FhirStoreIamPolicy": { - "description": "Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case:\n\n* `gcp.healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached.\n* `gcp.healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved.\n* `gcp.healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved.\n\n\u003e **Note:** `gcp.healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.FhirStoreIamBinding` and `gcp.healthcare.FhirStoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_fhir\\_store\\_iam\\_policy\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst fhirStore = new gcp.healthcare.FhirStoreIamPolicy(\"fhirStore\", {\n fhirStoreId: \"your-fhir-store-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nfhir_store = gcp.healthcare.FhirStoreIamPolicy(\"fhirStore\",\n fhir_store_id=\"your-fhir-store-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var fhirStore = new Gcp.Healthcare.FhirStoreIamPolicy(\"fhirStore\", new()\n {\n FhirStoreId = \"your-fhir-store-id\",\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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = healthcare.NewFhirStoreIamPolicy(ctx, \"fhirStore\", \u0026healthcare.FhirStoreIamPolicyArgs{\n\t\t\tFhirStoreId: pulumi.String(\"your-fhir-store-id\"),\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.healthcare.FhirStoreIamPolicy;\nimport com.pulumi.gcp.healthcare.FhirStoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var fhirStore = new FhirStoreIamPolicy(\"fhirStore\", FhirStoreIamPolicyArgs.builder() \n .fhirStoreId(\"your-fhir-store-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n fhirStore:\n type: gcp:healthcare:FhirStoreIamPolicy\n properties:\n fhirStoreId: your-fhir-store-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_fhir\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst fhirStore = new gcp.healthcare.FhirStoreIamBinding(\"fhirStore\", {\n fhirStoreId: \"your-fhir-store-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfhir_store = gcp.healthcare.FhirStoreIamBinding(\"fhirStore\",\n fhir_store_id=\"your-fhir-store-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var fhirStore = new Gcp.Healthcare.FhirStoreIamBinding(\"fhirStore\", new()\n {\n FhirStoreId = \"your-fhir-store-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewFhirStoreIamBinding(ctx, \"fhirStore\", \u0026healthcare.FhirStoreIamBindingArgs{\n\t\t\tFhirStoreId: pulumi.String(\"your-fhir-store-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.FhirStoreIamBinding;\nimport com.pulumi.gcp.healthcare.FhirStoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var fhirStore = new FhirStoreIamBinding(\"fhirStore\", FhirStoreIamBindingArgs.builder() \n .fhirStoreId(\"your-fhir-store-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n fhirStore:\n type: gcp:healthcare:FhirStoreIamBinding\n properties:\n fhirStoreId: your-fhir-store-id\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_healthcare\\_fhir\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst fhirStore = new gcp.healthcare.FhirStoreIamMember(\"fhirStore\", {\n fhirStoreId: \"your-fhir-store-id\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfhir_store = gcp.healthcare.FhirStoreIamMember(\"fhirStore\",\n fhir_store_id=\"your-fhir-store-id\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var fhirStore = new Gcp.Healthcare.FhirStoreIamMember(\"fhirStore\", new()\n {\n FhirStoreId = \"your-fhir-store-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewFhirStoreIamMember(ctx, \"fhirStore\", \u0026healthcare.FhirStoreIamMemberArgs{\n\t\t\tFhirStoreId: pulumi.String(\"your-fhir-store-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.FhirStoreIamMember;\nimport com.pulumi.gcp.healthcare.FhirStoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var fhirStore = new FhirStoreIamMember(\"fhirStore\", FhirStoreIamMemberArgs.builder() \n .fhirStoreId(\"your-fhir-store-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n fhirStore:\n type: gcp:healthcare:FhirStoreIamMember\n properties:\n fhirStoreId: your-fhir-store-id\n member: user:jane@example.com\n role: roles/editor\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `fhir_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamPolicy:FhirStoreIamPolicy fhir_store_iam \"your-project-id/location-name/dataset-name/fhir-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `fhir_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamPolicy:FhirStoreIamPolicy fhir_store_iam \"your-project-id/location-name/dataset-name/fhir-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `fhir_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamPolicy:FhirStoreIamPolicy fhir_store_iam your-project-id/location-name/dataset-name/fhir-store-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `fhir_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamPolicy:FhirStoreIamPolicy fhir_store_iam \"your-project-id/location-name/dataset-name/fhir-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `fhir_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamPolicy:FhirStoreIamPolicy fhir_store_iam \"your-project-id/location-name/dataset-name/fhir-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `fhir_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/fhirStoreIamPolicy:FhirStoreIamPolicy fhir_store_iam your-project-id/location-name/dataset-name/fhir-store-name\n```\n\n ", "properties": { "etag": { "type": "string", @@ -166883,7 +168330,7 @@ } }, "gcp:healthcare/hl7Store:Hl7Store": { - "description": "A Hl7V2Store is a datastore inside a Healthcare dataset that conforms to the FHIR (https://www.hl7.org/hl7V2/STU3/)\nstandard for Healthcare information exchange\n\nTo get more information about Hl7V2Store, see:\n\n* [API documentation](https://cloud.google.com/healthcare/docs/reference/rest/v1/projects.locations.datasets.hl7V2Stores)\n* How-to Guides\n * [Creating a HL7v2 Store](https://cloud.google.com/healthcare/docs/how-tos/hl7v2)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Healthcare Hl7 V2 Store Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst store = new gcp.healthcare.Hl7Store(\"store\", {\n dataset: dataset.id,\n notificationConfigs: [{\n pubsubTopic: topic.id,\n }],\n labels: {\n label1: \"labelvalue1\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\")\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\nstore = gcp.healthcare.Hl7Store(\"store\",\n dataset=dataset.id,\n notification_configs=[gcp.healthcare.Hl7StoreNotificationConfigsArgs(\n pubsub_topic=topic.id,\n )],\n labels={\n \"label1\": \"labelvalue1\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\");\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var store = new Gcp.Healthcare.Hl7Store(\"store\", new()\n {\n Dataset = dataset.Id,\n NotificationConfigs = new[]\n {\n new Gcp.Healthcare.Inputs.Hl7StoreNotificationConfigsArgs\n {\n PubsubTopic = topic.Id,\n },\n },\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\ttopic, err := pubsub.NewTopic(ctx, \"topic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewHl7Store(ctx, \"store\", \u0026healthcare.Hl7StoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tNotificationConfigs: healthcare.Hl7StoreNotificationConfigsArray{\n\t\t\t\t\u0026healthcare.Hl7StoreNotificationConfigsArgs{\n\t\t\t\t\tPubsubTopic: topic.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.Hl7Store;\nimport com.pulumi.gcp.healthcare.Hl7StoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.Hl7StoreNotificationConfigsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var topic = new Topic(\"topic\");\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var store = new Hl7Store(\"store\", Hl7StoreArgs.builder() \n .dataset(dataset.id())\n .notificationConfigs(Hl7StoreNotificationConfigsArgs.builder()\n .pubsubTopic(topic.id())\n .build())\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n store:\n type: gcp:healthcare:Hl7Store\n properties:\n dataset: ${dataset.id}\n notificationConfigs:\n - pubsubTopic: ${topic.id}\n labels:\n label1: labelvalue1\n topic:\n type: gcp:pubsub:Topic\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Hl7 V2 Store Parser Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"}, {\n provider: google_beta,\n});\nconst store = new gcp.healthcare.Hl7Store(\"store\", {\n dataset: dataset.id,\n parserConfig: {\n allowNullHeader: false,\n segmentTerminator: \"Jw==\",\n schema: `{\n \"schemas\": [{\n \"messageSchemaConfigs\": {\n \"ADT_A01\": {\n \"name\": \"ADT_A01\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1,\n \"members\": [{\n \"segment\": {\n \"type\": \"MSH\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"EVN\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"PID\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ZPD\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"OBX\"\n }\n },\n {\n \"group\": {\n \"name\": \"PROCEDURE\",\n \"members\": [{\n \"segment\": {\n \"type\": \"PR1\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ROL\"\n }\n }\n ]\n }\n },\n {\n \"segment\": {\n \"type\": \"PDA\",\n \"maxOccurs\": 1\n }\n }\n ]\n }\n }\n }],\n \"types\": [{\n \"type\": [{\n \"name\": \"ZPD\",\n \"primitive\": \"VARIES\"\n }\n\n ]\n }],\n \"ignoreMinOccurs\": true\n}\n`,\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\",\nopts=pulumi.ResourceOptions(provider=google_beta))\nstore = gcp.healthcare.Hl7Store(\"store\",\n dataset=dataset.id,\n parser_config=gcp.healthcare.Hl7StoreParserConfigArgs(\n allow_null_header=False,\n segment_terminator=\"Jw==\",\n schema=\"\"\"{\n \"schemas\": [{\n \"messageSchemaConfigs\": {\n \"ADT_A01\": {\n \"name\": \"ADT_A01\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1,\n \"members\": [{\n \"segment\": {\n \"type\": \"MSH\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"EVN\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"PID\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ZPD\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"OBX\"\n }\n },\n {\n \"group\": {\n \"name\": \"PROCEDURE\",\n \"members\": [{\n \"segment\": {\n \"type\": \"PR1\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ROL\"\n }\n }\n ]\n }\n },\n {\n \"segment\": {\n \"type\": \"PDA\",\n \"maxOccurs\": 1\n }\n }\n ]\n }\n }\n }],\n \"types\": [{\n \"type\": [{\n \"name\": \"ZPD\",\n \"primitive\": \"VARIES\"\n }\n\n ]\n }],\n \"ignoreMinOccurs\": true\n}\n\"\"\",\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var store = new Gcp.Healthcare.Hl7Store(\"store\", new()\n {\n Dataset = dataset.Id,\n ParserConfig = new Gcp.Healthcare.Inputs.Hl7StoreParserConfigArgs\n {\n AllowNullHeader = false,\n SegmentTerminator = \"Jw==\",\n Schema = @\"{\n \"\"schemas\"\": [{\n \"\"messageSchemaConfigs\"\": {\n \"\"ADT_A01\"\": {\n \"\"name\"\": \"\"ADT_A01\"\",\n \"\"minOccurs\"\": 1,\n \"\"maxOccurs\"\": 1,\n \"\"members\"\": [{\n \"\"segment\"\": {\n \"\"type\"\": \"\"MSH\"\",\n \"\"minOccurs\"\": 1,\n \"\"maxOccurs\"\": 1\n }\n },\n {\n \"\"segment\"\": {\n \"\"type\"\": \"\"EVN\"\",\n \"\"minOccurs\"\": 1,\n \"\"maxOccurs\"\": 1\n }\n },\n {\n \"\"segment\"\": {\n \"\"type\"\": \"\"PID\"\",\n \"\"minOccurs\"\": 1,\n \"\"maxOccurs\"\": 1\n }\n },\n {\n \"\"segment\"\": {\n \"\"type\"\": \"\"ZPD\"\",\n \"\"minOccurs\"\": 1,\n \"\"maxOccurs\"\": 1\n }\n },\n {\n \"\"segment\"\": {\n \"\"type\"\": \"\"OBX\"\"\n }\n },\n {\n \"\"group\"\": {\n \"\"name\"\": \"\"PROCEDURE\"\",\n \"\"members\"\": [{\n \"\"segment\"\": {\n \"\"type\"\": \"\"PR1\"\",\n \"\"minOccurs\"\": 1,\n \"\"maxOccurs\"\": 1\n }\n },\n {\n \"\"segment\"\": {\n \"\"type\"\": \"\"ROL\"\"\n }\n }\n ]\n }\n },\n {\n \"\"segment\"\": {\n \"\"type\"\": \"\"PDA\"\",\n \"\"maxOccurs\"\": 1\n }\n }\n ]\n }\n }\n }],\n \"\"types\"\": [{\n \"\"type\"\": [{\n \"\"name\"\": \"\"ZPD\"\",\n \"\"primitive\"\": \"\"VARIES\"\"\n }\n\n ]\n }],\n \"\"ignoreMinOccurs\"\": true\n}\n\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = healthcare.NewHl7Store(ctx, \"store\", \u0026healthcare.Hl7StoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tParserConfig: \u0026healthcare.Hl7StoreParserConfigArgs{\n\t\t\t\tAllowNullHeader: pulumi.Bool(false),\n\t\t\t\tSegmentTerminator: pulumi.String(\"Jw==\"),\n\t\t\t\tSchema: pulumi.String(fmt.Sprintf(`{\n \"schemas\": [{\n \"messageSchemaConfigs\": {\n \"ADT_A01\": {\n \"name\": \"ADT_A01\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1,\n \"members\": [{\n \"segment\": {\n \"type\": \"MSH\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"EVN\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"PID\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ZPD\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"OBX\"\n }\n },\n {\n \"group\": {\n \"name\": \"PROCEDURE\",\n \"members\": [{\n \"segment\": {\n \"type\": \"PR1\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ROL\"\n }\n }\n ]\n }\n },\n {\n \"segment\": {\n \"type\": \"PDA\",\n \"maxOccurs\": 1\n }\n }\n ]\n }\n }\n }],\n \"types\": [{\n \"type\": [{\n \"name\": \"ZPD\",\n \"primitive\": \"VARIES\"\n }\n\n ]\n }],\n \"ignoreMinOccurs\": true\n}\n`)),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.Hl7Store;\nimport com.pulumi.gcp.healthcare.Hl7StoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.Hl7StoreParserConfigArgs;\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 dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var store = new Hl7Store(\"store\", Hl7StoreArgs.builder() \n .dataset(dataset.id())\n .parserConfig(Hl7StoreParserConfigArgs.builder()\n .allowNullHeader(false)\n .segmentTerminator(\"Jw==\")\n .schema(\"\"\"\n{\n \"schemas\": [{\n \"messageSchemaConfigs\": {\n \"ADT_A01\": {\n \"name\": \"ADT_A01\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1,\n \"members\": [{\n \"segment\": {\n \"type\": \"MSH\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"EVN\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"PID\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ZPD\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"OBX\"\n }\n },\n {\n \"group\": {\n \"name\": \"PROCEDURE\",\n \"members\": [{\n \"segment\": {\n \"type\": \"PR1\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ROL\"\n }\n }\n ]\n }\n },\n {\n \"segment\": {\n \"type\": \"PDA\",\n \"maxOccurs\": 1\n }\n }\n ]\n }\n }\n }],\n \"types\": [{\n \"type\": [{\n \"name\": \"ZPD\",\n \"primitive\": \"VARIES\"\n }\n\n ]\n }],\n \"ignoreMinOccurs\": true\n}\n \"\"\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n store:\n type: gcp:healthcare:Hl7Store\n properties:\n dataset: ${dataset.id}\n parserConfig:\n allowNullHeader: false\n segmentTerminator: Jw==\n schema: |\n {\n \"schemas\": [{\n \"messageSchemaConfigs\": {\n \"ADT_A01\": {\n \"name\": \"ADT_A01\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1,\n \"members\": [{\n \"segment\": {\n \"type\": \"MSH\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"EVN\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"PID\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ZPD\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"OBX\"\n }\n },\n {\n \"group\": {\n \"name\": \"PROCEDURE\",\n \"members\": [{\n \"segment\": {\n \"type\": \"PR1\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ROL\"\n }\n }\n ]\n }\n },\n {\n \"segment\": {\n \"type\": \"PDA\",\n \"maxOccurs\": 1\n }\n }\n ]\n }\n }\n }],\n \"types\": [{\n \"type\": [{\n \"name\": \"ZPD\",\n \"primitive\": \"VARIES\"\n }\n\n ]\n }],\n \"ignoreMinOccurs\": true\n }\n options:\n provider: ${[\"google-beta\"]}\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Hl7 V2 Store Unschematized\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"}, {\n provider: google_beta,\n});\nconst store = new gcp.healthcare.Hl7Store(\"store\", {\n dataset: dataset.id,\n parserConfig: {\n allowNullHeader: false,\n segmentTerminator: \"Jw==\",\n version: \"V2\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\",\nopts=pulumi.ResourceOptions(provider=google_beta))\nstore = gcp.healthcare.Hl7Store(\"store\",\n dataset=dataset.id,\n parser_config=gcp.healthcare.Hl7StoreParserConfigArgs(\n allow_null_header=False,\n segment_terminator=\"Jw==\",\n version=\"V2\",\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var store = new Gcp.Healthcare.Hl7Store(\"store\", new()\n {\n Dataset = dataset.Id,\n ParserConfig = new Gcp.Healthcare.Inputs.Hl7StoreParserConfigArgs\n {\n AllowNullHeader = false,\n SegmentTerminator = \"Jw==\",\n Version = \"V2\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = healthcare.NewHl7Store(ctx, \"store\", \u0026healthcare.Hl7StoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tParserConfig: \u0026healthcare.Hl7StoreParserConfigArgs{\n\t\t\t\tAllowNullHeader: pulumi.Bool(false),\n\t\t\t\tSegmentTerminator: pulumi.String(\"Jw==\"),\n\t\t\t\tVersion: pulumi.String(\"V2\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.Hl7Store;\nimport com.pulumi.gcp.healthcare.Hl7StoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.Hl7StoreParserConfigArgs;\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 dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var store = new Hl7Store(\"store\", Hl7StoreArgs.builder() \n .dataset(dataset.id())\n .parserConfig(Hl7StoreParserConfigArgs.builder()\n .allowNullHeader(false)\n .segmentTerminator(\"Jw==\")\n .version(\"V2\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n store:\n type: gcp:healthcare:Hl7Store\n properties:\n dataset: ${dataset.id}\n parserConfig:\n allowNullHeader: false\n segmentTerminator: Jw==\n version: V2\n options:\n provider: ${[\"google-beta\"]}\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nHl7V2Store can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:healthcare/hl7Store:Hl7Store default {{dataset}}/hl7V2Stores/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:healthcare/hl7Store:Hl7Store default {{dataset}}/{{name}}\n```\n\n ", + "description": "A Hl7V2Store is a datastore inside a Healthcare dataset that conforms to the FHIR (https://www.hl7.org/hl7V2/STU3/)\nstandard for Healthcare information exchange\n\n\nTo get more information about Hl7V2Store, see:\n\n* [API documentation](https://cloud.google.com/healthcare/docs/reference/rest/v1/projects.locations.datasets.hl7V2Stores)\n* How-to Guides\n * [Creating a HL7v2 Store](https://cloud.google.com/healthcare/docs/how-tos/hl7v2)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Healthcare Hl7 V2 Store Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst topic = new gcp.pubsub.Topic(\"topic\", {});\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"});\nconst store = new gcp.healthcare.Hl7Store(\"store\", {\n dataset: dataset.id,\n notificationConfigs: [{\n pubsubTopic: topic.id,\n }],\n labels: {\n label1: \"labelvalue1\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ntopic = gcp.pubsub.Topic(\"topic\")\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\")\nstore = gcp.healthcare.Hl7Store(\"store\",\n dataset=dataset.id,\n notification_configs=[gcp.healthcare.Hl7StoreNotificationConfigsArgs(\n pubsub_topic=topic.id,\n )],\n labels={\n \"label1\": \"labelvalue1\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var topic = new Gcp.PubSub.Topic(\"topic\");\n\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n });\n\n var store = new Gcp.Healthcare.Hl7Store(\"store\", new()\n {\n Dataset = dataset.Id,\n NotificationConfigs = new[]\n {\n new Gcp.Healthcare.Inputs.Hl7StoreNotificationConfigsArgs\n {\n PubsubTopic = topic.Id,\n },\n },\n Labels = \n {\n { \"label1\", \"labelvalue1\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\ttopic, err := pubsub.NewTopic(ctx, \"topic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\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 = healthcare.NewHl7Store(ctx, \"store\", \u0026healthcare.Hl7StoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tNotificationConfigs: healthcare.Hl7StoreNotificationConfigsArray{\n\t\t\t\t\u0026healthcare.Hl7StoreNotificationConfigsArgs{\n\t\t\t\t\tPubsubTopic: topic.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label1\": pulumi.String(\"labelvalue1\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.Hl7Store;\nimport com.pulumi.gcp.healthcare.Hl7StoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.Hl7StoreNotificationConfigsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var topic = new Topic(\"topic\");\n\n var dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var store = new Hl7Store(\"store\", Hl7StoreArgs.builder() \n .dataset(dataset.id())\n .notificationConfigs(Hl7StoreNotificationConfigsArgs.builder()\n .pubsubTopic(topic.id())\n .build())\n .labels(Map.of(\"label1\", \"labelvalue1\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n store:\n type: gcp:healthcare:Hl7Store\n properties:\n dataset: ${dataset.id}\n notificationConfigs:\n - pubsubTopic: ${topic.id}\n labels:\n label1: labelvalue1\n topic:\n type: gcp:pubsub:Topic\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Hl7 V2 Store Parser Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"}, {\n provider: google_beta,\n});\nconst store = new gcp.healthcare.Hl7Store(\"store\", {\n dataset: dataset.id,\n parserConfig: {\n allowNullHeader: false,\n segmentTerminator: \"Jw==\",\n schema: `{\n \"schemas\": [{\n \"messageSchemaConfigs\": {\n \"ADT_A01\": {\n \"name\": \"ADT_A01\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1,\n \"members\": [{\n \"segment\": {\n \"type\": \"MSH\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"EVN\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"PID\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ZPD\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"OBX\"\n }\n },\n {\n \"group\": {\n \"name\": \"PROCEDURE\",\n \"members\": [{\n \"segment\": {\n \"type\": \"PR1\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ROL\"\n }\n }\n ]\n }\n },\n {\n \"segment\": {\n \"type\": \"PDA\",\n \"maxOccurs\": 1\n }\n }\n ]\n }\n }\n }],\n \"types\": [{\n \"type\": [{\n \"name\": \"ZPD\",\n \"primitive\": \"VARIES\"\n }\n\n ]\n }],\n \"ignoreMinOccurs\": true\n}\n`,\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\",\nopts=pulumi.ResourceOptions(provider=google_beta))\nstore = gcp.healthcare.Hl7Store(\"store\",\n dataset=dataset.id,\n parser_config=gcp.healthcare.Hl7StoreParserConfigArgs(\n allow_null_header=False,\n segment_terminator=\"Jw==\",\n schema=\"\"\"{\n \"schemas\": [{\n \"messageSchemaConfigs\": {\n \"ADT_A01\": {\n \"name\": \"ADT_A01\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1,\n \"members\": [{\n \"segment\": {\n \"type\": \"MSH\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"EVN\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"PID\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ZPD\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"OBX\"\n }\n },\n {\n \"group\": {\n \"name\": \"PROCEDURE\",\n \"members\": [{\n \"segment\": {\n \"type\": \"PR1\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ROL\"\n }\n }\n ]\n }\n },\n {\n \"segment\": {\n \"type\": \"PDA\",\n \"maxOccurs\": 1\n }\n }\n ]\n }\n }\n }],\n \"types\": [{\n \"type\": [{\n \"name\": \"ZPD\",\n \"primitive\": \"VARIES\"\n }\n\n ]\n }],\n \"ignoreMinOccurs\": true\n}\n\"\"\",\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var store = new Gcp.Healthcare.Hl7Store(\"store\", new()\n {\n Dataset = dataset.Id,\n ParserConfig = new Gcp.Healthcare.Inputs.Hl7StoreParserConfigArgs\n {\n AllowNullHeader = false,\n SegmentTerminator = \"Jw==\",\n Schema = @\"{\n \"\"schemas\"\": [{\n \"\"messageSchemaConfigs\"\": {\n \"\"ADT_A01\"\": {\n \"\"name\"\": \"\"ADT_A01\"\",\n \"\"minOccurs\"\": 1,\n \"\"maxOccurs\"\": 1,\n \"\"members\"\": [{\n \"\"segment\"\": {\n \"\"type\"\": \"\"MSH\"\",\n \"\"minOccurs\"\": 1,\n \"\"maxOccurs\"\": 1\n }\n },\n {\n \"\"segment\"\": {\n \"\"type\"\": \"\"EVN\"\",\n \"\"minOccurs\"\": 1,\n \"\"maxOccurs\"\": 1\n }\n },\n {\n \"\"segment\"\": {\n \"\"type\"\": \"\"PID\"\",\n \"\"minOccurs\"\": 1,\n \"\"maxOccurs\"\": 1\n }\n },\n {\n \"\"segment\"\": {\n \"\"type\"\": \"\"ZPD\"\",\n \"\"minOccurs\"\": 1,\n \"\"maxOccurs\"\": 1\n }\n },\n {\n \"\"segment\"\": {\n \"\"type\"\": \"\"OBX\"\"\n }\n },\n {\n \"\"group\"\": {\n \"\"name\"\": \"\"PROCEDURE\"\",\n \"\"members\"\": [{\n \"\"segment\"\": {\n \"\"type\"\": \"\"PR1\"\",\n \"\"minOccurs\"\": 1,\n \"\"maxOccurs\"\": 1\n }\n },\n {\n \"\"segment\"\": {\n \"\"type\"\": \"\"ROL\"\"\n }\n }\n ]\n }\n },\n {\n \"\"segment\"\": {\n \"\"type\"\": \"\"PDA\"\",\n \"\"maxOccurs\"\": 1\n }\n }\n ]\n }\n }\n }],\n \"\"types\"\": [{\n \"\"type\"\": [{\n \"\"name\"\": \"\"ZPD\"\",\n \"\"primitive\"\": \"\"VARIES\"\"\n }\n\n ]\n }],\n \"\"ignoreMinOccurs\"\": true\n}\n\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = healthcare.NewHl7Store(ctx, \"store\", \u0026healthcare.Hl7StoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tParserConfig: \u0026healthcare.Hl7StoreParserConfigArgs{\n\t\t\t\tAllowNullHeader: pulumi.Bool(false),\n\t\t\t\tSegmentTerminator: pulumi.String(\"Jw==\"),\n\t\t\t\tSchema: pulumi.String(fmt.Sprintf(`{\n \"schemas\": [{\n \"messageSchemaConfigs\": {\n \"ADT_A01\": {\n \"name\": \"ADT_A01\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1,\n \"members\": [{\n \"segment\": {\n \"type\": \"MSH\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"EVN\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"PID\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ZPD\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"OBX\"\n }\n },\n {\n \"group\": {\n \"name\": \"PROCEDURE\",\n \"members\": [{\n \"segment\": {\n \"type\": \"PR1\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ROL\"\n }\n }\n ]\n }\n },\n {\n \"segment\": {\n \"type\": \"PDA\",\n \"maxOccurs\": 1\n }\n }\n ]\n }\n }\n }],\n \"types\": [{\n \"type\": [{\n \"name\": \"ZPD\",\n \"primitive\": \"VARIES\"\n }\n\n ]\n }],\n \"ignoreMinOccurs\": true\n}\n`)),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.Hl7Store;\nimport com.pulumi.gcp.healthcare.Hl7StoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.Hl7StoreParserConfigArgs;\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 dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var store = new Hl7Store(\"store\", Hl7StoreArgs.builder() \n .dataset(dataset.id())\n .parserConfig(Hl7StoreParserConfigArgs.builder()\n .allowNullHeader(false)\n .segmentTerminator(\"Jw==\")\n .schema(\"\"\"\n{\n \"schemas\": [{\n \"messageSchemaConfigs\": {\n \"ADT_A01\": {\n \"name\": \"ADT_A01\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1,\n \"members\": [{\n \"segment\": {\n \"type\": \"MSH\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"EVN\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"PID\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ZPD\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"OBX\"\n }\n },\n {\n \"group\": {\n \"name\": \"PROCEDURE\",\n \"members\": [{\n \"segment\": {\n \"type\": \"PR1\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ROL\"\n }\n }\n ]\n }\n },\n {\n \"segment\": {\n \"type\": \"PDA\",\n \"maxOccurs\": 1\n }\n }\n ]\n }\n }\n }],\n \"types\": [{\n \"type\": [{\n \"name\": \"ZPD\",\n \"primitive\": \"VARIES\"\n }\n\n ]\n }],\n \"ignoreMinOccurs\": true\n}\n \"\"\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n store:\n type: gcp:healthcare:Hl7Store\n properties:\n dataset: ${dataset.id}\n parserConfig:\n allowNullHeader: false\n segmentTerminator: Jw==\n schema: |\n {\n \"schemas\": [{\n \"messageSchemaConfigs\": {\n \"ADT_A01\": {\n \"name\": \"ADT_A01\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1,\n \"members\": [{\n \"segment\": {\n \"type\": \"MSH\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"EVN\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"PID\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ZPD\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"OBX\"\n }\n },\n {\n \"group\": {\n \"name\": \"PROCEDURE\",\n \"members\": [{\n \"segment\": {\n \"type\": \"PR1\",\n \"minOccurs\": 1,\n \"maxOccurs\": 1\n }\n },\n {\n \"segment\": {\n \"type\": \"ROL\"\n }\n }\n ]\n }\n },\n {\n \"segment\": {\n \"type\": \"PDA\",\n \"maxOccurs\": 1\n }\n }\n ]\n }\n }\n }],\n \"types\": [{\n \"type\": [{\n \"name\": \"ZPD\",\n \"primitive\": \"VARIES\"\n }\n\n ]\n }],\n \"ignoreMinOccurs\": true\n }\n options:\n provider: ${[\"google-beta\"]}\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Healthcare Hl7 V2 Store Unschematized\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst dataset = new gcp.healthcare.Dataset(\"dataset\", {location: \"us-central1\"}, {\n provider: google_beta,\n});\nconst store = new gcp.healthcare.Hl7Store(\"store\", {\n dataset: dataset.id,\n parserConfig: {\n allowNullHeader: false,\n segmentTerminator: \"Jw==\",\n version: \"V2\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndataset = gcp.healthcare.Dataset(\"dataset\", location=\"us-central1\",\nopts=pulumi.ResourceOptions(provider=google_beta))\nstore = gcp.healthcare.Hl7Store(\"store\",\n dataset=dataset.id,\n parser_config=gcp.healthcare.Hl7StoreParserConfigArgs(\n allow_null_header=False,\n segment_terminator=\"Jw==\",\n version=\"V2\",\n ),\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dataset = new Gcp.Healthcare.Dataset(\"dataset\", new()\n {\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var store = new Gcp.Healthcare.Hl7Store(\"store\", new()\n {\n Dataset = dataset.Id,\n ParserConfig = new Gcp.Healthcare.Inputs.Hl7StoreParserConfigArgs\n {\n AllowNullHeader = false,\n SegmentTerminator = \"Jw==\",\n Version = \"V2\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdataset, err := healthcare.NewDataset(ctx, \"dataset\", \u0026healthcare.DatasetArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = healthcare.NewHl7Store(ctx, \"store\", \u0026healthcare.Hl7StoreArgs{\n\t\t\tDataset: dataset.ID(),\n\t\t\tParserConfig: \u0026healthcare.Hl7StoreParserConfigArgs{\n\t\t\t\tAllowNullHeader: pulumi.Bool(false),\n\t\t\t\tSegmentTerminator: pulumi.String(\"Jw==\"),\n\t\t\t\tVersion: pulumi.String(\"V2\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Dataset;\nimport com.pulumi.gcp.healthcare.DatasetArgs;\nimport com.pulumi.gcp.healthcare.Hl7Store;\nimport com.pulumi.gcp.healthcare.Hl7StoreArgs;\nimport com.pulumi.gcp.healthcare.inputs.Hl7StoreParserConfigArgs;\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 dataset = new Dataset(\"dataset\", DatasetArgs.builder() \n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var store = new Hl7Store(\"store\", Hl7StoreArgs.builder() \n .dataset(dataset.id())\n .parserConfig(Hl7StoreParserConfigArgs.builder()\n .allowNullHeader(false)\n .segmentTerminator(\"Jw==\")\n .version(\"V2\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n store:\n type: gcp:healthcare:Hl7Store\n properties:\n dataset: ${dataset.id}\n parserConfig:\n allowNullHeader: false\n segmentTerminator: Jw==\n version: V2\n options:\n provider: ${[\"google-beta\"]}\n dataset:\n type: gcp:healthcare:Dataset\n properties:\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nHl7V2Store can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:healthcare/hl7Store:Hl7Store default {{dataset}}/hl7V2Stores/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:healthcare/hl7Store:Hl7Store default {{dataset}}/{{name}}\n```\n\n ", "properties": { "dataset": { "type": "string", @@ -167010,7 +168457,7 @@ } }, "gcp:healthcare/hl7StoreIamBinding:Hl7StoreIamBinding": { - "description": "Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case:\n\n* `gcp.healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached.\n* `gcp.healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved.\n* `gcp.healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved.\n\n\u003e **Note:** `gcp.healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.Hl7StoreIamBinding` and `gcp.healthcare.Hl7StoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_policy\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst hl7V2Store = new gcp.healthcare.Hl7StoreIamPolicy(\"hl7V2Store\", {\n hl7V2StoreId: \"your-hl7-v2-store-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nhl7_v2_store = gcp.healthcare.Hl7StoreIamPolicy(\"hl7V2Store\",\n hl7_v2_store_id=\"your-hl7-v2-store-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamPolicy(\"hl7V2Store\", new()\n {\n Hl7V2StoreId = \"your-hl7-v2-store-id\",\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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = healthcare.NewHl7StoreIamPolicy(ctx, \"hl7V2Store\", \u0026healthcare.Hl7StoreIamPolicyArgs{\n\t\t\tHl7V2StoreId: pulumi.String(\"your-hl7-v2-store-id\"),\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.healthcare.Hl7StoreIamPolicy;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var hl7V2Store = new Hl7StoreIamPolicy(\"hl7V2Store\", Hl7StoreIamPolicyArgs.builder() \n .hl7V2StoreId(\"your-hl7-v2-store-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hl7V2Store:\n type: gcp:healthcare:Hl7StoreIamPolicy\n properties:\n hl7V2StoreId: your-hl7-v2-store-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst hl7V2Store = new gcp.healthcare.Hl7StoreIamBinding(\"hl7V2Store\", {\n hl7V2StoreId: \"your-hl7-v2-store-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhl7_v2_store = gcp.healthcare.Hl7StoreIamBinding(\"hl7V2Store\",\n hl7_v2_store_id=\"your-hl7-v2-store-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamBinding(\"hl7V2Store\", new()\n {\n Hl7V2StoreId = \"your-hl7-v2-store-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewHl7StoreIamBinding(ctx, \"hl7V2Store\", \u0026healthcare.Hl7StoreIamBindingArgs{\n\t\t\tHl7V2StoreId: pulumi.String(\"your-hl7-v2-store-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamBinding;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var hl7V2Store = new Hl7StoreIamBinding(\"hl7V2Store\", Hl7StoreIamBindingArgs.builder() \n .hl7V2StoreId(\"your-hl7-v2-store-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hl7V2Store:\n type: gcp:healthcare:Hl7StoreIamBinding\n properties:\n hl7V2StoreId: your-hl7-v2-store-id\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst hl7V2Store = new gcp.healthcare.Hl7StoreIamMember(\"hl7V2Store\", {\n hl7V2StoreId: \"your-hl7-v2-store-id\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhl7_v2_store = gcp.healthcare.Hl7StoreIamMember(\"hl7V2Store\",\n hl7_v2_store_id=\"your-hl7-v2-store-id\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamMember(\"hl7V2Store\", new()\n {\n Hl7V2StoreId = \"your-hl7-v2-store-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewHl7StoreIamMember(ctx, \"hl7V2Store\", \u0026healthcare.Hl7StoreIamMemberArgs{\n\t\t\tHl7V2StoreId: pulumi.String(\"your-hl7-v2-store-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamMember;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var hl7V2Store = new Hl7StoreIamMember(\"hl7V2Store\", Hl7StoreIamMemberArgs.builder() \n .hl7V2StoreId(\"your-hl7-v2-store-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hl7V2Store:\n type: gcp:healthcare:Hl7StoreIamMember\n properties:\n hl7V2StoreId: your-hl7-v2-store-id\n member: user:jane@example.com\n role: roles/editor\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `hl7_v2_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamBinding:Hl7StoreIamBinding hl7_v2_store_iam \"your-project-id/location-name/dataset-name/hl7-v2-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `hl7_v2_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamBinding:Hl7StoreIamBinding hl7_v2_store_iam \"your-project-id/location-name/dataset-name/hl7-v2-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `hl7_v2_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamBinding:Hl7StoreIamBinding hl7_v2_store_iam your-project-id/location-name/dataset-name/hl7-v2-store-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `hl7_v2_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamBinding:Hl7StoreIamBinding hl7_v2_store_iam \"your-project-id/location-name/dataset-name/hl7-v2-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `hl7_v2_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamBinding:Hl7StoreIamBinding hl7_v2_store_iam \"your-project-id/location-name/dataset-name/hl7-v2-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `hl7_v2_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamBinding:Hl7StoreIamBinding hl7_v2_store_iam your-project-id/location-name/dataset-name/hl7-v2-store-name\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:healthcare/Hl7StoreIamBindingCondition:Hl7StoreIamBindingCondition" @@ -167099,7 +168546,7 @@ } }, "gcp:healthcare/hl7StoreIamMember:Hl7StoreIamMember": { - "description": "Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case:\n\n* `gcp.healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached.\n* `gcp.healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved.\n* `gcp.healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved.\n\n\u003e **Note:** `gcp.healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.Hl7StoreIamBinding` and `gcp.healthcare.Hl7StoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_policy\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst hl7V2Store = new gcp.healthcare.Hl7StoreIamPolicy(\"hl7V2Store\", {\n hl7V2StoreId: \"your-hl7-v2-store-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nhl7_v2_store = gcp.healthcare.Hl7StoreIamPolicy(\"hl7V2Store\",\n hl7_v2_store_id=\"your-hl7-v2-store-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamPolicy(\"hl7V2Store\", new()\n {\n Hl7V2StoreId = \"your-hl7-v2-store-id\",\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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = healthcare.NewHl7StoreIamPolicy(ctx, \"hl7V2Store\", \u0026healthcare.Hl7StoreIamPolicyArgs{\n\t\t\tHl7V2StoreId: pulumi.String(\"your-hl7-v2-store-id\"),\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.healthcare.Hl7StoreIamPolicy;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var hl7V2Store = new Hl7StoreIamPolicy(\"hl7V2Store\", Hl7StoreIamPolicyArgs.builder() \n .hl7V2StoreId(\"your-hl7-v2-store-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hl7V2Store:\n type: gcp:healthcare:Hl7StoreIamPolicy\n properties:\n hl7V2StoreId: your-hl7-v2-store-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst hl7V2Store = new gcp.healthcare.Hl7StoreIamBinding(\"hl7V2Store\", {\n hl7V2StoreId: \"your-hl7-v2-store-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhl7_v2_store = gcp.healthcare.Hl7StoreIamBinding(\"hl7V2Store\",\n hl7_v2_store_id=\"your-hl7-v2-store-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamBinding(\"hl7V2Store\", new()\n {\n Hl7V2StoreId = \"your-hl7-v2-store-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewHl7StoreIamBinding(ctx, \"hl7V2Store\", \u0026healthcare.Hl7StoreIamBindingArgs{\n\t\t\tHl7V2StoreId: pulumi.String(\"your-hl7-v2-store-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamBinding;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var hl7V2Store = new Hl7StoreIamBinding(\"hl7V2Store\", Hl7StoreIamBindingArgs.builder() \n .hl7V2StoreId(\"your-hl7-v2-store-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hl7V2Store:\n type: gcp:healthcare:Hl7StoreIamBinding\n properties:\n hl7V2StoreId: your-hl7-v2-store-id\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst hl7V2Store = new gcp.healthcare.Hl7StoreIamMember(\"hl7V2Store\", {\n hl7V2StoreId: \"your-hl7-v2-store-id\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhl7_v2_store = gcp.healthcare.Hl7StoreIamMember(\"hl7V2Store\",\n hl7_v2_store_id=\"your-hl7-v2-store-id\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamMember(\"hl7V2Store\", new()\n {\n Hl7V2StoreId = \"your-hl7-v2-store-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewHl7StoreIamMember(ctx, \"hl7V2Store\", \u0026healthcare.Hl7StoreIamMemberArgs{\n\t\t\tHl7V2StoreId: pulumi.String(\"your-hl7-v2-store-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamMember;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var hl7V2Store = new Hl7StoreIamMember(\"hl7V2Store\", Hl7StoreIamMemberArgs.builder() \n .hl7V2StoreId(\"your-hl7-v2-store-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hl7V2Store:\n type: gcp:healthcare:Hl7StoreIamMember\n properties:\n hl7V2StoreId: your-hl7-v2-store-id\n member: user:jane@example.com\n role: roles/editor\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `hl7_v2_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamMember:Hl7StoreIamMember hl7_v2_store_iam \"your-project-id/location-name/dataset-name/hl7-v2-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `hl7_v2_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamMember:Hl7StoreIamMember hl7_v2_store_iam \"your-project-id/location-name/dataset-name/hl7-v2-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `hl7_v2_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamMember:Hl7StoreIamMember hl7_v2_store_iam your-project-id/location-name/dataset-name/hl7-v2-store-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `hl7_v2_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamMember:Hl7StoreIamMember hl7_v2_store_iam \"your-project-id/location-name/dataset-name/hl7-v2-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `hl7_v2_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamMember:Hl7StoreIamMember hl7_v2_store_iam \"your-project-id/location-name/dataset-name/hl7-v2-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `hl7_v2_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamMember:Hl7StoreIamMember hl7_v2_store_iam your-project-id/location-name/dataset-name/hl7-v2-store-name\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:healthcare/Hl7StoreIamMemberCondition:Hl7StoreIamMemberCondition" @@ -167181,7 +168628,7 @@ } }, "gcp:healthcare/hl7StoreIamPolicy:Hl7StoreIamPolicy": { - "description": "Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case:\n\n* `gcp.healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached.\n* `gcp.healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved.\n* `gcp.healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved.\n\n\u003e **Note:** `gcp.healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.Hl7StoreIamBinding` and `gcp.healthcare.Hl7StoreIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_policy\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst hl7V2Store = new gcp.healthcare.Hl7StoreIamPolicy(\"hl7V2Store\", {\n hl7V2StoreId: \"your-hl7-v2-store-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nhl7_v2_store = gcp.healthcare.Hl7StoreIamPolicy(\"hl7V2Store\",\n hl7_v2_store_id=\"your-hl7-v2-store-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamPolicy(\"hl7V2Store\", new()\n {\n Hl7V2StoreId = \"your-hl7-v2-store-id\",\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/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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/editor\",\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 = healthcare.NewHl7StoreIamPolicy(ctx, \"hl7V2Store\", \u0026healthcare.Hl7StoreIamPolicyArgs{\n\t\t\tHl7V2StoreId: pulumi.String(\"your-hl7-v2-store-id\"),\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.healthcare.Hl7StoreIamPolicy;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var hl7V2Store = new Hl7StoreIamPolicy(\"hl7V2Store\", Hl7StoreIamPolicyArgs.builder() \n .hl7V2StoreId(\"your-hl7-v2-store-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hl7V2Store:\n type: gcp:healthcare:Hl7StoreIamPolicy\n properties:\n hl7V2StoreId: your-hl7-v2-store-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\n## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst hl7V2Store = new gcp.healthcare.Hl7StoreIamBinding(\"hl7V2Store\", {\n hl7V2StoreId: \"your-hl7-v2-store-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhl7_v2_store = gcp.healthcare.Hl7StoreIamBinding(\"hl7V2Store\",\n hl7_v2_store_id=\"your-hl7-v2-store-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamBinding(\"hl7V2Store\", new()\n {\n Hl7V2StoreId = \"your-hl7-v2-store-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewHl7StoreIamBinding(ctx, \"hl7V2Store\", \u0026healthcare.Hl7StoreIamBindingArgs{\n\t\t\tHl7V2StoreId: pulumi.String(\"your-hl7-v2-store-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamBinding;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var hl7V2Store = new Hl7StoreIamBinding(\"hl7V2Store\", Hl7StoreIamBindingArgs.builder() \n .hl7V2StoreId(\"your-hl7-v2-store-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hl7V2Store:\n type: gcp:healthcare:Hl7StoreIamBinding\n properties:\n hl7V2StoreId: your-hl7-v2-store-id\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst hl7V2Store = new gcp.healthcare.Hl7StoreIamMember(\"hl7V2Store\", {\n hl7V2StoreId: \"your-hl7-v2-store-id\",\n member: \"user:jane@example.com\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhl7_v2_store = gcp.healthcare.Hl7StoreIamMember(\"hl7V2Store\",\n hl7_v2_store_id=\"your-hl7-v2-store-id\",\n member=\"user:jane@example.com\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamMember(\"hl7V2Store\", new()\n {\n Hl7V2StoreId = \"your-hl7-v2-store-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := healthcare.NewHl7StoreIamMember(ctx, \"hl7V2Store\", \u0026healthcare.Hl7StoreIamMemberArgs{\n\t\t\tHl7V2StoreId: pulumi.String(\"your-hl7-v2-store-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamMember;\nimport com.pulumi.gcp.healthcare.Hl7StoreIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var hl7V2Store = new Hl7StoreIamMember(\"hl7V2Store\", Hl7StoreIamMemberArgs.builder() \n .hl7V2StoreId(\"your-hl7-v2-store-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hl7V2Store:\n type: gcp:healthcare:Hl7StoreIamMember\n properties:\n hl7V2StoreId: your-hl7-v2-store-id\n member: user:jane@example.com\n role: roles/editor\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `hl7_v2_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamPolicy:Hl7StoreIamPolicy hl7_v2_store_iam \"your-project-id/location-name/dataset-name/hl7-v2-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `hl7_v2_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamPolicy:Hl7StoreIamPolicy hl7_v2_store_iam \"your-project-id/location-name/dataset-name/hl7-v2-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `hl7_v2_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamPolicy:Hl7StoreIamPolicy hl7_v2_store_iam your-project-id/location-name/dataset-name/hl7-v2-store-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `hl7_v2_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamPolicy:Hl7StoreIamPolicy hl7_v2_store_iam \"your-project-id/location-name/dataset-name/hl7-v2-store-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `hl7_v2_store_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamPolicy:Hl7StoreIamPolicy hl7_v2_store_iam \"your-project-id/location-name/dataset-name/hl7-v2-store-name roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `hl7_v2_store_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:healthcare/hl7StoreIamPolicy:Hl7StoreIamPolicy hl7_v2_store_iam your-project-id/location-name/dataset-name/hl7-v2-store-name\n```\n\n ", "properties": { "etag": { "type": "string", @@ -167236,6 +168683,98 @@ "type": "object" } }, + "gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy": { + "description": "Represents a collection of access boundary policies to apply to a given resource.\n**NOTE**: This is a private feature and users should contact GCP support\nif they would like to test it.\n\n\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nAccessBoundaryPolicy can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy default {{parent}}/{{name}}\n```\n\n ", + "properties": { + "displayName": { + "type": "string", + "description": "The display name of the rule.\n" + }, + "etag": { + "type": "string", + "description": "The hash of the resource. Used internally during updates.\n" + }, + "name": { + "type": "string", + "description": "The name of the policy.\n" + }, + "parent": { + "type": "string", + "description": "The attachment point is identified by its URL-encoded full resource name.\n" + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:iam/AccessBoundaryPolicyRule:AccessBoundaryPolicyRule" + }, + "description": "Rules to be applied.\nStructure is documented below.\n" + } + }, + "required": [ + "etag", + "name", + "parent", + "rules" + ], + "inputProperties": { + "displayName": { + "type": "string", + "description": "The display name of the rule.\n" + }, + "name": { + "type": "string", + "description": "The name of the policy.\n", + "willReplaceOnChanges": true + }, + "parent": { + "type": "string", + "description": "The attachment point is identified by its URL-encoded full resource name.\n", + "willReplaceOnChanges": true + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:iam/AccessBoundaryPolicyRule:AccessBoundaryPolicyRule" + }, + "description": "Rules to be applied.\nStructure is documented below.\n" + } + }, + "requiredInputs": [ + "parent", + "rules" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering AccessBoundaryPolicy resources.\n", + "properties": { + "displayName": { + "type": "string", + "description": "The display name of the rule.\n" + }, + "etag": { + "type": "string", + "description": "The hash of the resource. Used internally during updates.\n" + }, + "name": { + "type": "string", + "description": "The name of the policy.\n", + "willReplaceOnChanges": true + }, + "parent": { + "type": "string", + "description": "The attachment point is identified by its URL-encoded full resource name.\n", + "willReplaceOnChanges": true + }, + "rules": { + "type": "array", + "items": { + "$ref": "#/types/gcp:iam/AccessBoundaryPolicyRule:AccessBoundaryPolicyRule" + }, + "description": "Rules to be applied.\nStructure is documented below.\n" + } + }, + "type": "object" + } + }, "gcp:iam/denyPolicy:DenyPolicy": { "description": "{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nDenyPolicy can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:iam/denyPolicy:DenyPolicy default {{parent}}/{{name}}\n```\n\n ", "properties": { @@ -167460,7 +168999,7 @@ } }, "gcp:iam/workforcePoolProvider:WorkforcePoolProvider": { - "description": "A configuration for an external identity provider.\n\n\nTo get more information about WorkforcePoolProvider, see:\n\n* [API documentation](https://cloud.google.com/iam/docs/reference/rest/v1/locations.workforcePools.providers)\n* How-to Guides\n * [Configure a provider within the workforce pool](https://cloud.google.com/iam/docs/manage-workforce-identity-pools-providers#configure_a_provider_within_the_workforce_pool)\n\n\u003e **Note:** Ask your Google Cloud account team to request access to workforce identity federation for your\nbilling/quota project. The account team notifies you when the project is granted access.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Iam Workforce Pool Provider Saml Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkforcePool(\"pool\", {\n workforcePoolId: \"example-pool\",\n parent: \"organizations/123456789\",\n location: \"global\",\n});\nconst example = new gcp.iam.WorkforcePoolProvider(\"example\", {\n workforcePoolId: pool.workforcePoolId,\n location: pool.location,\n providerId: \"example-prvdr\",\n attributeMapping: {\n \"google.subject\": \"assertion.sub\",\n },\n saml: {\n idpMetadataXml: \"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkforcePool(\"pool\",\n workforce_pool_id=\"example-pool\",\n parent=\"organizations/123456789\",\n location=\"global\")\nexample = gcp.iam.WorkforcePoolProvider(\"example\",\n workforce_pool_id=pool.workforce_pool_id,\n location=pool.location,\n provider_id=\"example-prvdr\",\n attribute_mapping={\n \"google.subject\": \"assertion.sub\",\n },\n saml=gcp.iam.WorkforcePoolProviderSamlArgs(\n idp_metadata_xml=\"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkforcePool(\"pool\", new()\n {\n WorkforcePoolId = \"example-pool\",\n Parent = \"organizations/123456789\",\n Location = \"global\",\n });\n\n var example = new Gcp.Iam.WorkforcePoolProvider(\"example\", new()\n {\n WorkforcePoolId = pool.WorkforcePoolId,\n Location = pool.Location,\n ProviderId = \"example-prvdr\",\n AttributeMapping = \n {\n { \"google.subject\", \"assertion.sub\" },\n },\n Saml = new Gcp.Iam.Inputs.WorkforcePoolProviderSamlArgs\n {\n IdpMetadataXml = \"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkforcePool(ctx, \"pool\", \u0026iam.WorkforcePoolArgs{\n\t\t\tWorkforcePoolId: pulumi.String(\"example-pool\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkforcePoolProvider(ctx, \"example\", \u0026iam.WorkforcePoolProviderArgs{\n\t\t\tWorkforcePoolId: pool.WorkforcePoolId,\n\t\t\tLocation: pool.Location,\n\t\t\tProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"assertion.sub\"),\n\t\t\t},\n\t\t\tSaml: \u0026iam.WorkforcePoolProviderSamlArgs{\n\t\t\t\tIdpMetadataXml: pulumi.String(\"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkforcePool;\nimport com.pulumi.gcp.iam.WorkforcePoolArgs;\nimport com.pulumi.gcp.iam.WorkforcePoolProvider;\nimport com.pulumi.gcp.iam.WorkforcePoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkforcePoolProviderSamlArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkforcePool(\"pool\", WorkforcePoolArgs.builder() \n .workforcePoolId(\"example-pool\")\n .parent(\"organizations/123456789\")\n .location(\"global\")\n .build());\n\n var example = new WorkforcePoolProvider(\"example\", WorkforcePoolProviderArgs.builder() \n .workforcePoolId(pool.workforcePoolId())\n .location(pool.location())\n .providerId(\"example-prvdr\")\n .attributeMapping(Map.of(\"google.subject\", \"assertion.sub\"))\n .saml(WorkforcePoolProviderSamlArgs.builder()\n .idpMetadataXml(\"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkforcePool\n properties:\n workforcePoolId: example-pool\n parent: organizations/123456789\n location: global\n example:\n type: gcp:iam:WorkforcePoolProvider\n properties:\n workforcePoolId: ${pool.workforcePoolId}\n location: ${pool.location}\n providerId: example-prvdr\n attributeMapping:\n google.subject: assertion.sub\n saml:\n idpMetadataXml: \u003c?xml version=\"1.0\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" entityID=\"https://test.com\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"\u003e \u003cmd:KeyDescriptor use=\"signing\"\u003e\u003cds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"https://test.com/sso\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\n```\n{{% /example %}}\n{{% example %}}\n### Iam Workforce Pool Provider Saml Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkforcePool(\"pool\", {\n workforcePoolId: \"example-pool\",\n parent: \"organizations/123456789\",\n location: \"global\",\n});\nconst example = new gcp.iam.WorkforcePoolProvider(\"example\", {\n workforcePoolId: pool.workforcePoolId,\n location: pool.location,\n providerId: \"example-prvdr\",\n attributeMapping: {\n \"google.subject\": \"assertion.sub\",\n },\n saml: {\n idpMetadataXml: \"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\",\n },\n displayName: \"Display name\",\n description: \"A sample SAML workforce pool provider.\",\n disabled: false,\n attributeCondition: \"true\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkforcePool(\"pool\",\n workforce_pool_id=\"example-pool\",\n parent=\"organizations/123456789\",\n location=\"global\")\nexample = gcp.iam.WorkforcePoolProvider(\"example\",\n workforce_pool_id=pool.workforce_pool_id,\n location=pool.location,\n provider_id=\"example-prvdr\",\n attribute_mapping={\n \"google.subject\": \"assertion.sub\",\n },\n saml=gcp.iam.WorkforcePoolProviderSamlArgs(\n idp_metadata_xml=\"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\",\n ),\n display_name=\"Display name\",\n description=\"A sample SAML workforce pool provider.\",\n disabled=False,\n attribute_condition=\"true\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkforcePool(\"pool\", new()\n {\n WorkforcePoolId = \"example-pool\",\n Parent = \"organizations/123456789\",\n Location = \"global\",\n });\n\n var example = new Gcp.Iam.WorkforcePoolProvider(\"example\", new()\n {\n WorkforcePoolId = pool.WorkforcePoolId,\n Location = pool.Location,\n ProviderId = \"example-prvdr\",\n AttributeMapping = \n {\n { \"google.subject\", \"assertion.sub\" },\n },\n Saml = new Gcp.Iam.Inputs.WorkforcePoolProviderSamlArgs\n {\n IdpMetadataXml = \"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\",\n },\n DisplayName = \"Display name\",\n Description = \"A sample SAML workforce pool provider.\",\n Disabled = false,\n AttributeCondition = \"true\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkforcePool(ctx, \"pool\", \u0026iam.WorkforcePoolArgs{\n\t\t\tWorkforcePoolId: pulumi.String(\"example-pool\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkforcePoolProvider(ctx, \"example\", \u0026iam.WorkforcePoolProviderArgs{\n\t\t\tWorkforcePoolId: pool.WorkforcePoolId,\n\t\t\tLocation: pool.Location,\n\t\t\tProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"assertion.sub\"),\n\t\t\t},\n\t\t\tSaml: \u0026iam.WorkforcePoolProviderSamlArgs{\n\t\t\t\tIdpMetadataXml: pulumi.String(\"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\"),\n\t\t\t},\n\t\t\tDisplayName: pulumi.String(\"Display name\"),\n\t\t\tDescription: pulumi.String(\"A sample SAML workforce pool provider.\"),\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tAttributeCondition: pulumi.String(\"true\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkforcePool;\nimport com.pulumi.gcp.iam.WorkforcePoolArgs;\nimport com.pulumi.gcp.iam.WorkforcePoolProvider;\nimport com.pulumi.gcp.iam.WorkforcePoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkforcePoolProviderSamlArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkforcePool(\"pool\", WorkforcePoolArgs.builder() \n .workforcePoolId(\"example-pool\")\n .parent(\"organizations/123456789\")\n .location(\"global\")\n .build());\n\n var example = new WorkforcePoolProvider(\"example\", WorkforcePoolProviderArgs.builder() \n .workforcePoolId(pool.workforcePoolId())\n .location(pool.location())\n .providerId(\"example-prvdr\")\n .attributeMapping(Map.of(\"google.subject\", \"assertion.sub\"))\n .saml(WorkforcePoolProviderSamlArgs.builder()\n .idpMetadataXml(\"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\")\n .build())\n .displayName(\"Display name\")\n .description(\"A sample SAML workforce pool provider.\")\n .disabled(false)\n .attributeCondition(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkforcePool\n properties:\n workforcePoolId: example-pool\n parent: organizations/123456789\n location: global\n example:\n type: gcp:iam:WorkforcePoolProvider\n properties:\n workforcePoolId: ${pool.workforcePoolId}\n location: ${pool.location}\n providerId: example-prvdr\n attributeMapping:\n google.subject: assertion.sub\n saml:\n idpMetadataXml: \u003c?xml version=\"1.0\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" entityID=\"https://test.com\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"\u003e \u003cmd:KeyDescriptor use=\"signing\"\u003e\u003cds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"https://test.com/sso\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\n displayName: Display name\n description: A sample SAML workforce pool provider.\n disabled: false\n attributeCondition: 'true'\n```\n{{% /example %}}\n{{% example %}}\n### Iam Workforce Pool Provider Oidc Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkforcePool(\"pool\", {\n workforcePoolId: \"example-pool\",\n parent: \"organizations/123456789\",\n location: \"global\",\n});\nconst example = new gcp.iam.WorkforcePoolProvider(\"example\", {\n workforcePoolId: pool.workforcePoolId,\n location: pool.location,\n providerId: \"example-prvdr\",\n attributeMapping: {\n \"google.subject\": \"assertion.sub\",\n },\n oidc: {\n issuerUri: \"https://accounts.google.com\",\n clientId: \"client-id\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkforcePool(\"pool\",\n workforce_pool_id=\"example-pool\",\n parent=\"organizations/123456789\",\n location=\"global\")\nexample = gcp.iam.WorkforcePoolProvider(\"example\",\n workforce_pool_id=pool.workforce_pool_id,\n location=pool.location,\n provider_id=\"example-prvdr\",\n attribute_mapping={\n \"google.subject\": \"assertion.sub\",\n },\n oidc=gcp.iam.WorkforcePoolProviderOidcArgs(\n issuer_uri=\"https://accounts.google.com\",\n client_id=\"client-id\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkforcePool(\"pool\", new()\n {\n WorkforcePoolId = \"example-pool\",\n Parent = \"organizations/123456789\",\n Location = \"global\",\n });\n\n var example = new Gcp.Iam.WorkforcePoolProvider(\"example\", new()\n {\n WorkforcePoolId = pool.WorkforcePoolId,\n Location = pool.Location,\n ProviderId = \"example-prvdr\",\n AttributeMapping = \n {\n { \"google.subject\", \"assertion.sub\" },\n },\n Oidc = new Gcp.Iam.Inputs.WorkforcePoolProviderOidcArgs\n {\n IssuerUri = \"https://accounts.google.com\",\n ClientId = \"client-id\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkforcePool(ctx, \"pool\", \u0026iam.WorkforcePoolArgs{\n\t\t\tWorkforcePoolId: pulumi.String(\"example-pool\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkforcePoolProvider(ctx, \"example\", \u0026iam.WorkforcePoolProviderArgs{\n\t\t\tWorkforcePoolId: pool.WorkforcePoolId,\n\t\t\tLocation: pool.Location,\n\t\t\tProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"assertion.sub\"),\n\t\t\t},\n\t\t\tOidc: \u0026iam.WorkforcePoolProviderOidcArgs{\n\t\t\t\tIssuerUri: pulumi.String(\"https://accounts.google.com\"),\n\t\t\t\tClientId: pulumi.String(\"client-id\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkforcePool;\nimport com.pulumi.gcp.iam.WorkforcePoolArgs;\nimport com.pulumi.gcp.iam.WorkforcePoolProvider;\nimport com.pulumi.gcp.iam.WorkforcePoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkforcePoolProviderOidcArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkforcePool(\"pool\", WorkforcePoolArgs.builder() \n .workforcePoolId(\"example-pool\")\n .parent(\"organizations/123456789\")\n .location(\"global\")\n .build());\n\n var example = new WorkforcePoolProvider(\"example\", WorkforcePoolProviderArgs.builder() \n .workforcePoolId(pool.workforcePoolId())\n .location(pool.location())\n .providerId(\"example-prvdr\")\n .attributeMapping(Map.of(\"google.subject\", \"assertion.sub\"))\n .oidc(WorkforcePoolProviderOidcArgs.builder()\n .issuerUri(\"https://accounts.google.com\")\n .clientId(\"client-id\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkforcePool\n properties:\n workforcePoolId: example-pool\n parent: organizations/123456789\n location: global\n example:\n type: gcp:iam:WorkforcePoolProvider\n properties:\n workforcePoolId: ${pool.workforcePoolId}\n location: ${pool.location}\n providerId: example-prvdr\n attributeMapping:\n google.subject: assertion.sub\n oidc:\n issuerUri: https://accounts.google.com\n clientId: client-id\n```\n{{% /example %}}\n{{% example %}}\n### Iam Workforce Pool Provider Oidc Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkforcePool(\"pool\", {\n workforcePoolId: \"example-pool\",\n parent: \"organizations/123456789\",\n location: \"global\",\n});\nconst example = new gcp.iam.WorkforcePoolProvider(\"example\", {\n workforcePoolId: pool.workforcePoolId,\n location: pool.location,\n providerId: \"example-prvdr\",\n attributeMapping: {\n \"google.subject\": \"assertion.sub\",\n },\n oidc: {\n issuerUri: \"https://accounts.google.com\",\n clientId: \"client-id\",\n },\n displayName: \"Display name\",\n description: \"A sample OIDC workforce pool provider.\",\n disabled: false,\n attributeCondition: \"true\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkforcePool(\"pool\",\n workforce_pool_id=\"example-pool\",\n parent=\"organizations/123456789\",\n location=\"global\")\nexample = gcp.iam.WorkforcePoolProvider(\"example\",\n workforce_pool_id=pool.workforce_pool_id,\n location=pool.location,\n provider_id=\"example-prvdr\",\n attribute_mapping={\n \"google.subject\": \"assertion.sub\",\n },\n oidc=gcp.iam.WorkforcePoolProviderOidcArgs(\n issuer_uri=\"https://accounts.google.com\",\n client_id=\"client-id\",\n ),\n display_name=\"Display name\",\n description=\"A sample OIDC workforce pool provider.\",\n disabled=False,\n attribute_condition=\"true\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkforcePool(\"pool\", new()\n {\n WorkforcePoolId = \"example-pool\",\n Parent = \"organizations/123456789\",\n Location = \"global\",\n });\n\n var example = new Gcp.Iam.WorkforcePoolProvider(\"example\", new()\n {\n WorkforcePoolId = pool.WorkforcePoolId,\n Location = pool.Location,\n ProviderId = \"example-prvdr\",\n AttributeMapping = \n {\n { \"google.subject\", \"assertion.sub\" },\n },\n Oidc = new Gcp.Iam.Inputs.WorkforcePoolProviderOidcArgs\n {\n IssuerUri = \"https://accounts.google.com\",\n ClientId = \"client-id\",\n },\n DisplayName = \"Display name\",\n Description = \"A sample OIDC workforce pool provider.\",\n Disabled = false,\n AttributeCondition = \"true\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkforcePool(ctx, \"pool\", \u0026iam.WorkforcePoolArgs{\n\t\t\tWorkforcePoolId: pulumi.String(\"example-pool\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkforcePoolProvider(ctx, \"example\", \u0026iam.WorkforcePoolProviderArgs{\n\t\t\tWorkforcePoolId: pool.WorkforcePoolId,\n\t\t\tLocation: pool.Location,\n\t\t\tProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"assertion.sub\"),\n\t\t\t},\n\t\t\tOidc: \u0026iam.WorkforcePoolProviderOidcArgs{\n\t\t\t\tIssuerUri: pulumi.String(\"https://accounts.google.com\"),\n\t\t\t\tClientId: pulumi.String(\"client-id\"),\n\t\t\t},\n\t\t\tDisplayName: pulumi.String(\"Display name\"),\n\t\t\tDescription: pulumi.String(\"A sample OIDC workforce pool provider.\"),\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tAttributeCondition: pulumi.String(\"true\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkforcePool;\nimport com.pulumi.gcp.iam.WorkforcePoolArgs;\nimport com.pulumi.gcp.iam.WorkforcePoolProvider;\nimport com.pulumi.gcp.iam.WorkforcePoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkforcePoolProviderOidcArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkforcePool(\"pool\", WorkforcePoolArgs.builder() \n .workforcePoolId(\"example-pool\")\n .parent(\"organizations/123456789\")\n .location(\"global\")\n .build());\n\n var example = new WorkforcePoolProvider(\"example\", WorkforcePoolProviderArgs.builder() \n .workforcePoolId(pool.workforcePoolId())\n .location(pool.location())\n .providerId(\"example-prvdr\")\n .attributeMapping(Map.of(\"google.subject\", \"assertion.sub\"))\n .oidc(WorkforcePoolProviderOidcArgs.builder()\n .issuerUri(\"https://accounts.google.com\")\n .clientId(\"client-id\")\n .build())\n .displayName(\"Display name\")\n .description(\"A sample OIDC workforce pool provider.\")\n .disabled(false)\n .attributeCondition(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkforcePool\n properties:\n workforcePoolId: example-pool\n parent: organizations/123456789\n location: global\n example:\n type: gcp:iam:WorkforcePoolProvider\n properties:\n workforcePoolId: ${pool.workforcePoolId}\n location: ${pool.location}\n providerId: example-prvdr\n attributeMapping:\n google.subject: assertion.sub\n oidc:\n issuerUri: https://accounts.google.com\n clientId: client-id\n displayName: Display name\n description: A sample OIDC workforce pool provider.\n disabled: false\n attributeCondition: 'true'\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nWorkforcePoolProvider can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:iam/workforcePoolProvider:WorkforcePoolProvider default locations/{{location}}/workforcePools/{{workforce_pool_id}}/providers/{{provider_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:iam/workforcePoolProvider:WorkforcePoolProvider default {{location}}/{{workforce_pool_id}}/{{provider_id}}\n```\n\n ", + "description": "A configuration for an external identity provider.\n\n\nTo get more information about WorkforcePoolProvider, see:\n\n* [API documentation](https://cloud.google.com/iam/docs/reference/rest/v1/locations.workforcePools.providers)\n* How-to Guides\n * [Configure a provider within the workforce pool](https://cloud.google.com/iam/docs/manage-workforce-identity-pools-providers#configure_a_provider_within_the_workforce_pool)\n\n\u003e **Note:** Ask your Google Cloud account team to request access to workforce identity federation for your\nbilling/quota project. The account team notifies you when the project is granted access.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Iam Workforce Pool Provider Saml Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkforcePool(\"pool\", {\n workforcePoolId: \"example-pool\",\n parent: \"organizations/123456789\",\n location: \"global\",\n});\nconst example = new gcp.iam.WorkforcePoolProvider(\"example\", {\n workforcePoolId: pool.workforcePoolId,\n location: pool.location,\n providerId: \"example-prvdr\",\n attributeMapping: {\n \"google.subject\": \"assertion.sub\",\n },\n saml: {\n idpMetadataXml: \"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkforcePool(\"pool\",\n workforce_pool_id=\"example-pool\",\n parent=\"organizations/123456789\",\n location=\"global\")\nexample = gcp.iam.WorkforcePoolProvider(\"example\",\n workforce_pool_id=pool.workforce_pool_id,\n location=pool.location,\n provider_id=\"example-prvdr\",\n attribute_mapping={\n \"google.subject\": \"assertion.sub\",\n },\n saml=gcp.iam.WorkforcePoolProviderSamlArgs(\n idp_metadata_xml=\"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkforcePool(\"pool\", new()\n {\n WorkforcePoolId = \"example-pool\",\n Parent = \"organizations/123456789\",\n Location = \"global\",\n });\n\n var example = new Gcp.Iam.WorkforcePoolProvider(\"example\", new()\n {\n WorkforcePoolId = pool.WorkforcePoolId,\n Location = pool.Location,\n ProviderId = \"example-prvdr\",\n AttributeMapping = \n {\n { \"google.subject\", \"assertion.sub\" },\n },\n Saml = new Gcp.Iam.Inputs.WorkforcePoolProviderSamlArgs\n {\n IdpMetadataXml = \"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkforcePool(ctx, \"pool\", \u0026iam.WorkforcePoolArgs{\n\t\t\tWorkforcePoolId: pulumi.String(\"example-pool\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkforcePoolProvider(ctx, \"example\", \u0026iam.WorkforcePoolProviderArgs{\n\t\t\tWorkforcePoolId: pool.WorkforcePoolId,\n\t\t\tLocation: pool.Location,\n\t\t\tProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"assertion.sub\"),\n\t\t\t},\n\t\t\tSaml: \u0026iam.WorkforcePoolProviderSamlArgs{\n\t\t\t\tIdpMetadataXml: pulumi.String(\"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkforcePool;\nimport com.pulumi.gcp.iam.WorkforcePoolArgs;\nimport com.pulumi.gcp.iam.WorkforcePoolProvider;\nimport com.pulumi.gcp.iam.WorkforcePoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkforcePoolProviderSamlArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkforcePool(\"pool\", WorkforcePoolArgs.builder() \n .workforcePoolId(\"example-pool\")\n .parent(\"organizations/123456789\")\n .location(\"global\")\n .build());\n\n var example = new WorkforcePoolProvider(\"example\", WorkforcePoolProviderArgs.builder() \n .workforcePoolId(pool.workforcePoolId())\n .location(pool.location())\n .providerId(\"example-prvdr\")\n .attributeMapping(Map.of(\"google.subject\", \"assertion.sub\"))\n .saml(WorkforcePoolProviderSamlArgs.builder()\n .idpMetadataXml(\"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkforcePool\n properties:\n workforcePoolId: example-pool\n parent: organizations/123456789\n location: global\n example:\n type: gcp:iam:WorkforcePoolProvider\n properties:\n workforcePoolId: ${pool.workforcePoolId}\n location: ${pool.location}\n providerId: example-prvdr\n attributeMapping:\n google.subject: assertion.sub\n saml:\n idpMetadataXml: \u003c?xml version=\"1.0\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" entityID=\"https://test.com\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"\u003e \u003cmd:KeyDescriptor use=\"signing\"\u003e\u003cds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"https://test.com/sso\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\n```\n{{% /example %}}\n{{% example %}}\n### Iam Workforce Pool Provider Saml Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkforcePool(\"pool\", {\n workforcePoolId: \"example-pool\",\n parent: \"organizations/123456789\",\n location: \"global\",\n});\nconst example = new gcp.iam.WorkforcePoolProvider(\"example\", {\n workforcePoolId: pool.workforcePoolId,\n location: pool.location,\n providerId: \"example-prvdr\",\n attributeMapping: {\n \"google.subject\": \"assertion.sub\",\n },\n saml: {\n idpMetadataXml: \"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\",\n },\n displayName: \"Display name\",\n description: \"A sample SAML workforce pool provider.\",\n disabled: false,\n attributeCondition: \"true\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkforcePool(\"pool\",\n workforce_pool_id=\"example-pool\",\n parent=\"organizations/123456789\",\n location=\"global\")\nexample = gcp.iam.WorkforcePoolProvider(\"example\",\n workforce_pool_id=pool.workforce_pool_id,\n location=pool.location,\n provider_id=\"example-prvdr\",\n attribute_mapping={\n \"google.subject\": \"assertion.sub\",\n },\n saml=gcp.iam.WorkforcePoolProviderSamlArgs(\n idp_metadata_xml=\"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\",\n ),\n display_name=\"Display name\",\n description=\"A sample SAML workforce pool provider.\",\n disabled=False,\n attribute_condition=\"true\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkforcePool(\"pool\", new()\n {\n WorkforcePoolId = \"example-pool\",\n Parent = \"organizations/123456789\",\n Location = \"global\",\n });\n\n var example = new Gcp.Iam.WorkforcePoolProvider(\"example\", new()\n {\n WorkforcePoolId = pool.WorkforcePoolId,\n Location = pool.Location,\n ProviderId = \"example-prvdr\",\n AttributeMapping = \n {\n { \"google.subject\", \"assertion.sub\" },\n },\n Saml = new Gcp.Iam.Inputs.WorkforcePoolProviderSamlArgs\n {\n IdpMetadataXml = \"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\",\n },\n DisplayName = \"Display name\",\n Description = \"A sample SAML workforce pool provider.\",\n Disabled = false,\n AttributeCondition = \"true\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkforcePool(ctx, \"pool\", \u0026iam.WorkforcePoolArgs{\n\t\t\tWorkforcePoolId: pulumi.String(\"example-pool\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkforcePoolProvider(ctx, \"example\", \u0026iam.WorkforcePoolProviderArgs{\n\t\t\tWorkforcePoolId: pool.WorkforcePoolId,\n\t\t\tLocation: pool.Location,\n\t\t\tProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"assertion.sub\"),\n\t\t\t},\n\t\t\tSaml: \u0026iam.WorkforcePoolProviderSamlArgs{\n\t\t\t\tIdpMetadataXml: pulumi.String(\"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\"),\n\t\t\t},\n\t\t\tDisplayName: pulumi.String(\"Display name\"),\n\t\t\tDescription: pulumi.String(\"A sample SAML workforce pool provider.\"),\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tAttributeCondition: pulumi.String(\"true\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkforcePool;\nimport com.pulumi.gcp.iam.WorkforcePoolArgs;\nimport com.pulumi.gcp.iam.WorkforcePoolProvider;\nimport com.pulumi.gcp.iam.WorkforcePoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkforcePoolProviderSamlArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkforcePool(\"pool\", WorkforcePoolArgs.builder() \n .workforcePoolId(\"example-pool\")\n .parent(\"organizations/123456789\")\n .location(\"global\")\n .build());\n\n var example = new WorkforcePoolProvider(\"example\", WorkforcePoolProviderArgs.builder() \n .workforcePoolId(pool.workforcePoolId())\n .location(pool.location())\n .providerId(\"example-prvdr\")\n .attributeMapping(Map.of(\"google.subject\", \"assertion.sub\"))\n .saml(WorkforcePoolProviderSamlArgs.builder()\n .idpMetadataXml(\"\u003c?xml version=\\\"1.0\\\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\\\"urn:oasis:names:tc:SAML:2.0:metadata\\\" entityID=\\\"https://test.com\\\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\\\"urn:oasis:names:tc:SAML:2.0:protocol\\\"\u003e \u003cmd:KeyDescriptor use=\\\"signing\\\"\u003e\u003cds:KeyInfo xmlns:ds=\\\"http://www.w3.org/2000/09/xmldsig#\\\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\\\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\\\" Location=\\\"https://test.com/sso\\\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\")\n .build())\n .displayName(\"Display name\")\n .description(\"A sample SAML workforce pool provider.\")\n .disabled(false)\n .attributeCondition(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkforcePool\n properties:\n workforcePoolId: example-pool\n parent: organizations/123456789\n location: global\n example:\n type: gcp:iam:WorkforcePoolProvider\n properties:\n workforcePoolId: ${pool.workforcePoolId}\n location: ${pool.location}\n providerId: example-prvdr\n attributeMapping:\n google.subject: assertion.sub\n saml:\n idpMetadataXml: \u003c?xml version=\"1.0\"?\u003e\u003cmd:EntityDescriptor xmlns:md=\"urn:oasis:names:tc:SAML:2.0:metadata\" entityID=\"https://test.com\"\u003e\u003cmd:IDPSSODescriptor protocolSupportEnumeration=\"urn:oasis:names:tc:SAML:2.0:protocol\"\u003e \u003cmd:KeyDescriptor use=\"signing\"\u003e\u003cds:KeyInfo xmlns:ds=\"http://www.w3.org/2000/09/xmldsig#\"\u003e\u003cds:X509Data\u003e\u003cds:X509Certificate\u003eMIIDpDCCAoygAwIBAgIGAX7/5qPhMA0GCSqGSIb3DQEBCwUAMIGSMQswCQYDVQQGEwJVUzETMBEGA1UECAwKQ2FsaWZvcm5pYTEWMBQGA1UEBwwNU2FuIEZyYW5jaXNjbzENMAsGA1UECgwET2t0YTEUMBIGA1UECwwLU1NPUHJvdmlkZXIxEzARBgNVBAMMCmRldi00NTg0MjExHDAaBgkqhkiG9w0BCQEWDWluZm9Ab2t0YS5jb20wHhcNMjIwMjE2MDAxOTEyWhcNMzIwMjE2MDAyMDEyWjCBkjELMAkGA1UEBhMCVVMxEzARBgNVBAgMCkNhbGlmb3JuaWExFjAUBgNVBAcMDVNhbiBGcmFuY2lzY28xDTALBgNVBAoMBE9rdGExFDASBgNVBAsMC1NTT1Byb3ZpZGVyMRMwEQYDVQQDDApkZXYtNDU4NDIxMRwwGgYJKoZIhvcNAQkBFg1pbmZvQG9rdGEuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxrBl7GKz52cRpxF9xCsirnRuMxnhFBaUrsHqAQrLqWmdlpNYZTVg+T9iQ+aq/iE68L+BRZcZniKIvW58wqqS0ltXVvIkXuDSvnvnkkI5yMIVErR20K8jSOKQm1FmK+fgAJ4koshFiu9oLiqu0Ejc0DuL3/XRsb4RuxjktKTb1khgBBtb+7idEk0sFR0RPefAweXImJkDHDm7SxjDwGJUubbqpdTxasPr0W+AHI1VUzsUsTiHAoyb0XDkYqHfDzhj/ZdIEl4zHQ3bEZvlD984ztAnmX2SuFLLKfXeAAGHei8MMixJvwxYkkPeYZ/5h8WgBZPP4heS2CPjwYExt29L8QIDAQABMA0GCSqGSIb3DQEBCwUAA4IBAQARjJFz++a9Z5IQGFzsZMrX2EDR5ML4xxUiQkbhld1S1PljOLcYFARDmUC2YYHOueU4ee8Jid9nPGEUebV/4Jok+b+oQh+dWMgiWjSLI7h5q4OYZ3VJtdlVwgMFt2iz+/4yBKMUZ50g3Qgg36vE34us+eKitg759JgCNsibxn0qtJgSPm0sgP2L6yTaLnoEUbXBRxCwynTSkp9ZijZqEzbhN0e2dWv7Rx/nfpohpDP6vEiFImKFHpDSv3M/5de1ytQzPFrZBYt9WlzlYwE1aD9FHCxdd+rWgYMVVoRaRmndpV/Rq3QUuDuFJtaoX11bC7ExkOpg9KstZzA63i3VcfYv\u003c/ds:X509Certificate\u003e\u003c/ds:X509Data\u003e\u003c/ds:KeyInfo\u003e\u003c/md:KeyDescriptor\u003e\u003cmd:SingleSignOnService Binding=\"urn:oasis:names:tc:SAML:2.0:bindings:HTTP-Redirect\" Location=\"https://test.com/sso\"/\u003e\u003c/md:IDPSSODescriptor\u003e\u003c/md:EntityDescriptor\u003e\n displayName: Display name\n description: A sample SAML workforce pool provider.\n disabled: false\n attributeCondition: 'true'\n```\n{{% /example %}}\n{{% example %}}\n### Iam Workforce Pool Provider Oidc Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkforcePool(\"pool\", {\n workforcePoolId: \"example-pool\",\n parent: \"organizations/123456789\",\n location: \"global\",\n});\nconst example = new gcp.iam.WorkforcePoolProvider(\"example\", {\n workforcePoolId: pool.workforcePoolId,\n location: pool.location,\n providerId: \"example-prvdr\",\n attributeMapping: {\n \"google.subject\": \"assertion.sub\",\n },\n oidc: {\n issuerUri: \"https://accounts.thirdparty.com\",\n clientId: \"client-id\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkforcePool(\"pool\",\n workforce_pool_id=\"example-pool\",\n parent=\"organizations/123456789\",\n location=\"global\")\nexample = gcp.iam.WorkforcePoolProvider(\"example\",\n workforce_pool_id=pool.workforce_pool_id,\n location=pool.location,\n provider_id=\"example-prvdr\",\n attribute_mapping={\n \"google.subject\": \"assertion.sub\",\n },\n oidc=gcp.iam.WorkforcePoolProviderOidcArgs(\n issuer_uri=\"https://accounts.thirdparty.com\",\n client_id=\"client-id\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkforcePool(\"pool\", new()\n {\n WorkforcePoolId = \"example-pool\",\n Parent = \"organizations/123456789\",\n Location = \"global\",\n });\n\n var example = new Gcp.Iam.WorkforcePoolProvider(\"example\", new()\n {\n WorkforcePoolId = pool.WorkforcePoolId,\n Location = pool.Location,\n ProviderId = \"example-prvdr\",\n AttributeMapping = \n {\n { \"google.subject\", \"assertion.sub\" },\n },\n Oidc = new Gcp.Iam.Inputs.WorkforcePoolProviderOidcArgs\n {\n IssuerUri = \"https://accounts.thirdparty.com\",\n ClientId = \"client-id\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkforcePool(ctx, \"pool\", \u0026iam.WorkforcePoolArgs{\n\t\t\tWorkforcePoolId: pulumi.String(\"example-pool\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkforcePoolProvider(ctx, \"example\", \u0026iam.WorkforcePoolProviderArgs{\n\t\t\tWorkforcePoolId: pool.WorkforcePoolId,\n\t\t\tLocation: pool.Location,\n\t\t\tProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"assertion.sub\"),\n\t\t\t},\n\t\t\tOidc: \u0026iam.WorkforcePoolProviderOidcArgs{\n\t\t\t\tIssuerUri: pulumi.String(\"https://accounts.thirdparty.com\"),\n\t\t\t\tClientId: pulumi.String(\"client-id\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkforcePool;\nimport com.pulumi.gcp.iam.WorkforcePoolArgs;\nimport com.pulumi.gcp.iam.WorkforcePoolProvider;\nimport com.pulumi.gcp.iam.WorkforcePoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkforcePoolProviderOidcArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkforcePool(\"pool\", WorkforcePoolArgs.builder() \n .workforcePoolId(\"example-pool\")\n .parent(\"organizations/123456789\")\n .location(\"global\")\n .build());\n\n var example = new WorkforcePoolProvider(\"example\", WorkforcePoolProviderArgs.builder() \n .workforcePoolId(pool.workforcePoolId())\n .location(pool.location())\n .providerId(\"example-prvdr\")\n .attributeMapping(Map.of(\"google.subject\", \"assertion.sub\"))\n .oidc(WorkforcePoolProviderOidcArgs.builder()\n .issuerUri(\"https://accounts.thirdparty.com\")\n .clientId(\"client-id\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkforcePool\n properties:\n workforcePoolId: example-pool\n parent: organizations/123456789\n location: global\n example:\n type: gcp:iam:WorkforcePoolProvider\n properties:\n workforcePoolId: ${pool.workforcePoolId}\n location: ${pool.location}\n providerId: example-prvdr\n attributeMapping:\n google.subject: assertion.sub\n oidc:\n issuerUri: https://accounts.thirdparty.com\n clientId: client-id\n```\n{{% /example %}}\n{{% example %}}\n### Iam Workforce Pool Provider Oidc Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkforcePool(\"pool\", {\n workforcePoolId: \"example-pool\",\n parent: \"organizations/123456789\",\n location: \"global\",\n});\nconst example = new gcp.iam.WorkforcePoolProvider(\"example\", {\n workforcePoolId: pool.workforcePoolId,\n location: pool.location,\n providerId: \"example-prvdr\",\n attributeMapping: {\n \"google.subject\": \"assertion.sub\",\n },\n oidc: {\n issuerUri: \"https://accounts.thirdparty.com\",\n clientId: \"client-id\",\n },\n displayName: \"Display name\",\n description: \"A sample OIDC workforce pool provider.\",\n disabled: false,\n attributeCondition: \"true\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkforcePool(\"pool\",\n workforce_pool_id=\"example-pool\",\n parent=\"organizations/123456789\",\n location=\"global\")\nexample = gcp.iam.WorkforcePoolProvider(\"example\",\n workforce_pool_id=pool.workforce_pool_id,\n location=pool.location,\n provider_id=\"example-prvdr\",\n attribute_mapping={\n \"google.subject\": \"assertion.sub\",\n },\n oidc=gcp.iam.WorkforcePoolProviderOidcArgs(\n issuer_uri=\"https://accounts.thirdparty.com\",\n client_id=\"client-id\",\n ),\n display_name=\"Display name\",\n description=\"A sample OIDC workforce pool provider.\",\n disabled=False,\n attribute_condition=\"true\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkforcePool(\"pool\", new()\n {\n WorkforcePoolId = \"example-pool\",\n Parent = \"organizations/123456789\",\n Location = \"global\",\n });\n\n var example = new Gcp.Iam.WorkforcePoolProvider(\"example\", new()\n {\n WorkforcePoolId = pool.WorkforcePoolId,\n Location = pool.Location,\n ProviderId = \"example-prvdr\",\n AttributeMapping = \n {\n { \"google.subject\", \"assertion.sub\" },\n },\n Oidc = new Gcp.Iam.Inputs.WorkforcePoolProviderOidcArgs\n {\n IssuerUri = \"https://accounts.thirdparty.com\",\n ClientId = \"client-id\",\n },\n DisplayName = \"Display name\",\n Description = \"A sample OIDC workforce pool provider.\",\n Disabled = false,\n AttributeCondition = \"true\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkforcePool(ctx, \"pool\", \u0026iam.WorkforcePoolArgs{\n\t\t\tWorkforcePoolId: pulumi.String(\"example-pool\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkforcePoolProvider(ctx, \"example\", \u0026iam.WorkforcePoolProviderArgs{\n\t\t\tWorkforcePoolId: pool.WorkforcePoolId,\n\t\t\tLocation: pool.Location,\n\t\t\tProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"assertion.sub\"),\n\t\t\t},\n\t\t\tOidc: \u0026iam.WorkforcePoolProviderOidcArgs{\n\t\t\t\tIssuerUri: pulumi.String(\"https://accounts.thirdparty.com\"),\n\t\t\t\tClientId: pulumi.String(\"client-id\"),\n\t\t\t},\n\t\t\tDisplayName: pulumi.String(\"Display name\"),\n\t\t\tDescription: pulumi.String(\"A sample OIDC workforce pool provider.\"),\n\t\t\tDisabled: pulumi.Bool(false),\n\t\t\tAttributeCondition: pulumi.String(\"true\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkforcePool;\nimport com.pulumi.gcp.iam.WorkforcePoolArgs;\nimport com.pulumi.gcp.iam.WorkforcePoolProvider;\nimport com.pulumi.gcp.iam.WorkforcePoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkforcePoolProviderOidcArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkforcePool(\"pool\", WorkforcePoolArgs.builder() \n .workforcePoolId(\"example-pool\")\n .parent(\"organizations/123456789\")\n .location(\"global\")\n .build());\n\n var example = new WorkforcePoolProvider(\"example\", WorkforcePoolProviderArgs.builder() \n .workforcePoolId(pool.workforcePoolId())\n .location(pool.location())\n .providerId(\"example-prvdr\")\n .attributeMapping(Map.of(\"google.subject\", \"assertion.sub\"))\n .oidc(WorkforcePoolProviderOidcArgs.builder()\n .issuerUri(\"https://accounts.thirdparty.com\")\n .clientId(\"client-id\")\n .build())\n .displayName(\"Display name\")\n .description(\"A sample OIDC workforce pool provider.\")\n .disabled(false)\n .attributeCondition(\"true\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkforcePool\n properties:\n workforcePoolId: example-pool\n parent: organizations/123456789\n location: global\n example:\n type: gcp:iam:WorkforcePoolProvider\n properties:\n workforcePoolId: ${pool.workforcePoolId}\n location: ${pool.location}\n providerId: example-prvdr\n attributeMapping:\n google.subject: assertion.sub\n oidc:\n issuerUri: https://accounts.thirdparty.com\n clientId: client-id\n displayName: Display name\n description: A sample OIDC workforce pool provider.\n disabled: false\n attributeCondition: 'true'\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nWorkforcePoolProvider can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:iam/workforcePoolProvider:WorkforcePoolProvider default locations/{{location}}/workforcePools/{{workforce_pool_id}}/providers/{{provider_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:iam/workforcePoolProvider:WorkforcePoolProvider default {{location}}/{{workforce_pool_id}}/{{provider_id}}\n```\n\n ", "properties": { "attributeCondition": { "type": "string", @@ -167738,7 +169277,7 @@ } }, "gcp:iam/workloadIdentityPoolProvider:WorkloadIdentityPoolProvider": { - "description": "A configuration for an external identity provider.\n\nTo get more information about WorkloadIdentityPoolProvider, see:\n\n* [API documentation](https://cloud.google.com/iam/docs/reference/rest/v1/projects.locations.workloadIdentityPools.providers)\n* How-to Guides\n * [Managing workload identity providers](https://cloud.google.com/iam/docs/manage-workload-identity-pools-providers#managing_workload_identity_providers)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Iam Workload Identity Pool Provider Aws Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkloadIdentityPool(\"pool\", {workloadIdentityPoolId: \"example-pool\"});\nconst example = new gcp.iam.WorkloadIdentityPoolProvider(\"example\", {\n workloadIdentityPoolId: pool.workloadIdentityPoolId,\n workloadIdentityPoolProviderId: \"example-prvdr\",\n aws: {\n accountId: \"999999999999\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkloadIdentityPool(\"pool\", workload_identity_pool_id=\"example-pool\")\nexample = gcp.iam.WorkloadIdentityPoolProvider(\"example\",\n workload_identity_pool_id=pool.workload_identity_pool_id,\n workload_identity_pool_provider_id=\"example-prvdr\",\n aws=gcp.iam.WorkloadIdentityPoolProviderAwsArgs(\n account_id=\"999999999999\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkloadIdentityPool(\"pool\", new()\n {\n WorkloadIdentityPoolId = \"example-pool\",\n });\n\n var example = new Gcp.Iam.WorkloadIdentityPoolProvider(\"example\", new()\n {\n WorkloadIdentityPoolId = pool.WorkloadIdentityPoolId,\n WorkloadIdentityPoolProviderId = \"example-prvdr\",\n Aws = new Gcp.Iam.Inputs.WorkloadIdentityPoolProviderAwsArgs\n {\n AccountId = \"999999999999\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkloadIdentityPool(ctx, \"pool\", \u0026iam.WorkloadIdentityPoolArgs{\n\t\t\tWorkloadIdentityPoolId: pulumi.String(\"example-pool\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkloadIdentityPoolProvider(ctx, \"example\", \u0026iam.WorkloadIdentityPoolProviderArgs{\n\t\t\tWorkloadIdentityPoolId: pool.WorkloadIdentityPoolId,\n\t\t\tWorkloadIdentityPoolProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tAws: \u0026iam.WorkloadIdentityPoolProviderAwsArgs{\n\t\t\t\tAccountId: pulumi.String(\"999999999999\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkloadIdentityPool;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolArgs;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProvider;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkloadIdentityPoolProviderAwsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkloadIdentityPool(\"pool\", WorkloadIdentityPoolArgs.builder() \n .workloadIdentityPoolId(\"example-pool\")\n .build());\n\n var example = new WorkloadIdentityPoolProvider(\"example\", WorkloadIdentityPoolProviderArgs.builder() \n .workloadIdentityPoolId(pool.workloadIdentityPoolId())\n .workloadIdentityPoolProviderId(\"example-prvdr\")\n .aws(WorkloadIdentityPoolProviderAwsArgs.builder()\n .accountId(\"999999999999\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkloadIdentityPool\n properties:\n workloadIdentityPoolId: example-pool\n example:\n type: gcp:iam:WorkloadIdentityPoolProvider\n properties:\n workloadIdentityPoolId: ${pool.workloadIdentityPoolId}\n workloadIdentityPoolProviderId: example-prvdr\n aws:\n accountId: '999999999999'\n```\n{{% /example %}}\n{{% example %}}\n### Iam Workload Identity Pool Provider Aws Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkloadIdentityPool(\"pool\", {workloadIdentityPoolId: \"example-pool\"});\nconst example = new gcp.iam.WorkloadIdentityPoolProvider(\"example\", {\n workloadIdentityPoolId: pool.workloadIdentityPoolId,\n workloadIdentityPoolProviderId: \"example-prvdr\",\n displayName: \"Name of provider\",\n description: \"AWS identity pool provider for automated test\",\n disabled: true,\n attributeCondition: \"attribute.aws_role==\\\"arn:aws:sts::999999999999:assumed-role/stack-eu-central-1-lambdaRole\\\"\",\n attributeMapping: {\n \"google.subject\": \"assertion.arn\",\n \"attribute.aws_account\": \"assertion.account\",\n \"attribute.environment\": \"assertion.arn.contains(\\\":instance-profile/Production\\\") ? \\\"prod\\\" : \\\"test\\\"\",\n },\n aws: {\n accountId: \"999999999999\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkloadIdentityPool(\"pool\", workload_identity_pool_id=\"example-pool\")\nexample = gcp.iam.WorkloadIdentityPoolProvider(\"example\",\n workload_identity_pool_id=pool.workload_identity_pool_id,\n workload_identity_pool_provider_id=\"example-prvdr\",\n display_name=\"Name of provider\",\n description=\"AWS identity pool provider for automated test\",\n disabled=True,\n attribute_condition=\"attribute.aws_role==\\\"arn:aws:sts::999999999999:assumed-role/stack-eu-central-1-lambdaRole\\\"\",\n attribute_mapping={\n \"google.subject\": \"assertion.arn\",\n \"attribute.aws_account\": \"assertion.account\",\n \"attribute.environment\": \"assertion.arn.contains(\\\":instance-profile/Production\\\") ? \\\"prod\\\" : \\\"test\\\"\",\n },\n aws=gcp.iam.WorkloadIdentityPoolProviderAwsArgs(\n account_id=\"999999999999\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkloadIdentityPool(\"pool\", new()\n {\n WorkloadIdentityPoolId = \"example-pool\",\n });\n\n var example = new Gcp.Iam.WorkloadIdentityPoolProvider(\"example\", new()\n {\n WorkloadIdentityPoolId = pool.WorkloadIdentityPoolId,\n WorkloadIdentityPoolProviderId = \"example-prvdr\",\n DisplayName = \"Name of provider\",\n Description = \"AWS identity pool provider for automated test\",\n Disabled = true,\n AttributeCondition = \"attribute.aws_role==\\\"arn:aws:sts::999999999999:assumed-role/stack-eu-central-1-lambdaRole\\\"\",\n AttributeMapping = \n {\n { \"google.subject\", \"assertion.arn\" },\n { \"attribute.aws_account\", \"assertion.account\" },\n { \"attribute.environment\", \"assertion.arn.contains(\\\":instance-profile/Production\\\") ? \\\"prod\\\" : \\\"test\\\"\" },\n },\n Aws = new Gcp.Iam.Inputs.WorkloadIdentityPoolProviderAwsArgs\n {\n AccountId = \"999999999999\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkloadIdentityPool(ctx, \"pool\", \u0026iam.WorkloadIdentityPoolArgs{\n\t\t\tWorkloadIdentityPoolId: pulumi.String(\"example-pool\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkloadIdentityPoolProvider(ctx, \"example\", \u0026iam.WorkloadIdentityPoolProviderArgs{\n\t\t\tWorkloadIdentityPoolId: pool.WorkloadIdentityPoolId,\n\t\t\tWorkloadIdentityPoolProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tDisplayName: pulumi.String(\"Name of provider\"),\n\t\t\tDescription: pulumi.String(\"AWS identity pool provider for automated test\"),\n\t\t\tDisabled: pulumi.Bool(true),\n\t\t\tAttributeCondition: pulumi.String(\"attribute.aws_role==\\\"arn:aws:sts::999999999999:assumed-role/stack-eu-central-1-lambdaRole\\\"\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"assertion.arn\"),\n\t\t\t\t\"attribute.aws_account\": pulumi.String(\"assertion.account\"),\n\t\t\t\t\"attribute.environment\": pulumi.String(\"assertion.arn.contains(\\\":instance-profile/Production\\\") ? \\\"prod\\\" : \\\"test\\\"\"),\n\t\t\t},\n\t\t\tAws: \u0026iam.WorkloadIdentityPoolProviderAwsArgs{\n\t\t\t\tAccountId: pulumi.String(\"999999999999\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkloadIdentityPool;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolArgs;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProvider;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkloadIdentityPoolProviderAwsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkloadIdentityPool(\"pool\", WorkloadIdentityPoolArgs.builder() \n .workloadIdentityPoolId(\"example-pool\")\n .build());\n\n var example = new WorkloadIdentityPoolProvider(\"example\", WorkloadIdentityPoolProviderArgs.builder() \n .workloadIdentityPoolId(pool.workloadIdentityPoolId())\n .workloadIdentityPoolProviderId(\"example-prvdr\")\n .displayName(\"Name of provider\")\n .description(\"AWS identity pool provider for automated test\")\n .disabled(true)\n .attributeCondition(\"attribute.aws_role==\\\"arn:aws:sts::999999999999:assumed-role/stack-eu-central-1-lambdaRole\\\"\")\n .attributeMapping(Map.ofEntries(\n Map.entry(\"google.subject\", \"assertion.arn\"),\n Map.entry(\"attribute.aws_account\", \"assertion.account\"),\n Map.entry(\"attribute.environment\", \"assertion.arn.contains(\\\":instance-profile/Production\\\") ? \\\"prod\\\" : \\\"test\\\"\")\n ))\n .aws(WorkloadIdentityPoolProviderAwsArgs.builder()\n .accountId(\"999999999999\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkloadIdentityPool\n properties:\n workloadIdentityPoolId: example-pool\n example:\n type: gcp:iam:WorkloadIdentityPoolProvider\n properties:\n workloadIdentityPoolId: ${pool.workloadIdentityPoolId}\n workloadIdentityPoolProviderId: example-prvdr\n displayName: Name of provider\n description: AWS identity pool provider for automated test\n disabled: true\n attributeCondition: attribute.aws_role==\"arn:aws:sts::999999999999:assumed-role/stack-eu-central-1-lambdaRole\"\n attributeMapping:\n google.subject: assertion.arn\n attribute.aws_account: assertion.account\n attribute.environment: 'assertion.arn.contains(\":instance-profile/Production\") ? \"prod\" : \"test\"'\n aws:\n accountId: '999999999999'\n```\n{{% /example %}}\n{{% example %}}\n### Iam Workload Identity Pool Provider Oidc Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkloadIdentityPool(\"pool\", {workloadIdentityPoolId: \"example-pool\"});\nconst example = new gcp.iam.WorkloadIdentityPoolProvider(\"example\", {\n workloadIdentityPoolId: pool.workloadIdentityPoolId,\n workloadIdentityPoolProviderId: \"example-prvdr\",\n attributeMapping: {\n \"google.subject\": \"assertion.sub\",\n },\n oidc: {\n issuerUri: \"https://sts.windows.net/azure-tenant-id\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkloadIdentityPool(\"pool\", workload_identity_pool_id=\"example-pool\")\nexample = gcp.iam.WorkloadIdentityPoolProvider(\"example\",\n workload_identity_pool_id=pool.workload_identity_pool_id,\n workload_identity_pool_provider_id=\"example-prvdr\",\n attribute_mapping={\n \"google.subject\": \"assertion.sub\",\n },\n oidc=gcp.iam.WorkloadIdentityPoolProviderOidcArgs(\n issuer_uri=\"https://sts.windows.net/azure-tenant-id\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkloadIdentityPool(\"pool\", new()\n {\n WorkloadIdentityPoolId = \"example-pool\",\n });\n\n var example = new Gcp.Iam.WorkloadIdentityPoolProvider(\"example\", new()\n {\n WorkloadIdentityPoolId = pool.WorkloadIdentityPoolId,\n WorkloadIdentityPoolProviderId = \"example-prvdr\",\n AttributeMapping = \n {\n { \"google.subject\", \"assertion.sub\" },\n },\n Oidc = new Gcp.Iam.Inputs.WorkloadIdentityPoolProviderOidcArgs\n {\n IssuerUri = \"https://sts.windows.net/azure-tenant-id\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkloadIdentityPool(ctx, \"pool\", \u0026iam.WorkloadIdentityPoolArgs{\n\t\t\tWorkloadIdentityPoolId: pulumi.String(\"example-pool\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkloadIdentityPoolProvider(ctx, \"example\", \u0026iam.WorkloadIdentityPoolProviderArgs{\n\t\t\tWorkloadIdentityPoolId: pool.WorkloadIdentityPoolId,\n\t\t\tWorkloadIdentityPoolProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"assertion.sub\"),\n\t\t\t},\n\t\t\tOidc: \u0026iam.WorkloadIdentityPoolProviderOidcArgs{\n\t\t\t\tIssuerUri: pulumi.String(\"https://sts.windows.net/azure-tenant-id\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkloadIdentityPool;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolArgs;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProvider;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkloadIdentityPoolProviderOidcArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkloadIdentityPool(\"pool\", WorkloadIdentityPoolArgs.builder() \n .workloadIdentityPoolId(\"example-pool\")\n .build());\n\n var example = new WorkloadIdentityPoolProvider(\"example\", WorkloadIdentityPoolProviderArgs.builder() \n .workloadIdentityPoolId(pool.workloadIdentityPoolId())\n .workloadIdentityPoolProviderId(\"example-prvdr\")\n .attributeMapping(Map.of(\"google.subject\", \"assertion.sub\"))\n .oidc(WorkloadIdentityPoolProviderOidcArgs.builder()\n .issuerUri(\"https://sts.windows.net/azure-tenant-id\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkloadIdentityPool\n properties:\n workloadIdentityPoolId: example-pool\n example:\n type: gcp:iam:WorkloadIdentityPoolProvider\n properties:\n workloadIdentityPoolId: ${pool.workloadIdentityPoolId}\n workloadIdentityPoolProviderId: example-prvdr\n attributeMapping:\n google.subject: assertion.sub\n oidc:\n issuerUri: https://sts.windows.net/azure-tenant-id\n```\n{{% /example %}}\n{{% example %}}\n### Iam Workload Identity Pool Provider Oidc Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkloadIdentityPool(\"pool\", {workloadIdentityPoolId: \"example-pool\"});\nconst example = new gcp.iam.WorkloadIdentityPoolProvider(\"example\", {\n workloadIdentityPoolId: pool.workloadIdentityPoolId,\n workloadIdentityPoolProviderId: \"example-prvdr\",\n displayName: \"Name of provider\",\n description: \"OIDC identity pool provider for automated test\",\n disabled: true,\n attributeCondition: \"\\\"e968c2ef-047c-498d-8d79-16ca1b61e77e\\\" in assertion.groups\",\n attributeMapping: {\n \"google.subject\": \"\\\"azure::\\\" + assertion.tid + \\\"::\\\" + assertion.sub\",\n \"attribute.tid\": \"assertion.tid\",\n \"attribute.managed_identity_name\": ` {\n \"8bb39bdb-1cc5-4447-b7db-a19e920eb111\":\"workload1\",\n \"55d36609-9bcf-48e0-a366-a3cf19027d2a\":\"workload2\"\n }[assertion.oid]\n`,\n },\n oidc: {\n allowedAudiences: [\n \"https://example.com/gcp-oidc-federation\",\n \"example.com/gcp-oidc-federation\",\n ],\n issuerUri: \"https://sts.windows.net/azure-tenant-id\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkloadIdentityPool(\"pool\", workload_identity_pool_id=\"example-pool\")\nexample = gcp.iam.WorkloadIdentityPoolProvider(\"example\",\n workload_identity_pool_id=pool.workload_identity_pool_id,\n workload_identity_pool_provider_id=\"example-prvdr\",\n display_name=\"Name of provider\",\n description=\"OIDC identity pool provider for automated test\",\n disabled=True,\n attribute_condition=\"\\\"e968c2ef-047c-498d-8d79-16ca1b61e77e\\\" in assertion.groups\",\n attribute_mapping={\n \"google.subject\": \"\\\"azure::\\\" + assertion.tid + \\\"::\\\" + assertion.sub\",\n \"attribute.tid\": \"assertion.tid\",\n \"attribute.managed_identity_name\": \"\"\" {\n \"8bb39bdb-1cc5-4447-b7db-a19e920eb111\":\"workload1\",\n \"55d36609-9bcf-48e0-a366-a3cf19027d2a\":\"workload2\"\n }[assertion.oid]\n\"\"\",\n },\n oidc=gcp.iam.WorkloadIdentityPoolProviderOidcArgs(\n allowed_audiences=[\n \"https://example.com/gcp-oidc-federation\",\n \"example.com/gcp-oidc-federation\",\n ],\n issuer_uri=\"https://sts.windows.net/azure-tenant-id\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkloadIdentityPool(\"pool\", new()\n {\n WorkloadIdentityPoolId = \"example-pool\",\n });\n\n var example = new Gcp.Iam.WorkloadIdentityPoolProvider(\"example\", new()\n {\n WorkloadIdentityPoolId = pool.WorkloadIdentityPoolId,\n WorkloadIdentityPoolProviderId = \"example-prvdr\",\n DisplayName = \"Name of provider\",\n Description = \"OIDC identity pool provider for automated test\",\n Disabled = true,\n AttributeCondition = \"\\\"e968c2ef-047c-498d-8d79-16ca1b61e77e\\\" in assertion.groups\",\n AttributeMapping = \n {\n { \"google.subject\", \"\\\"azure::\\\" + assertion.tid + \\\"::\\\" + assertion.sub\" },\n { \"attribute.tid\", \"assertion.tid\" },\n { \"attribute.managed_identity_name\", @\" {\n \"\"8bb39bdb-1cc5-4447-b7db-a19e920eb111\"\":\"\"workload1\"\",\n \"\"55d36609-9bcf-48e0-a366-a3cf19027d2a\"\":\"\"workload2\"\"\n }[assertion.oid]\n\" },\n },\n Oidc = new Gcp.Iam.Inputs.WorkloadIdentityPoolProviderOidcArgs\n {\n AllowedAudiences = new[]\n {\n \"https://example.com/gcp-oidc-federation\",\n \"example.com/gcp-oidc-federation\",\n },\n IssuerUri = \"https://sts.windows.net/azure-tenant-id\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkloadIdentityPool(ctx, \"pool\", \u0026iam.WorkloadIdentityPoolArgs{\n\t\t\tWorkloadIdentityPoolId: pulumi.String(\"example-pool\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkloadIdentityPoolProvider(ctx, \"example\", \u0026iam.WorkloadIdentityPoolProviderArgs{\n\t\t\tWorkloadIdentityPoolId: pool.WorkloadIdentityPoolId,\n\t\t\tWorkloadIdentityPoolProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tDisplayName: pulumi.String(\"Name of provider\"),\n\t\t\tDescription: pulumi.String(\"OIDC identity pool provider for automated test\"),\n\t\t\tDisabled: pulumi.Bool(true),\n\t\t\tAttributeCondition: pulumi.String(\"\\\"e968c2ef-047c-498d-8d79-16ca1b61e77e\\\" in assertion.groups\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"\\\"azure::\\\" + assertion.tid + \\\"::\\\" + assertion.sub\"),\n\t\t\t\t\"attribute.tid\": pulumi.String(\"assertion.tid\"),\n\t\t\t\t\"attribute.managed_identity_name\": pulumi.String(fmt.Sprintf(\" {\\n \\\"8bb39bdb-1cc5-4447-b7db-a19e920eb111\\\":\\\"workload1\\\",\\n \\\"55d36609-9bcf-48e0-a366-a3cf19027d2a\\\":\\\"workload2\\\"\\n }[assertion.oid]\\n\")),\n\t\t\t},\n\t\t\tOidc: \u0026iam.WorkloadIdentityPoolProviderOidcArgs{\n\t\t\t\tAllowedAudiences: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://example.com/gcp-oidc-federation\"),\n\t\t\t\t\tpulumi.String(\"example.com/gcp-oidc-federation\"),\n\t\t\t\t},\n\t\t\t\tIssuerUri: pulumi.String(\"https://sts.windows.net/azure-tenant-id\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkloadIdentityPool;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolArgs;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProvider;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkloadIdentityPoolProviderOidcArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkloadIdentityPool(\"pool\", WorkloadIdentityPoolArgs.builder() \n .workloadIdentityPoolId(\"example-pool\")\n .build());\n\n var example = new WorkloadIdentityPoolProvider(\"example\", WorkloadIdentityPoolProviderArgs.builder() \n .workloadIdentityPoolId(pool.workloadIdentityPoolId())\n .workloadIdentityPoolProviderId(\"example-prvdr\")\n .displayName(\"Name of provider\")\n .description(\"OIDC identity pool provider for automated test\")\n .disabled(true)\n .attributeCondition(\"\\\"e968c2ef-047c-498d-8d79-16ca1b61e77e\\\" in assertion.groups\")\n .attributeMapping(Map.ofEntries(\n Map.entry(\"google.subject\", \"\\\"azure::\\\" + assertion.tid + \\\"::\\\" + assertion.sub\"),\n Map.entry(\"attribute.tid\", \"assertion.tid\"),\n Map.entry(\"attribute.managed_identity_name\", \"\"\"\n {\n \"8bb39bdb-1cc5-4447-b7db-a19e920eb111\":\"workload1\",\n \"55d36609-9bcf-48e0-a366-a3cf19027d2a\":\"workload2\"\n }[assertion.oid]\n \"\"\")\n ))\n .oidc(WorkloadIdentityPoolProviderOidcArgs.builder()\n .allowedAudiences( \n \"https://example.com/gcp-oidc-federation\",\n \"example.com/gcp-oidc-federation\")\n .issuerUri(\"https://sts.windows.net/azure-tenant-id\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkloadIdentityPool\n properties:\n workloadIdentityPoolId: example-pool\n example:\n type: gcp:iam:WorkloadIdentityPoolProvider\n properties:\n workloadIdentityPoolId: ${pool.workloadIdentityPoolId}\n workloadIdentityPoolProviderId: example-prvdr\n displayName: Name of provider\n description: OIDC identity pool provider for automated test\n disabled: true\n attributeCondition: '\"e968c2ef-047c-498d-8d79-16ca1b61e77e\" in assertion.groups'\n attributeMapping:\n google.subject: '\"azure::\" + assertion.tid + \"::\" + assertion.sub'\n attribute.tid: assertion.tid\n attribute.managed_identity_name: |2\n {\n \"8bb39bdb-1cc5-4447-b7db-a19e920eb111\":\"workload1\",\n \"55d36609-9bcf-48e0-a366-a3cf19027d2a\":\"workload2\"\n }[assertion.oid]\n oidc:\n allowedAudiences:\n - https://example.com/gcp-oidc-federation\n - example.com/gcp-oidc-federation\n issuerUri: https://sts.windows.net/azure-tenant-id\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nWorkloadIdentityPoolProvider can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:iam/workloadIdentityPoolProvider:WorkloadIdentityPoolProvider default projects/{{project}}/locations/global/workloadIdentityPools/{{workload_identity_pool_id}}/providers/{{workload_identity_pool_provider_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:iam/workloadIdentityPoolProvider:WorkloadIdentityPoolProvider default {{project}}/{{workload_identity_pool_id}}/{{workload_identity_pool_provider_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:iam/workloadIdentityPoolProvider:WorkloadIdentityPoolProvider default {{workload_identity_pool_id}}/{{workload_identity_pool_provider_id}}\n```\n\n ", + "description": "A configuration for an external identity provider.\n\n\nTo get more information about WorkloadIdentityPoolProvider, see:\n\n* [API documentation](https://cloud.google.com/iam/docs/reference/rest/v1/projects.locations.workloadIdentityPools.providers)\n* How-to Guides\n * [Managing workload identity providers](https://cloud.google.com/iam/docs/manage-workload-identity-pools-providers#managing_workload_identity_providers)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Iam Workload Identity Pool Provider Aws Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkloadIdentityPool(\"pool\", {workloadIdentityPoolId: \"example-pool\"});\nconst example = new gcp.iam.WorkloadIdentityPoolProvider(\"example\", {\n workloadIdentityPoolId: pool.workloadIdentityPoolId,\n workloadIdentityPoolProviderId: \"example-prvdr\",\n aws: {\n accountId: \"999999999999\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkloadIdentityPool(\"pool\", workload_identity_pool_id=\"example-pool\")\nexample = gcp.iam.WorkloadIdentityPoolProvider(\"example\",\n workload_identity_pool_id=pool.workload_identity_pool_id,\n workload_identity_pool_provider_id=\"example-prvdr\",\n aws=gcp.iam.WorkloadIdentityPoolProviderAwsArgs(\n account_id=\"999999999999\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkloadIdentityPool(\"pool\", new()\n {\n WorkloadIdentityPoolId = \"example-pool\",\n });\n\n var example = new Gcp.Iam.WorkloadIdentityPoolProvider(\"example\", new()\n {\n WorkloadIdentityPoolId = pool.WorkloadIdentityPoolId,\n WorkloadIdentityPoolProviderId = \"example-prvdr\",\n Aws = new Gcp.Iam.Inputs.WorkloadIdentityPoolProviderAwsArgs\n {\n AccountId = \"999999999999\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkloadIdentityPool(ctx, \"pool\", \u0026iam.WorkloadIdentityPoolArgs{\n\t\t\tWorkloadIdentityPoolId: pulumi.String(\"example-pool\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkloadIdentityPoolProvider(ctx, \"example\", \u0026iam.WorkloadIdentityPoolProviderArgs{\n\t\t\tWorkloadIdentityPoolId: pool.WorkloadIdentityPoolId,\n\t\t\tWorkloadIdentityPoolProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tAws: \u0026iam.WorkloadIdentityPoolProviderAwsArgs{\n\t\t\t\tAccountId: pulumi.String(\"999999999999\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkloadIdentityPool;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolArgs;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProvider;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkloadIdentityPoolProviderAwsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkloadIdentityPool(\"pool\", WorkloadIdentityPoolArgs.builder() \n .workloadIdentityPoolId(\"example-pool\")\n .build());\n\n var example = new WorkloadIdentityPoolProvider(\"example\", WorkloadIdentityPoolProviderArgs.builder() \n .workloadIdentityPoolId(pool.workloadIdentityPoolId())\n .workloadIdentityPoolProviderId(\"example-prvdr\")\n .aws(WorkloadIdentityPoolProviderAwsArgs.builder()\n .accountId(\"999999999999\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkloadIdentityPool\n properties:\n workloadIdentityPoolId: example-pool\n example:\n type: gcp:iam:WorkloadIdentityPoolProvider\n properties:\n workloadIdentityPoolId: ${pool.workloadIdentityPoolId}\n workloadIdentityPoolProviderId: example-prvdr\n aws:\n accountId: '999999999999'\n```\n{{% /example %}}\n{{% example %}}\n### Iam Workload Identity Pool Provider Aws Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkloadIdentityPool(\"pool\", {workloadIdentityPoolId: \"example-pool\"});\nconst example = new gcp.iam.WorkloadIdentityPoolProvider(\"example\", {\n workloadIdentityPoolId: pool.workloadIdentityPoolId,\n workloadIdentityPoolProviderId: \"example-prvdr\",\n displayName: \"Name of provider\",\n description: \"AWS identity pool provider for automated test\",\n disabled: true,\n attributeCondition: \"attribute.aws_role==\\\"arn:aws:sts::999999999999:assumed-role/stack-eu-central-1-lambdaRole\\\"\",\n attributeMapping: {\n \"google.subject\": \"assertion.arn\",\n \"attribute.aws_account\": \"assertion.account\",\n \"attribute.environment\": \"assertion.arn.contains(\\\":instance-profile/Production\\\") ? \\\"prod\\\" : \\\"test\\\"\",\n },\n aws: {\n accountId: \"999999999999\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkloadIdentityPool(\"pool\", workload_identity_pool_id=\"example-pool\")\nexample = gcp.iam.WorkloadIdentityPoolProvider(\"example\",\n workload_identity_pool_id=pool.workload_identity_pool_id,\n workload_identity_pool_provider_id=\"example-prvdr\",\n display_name=\"Name of provider\",\n description=\"AWS identity pool provider for automated test\",\n disabled=True,\n attribute_condition=\"attribute.aws_role==\\\"arn:aws:sts::999999999999:assumed-role/stack-eu-central-1-lambdaRole\\\"\",\n attribute_mapping={\n \"google.subject\": \"assertion.arn\",\n \"attribute.aws_account\": \"assertion.account\",\n \"attribute.environment\": \"assertion.arn.contains(\\\":instance-profile/Production\\\") ? \\\"prod\\\" : \\\"test\\\"\",\n },\n aws=gcp.iam.WorkloadIdentityPoolProviderAwsArgs(\n account_id=\"999999999999\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkloadIdentityPool(\"pool\", new()\n {\n WorkloadIdentityPoolId = \"example-pool\",\n });\n\n var example = new Gcp.Iam.WorkloadIdentityPoolProvider(\"example\", new()\n {\n WorkloadIdentityPoolId = pool.WorkloadIdentityPoolId,\n WorkloadIdentityPoolProviderId = \"example-prvdr\",\n DisplayName = \"Name of provider\",\n Description = \"AWS identity pool provider for automated test\",\n Disabled = true,\n AttributeCondition = \"attribute.aws_role==\\\"arn:aws:sts::999999999999:assumed-role/stack-eu-central-1-lambdaRole\\\"\",\n AttributeMapping = \n {\n { \"google.subject\", \"assertion.arn\" },\n { \"attribute.aws_account\", \"assertion.account\" },\n { \"attribute.environment\", \"assertion.arn.contains(\\\":instance-profile/Production\\\") ? \\\"prod\\\" : \\\"test\\\"\" },\n },\n Aws = new Gcp.Iam.Inputs.WorkloadIdentityPoolProviderAwsArgs\n {\n AccountId = \"999999999999\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkloadIdentityPool(ctx, \"pool\", \u0026iam.WorkloadIdentityPoolArgs{\n\t\t\tWorkloadIdentityPoolId: pulumi.String(\"example-pool\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkloadIdentityPoolProvider(ctx, \"example\", \u0026iam.WorkloadIdentityPoolProviderArgs{\n\t\t\tWorkloadIdentityPoolId: pool.WorkloadIdentityPoolId,\n\t\t\tWorkloadIdentityPoolProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tDisplayName: pulumi.String(\"Name of provider\"),\n\t\t\tDescription: pulumi.String(\"AWS identity pool provider for automated test\"),\n\t\t\tDisabled: pulumi.Bool(true),\n\t\t\tAttributeCondition: pulumi.String(\"attribute.aws_role==\\\"arn:aws:sts::999999999999:assumed-role/stack-eu-central-1-lambdaRole\\\"\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"assertion.arn\"),\n\t\t\t\t\"attribute.aws_account\": pulumi.String(\"assertion.account\"),\n\t\t\t\t\"attribute.environment\": pulumi.String(\"assertion.arn.contains(\\\":instance-profile/Production\\\") ? \\\"prod\\\" : \\\"test\\\"\"),\n\t\t\t},\n\t\t\tAws: \u0026iam.WorkloadIdentityPoolProviderAwsArgs{\n\t\t\t\tAccountId: pulumi.String(\"999999999999\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkloadIdentityPool;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolArgs;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProvider;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkloadIdentityPoolProviderAwsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkloadIdentityPool(\"pool\", WorkloadIdentityPoolArgs.builder() \n .workloadIdentityPoolId(\"example-pool\")\n .build());\n\n var example = new WorkloadIdentityPoolProvider(\"example\", WorkloadIdentityPoolProviderArgs.builder() \n .workloadIdentityPoolId(pool.workloadIdentityPoolId())\n .workloadIdentityPoolProviderId(\"example-prvdr\")\n .displayName(\"Name of provider\")\n .description(\"AWS identity pool provider for automated test\")\n .disabled(true)\n .attributeCondition(\"attribute.aws_role==\\\"arn:aws:sts::999999999999:assumed-role/stack-eu-central-1-lambdaRole\\\"\")\n .attributeMapping(Map.ofEntries(\n Map.entry(\"google.subject\", \"assertion.arn\"),\n Map.entry(\"attribute.aws_account\", \"assertion.account\"),\n Map.entry(\"attribute.environment\", \"assertion.arn.contains(\\\":instance-profile/Production\\\") ? \\\"prod\\\" : \\\"test\\\"\")\n ))\n .aws(WorkloadIdentityPoolProviderAwsArgs.builder()\n .accountId(\"999999999999\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkloadIdentityPool\n properties:\n workloadIdentityPoolId: example-pool\n example:\n type: gcp:iam:WorkloadIdentityPoolProvider\n properties:\n workloadIdentityPoolId: ${pool.workloadIdentityPoolId}\n workloadIdentityPoolProviderId: example-prvdr\n displayName: Name of provider\n description: AWS identity pool provider for automated test\n disabled: true\n attributeCondition: attribute.aws_role==\"arn:aws:sts::999999999999:assumed-role/stack-eu-central-1-lambdaRole\"\n attributeMapping:\n google.subject: assertion.arn\n attribute.aws_account: assertion.account\n attribute.environment: 'assertion.arn.contains(\":instance-profile/Production\") ? \"prod\" : \"test\"'\n aws:\n accountId: '999999999999'\n```\n{{% /example %}}\n{{% example %}}\n### Iam Workload Identity Pool Provider Oidc Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkloadIdentityPool(\"pool\", {workloadIdentityPoolId: \"example-pool\"});\nconst example = new gcp.iam.WorkloadIdentityPoolProvider(\"example\", {\n workloadIdentityPoolId: pool.workloadIdentityPoolId,\n workloadIdentityPoolProviderId: \"example-prvdr\",\n attributeMapping: {\n \"google.subject\": \"assertion.sub\",\n },\n oidc: {\n issuerUri: \"https://sts.windows.net/azure-tenant-id\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkloadIdentityPool(\"pool\", workload_identity_pool_id=\"example-pool\")\nexample = gcp.iam.WorkloadIdentityPoolProvider(\"example\",\n workload_identity_pool_id=pool.workload_identity_pool_id,\n workload_identity_pool_provider_id=\"example-prvdr\",\n attribute_mapping={\n \"google.subject\": \"assertion.sub\",\n },\n oidc=gcp.iam.WorkloadIdentityPoolProviderOidcArgs(\n issuer_uri=\"https://sts.windows.net/azure-tenant-id\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkloadIdentityPool(\"pool\", new()\n {\n WorkloadIdentityPoolId = \"example-pool\",\n });\n\n var example = new Gcp.Iam.WorkloadIdentityPoolProvider(\"example\", new()\n {\n WorkloadIdentityPoolId = pool.WorkloadIdentityPoolId,\n WorkloadIdentityPoolProviderId = \"example-prvdr\",\n AttributeMapping = \n {\n { \"google.subject\", \"assertion.sub\" },\n },\n Oidc = new Gcp.Iam.Inputs.WorkloadIdentityPoolProviderOidcArgs\n {\n IssuerUri = \"https://sts.windows.net/azure-tenant-id\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkloadIdentityPool(ctx, \"pool\", \u0026iam.WorkloadIdentityPoolArgs{\n\t\t\tWorkloadIdentityPoolId: pulumi.String(\"example-pool\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkloadIdentityPoolProvider(ctx, \"example\", \u0026iam.WorkloadIdentityPoolProviderArgs{\n\t\t\tWorkloadIdentityPoolId: pool.WorkloadIdentityPoolId,\n\t\t\tWorkloadIdentityPoolProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"assertion.sub\"),\n\t\t\t},\n\t\t\tOidc: \u0026iam.WorkloadIdentityPoolProviderOidcArgs{\n\t\t\t\tIssuerUri: pulumi.String(\"https://sts.windows.net/azure-tenant-id\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkloadIdentityPool;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolArgs;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProvider;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkloadIdentityPoolProviderOidcArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkloadIdentityPool(\"pool\", WorkloadIdentityPoolArgs.builder() \n .workloadIdentityPoolId(\"example-pool\")\n .build());\n\n var example = new WorkloadIdentityPoolProvider(\"example\", WorkloadIdentityPoolProviderArgs.builder() \n .workloadIdentityPoolId(pool.workloadIdentityPoolId())\n .workloadIdentityPoolProviderId(\"example-prvdr\")\n .attributeMapping(Map.of(\"google.subject\", \"assertion.sub\"))\n .oidc(WorkloadIdentityPoolProviderOidcArgs.builder()\n .issuerUri(\"https://sts.windows.net/azure-tenant-id\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkloadIdentityPool\n properties:\n workloadIdentityPoolId: example-pool\n example:\n type: gcp:iam:WorkloadIdentityPoolProvider\n properties:\n workloadIdentityPoolId: ${pool.workloadIdentityPoolId}\n workloadIdentityPoolProviderId: example-prvdr\n attributeMapping:\n google.subject: assertion.sub\n oidc:\n issuerUri: https://sts.windows.net/azure-tenant-id\n```\n{{% /example %}}\n{{% example %}}\n### Iam Workload Identity Pool Provider Oidc Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst pool = new gcp.iam.WorkloadIdentityPool(\"pool\", {workloadIdentityPoolId: \"example-pool\"});\nconst example = new gcp.iam.WorkloadIdentityPoolProvider(\"example\", {\n workloadIdentityPoolId: pool.workloadIdentityPoolId,\n workloadIdentityPoolProviderId: \"example-prvdr\",\n displayName: \"Name of provider\",\n description: \"OIDC identity pool provider for automated test\",\n disabled: true,\n attributeCondition: \"\\\"e968c2ef-047c-498d-8d79-16ca1b61e77e\\\" in assertion.groups\",\n attributeMapping: {\n \"google.subject\": \"\\\"azure::\\\" + assertion.tid + \\\"::\\\" + assertion.sub\",\n \"attribute.tid\": \"assertion.tid\",\n \"attribute.managed_identity_name\": ` {\n \"8bb39bdb-1cc5-4447-b7db-a19e920eb111\":\"workload1\",\n \"55d36609-9bcf-48e0-a366-a3cf19027d2a\":\"workload2\"\n }[assertion.oid]\n`,\n },\n oidc: {\n allowedAudiences: [\n \"https://example.com/gcp-oidc-federation\",\n \"example.com/gcp-oidc-federation\",\n ],\n issuerUri: \"https://sts.windows.net/azure-tenant-id\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\npool = gcp.iam.WorkloadIdentityPool(\"pool\", workload_identity_pool_id=\"example-pool\")\nexample = gcp.iam.WorkloadIdentityPoolProvider(\"example\",\n workload_identity_pool_id=pool.workload_identity_pool_id,\n workload_identity_pool_provider_id=\"example-prvdr\",\n display_name=\"Name of provider\",\n description=\"OIDC identity pool provider for automated test\",\n disabled=True,\n attribute_condition=\"\\\"e968c2ef-047c-498d-8d79-16ca1b61e77e\\\" in assertion.groups\",\n attribute_mapping={\n \"google.subject\": \"\\\"azure::\\\" + assertion.tid + \\\"::\\\" + assertion.sub\",\n \"attribute.tid\": \"assertion.tid\",\n \"attribute.managed_identity_name\": \"\"\" {\n \"8bb39bdb-1cc5-4447-b7db-a19e920eb111\":\"workload1\",\n \"55d36609-9bcf-48e0-a366-a3cf19027d2a\":\"workload2\"\n }[assertion.oid]\n\"\"\",\n },\n oidc=gcp.iam.WorkloadIdentityPoolProviderOidcArgs(\n allowed_audiences=[\n \"https://example.com/gcp-oidc-federation\",\n \"example.com/gcp-oidc-federation\",\n ],\n issuer_uri=\"https://sts.windows.net/azure-tenant-id\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var pool = new Gcp.Iam.WorkloadIdentityPool(\"pool\", new()\n {\n WorkloadIdentityPoolId = \"example-pool\",\n });\n\n var example = new Gcp.Iam.WorkloadIdentityPoolProvider(\"example\", new()\n {\n WorkloadIdentityPoolId = pool.WorkloadIdentityPoolId,\n WorkloadIdentityPoolProviderId = \"example-prvdr\",\n DisplayName = \"Name of provider\",\n Description = \"OIDC identity pool provider for automated test\",\n Disabled = true,\n AttributeCondition = \"\\\"e968c2ef-047c-498d-8d79-16ca1b61e77e\\\" in assertion.groups\",\n AttributeMapping = \n {\n { \"google.subject\", \"\\\"azure::\\\" + assertion.tid + \\\"::\\\" + assertion.sub\" },\n { \"attribute.tid\", \"assertion.tid\" },\n { \"attribute.managed_identity_name\", @\" {\n \"\"8bb39bdb-1cc5-4447-b7db-a19e920eb111\"\":\"\"workload1\"\",\n \"\"55d36609-9bcf-48e0-a366-a3cf19027d2a\"\":\"\"workload2\"\"\n }[assertion.oid]\n\" },\n },\n Oidc = new Gcp.Iam.Inputs.WorkloadIdentityPoolProviderOidcArgs\n {\n AllowedAudiences = new[]\n {\n \"https://example.com/gcp-oidc-federation\",\n \"example.com/gcp-oidc-federation\",\n },\n IssuerUri = \"https://sts.windows.net/azure-tenant-id\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tpool, err := iam.NewWorkloadIdentityPool(ctx, \"pool\", \u0026iam.WorkloadIdentityPoolArgs{\n\t\t\tWorkloadIdentityPoolId: pulumi.String(\"example-pool\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iam.NewWorkloadIdentityPoolProvider(ctx, \"example\", \u0026iam.WorkloadIdentityPoolProviderArgs{\n\t\t\tWorkloadIdentityPoolId: pool.WorkloadIdentityPoolId,\n\t\t\tWorkloadIdentityPoolProviderId: pulumi.String(\"example-prvdr\"),\n\t\t\tDisplayName: pulumi.String(\"Name of provider\"),\n\t\t\tDescription: pulumi.String(\"OIDC identity pool provider for automated test\"),\n\t\t\tDisabled: pulumi.Bool(true),\n\t\t\tAttributeCondition: pulumi.String(\"\\\"e968c2ef-047c-498d-8d79-16ca1b61e77e\\\" in assertion.groups\"),\n\t\t\tAttributeMapping: pulumi.StringMap{\n\t\t\t\t\"google.subject\": pulumi.String(\"\\\"azure::\\\" + assertion.tid + \\\"::\\\" + assertion.sub\"),\n\t\t\t\t\"attribute.tid\": pulumi.String(\"assertion.tid\"),\n\t\t\t\t\"attribute.managed_identity_name\": pulumi.String(fmt.Sprintf(\" {\\n \\\"8bb39bdb-1cc5-4447-b7db-a19e920eb111\\\":\\\"workload1\\\",\\n \\\"55d36609-9bcf-48e0-a366-a3cf19027d2a\\\":\\\"workload2\\\"\\n }[assertion.oid]\\n\")),\n\t\t\t},\n\t\t\tOidc: \u0026iam.WorkloadIdentityPoolProviderOidcArgs{\n\t\t\t\tAllowedAudiences: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"https://example.com/gcp-oidc-federation\"),\n\t\t\t\t\tpulumi.String(\"example.com/gcp-oidc-federation\"),\n\t\t\t\t},\n\t\t\t\tIssuerUri: pulumi.String(\"https://sts.windows.net/azure-tenant-id\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.iam.WorkloadIdentityPool;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolArgs;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProvider;\nimport com.pulumi.gcp.iam.WorkloadIdentityPoolProviderArgs;\nimport com.pulumi.gcp.iam.inputs.WorkloadIdentityPoolProviderOidcArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var pool = new WorkloadIdentityPool(\"pool\", WorkloadIdentityPoolArgs.builder() \n .workloadIdentityPoolId(\"example-pool\")\n .build());\n\n var example = new WorkloadIdentityPoolProvider(\"example\", WorkloadIdentityPoolProviderArgs.builder() \n .workloadIdentityPoolId(pool.workloadIdentityPoolId())\n .workloadIdentityPoolProviderId(\"example-prvdr\")\n .displayName(\"Name of provider\")\n .description(\"OIDC identity pool provider for automated test\")\n .disabled(true)\n .attributeCondition(\"\\\"e968c2ef-047c-498d-8d79-16ca1b61e77e\\\" in assertion.groups\")\n .attributeMapping(Map.ofEntries(\n Map.entry(\"google.subject\", \"\\\"azure::\\\" + assertion.tid + \\\"::\\\" + assertion.sub\"),\n Map.entry(\"attribute.tid\", \"assertion.tid\"),\n Map.entry(\"attribute.managed_identity_name\", \"\"\"\n {\n \"8bb39bdb-1cc5-4447-b7db-a19e920eb111\":\"workload1\",\n \"55d36609-9bcf-48e0-a366-a3cf19027d2a\":\"workload2\"\n }[assertion.oid]\n \"\"\")\n ))\n .oidc(WorkloadIdentityPoolProviderOidcArgs.builder()\n .allowedAudiences( \n \"https://example.com/gcp-oidc-federation\",\n \"example.com/gcp-oidc-federation\")\n .issuerUri(\"https://sts.windows.net/azure-tenant-id\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n pool:\n type: gcp:iam:WorkloadIdentityPool\n properties:\n workloadIdentityPoolId: example-pool\n example:\n type: gcp:iam:WorkloadIdentityPoolProvider\n properties:\n workloadIdentityPoolId: ${pool.workloadIdentityPoolId}\n workloadIdentityPoolProviderId: example-prvdr\n displayName: Name of provider\n description: OIDC identity pool provider for automated test\n disabled: true\n attributeCondition: '\"e968c2ef-047c-498d-8d79-16ca1b61e77e\" in assertion.groups'\n attributeMapping:\n google.subject: '\"azure::\" + assertion.tid + \"::\" + assertion.sub'\n attribute.tid: assertion.tid\n attribute.managed_identity_name: |2\n {\n \"8bb39bdb-1cc5-4447-b7db-a19e920eb111\":\"workload1\",\n \"55d36609-9bcf-48e0-a366-a3cf19027d2a\":\"workload2\"\n }[assertion.oid]\n oidc:\n allowedAudiences:\n - https://example.com/gcp-oidc-federation\n - example.com/gcp-oidc-federation\n issuerUri: https://sts.windows.net/azure-tenant-id\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nWorkloadIdentityPoolProvider can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:iam/workloadIdentityPoolProvider:WorkloadIdentityPoolProvider default projects/{{project}}/locations/global/workloadIdentityPools/{{workload_identity_pool_id}}/providers/{{workload_identity_pool_provider_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:iam/workloadIdentityPoolProvider:WorkloadIdentityPoolProvider default {{project}}/{{workload_identity_pool_id}}/{{workload_identity_pool_provider_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:iam/workloadIdentityPoolProvider:WorkloadIdentityPoolProvider default {{workload_identity_pool_id}}/{{workload_identity_pool_provider_id}}\n```\n\n ", "properties": { "attributeCondition": { "type": "string", @@ -168613,7 +170152,7 @@ } }, "gcp:iap/brand:Brand": { - "description": "OAuth brand data. Only \"Organization Internal\" brands can be created\nprogrammatically via API. To convert it into an external brands\nplease use the GCP Console.\n\n\u003e **Note:** Brands can only be created once for a Google Cloud\nproject and the underlying Google API doesn't not support DELETE or PATCH methods.\nDestroying a provider-managed Brand will remove it from state\nbut *will not delete it from Google Cloud.*\n\nTo get more information about Brand, see:\n\n* [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands)\n* How-to Guides\n * [Setting up IAP Brand](https://cloud.google.com/iap/docs/tutorial-gce#set_up_iap)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Iap Brand\n\n\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\",\n orgId: \"123456789\",\n});\nconst projectService = new gcp.projects.Service(\"projectService\", {\n project: project.projectId,\n service: \"iap.googleapis.com\",\n});\nconst projectBrand = new gcp.iap.Brand(\"projectBrand\", {\n supportEmail: \"support@example.com\",\n applicationTitle: \"Cloud IAP protected Application\",\n project: projectService.project,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.Project(\"project\",\n project_id=\"tf-test\",\n org_id=\"123456789\")\nproject_service = gcp.projects.Service(\"projectService\",\n project=project.project_id,\n service=\"iap.googleapis.com\")\nproject_brand = gcp.iap.Brand(\"projectBrand\",\n support_email=\"support@example.com\",\n application_title=\"Cloud IAP protected Application\",\n project=project_service.project)\n```\n```csharp\nusing System.Collections.Generic;\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\",\n OrgId = \"123456789\",\n });\n\n var projectService = new Gcp.Projects.Service(\"projectService\", new()\n {\n Project = project.ProjectId,\n ServiceName = \"iap.googleapis.com\",\n });\n\n var projectBrand = new Gcp.Iap.Brand(\"projectBrand\", new()\n {\n SupportEmail = \"support@example.com\",\n ApplicationTitle = \"Cloud IAP protected Application\",\n Project = projectService.Project,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iap\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprojectService, err := projects.NewService(ctx, \"projectService\", \u0026projects.ServiceArgs{\n\t\t\tProject: project.ProjectId,\n\t\t\tService: pulumi.String(\"iap.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iap.NewBrand(ctx, \"projectBrand\", \u0026iap.BrandArgs{\n\t\t\tSupportEmail: pulumi.String(\"support@example.com\"),\n\t\t\tApplicationTitle: pulumi.String(\"Cloud IAP protected Application\"),\n\t\t\tProject: projectService.Project,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport com.pulumi.gcp.iap.Brand;\nimport com.pulumi.gcp.iap.BrandArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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\")\n .orgId(\"123456789\")\n .build());\n\n var projectService = new Service(\"projectService\", ServiceArgs.builder() \n .project(project.projectId())\n .service(\"iap.googleapis.com\")\n .build());\n\n var projectBrand = new Brand(\"projectBrand\", BrandArgs.builder() \n .supportEmail(\"support@example.com\")\n .applicationTitle(\"Cloud IAP protected Application\")\n .project(projectService.project())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test\n orgId: '123456789'\n projectService:\n type: gcp:projects:Service\n properties:\n project: ${project.projectId}\n service: iap.googleapis.com\n projectBrand:\n type: gcp:iap:Brand\n properties:\n supportEmail: support@example.com\n applicationTitle: Cloud IAP protected Application\n project: ${projectService.project}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBrand can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:iap/brand:Brand default projects/{{project_id}}/brands/{{brand_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:iap/brand:Brand default projects/{{project_number}}/brands/{{brand_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:iap/brand:Brand default {{project_number}}/{{brand_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nBrand can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:iap/brand:Brand default projects/{{project_id}}/brands/{{brand_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:iap/brand:Brand default projects/{{project_number}}/brands/{{brand_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:iap/brand:Brand default {{project_number}}/{{brand_id}}\n```\n\n ", "properties": { "applicationTitle": { "type": "string", @@ -168695,7 +170234,7 @@ } }, "gcp:iap/client:Client": { - "description": "Contains the data that describes an Identity Aware Proxy owned client.\n\n\u003e **Note:** Only internal org clients can be created via declarative tools. External clients must be\nmanually created via the GCP console. This restriction is due to the existing APIs and not lack of support\nin this tool.\n\n\nTo get more information about Client, see:\n\n* [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands.identityAwareProxyClients)\n* How-to Guides\n * [Setting up IAP Client](https://cloud.google.com/iap/docs/authentication-howto)\n\n\u003e **Warning:** All arguments including `secret` will be stored in the raw\nstate as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Iap Client\n\n\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\",\n orgId: \"123456789\",\n});\nconst projectService = new gcp.projects.Service(\"projectService\", {\n project: project.projectId,\n service: \"iap.googleapis.com\",\n});\nconst projectBrand = new gcp.iap.Brand(\"projectBrand\", {\n supportEmail: \"support@example.com\",\n applicationTitle: \"Cloud IAP protected Application\",\n project: projectService.project,\n});\nconst projectClient = new gcp.iap.Client(\"projectClient\", {\n displayName: \"Test Client\",\n brand: projectBrand.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.Project(\"project\",\n project_id=\"tf-test\",\n org_id=\"123456789\")\nproject_service = gcp.projects.Service(\"projectService\",\n project=project.project_id,\n service=\"iap.googleapis.com\")\nproject_brand = gcp.iap.Brand(\"projectBrand\",\n support_email=\"support@example.com\",\n application_title=\"Cloud IAP protected Application\",\n project=project_service.project)\nproject_client = gcp.iap.Client(\"projectClient\",\n display_name=\"Test Client\",\n brand=project_brand.name)\n```\n```csharp\nusing System.Collections.Generic;\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\",\n OrgId = \"123456789\",\n });\n\n var projectService = new Gcp.Projects.Service(\"projectService\", new()\n {\n Project = project.ProjectId,\n ServiceName = \"iap.googleapis.com\",\n });\n\n var projectBrand = new Gcp.Iap.Brand(\"projectBrand\", new()\n {\n SupportEmail = \"support@example.com\",\n ApplicationTitle = \"Cloud IAP protected Application\",\n Project = projectService.Project,\n });\n\n var projectClient = new Gcp.Iap.Client(\"projectClient\", new()\n {\n DisplayName = \"Test Client\",\n Brand = projectBrand.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iap\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tproject, err := organizations.NewProject(ctx, \"project\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"tf-test\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprojectService, err := projects.NewService(ctx, \"projectService\", \u0026projects.ServiceArgs{\n\t\t\tProject: project.ProjectId,\n\t\t\tService: pulumi.String(\"iap.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprojectBrand, err := iap.NewBrand(ctx, \"projectBrand\", \u0026iap.BrandArgs{\n\t\t\tSupportEmail: pulumi.String(\"support@example.com\"),\n\t\t\tApplicationTitle: pulumi.String(\"Cloud IAP protected Application\"),\n\t\t\tProject: projectService.Project,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = iap.NewClient(ctx, \"projectClient\", \u0026iap.ClientArgs{\n\t\t\tDisplayName: pulumi.String(\"Test Client\"),\n\t\t\tBrand: projectBrand.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.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport com.pulumi.gcp.iap.Brand;\nimport com.pulumi.gcp.iap.BrandArgs;\nimport com.pulumi.gcp.iap.Client;\nimport com.pulumi.gcp.iap.ClientArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var project = new Project(\"project\", ProjectArgs.builder() \n .projectId(\"tf-test\")\n .orgId(\"123456789\")\n .build());\n\n var projectService = new Service(\"projectService\", ServiceArgs.builder() \n .project(project.projectId())\n .service(\"iap.googleapis.com\")\n .build());\n\n var projectBrand = new Brand(\"projectBrand\", BrandArgs.builder() \n .supportEmail(\"support@example.com\")\n .applicationTitle(\"Cloud IAP protected Application\")\n .project(projectService.project())\n .build());\n\n var projectClient = new Client(\"projectClient\", ClientArgs.builder() \n .displayName(\"Test Client\")\n .brand(projectBrand.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n projectId: tf-test\n orgId: '123456789'\n projectService:\n type: gcp:projects:Service\n properties:\n project: ${project.projectId}\n service: iap.googleapis.com\n projectBrand:\n type: gcp:iap:Brand\n properties:\n supportEmail: support@example.com\n applicationTitle: Cloud IAP protected Application\n project: ${projectService.project}\n projectClient:\n type: gcp:iap:Client\n properties:\n displayName: Test Client\n brand: ${projectBrand.name}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nClient can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:iap/client:Client default {{brand}}/identityAwareProxyClients/{{client_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:iap/client:Client default {{brand}}/{{client_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nClient can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:iap/client:Client default {{brand}}/identityAwareProxyClients/{{client_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:iap/client:Client default {{brand}}/{{client_id}}\n```\n\n ", "properties": { "brand": { "type": "string", @@ -171918,7 +173457,7 @@ } }, "gcp:kms/cryptoKey:CryptoKey": { - "description": "A `CryptoKey` represents a logical key that can be used for cryptographic operations.\n\n\n\u003e **Note:** CryptoKeys cannot be deleted from Google Cloud Platform.\nDestroying a provider-managed CryptoKey will remove it from state\nand delete all CryptoKeyVersions, rendering the key unusable, but *will\nnot delete the resource from the project.* When the provider destroys these keys,\nany data previously encrypted with these keys will be irrecoverable.\nFor this reason, it is strongly recommended that you add lifecycle hooks\nto the resource to prevent accidental destruction.\n\n\nTo get more information about CryptoKey, see:\n\n* [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys)\n* How-to Guides\n * [Creating a key](https://cloud.google.com/kms/docs/creating-keys#create_a_key)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Kms Crypto Key Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst example_key = new gcp.kms.CryptoKey(\"example-key\", {\n keyRing: keyring.id,\n rotationPeriod: \"100000s\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\nexample_key = gcp.kms.CryptoKey(\"example-key\",\n key_ring=keyring.id,\n rotation_period=\"100000s\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var example_key = new Gcp.Kms.CryptoKey(\"example-key\", new()\n {\n KeyRing = keyring.Id,\n RotationPeriod = \"100000s\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewCryptoKey(ctx, \"example-key\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tRotationPeriod: pulumi.String(\"100000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n var example_key = new CryptoKey(\"example-key\", CryptoKeyArgs.builder() \n .keyRing(keyring.id())\n .rotationPeriod(\"100000s\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n example-key:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyring.id}\n rotationPeriod: 100000s\n```\n{{% /example %}}\n{{% example %}}\n### Kms Crypto Key Asymmetric Sign\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst example_asymmetric_sign_key = new gcp.kms.CryptoKey(\"example-asymmetric-sign-key\", {\n keyRing: keyring.id,\n purpose: \"ASYMMETRIC_SIGN\",\n versionTemplate: {\n algorithm: \"EC_SIGN_P384_SHA384\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\nexample_asymmetric_sign_key = gcp.kms.CryptoKey(\"example-asymmetric-sign-key\",\n key_ring=keyring.id,\n purpose=\"ASYMMETRIC_SIGN\",\n version_template=gcp.kms.CryptoKeyVersionTemplateArgs(\n algorithm=\"EC_SIGN_P384_SHA384\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var example_asymmetric_sign_key = new Gcp.Kms.CryptoKey(\"example-asymmetric-sign-key\", new()\n {\n KeyRing = keyring.Id,\n Purpose = \"ASYMMETRIC_SIGN\",\n VersionTemplate = new Gcp.Kms.Inputs.CryptoKeyVersionTemplateArgs\n {\n Algorithm = \"EC_SIGN_P384_SHA384\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewCryptoKey(ctx, \"example-asymmetric-sign-key\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tPurpose: pulumi.String(\"ASYMMETRIC_SIGN\"),\n\t\t\tVersionTemplate: \u0026kms.CryptoKeyVersionTemplateArgs{\n\t\t\t\tAlgorithm: pulumi.String(\"EC_SIGN_P384_SHA384\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.kms.inputs.CryptoKeyVersionTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n var example_asymmetric_sign_key = new CryptoKey(\"example-asymmetric-sign-key\", CryptoKeyArgs.builder() \n .keyRing(keyring.id())\n .purpose(\"ASYMMETRIC_SIGN\")\n .versionTemplate(CryptoKeyVersionTemplateArgs.builder()\n .algorithm(\"EC_SIGN_P384_SHA384\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n example-asymmetric-sign-key:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyring.id}\n purpose: ASYMMETRIC_SIGN\n versionTemplate:\n algorithm: EC_SIGN_P384_SHA384\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCryptoKey can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:kms/cryptoKey:CryptoKey default {{key_ring}}/cryptoKeys/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:kms/cryptoKey:CryptoKey default {{key_ring}}/{{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Kms Crypto Key Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst example_key = new gcp.kms.CryptoKey(\"example-key\", {\n keyRing: keyring.id,\n rotationPeriod: \"100000s\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\nexample_key = gcp.kms.CryptoKey(\"example-key\",\n key_ring=keyring.id,\n rotation_period=\"100000s\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var example_key = new Gcp.Kms.CryptoKey(\"example-key\", new()\n {\n KeyRing = keyring.Id,\n RotationPeriod = \"100000s\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewCryptoKey(ctx, \"example-key\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tRotationPeriod: pulumi.String(\"100000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n var example_key = new CryptoKey(\"example-key\", CryptoKeyArgs.builder() \n .keyRing(keyring.id())\n .rotationPeriod(\"100000s\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n example-key:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyring.id}\n rotationPeriod: 100000s\n```\n{{% /example %}}\n{{% example %}}\n### Kms Crypto Key Asymmetric Sign\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst example_asymmetric_sign_key = new gcp.kms.CryptoKey(\"example-asymmetric-sign-key\", {\n keyRing: keyring.id,\n purpose: \"ASYMMETRIC_SIGN\",\n versionTemplate: {\n algorithm: \"EC_SIGN_P384_SHA384\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\nexample_asymmetric_sign_key = gcp.kms.CryptoKey(\"example-asymmetric-sign-key\",\n key_ring=keyring.id,\n purpose=\"ASYMMETRIC_SIGN\",\n version_template=gcp.kms.CryptoKeyVersionTemplateArgs(\n algorithm=\"EC_SIGN_P384_SHA384\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var example_asymmetric_sign_key = new Gcp.Kms.CryptoKey(\"example-asymmetric-sign-key\", new()\n {\n KeyRing = keyring.Id,\n Purpose = \"ASYMMETRIC_SIGN\",\n VersionTemplate = new Gcp.Kms.Inputs.CryptoKeyVersionTemplateArgs\n {\n Algorithm = \"EC_SIGN_P384_SHA384\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewCryptoKey(ctx, \"example-asymmetric-sign-key\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tPurpose: pulumi.String(\"ASYMMETRIC_SIGN\"),\n\t\t\tVersionTemplate: \u0026kms.CryptoKeyVersionTemplateArgs{\n\t\t\t\tAlgorithm: pulumi.String(\"EC_SIGN_P384_SHA384\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.kms.inputs.CryptoKeyVersionTemplateArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n var example_asymmetric_sign_key = new CryptoKey(\"example-asymmetric-sign-key\", CryptoKeyArgs.builder() \n .keyRing(keyring.id())\n .purpose(\"ASYMMETRIC_SIGN\")\n .versionTemplate(CryptoKeyVersionTemplateArgs.builder()\n .algorithm(\"EC_SIGN_P384_SHA384\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n example-asymmetric-sign-key:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyring.id}\n purpose: ASYMMETRIC_SIGN\n versionTemplate:\n algorithm: EC_SIGN_P384_SHA384\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCryptoKey can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:kms/cryptoKey:CryptoKey default {{key_ring}}/cryptoKeys/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:kms/cryptoKey:CryptoKey default {{key_ring}}/{{name}}\n```\n\n ", "properties": { "destroyScheduledDuration": { "type": "string", @@ -172070,7 +173609,7 @@ } }, "gcp:kms/cryptoKeyIAMBinding:CryptoKeyIAMBinding": { - "description": "Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case:\n\n* `gcp.kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached.\n* `gcp.kms.CryptoKeyIAMBinding`: 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 crypto key are preserved.\n* `gcp.kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved.\n\n\u003e **Note:** `gcp.kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `gcp.kms.CryptoKeyIAMBinding` and `gcp.kms.CryptoKeyIAMMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `gcp.kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst key = new gcp.kms.CryptoKey(\"key\", {\n keyRing: keyring.id,\n rotationPeriod: \"100000s\",\n});\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst cryptoKey = new gcp.kms.CryptoKeyIAMPolicy(\"cryptoKey\", {\n cryptoKeyId: key.id,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\nkey = gcp.kms.CryptoKey(\"key\",\n key_ring=keyring.id,\n rotation_period=\"100000s\")\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n members=[\"user:jane@example.com\"],\n)])\ncrypto_key = gcp.kms.CryptoKeyIAMPolicy(\"cryptoKey\",\n crypto_key_id=key.id,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var key = new Gcp.Kms.CryptoKey(\"key\", new()\n {\n KeyRing = keyring.Id,\n RotationPeriod = \"100000s\",\n });\n\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMPolicy(\"cryptoKey\", new()\n {\n CryptoKeyId = key.Id,\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/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkey, err := kms.NewCryptoKey(ctx, \"key\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tRotationPeriod: pulumi.String(\"100000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\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/cloudkms.cryptoKeyEncrypter\",\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 = kms.NewCryptoKeyIAMPolicy(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMPolicyArgs{\n\t\t\tCryptoKeyId: key.ID(),\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMPolicy;\nimport com.pulumi.gcp.kms.CryptoKeyIAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n var key = new CryptoKey(\"key\", CryptoKeyArgs.builder() \n .keyRing(keyring.id())\n .rotationPeriod(\"100000s\")\n .build());\n\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var cryptoKey = new CryptoKeyIAMPolicy(\"cryptoKey\", CryptoKeyIAMPolicyArgs.builder() \n .cryptoKeyId(key.id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n key:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyring.id}\n rotationPeriod: 100000s\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMPolicy\n properties:\n cryptoKeyId: ${key.id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/cloudkms.cryptoKeyEncrypter\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n)])\n```\n```csharp\nusing System.Collections.Generic;\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 Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t},\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\tRole: \"roles/cloudkms.cryptoKeyEncrypter\",\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\treturn nil\n\t})\n}\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 .condition(GetIAMPolicyBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n role: roles/cloudkms.cryptoKeyEncrypter\n```\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cryptoKey = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKey\", {\n cryptoKeyId: google_kms_crypto_key.key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncrypto_key = gcp.kms.CryptoKeyIAMBinding(\"cryptoKey\",\n crypto_key_id=google_kms_crypto_key[\"key\"][\"id\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKey\", new()\n {\n CryptoKeyId = google_kms_crypto_key.Key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\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/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypter\"),\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.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cryptoKey = new CryptoKeyIAMBinding(\"cryptoKey\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(google_kms_crypto_key.key().id())\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${google_kms_crypto_key.key.id}\n role: roles/cloudkms.cryptoKeyEncrypter\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cryptoKey = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKey\", {\n cryptoKeyId: google_kms_crypto_key.key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncrypto_key = gcp.kms.CryptoKeyIAMBinding(\"cryptoKey\",\n crypto_key_id=google_kms_crypto_key[\"key\"][\"id\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n members=[\"user:jane@example.com\"],\n condition=gcp.kms.CryptoKeyIAMBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKey\", new()\n {\n CryptoKeyId = google_kms_crypto_key.Key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Kms.Inputs.CryptoKeyIAMBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026kms.CryptoKeyIAMBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.kms.inputs.CryptoKeyIAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cryptoKey = new CryptoKeyIAMBinding(\"cryptoKey\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(google_kms_crypto_key.key().id())\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .members(\"user:jane@example.com\")\n .condition(CryptoKeyIAMBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${google_kms_crypto_key.key.id}\n role: roles/cloudkms.cryptoKeyEncrypter\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"cryptoKey\", {\n cryptoKeyId: google_kms_crypto_key.key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"cryptoKey\",\n crypto_key_id=google_kms_crypto_key[\"key\"][\"id\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"cryptoKey\", new()\n {\n CryptoKeyId = google_kms_crypto_key.Key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewCryptoKeyIAMMember(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypter\"),\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.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder() \n .cryptoKeyId(google_kms_crypto_key.key().id())\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n properties:\n cryptoKeyId: ${google_kms_crypto_key.key.id}\n role: roles/cloudkms.cryptoKeyEncrypter\n member: user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"cryptoKey\", {\n cryptoKeyId: google_kms_crypto_key.key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"cryptoKey\",\n crypto_key_id=google_kms_crypto_key[\"key\"][\"id\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n member=\"user:jane@example.com\",\n condition=gcp.kms.CryptoKeyIAMMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"cryptoKey\", new()\n {\n CryptoKeyId = google_kms_crypto_key.Key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.Kms.Inputs.CryptoKeyIAMMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewCryptoKeyIAMMember(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypter\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026kms.CryptoKeyIAMMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.kms.inputs.CryptoKeyIAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder() \n .cryptoKeyId(google_kms_crypto_key.key().id())\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .member(\"user:jane@example.com\")\n .condition(CryptoKeyIAMMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n properties:\n cryptoKeyId: ${google_kms_crypto_key.key.id}\n role: roles/cloudkms.cryptoKeyEncrypter\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `crypto_key_id`, role, and member identity e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMBinding:CryptoKeyIAMBinding crypto_key \"your-project-id/location-name/key-ring-name/key-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; first the resource in question and then the role.\n\nThese bindings can be imported using the `crypto_key_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMBinding:CryptoKeyIAMBinding crypto_key \"your-project-id/location-name/key-ring-name/key-name roles/editor\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `crypto_key_id`, e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMBinding:CryptoKeyIAMBinding crypto_key your-project-id/location-name/key-ring-name/key-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `crypto_key_id`, role, and member identity e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMBinding:CryptoKeyIAMBinding crypto_key \"your-project-id/location-name/key-ring-name/key-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; first the resource in question and then the role.\n\nThese bindings can be imported using the `crypto_key_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMBinding:CryptoKeyIAMBinding crypto_key \"your-project-id/location-name/key-ring-name/key-name roles/editor\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `crypto_key_id`, e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMBinding:CryptoKeyIAMBinding crypto_key your-project-id/location-name/key-ring-name/key-name\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:kms/CryptoKeyIAMBindingCondition:CryptoKeyIAMBindingCondition", @@ -172162,7 +173701,7 @@ } }, "gcp:kms/cryptoKeyIAMMember:CryptoKeyIAMMember": { - "description": "Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case:\n\n* `gcp.kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached.\n* `gcp.kms.CryptoKeyIAMBinding`: 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 crypto key are preserved.\n* `gcp.kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved.\n\n\u003e **Note:** `gcp.kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `gcp.kms.CryptoKeyIAMBinding` and `gcp.kms.CryptoKeyIAMMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `gcp.kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst key = new gcp.kms.CryptoKey(\"key\", {\n keyRing: keyring.id,\n rotationPeriod: \"100000s\",\n});\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst cryptoKey = new gcp.kms.CryptoKeyIAMPolicy(\"cryptoKey\", {\n cryptoKeyId: key.id,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\nkey = gcp.kms.CryptoKey(\"key\",\n key_ring=keyring.id,\n rotation_period=\"100000s\")\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n members=[\"user:jane@example.com\"],\n)])\ncrypto_key = gcp.kms.CryptoKeyIAMPolicy(\"cryptoKey\",\n crypto_key_id=key.id,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var key = new Gcp.Kms.CryptoKey(\"key\", new()\n {\n KeyRing = keyring.Id,\n RotationPeriod = \"100000s\",\n });\n\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMPolicy(\"cryptoKey\", new()\n {\n CryptoKeyId = key.Id,\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/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkey, err := kms.NewCryptoKey(ctx, \"key\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tRotationPeriod: pulumi.String(\"100000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\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/cloudkms.cryptoKeyEncrypter\",\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 = kms.NewCryptoKeyIAMPolicy(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMPolicyArgs{\n\t\t\tCryptoKeyId: key.ID(),\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMPolicy;\nimport com.pulumi.gcp.kms.CryptoKeyIAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n var key = new CryptoKey(\"key\", CryptoKeyArgs.builder() \n .keyRing(keyring.id())\n .rotationPeriod(\"100000s\")\n .build());\n\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var cryptoKey = new CryptoKeyIAMPolicy(\"cryptoKey\", CryptoKeyIAMPolicyArgs.builder() \n .cryptoKeyId(key.id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n key:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyring.id}\n rotationPeriod: 100000s\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMPolicy\n properties:\n cryptoKeyId: ${key.id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/cloudkms.cryptoKeyEncrypter\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n)])\n```\n```csharp\nusing System.Collections.Generic;\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 Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t},\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\tRole: \"roles/cloudkms.cryptoKeyEncrypter\",\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\treturn nil\n\t})\n}\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 .condition(GetIAMPolicyBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n role: roles/cloudkms.cryptoKeyEncrypter\n```\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cryptoKey = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKey\", {\n cryptoKeyId: google_kms_crypto_key.key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncrypto_key = gcp.kms.CryptoKeyIAMBinding(\"cryptoKey\",\n crypto_key_id=google_kms_crypto_key[\"key\"][\"id\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKey\", new()\n {\n CryptoKeyId = google_kms_crypto_key.Key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\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/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypter\"),\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.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cryptoKey = new CryptoKeyIAMBinding(\"cryptoKey\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(google_kms_crypto_key.key().id())\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${google_kms_crypto_key.key.id}\n role: roles/cloudkms.cryptoKeyEncrypter\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cryptoKey = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKey\", {\n cryptoKeyId: google_kms_crypto_key.key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncrypto_key = gcp.kms.CryptoKeyIAMBinding(\"cryptoKey\",\n crypto_key_id=google_kms_crypto_key[\"key\"][\"id\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n members=[\"user:jane@example.com\"],\n condition=gcp.kms.CryptoKeyIAMBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKey\", new()\n {\n CryptoKeyId = google_kms_crypto_key.Key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Kms.Inputs.CryptoKeyIAMBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026kms.CryptoKeyIAMBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.kms.inputs.CryptoKeyIAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cryptoKey = new CryptoKeyIAMBinding(\"cryptoKey\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(google_kms_crypto_key.key().id())\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .members(\"user:jane@example.com\")\n .condition(CryptoKeyIAMBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${google_kms_crypto_key.key.id}\n role: roles/cloudkms.cryptoKeyEncrypter\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"cryptoKey\", {\n cryptoKeyId: google_kms_crypto_key.key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"cryptoKey\",\n crypto_key_id=google_kms_crypto_key[\"key\"][\"id\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"cryptoKey\", new()\n {\n CryptoKeyId = google_kms_crypto_key.Key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewCryptoKeyIAMMember(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypter\"),\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.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder() \n .cryptoKeyId(google_kms_crypto_key.key().id())\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n properties:\n cryptoKeyId: ${google_kms_crypto_key.key.id}\n role: roles/cloudkms.cryptoKeyEncrypter\n member: user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"cryptoKey\", {\n cryptoKeyId: google_kms_crypto_key.key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"cryptoKey\",\n crypto_key_id=google_kms_crypto_key[\"key\"][\"id\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n member=\"user:jane@example.com\",\n condition=gcp.kms.CryptoKeyIAMMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"cryptoKey\", new()\n {\n CryptoKeyId = google_kms_crypto_key.Key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.Kms.Inputs.CryptoKeyIAMMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewCryptoKeyIAMMember(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypter\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026kms.CryptoKeyIAMMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.kms.inputs.CryptoKeyIAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder() \n .cryptoKeyId(google_kms_crypto_key.key().id())\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .member(\"user:jane@example.com\")\n .condition(CryptoKeyIAMMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n properties:\n cryptoKeyId: ${google_kms_crypto_key.key.id}\n role: roles/cloudkms.cryptoKeyEncrypter\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `crypto_key_id`, role, and member identity e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMMember:CryptoKeyIAMMember crypto_key \"your-project-id/location-name/key-ring-name/key-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; first the resource in question and then the role.\n\nThese bindings can be imported using the `crypto_key_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMMember:CryptoKeyIAMMember crypto_key \"your-project-id/location-name/key-ring-name/key-name roles/editor\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `crypto_key_id`, e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMMember:CryptoKeyIAMMember crypto_key your-project-id/location-name/key-ring-name/key-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `crypto_key_id`, role, and member identity e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMMember:CryptoKeyIAMMember crypto_key \"your-project-id/location-name/key-ring-name/key-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; first the resource in question and then the role.\n\nThese bindings can be imported using the `crypto_key_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMMember:CryptoKeyIAMMember crypto_key \"your-project-id/location-name/key-ring-name/key-name roles/editor\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `crypto_key_id`, e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMMember:CryptoKeyIAMMember crypto_key your-project-id/location-name/key-ring-name/key-name\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:kms/CryptoKeyIAMMemberCondition:CryptoKeyIAMMemberCondition", @@ -172247,7 +173786,7 @@ } }, "gcp:kms/cryptoKeyIAMPolicy:CryptoKeyIAMPolicy": { - "description": "Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case:\n\n* `gcp.kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached.\n* `gcp.kms.CryptoKeyIAMBinding`: 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 crypto key are preserved.\n* `gcp.kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved.\n\n\u003e **Note:** `gcp.kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `gcp.kms.CryptoKeyIAMBinding` and `gcp.kms.CryptoKeyIAMMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `gcp.kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst key = new gcp.kms.CryptoKey(\"key\", {\n keyRing: keyring.id,\n rotationPeriod: \"100000s\",\n});\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst cryptoKey = new gcp.kms.CryptoKeyIAMPolicy(\"cryptoKey\", {\n cryptoKeyId: key.id,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\nkey = gcp.kms.CryptoKey(\"key\",\n key_ring=keyring.id,\n rotation_period=\"100000s\")\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n members=[\"user:jane@example.com\"],\n)])\ncrypto_key = gcp.kms.CryptoKeyIAMPolicy(\"cryptoKey\",\n crypto_key_id=key.id,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var key = new Gcp.Kms.CryptoKey(\"key\", new()\n {\n KeyRing = keyring.Id,\n RotationPeriod = \"100000s\",\n });\n\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMPolicy(\"cryptoKey\", new()\n {\n CryptoKeyId = key.Id,\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/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkey, err := kms.NewCryptoKey(ctx, \"key\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tRotationPeriod: pulumi.String(\"100000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\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/cloudkms.cryptoKeyEncrypter\",\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 = kms.NewCryptoKeyIAMPolicy(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMPolicyArgs{\n\t\t\tCryptoKeyId: key.ID(),\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMPolicy;\nimport com.pulumi.gcp.kms.CryptoKeyIAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n var key = new CryptoKey(\"key\", CryptoKeyArgs.builder() \n .keyRing(keyring.id())\n .rotationPeriod(\"100000s\")\n .build());\n\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var cryptoKey = new CryptoKeyIAMPolicy(\"cryptoKey\", CryptoKeyIAMPolicyArgs.builder() \n .cryptoKeyId(key.id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n key:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyring.id}\n rotationPeriod: 100000s\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMPolicy\n properties:\n cryptoKeyId: ${key.id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/cloudkms.cryptoKeyEncrypter\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n }],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n)])\n```\n```csharp\nusing System.Collections.Generic;\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 Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t},\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\tRole: \"roles/cloudkms.cryptoKeyEncrypter\",\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\treturn nil\n\t})\n}\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 .condition(GetIAMPolicyBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n role: roles/cloudkms.cryptoKeyEncrypter\n```\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cryptoKey = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKey\", {\n cryptoKeyId: google_kms_crypto_key.key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncrypto_key = gcp.kms.CryptoKeyIAMBinding(\"cryptoKey\",\n crypto_key_id=google_kms_crypto_key[\"key\"][\"id\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKey\", new()\n {\n CryptoKeyId = google_kms_crypto_key.Key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\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/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypter\"),\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.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cryptoKey = new CryptoKeyIAMBinding(\"cryptoKey\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(google_kms_crypto_key.key().id())\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${google_kms_crypto_key.key.id}\n role: roles/cloudkms.cryptoKeyEncrypter\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cryptoKey = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKey\", {\n cryptoKeyId: google_kms_crypto_key.key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncrypto_key = gcp.kms.CryptoKeyIAMBinding(\"cryptoKey\",\n crypto_key_id=google_kms_crypto_key[\"key\"][\"id\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n members=[\"user:jane@example.com\"],\n condition=gcp.kms.CryptoKeyIAMBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKey\", new()\n {\n CryptoKeyId = google_kms_crypto_key.Key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Kms.Inputs.CryptoKeyIAMBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026kms.CryptoKeyIAMBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.kms.inputs.CryptoKeyIAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cryptoKey = new CryptoKeyIAMBinding(\"cryptoKey\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(google_kms_crypto_key.key().id())\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .members(\"user:jane@example.com\")\n .condition(CryptoKeyIAMBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${google_kms_crypto_key.key.id}\n role: roles/cloudkms.cryptoKeyEncrypter\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"cryptoKey\", {\n cryptoKeyId: google_kms_crypto_key.key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"cryptoKey\",\n crypto_key_id=google_kms_crypto_key[\"key\"][\"id\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"cryptoKey\", new()\n {\n CryptoKeyId = google_kms_crypto_key.Key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewCryptoKeyIAMMember(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypter\"),\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.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder() \n .cryptoKeyId(google_kms_crypto_key.key().id())\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n properties:\n cryptoKeyId: ${google_kms_crypto_key.key.id}\n role: roles/cloudkms.cryptoKeyEncrypter\n member: user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cryptoKey = new gcp.kms.CryptoKeyIAMMember(\"cryptoKey\", {\n cryptoKeyId: google_kms_crypto_key.key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypter\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncrypto_key = gcp.kms.CryptoKeyIAMMember(\"cryptoKey\",\n crypto_key_id=google_kms_crypto_key[\"key\"][\"id\"],\n role=\"roles/cloudkms.cryptoKeyEncrypter\",\n member=\"user:jane@example.com\",\n condition=gcp.kms.CryptoKeyIAMMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember(\"cryptoKey\", new()\n {\n CryptoKeyId = google_kms_crypto_key.Key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypter\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.Kms.Inputs.CryptoKeyIAMMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewCryptoKeyIAMMember(ctx, \"cryptoKey\", \u0026kms.CryptoKeyIAMMemberArgs{\n\t\t\tCryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypter\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026kms.CryptoKeyIAMMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMember;\nimport com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs;\nimport com.pulumi.gcp.kms.inputs.CryptoKeyIAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cryptoKey = new CryptoKeyIAMMember(\"cryptoKey\", CryptoKeyIAMMemberArgs.builder() \n .cryptoKeyId(google_kms_crypto_key.key().id())\n .role(\"roles/cloudkms.cryptoKeyEncrypter\")\n .member(\"user:jane@example.com\")\n .condition(CryptoKeyIAMMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cryptoKey:\n type: gcp:kms:CryptoKeyIAMMember\n properties:\n cryptoKeyId: ${google_kms_crypto_key.key.id}\n role: roles/cloudkms.cryptoKeyEncrypter\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `crypto_key_id`, role, and member identity e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMPolicy:CryptoKeyIAMPolicy crypto_key \"your-project-id/location-name/key-ring-name/key-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; first the resource in question and then the role.\n\nThese bindings can be imported using the `crypto_key_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMPolicy:CryptoKeyIAMPolicy crypto_key \"your-project-id/location-name/key-ring-name/key-name roles/editor\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `crypto_key_id`, e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMPolicy:CryptoKeyIAMPolicy crypto_key your-project-id/location-name/key-ring-name/key-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `crypto_key_id`, role, and member identity e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMPolicy:CryptoKeyIAMPolicy crypto_key \"your-project-id/location-name/key-ring-name/key-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; first the resource in question and then the role.\n\nThese bindings can be imported using the `crypto_key_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMPolicy:CryptoKeyIAMPolicy crypto_key \"your-project-id/location-name/key-ring-name/key-name roles/editor\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `crypto_key_id`, e.g.\n\n```sh\n $ pulumi import gcp:kms/cryptoKeyIAMPolicy:CryptoKeyIAMPolicy crypto_key your-project-id/location-name/key-ring-name/key-name\n```\n\n ", "properties": { "cryptoKeyId": { "type": "string", @@ -172400,7 +173939,7 @@ } }, "gcp:kms/keyRing:KeyRing": { - "description": "A `KeyRing` is a toplevel logical grouping of `CryptoKeys`.\n\n\n\u003e **Note:** KeyRings cannot be deleted from Google Cloud Platform.\nDestroying a provider-managed KeyRing will remove it from state but\n*will not delete the resource from the project.*\n\n\nTo get more information about KeyRing, see:\n\n* [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings)\n* How-to Guides\n * [Creating a key ring](https://cloud.google.com/kms/docs/creating-keys#create_a_key_ring)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Kms Key Ring Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example_keyring = new gcp.kms.KeyRing(\"example-keyring\", {location: \"global\"});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_keyring = gcp.kms.KeyRing(\"example-keyring\", location=\"global\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example_keyring = new Gcp.Kms.KeyRing(\"example-keyring\", new()\n {\n Location = \"global\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRing(ctx, \"example-keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_keyring = new KeyRing(\"example-keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nKeyRing can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:kms/keyRing:KeyRing default projects/{{project}}/locations/{{location}}/keyRings/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:kms/keyRing:KeyRing default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:kms/keyRing:KeyRing default {{location}}/{{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Kms Key Ring Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example_keyring = new gcp.kms.KeyRing(\"example-keyring\", {location: \"global\"});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_keyring = gcp.kms.KeyRing(\"example-keyring\", location=\"global\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example_keyring = new Gcp.Kms.KeyRing(\"example-keyring\", new()\n {\n Location = \"global\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRing(ctx, \"example-keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_keyring = new KeyRing(\"example-keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example-keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nKeyRing can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:kms/keyRing:KeyRing default projects/{{project}}/locations/{{location}}/keyRings/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:kms/keyRing:KeyRing default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:kms/keyRing:KeyRing default {{location}}/{{name}}\n```\n\n ", "properties": { "location": { "type": "string", @@ -172463,7 +174002,7 @@ } }, "gcp:kms/keyRingIAMBinding:KeyRingIAMBinding": { - "description": "Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case:\n\n* `gcp.kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached.\n* `gcp.kms.KeyRingIAMBinding`: 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 key ring are preserved.\n* `gcp.kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved.\n\n\u003e **Note:** `gcp.kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `gcp.kms.KeyRingIAMBinding` and `gcp.kms.KeyRingIAMMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.kms.KeyRingIAMBinding` resources **can be** used in conjunction with `gcp.kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_kms\\_key\\_ring\\_iam\\_policy\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst keyRing = new gcp.kms.KeyRingIAMPolicy(\"keyRing\", {\n keyRingId: keyring.id,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nkey_ring = gcp.kms.KeyRingIAMPolicy(\"keyRing\",\n key_ring_id=keyring.id,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var keyRing = new Gcp.Kms.KeyRingIAMPolicy(\"keyRing\", new()\n {\n KeyRingId = keyring.Id,\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/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\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/editor\",\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 = kms.NewKeyRingIAMPolicy(ctx, \"keyRing\", \u0026kms.KeyRingIAMPolicyArgs{\n\t\t\tKeyRingId: keyring.ID(),\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.kms.KeyRingIAMPolicy;\nimport com.pulumi.gcp.kms.KeyRingIAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var keyRing = new KeyRingIAMPolicy(\"keyRing\", KeyRingIAMPolicyArgs.builder() \n .keyRingId(keyring.id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n keyRing:\n type: gcp:kms:KeyRingIAMPolicy\n properties:\n keyRingId: ${keyring.id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/editor\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }],\n});\nconst keyRing = new gcp.kms.KeyRingIAMPolicy(\"keyRing\", {\n keyRingId: keyring.id,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ),\n)])\nkey_ring = gcp.kms.KeyRingIAMPolicy(\"keyRing\",\n key_ring_id=keyring.id,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n },\n },\n });\n\n var keyRing = new Gcp.Kms.KeyRingIAMPolicy(\"keyRing\", new()\n {\n KeyRingId = keyring.Id,\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/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\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/editor\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewKeyRingIAMPolicy(ctx, \"keyRing\", \u0026kms.KeyRingIAMPolicyArgs{\n\t\t\tKeyRingId: keyring.ID(),\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.kms.KeyRingIAMPolicy;\nimport com.pulumi.gcp.kms.KeyRingIAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/editor\")\n .members(\"user:jane@example.com\")\n .condition(GetIAMPolicyBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build())\n .build());\n\n var keyRing = new KeyRingIAMPolicy(\"keyRing\", KeyRingIAMPolicyArgs.builder() \n .keyRingId(keyring.id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n keyRing:\n type: gcp:kms:KeyRingIAMPolicy\n properties:\n keyRingId: ${keyring.id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n## google\\_kms\\_key\\_ring\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRingIAMBinding(\"keyRing\", {\n keyRingId: \"your-key-ring-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/cloudkms.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRingIAMBinding(\"keyRing\",\n key_ring_id=\"your-key-ring-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/cloudkms.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRingIAMBinding(\"keyRing\", new()\n {\n KeyRingId = \"your-key-ring-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/cloudkms.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRingIAMBinding(ctx, \"keyRing\", \u0026kms.KeyRingIAMBindingArgs{\n\t\t\tKeyRingId: pulumi.String(\"your-key-ring-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/cloudkms.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRingIAMBinding;\nimport com.pulumi.gcp.kms.KeyRingIAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRingIAMBinding(\"keyRing\", KeyRingIAMBindingArgs.builder() \n .keyRingId(\"your-key-ring-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/cloudkms.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyRing:\n type: gcp:kms:KeyRingIAMBinding\n properties:\n keyRingId: your-key-ring-id\n members:\n - user:jane@example.com\n role: roles/cloudkms.admin\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRingIAMBinding(\"keyRing\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n keyRingId: \"your-key-ring-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/cloudkms.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRingIAMBinding(\"keyRing\",\n condition=gcp.kms.KeyRingIAMBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n key_ring_id=\"your-key-ring-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/cloudkms.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRingIAMBinding(\"keyRing\", new()\n {\n Condition = new Gcp.Kms.Inputs.KeyRingIAMBindingConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n KeyRingId = \"your-key-ring-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/cloudkms.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRingIAMBinding(ctx, \"keyRing\", \u0026kms.KeyRingIAMBindingArgs{\n\t\t\tCondition: \u0026kms.KeyRingIAMBindingConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tKeyRingId: pulumi.String(\"your-key-ring-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/cloudkms.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRingIAMBinding;\nimport com.pulumi.gcp.kms.KeyRingIAMBindingArgs;\nimport com.pulumi.gcp.kms.inputs.KeyRingIAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRingIAMBinding(\"keyRing\", KeyRingIAMBindingArgs.builder() \n .condition(KeyRingIAMBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .keyRingId(\"your-key-ring-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/cloudkms.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyRing:\n type: gcp:kms:KeyRingIAMBinding\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n keyRingId: your-key-ring-id\n members:\n - user:jane@example.com\n role: roles/cloudkms.admin\n```\n\n## google\\_kms\\_key\\_ring\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRingIAMMember(\"keyRing\", {\n keyRingId: \"your-key-ring-id\",\n member: \"user:jane@example.com\",\n role: \"roles/cloudkms.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRingIAMMember(\"keyRing\",\n key_ring_id=\"your-key-ring-id\",\n member=\"user:jane@example.com\",\n role=\"roles/cloudkms.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRingIAMMember(\"keyRing\", new()\n {\n KeyRingId = \"your-key-ring-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/cloudkms.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRingIAMMember(ctx, \"keyRing\", \u0026kms.KeyRingIAMMemberArgs{\n\t\t\tKeyRingId: pulumi.String(\"your-key-ring-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRingIAMMember;\nimport com.pulumi.gcp.kms.KeyRingIAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRingIAMMember(\"keyRing\", KeyRingIAMMemberArgs.builder() \n .keyRingId(\"your-key-ring-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/cloudkms.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyRing:\n type: gcp:kms:KeyRingIAMMember\n properties:\n keyRingId: your-key-ring-id\n member: user:jane@example.com\n role: roles/cloudkms.admin\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRingIAMMember(\"keyRing\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n keyRingId: \"your-key-ring-id\",\n member: \"user:jane@example.com\",\n role: \"roles/cloudkms.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRingIAMMember(\"keyRing\",\n condition=gcp.kms.KeyRingIAMMemberConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n key_ring_id=\"your-key-ring-id\",\n member=\"user:jane@example.com\",\n role=\"roles/cloudkms.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRingIAMMember(\"keyRing\", new()\n {\n Condition = new Gcp.Kms.Inputs.KeyRingIAMMemberConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n KeyRingId = \"your-key-ring-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/cloudkms.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRingIAMMember(ctx, \"keyRing\", \u0026kms.KeyRingIAMMemberArgs{\n\t\t\tCondition: \u0026kms.KeyRingIAMMemberConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tKeyRingId: pulumi.String(\"your-key-ring-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRingIAMMember;\nimport com.pulumi.gcp.kms.KeyRingIAMMemberArgs;\nimport com.pulumi.gcp.kms.inputs.KeyRingIAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRingIAMMember(\"keyRing\", KeyRingIAMMemberArgs.builder() \n .condition(KeyRingIAMMemberConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .keyRingId(\"your-key-ring-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/cloudkms.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyRing:\n type: gcp:kms:KeyRingIAMMember\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n keyRingId: your-key-ring-id\n member: user:jane@example.com\n role: roles/cloudkms.admin\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `key_ring_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMBinding:KeyRingIAMBinding key_ring_iam \"your-project-id/location-name/key-ring-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `key_ring_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMBinding:KeyRingIAMBinding key_ring_iam \"your-project-id/location-name/key-ring-name roles/cloudkms.admin\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `key_ring_id`, e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMBinding:KeyRingIAMBinding key_ring_iam your-project-id/location-name/key-ring-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `key_ring_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMBinding:KeyRingIAMBinding key_ring_iam \"your-project-id/location-name/key-ring-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `key_ring_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMBinding:KeyRingIAMBinding key_ring_iam \"your-project-id/location-name/key-ring-name roles/cloudkms.admin\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `key_ring_id`, e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMBinding:KeyRingIAMBinding key_ring_iam your-project-id/location-name/key-ring-name\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:kms/KeyRingIAMBindingCondition:KeyRingIAMBindingCondition", @@ -172555,7 +174094,7 @@ } }, "gcp:kms/keyRingIAMMember:KeyRingIAMMember": { - "description": "Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case:\n\n* `gcp.kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached.\n* `gcp.kms.KeyRingIAMBinding`: 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 key ring are preserved.\n* `gcp.kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved.\n\n\u003e **Note:** `gcp.kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `gcp.kms.KeyRingIAMBinding` and `gcp.kms.KeyRingIAMMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.kms.KeyRingIAMBinding` resources **can be** used in conjunction with `gcp.kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_kms\\_key\\_ring\\_iam\\_policy\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst keyRing = new gcp.kms.KeyRingIAMPolicy(\"keyRing\", {\n keyRingId: keyring.id,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nkey_ring = gcp.kms.KeyRingIAMPolicy(\"keyRing\",\n key_ring_id=keyring.id,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var keyRing = new Gcp.Kms.KeyRingIAMPolicy(\"keyRing\", new()\n {\n KeyRingId = keyring.Id,\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/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\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/editor\",\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 = kms.NewKeyRingIAMPolicy(ctx, \"keyRing\", \u0026kms.KeyRingIAMPolicyArgs{\n\t\t\tKeyRingId: keyring.ID(),\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.kms.KeyRingIAMPolicy;\nimport com.pulumi.gcp.kms.KeyRingIAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var keyRing = new KeyRingIAMPolicy(\"keyRing\", KeyRingIAMPolicyArgs.builder() \n .keyRingId(keyring.id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n keyRing:\n type: gcp:kms:KeyRingIAMPolicy\n properties:\n keyRingId: ${keyring.id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/editor\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }],\n});\nconst keyRing = new gcp.kms.KeyRingIAMPolicy(\"keyRing\", {\n keyRingId: keyring.id,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ),\n)])\nkey_ring = gcp.kms.KeyRingIAMPolicy(\"keyRing\",\n key_ring_id=keyring.id,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n },\n },\n });\n\n var keyRing = new Gcp.Kms.KeyRingIAMPolicy(\"keyRing\", new()\n {\n KeyRingId = keyring.Id,\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/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\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/editor\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewKeyRingIAMPolicy(ctx, \"keyRing\", \u0026kms.KeyRingIAMPolicyArgs{\n\t\t\tKeyRingId: keyring.ID(),\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.kms.KeyRingIAMPolicy;\nimport com.pulumi.gcp.kms.KeyRingIAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/editor\")\n .members(\"user:jane@example.com\")\n .condition(GetIAMPolicyBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build())\n .build());\n\n var keyRing = new KeyRingIAMPolicy(\"keyRing\", KeyRingIAMPolicyArgs.builder() \n .keyRingId(keyring.id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n keyRing:\n type: gcp:kms:KeyRingIAMPolicy\n properties:\n keyRingId: ${keyring.id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n## google\\_kms\\_key\\_ring\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRingIAMBinding(\"keyRing\", {\n keyRingId: \"your-key-ring-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/cloudkms.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRingIAMBinding(\"keyRing\",\n key_ring_id=\"your-key-ring-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/cloudkms.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRingIAMBinding(\"keyRing\", new()\n {\n KeyRingId = \"your-key-ring-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/cloudkms.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRingIAMBinding(ctx, \"keyRing\", \u0026kms.KeyRingIAMBindingArgs{\n\t\t\tKeyRingId: pulumi.String(\"your-key-ring-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/cloudkms.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRingIAMBinding;\nimport com.pulumi.gcp.kms.KeyRingIAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRingIAMBinding(\"keyRing\", KeyRingIAMBindingArgs.builder() \n .keyRingId(\"your-key-ring-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/cloudkms.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyRing:\n type: gcp:kms:KeyRingIAMBinding\n properties:\n keyRingId: your-key-ring-id\n members:\n - user:jane@example.com\n role: roles/cloudkms.admin\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRingIAMBinding(\"keyRing\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n keyRingId: \"your-key-ring-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/cloudkms.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRingIAMBinding(\"keyRing\",\n condition=gcp.kms.KeyRingIAMBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n key_ring_id=\"your-key-ring-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/cloudkms.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRingIAMBinding(\"keyRing\", new()\n {\n Condition = new Gcp.Kms.Inputs.KeyRingIAMBindingConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n KeyRingId = \"your-key-ring-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/cloudkms.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRingIAMBinding(ctx, \"keyRing\", \u0026kms.KeyRingIAMBindingArgs{\n\t\t\tCondition: \u0026kms.KeyRingIAMBindingConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tKeyRingId: pulumi.String(\"your-key-ring-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/cloudkms.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRingIAMBinding;\nimport com.pulumi.gcp.kms.KeyRingIAMBindingArgs;\nimport com.pulumi.gcp.kms.inputs.KeyRingIAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRingIAMBinding(\"keyRing\", KeyRingIAMBindingArgs.builder() \n .condition(KeyRingIAMBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .keyRingId(\"your-key-ring-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/cloudkms.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyRing:\n type: gcp:kms:KeyRingIAMBinding\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n keyRingId: your-key-ring-id\n members:\n - user:jane@example.com\n role: roles/cloudkms.admin\n```\n\n## google\\_kms\\_key\\_ring\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRingIAMMember(\"keyRing\", {\n keyRingId: \"your-key-ring-id\",\n member: \"user:jane@example.com\",\n role: \"roles/cloudkms.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRingIAMMember(\"keyRing\",\n key_ring_id=\"your-key-ring-id\",\n member=\"user:jane@example.com\",\n role=\"roles/cloudkms.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRingIAMMember(\"keyRing\", new()\n {\n KeyRingId = \"your-key-ring-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/cloudkms.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRingIAMMember(ctx, \"keyRing\", \u0026kms.KeyRingIAMMemberArgs{\n\t\t\tKeyRingId: pulumi.String(\"your-key-ring-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRingIAMMember;\nimport com.pulumi.gcp.kms.KeyRingIAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRingIAMMember(\"keyRing\", KeyRingIAMMemberArgs.builder() \n .keyRingId(\"your-key-ring-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/cloudkms.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyRing:\n type: gcp:kms:KeyRingIAMMember\n properties:\n keyRingId: your-key-ring-id\n member: user:jane@example.com\n role: roles/cloudkms.admin\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRingIAMMember(\"keyRing\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n keyRingId: \"your-key-ring-id\",\n member: \"user:jane@example.com\",\n role: \"roles/cloudkms.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRingIAMMember(\"keyRing\",\n condition=gcp.kms.KeyRingIAMMemberConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n key_ring_id=\"your-key-ring-id\",\n member=\"user:jane@example.com\",\n role=\"roles/cloudkms.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRingIAMMember(\"keyRing\", new()\n {\n Condition = new Gcp.Kms.Inputs.KeyRingIAMMemberConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n KeyRingId = \"your-key-ring-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/cloudkms.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRingIAMMember(ctx, \"keyRing\", \u0026kms.KeyRingIAMMemberArgs{\n\t\t\tCondition: \u0026kms.KeyRingIAMMemberConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tKeyRingId: pulumi.String(\"your-key-ring-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRingIAMMember;\nimport com.pulumi.gcp.kms.KeyRingIAMMemberArgs;\nimport com.pulumi.gcp.kms.inputs.KeyRingIAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRingIAMMember(\"keyRing\", KeyRingIAMMemberArgs.builder() \n .condition(KeyRingIAMMemberConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .keyRingId(\"your-key-ring-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/cloudkms.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyRing:\n type: gcp:kms:KeyRingIAMMember\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n keyRingId: your-key-ring-id\n member: user:jane@example.com\n role: roles/cloudkms.admin\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `key_ring_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMMember:KeyRingIAMMember key_ring_iam \"your-project-id/location-name/key-ring-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `key_ring_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMMember:KeyRingIAMMember key_ring_iam \"your-project-id/location-name/key-ring-name roles/cloudkms.admin\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `key_ring_id`, e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMMember:KeyRingIAMMember key_ring_iam your-project-id/location-name/key-ring-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `key_ring_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMMember:KeyRingIAMMember key_ring_iam \"your-project-id/location-name/key-ring-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `key_ring_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMMember:KeyRingIAMMember key_ring_iam \"your-project-id/location-name/key-ring-name roles/cloudkms.admin\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `key_ring_id`, e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMMember:KeyRingIAMMember key_ring_iam your-project-id/location-name/key-ring-name\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:kms/KeyRingIAMMemberCondition:KeyRingIAMMemberCondition", @@ -172640,7 +174179,7 @@ } }, "gcp:kms/keyRingIAMPolicy:KeyRingIAMPolicy": { - "description": "Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case:\n\n* `gcp.kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached.\n* `gcp.kms.KeyRingIAMBinding`: 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 key ring are preserved.\n* `gcp.kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved.\n\n\u003e **Note:** `gcp.kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `gcp.kms.KeyRingIAMBinding` and `gcp.kms.KeyRingIAMMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.kms.KeyRingIAMBinding` resources **can be** used in conjunction with `gcp.kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_kms\\_key\\_ring\\_iam\\_policy\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst keyRing = new gcp.kms.KeyRingIAMPolicy(\"keyRing\", {\n keyRingId: keyring.id,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nkey_ring = gcp.kms.KeyRingIAMPolicy(\"keyRing\",\n key_ring_id=keyring.id,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var keyRing = new Gcp.Kms.KeyRingIAMPolicy(\"keyRing\", new()\n {\n KeyRingId = keyring.Id,\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/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\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/editor\",\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 = kms.NewKeyRingIAMPolicy(ctx, \"keyRing\", \u0026kms.KeyRingIAMPolicyArgs{\n\t\t\tKeyRingId: keyring.ID(),\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.kms.KeyRingIAMPolicy;\nimport com.pulumi.gcp.kms.KeyRingIAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var keyRing = new KeyRingIAMPolicy(\"keyRing\", KeyRingIAMPolicyArgs.builder() \n .keyRingId(keyring.id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n keyRing:\n type: gcp:kms:KeyRingIAMPolicy\n properties:\n keyRingId: ${keyring.id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n role: \"roles/editor\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n }],\n});\nconst keyRing = new gcp.kms.KeyRingIAMPolicy(\"keyRing\", {\n keyRingId: keyring.id,\n policyData: admin.then(admin =\u003e admin.policyData),\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ),\n)])\nkey_ring = gcp.kms.KeyRingIAMPolicy(\"keyRing\",\n key_ring_id=keyring.id,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new()\n {\n Bindings = new[]\n {\n new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs\n {\n Role = \"roles/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n },\n },\n });\n\n var keyRing = new Gcp.Kms.KeyRingIAMPolicy(\"keyRing\", new()\n {\n KeyRingId = keyring.Id,\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/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\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/editor\",\n\t\t\t\t\tMembers: []string{\n\t\t\t\t\t\t\"user:jane@example.com\",\n\t\t\t\t\t},\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = kms.NewKeyRingIAMPolicy(ctx, \"keyRing\", \u0026kms.KeyRingIAMPolicyArgs{\n\t\t\tKeyRingId: keyring.ID(),\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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.kms.KeyRingIAMPolicy;\nimport com.pulumi.gcp.kms.KeyRingIAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder()\n .bindings(GetIAMPolicyBindingArgs.builder()\n .role(\"roles/editor\")\n .members(\"user:jane@example.com\")\n .condition(GetIAMPolicyBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build())\n .build());\n\n var keyRing = new KeyRingIAMPolicy(\"keyRing\", KeyRingIAMPolicyArgs.builder() \n .keyRingId(keyring.id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n keyRing:\n type: gcp:kms:KeyRingIAMPolicy\n properties:\n keyRingId: ${keyring.id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n## google\\_kms\\_key\\_ring\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRingIAMBinding(\"keyRing\", {\n keyRingId: \"your-key-ring-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/cloudkms.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRingIAMBinding(\"keyRing\",\n key_ring_id=\"your-key-ring-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/cloudkms.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRingIAMBinding(\"keyRing\", new()\n {\n KeyRingId = \"your-key-ring-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/cloudkms.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRingIAMBinding(ctx, \"keyRing\", \u0026kms.KeyRingIAMBindingArgs{\n\t\t\tKeyRingId: pulumi.String(\"your-key-ring-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/cloudkms.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRingIAMBinding;\nimport com.pulumi.gcp.kms.KeyRingIAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRingIAMBinding(\"keyRing\", KeyRingIAMBindingArgs.builder() \n .keyRingId(\"your-key-ring-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/cloudkms.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyRing:\n type: gcp:kms:KeyRingIAMBinding\n properties:\n keyRingId: your-key-ring-id\n members:\n - user:jane@example.com\n role: roles/cloudkms.admin\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRingIAMBinding(\"keyRing\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n keyRingId: \"your-key-ring-id\",\n members: [\"user:jane@example.com\"],\n role: \"roles/cloudkms.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRingIAMBinding(\"keyRing\",\n condition=gcp.kms.KeyRingIAMBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n key_ring_id=\"your-key-ring-id\",\n members=[\"user:jane@example.com\"],\n role=\"roles/cloudkms.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRingIAMBinding(\"keyRing\", new()\n {\n Condition = new Gcp.Kms.Inputs.KeyRingIAMBindingConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n KeyRingId = \"your-key-ring-id\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/cloudkms.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRingIAMBinding(ctx, \"keyRing\", \u0026kms.KeyRingIAMBindingArgs{\n\t\t\tCondition: \u0026kms.KeyRingIAMBindingConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tKeyRingId: pulumi.String(\"your-key-ring-id\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tRole: pulumi.String(\"roles/cloudkms.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRingIAMBinding;\nimport com.pulumi.gcp.kms.KeyRingIAMBindingArgs;\nimport com.pulumi.gcp.kms.inputs.KeyRingIAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRingIAMBinding(\"keyRing\", KeyRingIAMBindingArgs.builder() \n .condition(KeyRingIAMBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .keyRingId(\"your-key-ring-id\")\n .members(\"user:jane@example.com\")\n .role(\"roles/cloudkms.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyRing:\n type: gcp:kms:KeyRingIAMBinding\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n keyRingId: your-key-ring-id\n members:\n - user:jane@example.com\n role: roles/cloudkms.admin\n```\n\n## google\\_kms\\_key\\_ring\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRingIAMMember(\"keyRing\", {\n keyRingId: \"your-key-ring-id\",\n member: \"user:jane@example.com\",\n role: \"roles/cloudkms.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRingIAMMember(\"keyRing\",\n key_ring_id=\"your-key-ring-id\",\n member=\"user:jane@example.com\",\n role=\"roles/cloudkms.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRingIAMMember(\"keyRing\", new()\n {\n KeyRingId = \"your-key-ring-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/cloudkms.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRingIAMMember(ctx, \"keyRing\", \u0026kms.KeyRingIAMMemberArgs{\n\t\t\tKeyRingId: pulumi.String(\"your-key-ring-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRingIAMMember;\nimport com.pulumi.gcp.kms.KeyRingIAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRingIAMMember(\"keyRing\", KeyRingIAMMemberArgs.builder() \n .keyRingId(\"your-key-ring-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/cloudkms.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyRing:\n type: gcp:kms:KeyRingIAMMember\n properties:\n keyRingId: your-key-ring-id\n member: user:jane@example.com\n role: roles/cloudkms.admin\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRingIAMMember(\"keyRing\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n keyRingId: \"your-key-ring-id\",\n member: \"user:jane@example.com\",\n role: \"roles/cloudkms.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRingIAMMember(\"keyRing\",\n condition=gcp.kms.KeyRingIAMMemberConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n key_ring_id=\"your-key-ring-id\",\n member=\"user:jane@example.com\",\n role=\"roles/cloudkms.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRingIAMMember(\"keyRing\", new()\n {\n Condition = new Gcp.Kms.Inputs.KeyRingIAMMemberConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n KeyRingId = \"your-key-ring-id\",\n Member = \"user:jane@example.com\",\n Role = \"roles/cloudkms.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := kms.NewKeyRingIAMMember(ctx, \"keyRing\", \u0026kms.KeyRingIAMMemberArgs{\n\t\t\tCondition: \u0026kms.KeyRingIAMMemberConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tKeyRingId: pulumi.String(\"your-key-ring-id\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRingIAMMember;\nimport com.pulumi.gcp.kms.KeyRingIAMMemberArgs;\nimport com.pulumi.gcp.kms.inputs.KeyRingIAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyRing = new KeyRingIAMMember(\"keyRing\", KeyRingIAMMemberArgs.builder() \n .condition(KeyRingIAMMemberConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .keyRingId(\"your-key-ring-id\")\n .member(\"user:jane@example.com\")\n .role(\"roles/cloudkms.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyRing:\n type: gcp:kms:KeyRingIAMMember\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n keyRingId: your-key-ring-id\n member: user:jane@example.com\n role: roles/cloudkms.admin\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `key_ring_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMPolicy:KeyRingIAMPolicy key_ring_iam \"your-project-id/location-name/key-ring-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `key_ring_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMPolicy:KeyRingIAMPolicy key_ring_iam \"your-project-id/location-name/key-ring-name roles/cloudkms.admin\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `key_ring_id`, e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMPolicy:KeyRingIAMPolicy key_ring_iam your-project-id/location-name/key-ring-name\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `key_ring_id`, role, and account e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMPolicy:KeyRingIAMPolicy key_ring_iam \"your-project-id/location-name/key-ring-name roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `key_ring_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMPolicy:KeyRingIAMPolicy key_ring_iam \"your-project-id/location-name/key-ring-name roles/cloudkms.admin\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `key_ring_id`, e.g.\n\n```sh\n $ pulumi import gcp:kms/keyRingIAMPolicy:KeyRingIAMPolicy key_ring_iam your-project-id/location-name/key-ring-name\n```\n\n ", "properties": { "etag": { "type": "string", @@ -172696,7 +174235,7 @@ } }, "gcp:kms/keyRingImportJob:KeyRingImportJob": { - "description": "A `KeyRingImportJob` can be used to create `CryptoKeys` and `CryptoKeyVersions` using pre-existing\nkey material, generated outside of Cloud KMS. A `KeyRingImportJob` expires 3 days after it is created.\nOnce expired, Cloud KMS will no longer be able to import or unwrap any key material that\nwas wrapped with the `KeyRingImportJob`'s public key.\n\n\n\u003e **Note:** KeyRingImportJobs cannot be deleted from Google Cloud Platform.\nDestroying a provider-managed KeyRingImportJob will remove it from state but\n*will not delete the resource from the project.*\n\n\nTo get more information about KeyRingImportJob, see:\n\n* [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.importJobs)\n* How-to Guides\n * [Importing a key](https://cloud.google.com/kms/docs/importing-a-key)\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nKeyRingImportJob can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:kms/keyRingImportJob:KeyRingImportJob default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nKeyRingImportJob can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:kms/keyRingImportJob:KeyRingImportJob default {{name}}\n```\n\n ", "properties": { "attestations": { "type": "array", @@ -173015,7 +174554,7 @@ "deprecationMessage": "gcp.kms.Registry has been deprecated in favor of gcp.iot.Registry" }, "gcp:kms/secretCiphertext:SecretCiphertext": { - "description": "Encrypts secret data with Google Cloud KMS and provides access to the ciphertext.\n\n\n\u003e **NOTE:** Using this resource will allow you to conceal secret data within your\nresource definitions, but it does not take care of protecting that data in the\nlogging output, plan output, or state output. Please take care to secure your secret\ndata outside of resource definitions.\n\n\nTo get more information about SecretCiphertext, see:\n\n* [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt)\n* How-to Guides\n * [Encrypting and decrypting data with a symmetric key](https://cloud.google.com/kms/docs/encrypt-decrypt)\n\n\u003e **Warning:** All arguments including `plaintext` and `additional_authenticated_data` will be stored in the raw state as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Kms Secret Ciphertext Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst cryptokey = new gcp.kms.CryptoKey(\"cryptokey\", {\n keyRing: keyring.id,\n rotationPeriod: \"100000s\",\n});\nconst myPassword = new gcp.kms.SecretCiphertext(\"myPassword\", {\n cryptoKey: cryptokey.id,\n plaintext: \"my-secret-password\",\n});\nconst instance = new gcp.compute.Instance(\"instance\", {\n machineType: \"e2-medium\",\n zone: \"us-central1-a\",\n bootDisk: {\n initializeParams: {\n image: \"debian-cloud/debian-11\",\n },\n },\n networkInterfaces: [{\n network: \"default\",\n accessConfigs: [{}],\n }],\n metadata: {\n password: myPassword.ciphertext,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\ncryptokey = gcp.kms.CryptoKey(\"cryptokey\",\n key_ring=keyring.id,\n rotation_period=\"100000s\")\nmy_password = gcp.kms.SecretCiphertext(\"myPassword\",\n crypto_key=cryptokey.id,\n plaintext=\"my-secret-password\")\ninstance = gcp.compute.Instance(\"instance\",\n machine_type=\"e2-medium\",\n zone=\"us-central1-a\",\n boot_disk=gcp.compute.InstanceBootDiskArgs(\n initialize_params=gcp.compute.InstanceBootDiskInitializeParamsArgs(\n image=\"debian-cloud/debian-11\",\n ),\n ),\n network_interfaces=[gcp.compute.InstanceNetworkInterfaceArgs(\n network=\"default\",\n access_configs=[gcp.compute.InstanceNetworkInterfaceAccessConfigArgs()],\n )],\n metadata={\n \"password\": my_password.ciphertext,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var cryptokey = new Gcp.Kms.CryptoKey(\"cryptokey\", new()\n {\n KeyRing = keyring.Id,\n RotationPeriod = \"100000s\",\n });\n\n var myPassword = new Gcp.Kms.SecretCiphertext(\"myPassword\", new()\n {\n CryptoKey = cryptokey.Id,\n Plaintext = \"my-secret-password\",\n });\n\n var instance = new Gcp.Compute.Instance(\"instance\", new()\n {\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 = \"debian-cloud/debian-11\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n AccessConfigs = new[]\n {\n null,\n },\n },\n },\n Metadata = \n {\n { \"password\", myPassword.Ciphertext },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptokey, err := kms.NewCryptoKey(ctx, \"cryptokey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tRotationPeriod: pulumi.String(\"100000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyPassword, err := kms.NewSecretCiphertext(ctx, \"myPassword\", \u0026kms.SecretCiphertextArgs{\n\t\t\tCryptoKey: cryptokey.ID(),\n\t\t\tPlaintext: pulumi.String(\"my-secret-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewInstance(ctx, \"instance\", \u0026compute.InstanceArgs{\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(\"debian-cloud/debian-11\"),\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\tAccessConfigs: compute.InstanceNetworkInterfaceAccessConfigArray{\n\t\t\t\t\t\tnil,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"password\": myPassword.Ciphertext,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.kms.SecretCiphertext;\nimport com.pulumi.gcp.kms.SecretCiphertextArgs;\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n var cryptokey = new CryptoKey(\"cryptokey\", CryptoKeyArgs.builder() \n .keyRing(keyring.id())\n .rotationPeriod(\"100000s\")\n .build());\n\n var myPassword = new SecretCiphertext(\"myPassword\", SecretCiphertextArgs.builder() \n .cryptoKey(cryptokey.id())\n .plaintext(\"my-secret-password\")\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder() \n .machineType(\"e2-medium\")\n .zone(\"us-central1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"debian-cloud/debian-11\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .accessConfigs()\n .build())\n .metadata(Map.of(\"password\", myPassword.ciphertext()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n cryptokey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyring.id}\n rotationPeriod: 100000s\n myPassword:\n type: gcp:kms:SecretCiphertext\n properties:\n cryptoKey: ${cryptokey.id}\n plaintext: my-secret-password\n instance:\n type: gcp:compute:Instance\n properties:\n machineType: e2-medium\n zone: us-central1-a\n bootDisk:\n initializeParams:\n image: debian-cloud/debian-11\n networkInterfaces:\n - network: default\n accessConfigs:\n - {}\n metadata:\n password: ${myPassword.ciphertext}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource does not support import. ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Kms Secret Ciphertext Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"global\"});\nconst cryptokey = new gcp.kms.CryptoKey(\"cryptokey\", {\n keyRing: keyring.id,\n rotationPeriod: \"100000s\",\n});\nconst myPassword = new gcp.kms.SecretCiphertext(\"myPassword\", {\n cryptoKey: cryptokey.id,\n plaintext: \"my-secret-password\",\n});\nconst instance = new gcp.compute.Instance(\"instance\", {\n machineType: \"e2-medium\",\n zone: \"us-central1-a\",\n bootDisk: {\n initializeParams: {\n image: \"debian-cloud/debian-11\",\n },\n },\n networkInterfaces: [{\n network: \"default\",\n accessConfigs: [{}],\n }],\n metadata: {\n password: myPassword.ciphertext,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"global\")\ncryptokey = gcp.kms.CryptoKey(\"cryptokey\",\n key_ring=keyring.id,\n rotation_period=\"100000s\")\nmy_password = gcp.kms.SecretCiphertext(\"myPassword\",\n crypto_key=cryptokey.id,\n plaintext=\"my-secret-password\")\ninstance = gcp.compute.Instance(\"instance\",\n machine_type=\"e2-medium\",\n zone=\"us-central1-a\",\n boot_disk=gcp.compute.InstanceBootDiskArgs(\n initialize_params=gcp.compute.InstanceBootDiskInitializeParamsArgs(\n image=\"debian-cloud/debian-11\",\n ),\n ),\n network_interfaces=[gcp.compute.InstanceNetworkInterfaceArgs(\n network=\"default\",\n access_configs=[gcp.compute.InstanceNetworkInterfaceAccessConfigArgs()],\n )],\n metadata={\n \"password\": my_password.ciphertext,\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"global\",\n });\n\n var cryptokey = new Gcp.Kms.CryptoKey(\"cryptokey\", new()\n {\n KeyRing = keyring.Id,\n RotationPeriod = \"100000s\",\n });\n\n var myPassword = new Gcp.Kms.SecretCiphertext(\"myPassword\", new()\n {\n CryptoKey = cryptokey.Id,\n Plaintext = \"my-secret-password\",\n });\n\n var instance = new Gcp.Compute.Instance(\"instance\", new()\n {\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 = \"debian-cloud/debian-11\",\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n AccessConfigs = new[]\n {\n null,\n },\n },\n },\n Metadata = \n {\n { \"password\", myPassword.Ciphertext },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptokey, err := kms.NewCryptoKey(ctx, \"cryptokey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tRotationPeriod: pulumi.String(\"100000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tmyPassword, err := kms.NewSecretCiphertext(ctx, \"myPassword\", \u0026kms.SecretCiphertextArgs{\n\t\t\tCryptoKey: cryptokey.ID(),\n\t\t\tPlaintext: pulumi.String(\"my-secret-password\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = compute.NewInstance(ctx, \"instance\", \u0026compute.InstanceArgs{\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(\"debian-cloud/debian-11\"),\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\tAccessConfigs: compute.InstanceNetworkInterfaceAccessConfigArray{\n\t\t\t\t\t\tnil,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"password\": myPassword.Ciphertext,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.kms.SecretCiphertext;\nimport com.pulumi.gcp.kms.SecretCiphertextArgs;\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 java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"global\")\n .build());\n\n var cryptokey = new CryptoKey(\"cryptokey\", CryptoKeyArgs.builder() \n .keyRing(keyring.id())\n .rotationPeriod(\"100000s\")\n .build());\n\n var myPassword = new SecretCiphertext(\"myPassword\", SecretCiphertextArgs.builder() \n .cryptoKey(cryptokey.id())\n .plaintext(\"my-secret-password\")\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder() \n .machineType(\"e2-medium\")\n .zone(\"us-central1-a\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(\"debian-cloud/debian-11\")\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .accessConfigs()\n .build())\n .metadata(Map.of(\"password\", myPassword.ciphertext()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: global\n cryptokey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyring.id}\n rotationPeriod: 100000s\n myPassword:\n type: gcp:kms:SecretCiphertext\n properties:\n cryptoKey: ${cryptokey.id}\n plaintext: my-secret-password\n instance:\n type: gcp:compute:Instance\n properties:\n machineType: e2-medium\n zone: us-central1-a\n bootDisk:\n initializeParams:\n image: debian-cloud/debian-11\n networkInterfaces:\n - network: default\n accessConfigs:\n - {}\n metadata:\n password: ${myPassword.ciphertext}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource does not support import. ", "properties": { "additionalAuthenticatedData": { "type": "string", @@ -173093,7 +174632,7 @@ } }, "gcp:logging/billingAccountBucketConfig:BillingAccountBucketConfig": { - "description": "Manages a billing account level logging bucket config. For more information see\n[the official logging documentation](https://cloud.google.com/logging/docs/) and\n[Storing Logs](https://cloud.google.com/logging/docs/storage).\n\n\u003e **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are \"_Default\" and \"_Required\".\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.organizations.getBillingAccount({\n billingAccount: \"00AA00-000AAA-00AA0A\",\n});\nconst basic = new gcp.logging.BillingAccountBucketConfig(\"basic\", {\n billingAccount: _default.then(_default =\u003e _default.billingAccount),\n location: \"global\",\n retentionDays: 30,\n bucketId: \"_Default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.organizations.get_billing_account(billing_account=\"00AA00-000AAA-00AA0A\")\nbasic = gcp.logging.BillingAccountBucketConfig(\"basic\",\n billing_account=default.billing_account,\n location=\"global\",\n retention_days=30,\n bucket_id=\"_Default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Organizations.GetBillingAccount.Invoke(new()\n {\n BillingAccount = \"00AA00-000AAA-00AA0A\",\n });\n\n var basic = new Gcp.Logging.BillingAccountBucketConfig(\"basic\", new()\n {\n BillingAccount = @default.Apply(@default =\u003e @default.Apply(getBillingAccountResult =\u003e getBillingAccountResult.BillingAccount)),\n Location = \"global\",\n RetentionDays = 30,\n BucketId = \"_Default\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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_default, err := organizations.GetBillingAccount(ctx, \u0026organizations.GetBillingAccountArgs{\n\t\t\tBillingAccount: pulumi.StringRef(\"00AA00-000AAA-00AA0A\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewBillingAccountBucketConfig(ctx, \"basic\", \u0026logging.BillingAccountBucketConfigArgs{\n\t\t\tBillingAccount: *pulumi.String(_default.BillingAccount),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tRetentionDays: pulumi.Int(30),\n\t\t\tBucketId: pulumi.String(\"_Default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;\nimport com.pulumi.gcp.logging.BillingAccountBucketConfig;\nimport com.pulumi.gcp.logging.BillingAccountBucketConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()\n .billingAccount(\"00AA00-000AAA-00AA0A\")\n .build());\n\n var basic = new BillingAccountBucketConfig(\"basic\", BillingAccountBucketConfigArgs.builder() \n .billingAccount(default_.billingAccount())\n .location(\"global\")\n .retentionDays(30)\n .bucketId(\"_Default\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:logging:BillingAccountBucketConfig\n properties:\n billingAccount: ${default.billingAccount}\n location: global\n retentionDays: 30\n bucketId: _Default\nvariables:\n default:\n fn::invoke:\n Function: gcp:organizations:getBillingAccount\n Arguments:\n billingAccount: 00AA00-000AAA-00AA0A\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource can be imported using the following format\n\n```sh\n $ pulumi import gcp:logging/billingAccountBucketConfig:BillingAccountBucketConfig default billingAccounts/{{billingAccount}}/locations/{{location}}/buckets/{{bucket_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.organizations.getBillingAccount({\n billingAccount: \"00AA00-000AAA-00AA0A\",\n});\nconst basic = new gcp.logging.BillingAccountBucketConfig(\"basic\", {\n billingAccount: _default.then(_default =\u003e _default.billingAccount),\n location: \"global\",\n retentionDays: 30,\n bucketId: \"_Default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.organizations.get_billing_account(billing_account=\"00AA00-000AAA-00AA0A\")\nbasic = gcp.logging.BillingAccountBucketConfig(\"basic\",\n billing_account=default.billing_account,\n location=\"global\",\n retention_days=30,\n bucket_id=\"_Default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Organizations.GetBillingAccount.Invoke(new()\n {\n BillingAccount = \"00AA00-000AAA-00AA0A\",\n });\n\n var basic = new Gcp.Logging.BillingAccountBucketConfig(\"basic\", new()\n {\n BillingAccount = @default.Apply(@default =\u003e @default.Apply(getBillingAccountResult =\u003e getBillingAccountResult.BillingAccount)),\n Location = \"global\",\n RetentionDays = 30,\n BucketId = \"_Default\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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_default, err := organizations.GetBillingAccount(ctx, \u0026organizations.GetBillingAccountArgs{\n\t\t\tBillingAccount: pulumi.StringRef(\"00AA00-000AAA-00AA0A\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewBillingAccountBucketConfig(ctx, \"basic\", \u0026logging.BillingAccountBucketConfigArgs{\n\t\t\tBillingAccount: *pulumi.String(_default.BillingAccount),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tRetentionDays: pulumi.Int(30),\n\t\t\tBucketId: pulumi.String(\"_Default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetBillingAccountArgs;\nimport com.pulumi.gcp.logging.BillingAccountBucketConfig;\nimport com.pulumi.gcp.logging.BillingAccountBucketConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = OrganizationsFunctions.getBillingAccount(GetBillingAccountArgs.builder()\n .billingAccount(\"00AA00-000AAA-00AA0A\")\n .build());\n\n var basic = new BillingAccountBucketConfig(\"basic\", BillingAccountBucketConfigArgs.builder() \n .billingAccount(default_.billingAccount())\n .location(\"global\")\n .retentionDays(30)\n .bucketId(\"_Default\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:logging:BillingAccountBucketConfig\n properties:\n billingAccount: ${default.billingAccount}\n location: global\n retentionDays: 30\n bucketId: _Default\nvariables:\n default:\n fn::invoke:\n Function: gcp:organizations:getBillingAccount\n Arguments:\n billingAccount: 00AA00-000AAA-00AA0A\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource can be imported using the following format\n\n```sh\n $ pulumi import gcp:logging/billingAccountBucketConfig:BillingAccountBucketConfig default billingAccounts/{{billingAccount}}/locations/{{location}}/buckets/{{bucket_id}}\n```\n\n ", "properties": { "billingAccount": { "type": "string", @@ -173299,7 +174838,7 @@ } }, "gcp:logging/billingAccountSink:BillingAccountSink": { - "description": "* [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/billingAccounts.sinks)\n* How-to Guides\n * [Exporting Logs](https://cloud.google.com/logging/docs/export)\n\n\u003e **Note** You must have the \"Logs Configuration Writer\" IAM role (`roles/logging.configWriter`)\n[granted on the billing account](https://cloud.google.com/billing/reference/rest/v1/billingAccounts/getIamPolicy) to\nthe credentials used with this provider. [IAM roles granted on a billing account](https://cloud.google.com/billing/docs/how-to/billing-access) are separate from the\ntypical IAM roles granted on a project.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst log_bucket = new gcp.storage.Bucket(\"log-bucket\", {location: \"US\"});\nconst my_sink = new gcp.logging.BillingAccountSink(\"my-sink\", {\n description: \"some explanation on what this is\",\n billingAccount: \"ABCDEF-012345-GHIJKL\",\n destination: pulumi.interpolate`storage.googleapis.com/${log_bucket.name}`,\n});\nconst log_writer = new gcp.projects.IAMBinding(\"log-writer\", {\n project: \"your-project-id\",\n role: \"roles/storage.objectCreator\",\n members: [my_sink.writerIdentity],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nlog_bucket = gcp.storage.Bucket(\"log-bucket\", location=\"US\")\nmy_sink = gcp.logging.BillingAccountSink(\"my-sink\",\n description=\"some explanation on what this is\",\n billing_account=\"ABCDEF-012345-GHIJKL\",\n destination=log_bucket.name.apply(lambda name: f\"storage.googleapis.com/{name}\"))\nlog_writer = gcp.projects.IAMBinding(\"log-writer\",\n project=\"your-project-id\",\n role=\"roles/storage.objectCreator\",\n members=[my_sink.writer_identity])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var log_bucket = new Gcp.Storage.Bucket(\"log-bucket\", new()\n {\n Location = \"US\",\n });\n\n var my_sink = new Gcp.Logging.BillingAccountSink(\"my-sink\", new()\n {\n Description = \"some explanation on what this is\",\n BillingAccount = \"ABCDEF-012345-GHIJKL\",\n Destination = log_bucket.Name.Apply(name =\u003e $\"storage.googleapis.com/{name}\"),\n });\n\n var log_writer = new Gcp.Projects.IAMBinding(\"log-writer\", new()\n {\n Project = \"your-project-id\",\n Role = \"roles/storage.objectCreator\",\n Members = new[]\n {\n my_sink.WriterIdentity,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 := storage.NewBucket(ctx, \"log-bucket\", \u0026storage.BucketArgs{\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 = logging.NewBillingAccountSink(ctx, \"my-sink\", \u0026logging.BillingAccountSinkArgs{\n\t\t\tDescription: pulumi.String(\"some explanation on what this is\"),\n\t\t\tBillingAccount: pulumi.String(\"ABCDEF-012345-GHIJKL\"),\n\t\t\tDestination: log_bucket.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"storage.googleapis.com/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = projects.NewIAMBinding(ctx, \"log-writer\", \u0026projects.IAMBindingArgs{\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/storage.objectCreator\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tmy_sink.WriterIdentity,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.logging.BillingAccountSink;\nimport com.pulumi.gcp.logging.BillingAccountSinkArgs;\nimport com.pulumi.gcp.projects.IAMBinding;\nimport com.pulumi.gcp.projects.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var log_bucket = new Bucket(\"log-bucket\", BucketArgs.builder() \n .location(\"US\")\n .build());\n\n var my_sink = new BillingAccountSink(\"my-sink\", BillingAccountSinkArgs.builder() \n .description(\"some explanation on what this is\")\n .billingAccount(\"ABCDEF-012345-GHIJKL\")\n .destination(log_bucket.name().applyValue(name -\u003e String.format(\"storage.googleapis.com/%s\", name)))\n .build());\n\n var log_writer = new IAMBinding(\"log-writer\", IAMBindingArgs.builder() \n .project(\"your-project-id\")\n .role(\"roles/storage.objectCreator\")\n .members(my_sink.writerIdentity())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-sink:\n type: gcp:logging:BillingAccountSink\n properties:\n description: some explanation on what this is\n billingAccount: ABCDEF-012345-GHIJKL\n # Can export to pubsub, cloud storage, or bigquery\n destination: storage.googleapis.com/${[\"log-bucket\"].name}\n log-bucket:\n type: gcp:storage:Bucket\n properties:\n location: US\n log-writer:\n type: gcp:projects:IAMBinding\n properties:\n project: your-project-id\n role: roles/storage.objectCreator\n members:\n - ${[\"my-sink\"].writerIdentity}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBilling account logging sinks can be imported using this format\n\n```sh\n $ pulumi import gcp:logging/billingAccountSink:BillingAccountSink my_sink billingAccounts/{{billing_account_id}}/sinks/{{sink_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst log_bucket = new gcp.storage.Bucket(\"log-bucket\", {location: \"US\"});\nconst my_sink = new gcp.logging.BillingAccountSink(\"my-sink\", {\n description: \"some explanation on what this is\",\n billingAccount: \"ABCDEF-012345-GHIJKL\",\n destination: pulumi.interpolate`storage.googleapis.com/${log_bucket.name}`,\n});\nconst log_writer = new gcp.projects.IAMBinding(\"log-writer\", {\n project: \"your-project-id\",\n role: \"roles/storage.objectCreator\",\n members: [my_sink.writerIdentity],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nlog_bucket = gcp.storage.Bucket(\"log-bucket\", location=\"US\")\nmy_sink = gcp.logging.BillingAccountSink(\"my-sink\",\n description=\"some explanation on what this is\",\n billing_account=\"ABCDEF-012345-GHIJKL\",\n destination=log_bucket.name.apply(lambda name: f\"storage.googleapis.com/{name}\"))\nlog_writer = gcp.projects.IAMBinding(\"log-writer\",\n project=\"your-project-id\",\n role=\"roles/storage.objectCreator\",\n members=[my_sink.writer_identity])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var log_bucket = new Gcp.Storage.Bucket(\"log-bucket\", new()\n {\n Location = \"US\",\n });\n\n var my_sink = new Gcp.Logging.BillingAccountSink(\"my-sink\", new()\n {\n Description = \"some explanation on what this is\",\n BillingAccount = \"ABCDEF-012345-GHIJKL\",\n Destination = log_bucket.Name.Apply(name =\u003e $\"storage.googleapis.com/{name}\"),\n });\n\n var log_writer = new Gcp.Projects.IAMBinding(\"log-writer\", new()\n {\n Project = \"your-project-id\",\n Role = \"roles/storage.objectCreator\",\n Members = new[]\n {\n my_sink.WriterIdentity,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 := storage.NewBucket(ctx, \"log-bucket\", \u0026storage.BucketArgs{\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 = logging.NewBillingAccountSink(ctx, \"my-sink\", \u0026logging.BillingAccountSinkArgs{\n\t\t\tDescription: pulumi.String(\"some explanation on what this is\"),\n\t\t\tBillingAccount: pulumi.String(\"ABCDEF-012345-GHIJKL\"),\n\t\t\tDestination: log_bucket.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"storage.googleapis.com/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = projects.NewIAMBinding(ctx, \"log-writer\", \u0026projects.IAMBindingArgs{\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/storage.objectCreator\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tmy_sink.WriterIdentity,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.logging.BillingAccountSink;\nimport com.pulumi.gcp.logging.BillingAccountSinkArgs;\nimport com.pulumi.gcp.projects.IAMBinding;\nimport com.pulumi.gcp.projects.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var log_bucket = new Bucket(\"log-bucket\", BucketArgs.builder() \n .location(\"US\")\n .build());\n\n var my_sink = new BillingAccountSink(\"my-sink\", BillingAccountSinkArgs.builder() \n .description(\"some explanation on what this is\")\n .billingAccount(\"ABCDEF-012345-GHIJKL\")\n .destination(log_bucket.name().applyValue(name -\u003e String.format(\"storage.googleapis.com/%s\", name)))\n .build());\n\n var log_writer = new IAMBinding(\"log-writer\", IAMBindingArgs.builder() \n .project(\"your-project-id\")\n .role(\"roles/storage.objectCreator\")\n .members(my_sink.writerIdentity())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-sink:\n type: gcp:logging:BillingAccountSink\n properties:\n description: some explanation on what this is\n billingAccount: ABCDEF-012345-GHIJKL\n # Can export to pubsub, cloud storage, or bigquery\n destination: storage.googleapis.com/${[\"log-bucket\"].name}\n log-bucket:\n type: gcp:storage:Bucket\n properties:\n location: US\n log-writer:\n type: gcp:projects:IAMBinding\n properties:\n project: your-project-id\n role: roles/storage.objectCreator\n members:\n - ${[\"my-sink\"].writerIdentity}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBilling account logging sinks can be imported using this format\n\n```sh\n $ pulumi import gcp:logging/billingAccountSink:BillingAccountSink my_sink billingAccounts/{{billing_account_id}}/sinks/{{sink_id}}\n```\n\n ", "properties": { "bigqueryOptions": { "$ref": "#/types/gcp:logging/BillingAccountSinkBigqueryOptions:BillingAccountSinkBigqueryOptions", @@ -173440,7 +174979,7 @@ } }, "gcp:logging/folderBucketConfig:FolderBucketConfig": { - "description": "Manages a folder-level logging bucket config. For more information see\n[the official logging documentation](https://cloud.google.com/logging/docs/) and\n[Storing Logs](https://cloud.google.com/logging/docs/storage).\n\n\u003e **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are \"_Default\" and \"_Required\".\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.organizations.Folder(\"default\", {\n displayName: \"some-folder-name\",\n parent: \"organizations/123456789\",\n});\nconst basic = new gcp.logging.FolderBucketConfig(\"basic\", {\n folder: _default.name,\n location: \"global\",\n retentionDays: 30,\n bucketId: \"_Default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.organizations.Folder(\"default\",\n display_name=\"some-folder-name\",\n parent=\"organizations/123456789\")\nbasic = gcp.logging.FolderBucketConfig(\"basic\",\n folder=default.name,\n location=\"global\",\n retention_days=30,\n bucket_id=\"_Default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Organizations.Folder(\"default\", new()\n {\n DisplayName = \"some-folder-name\",\n Parent = \"organizations/123456789\",\n });\n\n var basic = new Gcp.Logging.FolderBucketConfig(\"basic\", new()\n {\n Folder = @default.Name,\n Location = \"global\",\n RetentionDays = 30,\n BucketId = \"_Default\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewFolder(ctx, \"default\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"some-folder-name\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewFolderBucketConfig(ctx, \"basic\", \u0026logging.FolderBucketConfigArgs{\n\t\t\tFolder: _default.Name,\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tRetentionDays: pulumi.Int(30),\n\t\t\tBucketId: pulumi.String(\"_Default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.logging.FolderBucketConfig;\nimport com.pulumi.gcp.logging.FolderBucketConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Folder(\"default\", FolderArgs.builder() \n .displayName(\"some-folder-name\")\n .parent(\"organizations/123456789\")\n .build());\n\n var basic = new FolderBucketConfig(\"basic\", FolderBucketConfigArgs.builder() \n .folder(default_.name())\n .location(\"global\")\n .retentionDays(30)\n .bucketId(\"_Default\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:organizations:Folder\n properties:\n displayName: some-folder-name\n parent: organizations/123456789\n basic:\n type: gcp:logging:FolderBucketConfig\n properties:\n folder: ${default.name}\n location: global\n retentionDays: 30\n bucketId: _Default\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource can be imported using the following format\n\n```sh\n $ pulumi import gcp:logging/folderBucketConfig:FolderBucketConfig default folders/{{folder}}/locations/{{location}}/buckets/{{bucket_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.organizations.Folder(\"default\", {\n displayName: \"some-folder-name\",\n parent: \"organizations/123456789\",\n});\nconst basic = new gcp.logging.FolderBucketConfig(\"basic\", {\n folder: _default.name,\n location: \"global\",\n retentionDays: 30,\n bucketId: \"_Default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.organizations.Folder(\"default\",\n display_name=\"some-folder-name\",\n parent=\"organizations/123456789\")\nbasic = gcp.logging.FolderBucketConfig(\"basic\",\n folder=default.name,\n location=\"global\",\n retention_days=30,\n bucket_id=\"_Default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Organizations.Folder(\"default\", new()\n {\n DisplayName = \"some-folder-name\",\n Parent = \"organizations/123456789\",\n });\n\n var basic = new Gcp.Logging.FolderBucketConfig(\"basic\", new()\n {\n Folder = @default.Name,\n Location = \"global\",\n RetentionDays = 30,\n BucketId = \"_Default\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewFolder(ctx, \"default\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"some-folder-name\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewFolderBucketConfig(ctx, \"basic\", \u0026logging.FolderBucketConfigArgs{\n\t\t\tFolder: _default.Name,\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tRetentionDays: pulumi.Int(30),\n\t\t\tBucketId: pulumi.String(\"_Default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.logging.FolderBucketConfig;\nimport com.pulumi.gcp.logging.FolderBucketConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Folder(\"default\", FolderArgs.builder() \n .displayName(\"some-folder-name\")\n .parent(\"organizations/123456789\")\n .build());\n\n var basic = new FolderBucketConfig(\"basic\", FolderBucketConfigArgs.builder() \n .folder(default_.name())\n .location(\"global\")\n .retentionDays(30)\n .bucketId(\"_Default\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:organizations:Folder\n properties:\n displayName: some-folder-name\n parent: organizations/123456789\n basic:\n type: gcp:logging:FolderBucketConfig\n properties:\n folder: ${default.name}\n location: global\n retentionDays: 30\n bucketId: _Default\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource can be imported using the following format\n\n```sh\n $ pulumi import gcp:logging/folderBucketConfig:FolderBucketConfig default folders/{{folder}}/locations/{{location}}/buckets/{{bucket_id}}\n```\n\n ", "properties": { "bucketId": { "type": "string", @@ -173560,7 +175099,7 @@ } }, "gcp:logging/folderExclusion:FolderExclusion": { - "description": "Manages a folder-level logging exclusion. For more information see:\n\n* [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/folders.exclusions)\n* How-to Guides\n * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions)\n\n\u003e You can specify exclusions for log sinks created by the provider by using the exclusions field of `gcp.logging.FolderSink`\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_folder = new gcp.organizations.Folder(\"my-folder\", {\n displayName: \"My folder\",\n parent: \"organizations/123456\",\n});\nconst my_exclusion = new gcp.logging.FolderExclusion(\"my-exclusion\", {\n folder: my_folder.name,\n description: \"Exclude GCE instance debug logs\",\n filter: \"resource.type = gce_instance AND severity \u003c= DEBUG\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_folder = gcp.organizations.Folder(\"my-folder\",\n display_name=\"My folder\",\n parent=\"organizations/123456\")\nmy_exclusion = gcp.logging.FolderExclusion(\"my-exclusion\",\n folder=my_folder.name,\n description=\"Exclude GCE instance debug logs\",\n filter=\"resource.type = gce_instance AND severity \u003c= DEBUG\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_folder = new Gcp.Organizations.Folder(\"my-folder\", new()\n {\n DisplayName = \"My folder\",\n Parent = \"organizations/123456\",\n });\n\n var my_exclusion = new Gcp.Logging.FolderExclusion(\"my-exclusion\", new()\n {\n Folder = my_folder.Name,\n Description = \"Exclude GCE instance debug logs\",\n Filter = \"resource.type = gce_instance AND severity \u003c= DEBUG\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewFolder(ctx, \"my-folder\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"My folder\"),\n\t\t\tParent: pulumi.String(\"organizations/123456\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewFolderExclusion(ctx, \"my-exclusion\", \u0026logging.FolderExclusionArgs{\n\t\t\tFolder: my_folder.Name,\n\t\t\tDescription: pulumi.String(\"Exclude GCE instance debug logs\"),\n\t\t\tFilter: pulumi.String(\"resource.type = gce_instance AND severity \u003c= DEBUG\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.logging.FolderExclusion;\nimport com.pulumi.gcp.logging.FolderExclusionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_folder = new Folder(\"my-folder\", FolderArgs.builder() \n .displayName(\"My folder\")\n .parent(\"organizations/123456\")\n .build());\n\n var my_exclusion = new FolderExclusion(\"my-exclusion\", FolderExclusionArgs.builder() \n .folder(my_folder.name())\n .description(\"Exclude GCE instance debug logs\")\n .filter(\"resource.type = gce_instance AND severity \u003c= DEBUG\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-exclusion:\n type: gcp:logging:FolderExclusion\n properties:\n folder: ${[\"my-folder\"].name}\n description: Exclude GCE instance debug logs\n # Exclude all DEBUG or lower severity messages relating to instances\n filter: resource.type = gce_instance AND severity \u003c= DEBUG\n my-folder:\n type: gcp:organizations:Folder\n properties:\n displayName: My folder\n parent: organizations/123456\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nFolder-level logging exclusions can be imported using their URI, e.g.\n\n```sh\n $ pulumi import gcp:logging/folderExclusion:FolderExclusion my_exclusion folders/my-folder/exclusions/my-exclusion\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_folder = new gcp.organizations.Folder(\"my-folder\", {\n displayName: \"My folder\",\n parent: \"organizations/123456\",\n});\nconst my_exclusion = new gcp.logging.FolderExclusion(\"my-exclusion\", {\n folder: my_folder.name,\n description: \"Exclude GCE instance debug logs\",\n filter: \"resource.type = gce_instance AND severity \u003c= DEBUG\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_folder = gcp.organizations.Folder(\"my-folder\",\n display_name=\"My folder\",\n parent=\"organizations/123456\")\nmy_exclusion = gcp.logging.FolderExclusion(\"my-exclusion\",\n folder=my_folder.name,\n description=\"Exclude GCE instance debug logs\",\n filter=\"resource.type = gce_instance AND severity \u003c= DEBUG\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_folder = new Gcp.Organizations.Folder(\"my-folder\", new()\n {\n DisplayName = \"My folder\",\n Parent = \"organizations/123456\",\n });\n\n var my_exclusion = new Gcp.Logging.FolderExclusion(\"my-exclusion\", new()\n {\n Folder = my_folder.Name,\n Description = \"Exclude GCE instance debug logs\",\n Filter = \"resource.type = gce_instance AND severity \u003c= DEBUG\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewFolder(ctx, \"my-folder\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"My folder\"),\n\t\t\tParent: pulumi.String(\"organizations/123456\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewFolderExclusion(ctx, \"my-exclusion\", \u0026logging.FolderExclusionArgs{\n\t\t\tFolder: my_folder.Name,\n\t\t\tDescription: pulumi.String(\"Exclude GCE instance debug logs\"),\n\t\t\tFilter: pulumi.String(\"resource.type = gce_instance AND severity \u003c= DEBUG\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.logging.FolderExclusion;\nimport com.pulumi.gcp.logging.FolderExclusionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_folder = new Folder(\"my-folder\", FolderArgs.builder() \n .displayName(\"My folder\")\n .parent(\"organizations/123456\")\n .build());\n\n var my_exclusion = new FolderExclusion(\"my-exclusion\", FolderExclusionArgs.builder() \n .folder(my_folder.name())\n .description(\"Exclude GCE instance debug logs\")\n .filter(\"resource.type = gce_instance AND severity \u003c= DEBUG\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-exclusion:\n type: gcp:logging:FolderExclusion\n properties:\n folder: ${[\"my-folder\"].name}\n description: Exclude GCE instance debug logs\n # Exclude all DEBUG or lower severity messages relating to instances\n filter: resource.type = gce_instance AND severity \u003c= DEBUG\n my-folder:\n type: gcp:organizations:Folder\n properties:\n displayName: My folder\n parent: organizations/123456\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nFolder-level logging exclusions can be imported using their URI, e.g.\n\n```sh\n $ pulumi import gcp:logging/folderExclusion:FolderExclusion my_exclusion folders/my-folder/exclusions/my-exclusion\n```\n\n ", "properties": { "description": { "type": "string", @@ -174062,7 +175601,7 @@ } }, "gcp:logging/organizationBucketConfig:OrganizationBucketConfig": { - "description": "Manages a organization-level logging bucket config. For more information see\n[the official logging documentation](https://cloud.google.com/logging/docs/) and\n[Storing Logs](https://cloud.google.com/logging/docs/storage).\n\n\u003e **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are \"_Default\" and \"_Required\".\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.organizations.getOrganization({\n organization: \"123456789\",\n});\nconst basic = new gcp.logging.OrganizationBucketConfig(\"basic\", {\n organization: _default.then(_default =\u003e _default.organization),\n location: \"global\",\n retentionDays: 30,\n bucketId: \"_Default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.organizations.get_organization(organization=\"123456789\")\nbasic = gcp.logging.OrganizationBucketConfig(\"basic\",\n organization=default.organization,\n location=\"global\",\n retention_days=30,\n bucket_id=\"_Default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Organizations.GetOrganization.Invoke(new()\n {\n Organization = \"123456789\",\n });\n\n var basic = new Gcp.Logging.OrganizationBucketConfig(\"basic\", new()\n {\n Organization = @default.Apply(@default =\u003e @default.Apply(getOrganizationResult =\u003e getOrganizationResult.Organization)),\n Location = \"global\",\n RetentionDays = 30,\n BucketId = \"_Default\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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_default, err := organizations.GetOrganization(ctx, \u0026organizations.GetOrganizationArgs{\n\t\t\tOrganization: pulumi.StringRef(\"123456789\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewOrganizationBucketConfig(ctx, \"basic\", \u0026logging.OrganizationBucketConfigArgs{\n\t\t\tOrganization: *pulumi.String(_default.Organization),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tRetentionDays: pulumi.Int(30),\n\t\t\tBucketId: pulumi.String(\"_Default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetOrganizationArgs;\nimport com.pulumi.gcp.logging.OrganizationBucketConfig;\nimport com.pulumi.gcp.logging.OrganizationBucketConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = OrganizationsFunctions.getOrganization(GetOrganizationArgs.builder()\n .organization(\"123456789\")\n .build());\n\n var basic = new OrganizationBucketConfig(\"basic\", OrganizationBucketConfigArgs.builder() \n .organization(default_.organization())\n .location(\"global\")\n .retentionDays(30)\n .bucketId(\"_Default\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:logging:OrganizationBucketConfig\n properties:\n organization: ${default.organization}\n location: global\n retentionDays: 30\n bucketId: _Default\nvariables:\n default:\n fn::invoke:\n Function: gcp:organizations:getOrganization\n Arguments:\n organization: '123456789'\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource can be imported using the following format\n\n```sh\n $ pulumi import gcp:logging/organizationBucketConfig:OrganizationBucketConfig default organizations/{{organization}}/locations/{{location}}/buckets/{{bucket_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.organizations.getOrganization({\n organization: \"123456789\",\n});\nconst basic = new gcp.logging.OrganizationBucketConfig(\"basic\", {\n organization: _default.then(_default =\u003e _default.organization),\n location: \"global\",\n retentionDays: 30,\n bucketId: \"_Default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.organizations.get_organization(organization=\"123456789\")\nbasic = gcp.logging.OrganizationBucketConfig(\"basic\",\n organization=default.organization,\n location=\"global\",\n retention_days=30,\n bucket_id=\"_Default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Organizations.GetOrganization.Invoke(new()\n {\n Organization = \"123456789\",\n });\n\n var basic = new Gcp.Logging.OrganizationBucketConfig(\"basic\", new()\n {\n Organization = @default.Apply(@default =\u003e @default.Apply(getOrganizationResult =\u003e getOrganizationResult.Organization)),\n Location = \"global\",\n RetentionDays = 30,\n BucketId = \"_Default\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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_default, err := organizations.GetOrganization(ctx, \u0026organizations.GetOrganizationArgs{\n\t\t\tOrganization: pulumi.StringRef(\"123456789\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewOrganizationBucketConfig(ctx, \"basic\", \u0026logging.OrganizationBucketConfigArgs{\n\t\t\tOrganization: *pulumi.String(_default.Organization),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tRetentionDays: pulumi.Int(30),\n\t\t\tBucketId: pulumi.String(\"_Default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetOrganizationArgs;\nimport com.pulumi.gcp.logging.OrganizationBucketConfig;\nimport com.pulumi.gcp.logging.OrganizationBucketConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = OrganizationsFunctions.getOrganization(GetOrganizationArgs.builder()\n .organization(\"123456789\")\n .build());\n\n var basic = new OrganizationBucketConfig(\"basic\", OrganizationBucketConfigArgs.builder() \n .organization(default_.organization())\n .location(\"global\")\n .retentionDays(30)\n .bucketId(\"_Default\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:logging:OrganizationBucketConfig\n properties:\n organization: ${default.organization}\n location: global\n retentionDays: 30\n bucketId: _Default\nvariables:\n default:\n fn::invoke:\n Function: gcp:organizations:getOrganization\n Arguments:\n organization: '123456789'\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource can be imported using the following format\n\n```sh\n $ pulumi import gcp:logging/organizationBucketConfig:OrganizationBucketConfig default organizations/{{organization}}/locations/{{location}}/buckets/{{bucket_id}}\n```\n\n ", "properties": { "bucketId": { "type": "string", @@ -174182,7 +175721,7 @@ } }, "gcp:logging/organizationExclusion:OrganizationExclusion": { - "description": "Manages an organization-level logging exclusion. For more information see:\n\n* [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/organizations.exclusions)\n* How-to Guides\n * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions)\n\n\u003e You can specify exclusions for log sinks created by the provider by using the exclusions field of `gcp.logging.OrganizationSink`\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_exclusion = new gcp.logging.OrganizationExclusion(\"my-exclusion\", {\n description: \"Exclude GCE instance debug logs\",\n filter: \"resource.type = gce_instance AND severity \u003c= DEBUG\",\n orgId: \"123456789\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_exclusion = gcp.logging.OrganizationExclusion(\"my-exclusion\",\n description=\"Exclude GCE instance debug logs\",\n filter=\"resource.type = gce_instance AND severity \u003c= DEBUG\",\n org_id=\"123456789\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_exclusion = new Gcp.Logging.OrganizationExclusion(\"my-exclusion\", new()\n {\n Description = \"Exclude GCE instance debug logs\",\n Filter = \"resource.type = gce_instance AND severity \u003c= DEBUG\",\n OrgId = \"123456789\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewOrganizationExclusion(ctx, \"my-exclusion\", \u0026logging.OrganizationExclusionArgs{\n\t\t\tDescription: pulumi.String(\"Exclude GCE instance debug logs\"),\n\t\t\tFilter: pulumi.String(\"resource.type = gce_instance AND severity \u003c= DEBUG\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.OrganizationExclusion;\nimport com.pulumi.gcp.logging.OrganizationExclusionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_exclusion = new OrganizationExclusion(\"my-exclusion\", OrganizationExclusionArgs.builder() \n .description(\"Exclude GCE instance debug logs\")\n .filter(\"resource.type = gce_instance AND severity \u003c= DEBUG\")\n .orgId(\"123456789\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-exclusion:\n type: gcp:logging:OrganizationExclusion\n properties:\n description: Exclude GCE instance debug logs\n # Exclude all DEBUG or lower severity messages relating to instances\n filter: resource.type = gce_instance AND severity \u003c= DEBUG\n orgId: '123456789'\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nOrganization-level logging exclusions can be imported using their URI, e.g.\n\n```sh\n $ pulumi import gcp:logging/organizationExclusion:OrganizationExclusion my_exclusion organizations/{{organization}}/exclusions/{{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_exclusion = new gcp.logging.OrganizationExclusion(\"my-exclusion\", {\n description: \"Exclude GCE instance debug logs\",\n filter: \"resource.type = gce_instance AND severity \u003c= DEBUG\",\n orgId: \"123456789\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_exclusion = gcp.logging.OrganizationExclusion(\"my-exclusion\",\n description=\"Exclude GCE instance debug logs\",\n filter=\"resource.type = gce_instance AND severity \u003c= DEBUG\",\n org_id=\"123456789\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_exclusion = new Gcp.Logging.OrganizationExclusion(\"my-exclusion\", new()\n {\n Description = \"Exclude GCE instance debug logs\",\n Filter = \"resource.type = gce_instance AND severity \u003c= DEBUG\",\n OrgId = \"123456789\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewOrganizationExclusion(ctx, \"my-exclusion\", \u0026logging.OrganizationExclusionArgs{\n\t\t\tDescription: pulumi.String(\"Exclude GCE instance debug logs\"),\n\t\t\tFilter: pulumi.String(\"resource.type = gce_instance AND severity \u003c= DEBUG\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.OrganizationExclusion;\nimport com.pulumi.gcp.logging.OrganizationExclusionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_exclusion = new OrganizationExclusion(\"my-exclusion\", OrganizationExclusionArgs.builder() \n .description(\"Exclude GCE instance debug logs\")\n .filter(\"resource.type = gce_instance AND severity \u003c= DEBUG\")\n .orgId(\"123456789\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-exclusion:\n type: gcp:logging:OrganizationExclusion\n properties:\n description: Exclude GCE instance debug logs\n # Exclude all DEBUG or lower severity messages relating to instances\n filter: resource.type = gce_instance AND severity \u003c= DEBUG\n orgId: '123456789'\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nOrganization-level logging exclusions can be imported using their URI, e.g.\n\n```sh\n $ pulumi import gcp:logging/organizationExclusion:OrganizationExclusion my_exclusion organizations/{{organization}}/exclusions/{{name}}\n```\n\n ", "properties": { "description": { "type": "string", @@ -174421,7 +175960,7 @@ } }, "gcp:logging/projectBucketConfig:ProjectBucketConfig": { - "description": "Manages a project-level logging bucket config. For more information see\n[the official logging documentation](https://cloud.google.com/logging/docs/) and\n[Storing Logs](https://cloud.google.com/logging/docs/storage).\n\n\u003e **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are \"_Default\" and \"_Required\".\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.organizations.Project(\"default\", {\n projectId: \"your-project-id\",\n orgId: \"123456789\",\n});\nconst basic = new gcp.logging.ProjectBucketConfig(\"basic\", {\n project: _default.id,\n location: \"global\",\n retentionDays: 30,\n bucketId: \"_Default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.organizations.Project(\"default\",\n project_id=\"your-project-id\",\n org_id=\"123456789\")\nbasic = gcp.logging.ProjectBucketConfig(\"basic\",\n project=default.id,\n location=\"global\",\n retention_days=30,\n bucket_id=\"_Default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Organizations.Project(\"default\", new()\n {\n ProjectId = \"your-project-id\",\n OrgId = \"123456789\",\n });\n\n var basic = new Gcp.Logging.ProjectBucketConfig(\"basic\", new()\n {\n Project = @default.Id,\n Location = \"global\",\n RetentionDays = 30,\n BucketId = \"_Default\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewProject(ctx, \"default\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"your-project-id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewProjectBucketConfig(ctx, \"basic\", \u0026logging.ProjectBucketConfigArgs{\n\t\t\tProject: _default.ID(),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tRetentionDays: pulumi.Int(30),\n\t\t\tBucketId: pulumi.String(\"_Default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.logging.ProjectBucketConfig;\nimport com.pulumi.gcp.logging.ProjectBucketConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Project(\"default\", ProjectArgs.builder() \n .projectId(\"your-project-id\")\n .orgId(\"123456789\")\n .build());\n\n var basic = new ProjectBucketConfig(\"basic\", ProjectBucketConfigArgs.builder() \n .project(default_.id())\n .location(\"global\")\n .retentionDays(30)\n .bucketId(\"_Default\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:organizations:Project\n properties:\n projectId: your-project-id\n orgId: '123456789'\n basic:\n type: gcp:logging:ProjectBucketConfig\n properties:\n project: ${default.id}\n location: global\n retentionDays: 30\n bucketId: _Default\n```\n\nCreate logging bucket with customId\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.logging.ProjectBucketConfig(\"basic\", {\n bucketId: \"custom-bucket\",\n location: \"global\",\n project: \"project_id\",\n retentionDays: 30,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.logging.ProjectBucketConfig(\"basic\",\n bucket_id=\"custom-bucket\",\n location=\"global\",\n project=\"project_id\",\n retention_days=30)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Logging.ProjectBucketConfig(\"basic\", new()\n {\n BucketId = \"custom-bucket\",\n Location = \"global\",\n Project = \"project_id\",\n RetentionDays = 30,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewProjectBucketConfig(ctx, \"basic\", \u0026logging.ProjectBucketConfigArgs{\n\t\t\tBucketId: pulumi.String(\"custom-bucket\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tProject: pulumi.String(\"project_id\"),\n\t\t\tRetentionDays: pulumi.Int(30),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.ProjectBucketConfig;\nimport com.pulumi.gcp.logging.ProjectBucketConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ProjectBucketConfig(\"basic\", ProjectBucketConfigArgs.builder() \n .bucketId(\"custom-bucket\")\n .location(\"global\")\n .project(\"project_id\")\n .retentionDays(30)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:logging:ProjectBucketConfig\n properties:\n bucketId: custom-bucket\n location: global\n project: project_id\n retentionDays: 30\n```\n\nCreate logging bucket with customId and cmekSettings\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cmekSettings = gcp.logging.getProjectCmekSettings({\n project: \"project_id\",\n});\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"us-central1\"});\nconst key = new gcp.kms.CryptoKey(\"key\", {\n keyRing: keyring.id,\n rotationPeriod: \"100000s\",\n});\nconst cryptoKeyBinding = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", {\n cryptoKeyId: key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [cmekSettings.then(cmekSettings =\u003e `serviceAccount:${cmekSettings.serviceAccountId}`)],\n});\nconst example_project_bucket_cmek_settings = new gcp.logging.ProjectBucketConfig(\"example-project-bucket-cmek-settings\", {\n project: \"project_id\",\n location: \"us-central1\",\n retentionDays: 30,\n bucketId: \"custom-bucket\",\n cmekSettings: {\n kmsKeyName: key.id,\n },\n}, {\n dependsOn: [cryptoKeyBinding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncmek_settings = gcp.logging.get_project_cmek_settings(project=\"project_id\")\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"us-central1\")\nkey = gcp.kms.CryptoKey(\"key\",\n key_ring=keyring.id,\n rotation_period=\"100000s\")\ncrypto_key_binding = gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\",\n crypto_key_id=key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[f\"serviceAccount:{cmek_settings.service_account_id}\"])\nexample_project_bucket_cmek_settings = gcp.logging.ProjectBucketConfig(\"example-project-bucket-cmek-settings\",\n project=\"project_id\",\n location=\"us-central1\",\n retention_days=30,\n bucket_id=\"custom-bucket\",\n cmek_settings=gcp.logging.ProjectBucketConfigCmekSettingsArgs(\n kms_key_name=key.id,\n ),\n opts=pulumi.ResourceOptions(depends_on=[crypto_key_binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cmekSettings = Gcp.Logging.GetProjectCmekSettings.Invoke(new()\n {\n Project = \"project_id\",\n });\n\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"us-central1\",\n });\n\n var key = new Gcp.Kms.CryptoKey(\"key\", new()\n {\n KeyRing = keyring.Id,\n RotationPeriod = \"100000s\",\n });\n\n var cryptoKeyBinding = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", new()\n {\n CryptoKeyId = key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n $\"serviceAccount:{cmekSettings.Apply(getProjectCmekSettingsResult =\u003e getProjectCmekSettingsResult.ServiceAccountId)}\",\n },\n });\n\n var example_project_bucket_cmek_settings = new Gcp.Logging.ProjectBucketConfig(\"example-project-bucket-cmek-settings\", new()\n {\n Project = \"project_id\",\n Location = \"us-central1\",\n RetentionDays = 30,\n BucketId = \"custom-bucket\",\n CmekSettings = new Gcp.Logging.Inputs.ProjectBucketConfigCmekSettingsArgs\n {\n KmsKeyName = key.Id,\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n cryptoKeyBinding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcmekSettings, err := logging.GetProjectCmekSettings(ctx, \u0026logging.GetProjectCmekSettingsArgs{\n\t\t\tProject: \"project_id\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkey, err := kms.NewCryptoKey(ctx, \"key\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tRotationPeriod: pulumi.String(\"100000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyBinding, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKeyBinding\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: key.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:%v\", cmekSettings.ServiceAccountId)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewProjectBucketConfig(ctx, \"example-project-bucket-cmek-settings\", \u0026logging.ProjectBucketConfigArgs{\n\t\t\tProject: pulumi.String(\"project_id\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionDays: pulumi.Int(30),\n\t\t\tBucketId: pulumi.String(\"custom-bucket\"),\n\t\t\tCmekSettings: \u0026logging.ProjectBucketConfigCmekSettingsArgs{\n\t\t\t\tKmsKeyName: key.ID(),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyBinding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LoggingFunctions;\nimport com.pulumi.gcp.logging.inputs.GetProjectCmekSettingsArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.logging.ProjectBucketConfig;\nimport com.pulumi.gcp.logging.ProjectBucketConfigArgs;\nimport com.pulumi.gcp.logging.inputs.ProjectBucketConfigCmekSettingsArgs;\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 cmekSettings = LoggingFunctions.getProjectCmekSettings(GetProjectCmekSettingsArgs.builder()\n .project(\"project_id\")\n .build());\n\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var key = new CryptoKey(\"key\", CryptoKeyArgs.builder() \n .keyRing(keyring.id())\n .rotationPeriod(\"100000s\")\n .build());\n\n var cryptoKeyBinding = new CryptoKeyIAMBinding(\"cryptoKeyBinding\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(key.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(String.format(\"serviceAccount:%s\", cmekSettings.applyValue(getProjectCmekSettingsResult -\u003e getProjectCmekSettingsResult.serviceAccountId())))\n .build());\n\n var example_project_bucket_cmek_settings = new ProjectBucketConfig(\"example-project-bucket-cmek-settings\", ProjectBucketConfigArgs.builder() \n .project(\"project_id\")\n .location(\"us-central1\")\n .retentionDays(30)\n .bucketId(\"custom-bucket\")\n .cmekSettings(ProjectBucketConfigCmekSettingsArgs.builder()\n .kmsKeyName(key.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyBinding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n key:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyring.id}\n rotationPeriod: 100000s\n cryptoKeyBinding:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${key.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:${cmekSettings.serviceAccountId}\n example-project-bucket-cmek-settings:\n type: gcp:logging:ProjectBucketConfig\n properties:\n project: project_id\n location: us-central1\n retentionDays: 30\n bucketId: custom-bucket\n cmekSettings:\n kmsKeyName: ${key.id}\n options:\n dependson:\n - ${cryptoKeyBinding}\nvariables:\n cmekSettings:\n fn::invoke:\n Function: gcp:logging:getProjectCmekSettings\n Arguments:\n project: project_id\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource can be imported using the following format\n\n```sh\n $ pulumi import gcp:logging/projectBucketConfig:ProjectBucketConfig default projects/{{project}}/locations/{{location}}/buckets/{{bucket_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.organizations.Project(\"default\", {\n projectId: \"your-project-id\",\n orgId: \"123456789\",\n});\nconst basic = new gcp.logging.ProjectBucketConfig(\"basic\", {\n project: _default.id,\n location: \"global\",\n retentionDays: 30,\n bucketId: \"_Default\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.organizations.Project(\"default\",\n project_id=\"your-project-id\",\n org_id=\"123456789\")\nbasic = gcp.logging.ProjectBucketConfig(\"basic\",\n project=default.id,\n location=\"global\",\n retention_days=30,\n bucket_id=\"_Default\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Organizations.Project(\"default\", new()\n {\n ProjectId = \"your-project-id\",\n OrgId = \"123456789\",\n });\n\n var basic = new Gcp.Logging.ProjectBucketConfig(\"basic\", new()\n {\n Project = @default.Id,\n Location = \"global\",\n RetentionDays = 30,\n BucketId = \"_Default\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewProject(ctx, \"default\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"your-project-id\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewProjectBucketConfig(ctx, \"basic\", \u0026logging.ProjectBucketConfigArgs{\n\t\t\tProject: _default.ID(),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tRetentionDays: pulumi.Int(30),\n\t\t\tBucketId: pulumi.String(\"_Default\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.logging.ProjectBucketConfig;\nimport com.pulumi.gcp.logging.ProjectBucketConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Project(\"default\", ProjectArgs.builder() \n .projectId(\"your-project-id\")\n .orgId(\"123456789\")\n .build());\n\n var basic = new ProjectBucketConfig(\"basic\", ProjectBucketConfigArgs.builder() \n .project(default_.id())\n .location(\"global\")\n .retentionDays(30)\n .bucketId(\"_Default\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:organizations:Project\n properties:\n projectId: your-project-id\n orgId: '123456789'\n basic:\n type: gcp:logging:ProjectBucketConfig\n properties:\n project: ${default.id}\n location: global\n retentionDays: 30\n bucketId: _Default\n```\n\nCreate logging bucket with customId\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.logging.ProjectBucketConfig(\"basic\", {\n bucketId: \"custom-bucket\",\n location: \"global\",\n project: \"project_id\",\n retentionDays: 30,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.logging.ProjectBucketConfig(\"basic\",\n bucket_id=\"custom-bucket\",\n location=\"global\",\n project=\"project_id\",\n retention_days=30)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Logging.ProjectBucketConfig(\"basic\", new()\n {\n BucketId = \"custom-bucket\",\n Location = \"global\",\n Project = \"project_id\",\n RetentionDays = 30,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewProjectBucketConfig(ctx, \"basic\", \u0026logging.ProjectBucketConfigArgs{\n\t\t\tBucketId: pulumi.String(\"custom-bucket\"),\n\t\t\tLocation: pulumi.String(\"global\"),\n\t\t\tProject: pulumi.String(\"project_id\"),\n\t\t\tRetentionDays: pulumi.Int(30),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.ProjectBucketConfig;\nimport com.pulumi.gcp.logging.ProjectBucketConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 ProjectBucketConfig(\"basic\", ProjectBucketConfigArgs.builder() \n .bucketId(\"custom-bucket\")\n .location(\"global\")\n .project(\"project_id\")\n .retentionDays(30)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:logging:ProjectBucketConfig\n properties:\n bucketId: custom-bucket\n location: global\n project: project_id\n retentionDays: 30\n```\n\nCreate logging bucket with customId and cmekSettings\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cmekSettings = gcp.logging.getProjectCmekSettings({\n project: \"project_id\",\n});\nconst keyring = new gcp.kms.KeyRing(\"keyring\", {location: \"us-central1\"});\nconst key = new gcp.kms.CryptoKey(\"key\", {\n keyRing: keyring.id,\n rotationPeriod: \"100000s\",\n});\nconst cryptoKeyBinding = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", {\n cryptoKeyId: key.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [cmekSettings.then(cmekSettings =\u003e `serviceAccount:${cmekSettings.serviceAccountId}`)],\n});\nconst example_project_bucket_cmek_settings = new gcp.logging.ProjectBucketConfig(\"example-project-bucket-cmek-settings\", {\n project: \"project_id\",\n location: \"us-central1\",\n retentionDays: 30,\n bucketId: \"custom-bucket\",\n cmekSettings: {\n kmsKeyName: key.id,\n },\n}, {\n dependsOn: [cryptoKeyBinding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncmek_settings = gcp.logging.get_project_cmek_settings(project=\"project_id\")\nkeyring = gcp.kms.KeyRing(\"keyring\", location=\"us-central1\")\nkey = gcp.kms.CryptoKey(\"key\",\n key_ring=keyring.id,\n rotation_period=\"100000s\")\ncrypto_key_binding = gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\",\n crypto_key_id=key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[f\"serviceAccount:{cmek_settings.service_account_id}\"])\nexample_project_bucket_cmek_settings = gcp.logging.ProjectBucketConfig(\"example-project-bucket-cmek-settings\",\n project=\"project_id\",\n location=\"us-central1\",\n retention_days=30,\n bucket_id=\"custom-bucket\",\n cmek_settings=gcp.logging.ProjectBucketConfigCmekSettingsArgs(\n kms_key_name=key.id,\n ),\n opts=pulumi.ResourceOptions(depends_on=[crypto_key_binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cmekSettings = Gcp.Logging.GetProjectCmekSettings.Invoke(new()\n {\n Project = \"project_id\",\n });\n\n var keyring = new Gcp.Kms.KeyRing(\"keyring\", new()\n {\n Location = \"us-central1\",\n });\n\n var key = new Gcp.Kms.CryptoKey(\"key\", new()\n {\n KeyRing = keyring.Id,\n RotationPeriod = \"100000s\",\n });\n\n var cryptoKeyBinding = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", new()\n {\n CryptoKeyId = key.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n $\"serviceAccount:{cmekSettings.Apply(getProjectCmekSettingsResult =\u003e getProjectCmekSettingsResult.ServiceAccountId)}\",\n },\n });\n\n var example_project_bucket_cmek_settings = new Gcp.Logging.ProjectBucketConfig(\"example-project-bucket-cmek-settings\", new()\n {\n Project = \"project_id\",\n Location = \"us-central1\",\n RetentionDays = 30,\n BucketId = \"custom-bucket\",\n CmekSettings = new Gcp.Logging.Inputs.ProjectBucketConfigCmekSettingsArgs\n {\n KmsKeyName = key.Id,\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n cryptoKeyBinding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcmekSettings, err := logging.GetProjectCmekSettings(ctx, \u0026logging.GetProjectCmekSettingsArgs{\n\t\t\tProject: \"project_id\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkeyring, err := kms.NewKeyRing(ctx, \"keyring\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkey, err := kms.NewCryptoKey(ctx, \"key\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyring.ID(),\n\t\t\tRotationPeriod: pulumi.String(\"100000s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyBinding, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKeyBinding\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: key.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:%v\", cmekSettings.ServiceAccountId)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = logging.NewProjectBucketConfig(ctx, \"example-project-bucket-cmek-settings\", \u0026logging.ProjectBucketConfigArgs{\n\t\t\tProject: pulumi.String(\"project_id\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tRetentionDays: pulumi.Int(30),\n\t\t\tBucketId: pulumi.String(\"custom-bucket\"),\n\t\t\tCmekSettings: \u0026logging.ProjectBucketConfigCmekSettingsArgs{\n\t\t\t\tKmsKeyName: key.ID(),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyBinding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.LoggingFunctions;\nimport com.pulumi.gcp.logging.inputs.GetProjectCmekSettingsArgs;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.logging.ProjectBucketConfig;\nimport com.pulumi.gcp.logging.ProjectBucketConfigArgs;\nimport com.pulumi.gcp.logging.inputs.ProjectBucketConfigCmekSettingsArgs;\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 cmekSettings = LoggingFunctions.getProjectCmekSettings(GetProjectCmekSettingsArgs.builder()\n .project(\"project_id\")\n .build());\n\n var keyring = new KeyRing(\"keyring\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var key = new CryptoKey(\"key\", CryptoKeyArgs.builder() \n .keyRing(keyring.id())\n .rotationPeriod(\"100000s\")\n .build());\n\n var cryptoKeyBinding = new CryptoKeyIAMBinding(\"cryptoKeyBinding\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(key.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(String.format(\"serviceAccount:%s\", cmekSettings.applyValue(getProjectCmekSettingsResult -\u003e getProjectCmekSettingsResult.serviceAccountId())))\n .build());\n\n var example_project_bucket_cmek_settings = new ProjectBucketConfig(\"example-project-bucket-cmek-settings\", ProjectBucketConfigArgs.builder() \n .project(\"project_id\")\n .location(\"us-central1\")\n .retentionDays(30)\n .bucketId(\"custom-bucket\")\n .cmekSettings(ProjectBucketConfigCmekSettingsArgs.builder()\n .kmsKeyName(key.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyBinding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n keyring:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n key:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyring.id}\n rotationPeriod: 100000s\n cryptoKeyBinding:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${key.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:${cmekSettings.serviceAccountId}\n example-project-bucket-cmek-settings:\n type: gcp:logging:ProjectBucketConfig\n properties:\n project: project_id\n location: us-central1\n retentionDays: 30\n bucketId: custom-bucket\n cmekSettings:\n kmsKeyName: ${key.id}\n options:\n dependson:\n - ${cryptoKeyBinding}\nvariables:\n cmekSettings:\n fn::invoke:\n Function: gcp:logging:getProjectCmekSettings\n Arguments:\n project: project_id\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource can be imported using the following format\n\n```sh\n $ pulumi import gcp:logging/projectBucketConfig:ProjectBucketConfig default projects/{{project}}/locations/{{location}}/buckets/{{bucket_id}}\n```\n\n ", "properties": { "bucketId": { "type": "string", @@ -174541,7 +176080,7 @@ } }, "gcp:logging/projectExclusion:ProjectExclusion": { - "description": "Manages a project-level logging exclusion. For more information see:\n\n* [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.exclusions)\n* How-to Guides\n * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions)\n\n\u003e You can specify exclusions for log sinks created by the provider by using the exclusions field of `gcp.logging.ProjectSink`\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_exclusion = new gcp.logging.ProjectExclusion(\"my-exclusion\", {\n description: \"Exclude GCE instance debug logs\",\n filter: \"resource.type = gce_instance AND severity \u003c= DEBUG\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_exclusion = gcp.logging.ProjectExclusion(\"my-exclusion\",\n description=\"Exclude GCE instance debug logs\",\n filter=\"resource.type = gce_instance AND severity \u003c= DEBUG\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_exclusion = new Gcp.Logging.ProjectExclusion(\"my-exclusion\", new()\n {\n Description = \"Exclude GCE instance debug logs\",\n Filter = \"resource.type = gce_instance AND severity \u003c= DEBUG\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewProjectExclusion(ctx, \"my-exclusion\", \u0026logging.ProjectExclusionArgs{\n\t\t\tDescription: pulumi.String(\"Exclude GCE instance debug logs\"),\n\t\t\tFilter: pulumi.String(\"resource.type = gce_instance AND severity \u003c= DEBUG\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.ProjectExclusion;\nimport com.pulumi.gcp.logging.ProjectExclusionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_exclusion = new ProjectExclusion(\"my-exclusion\", ProjectExclusionArgs.builder() \n .description(\"Exclude GCE instance debug logs\")\n .filter(\"resource.type = gce_instance AND severity \u003c= DEBUG\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-exclusion:\n type: gcp:logging:ProjectExclusion\n properties:\n description: Exclude GCE instance debug logs\n # Exclude all DEBUG or lower severity messages relating to instances\n filter: resource.type = gce_instance AND severity \u003c= DEBUG\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nProject-level logging exclusions can be imported using their URI, e.g.\n\n```sh\n $ pulumi import gcp:logging/projectExclusion:ProjectExclusion my_exclusion projects/my-project/exclusions/my-exclusion\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_exclusion = new gcp.logging.ProjectExclusion(\"my-exclusion\", {\n description: \"Exclude GCE instance debug logs\",\n filter: \"resource.type = gce_instance AND severity \u003c= DEBUG\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_exclusion = gcp.logging.ProjectExclusion(\"my-exclusion\",\n description=\"Exclude GCE instance debug logs\",\n filter=\"resource.type = gce_instance AND severity \u003c= DEBUG\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_exclusion = new Gcp.Logging.ProjectExclusion(\"my-exclusion\", new()\n {\n Description = \"Exclude GCE instance debug logs\",\n Filter = \"resource.type = gce_instance AND severity \u003c= DEBUG\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/logging\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := logging.NewProjectExclusion(ctx, \"my-exclusion\", \u0026logging.ProjectExclusionArgs{\n\t\t\tDescription: pulumi.String(\"Exclude GCE instance debug logs\"),\n\t\t\tFilter: pulumi.String(\"resource.type = gce_instance AND severity \u003c= DEBUG\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.logging.ProjectExclusion;\nimport com.pulumi.gcp.logging.ProjectExclusionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_exclusion = new ProjectExclusion(\"my-exclusion\", ProjectExclusionArgs.builder() \n .description(\"Exclude GCE instance debug logs\")\n .filter(\"resource.type = gce_instance AND severity \u003c= DEBUG\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-exclusion:\n type: gcp:logging:ProjectExclusion\n properties:\n description: Exclude GCE instance debug logs\n # Exclude all DEBUG or lower severity messages relating to instances\n filter: resource.type = gce_instance AND severity \u003c= DEBUG\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nProject-level logging exclusions can be imported using their URI, e.g.\n\n```sh\n $ pulumi import gcp:logging/projectExclusion:ProjectExclusion my_exclusion projects/my-project/exclusions/my-exclusion\n```\n\n ", "properties": { "description": { "type": "string", @@ -174780,7 +176319,7 @@ } }, "gcp:memcache/instance:Instance": { - "description": "A Google Cloud Memcache instance.\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/memorystore/docs/memcached/reference/rest/v1/projects.locations.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/memcache/docs/creating-instances)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Memcache Instance Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst memcacheNetwork = gcp.compute.getNetwork({\n name: \"test-network\",\n});\nconst serviceRange = new gcp.compute.GlobalAddress(\"serviceRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: memcacheNetwork.then(memcacheNetwork =\u003e memcacheNetwork.id),\n});\nconst privateServiceConnection = new gcp.servicenetworking.Connection(\"privateServiceConnection\", {\n network: memcacheNetwork.then(memcacheNetwork =\u003e memcacheNetwork.id),\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [serviceRange.name],\n});\nconst instance = new gcp.memcache.Instance(\"instance\", {\n authorizedNetwork: privateServiceConnection.network,\n nodeConfig: {\n cpuCount: 1,\n memorySizeMb: 1024,\n },\n nodeCount: 1,\n memcacheVersion: \"MEMCACHE_1_5\",\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"SATURDAY\",\n duration: \"14400s\",\n startTime: {\n hours: 0,\n minutes: 30,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmemcache_network = gcp.compute.get_network(name=\"test-network\")\nservice_range = gcp.compute.GlobalAddress(\"serviceRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=memcache_network.id)\nprivate_service_connection = gcp.servicenetworking.Connection(\"privateServiceConnection\",\n network=memcache_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[service_range.name])\ninstance = gcp.memcache.Instance(\"instance\",\n authorized_network=private_service_connection.network,\n node_config=gcp.memcache.InstanceNodeConfigArgs(\n cpu_count=1,\n memory_size_mb=1024,\n ),\n node_count=1,\n memcache_version=\"MEMCACHE_1_5\",\n maintenance_policy=gcp.memcache.InstanceMaintenancePolicyArgs(\n weekly_maintenance_windows=[gcp.memcache.InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs(\n day=\"SATURDAY\",\n duration=\"14400s\",\n start_time=gcp.memcache.InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs(\n hours=0,\n minutes=30,\n seconds=0,\n nanos=0,\n ),\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var memcacheNetwork = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"test-network\",\n });\n\n var serviceRange = new Gcp.Compute.GlobalAddress(\"serviceRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = memcacheNetwork.Apply(getNetworkResult =\u003e getNetworkResult.Id),\n });\n\n var privateServiceConnection = new Gcp.ServiceNetworking.Connection(\"privateServiceConnection\", new()\n {\n Network = memcacheNetwork.Apply(getNetworkResult =\u003e getNetworkResult.Id),\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n serviceRange.Name,\n },\n });\n\n var instance = new Gcp.Memcache.Instance(\"instance\", new()\n {\n AuthorizedNetwork = privateServiceConnection.Network,\n NodeConfig = new Gcp.Memcache.Inputs.InstanceNodeConfigArgs\n {\n CpuCount = 1,\n MemorySizeMb = 1024,\n },\n NodeCount = 1,\n MemcacheVersion = \"MEMCACHE_1_5\",\n MaintenancePolicy = new Gcp.Memcache.Inputs.InstanceMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Memcache.Inputs.InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"SATURDAY\",\n Duration = \"14400s\",\n StartTime = new Gcp.Memcache.Inputs.InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 0,\n Minutes = 30,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/memcache\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tmemcacheNetwork, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"test-network\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tserviceRange, err := compute.NewGlobalAddress(ctx, \"serviceRange\", \u0026compute.GlobalAddressArgs{\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: *pulumi.String(memcacheNetwork.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateServiceConnection, err := servicenetworking.NewConnection(ctx, \"privateServiceConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: *pulumi.String(memcacheNetwork.Id),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tserviceRange.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 = memcache.NewInstance(ctx, \"instance\", \u0026memcache.InstanceArgs{\n\t\t\tAuthorizedNetwork: privateServiceConnection.Network,\n\t\t\tNodeConfig: \u0026memcache.InstanceNodeConfigArgs{\n\t\t\t\tCpuCount: pulumi.Int(1),\n\t\t\t\tMemorySizeMb: pulumi.Int(1024),\n\t\t\t},\n\t\t\tNodeCount: pulumi.Int(1),\n\t\t\tMemcacheVersion: pulumi.String(\"MEMCACHE_1_5\"),\n\t\t\tMaintenancePolicy: \u0026memcache.InstanceMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: memcache.InstanceMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026memcache.InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"SATURDAY\"),\n\t\t\t\t\t\tDuration: pulumi.String(\"14400s\"),\n\t\t\t\t\t\tStartTime: \u0026memcache.InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(0),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(30),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.memcache.Instance;\nimport com.pulumi.gcp.memcache.InstanceArgs;\nimport com.pulumi.gcp.memcache.inputs.InstanceNodeConfigArgs;\nimport com.pulumi.gcp.memcache.inputs.InstanceMaintenancePolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 memcacheNetwork = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"test-network\")\n .build());\n\n var serviceRange = new GlobalAddress(\"serviceRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(memcacheNetwork.applyValue(getNetworkResult -\u003e getNetworkResult.id()))\n .build());\n\n var privateServiceConnection = new Connection(\"privateServiceConnection\", ConnectionArgs.builder() \n .network(memcacheNetwork.applyValue(getNetworkResult -\u003e getNetworkResult.id()))\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(serviceRange.name())\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder() \n .authorizedNetwork(privateServiceConnection.network())\n .nodeConfig(InstanceNodeConfigArgs.builder()\n .cpuCount(1)\n .memorySizeMb(1024)\n .build())\n .nodeCount(1)\n .memcacheVersion(\"MEMCACHE_1_5\")\n .maintenancePolicy(InstanceMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"SATURDAY\")\n .duration(\"14400s\")\n .startTime(InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(0)\n .minutes(30)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n serviceRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${memcacheNetwork.id}\n privateServiceConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${memcacheNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${serviceRange.name}\n instance:\n type: gcp:memcache:Instance\n properties:\n authorizedNetwork: ${privateServiceConnection.network}\n nodeConfig:\n cpuCount: 1\n memorySizeMb: 1024\n nodeCount: 1\n memcacheVersion: MEMCACHE_1_5\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: SATURDAY\n duration: 14400s\n startTime:\n hours: 0\n minutes: 30\n seconds: 0\n nanos: 0\nvariables:\n memcacheNetwork:\n fn::invoke:\n Function: gcp:compute:getNetwork\n Arguments:\n name: test-network\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:memcache/instance:Instance default projects/{{project}}/locations/{{region}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:memcache/instance:Instance default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:memcache/instance:Instance default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:memcache/instance:Instance default {{name}}\n```\n\n ", + "description": "A Google Cloud Memcache instance.\n\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/memorystore/docs/memcached/reference/rest/v1/projects.locations.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/memcache/docs/creating-instances)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Memcache Instance Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst memcacheNetwork = gcp.compute.getNetwork({\n name: \"test-network\",\n});\nconst serviceRange = new gcp.compute.GlobalAddress(\"serviceRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: memcacheNetwork.then(memcacheNetwork =\u003e memcacheNetwork.id),\n});\nconst privateServiceConnection = new gcp.servicenetworking.Connection(\"privateServiceConnection\", {\n network: memcacheNetwork.then(memcacheNetwork =\u003e memcacheNetwork.id),\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [serviceRange.name],\n});\nconst instance = new gcp.memcache.Instance(\"instance\", {\n authorizedNetwork: privateServiceConnection.network,\n nodeConfig: {\n cpuCount: 1,\n memorySizeMb: 1024,\n },\n nodeCount: 1,\n memcacheVersion: \"MEMCACHE_1_5\",\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"SATURDAY\",\n duration: \"14400s\",\n startTime: {\n hours: 0,\n minutes: 30,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmemcache_network = gcp.compute.get_network(name=\"test-network\")\nservice_range = gcp.compute.GlobalAddress(\"serviceRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=memcache_network.id)\nprivate_service_connection = gcp.servicenetworking.Connection(\"privateServiceConnection\",\n network=memcache_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[service_range.name])\ninstance = gcp.memcache.Instance(\"instance\",\n authorized_network=private_service_connection.network,\n node_config=gcp.memcache.InstanceNodeConfigArgs(\n cpu_count=1,\n memory_size_mb=1024,\n ),\n node_count=1,\n memcache_version=\"MEMCACHE_1_5\",\n maintenance_policy=gcp.memcache.InstanceMaintenancePolicyArgs(\n weekly_maintenance_windows=[gcp.memcache.InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs(\n day=\"SATURDAY\",\n duration=\"14400s\",\n start_time=gcp.memcache.InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs(\n hours=0,\n minutes=30,\n seconds=0,\n nanos=0,\n ),\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var memcacheNetwork = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"test-network\",\n });\n\n var serviceRange = new Gcp.Compute.GlobalAddress(\"serviceRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = memcacheNetwork.Apply(getNetworkResult =\u003e getNetworkResult.Id),\n });\n\n var privateServiceConnection = new Gcp.ServiceNetworking.Connection(\"privateServiceConnection\", new()\n {\n Network = memcacheNetwork.Apply(getNetworkResult =\u003e getNetworkResult.Id),\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n serviceRange.Name,\n },\n });\n\n var instance = new Gcp.Memcache.Instance(\"instance\", new()\n {\n AuthorizedNetwork = privateServiceConnection.Network,\n NodeConfig = new Gcp.Memcache.Inputs.InstanceNodeConfigArgs\n {\n CpuCount = 1,\n MemorySizeMb = 1024,\n },\n NodeCount = 1,\n MemcacheVersion = \"MEMCACHE_1_5\",\n MaintenancePolicy = new Gcp.Memcache.Inputs.InstanceMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Memcache.Inputs.InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"SATURDAY\",\n Duration = \"14400s\",\n StartTime = new Gcp.Memcache.Inputs.InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 0,\n Minutes = 30,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/memcache\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tmemcacheNetwork, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"test-network\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tserviceRange, err := compute.NewGlobalAddress(ctx, \"serviceRange\", \u0026compute.GlobalAddressArgs{\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: *pulumi.String(memcacheNetwork.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateServiceConnection, err := servicenetworking.NewConnection(ctx, \"privateServiceConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: *pulumi.String(memcacheNetwork.Id),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tserviceRange.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 = memcache.NewInstance(ctx, \"instance\", \u0026memcache.InstanceArgs{\n\t\t\tAuthorizedNetwork: privateServiceConnection.Network,\n\t\t\tNodeConfig: \u0026memcache.InstanceNodeConfigArgs{\n\t\t\t\tCpuCount: pulumi.Int(1),\n\t\t\t\tMemorySizeMb: pulumi.Int(1024),\n\t\t\t},\n\t\t\tNodeCount: pulumi.Int(1),\n\t\t\tMemcacheVersion: pulumi.String(\"MEMCACHE_1_5\"),\n\t\t\tMaintenancePolicy: \u0026memcache.InstanceMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: memcache.InstanceMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026memcache.InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"SATURDAY\"),\n\t\t\t\t\t\tDuration: pulumi.String(\"14400s\"),\n\t\t\t\t\t\tStartTime: \u0026memcache.InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(0),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(30),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.memcache.Instance;\nimport com.pulumi.gcp.memcache.InstanceArgs;\nimport com.pulumi.gcp.memcache.inputs.InstanceNodeConfigArgs;\nimport com.pulumi.gcp.memcache.inputs.InstanceMaintenancePolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 memcacheNetwork = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"test-network\")\n .build());\n\n var serviceRange = new GlobalAddress(\"serviceRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(memcacheNetwork.applyValue(getNetworkResult -\u003e getNetworkResult.id()))\n .build());\n\n var privateServiceConnection = new Connection(\"privateServiceConnection\", ConnectionArgs.builder() \n .network(memcacheNetwork.applyValue(getNetworkResult -\u003e getNetworkResult.id()))\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(serviceRange.name())\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder() \n .authorizedNetwork(privateServiceConnection.network())\n .nodeConfig(InstanceNodeConfigArgs.builder()\n .cpuCount(1)\n .memorySizeMb(1024)\n .build())\n .nodeCount(1)\n .memcacheVersion(\"MEMCACHE_1_5\")\n .maintenancePolicy(InstanceMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"SATURDAY\")\n .duration(\"14400s\")\n .startTime(InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(0)\n .minutes(30)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n serviceRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${memcacheNetwork.id}\n privateServiceConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${memcacheNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${serviceRange.name}\n instance:\n type: gcp:memcache:Instance\n properties:\n authorizedNetwork: ${privateServiceConnection.network}\n nodeConfig:\n cpuCount: 1\n memorySizeMb: 1024\n nodeCount: 1\n memcacheVersion: MEMCACHE_1_5\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: SATURDAY\n duration: 14400s\n startTime:\n hours: 0\n minutes: 30\n seconds: 0\n nanos: 0\nvariables:\n memcacheNetwork:\n fn::invoke:\n Function: gcp:compute:getNetwork\n Arguments:\n name: test-network\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:memcache/instance:Instance default projects/{{project}}/locations/{{region}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:memcache/instance:Instance default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:memcache/instance:Instance default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:memcache/instance:Instance default {{name}}\n```\n\n ", "properties": { "authorizedNetwork": { "type": "string", @@ -175976,7 +177515,7 @@ } }, "gcp:monitoring/notificationChannel:NotificationChannel": { - "description": "A NotificationChannel is a medium through which an alert is delivered\nwhen a policy violation is detected. Examples of channels include email, SMS,\nand third-party messaging applications. Fields containing sensitive information\nlike authentication tokens or contact info are only partially populated on retrieval.\n\nNotification Channels are designed to be flexible and are made up of a supported `type`\nand labels to configure that channel. Each `type` has specific labels that need to be\npresent for that channel to be correctly configured. The labels that are required to be\npresent for one channel `type` are often different than those required for another.\nDue to these loose constraints it's often best to set up a channel through the UI\nand import it to the provider when setting up a brand new channel type to determine which\nlabels are required.\n\nA list of supported channels per project the `list` endpoint can be\naccessed programmatically or through the api explorer at https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannelDescriptors/list .\nThis provides the channel type and all of the required labels that must be passed.\n\n\nTo get more information about NotificationChannel, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannels)\n* How-to Guides\n * [Notification Options](https://cloud.google.com/monitoring/support/notification-options)\n * [Monitoring API Documentation](https://cloud.google.com/monitoring/api/v3/)\n\n\u003e **Warning:** All arguments including `sensitive_labels.auth_token`, `sensitive_labels.password`, and `sensitive_labels.service_key` will be stored in the raw\nstate as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Notification Channel Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.monitoring.NotificationChannel(\"basic\", {\n displayName: \"Test Notification Channel\",\n forceDelete: false,\n labels: {\n email_address: \"fake_email@blahblah.com\",\n },\n type: \"email\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.monitoring.NotificationChannel(\"basic\",\n display_name=\"Test Notification Channel\",\n force_delete=False,\n labels={\n \"email_address\": \"fake_email@blahblah.com\",\n },\n type=\"email\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Monitoring.NotificationChannel(\"basic\", new()\n {\n DisplayName = \"Test Notification Channel\",\n ForceDelete = false,\n Labels = \n {\n { \"email_address\", \"fake_email@blahblah.com\" },\n },\n Type = \"email\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewNotificationChannel(ctx, \"basic\", \u0026monitoring.NotificationChannelArgs{\n\t\t\tDisplayName: pulumi.String(\"Test Notification Channel\"),\n\t\t\tForceDelete: pulumi.Bool(false),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"email_address\": pulumi.String(\"fake_email@blahblah.com\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"email\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.NotificationChannel;\nimport com.pulumi.gcp.monitoring.NotificationChannelArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 NotificationChannel(\"basic\", NotificationChannelArgs.builder() \n .displayName(\"Test Notification Channel\")\n .forceDelete(false)\n .labels(Map.of(\"email_address\", \"fake_email@blahblah.com\"))\n .type(\"email\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:monitoring:NotificationChannel\n properties:\n displayName: Test Notification Channel\n forceDelete: false\n labels:\n email_address: fake_email@blahblah.com\n type: email\n```\n{{% /example %}}\n{{% example %}}\n### Notification Channel Sensitive\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.monitoring.NotificationChannel(\"default\", {\n displayName: \"Test Slack Channel\",\n labels: {\n channel_name: \"#foobar\",\n },\n sensitiveLabels: {\n authToken: \"one\",\n },\n type: \"slack\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.monitoring.NotificationChannel(\"default\",\n display_name=\"Test Slack Channel\",\n labels={\n \"channel_name\": \"#foobar\",\n },\n sensitive_labels=gcp.monitoring.NotificationChannelSensitiveLabelsArgs(\n auth_token=\"one\",\n ),\n type=\"slack\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Monitoring.NotificationChannel(\"default\", new()\n {\n DisplayName = \"Test Slack Channel\",\n Labels = \n {\n { \"channel_name\", \"#foobar\" },\n },\n SensitiveLabels = new Gcp.Monitoring.Inputs.NotificationChannelSensitiveLabelsArgs\n {\n AuthToken = \"one\",\n },\n Type = \"slack\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewNotificationChannel(ctx, \"default\", \u0026monitoring.NotificationChannelArgs{\n\t\t\tDisplayName: pulumi.String(\"Test Slack Channel\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"channel_name\": pulumi.String(\"#foobar\"),\n\t\t\t},\n\t\t\tSensitiveLabels: \u0026monitoring.NotificationChannelSensitiveLabelsArgs{\n\t\t\t\tAuthToken: pulumi.String(\"one\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"slack\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.NotificationChannel;\nimport com.pulumi.gcp.monitoring.NotificationChannelArgs;\nimport com.pulumi.gcp.monitoring.inputs.NotificationChannelSensitiveLabelsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 NotificationChannel(\"default\", NotificationChannelArgs.builder() \n .displayName(\"Test Slack Channel\")\n .labels(Map.of(\"channel_name\", \"#foobar\"))\n .sensitiveLabels(NotificationChannelSensitiveLabelsArgs.builder()\n .authToken(\"one\")\n .build())\n .type(\"slack\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:monitoring:NotificationChannel\n properties:\n displayName: Test Slack Channel\n labels:\n channel_name: '#foobar'\n sensitiveLabels:\n authToken: one\n type: slack\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nNotificationChannel can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:monitoring/notificationChannel:NotificationChannel default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Notification Channel Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = new gcp.monitoring.NotificationChannel(\"basic\", {\n displayName: \"Test Notification Channel\",\n forceDelete: false,\n labels: {\n email_address: \"fake_email@blahblah.com\",\n },\n type: \"email\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.monitoring.NotificationChannel(\"basic\",\n display_name=\"Test Notification Channel\",\n force_delete=False,\n labels={\n \"email_address\": \"fake_email@blahblah.com\",\n },\n type=\"email\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = new Gcp.Monitoring.NotificationChannel(\"basic\", new()\n {\n DisplayName = \"Test Notification Channel\",\n ForceDelete = false,\n Labels = \n {\n { \"email_address\", \"fake_email@blahblah.com\" },\n },\n Type = \"email\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewNotificationChannel(ctx, \"basic\", \u0026monitoring.NotificationChannelArgs{\n\t\t\tDisplayName: pulumi.String(\"Test Notification Channel\"),\n\t\t\tForceDelete: pulumi.Bool(false),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"email_address\": pulumi.String(\"fake_email@blahblah.com\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"email\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.NotificationChannel;\nimport com.pulumi.gcp.monitoring.NotificationChannelArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 NotificationChannel(\"basic\", NotificationChannelArgs.builder() \n .displayName(\"Test Notification Channel\")\n .forceDelete(false)\n .labels(Map.of(\"email_address\", \"fake_email@blahblah.com\"))\n .type(\"email\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basic:\n type: gcp:monitoring:NotificationChannel\n properties:\n displayName: Test Notification Channel\n forceDelete: false\n labels:\n email_address: fake_email@blahblah.com\n type: email\n```\n{{% /example %}}\n{{% example %}}\n### Notification Channel Sensitive\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst _default = new gcp.monitoring.NotificationChannel(\"default\", {\n displayName: \"Test Slack Channel\",\n labels: {\n channel_name: \"#foobar\",\n },\n sensitiveLabels: {\n authToken: \"one\",\n },\n type: \"slack\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.monitoring.NotificationChannel(\"default\",\n display_name=\"Test Slack Channel\",\n labels={\n \"channel_name\": \"#foobar\",\n },\n sensitive_labels=gcp.monitoring.NotificationChannelSensitiveLabelsArgs(\n auth_token=\"one\",\n ),\n type=\"slack\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = new Gcp.Monitoring.NotificationChannel(\"default\", new()\n {\n DisplayName = \"Test Slack Channel\",\n Labels = \n {\n { \"channel_name\", \"#foobar\" },\n },\n SensitiveLabels = new Gcp.Monitoring.Inputs.NotificationChannelSensitiveLabelsArgs\n {\n AuthToken = \"one\",\n },\n Type = \"slack\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewNotificationChannel(ctx, \"default\", \u0026monitoring.NotificationChannelArgs{\n\t\t\tDisplayName: pulumi.String(\"Test Slack Channel\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"channel_name\": pulumi.String(\"#foobar\"),\n\t\t\t},\n\t\t\tSensitiveLabels: \u0026monitoring.NotificationChannelSensitiveLabelsArgs{\n\t\t\t\tAuthToken: pulumi.String(\"one\"),\n\t\t\t},\n\t\t\tType: pulumi.String(\"slack\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.NotificationChannel;\nimport com.pulumi.gcp.monitoring.NotificationChannelArgs;\nimport com.pulumi.gcp.monitoring.inputs.NotificationChannelSensitiveLabelsArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 NotificationChannel(\"default\", NotificationChannelArgs.builder() \n .displayName(\"Test Slack Channel\")\n .labels(Map.of(\"channel_name\", \"#foobar\"))\n .sensitiveLabels(NotificationChannelSensitiveLabelsArgs.builder()\n .authToken(\"one\")\n .build())\n .type(\"slack\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n default:\n type: gcp:monitoring:NotificationChannel\n properties:\n displayName: Test Slack Channel\n labels:\n channel_name: '#foobar'\n sensitiveLabels:\n authToken: one\n type: slack\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nNotificationChannel can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:monitoring/notificationChannel:NotificationChannel default {{name}}\n```\n\n ", "properties": { "description": { "type": "string", @@ -175999,7 +177538,7 @@ "additionalProperties": { "type": "string" }, - "description": "Configuration fields that define the channel and its behavior. The\npermissible and required labels are specified in the\nNotificationChannelDescriptor corresponding to the type field.\nLabels with sensitive data are obfuscated by the API and therefore the provider cannot\ndetermine if there are upstream changes to these fields. They can also be configured via\nthe sensitive_labels block, but cannot be configured in both places.\n" + "description": "Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the\nNotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and\ntherefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the\nsensitive_labels block, but cannot be configured in both places.\n" }, "name": { "type": "string", @@ -176057,7 +177596,7 @@ "additionalProperties": { "type": "string" }, - "description": "Configuration fields that define the channel and its behavior. The\npermissible and required labels are specified in the\nNotificationChannelDescriptor corresponding to the type field.\nLabels with sensitive data are obfuscated by the API and therefore the provider cannot\ndetermine if there are upstream changes to these fields. They can also be configured via\nthe sensitive_labels block, but cannot be configured in both places.\n" + "description": "Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the\nNotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and\ntherefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the\nsensitive_labels block, but cannot be configured in both places.\n" }, "project": { "type": "string", @@ -176107,7 +177646,7 @@ "additionalProperties": { "type": "string" }, - "description": "Configuration fields that define the channel and its behavior. The\npermissible and required labels are specified in the\nNotificationChannelDescriptor corresponding to the type field.\nLabels with sensitive data are obfuscated by the API and therefore the provider cannot\ndetermine if there are upstream changes to these fields. They can also be configured via\nthe sensitive_labels block, but cannot be configured in both places.\n" + "description": "Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the\nNotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and\ntherefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the\nsensitive_labels block, but cannot be configured in both places.\n" }, "name": { "type": "string", @@ -176142,7 +177681,7 @@ } }, "gcp:monitoring/slo:Slo": { - "description": "A Service-Level Objective (SLO) describes the level of desired good\nservice. It consists of a service-level indicator (SLI), a performance\ngoal, and a period over which the objective is to be evaluated against\nthat goal. The SLO can use SLIs defined in a number of different manners.\nTypical SLOs might include \"99% of requests in each rolling week have\nlatency below 200 milliseconds\" or \"99.5% of requests in each calendar\nmonth return successfully.\"\n\n\nTo get more information about Slo, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/services.serviceLevelObjectives)\n* How-to Guides\n * [Service Monitoring](https://cloud.google.com/monitoring/service-monitoring)\n * [Monitoring API Documentation](https://cloud.google.com/monitoring/api/v3/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Monitoring Slo Appengine\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.monitoring.getAppEngineService({\n moduleId: \"default\",\n});\nconst appengSlo = new gcp.monitoring.Slo(\"appengSlo\", {\n service: _default.then(_default =\u003e _default.serviceId),\n sloId: \"ae-slo\",\n displayName: \"Test SLO for App Engine\",\n goal: 0.9,\n calendarPeriod: \"DAY\",\n basicSli: {\n latency: {\n threshold: \"1s\",\n },\n },\n userLabels: {\n my_key: \"my_value\",\n my_other_key: \"my_other_value\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.monitoring.get_app_engine_service(module_id=\"default\")\nappeng_slo = gcp.monitoring.Slo(\"appengSlo\",\n service=default.service_id,\n slo_id=\"ae-slo\",\n display_name=\"Test SLO for App Engine\",\n goal=0.9,\n calendar_period=\"DAY\",\n basic_sli=gcp.monitoring.SloBasicSliArgs(\n latency=gcp.monitoring.SloBasicSliLatencyArgs(\n threshold=\"1s\",\n ),\n ),\n user_labels={\n \"my_key\": \"my_value\",\n \"my_other_key\": \"my_other_value\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Monitoring.GetAppEngineService.Invoke(new()\n {\n ModuleId = \"default\",\n });\n\n var appengSlo = new Gcp.Monitoring.Slo(\"appengSlo\", new()\n {\n Service = @default.Apply(@default =\u003e @default.Apply(getAppEngineServiceResult =\u003e getAppEngineServiceResult.ServiceId)),\n SloId = \"ae-slo\",\n DisplayName = \"Test SLO for App Engine\",\n Goal = 0.9,\n CalendarPeriod = \"DAY\",\n BasicSli = new Gcp.Monitoring.Inputs.SloBasicSliArgs\n {\n Latency = new Gcp.Monitoring.Inputs.SloBasicSliLatencyArgs\n {\n Threshold = \"1s\",\n },\n },\n UserLabels = \n {\n { \"my_key\", \"my_value\" },\n { \"my_other_key\", \"my_other_value\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := monitoring.GetAppEngineService(ctx, \u0026monitoring.GetAppEngineServiceArgs{\n\t\t\tModuleId: \"default\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"appengSlo\", \u0026monitoring.SloArgs{\n\t\t\tService: *pulumi.String(_default.ServiceId),\n\t\t\tSloId: pulumi.String(\"ae-slo\"),\n\t\t\tDisplayName: pulumi.String(\"Test SLO for App Engine\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tCalendarPeriod: pulumi.String(\"DAY\"),\n\t\t\tBasicSli: \u0026monitoring.SloBasicSliArgs{\n\t\t\t\tLatency: \u0026monitoring.SloBasicSliLatencyArgs{\n\t\t\t\t\tThreshold: pulumi.String(\"1s\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_value\"),\n\t\t\t\t\"my_other_key\": pulumi.String(\"my_other_value\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.MonitoringFunctions;\nimport com.pulumi.gcp.monitoring.inputs.GetAppEngineServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloBasicSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloBasicSliLatencyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = MonitoringFunctions.getAppEngineService(GetAppEngineServiceArgs.builder()\n .moduleId(\"default\")\n .build());\n\n var appengSlo = new Slo(\"appengSlo\", SloArgs.builder() \n .service(default_.serviceId())\n .sloId(\"ae-slo\")\n .displayName(\"Test SLO for App Engine\")\n .goal(0.9)\n .calendarPeriod(\"DAY\")\n .basicSli(SloBasicSliArgs.builder()\n .latency(SloBasicSliLatencyArgs.builder()\n .threshold(\"1s\")\n .build())\n .build())\n .userLabels(Map.ofEntries(\n Map.entry(\"my_key\", \"my_value\"),\n Map.entry(\"my_other_key\", \"my_other_value\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n appengSlo:\n type: gcp:monitoring:Slo\n properties:\n service: ${default.serviceId}\n sloId: ae-slo\n displayName: Test SLO for App Engine\n goal: 0.9\n calendarPeriod: DAY\n basicSli:\n latency:\n threshold: 1s\n userLabels:\n my_key: my_value\n my_other_key: my_other_value\nvariables:\n default:\n fn::invoke:\n Function: gcp:monitoring:getAppEngineService\n Arguments:\n moduleId: default\n```\n{{% /example %}}\n{{% example %}}\n### Monitoring Slo Request Based\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customsrv = new gcp.monitoring.CustomService(\"customsrv\", {\n serviceId: \"custom-srv-request-slos\",\n displayName: \"My Custom Service\",\n});\nconst requestBasedSlo = new gcp.monitoring.Slo(\"requestBasedSlo\", {\n service: customsrv.serviceId,\n sloId: \"consumed-api-slo\",\n displayName: \"Test SLO with request based SLI (good total ratio)\",\n goal: 0.9,\n rollingPeriodDays: 30,\n requestBasedSli: {\n distributionCut: {\n distributionFilter: \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \",\n range: {\n max: 0.5,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustomsrv = gcp.monitoring.CustomService(\"customsrv\",\n service_id=\"custom-srv-request-slos\",\n display_name=\"My Custom Service\")\nrequest_based_slo = gcp.monitoring.Slo(\"requestBasedSlo\",\n service=customsrv.service_id,\n slo_id=\"consumed-api-slo\",\n display_name=\"Test SLO with request based SLI (good total ratio)\",\n goal=0.9,\n rolling_period_days=30,\n request_based_sli=gcp.monitoring.SloRequestBasedSliArgs(\n distribution_cut=gcp.monitoring.SloRequestBasedSliDistributionCutArgs(\n distribution_filter=\"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \",\n range=gcp.monitoring.SloRequestBasedSliDistributionCutRangeArgs(\n max=0.5,\n ),\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customsrv = new Gcp.Monitoring.CustomService(\"customsrv\", new()\n {\n ServiceId = \"custom-srv-request-slos\",\n DisplayName = \"My Custom Service\",\n });\n\n var requestBasedSlo = new Gcp.Monitoring.Slo(\"requestBasedSlo\", new()\n {\n Service = customsrv.ServiceId,\n SloId = \"consumed-api-slo\",\n DisplayName = \"Test SLO with request based SLI (good total ratio)\",\n Goal = 0.9,\n RollingPeriodDays = 30,\n RequestBasedSli = new Gcp.Monitoring.Inputs.SloRequestBasedSliArgs\n {\n DistributionCut = new Gcp.Monitoring.Inputs.SloRequestBasedSliDistributionCutArgs\n {\n DistributionFilter = \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \",\n Range = new Gcp.Monitoring.Inputs.SloRequestBasedSliDistributionCutRangeArgs\n {\n Max = 0.5,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomsrv, err := monitoring.NewCustomService(ctx, \"customsrv\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv-request-slos\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"requestBasedSlo\", \u0026monitoring.SloArgs{\n\t\t\tService: customsrv.ServiceId,\n\t\t\tSloId: pulumi.String(\"consumed-api-slo\"),\n\t\t\tDisplayName: pulumi.String(\"Test SLO with request based SLI (good total ratio)\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tRollingPeriodDays: pulumi.Int(30),\n\t\t\tRequestBasedSli: \u0026monitoring.SloRequestBasedSliArgs{\n\t\t\t\tDistributionCut: \u0026monitoring.SloRequestBasedSliDistributionCutArgs{\n\t\t\t\t\tDistributionFilter: pulumi.String(\"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \"),\n\t\t\t\t\tRange: \u0026monitoring.SloRequestBasedSliDistributionCutRangeArgs{\n\t\t\t\t\t\tMax: pulumi.Float64(0.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.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliDistributionCutArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliDistributionCutRangeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var customsrv = new CustomService(\"customsrv\", CustomServiceArgs.builder() \n .serviceId(\"custom-srv-request-slos\")\n .displayName(\"My Custom Service\")\n .build());\n\n var requestBasedSlo = new Slo(\"requestBasedSlo\", SloArgs.builder() \n .service(customsrv.serviceId())\n .sloId(\"consumed-api-slo\")\n .displayName(\"Test SLO with request based SLI (good total ratio)\")\n .goal(0.9)\n .rollingPeriodDays(30)\n .requestBasedSli(SloRequestBasedSliArgs.builder()\n .distributionCut(SloRequestBasedSliDistributionCutArgs.builder()\n .distributionFilter(\"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \")\n .range(SloRequestBasedSliDistributionCutRangeArgs.builder()\n .max(0.5)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customsrv:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv-request-slos\n displayName: My Custom Service\n requestBasedSlo:\n type: gcp:monitoring:Slo\n properties:\n service: ${customsrv.serviceId}\n sloId: consumed-api-slo\n displayName: Test SLO with request based SLI (good total ratio)\n goal: 0.9\n rollingPeriodDays: 30\n requestBasedSli:\n distributionCut:\n distributionFilter: 'metric.type=\"serviceruntime.googleapis.com/api/request_latencies\" resource.type=\"api\" '\n range:\n max: 0.5\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSlo can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:monitoring/slo:Slo default {{name}}\n```\n\n ", + "description": "A Service-Level Objective (SLO) describes the level of desired good\nservice. It consists of a service-level indicator (SLI), a performance\ngoal, and a period over which the objective is to be evaluated against\nthat goal. The SLO can use SLIs defined in a number of different manners.\nTypical SLOs might include \"99% of requests in each rolling week have\nlatency below 200 milliseconds\" or \"99.5% of requests in each calendar\nmonth return successfully.\"\n\n\nTo get more information about Slo, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/services.serviceLevelObjectives)\n* How-to Guides\n * [Service Monitoring](https://cloud.google.com/monitoring/service-monitoring)\n * [Monitoring API Documentation](https://cloud.google.com/monitoring/api/v3/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Monitoring Slo Appengine\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.monitoring.getAppEngineService({\n moduleId: \"default\",\n});\nconst appengSlo = new gcp.monitoring.Slo(\"appengSlo\", {\n service: _default.then(_default =\u003e _default.serviceId),\n sloId: \"ae-slo\",\n displayName: \"Terraform Test SLO for App Engine\",\n goal: 0.9,\n calendarPeriod: \"DAY\",\n basicSli: {\n latency: {\n threshold: \"1s\",\n },\n },\n userLabels: {\n my_key: \"my_value\",\n my_other_key: \"my_other_value\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.monitoring.get_app_engine_service(module_id=\"default\")\nappeng_slo = gcp.monitoring.Slo(\"appengSlo\",\n service=default.service_id,\n slo_id=\"ae-slo\",\n display_name=\"Terraform Test SLO for App Engine\",\n goal=0.9,\n calendar_period=\"DAY\",\n basic_sli=gcp.monitoring.SloBasicSliArgs(\n latency=gcp.monitoring.SloBasicSliLatencyArgs(\n threshold=\"1s\",\n ),\n ),\n user_labels={\n \"my_key\": \"my_value\",\n \"my_other_key\": \"my_other_value\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Monitoring.GetAppEngineService.Invoke(new()\n {\n ModuleId = \"default\",\n });\n\n var appengSlo = new Gcp.Monitoring.Slo(\"appengSlo\", new()\n {\n Service = @default.Apply(@default =\u003e @default.Apply(getAppEngineServiceResult =\u003e getAppEngineServiceResult.ServiceId)),\n SloId = \"ae-slo\",\n DisplayName = \"Terraform Test SLO for App Engine\",\n Goal = 0.9,\n CalendarPeriod = \"DAY\",\n BasicSli = new Gcp.Monitoring.Inputs.SloBasicSliArgs\n {\n Latency = new Gcp.Monitoring.Inputs.SloBasicSliLatencyArgs\n {\n Threshold = \"1s\",\n },\n },\n UserLabels = \n {\n { \"my_key\", \"my_value\" },\n { \"my_other_key\", \"my_other_value\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := monitoring.GetAppEngineService(ctx, \u0026monitoring.GetAppEngineServiceArgs{\n\t\t\tModuleId: \"default\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"appengSlo\", \u0026monitoring.SloArgs{\n\t\t\tService: *pulumi.String(_default.ServiceId),\n\t\t\tSloId: pulumi.String(\"ae-slo\"),\n\t\t\tDisplayName: pulumi.String(\"Terraform Test SLO for App Engine\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tCalendarPeriod: pulumi.String(\"DAY\"),\n\t\t\tBasicSli: \u0026monitoring.SloBasicSliArgs{\n\t\t\t\tLatency: \u0026monitoring.SloBasicSliLatencyArgs{\n\t\t\t\t\tThreshold: pulumi.String(\"1s\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tUserLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_value\"),\n\t\t\t\t\"my_other_key\": pulumi.String(\"my_other_value\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.MonitoringFunctions;\nimport com.pulumi.gcp.monitoring.inputs.GetAppEngineServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloBasicSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloBasicSliLatencyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = MonitoringFunctions.getAppEngineService(GetAppEngineServiceArgs.builder()\n .moduleId(\"default\")\n .build());\n\n var appengSlo = new Slo(\"appengSlo\", SloArgs.builder() \n .service(default_.serviceId())\n .sloId(\"ae-slo\")\n .displayName(\"Terraform Test SLO for App Engine\")\n .goal(0.9)\n .calendarPeriod(\"DAY\")\n .basicSli(SloBasicSliArgs.builder()\n .latency(SloBasicSliLatencyArgs.builder()\n .threshold(\"1s\")\n .build())\n .build())\n .userLabels(Map.ofEntries(\n Map.entry(\"my_key\", \"my_value\"),\n Map.entry(\"my_other_key\", \"my_other_value\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n appengSlo:\n type: gcp:monitoring:Slo\n properties:\n service: ${default.serviceId}\n sloId: ae-slo\n displayName: Terraform Test SLO for App Engine\n goal: 0.9\n calendarPeriod: DAY\n basicSli:\n latency:\n threshold: 1s\n userLabels:\n my_key: my_value\n my_other_key: my_other_value\nvariables:\n default:\n fn::invoke:\n Function: gcp:monitoring:getAppEngineService\n Arguments:\n moduleId: default\n```\n{{% /example %}}\n{{% example %}}\n### Monitoring Slo Request Based\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst customsrv = new gcp.monitoring.CustomService(\"customsrv\", {\n serviceId: \"custom-srv-request-slos\",\n displayName: \"My Custom Service\",\n});\nconst requestBasedSlo = new gcp.monitoring.Slo(\"requestBasedSlo\", {\n service: customsrv.serviceId,\n sloId: \"consumed-api-slo\",\n displayName: \"Terraform Test SLO with request based SLI (good total ratio)\",\n goal: 0.9,\n rollingPeriodDays: 30,\n requestBasedSli: {\n distributionCut: {\n distributionFilter: \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \",\n range: {\n max: 0.5,\n },\n },\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncustomsrv = gcp.monitoring.CustomService(\"customsrv\",\n service_id=\"custom-srv-request-slos\",\n display_name=\"My Custom Service\")\nrequest_based_slo = gcp.monitoring.Slo(\"requestBasedSlo\",\n service=customsrv.service_id,\n slo_id=\"consumed-api-slo\",\n display_name=\"Terraform Test SLO with request based SLI (good total ratio)\",\n goal=0.9,\n rolling_period_days=30,\n request_based_sli=gcp.monitoring.SloRequestBasedSliArgs(\n distribution_cut=gcp.monitoring.SloRequestBasedSliDistributionCutArgs(\n distribution_filter=\"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \",\n range=gcp.monitoring.SloRequestBasedSliDistributionCutRangeArgs(\n max=0.5,\n ),\n ),\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var customsrv = new Gcp.Monitoring.CustomService(\"customsrv\", new()\n {\n ServiceId = \"custom-srv-request-slos\",\n DisplayName = \"My Custom Service\",\n });\n\n var requestBasedSlo = new Gcp.Monitoring.Slo(\"requestBasedSlo\", new()\n {\n Service = customsrv.ServiceId,\n SloId = \"consumed-api-slo\",\n DisplayName = \"Terraform Test SLO with request based SLI (good total ratio)\",\n Goal = 0.9,\n RollingPeriodDays = 30,\n RequestBasedSli = new Gcp.Monitoring.Inputs.SloRequestBasedSliArgs\n {\n DistributionCut = new Gcp.Monitoring.Inputs.SloRequestBasedSliDistributionCutArgs\n {\n DistributionFilter = \"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \",\n Range = new Gcp.Monitoring.Inputs.SloRequestBasedSliDistributionCutRangeArgs\n {\n Max = 0.5,\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcustomsrv, err := monitoring.NewCustomService(ctx, \"customsrv\", \u0026monitoring.CustomServiceArgs{\n\t\t\tServiceId: pulumi.String(\"custom-srv-request-slos\"),\n\t\t\tDisplayName: pulumi.String(\"My Custom Service\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewSlo(ctx, \"requestBasedSlo\", \u0026monitoring.SloArgs{\n\t\t\tService: customsrv.ServiceId,\n\t\t\tSloId: pulumi.String(\"consumed-api-slo\"),\n\t\t\tDisplayName: pulumi.String(\"Terraform Test SLO with request based SLI (good total ratio)\"),\n\t\t\tGoal: pulumi.Float64(0.9),\n\t\t\tRollingPeriodDays: pulumi.Int(30),\n\t\t\tRequestBasedSli: \u0026monitoring.SloRequestBasedSliArgs{\n\t\t\t\tDistributionCut: \u0026monitoring.SloRequestBasedSliDistributionCutArgs{\n\t\t\t\t\tDistributionFilter: pulumi.String(\"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \"),\n\t\t\t\t\tRange: \u0026monitoring.SloRequestBasedSliDistributionCutRangeArgs{\n\t\t\t\t\t\tMax: pulumi.Float64(0.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.monitoring.CustomService;\nimport com.pulumi.gcp.monitoring.CustomServiceArgs;\nimport com.pulumi.gcp.monitoring.Slo;\nimport com.pulumi.gcp.monitoring.SloArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliDistributionCutArgs;\nimport com.pulumi.gcp.monitoring.inputs.SloRequestBasedSliDistributionCutRangeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var customsrv = new CustomService(\"customsrv\", CustomServiceArgs.builder() \n .serviceId(\"custom-srv-request-slos\")\n .displayName(\"My Custom Service\")\n .build());\n\n var requestBasedSlo = new Slo(\"requestBasedSlo\", SloArgs.builder() \n .service(customsrv.serviceId())\n .sloId(\"consumed-api-slo\")\n .displayName(\"Terraform Test SLO with request based SLI (good total ratio)\")\n .goal(0.9)\n .rollingPeriodDays(30)\n .requestBasedSli(SloRequestBasedSliArgs.builder()\n .distributionCut(SloRequestBasedSliDistributionCutArgs.builder()\n .distributionFilter(\"metric.type=\\\"serviceruntime.googleapis.com/api/request_latencies\\\" resource.type=\\\"api\\\" \")\n .range(SloRequestBasedSliDistributionCutRangeArgs.builder()\n .max(0.5)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n customsrv:\n type: gcp:monitoring:CustomService\n properties:\n serviceId: custom-srv-request-slos\n displayName: My Custom Service\n requestBasedSlo:\n type: gcp:monitoring:Slo\n properties:\n service: ${customsrv.serviceId}\n sloId: consumed-api-slo\n displayName: Terraform Test SLO with request based SLI (good total ratio)\n goal: 0.9\n rollingPeriodDays: 30\n requestBasedSli:\n distributionCut:\n distributionFilter: 'metric.type=\"serviceruntime.googleapis.com/api/request_latencies\" resource.type=\"api\" '\n range:\n max: 0.5\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSlo can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:monitoring/slo:Slo default {{name}}\n```\n\n ", "properties": { "basicSli": { "$ref": "#/types/gcp:monitoring/SloBasicSli:SloBasicSli", @@ -176321,7 +177860,7 @@ } }, "gcp:monitoring/uptimeCheckConfig:UptimeCheckConfig": { - "description": "This message configures which resources and services to monitor for availability.\n\n\nTo get more information about UptimeCheckConfig, see:\n\n* [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.uptimeCheckConfigs)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/monitoring/uptime-checks/)\n\n\u003e **Warning:** All arguments including `http_check.auth_info.password` will be stored in the raw\nstate as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Uptime Check Config Http\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst http = new gcp.monitoring.UptimeCheckConfig(\"http\", {\n checkerType: \"STATIC_IP_CHECKERS\",\n contentMatchers: [{\n content: \"\\\"example\\\"\",\n jsonPathMatcher: {\n jsonMatcher: \"EXACT_MATCH\",\n jsonPath: `$.path`,\n },\n matcher: \"MATCHES_JSON_PATH\",\n }],\n displayName: \"http-uptime-check\",\n httpCheck: {\n body: \"Zm9vJTI1M0RiYXI=\",\n contentType: \"URL_ENCODED\",\n path: \"some-path\",\n port: 8010,\n requestMethod: \"POST\",\n },\n monitoredResource: {\n labels: {\n host: \"192.168.1.1\",\n projectId: \"my-project-name\",\n },\n type: \"uptime_url\",\n },\n timeout: \"60s\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhttp = gcp.monitoring.UptimeCheckConfig(\"http\",\n checker_type=\"STATIC_IP_CHECKERS\",\n content_matchers=[gcp.monitoring.UptimeCheckConfigContentMatcherArgs(\n content=\"\\\"example\\\"\",\n json_path_matcher=gcp.monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs(\n json_matcher=\"EXACT_MATCH\",\n json_path=\"$.path\",\n ),\n matcher=\"MATCHES_JSON_PATH\",\n )],\n display_name=\"http-uptime-check\",\n http_check=gcp.monitoring.UptimeCheckConfigHttpCheckArgs(\n body=\"Zm9vJTI1M0RiYXI=\",\n content_type=\"URL_ENCODED\",\n path=\"some-path\",\n port=8010,\n request_method=\"POST\",\n ),\n monitored_resource=gcp.monitoring.UptimeCheckConfigMonitoredResourceArgs(\n labels={\n \"host\": \"192.168.1.1\",\n \"projectId\": \"my-project-name\",\n },\n type=\"uptime_url\",\n ),\n timeout=\"60s\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var http = new Gcp.Monitoring.UptimeCheckConfig(\"http\", new()\n {\n CheckerType = \"STATIC_IP_CHECKERS\",\n ContentMatchers = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherArgs\n {\n Content = \"\\\"example\\\"\",\n JsonPathMatcher = new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs\n {\n JsonMatcher = \"EXACT_MATCH\",\n JsonPath = \"$.path\",\n },\n Matcher = \"MATCHES_JSON_PATH\",\n },\n },\n DisplayName = \"http-uptime-check\",\n HttpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckArgs\n {\n Body = \"Zm9vJTI1M0RiYXI=\",\n ContentType = \"URL_ENCODED\",\n Path = \"some-path\",\n Port = 8010,\n RequestMethod = \"POST\",\n },\n MonitoredResource = new Gcp.Monitoring.Inputs.UptimeCheckConfigMonitoredResourceArgs\n {\n Labels = \n {\n { \"host\", \"192.168.1.1\" },\n { \"projectId\", \"my-project-name\" },\n },\n Type = \"uptime_url\",\n },\n Timeout = \"60s\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewUptimeCheckConfig(ctx, \"http\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tCheckerType: pulumi.String(\"STATIC_IP_CHECKERS\"),\n\t\t\tContentMatchers: monitoring.UptimeCheckConfigContentMatcherArray{\n\t\t\t\t\u0026monitoring.UptimeCheckConfigContentMatcherArgs{\n\t\t\t\t\tContent: pulumi.String(\"\\\"example\\\"\"),\n\t\t\t\t\tJsonPathMatcher: \u0026monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs{\n\t\t\t\t\t\tJsonMatcher: pulumi.String(\"EXACT_MATCH\"),\n\t\t\t\t\t\tJsonPath: pulumi.String(fmt.Sprintf(\"$.path\")),\n\t\t\t\t\t},\n\t\t\t\t\tMatcher: pulumi.String(\"MATCHES_JSON_PATH\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDisplayName: pulumi.String(\"http-uptime-check\"),\n\t\t\tHttpCheck: \u0026monitoring.UptimeCheckConfigHttpCheckArgs{\n\t\t\t\tBody: pulumi.String(\"Zm9vJTI1M0RiYXI=\"),\n\t\t\t\tContentType: pulumi.String(\"URL_ENCODED\"),\n\t\t\t\tPath: pulumi.String(\"some-path\"),\n\t\t\t\tPort: pulumi.Int(8010),\n\t\t\t\tRequestMethod: pulumi.String(\"POST\"),\n\t\t\t},\n\t\t\tMonitoredResource: \u0026monitoring.UptimeCheckConfigMonitoredResourceArgs{\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"host\": pulumi.String(\"192.168.1.1\"),\n\t\t\t\t\t\"projectId\": pulumi.String(\"my-project-name\"),\n\t\t\t\t},\n\t\t\t\tType: pulumi.String(\"uptime_url\"),\n\t\t\t},\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigMonitoredResourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var http = new UptimeCheckConfig(\"http\", UptimeCheckConfigArgs.builder() \n .checkerType(\"STATIC_IP_CHECKERS\")\n .contentMatchers(UptimeCheckConfigContentMatcherArgs.builder()\n .content(\"\\\"example\\\"\")\n .jsonPathMatcher(UptimeCheckConfigContentMatcherJsonPathMatcherArgs.builder()\n .jsonMatcher(\"EXACT_MATCH\")\n .jsonPath(\"$.path\")\n .build())\n .matcher(\"MATCHES_JSON_PATH\")\n .build())\n .displayName(\"http-uptime-check\")\n .httpCheck(UptimeCheckConfigHttpCheckArgs.builder()\n .body(\"Zm9vJTI1M0RiYXI=\")\n .contentType(\"URL_ENCODED\")\n .path(\"some-path\")\n .port(\"8010\")\n .requestMethod(\"POST\")\n .build())\n .monitoredResource(UptimeCheckConfigMonitoredResourceArgs.builder()\n .labels(Map.ofEntries(\n Map.entry(\"host\", \"192.168.1.1\"),\n Map.entry(\"projectId\", \"my-project-name\")\n ))\n .type(\"uptime_url\")\n .build())\n .timeout(\"60s\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n http:\n type: gcp:monitoring:UptimeCheckConfig\n properties:\n checkerType: STATIC_IP_CHECKERS\n contentMatchers:\n - content: '\"example\"'\n jsonPathMatcher:\n jsonMatcher: EXACT_MATCH\n jsonPath: $.path\n matcher: MATCHES_JSON_PATH\n displayName: http-uptime-check\n httpCheck:\n body: Zm9vJTI1M0RiYXI=\n contentType: URL_ENCODED\n path: some-path\n port: '8010'\n requestMethod: POST\n monitoredResource:\n labels:\n host: 192.168.1.1\n projectId: my-project-name\n type: uptime_url\n timeout: 60s\n```\n{{% /example %}}\n{{% example %}}\n### Uptime Check Config Status Code\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst statusCode = new gcp.monitoring.UptimeCheckConfig(\"statusCode\", {\n checkerType: \"STATIC_IP_CHECKERS\",\n contentMatchers: [{\n content: \"\\\"example\\\"\",\n jsonPathMatcher: {\n jsonMatcher: \"EXACT_MATCH\",\n jsonPath: `$.path`,\n },\n matcher: \"MATCHES_JSON_PATH\",\n }],\n displayName: \"http-uptime-check\",\n httpCheck: {\n acceptedResponseStatusCodes: [\n {\n statusClass: \"STATUS_CLASS_2XX\",\n },\n {\n statusValue: 301,\n },\n {\n statusValue: 302,\n },\n ],\n body: \"Zm9vJTI1M0RiYXI=\",\n contentType: \"URL_ENCODED\",\n path: \"some-path\",\n port: 8010,\n requestMethod: \"POST\",\n },\n monitoredResource: {\n labels: {\n host: \"192.168.1.1\",\n projectId: \"my-project-name\",\n },\n type: \"uptime_url\",\n },\n timeout: \"60s\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nstatus_code = gcp.monitoring.UptimeCheckConfig(\"statusCode\",\n checker_type=\"STATIC_IP_CHECKERS\",\n content_matchers=[gcp.monitoring.UptimeCheckConfigContentMatcherArgs(\n content=\"\\\"example\\\"\",\n json_path_matcher=gcp.monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs(\n json_matcher=\"EXACT_MATCH\",\n json_path=\"$.path\",\n ),\n matcher=\"MATCHES_JSON_PATH\",\n )],\n display_name=\"http-uptime-check\",\n http_check=gcp.monitoring.UptimeCheckConfigHttpCheckArgs(\n accepted_response_status_codes=[\n gcp.monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs(\n status_class=\"STATUS_CLASS_2XX\",\n ),\n gcp.monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs(\n status_value=301,\n ),\n gcp.monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs(\n status_value=302,\n ),\n ],\n body=\"Zm9vJTI1M0RiYXI=\",\n content_type=\"URL_ENCODED\",\n path=\"some-path\",\n port=8010,\n request_method=\"POST\",\n ),\n monitored_resource=gcp.monitoring.UptimeCheckConfigMonitoredResourceArgs(\n labels={\n \"host\": \"192.168.1.1\",\n \"projectId\": \"my-project-name\",\n },\n type=\"uptime_url\",\n ),\n timeout=\"60s\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var statusCode = new Gcp.Monitoring.UptimeCheckConfig(\"statusCode\", new()\n {\n CheckerType = \"STATIC_IP_CHECKERS\",\n ContentMatchers = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherArgs\n {\n Content = \"\\\"example\\\"\",\n JsonPathMatcher = new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs\n {\n JsonMatcher = \"EXACT_MATCH\",\n JsonPath = \"$.path\",\n },\n Matcher = \"MATCHES_JSON_PATH\",\n },\n },\n DisplayName = \"http-uptime-check\",\n HttpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckArgs\n {\n AcceptedResponseStatusCodes = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs\n {\n StatusClass = \"STATUS_CLASS_2XX\",\n },\n new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs\n {\n StatusValue = 301,\n },\n new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs\n {\n StatusValue = 302,\n },\n },\n Body = \"Zm9vJTI1M0RiYXI=\",\n ContentType = \"URL_ENCODED\",\n Path = \"some-path\",\n Port = 8010,\n RequestMethod = \"POST\",\n },\n MonitoredResource = new Gcp.Monitoring.Inputs.UptimeCheckConfigMonitoredResourceArgs\n {\n Labels = \n {\n { \"host\", \"192.168.1.1\" },\n { \"projectId\", \"my-project-name\" },\n },\n Type = \"uptime_url\",\n },\n Timeout = \"60s\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewUptimeCheckConfig(ctx, \"statusCode\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tCheckerType: pulumi.String(\"STATIC_IP_CHECKERS\"),\n\t\t\tContentMatchers: monitoring.UptimeCheckConfigContentMatcherArray{\n\t\t\t\t\u0026monitoring.UptimeCheckConfigContentMatcherArgs{\n\t\t\t\t\tContent: pulumi.String(\"\\\"example\\\"\"),\n\t\t\t\t\tJsonPathMatcher: \u0026monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs{\n\t\t\t\t\t\tJsonMatcher: pulumi.String(\"EXACT_MATCH\"),\n\t\t\t\t\t\tJsonPath: pulumi.String(fmt.Sprintf(\"$.path\")),\n\t\t\t\t\t},\n\t\t\t\t\tMatcher: pulumi.String(\"MATCHES_JSON_PATH\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDisplayName: pulumi.String(\"http-uptime-check\"),\n\t\t\tHttpCheck: \u0026monitoring.UptimeCheckConfigHttpCheckArgs{\n\t\t\t\tAcceptedResponseStatusCodes: monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArray{\n\t\t\t\t\t\u0026monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs{\n\t\t\t\t\t\tStatusClass: pulumi.String(\"STATUS_CLASS_2XX\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs{\n\t\t\t\t\t\tStatusValue: pulumi.Int(301),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs{\n\t\t\t\t\t\tStatusValue: pulumi.Int(302),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tBody: pulumi.String(\"Zm9vJTI1M0RiYXI=\"),\n\t\t\t\tContentType: pulumi.String(\"URL_ENCODED\"),\n\t\t\t\tPath: pulumi.String(\"some-path\"),\n\t\t\t\tPort: pulumi.Int(8010),\n\t\t\t\tRequestMethod: pulumi.String(\"POST\"),\n\t\t\t},\n\t\t\tMonitoredResource: \u0026monitoring.UptimeCheckConfigMonitoredResourceArgs{\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"host\": pulumi.String(\"192.168.1.1\"),\n\t\t\t\t\t\"projectId\": pulumi.String(\"my-project-name\"),\n\t\t\t\t},\n\t\t\t\tType: pulumi.String(\"uptime_url\"),\n\t\t\t},\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigMonitoredResourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var statusCode = new UptimeCheckConfig(\"statusCode\", UptimeCheckConfigArgs.builder() \n .checkerType(\"STATIC_IP_CHECKERS\")\n .contentMatchers(UptimeCheckConfigContentMatcherArgs.builder()\n .content(\"\\\"example\\\"\")\n .jsonPathMatcher(UptimeCheckConfigContentMatcherJsonPathMatcherArgs.builder()\n .jsonMatcher(\"EXACT_MATCH\")\n .jsonPath(\"$.path\")\n .build())\n .matcher(\"MATCHES_JSON_PATH\")\n .build())\n .displayName(\"http-uptime-check\")\n .httpCheck(UptimeCheckConfigHttpCheckArgs.builder()\n .acceptedResponseStatusCodes( \n UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs.builder()\n .statusClass(\"STATUS_CLASS_2XX\")\n .build(),\n UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs.builder()\n .statusValue(301)\n .build(),\n UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs.builder()\n .statusValue(302)\n .build())\n .body(\"Zm9vJTI1M0RiYXI=\")\n .contentType(\"URL_ENCODED\")\n .path(\"some-path\")\n .port(\"8010\")\n .requestMethod(\"POST\")\n .build())\n .monitoredResource(UptimeCheckConfigMonitoredResourceArgs.builder()\n .labels(Map.ofEntries(\n Map.entry(\"host\", \"192.168.1.1\"),\n Map.entry(\"projectId\", \"my-project-name\")\n ))\n .type(\"uptime_url\")\n .build())\n .timeout(\"60s\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n statusCode:\n type: gcp:monitoring:UptimeCheckConfig\n properties:\n checkerType: STATIC_IP_CHECKERS\n contentMatchers:\n - content: '\"example\"'\n jsonPathMatcher:\n jsonMatcher: EXACT_MATCH\n jsonPath: $.path\n matcher: MATCHES_JSON_PATH\n displayName: http-uptime-check\n httpCheck:\n acceptedResponseStatusCodes:\n - statusClass: STATUS_CLASS_2XX\n - statusValue: 301\n - statusValue: 302\n body: Zm9vJTI1M0RiYXI=\n contentType: URL_ENCODED\n path: some-path\n port: '8010'\n requestMethod: POST\n monitoredResource:\n labels:\n host: 192.168.1.1\n projectId: my-project-name\n type: uptime_url\n timeout: 60s\n```\n{{% /example %}}\n{{% example %}}\n### Uptime Check Config Https\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst https = new gcp.monitoring.UptimeCheckConfig(\"https\", {\n contentMatchers: [{\n content: \"example\",\n jsonPathMatcher: {\n jsonMatcher: \"REGEX_MATCH\",\n jsonPath: `$.path`,\n },\n matcher: \"MATCHES_JSON_PATH\",\n }],\n displayName: \"https-uptime-check\",\n httpCheck: {\n path: \"/some-path\",\n port: 443,\n useSsl: true,\n validateSsl: true,\n },\n monitoredResource: {\n labels: {\n host: \"192.168.1.1\",\n projectId: \"my-project-name\",\n },\n type: \"uptime_url\",\n },\n timeout: \"60s\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhttps = gcp.monitoring.UptimeCheckConfig(\"https\",\n content_matchers=[gcp.monitoring.UptimeCheckConfigContentMatcherArgs(\n content=\"example\",\n json_path_matcher=gcp.monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs(\n json_matcher=\"REGEX_MATCH\",\n json_path=\"$.path\",\n ),\n matcher=\"MATCHES_JSON_PATH\",\n )],\n display_name=\"https-uptime-check\",\n http_check=gcp.monitoring.UptimeCheckConfigHttpCheckArgs(\n path=\"/some-path\",\n port=443,\n use_ssl=True,\n validate_ssl=True,\n ),\n monitored_resource=gcp.monitoring.UptimeCheckConfigMonitoredResourceArgs(\n labels={\n \"host\": \"192.168.1.1\",\n \"projectId\": \"my-project-name\",\n },\n type=\"uptime_url\",\n ),\n timeout=\"60s\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var https = new Gcp.Monitoring.UptimeCheckConfig(\"https\", new()\n {\n ContentMatchers = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherArgs\n {\n Content = \"example\",\n JsonPathMatcher = new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs\n {\n JsonMatcher = \"REGEX_MATCH\",\n JsonPath = \"$.path\",\n },\n Matcher = \"MATCHES_JSON_PATH\",\n },\n },\n DisplayName = \"https-uptime-check\",\n HttpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckArgs\n {\n Path = \"/some-path\",\n Port = 443,\n UseSsl = true,\n ValidateSsl = true,\n },\n MonitoredResource = new Gcp.Monitoring.Inputs.UptimeCheckConfigMonitoredResourceArgs\n {\n Labels = \n {\n { \"host\", \"192.168.1.1\" },\n { \"projectId\", \"my-project-name\" },\n },\n Type = \"uptime_url\",\n },\n Timeout = \"60s\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewUptimeCheckConfig(ctx, \"https\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tContentMatchers: monitoring.UptimeCheckConfigContentMatcherArray{\n\t\t\t\t\u0026monitoring.UptimeCheckConfigContentMatcherArgs{\n\t\t\t\t\tContent: pulumi.String(\"example\"),\n\t\t\t\t\tJsonPathMatcher: \u0026monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs{\n\t\t\t\t\t\tJsonMatcher: pulumi.String(\"REGEX_MATCH\"),\n\t\t\t\t\t\tJsonPath: pulumi.String(fmt.Sprintf(\"$.path\")),\n\t\t\t\t\t},\n\t\t\t\t\tMatcher: pulumi.String(\"MATCHES_JSON_PATH\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDisplayName: pulumi.String(\"https-uptime-check\"),\n\t\t\tHttpCheck: \u0026monitoring.UptimeCheckConfigHttpCheckArgs{\n\t\t\t\tPath: pulumi.String(\"/some-path\"),\n\t\t\t\tPort: pulumi.Int(443),\n\t\t\t\tUseSsl: pulumi.Bool(true),\n\t\t\t\tValidateSsl: pulumi.Bool(true),\n\t\t\t},\n\t\t\tMonitoredResource: \u0026monitoring.UptimeCheckConfigMonitoredResourceArgs{\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"host\": pulumi.String(\"192.168.1.1\"),\n\t\t\t\t\t\"projectId\": pulumi.String(\"my-project-name\"),\n\t\t\t\t},\n\t\t\t\tType: pulumi.String(\"uptime_url\"),\n\t\t\t},\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigMonitoredResourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var https = new UptimeCheckConfig(\"https\", UptimeCheckConfigArgs.builder() \n .contentMatchers(UptimeCheckConfigContentMatcherArgs.builder()\n .content(\"example\")\n .jsonPathMatcher(UptimeCheckConfigContentMatcherJsonPathMatcherArgs.builder()\n .jsonMatcher(\"REGEX_MATCH\")\n .jsonPath(\"$.path\")\n .build())\n .matcher(\"MATCHES_JSON_PATH\")\n .build())\n .displayName(\"https-uptime-check\")\n .httpCheck(UptimeCheckConfigHttpCheckArgs.builder()\n .path(\"/some-path\")\n .port(\"443\")\n .useSsl(true)\n .validateSsl(true)\n .build())\n .monitoredResource(UptimeCheckConfigMonitoredResourceArgs.builder()\n .labels(Map.ofEntries(\n Map.entry(\"host\", \"192.168.1.1\"),\n Map.entry(\"projectId\", \"my-project-name\")\n ))\n .type(\"uptime_url\")\n .build())\n .timeout(\"60s\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n https:\n type: gcp:monitoring:UptimeCheckConfig\n properties:\n contentMatchers:\n - content: example\n jsonPathMatcher:\n jsonMatcher: REGEX_MATCH\n jsonPath: $.path\n matcher: MATCHES_JSON_PATH\n displayName: https-uptime-check\n httpCheck:\n path: /some-path\n port: '443'\n useSsl: true\n validateSsl: true\n monitoredResource:\n labels:\n host: 192.168.1.1\n projectId: my-project-name\n type: uptime_url\n timeout: 60s\n```\n{{% /example %}}\n{{% example %}}\n### Uptime Check Tcp\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst check = new gcp.monitoring.Group(\"check\", {\n displayName: \"uptime-check-group\",\n filter: \"resource.metadata.name=has_substring(\\\"foo\\\")\",\n});\nconst tcpGroup = new gcp.monitoring.UptimeCheckConfig(\"tcpGroup\", {\n displayName: \"tcp-uptime-check\",\n timeout: \"60s\",\n tcpCheck: {\n port: 888,\n },\n resourceGroup: {\n resourceType: \"INSTANCE\",\n groupId: check.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncheck = gcp.monitoring.Group(\"check\",\n display_name=\"uptime-check-group\",\n filter=\"resource.metadata.name=has_substring(\\\"foo\\\")\")\ntcp_group = gcp.monitoring.UptimeCheckConfig(\"tcpGroup\",\n display_name=\"tcp-uptime-check\",\n timeout=\"60s\",\n tcp_check=gcp.monitoring.UptimeCheckConfigTcpCheckArgs(\n port=888,\n ),\n resource_group=gcp.monitoring.UptimeCheckConfigResourceGroupArgs(\n resource_type=\"INSTANCE\",\n group_id=check.name,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var check = new Gcp.Monitoring.Group(\"check\", new()\n {\n DisplayName = \"uptime-check-group\",\n Filter = \"resource.metadata.name=has_substring(\\\"foo\\\")\",\n });\n\n var tcpGroup = new Gcp.Monitoring.UptimeCheckConfig(\"tcpGroup\", new()\n {\n DisplayName = \"tcp-uptime-check\",\n Timeout = \"60s\",\n TcpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigTcpCheckArgs\n {\n Port = 888,\n },\n ResourceGroup = new Gcp.Monitoring.Inputs.UptimeCheckConfigResourceGroupArgs\n {\n ResourceType = \"INSTANCE\",\n GroupId = check.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcheck, err := monitoring.NewGroup(ctx, \"check\", \u0026monitoring.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"uptime-check-group\"),\n\t\t\tFilter: pulumi.String(\"resource.metadata.name=has_substring(\\\"foo\\\")\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewUptimeCheckConfig(ctx, \"tcpGroup\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"tcp-uptime-check\"),\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t\tTcpCheck: \u0026monitoring.UptimeCheckConfigTcpCheckArgs{\n\t\t\t\tPort: pulumi.Int(888),\n\t\t\t},\n\t\t\tResourceGroup: \u0026monitoring.UptimeCheckConfigResourceGroupArgs{\n\t\t\t\tResourceType: pulumi.String(\"INSTANCE\"),\n\t\t\t\tGroupId: check.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.Group;\nimport com.pulumi.gcp.monitoring.GroupArgs;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigTcpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigResourceGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var check = new Group(\"check\", GroupArgs.builder() \n .displayName(\"uptime-check-group\")\n .filter(\"resource.metadata.name=has_substring(\\\"foo\\\")\")\n .build());\n\n var tcpGroup = new UptimeCheckConfig(\"tcpGroup\", UptimeCheckConfigArgs.builder() \n .displayName(\"tcp-uptime-check\")\n .timeout(\"60s\")\n .tcpCheck(UptimeCheckConfigTcpCheckArgs.builder()\n .port(888)\n .build())\n .resourceGroup(UptimeCheckConfigResourceGroupArgs.builder()\n .resourceType(\"INSTANCE\")\n .groupId(check.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tcpGroup:\n type: gcp:monitoring:UptimeCheckConfig\n properties:\n displayName: tcp-uptime-check\n timeout: 60s\n tcpCheck:\n port: 888\n resourceGroup:\n resourceType: INSTANCE\n groupId: ${check.name}\n check:\n type: gcp:monitoring:Group\n properties:\n displayName: uptime-check-group\n filter: resource.metadata.name=has_substring(\"foo\")\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nUptimeCheckConfig can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:monitoring/uptimeCheckConfig:UptimeCheckConfig default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Uptime Check Config Http\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst http = new gcp.monitoring.UptimeCheckConfig(\"http\", {\n checkerType: \"STATIC_IP_CHECKERS\",\n contentMatchers: [{\n content: \"\\\"example\\\"\",\n jsonPathMatcher: {\n jsonMatcher: \"EXACT_MATCH\",\n jsonPath: `$.path`,\n },\n matcher: \"MATCHES_JSON_PATH\",\n }],\n displayName: \"http-uptime-check\",\n httpCheck: {\n body: \"Zm9vJTI1M0RiYXI=\",\n contentType: \"URL_ENCODED\",\n path: \"some-path\",\n port: 8010,\n requestMethod: \"POST\",\n },\n monitoredResource: {\n labels: {\n host: \"192.168.1.1\",\n projectId: \"my-project-name\",\n },\n type: \"uptime_url\",\n },\n timeout: \"60s\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhttp = gcp.monitoring.UptimeCheckConfig(\"http\",\n checker_type=\"STATIC_IP_CHECKERS\",\n content_matchers=[gcp.monitoring.UptimeCheckConfigContentMatcherArgs(\n content=\"\\\"example\\\"\",\n json_path_matcher=gcp.monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs(\n json_matcher=\"EXACT_MATCH\",\n json_path=\"$.path\",\n ),\n matcher=\"MATCHES_JSON_PATH\",\n )],\n display_name=\"http-uptime-check\",\n http_check=gcp.monitoring.UptimeCheckConfigHttpCheckArgs(\n body=\"Zm9vJTI1M0RiYXI=\",\n content_type=\"URL_ENCODED\",\n path=\"some-path\",\n port=8010,\n request_method=\"POST\",\n ),\n monitored_resource=gcp.monitoring.UptimeCheckConfigMonitoredResourceArgs(\n labels={\n \"host\": \"192.168.1.1\",\n \"projectId\": \"my-project-name\",\n },\n type=\"uptime_url\",\n ),\n timeout=\"60s\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var http = new Gcp.Monitoring.UptimeCheckConfig(\"http\", new()\n {\n CheckerType = \"STATIC_IP_CHECKERS\",\n ContentMatchers = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherArgs\n {\n Content = \"\\\"example\\\"\",\n JsonPathMatcher = new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs\n {\n JsonMatcher = \"EXACT_MATCH\",\n JsonPath = \"$.path\",\n },\n Matcher = \"MATCHES_JSON_PATH\",\n },\n },\n DisplayName = \"http-uptime-check\",\n HttpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckArgs\n {\n Body = \"Zm9vJTI1M0RiYXI=\",\n ContentType = \"URL_ENCODED\",\n Path = \"some-path\",\n Port = 8010,\n RequestMethod = \"POST\",\n },\n MonitoredResource = new Gcp.Monitoring.Inputs.UptimeCheckConfigMonitoredResourceArgs\n {\n Labels = \n {\n { \"host\", \"192.168.1.1\" },\n { \"projectId\", \"my-project-name\" },\n },\n Type = \"uptime_url\",\n },\n Timeout = \"60s\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewUptimeCheckConfig(ctx, \"http\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tCheckerType: pulumi.String(\"STATIC_IP_CHECKERS\"),\n\t\t\tContentMatchers: monitoring.UptimeCheckConfigContentMatcherArray{\n\t\t\t\t\u0026monitoring.UptimeCheckConfigContentMatcherArgs{\n\t\t\t\t\tContent: pulumi.String(\"\\\"example\\\"\"),\n\t\t\t\t\tJsonPathMatcher: \u0026monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs{\n\t\t\t\t\t\tJsonMatcher: pulumi.String(\"EXACT_MATCH\"),\n\t\t\t\t\t\tJsonPath: pulumi.String(fmt.Sprintf(\"$.path\")),\n\t\t\t\t\t},\n\t\t\t\t\tMatcher: pulumi.String(\"MATCHES_JSON_PATH\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDisplayName: pulumi.String(\"http-uptime-check\"),\n\t\t\tHttpCheck: \u0026monitoring.UptimeCheckConfigHttpCheckArgs{\n\t\t\t\tBody: pulumi.String(\"Zm9vJTI1M0RiYXI=\"),\n\t\t\t\tContentType: pulumi.String(\"URL_ENCODED\"),\n\t\t\t\tPath: pulumi.String(\"some-path\"),\n\t\t\t\tPort: pulumi.Int(8010),\n\t\t\t\tRequestMethod: pulumi.String(\"POST\"),\n\t\t\t},\n\t\t\tMonitoredResource: \u0026monitoring.UptimeCheckConfigMonitoredResourceArgs{\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"host\": pulumi.String(\"192.168.1.1\"),\n\t\t\t\t\t\"projectId\": pulumi.String(\"my-project-name\"),\n\t\t\t\t},\n\t\t\t\tType: pulumi.String(\"uptime_url\"),\n\t\t\t},\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigMonitoredResourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var http = new UptimeCheckConfig(\"http\", UptimeCheckConfigArgs.builder() \n .checkerType(\"STATIC_IP_CHECKERS\")\n .contentMatchers(UptimeCheckConfigContentMatcherArgs.builder()\n .content(\"\\\"example\\\"\")\n .jsonPathMatcher(UptimeCheckConfigContentMatcherJsonPathMatcherArgs.builder()\n .jsonMatcher(\"EXACT_MATCH\")\n .jsonPath(\"$.path\")\n .build())\n .matcher(\"MATCHES_JSON_PATH\")\n .build())\n .displayName(\"http-uptime-check\")\n .httpCheck(UptimeCheckConfigHttpCheckArgs.builder()\n .body(\"Zm9vJTI1M0RiYXI=\")\n .contentType(\"URL_ENCODED\")\n .path(\"some-path\")\n .port(\"8010\")\n .requestMethod(\"POST\")\n .build())\n .monitoredResource(UptimeCheckConfigMonitoredResourceArgs.builder()\n .labels(Map.ofEntries(\n Map.entry(\"host\", \"192.168.1.1\"),\n Map.entry(\"projectId\", \"my-project-name\")\n ))\n .type(\"uptime_url\")\n .build())\n .timeout(\"60s\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n http:\n type: gcp:monitoring:UptimeCheckConfig\n properties:\n checkerType: STATIC_IP_CHECKERS\n contentMatchers:\n - content: '\"example\"'\n jsonPathMatcher:\n jsonMatcher: EXACT_MATCH\n jsonPath: $.path\n matcher: MATCHES_JSON_PATH\n displayName: http-uptime-check\n httpCheck:\n body: Zm9vJTI1M0RiYXI=\n contentType: URL_ENCODED\n path: some-path\n port: '8010'\n requestMethod: POST\n monitoredResource:\n labels:\n host: 192.168.1.1\n projectId: my-project-name\n type: uptime_url\n timeout: 60s\n```\n{{% /example %}}\n{{% example %}}\n### Uptime Check Config Status Code\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst statusCode = new gcp.monitoring.UptimeCheckConfig(\"statusCode\", {\n checkerType: \"STATIC_IP_CHECKERS\",\n contentMatchers: [{\n content: \"\\\"example\\\"\",\n jsonPathMatcher: {\n jsonMatcher: \"EXACT_MATCH\",\n jsonPath: `$.path`,\n },\n matcher: \"MATCHES_JSON_PATH\",\n }],\n displayName: \"http-uptime-check\",\n httpCheck: {\n acceptedResponseStatusCodes: [\n {\n statusClass: \"STATUS_CLASS_2XX\",\n },\n {\n statusValue: 301,\n },\n {\n statusValue: 302,\n },\n ],\n body: \"Zm9vJTI1M0RiYXI=\",\n contentType: \"URL_ENCODED\",\n path: \"some-path\",\n port: 8010,\n requestMethod: \"POST\",\n },\n monitoredResource: {\n labels: {\n host: \"192.168.1.1\",\n projectId: \"my-project-name\",\n },\n type: \"uptime_url\",\n },\n timeout: \"60s\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nstatus_code = gcp.monitoring.UptimeCheckConfig(\"statusCode\",\n checker_type=\"STATIC_IP_CHECKERS\",\n content_matchers=[gcp.monitoring.UptimeCheckConfigContentMatcherArgs(\n content=\"\\\"example\\\"\",\n json_path_matcher=gcp.monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs(\n json_matcher=\"EXACT_MATCH\",\n json_path=\"$.path\",\n ),\n matcher=\"MATCHES_JSON_PATH\",\n )],\n display_name=\"http-uptime-check\",\n http_check=gcp.monitoring.UptimeCheckConfigHttpCheckArgs(\n accepted_response_status_codes=[\n gcp.monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs(\n status_class=\"STATUS_CLASS_2XX\",\n ),\n gcp.monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs(\n status_value=301,\n ),\n gcp.monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs(\n status_value=302,\n ),\n ],\n body=\"Zm9vJTI1M0RiYXI=\",\n content_type=\"URL_ENCODED\",\n path=\"some-path\",\n port=8010,\n request_method=\"POST\",\n ),\n monitored_resource=gcp.monitoring.UptimeCheckConfigMonitoredResourceArgs(\n labels={\n \"host\": \"192.168.1.1\",\n \"projectId\": \"my-project-name\",\n },\n type=\"uptime_url\",\n ),\n timeout=\"60s\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var statusCode = new Gcp.Monitoring.UptimeCheckConfig(\"statusCode\", new()\n {\n CheckerType = \"STATIC_IP_CHECKERS\",\n ContentMatchers = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherArgs\n {\n Content = \"\\\"example\\\"\",\n JsonPathMatcher = new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs\n {\n JsonMatcher = \"EXACT_MATCH\",\n JsonPath = \"$.path\",\n },\n Matcher = \"MATCHES_JSON_PATH\",\n },\n },\n DisplayName = \"http-uptime-check\",\n HttpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckArgs\n {\n AcceptedResponseStatusCodes = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs\n {\n StatusClass = \"STATUS_CLASS_2XX\",\n },\n new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs\n {\n StatusValue = 301,\n },\n new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs\n {\n StatusValue = 302,\n },\n },\n Body = \"Zm9vJTI1M0RiYXI=\",\n ContentType = \"URL_ENCODED\",\n Path = \"some-path\",\n Port = 8010,\n RequestMethod = \"POST\",\n },\n MonitoredResource = new Gcp.Monitoring.Inputs.UptimeCheckConfigMonitoredResourceArgs\n {\n Labels = \n {\n { \"host\", \"192.168.1.1\" },\n { \"projectId\", \"my-project-name\" },\n },\n Type = \"uptime_url\",\n },\n Timeout = \"60s\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewUptimeCheckConfig(ctx, \"statusCode\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tCheckerType: pulumi.String(\"STATIC_IP_CHECKERS\"),\n\t\t\tContentMatchers: monitoring.UptimeCheckConfigContentMatcherArray{\n\t\t\t\t\u0026monitoring.UptimeCheckConfigContentMatcherArgs{\n\t\t\t\t\tContent: pulumi.String(\"\\\"example\\\"\"),\n\t\t\t\t\tJsonPathMatcher: \u0026monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs{\n\t\t\t\t\t\tJsonMatcher: pulumi.String(\"EXACT_MATCH\"),\n\t\t\t\t\t\tJsonPath: pulumi.String(fmt.Sprintf(\"$.path\")),\n\t\t\t\t\t},\n\t\t\t\t\tMatcher: pulumi.String(\"MATCHES_JSON_PATH\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDisplayName: pulumi.String(\"http-uptime-check\"),\n\t\t\tHttpCheck: \u0026monitoring.UptimeCheckConfigHttpCheckArgs{\n\t\t\t\tAcceptedResponseStatusCodes: monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArray{\n\t\t\t\t\t\u0026monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs{\n\t\t\t\t\t\tStatusClass: pulumi.String(\"STATUS_CLASS_2XX\"),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs{\n\t\t\t\t\t\tStatusValue: pulumi.Int(301),\n\t\t\t\t\t},\n\t\t\t\t\t\u0026monitoring.UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs{\n\t\t\t\t\t\tStatusValue: pulumi.Int(302),\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tBody: pulumi.String(\"Zm9vJTI1M0RiYXI=\"),\n\t\t\t\tContentType: pulumi.String(\"URL_ENCODED\"),\n\t\t\t\tPath: pulumi.String(\"some-path\"),\n\t\t\t\tPort: pulumi.Int(8010),\n\t\t\t\tRequestMethod: pulumi.String(\"POST\"),\n\t\t\t},\n\t\t\tMonitoredResource: \u0026monitoring.UptimeCheckConfigMonitoredResourceArgs{\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"host\": pulumi.String(\"192.168.1.1\"),\n\t\t\t\t\t\"projectId\": pulumi.String(\"my-project-name\"),\n\t\t\t\t},\n\t\t\t\tType: pulumi.String(\"uptime_url\"),\n\t\t\t},\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigMonitoredResourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var statusCode = new UptimeCheckConfig(\"statusCode\", UptimeCheckConfigArgs.builder() \n .checkerType(\"STATIC_IP_CHECKERS\")\n .contentMatchers(UptimeCheckConfigContentMatcherArgs.builder()\n .content(\"\\\"example\\\"\")\n .jsonPathMatcher(UptimeCheckConfigContentMatcherJsonPathMatcherArgs.builder()\n .jsonMatcher(\"EXACT_MATCH\")\n .jsonPath(\"$.path\")\n .build())\n .matcher(\"MATCHES_JSON_PATH\")\n .build())\n .displayName(\"http-uptime-check\")\n .httpCheck(UptimeCheckConfigHttpCheckArgs.builder()\n .acceptedResponseStatusCodes( \n UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs.builder()\n .statusClass(\"STATUS_CLASS_2XX\")\n .build(),\n UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs.builder()\n .statusValue(301)\n .build(),\n UptimeCheckConfigHttpCheckAcceptedResponseStatusCodeArgs.builder()\n .statusValue(302)\n .build())\n .body(\"Zm9vJTI1M0RiYXI=\")\n .contentType(\"URL_ENCODED\")\n .path(\"some-path\")\n .port(\"8010\")\n .requestMethod(\"POST\")\n .build())\n .monitoredResource(UptimeCheckConfigMonitoredResourceArgs.builder()\n .labels(Map.ofEntries(\n Map.entry(\"host\", \"192.168.1.1\"),\n Map.entry(\"projectId\", \"my-project-name\")\n ))\n .type(\"uptime_url\")\n .build())\n .timeout(\"60s\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n statusCode:\n type: gcp:monitoring:UptimeCheckConfig\n properties:\n checkerType: STATIC_IP_CHECKERS\n contentMatchers:\n - content: '\"example\"'\n jsonPathMatcher:\n jsonMatcher: EXACT_MATCH\n jsonPath: $.path\n matcher: MATCHES_JSON_PATH\n displayName: http-uptime-check\n httpCheck:\n acceptedResponseStatusCodes:\n - statusClass: STATUS_CLASS_2XX\n - statusValue: 301\n - statusValue: 302\n body: Zm9vJTI1M0RiYXI=\n contentType: URL_ENCODED\n path: some-path\n port: '8010'\n requestMethod: POST\n monitoredResource:\n labels:\n host: 192.168.1.1\n projectId: my-project-name\n type: uptime_url\n timeout: 60s\n```\n{{% /example %}}\n{{% example %}}\n### Uptime Check Config Https\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst https = new gcp.monitoring.UptimeCheckConfig(\"https\", {\n contentMatchers: [{\n content: \"example\",\n jsonPathMatcher: {\n jsonMatcher: \"REGEX_MATCH\",\n jsonPath: `$.path`,\n },\n matcher: \"MATCHES_JSON_PATH\",\n }],\n displayName: \"https-uptime-check\",\n httpCheck: {\n path: \"/some-path\",\n port: 443,\n useSsl: true,\n validateSsl: true,\n },\n monitoredResource: {\n labels: {\n host: \"192.168.1.1\",\n projectId: \"my-project-name\",\n },\n type: \"uptime_url\",\n },\n timeout: \"60s\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nhttps = gcp.monitoring.UptimeCheckConfig(\"https\",\n content_matchers=[gcp.monitoring.UptimeCheckConfigContentMatcherArgs(\n content=\"example\",\n json_path_matcher=gcp.monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs(\n json_matcher=\"REGEX_MATCH\",\n json_path=\"$.path\",\n ),\n matcher=\"MATCHES_JSON_PATH\",\n )],\n display_name=\"https-uptime-check\",\n http_check=gcp.monitoring.UptimeCheckConfigHttpCheckArgs(\n path=\"/some-path\",\n port=443,\n use_ssl=True,\n validate_ssl=True,\n ),\n monitored_resource=gcp.monitoring.UptimeCheckConfigMonitoredResourceArgs(\n labels={\n \"host\": \"192.168.1.1\",\n \"projectId\": \"my-project-name\",\n },\n type=\"uptime_url\",\n ),\n timeout=\"60s\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var https = new Gcp.Monitoring.UptimeCheckConfig(\"https\", new()\n {\n ContentMatchers = new[]\n {\n new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherArgs\n {\n Content = \"example\",\n JsonPathMatcher = new Gcp.Monitoring.Inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs\n {\n JsonMatcher = \"REGEX_MATCH\",\n JsonPath = \"$.path\",\n },\n Matcher = \"MATCHES_JSON_PATH\",\n },\n },\n DisplayName = \"https-uptime-check\",\n HttpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigHttpCheckArgs\n {\n Path = \"/some-path\",\n Port = 443,\n UseSsl = true,\n ValidateSsl = true,\n },\n MonitoredResource = new Gcp.Monitoring.Inputs.UptimeCheckConfigMonitoredResourceArgs\n {\n Labels = \n {\n { \"host\", \"192.168.1.1\" },\n { \"projectId\", \"my-project-name\" },\n },\n Type = \"uptime_url\",\n },\n Timeout = \"60s\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := monitoring.NewUptimeCheckConfig(ctx, \"https\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tContentMatchers: monitoring.UptimeCheckConfigContentMatcherArray{\n\t\t\t\t\u0026monitoring.UptimeCheckConfigContentMatcherArgs{\n\t\t\t\t\tContent: pulumi.String(\"example\"),\n\t\t\t\t\tJsonPathMatcher: \u0026monitoring.UptimeCheckConfigContentMatcherJsonPathMatcherArgs{\n\t\t\t\t\t\tJsonMatcher: pulumi.String(\"REGEX_MATCH\"),\n\t\t\t\t\t\tJsonPath: pulumi.String(fmt.Sprintf(\"$.path\")),\n\t\t\t\t\t},\n\t\t\t\t\tMatcher: pulumi.String(\"MATCHES_JSON_PATH\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tDisplayName: pulumi.String(\"https-uptime-check\"),\n\t\t\tHttpCheck: \u0026monitoring.UptimeCheckConfigHttpCheckArgs{\n\t\t\t\tPath: pulumi.String(\"/some-path\"),\n\t\t\t\tPort: pulumi.Int(443),\n\t\t\t\tUseSsl: pulumi.Bool(true),\n\t\t\t\tValidateSsl: pulumi.Bool(true),\n\t\t\t},\n\t\t\tMonitoredResource: \u0026monitoring.UptimeCheckConfigMonitoredResourceArgs{\n\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\"host\": pulumi.String(\"192.168.1.1\"),\n\t\t\t\t\t\"projectId\": pulumi.String(\"my-project-name\"),\n\t\t\t\t},\n\t\t\t\tType: pulumi.String(\"uptime_url\"),\n\t\t\t},\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigContentMatcherJsonPathMatcherArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigHttpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigMonitoredResourceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var https = new UptimeCheckConfig(\"https\", UptimeCheckConfigArgs.builder() \n .contentMatchers(UptimeCheckConfigContentMatcherArgs.builder()\n .content(\"example\")\n .jsonPathMatcher(UptimeCheckConfigContentMatcherJsonPathMatcherArgs.builder()\n .jsonMatcher(\"REGEX_MATCH\")\n .jsonPath(\"$.path\")\n .build())\n .matcher(\"MATCHES_JSON_PATH\")\n .build())\n .displayName(\"https-uptime-check\")\n .httpCheck(UptimeCheckConfigHttpCheckArgs.builder()\n .path(\"/some-path\")\n .port(\"443\")\n .useSsl(true)\n .validateSsl(true)\n .build())\n .monitoredResource(UptimeCheckConfigMonitoredResourceArgs.builder()\n .labels(Map.ofEntries(\n Map.entry(\"host\", \"192.168.1.1\"),\n Map.entry(\"projectId\", \"my-project-name\")\n ))\n .type(\"uptime_url\")\n .build())\n .timeout(\"60s\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n https:\n type: gcp:monitoring:UptimeCheckConfig\n properties:\n contentMatchers:\n - content: example\n jsonPathMatcher:\n jsonMatcher: REGEX_MATCH\n jsonPath: $.path\n matcher: MATCHES_JSON_PATH\n displayName: https-uptime-check\n httpCheck:\n path: /some-path\n port: '443'\n useSsl: true\n validateSsl: true\n monitoredResource:\n labels:\n host: 192.168.1.1\n projectId: my-project-name\n type: uptime_url\n timeout: 60s\n```\n{{% /example %}}\n{{% example %}}\n### Uptime Check Tcp\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst check = new gcp.monitoring.Group(\"check\", {\n displayName: \"uptime-check-group\",\n filter: \"resource.metadata.name=has_substring(\\\"foo\\\")\",\n});\nconst tcpGroup = new gcp.monitoring.UptimeCheckConfig(\"tcpGroup\", {\n displayName: \"tcp-uptime-check\",\n timeout: \"60s\",\n tcpCheck: {\n port: 888,\n },\n resourceGroup: {\n resourceType: \"INSTANCE\",\n groupId: check.name,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncheck = gcp.monitoring.Group(\"check\",\n display_name=\"uptime-check-group\",\n filter=\"resource.metadata.name=has_substring(\\\"foo\\\")\")\ntcp_group = gcp.monitoring.UptimeCheckConfig(\"tcpGroup\",\n display_name=\"tcp-uptime-check\",\n timeout=\"60s\",\n tcp_check=gcp.monitoring.UptimeCheckConfigTcpCheckArgs(\n port=888,\n ),\n resource_group=gcp.monitoring.UptimeCheckConfigResourceGroupArgs(\n resource_type=\"INSTANCE\",\n group_id=check.name,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var check = new Gcp.Monitoring.Group(\"check\", new()\n {\n DisplayName = \"uptime-check-group\",\n Filter = \"resource.metadata.name=has_substring(\\\"foo\\\")\",\n });\n\n var tcpGroup = new Gcp.Monitoring.UptimeCheckConfig(\"tcpGroup\", new()\n {\n DisplayName = \"tcp-uptime-check\",\n Timeout = \"60s\",\n TcpCheck = new Gcp.Monitoring.Inputs.UptimeCheckConfigTcpCheckArgs\n {\n Port = 888,\n },\n ResourceGroup = new Gcp.Monitoring.Inputs.UptimeCheckConfigResourceGroupArgs\n {\n ResourceType = \"INSTANCE\",\n GroupId = check.Name,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/monitoring\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tcheck, err := monitoring.NewGroup(ctx, \"check\", \u0026monitoring.GroupArgs{\n\t\t\tDisplayName: pulumi.String(\"uptime-check-group\"),\n\t\t\tFilter: pulumi.String(\"resource.metadata.name=has_substring(\\\"foo\\\")\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = monitoring.NewUptimeCheckConfig(ctx, \"tcpGroup\", \u0026monitoring.UptimeCheckConfigArgs{\n\t\t\tDisplayName: pulumi.String(\"tcp-uptime-check\"),\n\t\t\tTimeout: pulumi.String(\"60s\"),\n\t\t\tTcpCheck: \u0026monitoring.UptimeCheckConfigTcpCheckArgs{\n\t\t\t\tPort: pulumi.Int(888),\n\t\t\t},\n\t\t\tResourceGroup: \u0026monitoring.UptimeCheckConfigResourceGroupArgs{\n\t\t\t\tResourceType: pulumi.String(\"INSTANCE\"),\n\t\t\t\tGroupId: check.Name,\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.monitoring.Group;\nimport com.pulumi.gcp.monitoring.GroupArgs;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfig;\nimport com.pulumi.gcp.monitoring.UptimeCheckConfigArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigTcpCheckArgs;\nimport com.pulumi.gcp.monitoring.inputs.UptimeCheckConfigResourceGroupArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var check = new Group(\"check\", GroupArgs.builder() \n .displayName(\"uptime-check-group\")\n .filter(\"resource.metadata.name=has_substring(\\\"foo\\\")\")\n .build());\n\n var tcpGroup = new UptimeCheckConfig(\"tcpGroup\", UptimeCheckConfigArgs.builder() \n .displayName(\"tcp-uptime-check\")\n .timeout(\"60s\")\n .tcpCheck(UptimeCheckConfigTcpCheckArgs.builder()\n .port(888)\n .build())\n .resourceGroup(UptimeCheckConfigResourceGroupArgs.builder()\n .resourceType(\"INSTANCE\")\n .groupId(check.name())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tcpGroup:\n type: gcp:monitoring:UptimeCheckConfig\n properties:\n displayName: tcp-uptime-check\n timeout: 60s\n tcpCheck:\n port: 888\n resourceGroup:\n resourceType: INSTANCE\n groupId: ${check.name}\n check:\n type: gcp:monitoring:Group\n properties:\n displayName: uptime-check-group\n filter: resource.metadata.name=has_substring(\"foo\")\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nUptimeCheckConfig can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:monitoring/uptimeCheckConfig:UptimeCheckConfig default {{name}}\n```\n\n ", "properties": { "checkerType": { "type": "string", @@ -177535,7 +179074,7 @@ } }, "gcp:notebooks/environment:Environment": { - "description": "A Cloud AI Platform Notebook environment.\n\nTo get more information about Environment, see:\n\n* [API documentation](https://cloud.google.com/ai-platform/notebooks/docs/reference/rest)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/ai-platform-notebooks)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Notebook Environment Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst environment = new gcp.notebooks.Environment(\"environment\", {\n containerImage: {\n repository: \"gcr.io/deeplearning-platform-release/base-cpu\",\n },\n location: \"us-west1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nenvironment = gcp.notebooks.Environment(\"environment\",\n container_image=gcp.notebooks.EnvironmentContainerImageArgs(\n repository=\"gcr.io/deeplearning-platform-release/base-cpu\",\n ),\n location=\"us-west1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var environment = new Gcp.Notebooks.Environment(\"environment\", new()\n {\n ContainerImage = new Gcp.Notebooks.Inputs.EnvironmentContainerImageArgs\n {\n Repository = \"gcr.io/deeplearning-platform-release/base-cpu\",\n },\n Location = \"us-west1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/notebooks\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := notebooks.NewEnvironment(ctx, \"environment\", \u0026notebooks.EnvironmentArgs{\n\t\t\tContainerImage: \u0026notebooks.EnvironmentContainerImageArgs{\n\t\t\t\tRepository: pulumi.String(\"gcr.io/deeplearning-platform-release/base-cpu\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-west1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.notebooks.Environment;\nimport com.pulumi.gcp.notebooks.EnvironmentArgs;\nimport com.pulumi.gcp.notebooks.inputs.EnvironmentContainerImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var environment = new Environment(\"environment\", EnvironmentArgs.builder() \n .containerImage(EnvironmentContainerImageArgs.builder()\n .repository(\"gcr.io/deeplearning-platform-release/base-cpu\")\n .build())\n .location(\"us-west1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n environment:\n type: gcp:notebooks:Environment\n properties:\n containerImage:\n repository: gcr.io/deeplearning-platform-release/base-cpu\n location: us-west1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nEnvironment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:notebooks/environment:Environment default projects/{{project}}/locations/{{location}}/environments/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:notebooks/environment:Environment default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:notebooks/environment:Environment default {{location}}/{{name}}\n```\n\n ", + "description": "A Cloud AI Platform Notebook environment.\n\n\nTo get more information about Environment, see:\n\n* [API documentation](https://cloud.google.com/ai-platform/notebooks/docs/reference/rest)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/ai-platform-notebooks)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Notebook Environment Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst environment = new gcp.notebooks.Environment(\"environment\", {\n containerImage: {\n repository: \"gcr.io/deeplearning-platform-release/base-cpu\",\n },\n location: \"us-west1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nenvironment = gcp.notebooks.Environment(\"environment\",\n container_image=gcp.notebooks.EnvironmentContainerImageArgs(\n repository=\"gcr.io/deeplearning-platform-release/base-cpu\",\n ),\n location=\"us-west1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var environment = new Gcp.Notebooks.Environment(\"environment\", new()\n {\n ContainerImage = new Gcp.Notebooks.Inputs.EnvironmentContainerImageArgs\n {\n Repository = \"gcr.io/deeplearning-platform-release/base-cpu\",\n },\n Location = \"us-west1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/notebooks\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := notebooks.NewEnvironment(ctx, \"environment\", \u0026notebooks.EnvironmentArgs{\n\t\t\tContainerImage: \u0026notebooks.EnvironmentContainerImageArgs{\n\t\t\t\tRepository: pulumi.String(\"gcr.io/deeplearning-platform-release/base-cpu\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-west1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.notebooks.Environment;\nimport com.pulumi.gcp.notebooks.EnvironmentArgs;\nimport com.pulumi.gcp.notebooks.inputs.EnvironmentContainerImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var environment = new Environment(\"environment\", EnvironmentArgs.builder() \n .containerImage(EnvironmentContainerImageArgs.builder()\n .repository(\"gcr.io/deeplearning-platform-release/base-cpu\")\n .build())\n .location(\"us-west1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n environment:\n type: gcp:notebooks:Environment\n properties:\n containerImage:\n repository: gcr.io/deeplearning-platform-release/base-cpu\n location: us-west1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nEnvironment can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:notebooks/environment:Environment default projects/{{project}}/locations/{{location}}/environments/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:notebooks/environment:Environment default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:notebooks/environment:Environment default {{location}}/{{name}}\n```\n\n ", "properties": { "containerImage": { "$ref": "#/types/gcp:notebooks/EnvironmentContainerImage:EnvironmentContainerImage", @@ -177665,7 +179204,7 @@ } }, "gcp:notebooks/instance:Instance": { - "description": "A Cloud AI Platform Notebook instance.\n\n\n\u003e **Note:** Due to limitations of the Notebooks Instance API, many fields\nin this resource do not properly detect drift. These fields will also not\nappear in state once imported.\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/ai-platform/notebooks/docs/reference/rest)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/ai-platform-notebooks)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Notebook Instance Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.notebooks.Instance(\"instance\", {\n location: \"us-west1-a\",\n machineType: \"e2-medium\",\n vmImage: {\n imageFamily: \"tf-latest-cpu\",\n project: \"deeplearning-platform-release\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.notebooks.Instance(\"instance\",\n location=\"us-west1-a\",\n machine_type=\"e2-medium\",\n vm_image=gcp.notebooks.InstanceVmImageArgs(\n image_family=\"tf-latest-cpu\",\n project=\"deeplearning-platform-release\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Notebooks.Instance(\"instance\", new()\n {\n Location = \"us-west1-a\",\n MachineType = \"e2-medium\",\n VmImage = new Gcp.Notebooks.Inputs.InstanceVmImageArgs\n {\n ImageFamily = \"tf-latest-cpu\",\n Project = \"deeplearning-platform-release\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/notebooks\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := notebooks.NewInstance(ctx, \"instance\", \u0026notebooks.InstanceArgs{\n\t\t\tLocation: pulumi.String(\"us-west1-a\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tVmImage: \u0026notebooks.InstanceVmImageArgs{\n\t\t\t\tImageFamily: pulumi.String(\"tf-latest-cpu\"),\n\t\t\t\tProject: pulumi.String(\"deeplearning-platform-release\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.notebooks.Instance;\nimport com.pulumi.gcp.notebooks.InstanceArgs;\nimport com.pulumi.gcp.notebooks.inputs.InstanceVmImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Instance(\"instance\", InstanceArgs.builder() \n .location(\"us-west1-a\")\n .machineType(\"e2-medium\")\n .vmImage(InstanceVmImageArgs.builder()\n .imageFamily(\"tf-latest-cpu\")\n .project(\"deeplearning-platform-release\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:notebooks:Instance\n properties:\n location: us-west1-a\n machineType: e2-medium\n vmImage:\n imageFamily: tf-latest-cpu\n project: deeplearning-platform-release\n```\n{{% /example %}}\n{{% example %}}\n### Notebook Instance Basic Container\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.notebooks.Instance(\"instance\", {\n containerImage: {\n repository: \"gcr.io/deeplearning-platform-release/base-cpu\",\n tag: \"latest\",\n },\n location: \"us-west1-a\",\n machineType: \"e2-medium\",\n metadata: {\n \"proxy-mode\": \"service_account\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.notebooks.Instance(\"instance\",\n container_image=gcp.notebooks.InstanceContainerImageArgs(\n repository=\"gcr.io/deeplearning-platform-release/base-cpu\",\n tag=\"latest\",\n ),\n location=\"us-west1-a\",\n machine_type=\"e2-medium\",\n metadata={\n \"proxy-mode\": \"service_account\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Notebooks.Instance(\"instance\", new()\n {\n ContainerImage = new Gcp.Notebooks.Inputs.InstanceContainerImageArgs\n {\n Repository = \"gcr.io/deeplearning-platform-release/base-cpu\",\n Tag = \"latest\",\n },\n Location = \"us-west1-a\",\n MachineType = \"e2-medium\",\n Metadata = \n {\n { \"proxy-mode\", \"service_account\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/notebooks\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := notebooks.NewInstance(ctx, \"instance\", \u0026notebooks.InstanceArgs{\n\t\t\tContainerImage: \u0026notebooks.InstanceContainerImageArgs{\n\t\t\t\tRepository: pulumi.String(\"gcr.io/deeplearning-platform-release/base-cpu\"),\n\t\t\t\tTag: pulumi.String(\"latest\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-west1-a\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"proxy-mode\": pulumi.String(\"service_account\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.notebooks.Instance;\nimport com.pulumi.gcp.notebooks.InstanceArgs;\nimport com.pulumi.gcp.notebooks.inputs.InstanceContainerImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Instance(\"instance\", InstanceArgs.builder() \n .containerImage(InstanceContainerImageArgs.builder()\n .repository(\"gcr.io/deeplearning-platform-release/base-cpu\")\n .tag(\"latest\")\n .build())\n .location(\"us-west1-a\")\n .machineType(\"e2-medium\")\n .metadata(Map.of(\"proxy-mode\", \"service_account\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:notebooks:Instance\n properties:\n containerImage:\n repository: gcr.io/deeplearning-platform-release/base-cpu\n tag: latest\n location: us-west1-a\n machineType: e2-medium\n metadata:\n proxy-mode: service_account\n```\n{{% /example %}}\n{{% example %}}\n### Notebook Instance Basic Gpu\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.notebooks.Instance(\"instance\", {\n acceleratorConfig: {\n coreCount: 1,\n type: \"NVIDIA_TESLA_T4\",\n },\n installGpuDriver: true,\n location: \"us-west1-a\",\n machineType: \"n1-standard-1\",\n vmImage: {\n imageFamily: \"tf-latest-gpu\",\n project: \"deeplearning-platform-release\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.notebooks.Instance(\"instance\",\n accelerator_config=gcp.notebooks.InstanceAcceleratorConfigArgs(\n core_count=1,\n type=\"NVIDIA_TESLA_T4\",\n ),\n install_gpu_driver=True,\n location=\"us-west1-a\",\n machine_type=\"n1-standard-1\",\n vm_image=gcp.notebooks.InstanceVmImageArgs(\n image_family=\"tf-latest-gpu\",\n project=\"deeplearning-platform-release\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Notebooks.Instance(\"instance\", new()\n {\n AcceleratorConfig = new Gcp.Notebooks.Inputs.InstanceAcceleratorConfigArgs\n {\n CoreCount = 1,\n Type = \"NVIDIA_TESLA_T4\",\n },\n InstallGpuDriver = true,\n Location = \"us-west1-a\",\n MachineType = \"n1-standard-1\",\n VmImage = new Gcp.Notebooks.Inputs.InstanceVmImageArgs\n {\n ImageFamily = \"tf-latest-gpu\",\n Project = \"deeplearning-platform-release\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/notebooks\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := notebooks.NewInstance(ctx, \"instance\", \u0026notebooks.InstanceArgs{\n\t\t\tAcceleratorConfig: \u0026notebooks.InstanceAcceleratorConfigArgs{\n\t\t\t\tCoreCount: pulumi.Int(1),\n\t\t\t\tType: pulumi.String(\"NVIDIA_TESLA_T4\"),\n\t\t\t},\n\t\t\tInstallGpuDriver: pulumi.Bool(true),\n\t\t\tLocation: pulumi.String(\"us-west1-a\"),\n\t\t\tMachineType: pulumi.String(\"n1-standard-1\"),\n\t\t\tVmImage: \u0026notebooks.InstanceVmImageArgs{\n\t\t\t\tImageFamily: pulumi.String(\"tf-latest-gpu\"),\n\t\t\t\tProject: pulumi.String(\"deeplearning-platform-release\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.notebooks.Instance;\nimport com.pulumi.gcp.notebooks.InstanceArgs;\nimport com.pulumi.gcp.notebooks.inputs.InstanceAcceleratorConfigArgs;\nimport com.pulumi.gcp.notebooks.inputs.InstanceVmImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Instance(\"instance\", InstanceArgs.builder() \n .acceleratorConfig(InstanceAcceleratorConfigArgs.builder()\n .coreCount(1)\n .type(\"NVIDIA_TESLA_T4\")\n .build())\n .installGpuDriver(true)\n .location(\"us-west1-a\")\n .machineType(\"n1-standard-1\")\n .vmImage(InstanceVmImageArgs.builder()\n .imageFamily(\"tf-latest-gpu\")\n .project(\"deeplearning-platform-release\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:notebooks:Instance\n properties:\n acceleratorConfig:\n coreCount: 1\n type: NVIDIA_TESLA_T4\n installGpuDriver: true\n location: us-west1-a\n machineType: n1-standard-1\n vmImage:\n imageFamily: tf-latest-gpu\n project: deeplearning-platform-release\n```\n{{% /example %}}\n{{% example %}}\n### Notebook Instance Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myNetwork = gcp.compute.getNetwork({\n name: \"default\",\n});\nconst mySubnetwork = gcp.compute.getSubnetwork({\n name: \"default\",\n region: \"us-central1\",\n});\nconst instance = new gcp.notebooks.Instance(\"instance\", {\n location: \"us-central1-a\",\n machineType: \"e2-medium\",\n vmImage: {\n project: \"deeplearning-platform-release\",\n imageFamily: \"tf-latest-cpu\",\n },\n instanceOwners: [\"admin@hashicorptest.com\"],\n serviceAccount: \"emailAddress:my@service-account.com\",\n installGpuDriver: true,\n bootDiskType: \"PD_SSD\",\n bootDiskSizeGb: 110,\n noPublicIp: true,\n noProxyAccess: true,\n network: myNetwork.then(myNetwork =\u003e myNetwork.id),\n subnet: mySubnetwork.then(mySubnetwork =\u003e mySubnetwork.id),\n labels: {\n k: \"val\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_network = gcp.compute.get_network(name=\"default\")\nmy_subnetwork = gcp.compute.get_subnetwork(name=\"default\",\n region=\"us-central1\")\ninstance = gcp.notebooks.Instance(\"instance\",\n location=\"us-central1-a\",\n machine_type=\"e2-medium\",\n vm_image=gcp.notebooks.InstanceVmImageArgs(\n project=\"deeplearning-platform-release\",\n image_family=\"tf-latest-cpu\",\n ),\n instance_owners=[\"admin@hashicorptest.com\"],\n service_account=\"emailAddress:my@service-account.com\",\n install_gpu_driver=True,\n boot_disk_type=\"PD_SSD\",\n boot_disk_size_gb=110,\n no_public_ip=True,\n no_proxy_access=True,\n network=my_network.id,\n subnet=my_subnetwork.id,\n labels={\n \"k\": \"val\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myNetwork = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"default\",\n });\n\n var mySubnetwork = Gcp.Compute.GetSubnetwork.Invoke(new()\n {\n Name = \"default\",\n Region = \"us-central1\",\n });\n\n var instance = new Gcp.Notebooks.Instance(\"instance\", new()\n {\n Location = \"us-central1-a\",\n MachineType = \"e2-medium\",\n VmImage = new Gcp.Notebooks.Inputs.InstanceVmImageArgs\n {\n Project = \"deeplearning-platform-release\",\n ImageFamily = \"tf-latest-cpu\",\n },\n InstanceOwners = new[]\n {\n \"admin@hashicorptest.com\",\n },\n ServiceAccount = \"emailAddress:my@service-account.com\",\n InstallGpuDriver = true,\n BootDiskType = \"PD_SSD\",\n BootDiskSizeGb = 110,\n NoPublicIp = true,\n NoProxyAccess = true,\n Network = myNetwork.Apply(getNetworkResult =\u003e getNetworkResult.Id),\n Subnet = mySubnetwork.Apply(getSubnetworkResult =\u003e getSubnetworkResult.Id),\n Labels = \n {\n { \"k\", \"val\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/notebooks\"\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.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\tmySubnetwork, err := compute.LookupSubnetwork(ctx, \u0026compute.LookupSubnetworkArgs{\n\t\t\tName: pulumi.StringRef(\"default\"),\n\t\t\tRegion: pulumi.StringRef(\"us-central1\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = notebooks.NewInstance(ctx, \"instance\", \u0026notebooks.InstanceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tVmImage: \u0026notebooks.InstanceVmImageArgs{\n\t\t\t\tProject: pulumi.String(\"deeplearning-platform-release\"),\n\t\t\t\tImageFamily: pulumi.String(\"tf-latest-cpu\"),\n\t\t\t},\n\t\t\tInstanceOwners: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"admin@hashicorptest.com\"),\n\t\t\t},\n\t\t\tServiceAccount: pulumi.String(\"emailAddress:my@service-account.com\"),\n\t\t\tInstallGpuDriver: pulumi.Bool(true),\n\t\t\tBootDiskType: pulumi.String(\"PD_SSD\"),\n\t\t\tBootDiskSizeGb: pulumi.Int(110),\n\t\t\tNoPublicIp: pulumi.Bool(true),\n\t\t\tNoProxyAccess: pulumi.Bool(true),\n\t\t\tNetwork: *pulumi.String(myNetwork.Id),\n\t\t\tSubnet: *pulumi.String(mySubnetwork.Id),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"k\": pulumi.String(\"val\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GetSubnetworkArgs;\nimport com.pulumi.gcp.notebooks.Instance;\nimport com.pulumi.gcp.notebooks.InstanceArgs;\nimport com.pulumi.gcp.notebooks.inputs.InstanceVmImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 myNetwork = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"default\")\n .build());\n\n final var mySubnetwork = ComputeFunctions.getSubnetwork(GetSubnetworkArgs.builder()\n .name(\"default\")\n .region(\"us-central1\")\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder() \n .location(\"us-central1-a\")\n .machineType(\"e2-medium\")\n .vmImage(InstanceVmImageArgs.builder()\n .project(\"deeplearning-platform-release\")\n .imageFamily(\"tf-latest-cpu\")\n .build())\n .instanceOwners(\"admin@hashicorptest.com\")\n .serviceAccount(\"emailAddress:my@service-account.com\")\n .installGpuDriver(true)\n .bootDiskType(\"PD_SSD\")\n .bootDiskSizeGb(110)\n .noPublicIp(true)\n .noProxyAccess(true)\n .network(myNetwork.applyValue(getNetworkResult -\u003e getNetworkResult.id()))\n .subnet(mySubnetwork.applyValue(getSubnetworkResult -\u003e getSubnetworkResult.id()))\n .labels(Map.of(\"k\", \"val\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:notebooks:Instance\n properties:\n location: us-central1-a\n machineType: e2-medium\n vmImage:\n project: deeplearning-platform-release\n imageFamily: tf-latest-cpu\n instanceOwners:\n - admin@hashicorptest.com\n serviceAccount: emailAddress:my@service-account.com\n installGpuDriver: true\n bootDiskType: PD_SSD\n bootDiskSizeGb: 110\n noPublicIp: true\n noProxyAccess: true\n network: ${myNetwork.id}\n subnet: ${mySubnetwork.id}\n labels:\n k: val\nvariables:\n myNetwork:\n fn::invoke:\n Function: gcp:compute:getNetwork\n Arguments:\n name: default\n mySubnetwork:\n fn::invoke:\n Function: gcp:compute:getSubnetwork\n Arguments:\n name: default\n region: us-central1\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:notebooks/instance:Instance default projects/{{project}}/locations/{{location}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:notebooks/instance:Instance default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:notebooks/instance:Instance default {{location}}/{{name}}\n```\n\n ", + "description": "A Cloud AI Platform Notebook instance.\n\n\n\u003e **Note:** Due to limitations of the Notebooks Instance API, many fields\nin this resource do not properly detect drift. These fields will also not\nappear in state once imported.\n\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/ai-platform/notebooks/docs/reference/rest)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/ai-platform-notebooks)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Notebook Instance Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.notebooks.Instance(\"instance\", {\n location: \"us-west1-a\",\n machineType: \"e2-medium\",\n vmImage: {\n imageFamily: \"tf-latest-cpu\",\n project: \"deeplearning-platform-release\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.notebooks.Instance(\"instance\",\n location=\"us-west1-a\",\n machine_type=\"e2-medium\",\n vm_image=gcp.notebooks.InstanceVmImageArgs(\n image_family=\"tf-latest-cpu\",\n project=\"deeplearning-platform-release\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Notebooks.Instance(\"instance\", new()\n {\n Location = \"us-west1-a\",\n MachineType = \"e2-medium\",\n VmImage = new Gcp.Notebooks.Inputs.InstanceVmImageArgs\n {\n ImageFamily = \"tf-latest-cpu\",\n Project = \"deeplearning-platform-release\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/notebooks\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := notebooks.NewInstance(ctx, \"instance\", \u0026notebooks.InstanceArgs{\n\t\t\tLocation: pulumi.String(\"us-west1-a\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tVmImage: \u0026notebooks.InstanceVmImageArgs{\n\t\t\t\tImageFamily: pulumi.String(\"tf-latest-cpu\"),\n\t\t\t\tProject: pulumi.String(\"deeplearning-platform-release\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.notebooks.Instance;\nimport com.pulumi.gcp.notebooks.InstanceArgs;\nimport com.pulumi.gcp.notebooks.inputs.InstanceVmImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Instance(\"instance\", InstanceArgs.builder() \n .location(\"us-west1-a\")\n .machineType(\"e2-medium\")\n .vmImage(InstanceVmImageArgs.builder()\n .imageFamily(\"tf-latest-cpu\")\n .project(\"deeplearning-platform-release\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:notebooks:Instance\n properties:\n location: us-west1-a\n machineType: e2-medium\n vmImage:\n imageFamily: tf-latest-cpu\n project: deeplearning-platform-release\n```\n{{% /example %}}\n{{% example %}}\n### Notebook Instance Basic Container\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.notebooks.Instance(\"instance\", {\n containerImage: {\n repository: \"gcr.io/deeplearning-platform-release/base-cpu\",\n tag: \"latest\",\n },\n location: \"us-west1-a\",\n machineType: \"e2-medium\",\n metadata: {\n \"proxy-mode\": \"service_account\",\n terraform: \"true\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.notebooks.Instance(\"instance\",\n container_image=gcp.notebooks.InstanceContainerImageArgs(\n repository=\"gcr.io/deeplearning-platform-release/base-cpu\",\n tag=\"latest\",\n ),\n location=\"us-west1-a\",\n machine_type=\"e2-medium\",\n metadata={\n \"proxy-mode\": \"service_account\",\n \"terraform\": \"true\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Notebooks.Instance(\"instance\", new()\n {\n ContainerImage = new Gcp.Notebooks.Inputs.InstanceContainerImageArgs\n {\n Repository = \"gcr.io/deeplearning-platform-release/base-cpu\",\n Tag = \"latest\",\n },\n Location = \"us-west1-a\",\n MachineType = \"e2-medium\",\n Metadata = \n {\n { \"proxy-mode\", \"service_account\" },\n { \"terraform\", \"true\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/notebooks\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := notebooks.NewInstance(ctx, \"instance\", \u0026notebooks.InstanceArgs{\n\t\t\tContainerImage: \u0026notebooks.InstanceContainerImageArgs{\n\t\t\t\tRepository: pulumi.String(\"gcr.io/deeplearning-platform-release/base-cpu\"),\n\t\t\t\tTag: pulumi.String(\"latest\"),\n\t\t\t},\n\t\t\tLocation: pulumi.String(\"us-west1-a\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"proxy-mode\": pulumi.String(\"service_account\"),\n\t\t\t\t\"terraform\": pulumi.String(\"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.notebooks.Instance;\nimport com.pulumi.gcp.notebooks.InstanceArgs;\nimport com.pulumi.gcp.notebooks.inputs.InstanceContainerImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Instance(\"instance\", InstanceArgs.builder() \n .containerImage(InstanceContainerImageArgs.builder()\n .repository(\"gcr.io/deeplearning-platform-release/base-cpu\")\n .tag(\"latest\")\n .build())\n .location(\"us-west1-a\")\n .machineType(\"e2-medium\")\n .metadata(Map.ofEntries(\n Map.entry(\"proxy-mode\", \"service_account\"),\n Map.entry(\"terraform\", \"true\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:notebooks:Instance\n properties:\n containerImage:\n repository: gcr.io/deeplearning-platform-release/base-cpu\n tag: latest\n location: us-west1-a\n machineType: e2-medium\n metadata:\n proxy-mode: service_account\n terraform: 'true'\n```\n{{% /example %}}\n{{% example %}}\n### Notebook Instance Basic Gpu\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.notebooks.Instance(\"instance\", {\n acceleratorConfig: {\n coreCount: 1,\n type: \"NVIDIA_TESLA_T4\",\n },\n installGpuDriver: true,\n location: \"us-west1-a\",\n machineType: \"n1-standard-1\",\n vmImage: {\n imageFamily: \"tf-latest-gpu\",\n project: \"deeplearning-platform-release\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.notebooks.Instance(\"instance\",\n accelerator_config=gcp.notebooks.InstanceAcceleratorConfigArgs(\n core_count=1,\n type=\"NVIDIA_TESLA_T4\",\n ),\n install_gpu_driver=True,\n location=\"us-west1-a\",\n machine_type=\"n1-standard-1\",\n vm_image=gcp.notebooks.InstanceVmImageArgs(\n image_family=\"tf-latest-gpu\",\n project=\"deeplearning-platform-release\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Notebooks.Instance(\"instance\", new()\n {\n AcceleratorConfig = new Gcp.Notebooks.Inputs.InstanceAcceleratorConfigArgs\n {\n CoreCount = 1,\n Type = \"NVIDIA_TESLA_T4\",\n },\n InstallGpuDriver = true,\n Location = \"us-west1-a\",\n MachineType = \"n1-standard-1\",\n VmImage = new Gcp.Notebooks.Inputs.InstanceVmImageArgs\n {\n ImageFamily = \"tf-latest-gpu\",\n Project = \"deeplearning-platform-release\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/notebooks\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := notebooks.NewInstance(ctx, \"instance\", \u0026notebooks.InstanceArgs{\n\t\t\tAcceleratorConfig: \u0026notebooks.InstanceAcceleratorConfigArgs{\n\t\t\t\tCoreCount: pulumi.Int(1),\n\t\t\t\tType: pulumi.String(\"NVIDIA_TESLA_T4\"),\n\t\t\t},\n\t\t\tInstallGpuDriver: pulumi.Bool(true),\n\t\t\tLocation: pulumi.String(\"us-west1-a\"),\n\t\t\tMachineType: pulumi.String(\"n1-standard-1\"),\n\t\t\tVmImage: \u0026notebooks.InstanceVmImageArgs{\n\t\t\t\tImageFamily: pulumi.String(\"tf-latest-gpu\"),\n\t\t\t\tProject: pulumi.String(\"deeplearning-platform-release\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.notebooks.Instance;\nimport com.pulumi.gcp.notebooks.InstanceArgs;\nimport com.pulumi.gcp.notebooks.inputs.InstanceAcceleratorConfigArgs;\nimport com.pulumi.gcp.notebooks.inputs.InstanceVmImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Instance(\"instance\", InstanceArgs.builder() \n .acceleratorConfig(InstanceAcceleratorConfigArgs.builder()\n .coreCount(1)\n .type(\"NVIDIA_TESLA_T4\")\n .build())\n .installGpuDriver(true)\n .location(\"us-west1-a\")\n .machineType(\"n1-standard-1\")\n .vmImage(InstanceVmImageArgs.builder()\n .imageFamily(\"tf-latest-gpu\")\n .project(\"deeplearning-platform-release\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:notebooks:Instance\n properties:\n acceleratorConfig:\n coreCount: 1\n type: NVIDIA_TESLA_T4\n installGpuDriver: true\n location: us-west1-a\n machineType: n1-standard-1\n vmImage:\n imageFamily: tf-latest-gpu\n project: deeplearning-platform-release\n```\n{{% /example %}}\n{{% example %}}\n### Notebook Instance Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myNetwork = gcp.compute.getNetwork({\n name: \"default\",\n});\nconst mySubnetwork = gcp.compute.getSubnetwork({\n name: \"default\",\n region: \"us-central1\",\n});\nconst instance = new gcp.notebooks.Instance(\"instance\", {\n location: \"us-central1-a\",\n machineType: \"e2-medium\",\n vmImage: {\n project: \"deeplearning-platform-release\",\n imageFamily: \"tf-latest-cpu\",\n },\n instanceOwners: [\"admin@hashicorptest.com\"],\n serviceAccount: \"emailAddress:my@service-account.com\",\n installGpuDriver: true,\n bootDiskType: \"PD_SSD\",\n bootDiskSizeGb: 110,\n noPublicIp: true,\n noProxyAccess: true,\n network: myNetwork.then(myNetwork =\u003e myNetwork.id),\n subnet: mySubnetwork.then(mySubnetwork =\u003e mySubnetwork.id),\n labels: {\n k: \"val\",\n },\n metadata: {\n terraform: \"true\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_network = gcp.compute.get_network(name=\"default\")\nmy_subnetwork = gcp.compute.get_subnetwork(name=\"default\",\n region=\"us-central1\")\ninstance = gcp.notebooks.Instance(\"instance\",\n location=\"us-central1-a\",\n machine_type=\"e2-medium\",\n vm_image=gcp.notebooks.InstanceVmImageArgs(\n project=\"deeplearning-platform-release\",\n image_family=\"tf-latest-cpu\",\n ),\n instance_owners=[\"admin@hashicorptest.com\"],\n service_account=\"emailAddress:my@service-account.com\",\n install_gpu_driver=True,\n boot_disk_type=\"PD_SSD\",\n boot_disk_size_gb=110,\n no_public_ip=True,\n no_proxy_access=True,\n network=my_network.id,\n subnet=my_subnetwork.id,\n labels={\n \"k\": \"val\",\n },\n metadata={\n \"terraform\": \"true\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myNetwork = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"default\",\n });\n\n var mySubnetwork = Gcp.Compute.GetSubnetwork.Invoke(new()\n {\n Name = \"default\",\n Region = \"us-central1\",\n });\n\n var instance = new Gcp.Notebooks.Instance(\"instance\", new()\n {\n Location = \"us-central1-a\",\n MachineType = \"e2-medium\",\n VmImage = new Gcp.Notebooks.Inputs.InstanceVmImageArgs\n {\n Project = \"deeplearning-platform-release\",\n ImageFamily = \"tf-latest-cpu\",\n },\n InstanceOwners = new[]\n {\n \"admin@hashicorptest.com\",\n },\n ServiceAccount = \"emailAddress:my@service-account.com\",\n InstallGpuDriver = true,\n BootDiskType = \"PD_SSD\",\n BootDiskSizeGb = 110,\n NoPublicIp = true,\n NoProxyAccess = true,\n Network = myNetwork.Apply(getNetworkResult =\u003e getNetworkResult.Id),\n Subnet = mySubnetwork.Apply(getSubnetworkResult =\u003e getSubnetworkResult.Id),\n Labels = \n {\n { \"k\", \"val\" },\n },\n Metadata = \n {\n { \"terraform\", \"true\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/notebooks\"\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.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\tmySubnetwork, err := compute.LookupSubnetwork(ctx, \u0026compute.LookupSubnetworkArgs{\n\t\t\tName: pulumi.StringRef(\"default\"),\n\t\t\tRegion: pulumi.StringRef(\"us-central1\"),\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = notebooks.NewInstance(ctx, \"instance\", \u0026notebooks.InstanceArgs{\n\t\t\tLocation: pulumi.String(\"us-central1-a\"),\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tVmImage: \u0026notebooks.InstanceVmImageArgs{\n\t\t\t\tProject: pulumi.String(\"deeplearning-platform-release\"),\n\t\t\t\tImageFamily: pulumi.String(\"tf-latest-cpu\"),\n\t\t\t},\n\t\t\tInstanceOwners: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"admin@hashicorptest.com\"),\n\t\t\t},\n\t\t\tServiceAccount: pulumi.String(\"emailAddress:my@service-account.com\"),\n\t\t\tInstallGpuDriver: pulumi.Bool(true),\n\t\t\tBootDiskType: pulumi.String(\"PD_SSD\"),\n\t\t\tBootDiskSizeGb: pulumi.Int(110),\n\t\t\tNoPublicIp: pulumi.Bool(true),\n\t\t\tNoProxyAccess: pulumi.Bool(true),\n\t\t\tNetwork: *pulumi.String(myNetwork.Id),\n\t\t\tSubnet: *pulumi.String(mySubnetwork.Id),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"k\": pulumi.String(\"val\"),\n\t\t\t},\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"terraform\": pulumi.String(\"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.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\nimport com.pulumi.gcp.compute.inputs.GetSubnetworkArgs;\nimport com.pulumi.gcp.notebooks.Instance;\nimport com.pulumi.gcp.notebooks.InstanceArgs;\nimport com.pulumi.gcp.notebooks.inputs.InstanceVmImageArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 myNetwork = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"default\")\n .build());\n\n final var mySubnetwork = ComputeFunctions.getSubnetwork(GetSubnetworkArgs.builder()\n .name(\"default\")\n .region(\"us-central1\")\n .build());\n\n var instance = new Instance(\"instance\", InstanceArgs.builder() \n .location(\"us-central1-a\")\n .machineType(\"e2-medium\")\n .vmImage(InstanceVmImageArgs.builder()\n .project(\"deeplearning-platform-release\")\n .imageFamily(\"tf-latest-cpu\")\n .build())\n .instanceOwners(\"admin@hashicorptest.com\")\n .serviceAccount(\"emailAddress:my@service-account.com\")\n .installGpuDriver(true)\n .bootDiskType(\"PD_SSD\")\n .bootDiskSizeGb(110)\n .noPublicIp(true)\n .noProxyAccess(true)\n .network(myNetwork.applyValue(getNetworkResult -\u003e getNetworkResult.id()))\n .subnet(mySubnetwork.applyValue(getSubnetworkResult -\u003e getSubnetworkResult.id()))\n .labels(Map.of(\"k\", \"val\"))\n .metadata(Map.of(\"terraform\", \"true\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:notebooks:Instance\n properties:\n location: us-central1-a\n machineType: e2-medium\n vmImage:\n project: deeplearning-platform-release\n imageFamily: tf-latest-cpu\n instanceOwners:\n - admin@hashicorptest.com\n serviceAccount: emailAddress:my@service-account.com\n installGpuDriver: true\n bootDiskType: PD_SSD\n bootDiskSizeGb: 110\n noPublicIp: true\n noProxyAccess: true\n network: ${myNetwork.id}\n subnet: ${mySubnetwork.id}\n labels:\n k: val\n metadata:\n terraform: 'true'\nvariables:\n myNetwork:\n fn::invoke:\n Function: gcp:compute:getNetwork\n Arguments:\n name: default\n mySubnetwork:\n fn::invoke:\n Function: gcp:compute:getSubnetwork\n Arguments:\n name: default\n region: us-central1\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:notebooks/instance:Instance default projects/{{project}}/locations/{{location}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:notebooks/instance:Instance default {{project}}/{{location}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:notebooks/instance:Instance default {{location}}/{{name}}\n```\n\n ", "properties": { "acceleratorConfig": { "$ref": "#/types/gcp:notebooks/InstanceAcceleratorConfig:InstanceAcceleratorConfig", @@ -179145,7 +180684,7 @@ } }, "gcp:organizations/folder:Folder": { - "description": "Allows management of a Google Cloud Platform folder. For more information see \n[the official documentation](https://cloud.google.com/resource-manager/docs/creating-managing-folders)\nand \n[API](https://cloud.google.com/resource-manager/reference/rest/v2/folders).\n\nA folder can contain projects, other folders, or a combination of both. You can use folders to group projects under an organization in a hierarchy. For example, your organization might contain multiple departments, each with its own set of Cloud Platform resources. Folders allows you to group these resources on a per-department basis. Folders are used to group resources that share common IAM policies.\n\nFolders created live inside an Organization. See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details.\n\nThe service account used to run the provider when creating a `gcp.organizations.Folder`\nresource must have `roles/resourcemanager.folderCreator`. See the\n[Access Control for Folders Using IAM](https://cloud.google.com/resource-manager/docs/access-control-folders)\ndoc for more information.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\n// Top-level folder under an organization.\nconst department1 = new gcp.organizations.Folder(\"department1\", {\n displayName: \"Department 1\",\n parent: \"organizations/1234567\",\n});\n// Folder nested under another folder.\nconst team_abc = new gcp.organizations.Folder(\"team-abc\", {\n displayName: \"Team ABC\",\n parent: department1.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\n# Top-level folder under an organization.\ndepartment1 = gcp.organizations.Folder(\"department1\",\n display_name=\"Department 1\",\n parent=\"organizations/1234567\")\n# Folder nested under another folder.\nteam_abc = gcp.organizations.Folder(\"team-abc\",\n display_name=\"Team ABC\",\n parent=department1.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // Top-level folder under an organization.\n var department1 = new Gcp.Organizations.Folder(\"department1\", new()\n {\n DisplayName = \"Department 1\",\n Parent = \"organizations/1234567\",\n });\n\n // Folder nested under another folder.\n var team_abc = new Gcp.Organizations.Folder(\"team-abc\", new()\n {\n DisplayName = \"Team ABC\",\n Parent = department1.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdepartment1, err := organizations.NewFolder(ctx, \"department1\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"Department 1\"),\n\t\t\tParent: pulumi.String(\"organizations/1234567\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.NewFolder(ctx, \"team-abc\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"Team ABC\"),\n\t\t\tParent: department1.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.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var department1 = new Folder(\"department1\", FolderArgs.builder() \n .displayName(\"Department 1\")\n .parent(\"organizations/1234567\")\n .build());\n\n var team_abc = new Folder(\"team-abc\", FolderArgs.builder() \n .displayName(\"Team ABC\")\n .parent(department1.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Top-level folder under an organization.\n department1:\n type: gcp:organizations:Folder\n properties:\n displayName: Department 1\n parent: organizations/1234567\n # Folder nested under another folder.\n team-abc:\n type: gcp:organizations:Folder\n properties:\n displayName: Team ABC\n parent: ${department1.name}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nFolders can be imported using the folder's id, e.g. Both syntaxes are valid\n\n```sh\n $ pulumi import gcp:organizations/folder:Folder department1 1234567\n```\n\n\n\n```sh\n $ pulumi import gcp:organizations/folder:Folder department1 folders/1234567\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\n// Top-level folder under an organization.\nconst department1 = new gcp.organizations.Folder(\"department1\", {\n displayName: \"Department 1\",\n parent: \"organizations/1234567\",\n});\n// Folder nested under another folder.\nconst team_abc = new gcp.organizations.Folder(\"team-abc\", {\n displayName: \"Team ABC\",\n parent: department1.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\n# Top-level folder under an organization.\ndepartment1 = gcp.organizations.Folder(\"department1\",\n display_name=\"Department 1\",\n parent=\"organizations/1234567\")\n# Folder nested under another folder.\nteam_abc = gcp.organizations.Folder(\"team-abc\",\n display_name=\"Team ABC\",\n parent=department1.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // Top-level folder under an organization.\n var department1 = new Gcp.Organizations.Folder(\"department1\", new()\n {\n DisplayName = \"Department 1\",\n Parent = \"organizations/1234567\",\n });\n\n // Folder nested under another folder.\n var team_abc = new Gcp.Organizations.Folder(\"team-abc\", new()\n {\n DisplayName = \"Team ABC\",\n Parent = department1.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdepartment1, err := organizations.NewFolder(ctx, \"department1\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"Department 1\"),\n\t\t\tParent: pulumi.String(\"organizations/1234567\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.NewFolder(ctx, \"team-abc\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"Team ABC\"),\n\t\t\tParent: department1.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.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var department1 = new Folder(\"department1\", FolderArgs.builder() \n .displayName(\"Department 1\")\n .parent(\"organizations/1234567\")\n .build());\n\n var team_abc = new Folder(\"team-abc\", FolderArgs.builder() \n .displayName(\"Team ABC\")\n .parent(department1.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Top-level folder under an organization.\n department1:\n type: gcp:organizations:Folder\n properties:\n displayName: Department 1\n parent: organizations/1234567\n # Folder nested under another folder.\n team-abc:\n type: gcp:organizations:Folder\n properties:\n displayName: Team ABC\n parent: ${department1.name}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nFolders can be imported using the folder's id, e.g. Both syntaxes are valid\n\n```sh\n $ pulumi import gcp:organizations/folder:Folder department1 1234567\n```\n\n\n\n```sh\n $ pulumi import gcp:organizations/folder:Folder department1 folders/1234567\n```\n\n ", "properties": { "createTime": { "type": "string", @@ -179226,10 +180765,11 @@ } }, "gcp:organizations/iAMBinding:IAMBinding": { - "description": "Allows creation and management of a single binding within IAM policy for\nan existing Google Cloud Platform Organization.\n\n\u003e **Note:** This resource __must not__ be used in conjunction with\n `gcp.organizations.IAMMember` for the __same role__ or they will fight over\n what your policy should be.\n\n\u003e **Note:** On create, this resource will overwrite members of any existing roles.\n Use `pulumi import` and inspect the `output to ensure\n your existing members are preserved.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.organizations.IAMBinding(\"binding\", {\n members: [\"user:alice@gmail.com\"],\n orgId: \"123456789\",\n role: \"roles/browser\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.organizations.IAMBinding(\"binding\",\n members=[\"user:alice@gmail.com\"],\n org_id=\"123456789\",\n role=\"roles/browser\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.Organizations.IAMBinding(\"binding\", new()\n {\n Members = new[]\n {\n \"user:alice@gmail.com\",\n },\n OrgId = \"123456789\",\n Role = \"roles/browser\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIAMBinding(ctx, \"binding\", \u0026organizations.IAMBindingArgs{\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:alice@gmail.com\"),\n\t\t\t},\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tRole: pulumi.String(\"roles/browser\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IAMBinding;\nimport com.pulumi.gcp.organizations.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMBinding(\"binding\", IAMBindingArgs.builder() \n .members(\"user:alice@gmail.com\")\n .orgId(\"123456789\")\n .role(\"roles/browser\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:organizations:IAMBinding\n properties:\n members:\n - user:alice@gmail.com\n orgId: '123456789'\n role: roles/browser\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nIAM binding imports use space-delimited identifiers; first the resource in question and then the role.\n\nThese bindings can be imported using the `org_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_org \"your-org-id roles/viewer\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `org_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization \"your-orgid roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `org_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization \"your-org-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `org_id`.\n\n```sh\n $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization your-org-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization \"your-organization-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:organizations/iAMBinding:IAMBinding to include the title of condition, e.g. `google_organization_iam_binding.my_organization \"your-org-id roles/{{role_id}} condition-title\"`\n```\n\n ", "properties": { "condition": { - "$ref": "#/types/gcp:organizations/IAMBindingCondition:IAMBindingCondition" + "$ref": "#/types/gcp:organizations/IAMBindingCondition:IAMBindingCondition", + "description": "An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding.\nStructure is documented below.\n" }, "etag": { "type": "string", @@ -179239,16 +180779,15 @@ "type": "array", "items": { "type": "string" - }, - "description": "A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding\n" + } }, "orgId": { "type": "string", - "description": "The numeric ID of the organization in which you want to create a custom role.\n" + "description": "The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider.\nRequired for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it\nwill not be inferred from the provider.\n" }, "role": { "type": "string", - "description": "The role that should be applied. Only one\n`gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n" + "description": "The role that should be applied. Only one\n`gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format\n`organizations/{{org_id}}/roles/{{role_id}}`.\n" } }, "required": [ @@ -179260,23 +180799,23 @@ "inputProperties": { "condition": { "$ref": "#/types/gcp:organizations/IAMBindingCondition:IAMBindingCondition", + "description": "An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "members": { "type": "array", "items": { "type": "string" - }, - "description": "A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding\n" + } }, "orgId": { "type": "string", - "description": "The numeric ID of the organization in which you want to create a custom role.\n", + "description": "The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider.\nRequired for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it\nwill not be inferred from the provider.\n", "willReplaceOnChanges": true }, "role": { "type": "string", - "description": "The role that should be applied. Only one\n`gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n", + "description": "The role that should be applied. Only one\n`gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format\n`organizations/{{org_id}}/roles/{{role_id}}`.\n", "willReplaceOnChanges": true } }, @@ -179290,6 +180829,7 @@ "properties": { "condition": { "$ref": "#/types/gcp:organizations/IAMBindingCondition:IAMBindingCondition", + "description": "An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding.\nStructure is documented below.\n", "willReplaceOnChanges": true }, "etag": { @@ -179300,17 +180840,16 @@ "type": "array", "items": { "type": "string" - }, - "description": "A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding\n" + } }, "orgId": { "type": "string", - "description": "The numeric ID of the organization in which you want to create a custom role.\n", + "description": "The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider.\nRequired for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it\nwill not be inferred from the provider.\n", "willReplaceOnChanges": true }, "role": { "type": "string", - "description": "The role that should be applied. Only one\n`gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format\n`[projects|organizations]/{parent-name}/roles/{role-name}`.\n", + "description": "The role that should be applied. Only one\n`gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format\n`organizations/{{org_id}}/roles/{{role_id}}`.\n", "willReplaceOnChanges": true } }, @@ -179318,7 +180857,7 @@ } }, "gcp:organizations/iAMCustomRole:IAMCustomRole": { - "description": "Allows management of a customized Cloud IAM organization role. For more information see\n[the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles)\nand\n[API](https://cloud.google.com/iam/reference/rest/v1/organizations.roles).\n\n\u003e **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise\n from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the\n same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted\n after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is\n made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all\n by the provider, and new roles cannot share that name.\n \n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nThis snippet creates a customized IAM organization role.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_custom_role = new gcp.organizations.IAMCustomRole(\"my-custom-role\", {\n description: \"A description\",\n orgId: \"123456789\",\n permissions: [\n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\",\n ],\n roleId: \"myCustomRole\",\n title: \"My Custom Role\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_custom_role = gcp.organizations.IAMCustomRole(\"my-custom-role\",\n description=\"A description\",\n org_id=\"123456789\",\n permissions=[\n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\",\n ],\n role_id=\"myCustomRole\",\n title=\"My Custom Role\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_custom_role = new Gcp.Organizations.IAMCustomRole(\"my-custom-role\", new()\n {\n Description = \"A description\",\n OrgId = \"123456789\",\n Permissions = new[]\n {\n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\",\n },\n RoleId = \"myCustomRole\",\n Title = \"My Custom Role\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIAMCustomRole(ctx, \"my-custom-role\", \u0026organizations.IAMCustomRoleArgs{\n\t\t\tDescription: pulumi.String(\"A description\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tPermissions: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"iam.roles.list\"),\n\t\t\t\tpulumi.String(\"iam.roles.create\"),\n\t\t\t\tpulumi.String(\"iam.roles.delete\"),\n\t\t\t},\n\t\t\tRoleId: pulumi.String(\"myCustomRole\"),\n\t\t\tTitle: pulumi.String(\"My Custom Role\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IAMCustomRole;\nimport com.pulumi.gcp.organizations.IAMCustomRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_custom_role = new IAMCustomRole(\"my-custom-role\", IAMCustomRoleArgs.builder() \n .description(\"A description\")\n .orgId(\"123456789\")\n .permissions( \n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\")\n .roleId(\"myCustomRole\")\n .title(\"My Custom Role\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-custom-role:\n type: gcp:organizations:IAMCustomRole\n properties:\n description: A description\n orgId: '123456789'\n permissions:\n - iam.roles.list\n - iam.roles.create\n - iam.roles.delete\n roleId: myCustomRole\n title: My Custom Role\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCustomized IAM organization role can be imported using their URI, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMCustomRole:IAMCustomRole my-custom-role organizations/123456789/roles/myCustomRole\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\nThis snippet creates a customized IAM organization role.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_custom_role = new gcp.organizations.IAMCustomRole(\"my-custom-role\", {\n description: \"A description\",\n orgId: \"123456789\",\n permissions: [\n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\",\n ],\n roleId: \"myCustomRole\",\n title: \"My Custom Role\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_custom_role = gcp.organizations.IAMCustomRole(\"my-custom-role\",\n description=\"A description\",\n org_id=\"123456789\",\n permissions=[\n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\",\n ],\n role_id=\"myCustomRole\",\n title=\"My Custom Role\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_custom_role = new Gcp.Organizations.IAMCustomRole(\"my-custom-role\", new()\n {\n Description = \"A description\",\n OrgId = \"123456789\",\n Permissions = new[]\n {\n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\",\n },\n RoleId = \"myCustomRole\",\n Title = \"My Custom Role\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIAMCustomRole(ctx, \"my-custom-role\", \u0026organizations.IAMCustomRoleArgs{\n\t\t\tDescription: pulumi.String(\"A description\"),\n\t\t\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tPermissions: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"iam.roles.list\"),\n\t\t\t\tpulumi.String(\"iam.roles.create\"),\n\t\t\t\tpulumi.String(\"iam.roles.delete\"),\n\t\t\t},\n\t\t\tRoleId: pulumi.String(\"myCustomRole\"),\n\t\t\tTitle: pulumi.String(\"My Custom Role\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IAMCustomRole;\nimport com.pulumi.gcp.organizations.IAMCustomRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_custom_role = new IAMCustomRole(\"my-custom-role\", IAMCustomRoleArgs.builder() \n .description(\"A description\")\n .orgId(\"123456789\")\n .permissions( \n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\")\n .roleId(\"myCustomRole\")\n .title(\"My Custom Role\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-custom-role:\n type: gcp:organizations:IAMCustomRole\n properties:\n description: A description\n orgId: '123456789'\n permissions:\n - iam.roles.list\n - iam.roles.create\n - iam.roles.delete\n roleId: myCustomRole\n title: My Custom Role\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCustomized IAM organization role can be imported using their URI, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMCustomRole:IAMCustomRole my-custom-role organizations/123456789/roles/myCustomRole\n```\n\n ", "properties": { "deleted": { "type": "boolean", @@ -179446,7 +180985,7 @@ } }, "gcp:organizations/iAMMember:IAMMember": { - "description": "Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case:\n\n* `gcp.organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached.\n* `gcp.organizations.IAMBinding`: 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 organization are preserved.\n* `gcp.organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved.\n* `gcp.organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service.\n\n\n\u003e **Note:** `gcp.organizations.IAMPolicy` **cannot** be used in conjunction with `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.organizations.IAMBinding` resources **can be** used in conjunction with `gcp.organizations.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_organization\\_iam\\_policy\n\n!\u003e **Warning:** New organizations have several default policies which will,\n without extreme caution, be **overwritten** by use of this resource.\n The safest alternative is to use multiple `gcp.organizations.IAMBinding`\n resources. This resource makes it easy to remove your own access to\n an organization, which will require a call to Google Support to have\n fixed, and can take multiple days to resolve.\n\n\n In general, this resource should only be used with organizations\n fully managed by this provider.I f you do use this resource,\n the best way to be sure that you are not making dangerous changes is to start\n by **importing** your existing policy, and examining the diff very closely.\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst organization = new gcp.organizations.IAMPolicy(\"organization\", {\n orgId: \"your-organization-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\norganization = gcp.organizations.IAMPolicy(\"organization\",\n org_id=\"your-organization-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var organization = new Gcp.Organizations.IAMPolicy(\"organization\", new()\n {\n OrgId = \"your-organization-id\",\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/v6/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/editor\",\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 = organizations.NewIAMPolicy(ctx, \"organization\", \u0026organizations.IAMPolicyArgs{\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\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.organizations.IAMPolicy;\nimport com.pulumi.gcp.organizations.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var organization = new IAMPolicy(\"organization\", IAMPolicyArgs.builder() \n .orgId(\"your-organization-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IAMPolicy\n properties:\n orgId: your-organization-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n }],\n});\nconst organization = new gcp.organizations.IAMPolicy(\"organization\", {\n orgId: \"your-organization-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\",\n)])\norganization = gcp.organizations.IAMPolicy(\"organization\",\n org_id=\"your-organization-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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 Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n },\n },\n });\n\n var organization = new Gcp.Organizations.IAMPolicy(\"organization\", new()\n {\n OrgId = \"your-organization-id\",\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/v6/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\tCondition: {\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t},\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\tRole: \"roles/editor\",\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 = organizations.NewIAMPolicy(ctx, \"organization\", \u0026organizations.IAMPolicyArgs{\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\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.organizations.IAMPolicy;\nimport com.pulumi.gcp.organizations.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 .condition(GetIAMPolicyBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build())\n .build());\n\n var organization = new IAMPolicy(\"organization\", IAMPolicyArgs.builder() \n .orgId(\"your-organization-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IAMPolicy\n properties:\n orgId: your-organization-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_organization\\_iam\\_binding\n\n\u003e **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst organization = new gcp.organizations.IAMBinding(\"organization\", {\n members: [\"user:jane@example.com\"],\n orgId: \"your-organization-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\norganization = gcp.organizations.IAMBinding(\"organization\",\n members=[\"user:jane@example.com\"],\n org_id=\"your-organization-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var organization = new Gcp.Organizations.IAMBinding(\"organization\", new()\n {\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n OrgId = \"your-organization-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIAMBinding(ctx, \"organization\", \u0026organizations.IAMBindingArgs{\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IAMBinding;\nimport com.pulumi.gcp.organizations.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var organization = new IAMBinding(\"organization\", IAMBindingArgs.builder() \n .members(\"user:jane@example.com\")\n .orgId(\"your-organization-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IAMBinding\n properties:\n members:\n - user:jane@example.com\n orgId: your-organization-id\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst organization = new gcp.organizations.IAMBinding(\"organization\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n orgId: \"your-organization-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\norganization = gcp.organizations.IAMBinding(\"organization\",\n condition=gcp.organizations.IAMBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n org_id=\"your-organization-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var organization = new Gcp.Organizations.IAMBinding(\"organization\", new()\n {\n Condition = new Gcp.Organizations.Inputs.IAMBindingConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n OrgId = \"your-organization-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIAMBinding(ctx, \"organization\", \u0026organizations.IAMBindingArgs{\n\t\t\tCondition: \u0026organizations.IAMBindingConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IAMBinding;\nimport com.pulumi.gcp.organizations.IAMBindingArgs;\nimport com.pulumi.gcp.organizations.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var organization = new IAMBinding(\"organization\", IAMBindingArgs.builder() \n .condition(IAMBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .orgId(\"your-organization-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IAMBinding\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n orgId: your-organization-id\n role: roles/editor\n```\n\n## google\\_organization\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst organization = new gcp.organizations.IAMMember(\"organization\", {\n member: \"user:jane@example.com\",\n orgId: \"your-organization-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\norganization = gcp.organizations.IAMMember(\"organization\",\n member=\"user:jane@example.com\",\n org_id=\"your-organization-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var organization = new Gcp.Organizations.IAMMember(\"organization\", new()\n {\n Member = \"user:jane@example.com\",\n OrgId = \"your-organization-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIAMMember(ctx, \"organization\", \u0026organizations.IAMMemberArgs{\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IAMMember;\nimport com.pulumi.gcp.organizations.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var organization = new IAMMember(\"organization\", IAMMemberArgs.builder() \n .member(\"user:jane@example.com\")\n .orgId(\"your-organization-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IAMMember\n properties:\n member: user:jane@example.com\n orgId: your-organization-id\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst organization = new gcp.organizations.IAMMember(\"organization\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n member: \"user:jane@example.com\",\n orgId: \"your-organization-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\norganization = gcp.organizations.IAMMember(\"organization\",\n condition=gcp.organizations.IAMMemberConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n member=\"user:jane@example.com\",\n org_id=\"your-organization-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var organization = new Gcp.Organizations.IAMMember(\"organization\", new()\n {\n Condition = new Gcp.Organizations.Inputs.IAMMemberConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Member = \"user:jane@example.com\",\n OrgId = \"your-organization-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIAMMember(ctx, \"organization\", \u0026organizations.IAMMemberArgs{\n\t\t\tCondition: \u0026organizations.IAMMemberConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IAMMember;\nimport com.pulumi.gcp.organizations.IAMMemberArgs;\nimport com.pulumi.gcp.organizations.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var organization = new IAMMember(\"organization\", IAMMemberArgs.builder() \n .condition(IAMMemberConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .member(\"user:jane@example.com\")\n .orgId(\"your-organization-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IAMMember\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n member: user:jane@example.com\n orgId: your-organization-id\n role: roles/editor\n```\n\n## google\\_organization\\_iam\\_audit\\_config\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst organization = new gcp.organizations.IamAuditConfig(\"organization\", {\n auditLogConfigs: [\n {\n logType: \"ADMIN_READ\",\n },\n {\n exemptedMembers: [\"user:joebloggs@hashicorp.com\"],\n logType: \"DATA_READ\",\n },\n ],\n orgId: \"your-organization-id\",\n service: \"allServices\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\norganization = gcp.organizations.IamAuditConfig(\"organization\",\n audit_log_configs=[\n gcp.organizations.IamAuditConfigAuditLogConfigArgs(\n log_type=\"ADMIN_READ\",\n ),\n gcp.organizations.IamAuditConfigAuditLogConfigArgs(\n exempted_members=[\"user:joebloggs@hashicorp.com\"],\n log_type=\"DATA_READ\",\n ),\n ],\n org_id=\"your-organization-id\",\n service=\"allServices\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var organization = new Gcp.Organizations.IamAuditConfig(\"organization\", new()\n {\n AuditLogConfigs = new[]\n {\n new Gcp.Organizations.Inputs.IamAuditConfigAuditLogConfigArgs\n {\n LogType = \"ADMIN_READ\",\n },\n new Gcp.Organizations.Inputs.IamAuditConfigAuditLogConfigArgs\n {\n ExemptedMembers = new[]\n {\n \"user:joebloggs@hashicorp.com\",\n },\n LogType = \"DATA_READ\",\n },\n },\n OrgId = \"your-organization-id\",\n Service = \"allServices\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIamAuditConfig(ctx, \"organization\", \u0026organizations.IamAuditConfigArgs{\n\t\t\tAuditLogConfigs: organizations.IamAuditConfigAuditLogConfigArray{\n\t\t\t\t\u0026organizations.IamAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tLogType: pulumi.String(\"ADMIN_READ\"),\n\t\t\t\t},\n\t\t\t\t\u0026organizations.IamAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tExemptedMembers: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"user:joebloggs@hashicorp.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tLogType: pulumi.String(\"DATA_READ\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\n\t\t\tService: pulumi.String(\"allServices\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IamAuditConfig;\nimport com.pulumi.gcp.organizations.IamAuditConfigArgs;\nimport com.pulumi.gcp.organizations.inputs.IamAuditConfigAuditLogConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var organization = new IamAuditConfig(\"organization\", IamAuditConfigArgs.builder() \n .auditLogConfigs( \n IamAuditConfigAuditLogConfigArgs.builder()\n .logType(\"ADMIN_READ\")\n .build(),\n IamAuditConfigAuditLogConfigArgs.builder()\n .exemptedMembers(\"user:joebloggs@hashicorp.com\")\n .logType(\"DATA_READ\")\n .build())\n .orgId(\"your-organization-id\")\n .service(\"allServices\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IamAuditConfig\n properties:\n auditLogConfigs:\n - logType: ADMIN_READ\n - exemptedMembers:\n - user:joebloggs@hashicorp.com\n logType: DATA_READ\n orgId: your-organization-id\n service: allServices\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `org_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMMember:IAMMember my_organization \"your-orgid roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `org_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMMember:IAMMember my_organization \"your-org-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `org_id`.\n\n```sh\n $ pulumi import gcp:organizations/iAMMember:IAMMember my_organization your-org-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMMember:IAMMember my_organization \"your-organization-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:organizations/iAMMember:IAMMember to include the title of condition, e.g. `google_organization_iam_binding.my_organization \"your-org-id roles/{{role_id}} condition-title\"`\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `org_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMMember:IAMMember my_organization \"your-orgid roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `org_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMMember:IAMMember my_organization \"your-org-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `org_id`.\n\n```sh\n $ pulumi import gcp:organizations/iAMMember:IAMMember my_organization your-org-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMMember:IAMMember my_organization \"your-organization-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:organizations/iAMMember:IAMMember to include the title of condition, e.g. `google_organization_iam_binding.my_organization \"your-org-id roles/{{role_id}} condition-title\"`\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:organizations/IAMMemberCondition:IAMMemberCondition", @@ -179531,7 +181070,7 @@ } }, "gcp:organizations/iAMPolicy:IAMPolicy": { - "description": "Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case:\n\n* `gcp.organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached.\n* `gcp.organizations.IAMBinding`: 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 organization are preserved.\n* `gcp.organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved.\n* `gcp.organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service.\n\n\n\u003e **Note:** `gcp.organizations.IAMPolicy` **cannot** be used in conjunction with `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.organizations.IAMBinding` resources **can be** used in conjunction with `gcp.organizations.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_organization\\_iam\\_policy\n\n!\u003e **Warning:** New organizations have several default policies which will,\n without extreme caution, be **overwritten** by use of this resource.\n The safest alternative is to use multiple `gcp.organizations.IAMBinding`\n resources. This resource makes it easy to remove your own access to\n an organization, which will require a call to Google Support to have\n fixed, and can take multiple days to resolve.\n\n\n In general, this resource should only be used with organizations\n fully managed by this provider.I f you do use this resource,\n the best way to be sure that you are not making dangerous changes is to start\n by **importing** your existing policy, and examining the diff very closely.\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst organization = new gcp.organizations.IAMPolicy(\"organization\", {\n orgId: \"your-organization-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\norganization = gcp.organizations.IAMPolicy(\"organization\",\n org_id=\"your-organization-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var organization = new Gcp.Organizations.IAMPolicy(\"organization\", new()\n {\n OrgId = \"your-organization-id\",\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/v6/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/editor\",\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 = organizations.NewIAMPolicy(ctx, \"organization\", \u0026organizations.IAMPolicyArgs{\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\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.organizations.IAMPolicy;\nimport com.pulumi.gcp.organizations.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var organization = new IAMPolicy(\"organization\", IAMPolicyArgs.builder() \n .orgId(\"your-organization-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IAMPolicy\n properties:\n orgId: your-organization-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n role: \"roles/editor\",\n }],\n});\nconst organization = new gcp.organizations.IAMPolicy(\"organization\", {\n orgId: \"your-organization-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n role=\"roles/editor\",\n)])\norganization = gcp.organizations.IAMPolicy(\"organization\",\n org_id=\"your-organization-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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 Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/editor\",\n },\n },\n });\n\n var organization = new Gcp.Organizations.IAMPolicy(\"organization\", new()\n {\n OrgId = \"your-organization-id\",\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/v6/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\tCondition: {\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t},\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\tRole: \"roles/editor\",\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 = organizations.NewIAMPolicy(ctx, \"organization\", \u0026organizations.IAMPolicyArgs{\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\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.organizations.IAMPolicy;\nimport com.pulumi.gcp.organizations.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 .condition(GetIAMPolicyBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .role(\"roles/editor\")\n .build())\n .build());\n\n var organization = new IAMPolicy(\"organization\", IAMPolicyArgs.builder() \n .orgId(\"your-organization-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IAMPolicy\n properties:\n orgId: your-organization-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n role: roles/editor\n```\n\n## google\\_organization\\_iam\\_binding\n\n\u003e **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst organization = new gcp.organizations.IAMBinding(\"organization\", {\n members: [\"user:jane@example.com\"],\n orgId: \"your-organization-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\norganization = gcp.organizations.IAMBinding(\"organization\",\n members=[\"user:jane@example.com\"],\n org_id=\"your-organization-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var organization = new Gcp.Organizations.IAMBinding(\"organization\", new()\n {\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n OrgId = \"your-organization-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIAMBinding(ctx, \"organization\", \u0026organizations.IAMBindingArgs{\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IAMBinding;\nimport com.pulumi.gcp.organizations.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var organization = new IAMBinding(\"organization\", IAMBindingArgs.builder() \n .members(\"user:jane@example.com\")\n .orgId(\"your-organization-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IAMBinding\n properties:\n members:\n - user:jane@example.com\n orgId: your-organization-id\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst organization = new gcp.organizations.IAMBinding(\"organization\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n orgId: \"your-organization-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\norganization = gcp.organizations.IAMBinding(\"organization\",\n condition=gcp.organizations.IAMBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n org_id=\"your-organization-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var organization = new Gcp.Organizations.IAMBinding(\"organization\", new()\n {\n Condition = new Gcp.Organizations.Inputs.IAMBindingConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n OrgId = \"your-organization-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIAMBinding(ctx, \"organization\", \u0026organizations.IAMBindingArgs{\n\t\t\tCondition: \u0026organizations.IAMBindingConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IAMBinding;\nimport com.pulumi.gcp.organizations.IAMBindingArgs;\nimport com.pulumi.gcp.organizations.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var organization = new IAMBinding(\"organization\", IAMBindingArgs.builder() \n .condition(IAMBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .orgId(\"your-organization-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IAMBinding\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n orgId: your-organization-id\n role: roles/editor\n```\n\n## google\\_organization\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst organization = new gcp.organizations.IAMMember(\"organization\", {\n member: \"user:jane@example.com\",\n orgId: \"your-organization-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\norganization = gcp.organizations.IAMMember(\"organization\",\n member=\"user:jane@example.com\",\n org_id=\"your-organization-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var organization = new Gcp.Organizations.IAMMember(\"organization\", new()\n {\n Member = \"user:jane@example.com\",\n OrgId = \"your-organization-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIAMMember(ctx, \"organization\", \u0026organizations.IAMMemberArgs{\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IAMMember;\nimport com.pulumi.gcp.organizations.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var organization = new IAMMember(\"organization\", IAMMemberArgs.builder() \n .member(\"user:jane@example.com\")\n .orgId(\"your-organization-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IAMMember\n properties:\n member: user:jane@example.com\n orgId: your-organization-id\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst organization = new gcp.organizations.IAMMember(\"organization\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n member: \"user:jane@example.com\",\n orgId: \"your-organization-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\norganization = gcp.organizations.IAMMember(\"organization\",\n condition=gcp.organizations.IAMMemberConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n member=\"user:jane@example.com\",\n org_id=\"your-organization-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var organization = new Gcp.Organizations.IAMMember(\"organization\", new()\n {\n Condition = new Gcp.Organizations.Inputs.IAMMemberConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Member = \"user:jane@example.com\",\n OrgId = \"your-organization-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIAMMember(ctx, \"organization\", \u0026organizations.IAMMemberArgs{\n\t\t\tCondition: \u0026organizations.IAMMemberConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IAMMember;\nimport com.pulumi.gcp.organizations.IAMMemberArgs;\nimport com.pulumi.gcp.organizations.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var organization = new IAMMember(\"organization\", IAMMemberArgs.builder() \n .condition(IAMMemberConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .member(\"user:jane@example.com\")\n .orgId(\"your-organization-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IAMMember\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n member: user:jane@example.com\n orgId: your-organization-id\n role: roles/editor\n```\n\n## google\\_organization\\_iam\\_audit\\_config\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst organization = new gcp.organizations.IamAuditConfig(\"organization\", {\n auditLogConfigs: [\n {\n logType: \"ADMIN_READ\",\n },\n {\n exemptedMembers: [\"user:joebloggs@hashicorp.com\"],\n logType: \"DATA_READ\",\n },\n ],\n orgId: \"your-organization-id\",\n service: \"allServices\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\norganization = gcp.organizations.IamAuditConfig(\"organization\",\n audit_log_configs=[\n gcp.organizations.IamAuditConfigAuditLogConfigArgs(\n log_type=\"ADMIN_READ\",\n ),\n gcp.organizations.IamAuditConfigAuditLogConfigArgs(\n exempted_members=[\"user:joebloggs@hashicorp.com\"],\n log_type=\"DATA_READ\",\n ),\n ],\n org_id=\"your-organization-id\",\n service=\"allServices\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var organization = new Gcp.Organizations.IamAuditConfig(\"organization\", new()\n {\n AuditLogConfigs = new[]\n {\n new Gcp.Organizations.Inputs.IamAuditConfigAuditLogConfigArgs\n {\n LogType = \"ADMIN_READ\",\n },\n new Gcp.Organizations.Inputs.IamAuditConfigAuditLogConfigArgs\n {\n ExemptedMembers = new[]\n {\n \"user:joebloggs@hashicorp.com\",\n },\n LogType = \"DATA_READ\",\n },\n },\n OrgId = \"your-organization-id\",\n Service = \"allServices\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIamAuditConfig(ctx, \"organization\", \u0026organizations.IamAuditConfigArgs{\n\t\t\tAuditLogConfigs: organizations.IamAuditConfigAuditLogConfigArray{\n\t\t\t\t\u0026organizations.IamAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tLogType: pulumi.String(\"ADMIN_READ\"),\n\t\t\t\t},\n\t\t\t\t\u0026organizations.IamAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tExemptedMembers: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"user:joebloggs@hashicorp.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tLogType: pulumi.String(\"DATA_READ\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\n\t\t\tService: pulumi.String(\"allServices\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IamAuditConfig;\nimport com.pulumi.gcp.organizations.IamAuditConfigArgs;\nimport com.pulumi.gcp.organizations.inputs.IamAuditConfigAuditLogConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var organization = new IamAuditConfig(\"organization\", IamAuditConfigArgs.builder() \n .auditLogConfigs( \n IamAuditConfigAuditLogConfigArgs.builder()\n .logType(\"ADMIN_READ\")\n .build(),\n IamAuditConfigAuditLogConfigArgs.builder()\n .exemptedMembers(\"user:joebloggs@hashicorp.com\")\n .logType(\"DATA_READ\")\n .build())\n .orgId(\"your-organization-id\")\n .service(\"allServices\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n organization:\n type: gcp:organizations:IamAuditConfig\n properties:\n auditLogConfigs:\n - logType: ADMIN_READ\n - exemptedMembers:\n - user:joebloggs@hashicorp.com\n logType: DATA_READ\n orgId: your-organization-id\n service: allServices\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `org_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMPolicy:IAMPolicy my_organization \"your-orgid roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `org_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMPolicy:IAMPolicy my_organization \"your-org-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `org_id`.\n\n```sh\n $ pulumi import gcp:organizations/iAMPolicy:IAMPolicy my_organization your-org-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMPolicy:IAMPolicy my_organization \"your-organization-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:organizations/iAMPolicy:IAMPolicy to include the title of condition, e.g. `google_organization_iam_binding.my_organization \"your-org-id roles/{{role_id}} condition-title\"`\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `org_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMPolicy:IAMPolicy my_organization \"your-orgid roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `org_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMPolicy:IAMPolicy my_organization \"your-org-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `org_id`.\n\n```sh\n $ pulumi import gcp:organizations/iAMPolicy:IAMPolicy my_organization your-org-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iAMPolicy:IAMPolicy my_organization \"your-organization-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:organizations/iAMPolicy:IAMPolicy to include the title of condition, e.g. `google_organization_iam_binding.my_organization \"your-org-id roles/{{role_id}} condition-title\"`\n```\n\n ", "properties": { "etag": { "type": "string", @@ -179587,7 +181126,7 @@ } }, "gcp:organizations/iamAuditConfig:IamAuditConfig": { - "description": "Allows management of audit logging config for a given service for a Google Cloud Platform Organization.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst config = new gcp.organizations.IamAuditConfig(\"config\", {\n auditLogConfigs: [{\n exemptedMembers: [\"user:joebloggs@hashicorp.com\"],\n logType: \"DATA_READ\",\n }],\n orgId: \"your-organization-id\",\n service: \"allServices\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nconfig = gcp.organizations.IamAuditConfig(\"config\",\n audit_log_configs=[gcp.organizations.IamAuditConfigAuditLogConfigArgs(\n exempted_members=[\"user:joebloggs@hashicorp.com\"],\n log_type=\"DATA_READ\",\n )],\n org_id=\"your-organization-id\",\n service=\"allServices\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var config = new Gcp.Organizations.IamAuditConfig(\"config\", new()\n {\n AuditLogConfigs = new[]\n {\n new Gcp.Organizations.Inputs.IamAuditConfigAuditLogConfigArgs\n {\n ExemptedMembers = new[]\n {\n \"user:joebloggs@hashicorp.com\",\n },\n LogType = \"DATA_READ\",\n },\n },\n OrgId = \"your-organization-id\",\n Service = \"allServices\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewIamAuditConfig(ctx, \"config\", \u0026organizations.IamAuditConfigArgs{\n\t\t\tAuditLogConfigs: organizations.IamAuditConfigAuditLogConfigArray{\n\t\t\t\t\u0026organizations.IamAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tExemptedMembers: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"user:joebloggs@hashicorp.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tLogType: pulumi.String(\"DATA_READ\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tOrgId: pulumi.String(\"your-organization-id\"),\n\t\t\tService: pulumi.String(\"allServices\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.IamAuditConfig;\nimport com.pulumi.gcp.organizations.IamAuditConfigArgs;\nimport com.pulumi.gcp.organizations.inputs.IamAuditConfigAuditLogConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var config = new IamAuditConfig(\"config\", IamAuditConfigArgs.builder() \n .auditLogConfigs(IamAuditConfigAuditLogConfigArgs.builder()\n .exemptedMembers(\"user:joebloggs@hashicorp.com\")\n .logType(\"DATA_READ\")\n .build())\n .orgId(\"your-organization-id\")\n .service(\"allServices\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n config:\n type: gcp:organizations:IamAuditConfig\n properties:\n auditLogConfigs:\n - exemptedMembers:\n - user:joebloggs@hashicorp.com\n logType: DATA_READ\n orgId: your-organization-id\n service: allServices\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nIAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig config \"your-organization-id foo.googleapis.com\"\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `org_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization \"your-orgid roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `org_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization \"your-org-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `org_id`.\n\n```sh\n $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization your-org-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization \"your-organization-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig to include the title of condition, e.g. `google_organization_iam_binding.my_organization \"your-org-id roles/{{role_id}} condition-title\"`\n```\n\n ", "properties": { "auditLogConfigs": { "type": "array", @@ -179598,11 +181137,11 @@ }, "etag": { "type": "string", - "description": "The etag of iam policy\n" + "description": "(Computed) The etag of the organization's IAM policy.\n" }, "orgId": { "type": "string", - "description": "The numeric ID of the organization in which you want to manage the audit logging config.\n" + "description": "The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider.\nRequired for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it\nwill not be inferred from the provider.\n" }, "service": { "type": "string", @@ -179625,7 +181164,7 @@ }, "orgId": { "type": "string", - "description": "The numeric ID of the organization in which you want to manage the audit logging config.\n", + "description": "The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider.\nRequired for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it\nwill not be inferred from the provider.\n", "willReplaceOnChanges": true }, "service": { @@ -179650,11 +181189,11 @@ }, "etag": { "type": "string", - "description": "The etag of iam policy\n" + "description": "(Computed) The etag of the organization's IAM policy.\n" }, "orgId": { "type": "string", - "description": "The numeric ID of the organization in which you want to manage the audit logging config.\n", + "description": "The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider.\nRequired for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it\nwill not be inferred from the provider.\n", "willReplaceOnChanges": true }, "service": { @@ -179782,15 +181321,15 @@ } }, "gcp:organizations/project:Project": { - "description": "Allows creation and management of a Google Cloud Platform project.\n\nProjects created with this resource must be associated with an Organization.\nSee the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details.\n\nThe user or service account that is running this provider when creating a `gcp.organizations.Project`\nresource must have `roles/resourcemanager.projectCreator` on the specified organization. See the\n[Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org)\ndoc for more information.\n\n\u003e This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account.\n\nTo get more information about projects, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects)\n* How-to Guides\n * [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myProject = new gcp.organizations.Project(\"myProject\", {\n orgId: \"1234567\",\n projectId: \"your-project-id\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_project = gcp.organizations.Project(\"myProject\",\n org_id=\"1234567\",\n project_id=\"your-project-id\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myProject = new Gcp.Organizations.Project(\"myProject\", new()\n {\n OrgId = \"1234567\",\n ProjectId = \"your-project-id\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewProject(ctx, \"myProject\", \u0026organizations.ProjectArgs{\n\t\t\tOrgId: pulumi.String(\"1234567\"),\n\t\t\tProjectId: pulumi.String(\"your-project-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.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var myProject = new Project(\"myProject\", ProjectArgs.builder() \n .orgId(\"1234567\")\n .projectId(\"your-project-id\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myProject:\n type: gcp:organizations:Project\n properties:\n orgId: '1234567'\n projectId: your-project-id\n```\n\nTo create a project under a specific folder\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst department1 = new gcp.organizations.Folder(\"department1\", {\n displayName: \"Department 1\",\n parent: \"organizations/1234567\",\n});\nconst myProject_in_a_folder = new gcp.organizations.Project(\"myProject-in-a-folder\", {\n projectId: \"your-project-id\",\n folderId: department1.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndepartment1 = gcp.organizations.Folder(\"department1\",\n display_name=\"Department 1\",\n parent=\"organizations/1234567\")\nmy_project_in_a_folder = gcp.organizations.Project(\"myProject-in-a-folder\",\n project_id=\"your-project-id\",\n folder_id=department1.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var department1 = new Gcp.Organizations.Folder(\"department1\", new()\n {\n DisplayName = \"Department 1\",\n Parent = \"organizations/1234567\",\n });\n\n var myProject_in_a_folder = new Gcp.Organizations.Project(\"myProject-in-a-folder\", new()\n {\n ProjectId = \"your-project-id\",\n FolderId = department1.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdepartment1, err := organizations.NewFolder(ctx, \"department1\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"Department 1\"),\n\t\t\tParent: pulumi.String(\"organizations/1234567\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.NewProject(ctx, \"myProject-in-a-folder\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"your-project-id\"),\n\t\t\tFolderId: department1.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.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var department1 = new Folder(\"department1\", FolderArgs.builder() \n .displayName(\"Department 1\")\n .parent(\"organizations/1234567\")\n .build());\n\n var myProject_in_a_folder = new Project(\"myProject-in-a-folder\", ProjectArgs.builder() \n .projectId(\"your-project-id\")\n .folderId(department1.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myProject-in-a-folder:\n type: gcp:organizations:Project\n properties:\n projectId: your-project-id\n folderId: ${department1.name}\n department1:\n type: gcp:organizations:Folder\n properties:\n displayName: Department 1\n parent: organizations/1234567\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nProjects can be imported using the `project_id`, e.g.\n\n```sh\n $ pulumi import gcp:organizations/project:Project my_project your-project-id\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myProject = new gcp.organizations.Project(\"myProject\", {\n orgId: \"1234567\",\n projectId: \"your-project-id\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_project = gcp.organizations.Project(\"myProject\",\n org_id=\"1234567\",\n project_id=\"your-project-id\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myProject = new Gcp.Organizations.Project(\"myProject\", new()\n {\n OrgId = \"1234567\",\n ProjectId = \"your-project-id\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewProject(ctx, \"myProject\", \u0026organizations.ProjectArgs{\n\t\t\tOrgId: pulumi.String(\"1234567\"),\n\t\t\tProjectId: pulumi.String(\"your-project-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.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var myProject = new Project(\"myProject\", ProjectArgs.builder() \n .orgId(\"1234567\")\n .projectId(\"your-project-id\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myProject:\n type: gcp:organizations:Project\n properties:\n orgId: '1234567'\n projectId: your-project-id\n```\n\nTo create a project under a specific folder\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst department1 = new gcp.organizations.Folder(\"department1\", {\n displayName: \"Department 1\",\n parent: \"organizations/1234567\",\n});\nconst myProject_in_a_folder = new gcp.organizations.Project(\"myProject-in-a-folder\", {\n projectId: \"your-project-id\",\n folderId: department1.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndepartment1 = gcp.organizations.Folder(\"department1\",\n display_name=\"Department 1\",\n parent=\"organizations/1234567\")\nmy_project_in_a_folder = gcp.organizations.Project(\"myProject-in-a-folder\",\n project_id=\"your-project-id\",\n folder_id=department1.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var department1 = new Gcp.Organizations.Folder(\"department1\", new()\n {\n DisplayName = \"Department 1\",\n Parent = \"organizations/1234567\",\n });\n\n var myProject_in_a_folder = new Gcp.Organizations.Project(\"myProject-in-a-folder\", new()\n {\n ProjectId = \"your-project-id\",\n FolderId = department1.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdepartment1, err := organizations.NewFolder(ctx, \"department1\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"Department 1\"),\n\t\t\tParent: pulumi.String(\"organizations/1234567\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.NewProject(ctx, \"myProject-in-a-folder\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"your-project-id\"),\n\t\t\tFolderId: department1.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.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var department1 = new Folder(\"department1\", FolderArgs.builder() \n .displayName(\"Department 1\")\n .parent(\"organizations/1234567\")\n .build());\n\n var myProject_in_a_folder = new Project(\"myProject-in-a-folder\", ProjectArgs.builder() \n .projectId(\"your-project-id\")\n .folderId(department1.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myProject-in-a-folder:\n type: gcp:organizations:Project\n properties:\n projectId: your-project-id\n folderId: ${department1.name}\n department1:\n type: gcp:organizations:Folder\n properties:\n displayName: Department 1\n parent: organizations/1234567\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nProjects can be imported using the `project_id`, e.g.\n\n```sh\n $ pulumi import gcp:organizations/project:Project my_project your-project-id\n```\n\n ", "properties": { "autoCreateNetwork": { "type": "boolean", - "description": "Create the 'default' network automatically. Default `true`.\nIf set to `false`, the default network will be deleted. Note that, for quota purposes, you\nwill still need to have 1 network slot available to create the project successfully, even if\nyou set `auto_create_network` to `false`, since the network will exist momentarily.\n" + "description": "Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note\nthat, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even\nif you set auto_create_network to false, since the network will exist momentarily.\n" }, "billingAccount": { "type": "string", - "description": "The alphanumeric ID of the billing account this project\nbelongs to. The user or service account performing this operation with the provider\nmust have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account.\nSee [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access)\nfor more details.\n" + "description": "The alphanumeric ID of the billing account this project belongs to. The user or service account performing this\noperation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization.\nSee Google Cloud Billing API Access Control for more details.\n" }, "folderId": { "type": "string", @@ -179821,7 +181360,7 @@ }, "skipDelete": { "type": "boolean", - "description": "If true, the resource can be deleted\nwithout deleting the Project via the Google API.\n" + "description": "If true, the Terraform resource can be deleted without deleting the Project via the Google API.\n" } }, "required": [ @@ -179833,11 +181372,11 @@ "inputProperties": { "autoCreateNetwork": { "type": "boolean", - "description": "Create the 'default' network automatically. Default `true`.\nIf set to `false`, the default network will be deleted. Note that, for quota purposes, you\nwill still need to have 1 network slot available to create the project successfully, even if\nyou set `auto_create_network` to `false`, since the network will exist momentarily.\n" + "description": "Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note\nthat, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even\nif you set auto_create_network to false, since the network will exist momentarily.\n" }, "billingAccount": { "type": "string", - "description": "The alphanumeric ID of the billing account this project\nbelongs to. The user or service account performing this operation with the provider\nmust have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account.\nSee [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access)\nfor more details.\n" + "description": "The alphanumeric ID of the billing account this project belongs to. The user or service account performing this\noperation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization.\nSee Google Cloud Billing API Access Control for more details.\n" }, "folderId": { "type": "string", @@ -179865,7 +181404,7 @@ }, "skipDelete": { "type": "boolean", - "description": "If true, the resource can be deleted\nwithout deleting the Project via the Google API.\n" + "description": "If true, the Terraform resource can be deleted without deleting the Project via the Google API.\n" } }, "requiredInputs": [ @@ -179876,11 +181415,11 @@ "properties": { "autoCreateNetwork": { "type": "boolean", - "description": "Create the 'default' network automatically. Default `true`.\nIf set to `false`, the default network will be deleted. Note that, for quota purposes, you\nwill still need to have 1 network slot available to create the project successfully, even if\nyou set `auto_create_network` to `false`, since the network will exist momentarily.\n" + "description": "Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note\nthat, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even\nif you set auto_create_network to false, since the network will exist momentarily.\n" }, "billingAccount": { "type": "string", - "description": "The alphanumeric ID of the billing account this project\nbelongs to. The user or service account performing this operation with the provider\nmust have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account.\nSee [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access)\nfor more details.\n" + "description": "The alphanumeric ID of the billing account this project belongs to. The user or service account performing this\noperation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization.\nSee Google Cloud Billing API Access Control for more details.\n" }, "folderId": { "type": "string", @@ -179912,7 +181451,7 @@ }, "skipDelete": { "type": "boolean", - "description": "If true, the resource can be deleted\nwithout deleting the Project via the Google API.\n" + "description": "If true, the Terraform resource can be deleted without deleting the Project via the Google API.\n" } }, "type": "object" @@ -180136,7 +181675,7 @@ } }, "gcp:osconfig/guestPolicies:GuestPolicies": { - "description": "An OS Config resource representing a guest configuration policy. These policies represent\nthe desired state for VM instance guest environments including packages to install or remove,\npackage repository configurations, and software to install.\n\nTo get more information about GuestPolicies, see:\n\n* [API documentation](https://cloud.google.com/compute/docs/osconfig/rest)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/os-config-management)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Os Config Guest Policies Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myImage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst foobar = new gcp.compute.Instance(\"foobar\", {\n machineType: \"e2-medium\",\n zone: \"us-central1-a\",\n canIpForward: false,\n tags: [\n \"foo\",\n \"bar\",\n ],\n bootDisk: {\n initializeParams: {\n image: myImage.then(myImage =\u003e myImage.selfLink),\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n metadata: {\n foo: \"bar\",\n },\n}, {\n provider: google_beta,\n});\nconst guestPolicies = new gcp.osconfig.GuestPolicies(\"guestPolicies\", {\n guestPolicyId: \"guest-policy\",\n assignment: {\n instances: [foobar.id],\n },\n packages: [{\n name: \"my-package\",\n desiredState: \"UPDATED\",\n }],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_image = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\nfoobar = gcp.compute.Instance(\"foobar\",\n machine_type=\"e2-medium\",\n zone=\"us-central1-a\",\n can_ip_forward=False,\n tags=[\n \"foo\",\n \"bar\",\n ],\n boot_disk=gcp.compute.InstanceBootDiskArgs(\n initialize_params=gcp.compute.InstanceBootDiskInitializeParamsArgs(\n image=my_image.self_link,\n ),\n ),\n network_interfaces=[gcp.compute.InstanceNetworkInterfaceArgs(\n network=\"default\",\n )],\n metadata={\n \"foo\": \"bar\",\n },\n opts=pulumi.ResourceOptions(provider=google_beta))\nguest_policies = gcp.osconfig.GuestPolicies(\"guestPolicies\",\n guest_policy_id=\"guest-policy\",\n assignment=gcp.osconfig.GuestPoliciesAssignmentArgs(\n instances=[foobar.id],\n ),\n packages=[gcp.osconfig.GuestPoliciesPackageArgs(\n name=\"my-package\",\n desired_state=\"UPDATED\",\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myImage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var foobar = new Gcp.Compute.Instance(\"foobar\", new()\n {\n MachineType = \"e2-medium\",\n Zone = \"us-central1-a\",\n CanIpForward = false,\n Tags = new[]\n {\n \"foo\",\n \"bar\",\n },\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = myImage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n Metadata = \n {\n { \"foo\", \"bar\" },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var guestPolicies = new Gcp.OsConfig.GuestPolicies(\"guestPolicies\", new()\n {\n GuestPolicyId = \"guest-policy\",\n Assignment = new Gcp.OsConfig.Inputs.GuestPoliciesAssignmentArgs\n {\n Instances = new[]\n {\n foobar.Id,\n },\n },\n Packages = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesPackageArgs\n {\n Name = \"my-package\",\n DesiredState = \"UPDATED\",\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyImage, 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\tfoobar, err := compute.NewInstance(ctx, \"foobar\", \u0026compute.InstanceArgs{\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tCanIpForward: pulumi.Bool(false),\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"foo\"),\n\t\t\t\tpulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: *pulumi.String(myImage.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\tMetadata: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = osconfig.NewGuestPolicies(ctx, \"guestPolicies\", \u0026osconfig.GuestPoliciesArgs{\n\t\t\tGuestPolicyId: pulumi.String(\"guest-policy\"),\n\t\t\tAssignment: \u0026osconfig.GuestPoliciesAssignmentArgs{\n\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\tfoobar.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPackages: osconfig.GuestPoliciesPackageArray{\n\t\t\t\t\u0026osconfig.GuestPoliciesPackageArgs{\n\t\t\t\t\tName: pulumi.String(\"my-package\"),\n\t\t\t\t\tDesiredState: pulumi.String(\"UPDATED\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.osconfig.GuestPolicies;\nimport com.pulumi.gcp.osconfig.GuestPoliciesArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesAssignmentArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesPackageArgs;\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 myImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var foobar = new Instance(\"foobar\", InstanceArgs.builder() \n .machineType(\"e2-medium\")\n .zone(\"us-central1-a\")\n .canIpForward(false)\n .tags( \n \"foo\",\n \"bar\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(myImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .metadata(Map.of(\"foo\", \"bar\"))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var guestPolicies = new GuestPolicies(\"guestPolicies\", GuestPoliciesArgs.builder() \n .guestPolicyId(\"guest-policy\")\n .assignment(GuestPoliciesAssignmentArgs.builder()\n .instances(foobar.id())\n .build())\n .packages(GuestPoliciesPackageArgs.builder()\n .name(\"my-package\")\n .desiredState(\"UPDATED\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n foobar:\n type: gcp:compute:Instance\n properties:\n machineType: e2-medium\n zone: us-central1-a\n canIpForward: false\n tags:\n - foo\n - bar\n bootDisk:\n initializeParams:\n image: ${myImage.selfLink}\n networkInterfaces:\n - network: default\n metadata:\n foo: bar\n options:\n provider: ${[\"google-beta\"]}\n guestPolicies:\n type: gcp:osconfig:GuestPolicies\n properties:\n guestPolicyId: guest-policy\n assignment:\n instances:\n - ${foobar.id}\n packages:\n - name: my-package\n desiredState: UPDATED\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n myImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% example %}}\n### Os Config Guest Policies Packages\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst guestPolicies = new gcp.osconfig.GuestPolicies(\"guestPolicies\", {\n guestPolicyId: \"guest-policy\",\n assignment: {\n groupLabels: [\n {\n labels: {\n color: \"red\",\n env: \"test\",\n },\n },\n {\n labels: {\n color: \"blue\",\n env: \"test\",\n },\n },\n ],\n },\n packages: [\n {\n name: \"my-package\",\n desiredState: \"INSTALLED\",\n },\n {\n name: \"bad-package-1\",\n desiredState: \"REMOVED\",\n },\n {\n name: \"bad-package-2\",\n desiredState: \"REMOVED\",\n manager: \"APT\",\n },\n ],\n packageRepositories: [\n {\n apt: {\n uri: \"https://packages.cloud.google.com/apt\",\n archiveType: \"DEB\",\n distribution: \"cloud-sdk-stretch\",\n components: [\"main\"],\n },\n },\n {\n yum: {\n id: \"google-cloud-sdk\",\n displayName: \"Google Cloud SDK\",\n baseUrl: \"https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64\",\n gpgKeys: [\n \"https://packages.cloud.google.com/yum/doc/yum-key.gpg\",\n \"https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg\",\n ],\n },\n },\n ],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nguest_policies = gcp.osconfig.GuestPolicies(\"guestPolicies\",\n guest_policy_id=\"guest-policy\",\n assignment=gcp.osconfig.GuestPoliciesAssignmentArgs(\n group_labels=[\n gcp.osconfig.GuestPoliciesAssignmentGroupLabelArgs(\n labels={\n \"color\": \"red\",\n \"env\": \"test\",\n },\n ),\n gcp.osconfig.GuestPoliciesAssignmentGroupLabelArgs(\n labels={\n \"color\": \"blue\",\n \"env\": \"test\",\n },\n ),\n ],\n ),\n packages=[\n gcp.osconfig.GuestPoliciesPackageArgs(\n name=\"my-package\",\n desired_state=\"INSTALLED\",\n ),\n gcp.osconfig.GuestPoliciesPackageArgs(\n name=\"bad-package-1\",\n desired_state=\"REMOVED\",\n ),\n gcp.osconfig.GuestPoliciesPackageArgs(\n name=\"bad-package-2\",\n desired_state=\"REMOVED\",\n manager=\"APT\",\n ),\n ],\n package_repositories=[\n gcp.osconfig.GuestPoliciesPackageRepositoryArgs(\n apt=gcp.osconfig.GuestPoliciesPackageRepositoryAptArgs(\n uri=\"https://packages.cloud.google.com/apt\",\n archive_type=\"DEB\",\n distribution=\"cloud-sdk-stretch\",\n components=[\"main\"],\n ),\n ),\n gcp.osconfig.GuestPoliciesPackageRepositoryArgs(\n yum=gcp.osconfig.GuestPoliciesPackageRepositoryYumArgs(\n id=\"google-cloud-sdk\",\n display_name=\"Google Cloud SDK\",\n base_url=\"https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64\",\n gpg_keys=[\n \"https://packages.cloud.google.com/yum/doc/yum-key.gpg\",\n \"https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg\",\n ],\n ),\n ),\n ],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var guestPolicies = new Gcp.OsConfig.GuestPolicies(\"guestPolicies\", new()\n {\n GuestPolicyId = \"guest-policy\",\n Assignment = new Gcp.OsConfig.Inputs.GuestPoliciesAssignmentArgs\n {\n GroupLabels = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesAssignmentGroupLabelArgs\n {\n Labels = \n {\n { \"color\", \"red\" },\n { \"env\", \"test\" },\n },\n },\n new Gcp.OsConfig.Inputs.GuestPoliciesAssignmentGroupLabelArgs\n {\n Labels = \n {\n { \"color\", \"blue\" },\n { \"env\", \"test\" },\n },\n },\n },\n },\n Packages = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesPackageArgs\n {\n Name = \"my-package\",\n DesiredState = \"INSTALLED\",\n },\n new Gcp.OsConfig.Inputs.GuestPoliciesPackageArgs\n {\n Name = \"bad-package-1\",\n DesiredState = \"REMOVED\",\n },\n new Gcp.OsConfig.Inputs.GuestPoliciesPackageArgs\n {\n Name = \"bad-package-2\",\n DesiredState = \"REMOVED\",\n Manager = \"APT\",\n },\n },\n PackageRepositories = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesPackageRepositoryArgs\n {\n Apt = new Gcp.OsConfig.Inputs.GuestPoliciesPackageRepositoryAptArgs\n {\n Uri = \"https://packages.cloud.google.com/apt\",\n ArchiveType = \"DEB\",\n Distribution = \"cloud-sdk-stretch\",\n Components = new[]\n {\n \"main\",\n },\n },\n },\n new Gcp.OsConfig.Inputs.GuestPoliciesPackageRepositoryArgs\n {\n Yum = new Gcp.OsConfig.Inputs.GuestPoliciesPackageRepositoryYumArgs\n {\n Id = \"google-cloud-sdk\",\n DisplayName = \"Google Cloud SDK\",\n BaseUrl = \"https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64\",\n GpgKeys = new[]\n {\n \"https://packages.cloud.google.com/yum/doc/yum-key.gpg\",\n \"https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg\",\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := osconfig.NewGuestPolicies(ctx, \"guestPolicies\", \u0026osconfig.GuestPoliciesArgs{\n\t\t\tGuestPolicyId: pulumi.String(\"guest-policy\"),\n\t\t\tAssignment: \u0026osconfig.GuestPoliciesAssignmentArgs{\n\t\t\t\tGroupLabels: osconfig.GuestPoliciesAssignmentGroupLabelArray{\n\t\t\t\t\t\u0026osconfig.GuestPoliciesAssignmentGroupLabelArgs{\n\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\"color\": pulumi.String(\"red\"),\n\t\t\t\t\t\t\t\"env\": pulumi.String(\"test\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026osconfig.GuestPoliciesAssignmentGroupLabelArgs{\n\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\"color\": pulumi.String(\"blue\"),\n\t\t\t\t\t\t\t\"env\": pulumi.String(\"test\"),\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\tPackages: osconfig.GuestPoliciesPackageArray{\n\t\t\t\t\u0026osconfig.GuestPoliciesPackageArgs{\n\t\t\t\t\tName: pulumi.String(\"my-package\"),\n\t\t\t\t\tDesiredState: pulumi.String(\"INSTALLED\"),\n\t\t\t\t},\n\t\t\t\t\u0026osconfig.GuestPoliciesPackageArgs{\n\t\t\t\t\tName: pulumi.String(\"bad-package-1\"),\n\t\t\t\t\tDesiredState: pulumi.String(\"REMOVED\"),\n\t\t\t\t},\n\t\t\t\t\u0026osconfig.GuestPoliciesPackageArgs{\n\t\t\t\t\tName: pulumi.String(\"bad-package-2\"),\n\t\t\t\t\tDesiredState: pulumi.String(\"REMOVED\"),\n\t\t\t\t\tManager: pulumi.String(\"APT\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPackageRepositories: osconfig.GuestPoliciesPackageRepositoryArray{\n\t\t\t\t\u0026osconfig.GuestPoliciesPackageRepositoryArgs{\n\t\t\t\t\tApt: \u0026osconfig.GuestPoliciesPackageRepositoryAptArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://packages.cloud.google.com/apt\"),\n\t\t\t\t\t\tArchiveType: pulumi.String(\"DEB\"),\n\t\t\t\t\t\tDistribution: pulumi.String(\"cloud-sdk-stretch\"),\n\t\t\t\t\t\tComponents: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"main\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026osconfig.GuestPoliciesPackageRepositoryArgs{\n\t\t\t\t\tYum: \u0026osconfig.GuestPoliciesPackageRepositoryYumArgs{\n\t\t\t\t\t\tId: pulumi.String(\"google-cloud-sdk\"),\n\t\t\t\t\t\tDisplayName: pulumi.String(\"Google Cloud SDK\"),\n\t\t\t\t\t\tBaseUrl: pulumi.String(\"https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64\"),\n\t\t\t\t\t\tGpgKeys: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"https://packages.cloud.google.com/yum/doc/yum-key.gpg\"),\n\t\t\t\t\t\t\tpulumi.String(\"https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg\"),\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.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.osconfig.GuestPolicies;\nimport com.pulumi.gcp.osconfig.GuestPoliciesArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesAssignmentArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesPackageArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesPackageRepositoryArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesPackageRepositoryAptArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesPackageRepositoryYumArgs;\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 guestPolicies = new GuestPolicies(\"guestPolicies\", GuestPoliciesArgs.builder() \n .guestPolicyId(\"guest-policy\")\n .assignment(GuestPoliciesAssignmentArgs.builder()\n .groupLabels( \n GuestPoliciesAssignmentGroupLabelArgs.builder()\n .labels(Map.ofEntries(\n Map.entry(\"color\", \"red\"),\n Map.entry(\"env\", \"test\")\n ))\n .build(),\n GuestPoliciesAssignmentGroupLabelArgs.builder()\n .labels(Map.ofEntries(\n Map.entry(\"color\", \"blue\"),\n Map.entry(\"env\", \"test\")\n ))\n .build())\n .build())\n .packages( \n GuestPoliciesPackageArgs.builder()\n .name(\"my-package\")\n .desiredState(\"INSTALLED\")\n .build(),\n GuestPoliciesPackageArgs.builder()\n .name(\"bad-package-1\")\n .desiredState(\"REMOVED\")\n .build(),\n GuestPoliciesPackageArgs.builder()\n .name(\"bad-package-2\")\n .desiredState(\"REMOVED\")\n .manager(\"APT\")\n .build())\n .packageRepositories( \n GuestPoliciesPackageRepositoryArgs.builder()\n .apt(GuestPoliciesPackageRepositoryAptArgs.builder()\n .uri(\"https://packages.cloud.google.com/apt\")\n .archiveType(\"DEB\")\n .distribution(\"cloud-sdk-stretch\")\n .components(\"main\")\n .build())\n .build(),\n GuestPoliciesPackageRepositoryArgs.builder()\n .yum(GuestPoliciesPackageRepositoryYumArgs.builder()\n .id(\"google-cloud-sdk\")\n .displayName(\"Google Cloud SDK\")\n .baseUrl(\"https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64\")\n .gpgKeys( \n \"https://packages.cloud.google.com/yum/doc/yum-key.gpg\",\n \"https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n guestPolicies:\n type: gcp:osconfig:GuestPolicies\n properties:\n guestPolicyId: guest-policy\n assignment:\n groupLabels:\n - labels:\n color: red\n env: test\n - labels:\n color: blue\n env: test\n packages:\n - name: my-package\n desiredState: INSTALLED\n - name: bad-package-1\n desiredState: REMOVED\n - name: bad-package-2\n desiredState: REMOVED\n manager: APT\n packageRepositories:\n - apt:\n uri: https://packages.cloud.google.com/apt\n archiveType: DEB\n distribution: cloud-sdk-stretch\n components:\n - main\n - yum:\n id: google-cloud-sdk\n displayName: Google Cloud SDK\n baseUrl: https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64\n gpgKeys:\n - https://packages.cloud.google.com/yum/doc/yum-key.gpg\n - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Os Config Guest Policies Recipes\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst guestPolicies = new gcp.osconfig.GuestPolicies(\"guestPolicies\", {\n guestPolicyId: \"guest-policy\",\n assignment: {\n zones: [\n \"us-east1-b\",\n \"us-east1-d\",\n ],\n },\n recipes: [{\n name: \"guest-policy-recipe\",\n desiredState: \"INSTALLED\",\n artifacts: [{\n id: \"guest-policy-artifact-id\",\n gcs: {\n bucket: \"my-bucket\",\n object: \"executable.msi\",\n generation: 1546030865175603,\n },\n }],\n installSteps: [{\n msiInstallation: {\n artifactId: \"guest-policy-artifact-id\",\n },\n }],\n }],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nguest_policies = gcp.osconfig.GuestPolicies(\"guestPolicies\",\n guest_policy_id=\"guest-policy\",\n assignment=gcp.osconfig.GuestPoliciesAssignmentArgs(\n zones=[\n \"us-east1-b\",\n \"us-east1-d\",\n ],\n ),\n recipes=[gcp.osconfig.GuestPoliciesRecipeArgs(\n name=\"guest-policy-recipe\",\n desired_state=\"INSTALLED\",\n artifacts=[gcp.osconfig.GuestPoliciesRecipeArtifactArgs(\n id=\"guest-policy-artifact-id\",\n gcs=gcp.osconfig.GuestPoliciesRecipeArtifactGcsArgs(\n bucket=\"my-bucket\",\n object=\"executable.msi\",\n generation=1546030865175603,\n ),\n )],\n install_steps=[gcp.osconfig.GuestPoliciesRecipeInstallStepArgs(\n msi_installation=gcp.osconfig.GuestPoliciesRecipeInstallStepMsiInstallationArgs(\n artifact_id=\"guest-policy-artifact-id\",\n ),\n )],\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var guestPolicies = new Gcp.OsConfig.GuestPolicies(\"guestPolicies\", new()\n {\n GuestPolicyId = \"guest-policy\",\n Assignment = new Gcp.OsConfig.Inputs.GuestPoliciesAssignmentArgs\n {\n Zones = new[]\n {\n \"us-east1-b\",\n \"us-east1-d\",\n },\n },\n Recipes = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesRecipeArgs\n {\n Name = \"guest-policy-recipe\",\n DesiredState = \"INSTALLED\",\n Artifacts = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesRecipeArtifactArgs\n {\n Id = \"guest-policy-artifact-id\",\n Gcs = new Gcp.OsConfig.Inputs.GuestPoliciesRecipeArtifactGcsArgs\n {\n Bucket = \"my-bucket\",\n Object = \"executable.msi\",\n Generation = 1546030865175603,\n },\n },\n },\n InstallSteps = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesRecipeInstallStepArgs\n {\n MsiInstallation = new Gcp.OsConfig.Inputs.GuestPoliciesRecipeInstallStepMsiInstallationArgs\n {\n ArtifactId = \"guest-policy-artifact-id\",\n },\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := osconfig.NewGuestPolicies(ctx, \"guestPolicies\", \u0026osconfig.GuestPoliciesArgs{\n\t\t\tGuestPolicyId: pulumi.String(\"guest-policy\"),\n\t\t\tAssignment: \u0026osconfig.GuestPoliciesAssignmentArgs{\n\t\t\t\tZones: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"us-east1-b\"),\n\t\t\t\t\tpulumi.String(\"us-east1-d\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRecipes: osconfig.GuestPoliciesRecipeArray{\n\t\t\t\t\u0026osconfig.GuestPoliciesRecipeArgs{\n\t\t\t\t\tName: pulumi.String(\"guest-policy-recipe\"),\n\t\t\t\t\tDesiredState: pulumi.String(\"INSTALLED\"),\n\t\t\t\t\tArtifacts: osconfig.GuestPoliciesRecipeArtifactArray{\n\t\t\t\t\t\t\u0026osconfig.GuestPoliciesRecipeArtifactArgs{\n\t\t\t\t\t\t\tId: pulumi.String(\"guest-policy-artifact-id\"),\n\t\t\t\t\t\t\tGcs: \u0026osconfig.GuestPoliciesRecipeArtifactGcsArgs{\n\t\t\t\t\t\t\t\tBucket: pulumi.String(\"my-bucket\"),\n\t\t\t\t\t\t\t\tObject: pulumi.String(\"executable.msi\"),\n\t\t\t\t\t\t\t\tGeneration: pulumi.Int(1546030865175603),\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\tInstallSteps: osconfig.GuestPoliciesRecipeInstallStepArray{\n\t\t\t\t\t\t\u0026osconfig.GuestPoliciesRecipeInstallStepArgs{\n\t\t\t\t\t\t\tMsiInstallation: \u0026osconfig.GuestPoliciesRecipeInstallStepMsiInstallationArgs{\n\t\t\t\t\t\t\t\tArtifactId: pulumi.String(\"guest-policy-artifact-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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.osconfig.GuestPolicies;\nimport com.pulumi.gcp.osconfig.GuestPoliciesArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesAssignmentArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesRecipeArgs;\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 guestPolicies = new GuestPolicies(\"guestPolicies\", GuestPoliciesArgs.builder() \n .guestPolicyId(\"guest-policy\")\n .assignment(GuestPoliciesAssignmentArgs.builder()\n .zones( \n \"us-east1-b\",\n \"us-east1-d\")\n .build())\n .recipes(GuestPoliciesRecipeArgs.builder()\n .name(\"guest-policy-recipe\")\n .desiredState(\"INSTALLED\")\n .artifacts(GuestPoliciesRecipeArtifactArgs.builder()\n .id(\"guest-policy-artifact-id\")\n .gcs(GuestPoliciesRecipeArtifactGcsArgs.builder()\n .bucket(\"my-bucket\")\n .object(\"executable.msi\")\n .generation(1546030865175603)\n .build())\n .build())\n .installSteps(GuestPoliciesRecipeInstallStepArgs.builder()\n .msiInstallation(GuestPoliciesRecipeInstallStepMsiInstallationArgs.builder()\n .artifactId(\"guest-policy-artifact-id\")\n .build())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n guestPolicies:\n type: gcp:osconfig:GuestPolicies\n properties:\n guestPolicyId: guest-policy\n assignment:\n zones:\n - us-east1-b\n - us-east1-d\n recipes:\n - name: guest-policy-recipe\n desiredState: INSTALLED\n artifacts:\n - id: guest-policy-artifact-id\n gcs:\n bucket: my-bucket\n object: executable.msi\n generation: 1.546030865175603e+15\n installSteps:\n - msiInstallation:\n artifactId: guest-policy-artifact-id\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGuestPolicies can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:osconfig/guestPolicies:GuestPolicies default projects/{{project}}/guestPolicies/{{guest_policy_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:osconfig/guestPolicies:GuestPolicies default {{project}}/{{guest_policy_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:osconfig/guestPolicies:GuestPolicies default {{guest_policy_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Os Config Guest Policies Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myImage = gcp.compute.getImage({\n family: \"debian-11\",\n project: \"debian-cloud\",\n});\nconst foobar = new gcp.compute.Instance(\"foobar\", {\n machineType: \"e2-medium\",\n zone: \"us-central1-a\",\n canIpForward: false,\n tags: [\n \"foo\",\n \"bar\",\n ],\n bootDisk: {\n initializeParams: {\n image: myImage.then(myImage =\u003e myImage.selfLink),\n },\n },\n networkInterfaces: [{\n network: \"default\",\n }],\n metadata: {\n foo: \"bar\",\n },\n}, {\n provider: google_beta,\n});\nconst guestPolicies = new gcp.osconfig.GuestPolicies(\"guestPolicies\", {\n guestPolicyId: \"guest-policy\",\n assignment: {\n instances: [foobar.id],\n },\n packages: [{\n name: \"my-package\",\n desiredState: \"UPDATED\",\n }],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_image = gcp.compute.get_image(family=\"debian-11\",\n project=\"debian-cloud\")\nfoobar = gcp.compute.Instance(\"foobar\",\n machine_type=\"e2-medium\",\n zone=\"us-central1-a\",\n can_ip_forward=False,\n tags=[\n \"foo\",\n \"bar\",\n ],\n boot_disk=gcp.compute.InstanceBootDiskArgs(\n initialize_params=gcp.compute.InstanceBootDiskInitializeParamsArgs(\n image=my_image.self_link,\n ),\n ),\n network_interfaces=[gcp.compute.InstanceNetworkInterfaceArgs(\n network=\"default\",\n )],\n metadata={\n \"foo\": \"bar\",\n },\n opts=pulumi.ResourceOptions(provider=google_beta))\nguest_policies = gcp.osconfig.GuestPolicies(\"guestPolicies\",\n guest_policy_id=\"guest-policy\",\n assignment=gcp.osconfig.GuestPoliciesAssignmentArgs(\n instances=[foobar.id],\n ),\n packages=[gcp.osconfig.GuestPoliciesPackageArgs(\n name=\"my-package\",\n desired_state=\"UPDATED\",\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myImage = Gcp.Compute.GetImage.Invoke(new()\n {\n Family = \"debian-11\",\n Project = \"debian-cloud\",\n });\n\n var foobar = new Gcp.Compute.Instance(\"foobar\", new()\n {\n MachineType = \"e2-medium\",\n Zone = \"us-central1-a\",\n CanIpForward = false,\n Tags = new[]\n {\n \"foo\",\n \"bar\",\n },\n BootDisk = new Gcp.Compute.Inputs.InstanceBootDiskArgs\n {\n InitializeParams = new Gcp.Compute.Inputs.InstanceBootDiskInitializeParamsArgs\n {\n Image = myImage.Apply(getImageResult =\u003e getImageResult.SelfLink),\n },\n },\n NetworkInterfaces = new[]\n {\n new Gcp.Compute.Inputs.InstanceNetworkInterfaceArgs\n {\n Network = \"default\",\n },\n },\n Metadata = \n {\n { \"foo\", \"bar\" },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var guestPolicies = new Gcp.OsConfig.GuestPolicies(\"guestPolicies\", new()\n {\n GuestPolicyId = \"guest-policy\",\n Assignment = new Gcp.OsConfig.Inputs.GuestPoliciesAssignmentArgs\n {\n Instances = new[]\n {\n foobar.Id,\n },\n },\n Packages = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesPackageArgs\n {\n Name = \"my-package\",\n DesiredState = \"UPDATED\",\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmyImage, 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\tfoobar, err := compute.NewInstance(ctx, \"foobar\", \u0026compute.InstanceArgs{\n\t\t\tMachineType: pulumi.String(\"e2-medium\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t\tCanIpForward: pulumi.Bool(false),\n\t\t\tTags: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"foo\"),\n\t\t\t\tpulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tBootDisk: \u0026compute.InstanceBootDiskArgs{\n\t\t\t\tInitializeParams: \u0026compute.InstanceBootDiskInitializeParamsArgs{\n\t\t\t\t\tImage: *pulumi.String(myImage.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\tMetadata: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = osconfig.NewGuestPolicies(ctx, \"guestPolicies\", \u0026osconfig.GuestPoliciesArgs{\n\t\t\tGuestPolicyId: pulumi.String(\"guest-policy\"),\n\t\t\tAssignment: \u0026osconfig.GuestPoliciesAssignmentArgs{\n\t\t\t\tInstances: pulumi.StringArray{\n\t\t\t\t\tfoobar.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPackages: osconfig.GuestPoliciesPackageArray{\n\t\t\t\t\u0026osconfig.GuestPoliciesPackageArgs{\n\t\t\t\t\tName: pulumi.String(\"my-package\"),\n\t\t\t\t\tDesiredState: pulumi.String(\"UPDATED\"),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.osconfig.GuestPolicies;\nimport com.pulumi.gcp.osconfig.GuestPoliciesArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesAssignmentArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesPackageArgs;\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 myImage = ComputeFunctions.getImage(GetImageArgs.builder()\n .family(\"debian-11\")\n .project(\"debian-cloud\")\n .build());\n\n var foobar = new Instance(\"foobar\", InstanceArgs.builder() \n .machineType(\"e2-medium\")\n .zone(\"us-central1-a\")\n .canIpForward(false)\n .tags( \n \"foo\",\n \"bar\")\n .bootDisk(InstanceBootDiskArgs.builder()\n .initializeParams(InstanceBootDiskInitializeParamsArgs.builder()\n .image(myImage.applyValue(getImageResult -\u003e getImageResult.selfLink()))\n .build())\n .build())\n .networkInterfaces(InstanceNetworkInterfaceArgs.builder()\n .network(\"default\")\n .build())\n .metadata(Map.of(\"foo\", \"bar\"))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var guestPolicies = new GuestPolicies(\"guestPolicies\", GuestPoliciesArgs.builder() \n .guestPolicyId(\"guest-policy\")\n .assignment(GuestPoliciesAssignmentArgs.builder()\n .instances(foobar.id())\n .build())\n .packages(GuestPoliciesPackageArgs.builder()\n .name(\"my-package\")\n .desiredState(\"UPDATED\")\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n foobar:\n type: gcp:compute:Instance\n properties:\n machineType: e2-medium\n zone: us-central1-a\n canIpForward: false\n tags:\n - foo\n - bar\n bootDisk:\n initializeParams:\n image: ${myImage.selfLink}\n networkInterfaces:\n - network: default\n metadata:\n foo: bar\n options:\n provider: ${[\"google-beta\"]}\n guestPolicies:\n type: gcp:osconfig:GuestPolicies\n properties:\n guestPolicyId: guest-policy\n assignment:\n instances:\n - ${foobar.id}\n packages:\n - name: my-package\n desiredState: UPDATED\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n myImage:\n fn::invoke:\n Function: gcp:compute:getImage\n Arguments:\n family: debian-11\n project: debian-cloud\n```\n{{% /example %}}\n{{% example %}}\n### Os Config Guest Policies Packages\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst guestPolicies = new gcp.osconfig.GuestPolicies(\"guestPolicies\", {\n guestPolicyId: \"guest-policy\",\n assignment: {\n groupLabels: [\n {\n labels: {\n color: \"red\",\n env: \"test\",\n },\n },\n {\n labels: {\n color: \"blue\",\n env: \"test\",\n },\n },\n ],\n },\n packages: [\n {\n name: \"my-package\",\n desiredState: \"INSTALLED\",\n },\n {\n name: \"bad-package-1\",\n desiredState: \"REMOVED\",\n },\n {\n name: \"bad-package-2\",\n desiredState: \"REMOVED\",\n manager: \"APT\",\n },\n ],\n packageRepositories: [\n {\n apt: {\n uri: \"https://packages.cloud.google.com/apt\",\n archiveType: \"DEB\",\n distribution: \"cloud-sdk-stretch\",\n components: [\"main\"],\n },\n },\n {\n yum: {\n id: \"google-cloud-sdk\",\n displayName: \"Google Cloud SDK\",\n baseUrl: \"https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64\",\n gpgKeys: [\n \"https://packages.cloud.google.com/yum/doc/yum-key.gpg\",\n \"https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg\",\n ],\n },\n },\n ],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nguest_policies = gcp.osconfig.GuestPolicies(\"guestPolicies\",\n guest_policy_id=\"guest-policy\",\n assignment=gcp.osconfig.GuestPoliciesAssignmentArgs(\n group_labels=[\n gcp.osconfig.GuestPoliciesAssignmentGroupLabelArgs(\n labels={\n \"color\": \"red\",\n \"env\": \"test\",\n },\n ),\n gcp.osconfig.GuestPoliciesAssignmentGroupLabelArgs(\n labels={\n \"color\": \"blue\",\n \"env\": \"test\",\n },\n ),\n ],\n ),\n packages=[\n gcp.osconfig.GuestPoliciesPackageArgs(\n name=\"my-package\",\n desired_state=\"INSTALLED\",\n ),\n gcp.osconfig.GuestPoliciesPackageArgs(\n name=\"bad-package-1\",\n desired_state=\"REMOVED\",\n ),\n gcp.osconfig.GuestPoliciesPackageArgs(\n name=\"bad-package-2\",\n desired_state=\"REMOVED\",\n manager=\"APT\",\n ),\n ],\n package_repositories=[\n gcp.osconfig.GuestPoliciesPackageRepositoryArgs(\n apt=gcp.osconfig.GuestPoliciesPackageRepositoryAptArgs(\n uri=\"https://packages.cloud.google.com/apt\",\n archive_type=\"DEB\",\n distribution=\"cloud-sdk-stretch\",\n components=[\"main\"],\n ),\n ),\n gcp.osconfig.GuestPoliciesPackageRepositoryArgs(\n yum=gcp.osconfig.GuestPoliciesPackageRepositoryYumArgs(\n id=\"google-cloud-sdk\",\n display_name=\"Google Cloud SDK\",\n base_url=\"https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64\",\n gpg_keys=[\n \"https://packages.cloud.google.com/yum/doc/yum-key.gpg\",\n \"https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg\",\n ],\n ),\n ),\n ],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var guestPolicies = new Gcp.OsConfig.GuestPolicies(\"guestPolicies\", new()\n {\n GuestPolicyId = \"guest-policy\",\n Assignment = new Gcp.OsConfig.Inputs.GuestPoliciesAssignmentArgs\n {\n GroupLabels = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesAssignmentGroupLabelArgs\n {\n Labels = \n {\n { \"color\", \"red\" },\n { \"env\", \"test\" },\n },\n },\n new Gcp.OsConfig.Inputs.GuestPoliciesAssignmentGroupLabelArgs\n {\n Labels = \n {\n { \"color\", \"blue\" },\n { \"env\", \"test\" },\n },\n },\n },\n },\n Packages = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesPackageArgs\n {\n Name = \"my-package\",\n DesiredState = \"INSTALLED\",\n },\n new Gcp.OsConfig.Inputs.GuestPoliciesPackageArgs\n {\n Name = \"bad-package-1\",\n DesiredState = \"REMOVED\",\n },\n new Gcp.OsConfig.Inputs.GuestPoliciesPackageArgs\n {\n Name = \"bad-package-2\",\n DesiredState = \"REMOVED\",\n Manager = \"APT\",\n },\n },\n PackageRepositories = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesPackageRepositoryArgs\n {\n Apt = new Gcp.OsConfig.Inputs.GuestPoliciesPackageRepositoryAptArgs\n {\n Uri = \"https://packages.cloud.google.com/apt\",\n ArchiveType = \"DEB\",\n Distribution = \"cloud-sdk-stretch\",\n Components = new[]\n {\n \"main\",\n },\n },\n },\n new Gcp.OsConfig.Inputs.GuestPoliciesPackageRepositoryArgs\n {\n Yum = new Gcp.OsConfig.Inputs.GuestPoliciesPackageRepositoryYumArgs\n {\n Id = \"google-cloud-sdk\",\n DisplayName = \"Google Cloud SDK\",\n BaseUrl = \"https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64\",\n GpgKeys = new[]\n {\n \"https://packages.cloud.google.com/yum/doc/yum-key.gpg\",\n \"https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg\",\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := osconfig.NewGuestPolicies(ctx, \"guestPolicies\", \u0026osconfig.GuestPoliciesArgs{\n\t\t\tGuestPolicyId: pulumi.String(\"guest-policy\"),\n\t\t\tAssignment: \u0026osconfig.GuestPoliciesAssignmentArgs{\n\t\t\t\tGroupLabels: osconfig.GuestPoliciesAssignmentGroupLabelArray{\n\t\t\t\t\t\u0026osconfig.GuestPoliciesAssignmentGroupLabelArgs{\n\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\"color\": pulumi.String(\"red\"),\n\t\t\t\t\t\t\t\"env\": pulumi.String(\"test\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t\t\u0026osconfig.GuestPoliciesAssignmentGroupLabelArgs{\n\t\t\t\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\t\t\t\"color\": pulumi.String(\"blue\"),\n\t\t\t\t\t\t\t\"env\": pulumi.String(\"test\"),\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\tPackages: osconfig.GuestPoliciesPackageArray{\n\t\t\t\t\u0026osconfig.GuestPoliciesPackageArgs{\n\t\t\t\t\tName: pulumi.String(\"my-package\"),\n\t\t\t\t\tDesiredState: pulumi.String(\"INSTALLED\"),\n\t\t\t\t},\n\t\t\t\t\u0026osconfig.GuestPoliciesPackageArgs{\n\t\t\t\t\tName: pulumi.String(\"bad-package-1\"),\n\t\t\t\t\tDesiredState: pulumi.String(\"REMOVED\"),\n\t\t\t\t},\n\t\t\t\t\u0026osconfig.GuestPoliciesPackageArgs{\n\t\t\t\t\tName: pulumi.String(\"bad-package-2\"),\n\t\t\t\t\tDesiredState: pulumi.String(\"REMOVED\"),\n\t\t\t\t\tManager: pulumi.String(\"APT\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tPackageRepositories: osconfig.GuestPoliciesPackageRepositoryArray{\n\t\t\t\t\u0026osconfig.GuestPoliciesPackageRepositoryArgs{\n\t\t\t\t\tApt: \u0026osconfig.GuestPoliciesPackageRepositoryAptArgs{\n\t\t\t\t\t\tUri: pulumi.String(\"https://packages.cloud.google.com/apt\"),\n\t\t\t\t\t\tArchiveType: pulumi.String(\"DEB\"),\n\t\t\t\t\t\tDistribution: pulumi.String(\"cloud-sdk-stretch\"),\n\t\t\t\t\t\tComponents: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"main\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\t\u0026osconfig.GuestPoliciesPackageRepositoryArgs{\n\t\t\t\t\tYum: \u0026osconfig.GuestPoliciesPackageRepositoryYumArgs{\n\t\t\t\t\t\tId: pulumi.String(\"google-cloud-sdk\"),\n\t\t\t\t\t\tDisplayName: pulumi.String(\"Google Cloud SDK\"),\n\t\t\t\t\t\tBaseUrl: pulumi.String(\"https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64\"),\n\t\t\t\t\t\tGpgKeys: pulumi.StringArray{\n\t\t\t\t\t\t\tpulumi.String(\"https://packages.cloud.google.com/yum/doc/yum-key.gpg\"),\n\t\t\t\t\t\t\tpulumi.String(\"https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg\"),\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.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.osconfig.GuestPolicies;\nimport com.pulumi.gcp.osconfig.GuestPoliciesArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesAssignmentArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesPackageArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesPackageRepositoryArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesPackageRepositoryAptArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesPackageRepositoryYumArgs;\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 guestPolicies = new GuestPolicies(\"guestPolicies\", GuestPoliciesArgs.builder() \n .guestPolicyId(\"guest-policy\")\n .assignment(GuestPoliciesAssignmentArgs.builder()\n .groupLabels( \n GuestPoliciesAssignmentGroupLabelArgs.builder()\n .labels(Map.ofEntries(\n Map.entry(\"color\", \"red\"),\n Map.entry(\"env\", \"test\")\n ))\n .build(),\n GuestPoliciesAssignmentGroupLabelArgs.builder()\n .labels(Map.ofEntries(\n Map.entry(\"color\", \"blue\"),\n Map.entry(\"env\", \"test\")\n ))\n .build())\n .build())\n .packages( \n GuestPoliciesPackageArgs.builder()\n .name(\"my-package\")\n .desiredState(\"INSTALLED\")\n .build(),\n GuestPoliciesPackageArgs.builder()\n .name(\"bad-package-1\")\n .desiredState(\"REMOVED\")\n .build(),\n GuestPoliciesPackageArgs.builder()\n .name(\"bad-package-2\")\n .desiredState(\"REMOVED\")\n .manager(\"APT\")\n .build())\n .packageRepositories( \n GuestPoliciesPackageRepositoryArgs.builder()\n .apt(GuestPoliciesPackageRepositoryAptArgs.builder()\n .uri(\"https://packages.cloud.google.com/apt\")\n .archiveType(\"DEB\")\n .distribution(\"cloud-sdk-stretch\")\n .components(\"main\")\n .build())\n .build(),\n GuestPoliciesPackageRepositoryArgs.builder()\n .yum(GuestPoliciesPackageRepositoryYumArgs.builder()\n .id(\"google-cloud-sdk\")\n .displayName(\"Google Cloud SDK\")\n .baseUrl(\"https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64\")\n .gpgKeys( \n \"https://packages.cloud.google.com/yum/doc/yum-key.gpg\",\n \"https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg\")\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n guestPolicies:\n type: gcp:osconfig:GuestPolicies\n properties:\n guestPolicyId: guest-policy\n assignment:\n groupLabels:\n - labels:\n color: red\n env: test\n - labels:\n color: blue\n env: test\n packages:\n - name: my-package\n desiredState: INSTALLED\n - name: bad-package-1\n desiredState: REMOVED\n - name: bad-package-2\n desiredState: REMOVED\n manager: APT\n packageRepositories:\n - apt:\n uri: https://packages.cloud.google.com/apt\n archiveType: DEB\n distribution: cloud-sdk-stretch\n components:\n - main\n - yum:\n id: google-cloud-sdk\n displayName: Google Cloud SDK\n baseUrl: https://packages.cloud.google.com/yum/repos/cloud-sdk-el7-x86_64\n gpgKeys:\n - https://packages.cloud.google.com/yum/doc/yum-key.gpg\n - https://packages.cloud.google.com/yum/doc/rpm-package-key.gpg\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Os Config Guest Policies Recipes\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst guestPolicies = new gcp.osconfig.GuestPolicies(\"guestPolicies\", {\n guestPolicyId: \"guest-policy\",\n assignment: {\n zones: [\n \"us-east1-b\",\n \"us-east1-d\",\n ],\n },\n recipes: [{\n name: \"guest-policy-recipe\",\n desiredState: \"INSTALLED\",\n artifacts: [{\n id: \"guest-policy-artifact-id\",\n gcs: {\n bucket: \"my-bucket\",\n object: \"executable.msi\",\n generation: 1546030865175603,\n },\n }],\n installSteps: [{\n msiInstallation: {\n artifactId: \"guest-policy-artifact-id\",\n },\n }],\n }],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nguest_policies = gcp.osconfig.GuestPolicies(\"guestPolicies\",\n guest_policy_id=\"guest-policy\",\n assignment=gcp.osconfig.GuestPoliciesAssignmentArgs(\n zones=[\n \"us-east1-b\",\n \"us-east1-d\",\n ],\n ),\n recipes=[gcp.osconfig.GuestPoliciesRecipeArgs(\n name=\"guest-policy-recipe\",\n desired_state=\"INSTALLED\",\n artifacts=[gcp.osconfig.GuestPoliciesRecipeArtifactArgs(\n id=\"guest-policy-artifact-id\",\n gcs=gcp.osconfig.GuestPoliciesRecipeArtifactGcsArgs(\n bucket=\"my-bucket\",\n object=\"executable.msi\",\n generation=1546030865175603,\n ),\n )],\n install_steps=[gcp.osconfig.GuestPoliciesRecipeInstallStepArgs(\n msi_installation=gcp.osconfig.GuestPoliciesRecipeInstallStepMsiInstallationArgs(\n artifact_id=\"guest-policy-artifact-id\",\n ),\n )],\n )],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var guestPolicies = new Gcp.OsConfig.GuestPolicies(\"guestPolicies\", new()\n {\n GuestPolicyId = \"guest-policy\",\n Assignment = new Gcp.OsConfig.Inputs.GuestPoliciesAssignmentArgs\n {\n Zones = new[]\n {\n \"us-east1-b\",\n \"us-east1-d\",\n },\n },\n Recipes = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesRecipeArgs\n {\n Name = \"guest-policy-recipe\",\n DesiredState = \"INSTALLED\",\n Artifacts = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesRecipeArtifactArgs\n {\n Id = \"guest-policy-artifact-id\",\n Gcs = new Gcp.OsConfig.Inputs.GuestPoliciesRecipeArtifactGcsArgs\n {\n Bucket = \"my-bucket\",\n Object = \"executable.msi\",\n Generation = 1546030865175603,\n },\n },\n },\n InstallSteps = new[]\n {\n new Gcp.OsConfig.Inputs.GuestPoliciesRecipeInstallStepArgs\n {\n MsiInstallation = new Gcp.OsConfig.Inputs.GuestPoliciesRecipeInstallStepMsiInstallationArgs\n {\n ArtifactId = \"guest-policy-artifact-id\",\n },\n },\n },\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/osconfig\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := osconfig.NewGuestPolicies(ctx, \"guestPolicies\", \u0026osconfig.GuestPoliciesArgs{\n\t\t\tGuestPolicyId: pulumi.String(\"guest-policy\"),\n\t\t\tAssignment: \u0026osconfig.GuestPoliciesAssignmentArgs{\n\t\t\t\tZones: pulumi.StringArray{\n\t\t\t\t\tpulumi.String(\"us-east1-b\"),\n\t\t\t\t\tpulumi.String(\"us-east1-d\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tRecipes: osconfig.GuestPoliciesRecipeArray{\n\t\t\t\t\u0026osconfig.GuestPoliciesRecipeArgs{\n\t\t\t\t\tName: pulumi.String(\"guest-policy-recipe\"),\n\t\t\t\t\tDesiredState: pulumi.String(\"INSTALLED\"),\n\t\t\t\t\tArtifacts: osconfig.GuestPoliciesRecipeArtifactArray{\n\t\t\t\t\t\t\u0026osconfig.GuestPoliciesRecipeArtifactArgs{\n\t\t\t\t\t\t\tId: pulumi.String(\"guest-policy-artifact-id\"),\n\t\t\t\t\t\t\tGcs: \u0026osconfig.GuestPoliciesRecipeArtifactGcsArgs{\n\t\t\t\t\t\t\t\tBucket: pulumi.String(\"my-bucket\"),\n\t\t\t\t\t\t\t\tObject: pulumi.String(\"executable.msi\"),\n\t\t\t\t\t\t\t\tGeneration: pulumi.Int(1546030865175603),\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\tInstallSteps: osconfig.GuestPoliciesRecipeInstallStepArray{\n\t\t\t\t\t\t\u0026osconfig.GuestPoliciesRecipeInstallStepArgs{\n\t\t\t\t\t\t\tMsiInstallation: \u0026osconfig.GuestPoliciesRecipeInstallStepMsiInstallationArgs{\n\t\t\t\t\t\t\t\tArtifactId: pulumi.String(\"guest-policy-artifact-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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.osconfig.GuestPolicies;\nimport com.pulumi.gcp.osconfig.GuestPoliciesArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesAssignmentArgs;\nimport com.pulumi.gcp.osconfig.inputs.GuestPoliciesRecipeArgs;\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 guestPolicies = new GuestPolicies(\"guestPolicies\", GuestPoliciesArgs.builder() \n .guestPolicyId(\"guest-policy\")\n .assignment(GuestPoliciesAssignmentArgs.builder()\n .zones( \n \"us-east1-b\",\n \"us-east1-d\")\n .build())\n .recipes(GuestPoliciesRecipeArgs.builder()\n .name(\"guest-policy-recipe\")\n .desiredState(\"INSTALLED\")\n .artifacts(GuestPoliciesRecipeArtifactArgs.builder()\n .id(\"guest-policy-artifact-id\")\n .gcs(GuestPoliciesRecipeArtifactGcsArgs.builder()\n .bucket(\"my-bucket\")\n .object(\"executable.msi\")\n .generation(1546030865175603)\n .build())\n .build())\n .installSteps(GuestPoliciesRecipeInstallStepArgs.builder()\n .msiInstallation(GuestPoliciesRecipeInstallStepMsiInstallationArgs.builder()\n .artifactId(\"guest-policy-artifact-id\")\n .build())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n guestPolicies:\n type: gcp:osconfig:GuestPolicies\n properties:\n guestPolicyId: guest-policy\n assignment:\n zones:\n - us-east1-b\n - us-east1-d\n recipes:\n - name: guest-policy-recipe\n desiredState: INSTALLED\n artifacts:\n - id: guest-policy-artifact-id\n gcs:\n bucket: my-bucket\n object: executable.msi\n generation: 1.546030865175603e+15\n installSteps:\n - msiInstallation:\n artifactId: guest-policy-artifact-id\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nGuestPolicies can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:osconfig/guestPolicies:GuestPolicies default projects/{{project}}/guestPolicies/{{guest_policy_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:osconfig/guestPolicies:GuestPolicies default {{project}}/{{guest_policy_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:osconfig/guestPolicies:GuestPolicies default {{guest_policy_id}}\n```\n\n ", "properties": { "assignment": { "$ref": "#/types/gcp:osconfig/GuestPoliciesAssignment:GuestPoliciesAssignment", @@ -181095,7 +182634,7 @@ } }, "gcp:projects/iAMAuditConfig:IAMAuditConfig": { - "description": "Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case:\n\n* `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached.\n* `gcp.projects.IAMBinding`: 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 project are preserved.\n* `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved.\n* `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service.\n\n\u003e **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, \n IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource.\n\n## google\\_project\\_iam\\_policy\n\n!\u003e **Be careful!** You can accidentally lock yourself out of your project\n using this resource. Deleting a `gcp.projects.IAMPolicy` removes access\n from anyone without organization-level access to the project. Proceed with caution.\n It's not recommended to use `gcp.projects.IAMPolicy` with your provider project\n to avoid locking yourself out, and it should generally only be used with projects\n fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before\n applying the change.\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst project = new gcp.projects.IAMPolicy(\"project\", {\n project: \"your-project-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nproject = gcp.projects.IAMPolicy(\"project\",\n project=\"your-project-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var project = new Gcp.Projects.IAMPolicy(\"project\", new()\n {\n Project = \"your-project-id\",\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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/editor\",\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 = projects.NewIAMPolicy(ctx, \"project\", \u0026projects.IAMPolicyArgs{\n\t\t\tProject: pulumi.String(\"your-project-id\"),\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.projects.IAMPolicy;\nimport com.pulumi.gcp.projects.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var project = new IAMPolicy(\"project\", IAMPolicyArgs.builder() \n .project(\"your-project-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMPolicy\n properties:\n project: your-project-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n role: \"roles/compute.admin\",\n }],\n});\nconst project = new gcp.projects.IAMPolicy(\"project\", {\n policyData: admin.then(admin =\u003e admin.policyData),\n project: \"your-project-id\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n role=\"roles/compute.admin\",\n)])\nproject = gcp.projects.IAMPolicy(\"project\",\n policy_data=admin.policy_data,\n project=\"your-project-id\")\n```\n```csharp\nusing System.Collections.Generic;\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 Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/compute.admin\",\n },\n },\n });\n\n var project = new Gcp.Projects.IAMPolicy(\"project\", new()\n {\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n Project = \"your-project-id\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t},\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\tRole: \"roles/compute.admin\",\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 = projects.NewIAMPolicy(ctx, \"project\", \u0026projects.IAMPolicyArgs{\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t\tProject: pulumi.String(\"your-project-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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.projects.IAMPolicy;\nimport com.pulumi.gcp.projects.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 .condition(GetIAMPolicyBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .role(\"roles/compute.admin\")\n .build())\n .build());\n\n var project = new IAMPolicy(\"project\", IAMPolicyArgs.builder() \n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .project(\"your-project-id\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMPolicy\n properties:\n policyData: ${admin.policyData}\n project: your-project-id\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n role: roles/compute.admin\n```\n\n## google\\_project\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMBinding(\"project\", {\n members: [\"user:jane@example.com\"],\n project: \"your-project-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMBinding(\"project\",\n members=[\"user:jane@example.com\"],\n project=\"your-project-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMBinding(\"project\", new()\n {\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Project = \"your-project-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMBinding(ctx, \"project\", \u0026projects.IAMBindingArgs{\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMBinding;\nimport com.pulumi.gcp.projects.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMBinding(\"project\", IAMBindingArgs.builder() \n .members(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMBinding\n properties:\n members:\n - user:jane@example.com\n project: your-project-id\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMBinding(\"project\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n project: \"your-project-id\",\n role: \"roles/container.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMBinding(\"project\",\n condition=gcp.projects.IAMBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n project=\"your-project-id\",\n role=\"roles/container.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMBinding(\"project\", new()\n {\n Condition = new Gcp.Projects.Inputs.IAMBindingConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Project = \"your-project-id\",\n Role = \"roles/container.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMBinding(ctx, \"project\", \u0026projects.IAMBindingArgs{\n\t\t\tCondition: \u0026projects.IAMBindingConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/container.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMBinding;\nimport com.pulumi.gcp.projects.IAMBindingArgs;\nimport com.pulumi.gcp.projects.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMBinding(\"project\", IAMBindingArgs.builder() \n .condition(IAMBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/container.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMBinding\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n project: your-project-id\n role: roles/container.admin\n```\n\n## google\\_project\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMMember(\"project\", {\n member: \"user:jane@example.com\",\n project: \"your-project-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMMember(\"project\",\n member=\"user:jane@example.com\",\n project=\"your-project-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMMember(\"project\", new()\n {\n Member = \"user:jane@example.com\",\n Project = \"your-project-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMMember(ctx, \"project\", \u0026projects.IAMMemberArgs{\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMMember(\"project\", IAMMemberArgs.builder() \n .member(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMMember\n properties:\n member: user:jane@example.com\n project: your-project-id\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMMember(\"project\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n member: \"user:jane@example.com\",\n project: \"your-project-id\",\n role: \"roles/firebase.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMMember(\"project\",\n condition=gcp.projects.IAMMemberConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n member=\"user:jane@example.com\",\n project=\"your-project-id\",\n role=\"roles/firebase.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMMember(\"project\", new()\n {\n Condition = new Gcp.Projects.Inputs.IAMMemberConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Member = \"user:jane@example.com\",\n Project = \"your-project-id\",\n Role = \"roles/firebase.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMMember(ctx, \"project\", \u0026projects.IAMMemberArgs{\n\t\t\tCondition: \u0026projects.IAMMemberConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/firebase.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.projects.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMMember(\"project\", IAMMemberArgs.builder() \n .condition(IAMMemberConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .member(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/firebase.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMMember\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n member: user:jane@example.com\n project: your-project-id\n role: roles/firebase.admin\n```\n\n## google\\_project\\_iam\\_audit\\_config\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMAuditConfig(\"project\", {\n auditLogConfigs: [\n {\n logType: \"ADMIN_READ\",\n },\n {\n exemptedMembers: [\"user:joebloggs@hashicorp.com\"],\n logType: \"DATA_READ\",\n },\n ],\n project: \"your-project-id\",\n service: \"allServices\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMAuditConfig(\"project\",\n audit_log_configs=[\n gcp.projects.IAMAuditConfigAuditLogConfigArgs(\n log_type=\"ADMIN_READ\",\n ),\n gcp.projects.IAMAuditConfigAuditLogConfigArgs(\n exempted_members=[\"user:joebloggs@hashicorp.com\"],\n log_type=\"DATA_READ\",\n ),\n ],\n project=\"your-project-id\",\n service=\"allServices\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMAuditConfig(\"project\", new()\n {\n AuditLogConfigs = new[]\n {\n new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs\n {\n LogType = \"ADMIN_READ\",\n },\n new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs\n {\n ExemptedMembers = new[]\n {\n \"user:joebloggs@hashicorp.com\",\n },\n LogType = \"DATA_READ\",\n },\n },\n Project = \"your-project-id\",\n Service = \"allServices\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMAuditConfig(ctx, \"project\", \u0026projects.IAMAuditConfigArgs{\n\t\t\tAuditLogConfigs: projects.IAMAuditConfigAuditLogConfigArray{\n\t\t\t\t\u0026projects.IAMAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tLogType: pulumi.String(\"ADMIN_READ\"),\n\t\t\t\t},\n\t\t\t\t\u0026projects.IAMAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tExemptedMembers: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"user:joebloggs@hashicorp.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tLogType: pulumi.String(\"DATA_READ\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tService: pulumi.String(\"allServices\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMAuditConfig;\nimport com.pulumi.gcp.projects.IAMAuditConfigArgs;\nimport com.pulumi.gcp.projects.inputs.IAMAuditConfigAuditLogConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMAuditConfig(\"project\", IAMAuditConfigArgs.builder() \n .auditLogConfigs( \n IAMAuditConfigAuditLogConfigArgs.builder()\n .logType(\"ADMIN_READ\")\n .build(),\n IAMAuditConfigAuditLogConfigArgs.builder()\n .exemptedMembers(\"user:joebloggs@hashicorp.com\")\n .logType(\"DATA_READ\")\n .build())\n .project(\"your-project-id\")\n .service(\"allServices\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMAuditConfig\n properties:\n auditLogConfigs:\n - logType: ADMIN_READ\n - exemptedMembers:\n - user:joebloggs@hashicorp.com\n logType: DATA_READ\n project: your-project-id\n service: allServices\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `project_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMAuditConfig:IAMAuditConfig my_project \"your-project-id roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `project_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMAuditConfig:IAMAuditConfig my_project \"your-project-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `project_id`.\n\n```sh\n $ pulumi import gcp:projects/iAMAuditConfig:IAMAuditConfig my_project your-project-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMAuditConfig:IAMAuditConfig my_project \"your-project-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:projects/iAMAuditConfig:IAMAuditConfig to include the title of condition, e.g. `google_project_iam_binding.my_project \"{{your-project-id}} roles/{{role_id}} condition-title\"`\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `project_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMAuditConfig:IAMAuditConfig my_project \"your-project-id roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `project_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMAuditConfig:IAMAuditConfig my_project \"your-project-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `project_id`.\n\n```sh\n $ pulumi import gcp:projects/iAMAuditConfig:IAMAuditConfig my_project your-project-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMAuditConfig:IAMAuditConfig my_project \"your-project-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:projects/iAMAuditConfig:IAMAuditConfig to include the title of condition, e.g. `google_project_iam_binding.my_project \"{{your-project-id}} roles/{{role_id}} condition-title\"`\n```\n\n ", "properties": { "auditLogConfigs": { "type": "array", @@ -181174,7 +182713,7 @@ } }, "gcp:projects/iAMBinding:IAMBinding": { - "description": "Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case:\n\n* `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached.\n* `gcp.projects.IAMBinding`: 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 project are preserved.\n* `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved.\n* `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service.\n\n\u003e **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, \n IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource.\n\n## google\\_project\\_iam\\_policy\n\n!\u003e **Be careful!** You can accidentally lock yourself out of your project\n using this resource. Deleting a `gcp.projects.IAMPolicy` removes access\n from anyone without organization-level access to the project. Proceed with caution.\n It's not recommended to use `gcp.projects.IAMPolicy` with your provider project\n to avoid locking yourself out, and it should generally only be used with projects\n fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before\n applying the change.\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst project = new gcp.projects.IAMPolicy(\"project\", {\n project: \"your-project-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nproject = gcp.projects.IAMPolicy(\"project\",\n project=\"your-project-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var project = new Gcp.Projects.IAMPolicy(\"project\", new()\n {\n Project = \"your-project-id\",\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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/editor\",\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 = projects.NewIAMPolicy(ctx, \"project\", \u0026projects.IAMPolicyArgs{\n\t\t\tProject: pulumi.String(\"your-project-id\"),\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.projects.IAMPolicy;\nimport com.pulumi.gcp.projects.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var project = new IAMPolicy(\"project\", IAMPolicyArgs.builder() \n .project(\"your-project-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMPolicy\n properties:\n project: your-project-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n role: \"roles/compute.admin\",\n }],\n});\nconst project = new gcp.projects.IAMPolicy(\"project\", {\n policyData: admin.then(admin =\u003e admin.policyData),\n project: \"your-project-id\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n role=\"roles/compute.admin\",\n)])\nproject = gcp.projects.IAMPolicy(\"project\",\n policy_data=admin.policy_data,\n project=\"your-project-id\")\n```\n```csharp\nusing System.Collections.Generic;\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 Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/compute.admin\",\n },\n },\n });\n\n var project = new Gcp.Projects.IAMPolicy(\"project\", new()\n {\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n Project = \"your-project-id\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t},\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\tRole: \"roles/compute.admin\",\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 = projects.NewIAMPolicy(ctx, \"project\", \u0026projects.IAMPolicyArgs{\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t\tProject: pulumi.String(\"your-project-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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.projects.IAMPolicy;\nimport com.pulumi.gcp.projects.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 .condition(GetIAMPolicyBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .role(\"roles/compute.admin\")\n .build())\n .build());\n\n var project = new IAMPolicy(\"project\", IAMPolicyArgs.builder() \n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .project(\"your-project-id\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMPolicy\n properties:\n policyData: ${admin.policyData}\n project: your-project-id\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n role: roles/compute.admin\n```\n\n## google\\_project\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMBinding(\"project\", {\n members: [\"user:jane@example.com\"],\n project: \"your-project-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMBinding(\"project\",\n members=[\"user:jane@example.com\"],\n project=\"your-project-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMBinding(\"project\", new()\n {\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Project = \"your-project-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMBinding(ctx, \"project\", \u0026projects.IAMBindingArgs{\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMBinding;\nimport com.pulumi.gcp.projects.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMBinding(\"project\", IAMBindingArgs.builder() \n .members(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMBinding\n properties:\n members:\n - user:jane@example.com\n project: your-project-id\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMBinding(\"project\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n project: \"your-project-id\",\n role: \"roles/container.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMBinding(\"project\",\n condition=gcp.projects.IAMBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n project=\"your-project-id\",\n role=\"roles/container.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMBinding(\"project\", new()\n {\n Condition = new Gcp.Projects.Inputs.IAMBindingConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Project = \"your-project-id\",\n Role = \"roles/container.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMBinding(ctx, \"project\", \u0026projects.IAMBindingArgs{\n\t\t\tCondition: \u0026projects.IAMBindingConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/container.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMBinding;\nimport com.pulumi.gcp.projects.IAMBindingArgs;\nimport com.pulumi.gcp.projects.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMBinding(\"project\", IAMBindingArgs.builder() \n .condition(IAMBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/container.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMBinding\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n project: your-project-id\n role: roles/container.admin\n```\n\n## google\\_project\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMMember(\"project\", {\n member: \"user:jane@example.com\",\n project: \"your-project-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMMember(\"project\",\n member=\"user:jane@example.com\",\n project=\"your-project-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMMember(\"project\", new()\n {\n Member = \"user:jane@example.com\",\n Project = \"your-project-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMMember(ctx, \"project\", \u0026projects.IAMMemberArgs{\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMMember(\"project\", IAMMemberArgs.builder() \n .member(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMMember\n properties:\n member: user:jane@example.com\n project: your-project-id\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMMember(\"project\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n member: \"user:jane@example.com\",\n project: \"your-project-id\",\n role: \"roles/firebase.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMMember(\"project\",\n condition=gcp.projects.IAMMemberConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n member=\"user:jane@example.com\",\n project=\"your-project-id\",\n role=\"roles/firebase.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMMember(\"project\", new()\n {\n Condition = new Gcp.Projects.Inputs.IAMMemberConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Member = \"user:jane@example.com\",\n Project = \"your-project-id\",\n Role = \"roles/firebase.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMMember(ctx, \"project\", \u0026projects.IAMMemberArgs{\n\t\t\tCondition: \u0026projects.IAMMemberConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/firebase.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.projects.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMMember(\"project\", IAMMemberArgs.builder() \n .condition(IAMMemberConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .member(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/firebase.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMMember\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n member: user:jane@example.com\n project: your-project-id\n role: roles/firebase.admin\n```\n\n## google\\_project\\_iam\\_audit\\_config\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMAuditConfig(\"project\", {\n auditLogConfigs: [\n {\n logType: \"ADMIN_READ\",\n },\n {\n exemptedMembers: [\"user:joebloggs@hashicorp.com\"],\n logType: \"DATA_READ\",\n },\n ],\n project: \"your-project-id\",\n service: \"allServices\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMAuditConfig(\"project\",\n audit_log_configs=[\n gcp.projects.IAMAuditConfigAuditLogConfigArgs(\n log_type=\"ADMIN_READ\",\n ),\n gcp.projects.IAMAuditConfigAuditLogConfigArgs(\n exempted_members=[\"user:joebloggs@hashicorp.com\"],\n log_type=\"DATA_READ\",\n ),\n ],\n project=\"your-project-id\",\n service=\"allServices\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMAuditConfig(\"project\", new()\n {\n AuditLogConfigs = new[]\n {\n new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs\n {\n LogType = \"ADMIN_READ\",\n },\n new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs\n {\n ExemptedMembers = new[]\n {\n \"user:joebloggs@hashicorp.com\",\n },\n LogType = \"DATA_READ\",\n },\n },\n Project = \"your-project-id\",\n Service = \"allServices\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMAuditConfig(ctx, \"project\", \u0026projects.IAMAuditConfigArgs{\n\t\t\tAuditLogConfigs: projects.IAMAuditConfigAuditLogConfigArray{\n\t\t\t\t\u0026projects.IAMAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tLogType: pulumi.String(\"ADMIN_READ\"),\n\t\t\t\t},\n\t\t\t\t\u0026projects.IAMAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tExemptedMembers: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"user:joebloggs@hashicorp.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tLogType: pulumi.String(\"DATA_READ\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tService: pulumi.String(\"allServices\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMAuditConfig;\nimport com.pulumi.gcp.projects.IAMAuditConfigArgs;\nimport com.pulumi.gcp.projects.inputs.IAMAuditConfigAuditLogConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMAuditConfig(\"project\", IAMAuditConfigArgs.builder() \n .auditLogConfigs( \n IAMAuditConfigAuditLogConfigArgs.builder()\n .logType(\"ADMIN_READ\")\n .build(),\n IAMAuditConfigAuditLogConfigArgs.builder()\n .exemptedMembers(\"user:joebloggs@hashicorp.com\")\n .logType(\"DATA_READ\")\n .build())\n .project(\"your-project-id\")\n .service(\"allServices\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMAuditConfig\n properties:\n auditLogConfigs:\n - logType: ADMIN_READ\n - exemptedMembers:\n - user:joebloggs@hashicorp.com\n logType: DATA_READ\n project: your-project-id\n service: allServices\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `project_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMBinding:IAMBinding my_project \"your-project-id roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `project_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMBinding:IAMBinding my_project \"your-project-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `project_id`.\n\n```sh\n $ pulumi import gcp:projects/iAMBinding:IAMBinding my_project your-project-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMBinding:IAMBinding my_project \"your-project-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:projects/iAMBinding:IAMBinding to include the title of condition, e.g. `google_project_iam_binding.my_project \"{{your-project-id}} roles/{{role_id}} condition-title\"`\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `project_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMBinding:IAMBinding my_project \"your-project-id roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `project_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMBinding:IAMBinding my_project \"your-project-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `project_id`.\n\n```sh\n $ pulumi import gcp:projects/iAMBinding:IAMBinding my_project your-project-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMBinding:IAMBinding my_project \"your-project-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:projects/iAMBinding:IAMBinding to include the title of condition, e.g. `google_project_iam_binding.my_project \"{{your-project-id}} roles/{{role_id}} condition-title\"`\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:projects/IAMBindingCondition:IAMBindingCondition", @@ -181266,7 +182805,7 @@ } }, "gcp:projects/iAMCustomRole:IAMCustomRole": { - "description": "Allows management of a customized Cloud IAM project role. For more information see\n[the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles)\nand\n[API](https://cloud.google.com/iam/reference/rest/v1/projects.roles).\n\n\u003e **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise\n from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the\n same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted\n after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is\n made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all\n by the provider, and new roles cannot share that name.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nThis snippet creates a customized IAM role.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_custom_role = new gcp.projects.IAMCustomRole(\"my-custom-role\", {\n description: \"A description\",\n permissions: [\n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\",\n ],\n roleId: \"myCustomRole\",\n title: \"My Custom Role\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_custom_role = gcp.projects.IAMCustomRole(\"my-custom-role\",\n description=\"A description\",\n permissions=[\n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\",\n ],\n role_id=\"myCustomRole\",\n title=\"My Custom Role\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_custom_role = new Gcp.Projects.IAMCustomRole(\"my-custom-role\", new()\n {\n Description = \"A description\",\n Permissions = new[]\n {\n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\",\n },\n RoleId = \"myCustomRole\",\n Title = \"My Custom Role\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMCustomRole(ctx, \"my-custom-role\", \u0026projects.IAMCustomRoleArgs{\n\t\t\tDescription: pulumi.String(\"A description\"),\n\t\t\tPermissions: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"iam.roles.list\"),\n\t\t\t\tpulumi.String(\"iam.roles.create\"),\n\t\t\t\tpulumi.String(\"iam.roles.delete\"),\n\t\t\t},\n\t\t\tRoleId: pulumi.String(\"myCustomRole\"),\n\t\t\tTitle: pulumi.String(\"My Custom Role\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMCustomRole;\nimport com.pulumi.gcp.projects.IAMCustomRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_custom_role = new IAMCustomRole(\"my-custom-role\", IAMCustomRoleArgs.builder() \n .description(\"A description\")\n .permissions( \n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\")\n .roleId(\"myCustomRole\")\n .title(\"My Custom Role\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-custom-role:\n type: gcp:projects:IAMCustomRole\n properties:\n description: A description\n permissions:\n - iam.roles.list\n - iam.roles.create\n - iam.roles.delete\n roleId: myCustomRole\n title: My Custom Role\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCustom Roles can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:projects/iAMCustomRole:IAMCustomRole default projects/{{project}}/roles/{{role_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:projects/iAMCustomRole:IAMCustomRole default {{project}}/{{role_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:projects/iAMCustomRole:IAMCustomRole default {{role_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\nThis snippet creates a customized IAM role.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst my_custom_role = new gcp.projects.IAMCustomRole(\"my-custom-role\", {\n description: \"A description\",\n permissions: [\n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\",\n ],\n roleId: \"myCustomRole\",\n title: \"My Custom Role\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_custom_role = gcp.projects.IAMCustomRole(\"my-custom-role\",\n description=\"A description\",\n permissions=[\n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\",\n ],\n role_id=\"myCustomRole\",\n title=\"My Custom Role\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var my_custom_role = new Gcp.Projects.IAMCustomRole(\"my-custom-role\", new()\n {\n Description = \"A description\",\n Permissions = new[]\n {\n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\",\n },\n RoleId = \"myCustomRole\",\n Title = \"My Custom Role\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMCustomRole(ctx, \"my-custom-role\", \u0026projects.IAMCustomRoleArgs{\n\t\t\tDescription: pulumi.String(\"A description\"),\n\t\t\tPermissions: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"iam.roles.list\"),\n\t\t\t\tpulumi.String(\"iam.roles.create\"),\n\t\t\t\tpulumi.String(\"iam.roles.delete\"),\n\t\t\t},\n\t\t\tRoleId: pulumi.String(\"myCustomRole\"),\n\t\t\tTitle: pulumi.String(\"My Custom Role\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMCustomRole;\nimport com.pulumi.gcp.projects.IAMCustomRoleArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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_custom_role = new IAMCustomRole(\"my-custom-role\", IAMCustomRoleArgs.builder() \n .description(\"A description\")\n .permissions( \n \"iam.roles.list\",\n \"iam.roles.create\",\n \"iam.roles.delete\")\n .roleId(\"myCustomRole\")\n .title(\"My Custom Role\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n my-custom-role:\n type: gcp:projects:IAMCustomRole\n properties:\n description: A description\n permissions:\n - iam.roles.list\n - iam.roles.create\n - iam.roles.delete\n roleId: myCustomRole\n title: My Custom Role\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nCustom Roles can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:projects/iAMCustomRole:IAMCustomRole default projects/{{project}}/roles/{{role_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:projects/iAMCustomRole:IAMCustomRole default {{project}}/{{role_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:projects/iAMCustomRole:IAMCustomRole default {{role_id}}\n```\n\n ", "properties": { "deleted": { "type": "boolean", @@ -181393,7 +182932,7 @@ } }, "gcp:projects/iAMMember:IAMMember": { - "description": "Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case:\n\n* `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached.\n* `gcp.projects.IAMBinding`: 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 project are preserved.\n* `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved.\n* `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service.\n\n\u003e **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, \n IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource.\n\n## google\\_project\\_iam\\_policy\n\n!\u003e **Be careful!** You can accidentally lock yourself out of your project\n using this resource. Deleting a `gcp.projects.IAMPolicy` removes access\n from anyone without organization-level access to the project. Proceed with caution.\n It's not recommended to use `gcp.projects.IAMPolicy` with your provider project\n to avoid locking yourself out, and it should generally only be used with projects\n fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before\n applying the change.\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst project = new gcp.projects.IAMPolicy(\"project\", {\n project: \"your-project-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nproject = gcp.projects.IAMPolicy(\"project\",\n project=\"your-project-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var project = new Gcp.Projects.IAMPolicy(\"project\", new()\n {\n Project = \"your-project-id\",\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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/editor\",\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 = projects.NewIAMPolicy(ctx, \"project\", \u0026projects.IAMPolicyArgs{\n\t\t\tProject: pulumi.String(\"your-project-id\"),\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.projects.IAMPolicy;\nimport com.pulumi.gcp.projects.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var project = new IAMPolicy(\"project\", IAMPolicyArgs.builder() \n .project(\"your-project-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMPolicy\n properties:\n project: your-project-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n role: \"roles/compute.admin\",\n }],\n});\nconst project = new gcp.projects.IAMPolicy(\"project\", {\n policyData: admin.then(admin =\u003e admin.policyData),\n project: \"your-project-id\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n role=\"roles/compute.admin\",\n)])\nproject = gcp.projects.IAMPolicy(\"project\",\n policy_data=admin.policy_data,\n project=\"your-project-id\")\n```\n```csharp\nusing System.Collections.Generic;\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 Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/compute.admin\",\n },\n },\n });\n\n var project = new Gcp.Projects.IAMPolicy(\"project\", new()\n {\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n Project = \"your-project-id\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t},\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\tRole: \"roles/compute.admin\",\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 = projects.NewIAMPolicy(ctx, \"project\", \u0026projects.IAMPolicyArgs{\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t\tProject: pulumi.String(\"your-project-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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.projects.IAMPolicy;\nimport com.pulumi.gcp.projects.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 .condition(GetIAMPolicyBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .role(\"roles/compute.admin\")\n .build())\n .build());\n\n var project = new IAMPolicy(\"project\", IAMPolicyArgs.builder() \n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .project(\"your-project-id\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMPolicy\n properties:\n policyData: ${admin.policyData}\n project: your-project-id\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n role: roles/compute.admin\n```\n\n## google\\_project\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMBinding(\"project\", {\n members: [\"user:jane@example.com\"],\n project: \"your-project-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMBinding(\"project\",\n members=[\"user:jane@example.com\"],\n project=\"your-project-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMBinding(\"project\", new()\n {\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Project = \"your-project-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMBinding(ctx, \"project\", \u0026projects.IAMBindingArgs{\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMBinding;\nimport com.pulumi.gcp.projects.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMBinding(\"project\", IAMBindingArgs.builder() \n .members(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMBinding\n properties:\n members:\n - user:jane@example.com\n project: your-project-id\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMBinding(\"project\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n project: \"your-project-id\",\n role: \"roles/container.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMBinding(\"project\",\n condition=gcp.projects.IAMBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n project=\"your-project-id\",\n role=\"roles/container.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMBinding(\"project\", new()\n {\n Condition = new Gcp.Projects.Inputs.IAMBindingConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Project = \"your-project-id\",\n Role = \"roles/container.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMBinding(ctx, \"project\", \u0026projects.IAMBindingArgs{\n\t\t\tCondition: \u0026projects.IAMBindingConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/container.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMBinding;\nimport com.pulumi.gcp.projects.IAMBindingArgs;\nimport com.pulumi.gcp.projects.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMBinding(\"project\", IAMBindingArgs.builder() \n .condition(IAMBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/container.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMBinding\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n project: your-project-id\n role: roles/container.admin\n```\n\n## google\\_project\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMMember(\"project\", {\n member: \"user:jane@example.com\",\n project: \"your-project-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMMember(\"project\",\n member=\"user:jane@example.com\",\n project=\"your-project-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMMember(\"project\", new()\n {\n Member = \"user:jane@example.com\",\n Project = \"your-project-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMMember(ctx, \"project\", \u0026projects.IAMMemberArgs{\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMMember(\"project\", IAMMemberArgs.builder() \n .member(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMMember\n properties:\n member: user:jane@example.com\n project: your-project-id\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMMember(\"project\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n member: \"user:jane@example.com\",\n project: \"your-project-id\",\n role: \"roles/firebase.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMMember(\"project\",\n condition=gcp.projects.IAMMemberConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n member=\"user:jane@example.com\",\n project=\"your-project-id\",\n role=\"roles/firebase.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMMember(\"project\", new()\n {\n Condition = new Gcp.Projects.Inputs.IAMMemberConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Member = \"user:jane@example.com\",\n Project = \"your-project-id\",\n Role = \"roles/firebase.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMMember(ctx, \"project\", \u0026projects.IAMMemberArgs{\n\t\t\tCondition: \u0026projects.IAMMemberConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/firebase.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.projects.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMMember(\"project\", IAMMemberArgs.builder() \n .condition(IAMMemberConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .member(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/firebase.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMMember\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n member: user:jane@example.com\n project: your-project-id\n role: roles/firebase.admin\n```\n\n## google\\_project\\_iam\\_audit\\_config\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMAuditConfig(\"project\", {\n auditLogConfigs: [\n {\n logType: \"ADMIN_READ\",\n },\n {\n exemptedMembers: [\"user:joebloggs@hashicorp.com\"],\n logType: \"DATA_READ\",\n },\n ],\n project: \"your-project-id\",\n service: \"allServices\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMAuditConfig(\"project\",\n audit_log_configs=[\n gcp.projects.IAMAuditConfigAuditLogConfigArgs(\n log_type=\"ADMIN_READ\",\n ),\n gcp.projects.IAMAuditConfigAuditLogConfigArgs(\n exempted_members=[\"user:joebloggs@hashicorp.com\"],\n log_type=\"DATA_READ\",\n ),\n ],\n project=\"your-project-id\",\n service=\"allServices\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMAuditConfig(\"project\", new()\n {\n AuditLogConfigs = new[]\n {\n new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs\n {\n LogType = \"ADMIN_READ\",\n },\n new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs\n {\n ExemptedMembers = new[]\n {\n \"user:joebloggs@hashicorp.com\",\n },\n LogType = \"DATA_READ\",\n },\n },\n Project = \"your-project-id\",\n Service = \"allServices\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMAuditConfig(ctx, \"project\", \u0026projects.IAMAuditConfigArgs{\n\t\t\tAuditLogConfigs: projects.IAMAuditConfigAuditLogConfigArray{\n\t\t\t\t\u0026projects.IAMAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tLogType: pulumi.String(\"ADMIN_READ\"),\n\t\t\t\t},\n\t\t\t\t\u0026projects.IAMAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tExemptedMembers: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"user:joebloggs@hashicorp.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tLogType: pulumi.String(\"DATA_READ\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tService: pulumi.String(\"allServices\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMAuditConfig;\nimport com.pulumi.gcp.projects.IAMAuditConfigArgs;\nimport com.pulumi.gcp.projects.inputs.IAMAuditConfigAuditLogConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMAuditConfig(\"project\", IAMAuditConfigArgs.builder() \n .auditLogConfigs( \n IAMAuditConfigAuditLogConfigArgs.builder()\n .logType(\"ADMIN_READ\")\n .build(),\n IAMAuditConfigAuditLogConfigArgs.builder()\n .exemptedMembers(\"user:joebloggs@hashicorp.com\")\n .logType(\"DATA_READ\")\n .build())\n .project(\"your-project-id\")\n .service(\"allServices\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMAuditConfig\n properties:\n auditLogConfigs:\n - logType: ADMIN_READ\n - exemptedMembers:\n - user:joebloggs@hashicorp.com\n logType: DATA_READ\n project: your-project-id\n service: allServices\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `project_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMMember:IAMMember my_project \"your-project-id roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `project_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMMember:IAMMember my_project \"your-project-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `project_id`.\n\n```sh\n $ pulumi import gcp:projects/iAMMember:IAMMember my_project your-project-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMMember:IAMMember my_project \"your-project-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:projects/iAMMember:IAMMember to include the title of condition, e.g. `google_project_iam_binding.my_project \"{{your-project-id}} roles/{{role_id}} condition-title\"`\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `project_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMMember:IAMMember my_project \"your-project-id roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `project_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMMember:IAMMember my_project \"your-project-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `project_id`.\n\n```sh\n $ pulumi import gcp:projects/iAMMember:IAMMember my_project your-project-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMMember:IAMMember my_project \"your-project-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:projects/iAMMember:IAMMember to include the title of condition, e.g. `google_project_iam_binding.my_project \"{{your-project-id}} roles/{{role_id}} condition-title\"`\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:projects/IAMMemberCondition:IAMMemberCondition", @@ -181478,7 +183017,7 @@ } }, "gcp:projects/iAMPolicy:IAMPolicy": { - "description": "Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case:\n\n* `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached.\n* `gcp.projects.IAMBinding`: 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 project are preserved.\n* `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved.\n* `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service.\n\n\u003e **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n\u003e **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, \n IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource.\n\n## google\\_project\\_iam\\_policy\n\n!\u003e **Be careful!** You can accidentally lock yourself out of your project\n using this resource. Deleting a `gcp.projects.IAMPolicy` removes access\n from anyone without organization-level access to the project. Proceed with caution.\n It's not recommended to use `gcp.projects.IAMPolicy` with your provider project\n to avoid locking yourself out, and it should generally only be used with projects\n fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before\n applying the change.\n\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/editor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst project = new gcp.projects.IAMPolicy(\"project\", {\n project: \"your-project-id\",\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/editor\",\n members=[\"user:jane@example.com\"],\n)])\nproject = gcp.projects.IAMPolicy(\"project\",\n project=\"your-project-id\",\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/editor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var project = new Gcp.Projects.IAMPolicy(\"project\", new()\n {\n Project = \"your-project-id\",\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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/editor\",\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 = projects.NewIAMPolicy(ctx, \"project\", \u0026projects.IAMPolicyArgs{\n\t\t\tProject: pulumi.String(\"your-project-id\"),\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.projects.IAMPolicy;\nimport com.pulumi.gcp.projects.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/editor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var project = new IAMPolicy(\"project\", IAMPolicyArgs.builder() \n .project(\"your-project-id\")\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMPolicy\n properties:\n project: your-project-id\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/editor\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst admin = gcp.organizations.getIAMPolicy({\n bindings: [{\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n role: \"roles/compute.admin\",\n }],\n});\nconst project = new gcp.projects.IAMPolicy(\"project\", {\n policyData: admin.then(admin =\u003e admin.policyData),\n project: \"your-project-id\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n condition=gcp.organizations.GetIAMPolicyBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n role=\"roles/compute.admin\",\n)])\nproject = gcp.projects.IAMPolicy(\"project\",\n policy_data=admin.policy_data,\n project=\"your-project-id\")\n```\n```csharp\nusing System.Collections.Generic;\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 Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Role = \"roles/compute.admin\",\n },\n },\n });\n\n var project = new Gcp.Projects.IAMPolicy(\"project\", new()\n {\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n Project = \"your-project-id\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tadmin, err := organizations.LookupIAMPolicy(ctx, \u0026organizations.LookupIAMPolicyArgs{\n\t\t\tBindings: []organizations.GetIAMPolicyBinding{\n\t\t\t\t{\n\t\t\t\t\tCondition: {\n\t\t\t\t\t\tDescription: pulumi.StringRef(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\t\t\tExpression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n\t\t\t\t\t\tTitle: \"expires_after_2019_12_31\",\n\t\t\t\t\t},\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\tRole: \"roles/compute.admin\",\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 = projects.NewIAMPolicy(ctx, \"project\", \u0026projects.IAMPolicyArgs{\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t\tProject: pulumi.String(\"your-project-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.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs;\nimport com.pulumi.gcp.projects.IAMPolicy;\nimport com.pulumi.gcp.projects.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 .condition(GetIAMPolicyBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .role(\"roles/compute.admin\")\n .build())\n .build());\n\n var project = new IAMPolicy(\"project\", IAMPolicyArgs.builder() \n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .project(\"your-project-id\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMPolicy\n properties:\n policyData: ${admin.policyData}\n project: your-project-id\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n role: roles/compute.admin\n```\n\n## google\\_project\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMBinding(\"project\", {\n members: [\"user:jane@example.com\"],\n project: \"your-project-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMBinding(\"project\",\n members=[\"user:jane@example.com\"],\n project=\"your-project-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMBinding(\"project\", new()\n {\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Project = \"your-project-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMBinding(ctx, \"project\", \u0026projects.IAMBindingArgs{\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMBinding;\nimport com.pulumi.gcp.projects.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMBinding(\"project\", IAMBindingArgs.builder() \n .members(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMBinding\n properties:\n members:\n - user:jane@example.com\n project: your-project-id\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMBinding(\"project\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n members: [\"user:jane@example.com\"],\n project: \"your-project-id\",\n role: \"roles/container.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMBinding(\"project\",\n condition=gcp.projects.IAMBindingConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n members=[\"user:jane@example.com\"],\n project=\"your-project-id\",\n role=\"roles/container.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMBinding(\"project\", new()\n {\n Condition = new Gcp.Projects.Inputs.IAMBindingConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Project = \"your-project-id\",\n Role = \"roles/container.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMBinding(ctx, \"project\", \u0026projects.IAMBindingArgs{\n\t\t\tCondition: \u0026projects.IAMBindingConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/container.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMBinding;\nimport com.pulumi.gcp.projects.IAMBindingArgs;\nimport com.pulumi.gcp.projects.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMBinding(\"project\", IAMBindingArgs.builder() \n .condition(IAMBindingConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .members(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/container.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMBinding\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n members:\n - user:jane@example.com\n project: your-project-id\n role: roles/container.admin\n```\n\n## google\\_project\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMMember(\"project\", {\n member: \"user:jane@example.com\",\n project: \"your-project-id\",\n role: \"roles/editor\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMMember(\"project\",\n member=\"user:jane@example.com\",\n project=\"your-project-id\",\n role=\"roles/editor\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMMember(\"project\", new()\n {\n Member = \"user:jane@example.com\",\n Project = \"your-project-id\",\n Role = \"roles/editor\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMMember(ctx, \"project\", \u0026projects.IAMMemberArgs{\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/editor\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMMember(\"project\", IAMMemberArgs.builder() \n .member(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/editor\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMMember\n properties:\n member: user:jane@example.com\n project: your-project-id\n role: roles/editor\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMMember(\"project\", {\n condition: {\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title: \"expires_after_2019_12_31\",\n },\n member: \"user:jane@example.com\",\n project: \"your-project-id\",\n role: \"roles/firebase.admin\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMMember(\"project\",\n condition=gcp.projects.IAMMemberConditionArgs(\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n title=\"expires_after_2019_12_31\",\n ),\n member=\"user:jane@example.com\",\n project=\"your-project-id\",\n role=\"roles/firebase.admin\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMMember(\"project\", new()\n {\n Condition = new Gcp.Projects.Inputs.IAMMemberConditionArgs\n {\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n Title = \"expires_after_2019_12_31\",\n },\n Member = \"user:jane@example.com\",\n Project = \"your-project-id\",\n Role = \"roles/firebase.admin\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMMember(ctx, \"project\", \u0026projects.IAMMemberArgs{\n\t\t\tCondition: \u0026projects.IAMMemberConditionArgs{\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t},\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tRole: pulumi.String(\"roles/firebase.admin\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\nimport com.pulumi.gcp.projects.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMMember(\"project\", IAMMemberArgs.builder() \n .condition(IAMMemberConditionArgs.builder()\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .title(\"expires_after_2019_12_31\")\n .build())\n .member(\"user:jane@example.com\")\n .project(\"your-project-id\")\n .role(\"roles/firebase.admin\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMMember\n properties:\n condition:\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n title: expires_after_2019_12_31\n member: user:jane@example.com\n project: your-project-id\n role: roles/firebase.admin\n```\n\n## google\\_project\\_iam\\_audit\\_config\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.IAMAuditConfig(\"project\", {\n auditLogConfigs: [\n {\n logType: \"ADMIN_READ\",\n },\n {\n exemptedMembers: [\"user:joebloggs@hashicorp.com\"],\n logType: \"DATA_READ\",\n },\n ],\n project: \"your-project-id\",\n service: \"allServices\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.IAMAuditConfig(\"project\",\n audit_log_configs=[\n gcp.projects.IAMAuditConfigAuditLogConfigArgs(\n log_type=\"ADMIN_READ\",\n ),\n gcp.projects.IAMAuditConfigAuditLogConfigArgs(\n exempted_members=[\"user:joebloggs@hashicorp.com\"],\n log_type=\"DATA_READ\",\n ),\n ],\n project=\"your-project-id\",\n service=\"allServices\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.IAMAuditConfig(\"project\", new()\n {\n AuditLogConfigs = new[]\n {\n new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs\n {\n LogType = \"ADMIN_READ\",\n },\n new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs\n {\n ExemptedMembers = new[]\n {\n \"user:joebloggs@hashicorp.com\",\n },\n LogType = \"DATA_READ\",\n },\n },\n Project = \"your-project-id\",\n Service = \"allServices\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewIAMAuditConfig(ctx, \"project\", \u0026projects.IAMAuditConfigArgs{\n\t\t\tAuditLogConfigs: projects.IAMAuditConfigAuditLogConfigArray{\n\t\t\t\t\u0026projects.IAMAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tLogType: pulumi.String(\"ADMIN_READ\"),\n\t\t\t\t},\n\t\t\t\t\u0026projects.IAMAuditConfigAuditLogConfigArgs{\n\t\t\t\t\tExemptedMembers: pulumi.StringArray{\n\t\t\t\t\t\tpulumi.String(\"user:joebloggs@hashicorp.com\"),\n\t\t\t\t\t},\n\t\t\t\t\tLogType: pulumi.String(\"DATA_READ\"),\n\t\t\t\t},\n\t\t\t},\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tService: pulumi.String(\"allServices\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.IAMAuditConfig;\nimport com.pulumi.gcp.projects.IAMAuditConfigArgs;\nimport com.pulumi.gcp.projects.inputs.IAMAuditConfigAuditLogConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 IAMAuditConfig(\"project\", IAMAuditConfigArgs.builder() \n .auditLogConfigs( \n IAMAuditConfigAuditLogConfigArgs.builder()\n .logType(\"ADMIN_READ\")\n .build(),\n IAMAuditConfigAuditLogConfigArgs.builder()\n .exemptedMembers(\"user:joebloggs@hashicorp.com\")\n .logType(\"DATA_READ\")\n .build())\n .project(\"your-project-id\")\n .service(\"allServices\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:IAMAuditConfig\n properties:\n auditLogConfigs:\n - logType: ADMIN_READ\n - exemptedMembers:\n - user:joebloggs@hashicorp.com\n logType: DATA_READ\n project: your-project-id\n service: allServices\n```\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `project_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMPolicy:IAMPolicy my_project \"your-project-id roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `project_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMPolicy:IAMPolicy my_project \"your-project-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `project_id`.\n\n```sh\n $ pulumi import gcp:projects/iAMPolicy:IAMPolicy my_project your-project-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMPolicy:IAMPolicy my_project \"your-project-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:projects/iAMPolicy:IAMPolicy to include the title of condition, e.g. `google_project_iam_binding.my_project \"{{your-project-id}} roles/{{role_id}} condition-title\"`\n```\n\n ", + "description": "\n\n\n## Import\n\nIAM member imports use space-delimited identifiers; the resource in question, the role, and the account.\n\nThis member resource can be imported using the `project_id`, role, and member e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMPolicy:IAMPolicy my_project \"your-project-id roles/viewer user:foo@example.com\"\n```\n\n IAM binding imports use space-delimited identifiers; the resource in question and the role.\n\nThis binding resource can be imported using the `project_id` and role, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMPolicy:IAMPolicy my_project \"your-project-id roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question.\n\nThis policy resource can be imported using the `project_id`.\n\n```sh\n $ pulumi import gcp:projects/iAMPolicy:IAMPolicy my_project your-project-id\n```\n\n IAM audit config imports use the identifier of the resource in question and the service, e.g.\n\n```sh\n $ pulumi import gcp:projects/iAMPolicy:IAMPolicy my_project \"your-project-id foo.googleapis.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. -\u003e **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure\n\n```sh\n $ pulumi import gcp:projects/iAMPolicy:IAMPolicy to include the title of condition, e.g. `google_project_iam_binding.my_project \"{{your-project-id}} roles/{{role_id}} condition-title\"`\n```\n\n ", "properties": { "etag": { "type": "string", @@ -181650,15 +183189,14 @@ } }, "gcp:projects/service:Service": { - "description": "Allows management of a single API service for a Google Cloud Platform project.\n\nFor a list of services available, visit the [API library page](https://console.cloud.google.com/apis/library)\nor run `gcloud services list --available`.\n\nThis resource requires the [Service Usage API](https://console.cloud.google.com/apis/library/serviceusage.googleapis.com)\nto use.\n\nTo get more information about `gcp.projects.Service`, see:\n\n* [API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1/services)\n* How-to Guides\n * [Enabling and Disabling Services](https://cloud.google.com/service-usage/docs/enable-disable)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.Service(\"project\", {\n disableDependentServices: true,\n project: \"your-project-id\",\n service: \"iam.googleapis.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.Service(\"project\",\n disable_dependent_services=True,\n project=\"your-project-id\",\n service=\"iam.googleapis.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.Service(\"project\", new()\n {\n DisableDependentServices = true,\n Project = \"your-project-id\",\n ServiceName = \"iam.googleapis.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewService(ctx, \"project\", \u0026projects.ServiceArgs{\n\t\t\tDisableDependentServices: pulumi.Bool(true),\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tService: pulumi.String(\"iam.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Service(\"project\", ServiceArgs.builder() \n .disableDependentServices(true)\n .project(\"your-project-id\")\n .service(\"iam.googleapis.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:Service\n properties:\n disableDependentServices: true\n project: your-project-id\n service: iam.googleapis.com\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nProject services can be imported using the `project_id` and `service`, e.g.\n\n```sh\n $ pulumi import gcp:projects/service:Service my_project your-project-id/iam.googleapis.com\n```\n\n Note that unlike other resources that fail if they already exist, `terraform apply` can be successfully used to verify already enabled services. This means that when importing existing resources into Terraform, you can either import the `google_project_service` resources or treat them as new infrastructure and run `terraform apply` to add them to state. ", + "description": "Allows management of a single API service for a Google Cloud Platform project. \n\nFor a list of services available, visit the [API library page](https://console.cloud.google.com/apis/library)\nor run `gcloud services list --available`.\n\nThis resource requires the [Service Usage API](https://console.cloud.google.com/apis/library/serviceusage.googleapis.com)\nto use.\n\nTo get more information about `gcp.projects.Service`, see:\n\n* [API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1/services)\n* How-to Guides\n * [Enabling and Disabling Services](https://cloud.google.com/service-usage/docs/enable-disable)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.projects.Service(\"project\", {\n disableDependentServices: true,\n project: \"your-project-id\",\n service: \"iam.googleapis.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.projects.Service(\"project\",\n disable_dependent_services=True,\n project=\"your-project-id\",\n service=\"iam.googleapis.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Projects.Service(\"project\", new()\n {\n DisableDependentServices = true,\n Project = \"your-project-id\",\n ServiceName = \"iam.googleapis.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := projects.NewService(ctx, \"project\", \u0026projects.ServiceArgs{\n\t\t\tDisableDependentServices: pulumi.Bool(true),\n\t\t\tProject: pulumi.String(\"your-project-id\"),\n\t\t\tService: pulumi.String(\"iam.googleapis.com\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.projects.Service;\nimport com.pulumi.gcp.projects.ServiceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Service(\"project\", ServiceArgs.builder() \n .disableDependentServices(true)\n .project(\"your-project-id\")\n .service(\"iam.googleapis.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:projects:Service\n properties:\n disableDependentServices: true\n project: your-project-id\n service: iam.googleapis.com\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nProject services can be imported using the `project_id` and `service`, e.g.\n\n```sh\n $ pulumi import gcp:projects/service:Service my_project your-project-id/iam.googleapis.com\n```\n\n Note that unlike other resources that fail if they already exist, `terraform apply` can be successfully used to verify already enabled services. This means that when importing existing resources into Terraform, you can either import the `google_project_service` resources or treat them as new infrastructure and run `terraform apply` to add them to state. ", "properties": { "disableDependentServices": { "type": "boolean", "description": "If `true`, services that are enabled\nand which depend on this service should also be disabled when this service is\ndestroyed. If `false` or unset, an error will be generated if any enabled\nservices depend on this service when destroying it.\n" }, "disableOnDestroy": { - "type": "boolean", - "description": "If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently.\n" + "type": "boolean" }, "project": { "type": "string", @@ -181684,8 +183222,7 @@ "description": "If `true`, services that are enabled\nand which depend on this service should also be disabled when this service is\ndestroyed. If `false` or unset, an error will be generated if any enabled\nservices depend on this service when destroying it.\n" }, "disableOnDestroy": { - "type": "boolean", - "description": "If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently.\n" + "type": "boolean" }, "project": { "type": "string", @@ -181714,8 +183251,7 @@ "description": "If `true`, services that are enabled\nand which depend on this service should also be disabled when this service is\ndestroyed. If `false` or unset, an error will be generated if any enabled\nservices depend on this service when destroying it.\n" }, "disableOnDestroy": { - "type": "boolean", - "description": "If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently.\n" + "type": "boolean" }, "project": { "type": "string", @@ -181737,7 +183273,7 @@ } }, "gcp:projects/serviceIdentity:ServiceIdentity": { - "description": "Generate service identity for a service.\n\n\u003e **Note:** Once created, this resource cannot be updated or destroyed. These\nactions are a no-op.\n\n\u003e **Note:** This resource can be used to retrieve the emails of the [Google-managed service accounts](https://cloud.google.com/iam/docs/service-agents) \nof the APIs that Google has configured with a Service Identity. You can run `gcloud beta services identity create --service SERVICE_NAME.googleapis.com` to\nverify if an API supports this.\n\nTo get more information about Service Identity, see:\n\n* [API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services/generateServiceIdentity)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Service Identity Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst hcSa = new gcp.projects.ServiceIdentity(\"hcSa\", {\n project: project.then(project =\u003e project.projectId),\n service: \"healthcare.googleapis.com\",\n}, {\n provider: google_beta,\n});\nconst hcSaBqJobuser = new gcp.projects.IAMMember(\"hcSaBqJobuser\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/bigquery.jobUser\",\n member: pulumi.interpolate`serviceAccount:${hcSa.email}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nhc_sa = gcp.projects.ServiceIdentity(\"hcSa\",\n project=project.project_id,\n service=\"healthcare.googleapis.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nhc_sa_bq_jobuser = gcp.projects.IAMMember(\"hcSaBqJobuser\",\n project=project.project_id,\n role=\"roles/bigquery.jobUser\",\n member=hc_sa.email.apply(lambda email: f\"serviceAccount:{email}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var hcSa = new Gcp.Projects.ServiceIdentity(\"hcSa\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Service = \"healthcare.googleapis.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var hcSaBqJobuser = new Gcp.Projects.IAMMember(\"hcSaBqJobuser\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/bigquery.jobUser\",\n Member = hcSa.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thcSa, err := projects.NewServiceIdentity(ctx, \"hcSa\", \u0026projects.ServiceIdentityArgs{\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tService: pulumi.String(\"healthcare.googleapis.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = projects.NewIAMMember(ctx, \"hcSaBqJobuser\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/bigquery.jobUser\"),\n\t\t\tMember: hcSa.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\treturn nil\n\t})\n}\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.projects.ServiceIdentity;\nimport com.pulumi.gcp.projects.ServiceIdentityArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\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 hcSa = new ServiceIdentity(\"hcSa\", ServiceIdentityArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .service(\"healthcare.googleapis.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var hcSaBqJobuser = new IAMMember(\"hcSaBqJobuser\", IAMMemberArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/bigquery.jobUser\")\n .member(hcSa.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hcSa:\n type: gcp:projects:ServiceIdentity\n properties:\n project: ${project.projectId}\n service: healthcare.googleapis.com\n options:\n provider: ${[\"google-beta\"]}\n hcSaBqJobuser:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/bigquery.jobUser\n member: serviceAccount:${hcSa.email}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource does not support import. ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Service Identity Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst hcSa = new gcp.projects.ServiceIdentity(\"hcSa\", {\n project: project.then(project =\u003e project.projectId),\n service: \"healthcare.googleapis.com\",\n}, {\n provider: google_beta,\n});\nconst hcSaBqJobuser = new gcp.projects.IAMMember(\"hcSaBqJobuser\", {\n project: project.then(project =\u003e project.projectId),\n role: \"roles/bigquery.jobUser\",\n member: pulumi.interpolate`serviceAccount:${hcSa.email}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nhc_sa = gcp.projects.ServiceIdentity(\"hcSa\",\n project=project.project_id,\n service=\"healthcare.googleapis.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nhc_sa_bq_jobuser = gcp.projects.IAMMember(\"hcSaBqJobuser\",\n project=project.project_id,\n role=\"roles/bigquery.jobUser\",\n member=hc_sa.email.apply(lambda email: f\"serviceAccount:{email}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var hcSa = new Gcp.Projects.ServiceIdentity(\"hcSa\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Service = \"healthcare.googleapis.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var hcSaBqJobuser = new Gcp.Projects.IAMMember(\"hcSaBqJobuser\", new()\n {\n Project = project.Apply(getProjectResult =\u003e getProjectResult.ProjectId),\n Role = \"roles/bigquery.jobUser\",\n Member = hcSa.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\thcSa, err := projects.NewServiceIdentity(ctx, \"hcSa\", \u0026projects.ServiceIdentityArgs{\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tService: pulumi.String(\"healthcare.googleapis.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = projects.NewIAMMember(ctx, \"hcSaBqJobuser\", \u0026projects.IAMMemberArgs{\n\t\t\tProject: *pulumi.String(project.ProjectId),\n\t\t\tRole: pulumi.String(\"roles/bigquery.jobUser\"),\n\t\t\tMember: hcSa.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\treturn nil\n\t})\n}\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.projects.ServiceIdentity;\nimport com.pulumi.gcp.projects.ServiceIdentityArgs;\nimport com.pulumi.gcp.projects.IAMMember;\nimport com.pulumi.gcp.projects.IAMMemberArgs;\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 hcSa = new ServiceIdentity(\"hcSa\", ServiceIdentityArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .service(\"healthcare.googleapis.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var hcSaBqJobuser = new IAMMember(\"hcSaBqJobuser\", IAMMemberArgs.builder() \n .project(project.applyValue(getProjectResult -\u003e getProjectResult.projectId()))\n .role(\"roles/bigquery.jobUser\")\n .member(hcSa.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n hcSa:\n type: gcp:projects:ServiceIdentity\n properties:\n project: ${project.projectId}\n service: healthcare.googleapis.com\n options:\n provider: ${[\"google-beta\"]}\n hcSaBqJobuser:\n type: gcp:projects:IAMMember\n properties:\n project: ${project.projectId}\n role: roles/bigquery.jobUser\n member: serviceAccount:${hcSa.email}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource does not support import. ", "properties": { "email": { "type": "string", @@ -181798,7 +183334,7 @@ } }, "gcp:projects/usageExportBucket:UsageExportBucket": { - "description": "Allows creation and management of a Google Cloud Platform project.\n\nProjects created with this resource must be associated with an Organization.\nSee the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details.\n\nThe user or service account that is running this provider when creating a `gcp.organizations.Project`\nresource must have `roles/resourcemanager.projectCreator` on the specified organization. See the\n[Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org)\ndoc for more information.\n\n\u003e This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account.\n\nTo get more information about projects, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects)\n* How-to Guides\n * [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myProject = new gcp.organizations.Project(\"myProject\", {\n orgId: \"1234567\",\n projectId: \"your-project-id\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_project = gcp.organizations.Project(\"myProject\",\n org_id=\"1234567\",\n project_id=\"your-project-id\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myProject = new Gcp.Organizations.Project(\"myProject\", new()\n {\n OrgId = \"1234567\",\n ProjectId = \"your-project-id\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewProject(ctx, \"myProject\", \u0026organizations.ProjectArgs{\n\t\t\tOrgId: pulumi.String(\"1234567\"),\n\t\t\tProjectId: pulumi.String(\"your-project-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.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var myProject = new Project(\"myProject\", ProjectArgs.builder() \n .orgId(\"1234567\")\n .projectId(\"your-project-id\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myProject:\n type: gcp:organizations:Project\n properties:\n orgId: '1234567'\n projectId: your-project-id\n```\n\nTo create a project under a specific folder\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst department1 = new gcp.organizations.Folder(\"department1\", {\n displayName: \"Department 1\",\n parent: \"organizations/1234567\",\n});\nconst myProject_in_a_folder = new gcp.organizations.Project(\"myProject-in-a-folder\", {\n projectId: \"your-project-id\",\n folderId: department1.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndepartment1 = gcp.organizations.Folder(\"department1\",\n display_name=\"Department 1\",\n parent=\"organizations/1234567\")\nmy_project_in_a_folder = gcp.organizations.Project(\"myProject-in-a-folder\",\n project_id=\"your-project-id\",\n folder_id=department1.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var department1 = new Gcp.Organizations.Folder(\"department1\", new()\n {\n DisplayName = \"Department 1\",\n Parent = \"organizations/1234567\",\n });\n\n var myProject_in_a_folder = new Gcp.Organizations.Project(\"myProject-in-a-folder\", new()\n {\n ProjectId = \"your-project-id\",\n FolderId = department1.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdepartment1, err := organizations.NewFolder(ctx, \"department1\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"Department 1\"),\n\t\t\tParent: pulumi.String(\"organizations/1234567\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.NewProject(ctx, \"myProject-in-a-folder\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"your-project-id\"),\n\t\t\tFolderId: department1.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.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var department1 = new Folder(\"department1\", FolderArgs.builder() \n .displayName(\"Department 1\")\n .parent(\"organizations/1234567\")\n .build());\n\n var myProject_in_a_folder = new Project(\"myProject-in-a-folder\", ProjectArgs.builder() \n .projectId(\"your-project-id\")\n .folderId(department1.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myProject-in-a-folder:\n type: gcp:organizations:Project\n properties:\n projectId: your-project-id\n folderId: ${department1.name}\n department1:\n type: gcp:organizations:Folder\n properties:\n displayName: Department 1\n parent: organizations/1234567\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nProjects can be imported using the `project_id`, e.g.\n\n```sh\n $ pulumi import gcp:projects/usageExportBucket:UsageExportBucket my_project your-project-id\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst myProject = new gcp.organizations.Project(\"myProject\", {\n orgId: \"1234567\",\n projectId: \"your-project-id\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmy_project = gcp.organizations.Project(\"myProject\",\n org_id=\"1234567\",\n project_id=\"your-project-id\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var myProject = new Gcp.Organizations.Project(\"myProject\", new()\n {\n OrgId = \"1234567\",\n ProjectId = \"your-project-id\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := organizations.NewProject(ctx, \"myProject\", \u0026organizations.ProjectArgs{\n\t\t\tOrgId: pulumi.String(\"1234567\"),\n\t\t\tProjectId: pulumi.String(\"your-project-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.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var myProject = new Project(\"myProject\", ProjectArgs.builder() \n .orgId(\"1234567\")\n .projectId(\"your-project-id\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myProject:\n type: gcp:organizations:Project\n properties:\n orgId: '1234567'\n projectId: your-project-id\n```\n\nTo create a project under a specific folder\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst department1 = new gcp.organizations.Folder(\"department1\", {\n displayName: \"Department 1\",\n parent: \"organizations/1234567\",\n});\nconst myProject_in_a_folder = new gcp.organizations.Project(\"myProject-in-a-folder\", {\n projectId: \"your-project-id\",\n folderId: department1.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndepartment1 = gcp.organizations.Folder(\"department1\",\n display_name=\"Department 1\",\n parent=\"organizations/1234567\")\nmy_project_in_a_folder = gcp.organizations.Project(\"myProject-in-a-folder\",\n project_id=\"your-project-id\",\n folder_id=department1.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var department1 = new Gcp.Organizations.Folder(\"department1\", new()\n {\n DisplayName = \"Department 1\",\n Parent = \"organizations/1234567\",\n });\n\n var myProject_in_a_folder = new Gcp.Organizations.Project(\"myProject-in-a-folder\", new()\n {\n ProjectId = \"your-project-id\",\n FolderId = department1.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tdepartment1, err := organizations.NewFolder(ctx, \"department1\", \u0026organizations.FolderArgs{\n\t\t\tDisplayName: pulumi.String(\"Department 1\"),\n\t\t\tParent: pulumi.String(\"organizations/1234567\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.NewProject(ctx, \"myProject-in-a-folder\", \u0026organizations.ProjectArgs{\n\t\t\tProjectId: pulumi.String(\"your-project-id\"),\n\t\t\tFolderId: department1.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.Folder;\nimport com.pulumi.gcp.organizations.FolderArgs;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var department1 = new Folder(\"department1\", FolderArgs.builder() \n .displayName(\"Department 1\")\n .parent(\"organizations/1234567\")\n .build());\n\n var myProject_in_a_folder = new Project(\"myProject-in-a-folder\", ProjectArgs.builder() \n .projectId(\"your-project-id\")\n .folderId(department1.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n myProject-in-a-folder:\n type: gcp:organizations:Project\n properties:\n projectId: your-project-id\n folderId: ${department1.name}\n department1:\n type: gcp:organizations:Folder\n properties:\n displayName: Department 1\n parent: organizations/1234567\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nProjects can be imported using the `project_id`, e.g.\n\n```sh\n $ pulumi import gcp:projects/usageExportBucket:UsageExportBucket my_project your-project-id\n```\n\n ", "properties": { "bucketName": { "type": "string", @@ -183227,7 +184763,7 @@ } }, "gcp:redis/instance:Instance": { - "description": "A Google Cloud Redis instance.\n\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/memorystore/docs/redis/reference/rest/v1/projects.locations.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/memorystore/docs/redis/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Redis Instance Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cache = new gcp.redis.Instance(\"cache\", {memorySizeGb: 1});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncache = gcp.redis.Instance(\"cache\", memory_size_gb=1)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cache = new Gcp.Redis.Instance(\"cache\", new()\n {\n MemorySizeGb = 1,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := redis.NewInstance(ctx, \"cache\", \u0026redis.InstanceArgs{\n\t\t\tMemorySizeGb: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.redis.Instance;\nimport com.pulumi.gcp.redis.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cache = new Instance(\"cache\", InstanceArgs.builder() \n .memorySizeGb(1)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cache:\n type: gcp:redis:Instance\n properties:\n memorySizeGb: 1\n```\n{{% /example %}}\n{{% example %}}\n### Redis Instance Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst redis-network = gcp.compute.getNetwork({\n name: \"redis-test-network\",\n});\nconst cache = new gcp.redis.Instance(\"cache\", {\n tier: \"STANDARD_HA\",\n memorySizeGb: 1,\n locationId: \"us-central1-a\",\n alternativeLocationId: \"us-central1-f\",\n authorizedNetwork: redis_network.then(redis_network =\u003e redis_network.id),\n redisVersion: \"REDIS_4_0\",\n displayName: \"Test Instance\",\n reservedIpRange: \"192.168.0.0/29\",\n labels: {\n my_key: \"my_val\",\n other_key: \"other_val\",\n },\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"TUESDAY\",\n startTime: {\n hours: 0,\n minutes: 30,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nredis_network = gcp.compute.get_network(name=\"redis-test-network\")\ncache = gcp.redis.Instance(\"cache\",\n tier=\"STANDARD_HA\",\n memory_size_gb=1,\n location_id=\"us-central1-a\",\n alternative_location_id=\"us-central1-f\",\n authorized_network=redis_network.id,\n redis_version=\"REDIS_4_0\",\n display_name=\"Test Instance\",\n reserved_ip_range=\"192.168.0.0/29\",\n labels={\n \"my_key\": \"my_val\",\n \"other_key\": \"other_val\",\n },\n maintenance_policy=gcp.redis.InstanceMaintenancePolicyArgs(\n weekly_maintenance_windows=[gcp.redis.InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs(\n day=\"TUESDAY\",\n start_time=gcp.redis.InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs(\n hours=0,\n minutes=30,\n seconds=0,\n nanos=0,\n ),\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var redis_network = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"redis-test-network\",\n });\n\n var cache = new Gcp.Redis.Instance(\"cache\", new()\n {\n Tier = \"STANDARD_HA\",\n MemorySizeGb = 1,\n LocationId = \"us-central1-a\",\n AlternativeLocationId = \"us-central1-f\",\n AuthorizedNetwork = redis_network.Apply(redis_network =\u003e redis_network.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n RedisVersion = \"REDIS_4_0\",\n DisplayName = \"Test Instance\",\n ReservedIpRange = \"192.168.0.0/29\",\n Labels = \n {\n { \"my_key\", \"my_val\" },\n { \"other_key\", \"other_val\" },\n },\n MaintenancePolicy = new Gcp.Redis.Inputs.InstanceMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Redis.Inputs.InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"TUESDAY\",\n StartTime = new Gcp.Redis.Inputs.InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 0,\n Minutes = 30,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tredis_network, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"redis-test-network\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewInstance(ctx, \"cache\", \u0026redis.InstanceArgs{\n\t\t\tTier: pulumi.String(\"STANDARD_HA\"),\n\t\t\tMemorySizeGb: pulumi.Int(1),\n\t\t\tLocationId: pulumi.String(\"us-central1-a\"),\n\t\t\tAlternativeLocationId: pulumi.String(\"us-central1-f\"),\n\t\t\tAuthorizedNetwork: *pulumi.String(redis_network.Id),\n\t\t\tRedisVersion: pulumi.String(\"REDIS_4_0\"),\n\t\t\tDisplayName: pulumi.String(\"Test Instance\"),\n\t\t\tReservedIpRange: pulumi.String(\"192.168.0.0/29\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_val\"),\n\t\t\t\t\"other_key\": pulumi.String(\"other_val\"),\n\t\t\t},\n\t\t\tMaintenancePolicy: \u0026redis.InstanceMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: redis.InstanceMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026redis.InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"TUESDAY\"),\n\t\t\t\t\t\tStartTime: \u0026redis.InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(0),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(30),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.redis.Instance;\nimport com.pulumi.gcp.redis.InstanceArgs;\nimport com.pulumi.gcp.redis.inputs.InstanceMaintenancePolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 redis-network = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"redis-test-network\")\n .build());\n\n var cache = new Instance(\"cache\", InstanceArgs.builder() \n .tier(\"STANDARD_HA\")\n .memorySizeGb(1)\n .locationId(\"us-central1-a\")\n .alternativeLocationId(\"us-central1-f\")\n .authorizedNetwork(redis_network.id())\n .redisVersion(\"REDIS_4_0\")\n .displayName(\"Test Instance\")\n .reservedIpRange(\"192.168.0.0/29\")\n .labels(Map.ofEntries(\n Map.entry(\"my_key\", \"my_val\"),\n Map.entry(\"other_key\", \"other_val\")\n ))\n .maintenancePolicy(InstanceMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"TUESDAY\")\n .startTime(InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(0)\n .minutes(30)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cache:\n type: gcp:redis:Instance\n properties:\n tier: STANDARD_HA\n memorySizeGb: 1\n locationId: us-central1-a\n alternativeLocationId: us-central1-f\n authorizedNetwork: ${[\"redis-network\"].id}\n redisVersion: REDIS_4_0\n displayName: Test Instance\n reservedIpRange: 192.168.0.0/29\n labels:\n my_key: my_val\n other_key: other_val\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: TUESDAY\n startTime:\n hours: 0\n minutes: 30\n seconds: 0\n nanos: 0\nvariables:\n redis-network:\n fn::invoke:\n Function: gcp:compute:getNetwork\n Arguments:\n name: redis-test-network\n```\n{{% /example %}}\n{{% example %}}\n### Redis Instance Full With Persistence Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cache_persis = new gcp.redis.Instance(\"cache-persis\", {\n alternativeLocationId: \"us-central1-f\",\n locationId: \"us-central1-a\",\n memorySizeGb: 1,\n persistenceConfig: {\n persistenceMode: \"RDB\",\n rdbSnapshotPeriod: \"TWELVE_HOURS\",\n },\n tier: \"STANDARD_HA\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncache_persis = gcp.redis.Instance(\"cache-persis\",\n alternative_location_id=\"us-central1-f\",\n location_id=\"us-central1-a\",\n memory_size_gb=1,\n persistence_config=gcp.redis.InstancePersistenceConfigArgs(\n persistence_mode=\"RDB\",\n rdb_snapshot_period=\"TWELVE_HOURS\",\n ),\n tier=\"STANDARD_HA\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cache_persis = new Gcp.Redis.Instance(\"cache-persis\", new()\n {\n AlternativeLocationId = \"us-central1-f\",\n LocationId = \"us-central1-a\",\n MemorySizeGb = 1,\n PersistenceConfig = new Gcp.Redis.Inputs.InstancePersistenceConfigArgs\n {\n PersistenceMode = \"RDB\",\n RdbSnapshotPeriod = \"TWELVE_HOURS\",\n },\n Tier = \"STANDARD_HA\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := redis.NewInstance(ctx, \"cache-persis\", \u0026redis.InstanceArgs{\n\t\t\tAlternativeLocationId: pulumi.String(\"us-central1-f\"),\n\t\t\tLocationId: pulumi.String(\"us-central1-a\"),\n\t\t\tMemorySizeGb: pulumi.Int(1),\n\t\t\tPersistenceConfig: \u0026redis.InstancePersistenceConfigArgs{\n\t\t\t\tPersistenceMode: pulumi.String(\"RDB\"),\n\t\t\t\tRdbSnapshotPeriod: pulumi.String(\"TWELVE_HOURS\"),\n\t\t\t},\n\t\t\tTier: pulumi.String(\"STANDARD_HA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.redis.Instance;\nimport com.pulumi.gcp.redis.InstanceArgs;\nimport com.pulumi.gcp.redis.inputs.InstancePersistenceConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cache_persis = new Instance(\"cache-persis\", InstanceArgs.builder() \n .alternativeLocationId(\"us-central1-f\")\n .locationId(\"us-central1-a\")\n .memorySizeGb(1)\n .persistenceConfig(InstancePersistenceConfigArgs.builder()\n .persistenceMode(\"RDB\")\n .rdbSnapshotPeriod(\"TWELVE_HOURS\")\n .build())\n .tier(\"STANDARD_HA\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cache-persis:\n type: gcp:redis:Instance\n properties:\n alternativeLocationId: us-central1-f\n locationId: us-central1-a\n memorySizeGb: 1\n persistenceConfig:\n persistenceMode: RDB\n rdbSnapshotPeriod: TWELVE_HOURS\n tier: STANDARD_HA\n```\n{{% /example %}}\n{{% example %}}\n### Redis Instance Private Service\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst redis-network = gcp.compute.getNetwork({\n name: \"redis-test-network\",\n});\nconst serviceRange = new gcp.compute.GlobalAddress(\"serviceRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: redis_network.then(redis_network =\u003e redis_network.id),\n});\nconst privateServiceConnection = new gcp.servicenetworking.Connection(\"privateServiceConnection\", {\n network: redis_network.then(redis_network =\u003e redis_network.id),\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [serviceRange.name],\n});\nconst cache = new gcp.redis.Instance(\"cache\", {\n tier: \"STANDARD_HA\",\n memorySizeGb: 1,\n locationId: \"us-central1-a\",\n alternativeLocationId: \"us-central1-f\",\n authorizedNetwork: redis_network.then(redis_network =\u003e redis_network.id),\n connectMode: \"PRIVATE_SERVICE_ACCESS\",\n redisVersion: \"REDIS_4_0\",\n displayName: \"Test Instance\",\n}, {\n dependsOn: [privateServiceConnection],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nredis_network = gcp.compute.get_network(name=\"redis-test-network\")\nservice_range = gcp.compute.GlobalAddress(\"serviceRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=redis_network.id)\nprivate_service_connection = gcp.servicenetworking.Connection(\"privateServiceConnection\",\n network=redis_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[service_range.name])\ncache = gcp.redis.Instance(\"cache\",\n tier=\"STANDARD_HA\",\n memory_size_gb=1,\n location_id=\"us-central1-a\",\n alternative_location_id=\"us-central1-f\",\n authorized_network=redis_network.id,\n connect_mode=\"PRIVATE_SERVICE_ACCESS\",\n redis_version=\"REDIS_4_0\",\n display_name=\"Test Instance\",\n opts=pulumi.ResourceOptions(depends_on=[private_service_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var redis_network = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"redis-test-network\",\n });\n\n var serviceRange = new Gcp.Compute.GlobalAddress(\"serviceRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = redis_network.Apply(redis_network =\u003e redis_network.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n });\n\n var privateServiceConnection = new Gcp.ServiceNetworking.Connection(\"privateServiceConnection\", new()\n {\n Network = redis_network.Apply(redis_network =\u003e redis_network.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n serviceRange.Name,\n },\n });\n\n var cache = new Gcp.Redis.Instance(\"cache\", new()\n {\n Tier = \"STANDARD_HA\",\n MemorySizeGb = 1,\n LocationId = \"us-central1-a\",\n AlternativeLocationId = \"us-central1-f\",\n AuthorizedNetwork = redis_network.Apply(redis_network =\u003e redis_network.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n ConnectMode = \"PRIVATE_SERVICE_ACCESS\",\n RedisVersion = \"REDIS_4_0\",\n DisplayName = \"Test Instance\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n privateServiceConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tredis_network, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"redis-test-network\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tserviceRange, err := compute.NewGlobalAddress(ctx, \"serviceRange\", \u0026compute.GlobalAddressArgs{\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: *pulumi.String(redis_network.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateServiceConnection, err := servicenetworking.NewConnection(ctx, \"privateServiceConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: *pulumi.String(redis_network.Id),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tserviceRange.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 = redis.NewInstance(ctx, \"cache\", \u0026redis.InstanceArgs{\n\t\t\tTier: pulumi.String(\"STANDARD_HA\"),\n\t\t\tMemorySizeGb: pulumi.Int(1),\n\t\t\tLocationId: pulumi.String(\"us-central1-a\"),\n\t\t\tAlternativeLocationId: pulumi.String(\"us-central1-f\"),\n\t\t\tAuthorizedNetwork: *pulumi.String(redis_network.Id),\n\t\t\tConnectMode: pulumi.String(\"PRIVATE_SERVICE_ACCESS\"),\n\t\t\tRedisVersion: pulumi.String(\"REDIS_4_0\"),\n\t\t\tDisplayName: pulumi.String(\"Test Instance\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprivateServiceConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.redis.Instance;\nimport com.pulumi.gcp.redis.InstanceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var redis-network = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"redis-test-network\")\n .build());\n\n var serviceRange = new GlobalAddress(\"serviceRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(redis_network.id())\n .build());\n\n var privateServiceConnection = new Connection(\"privateServiceConnection\", ConnectionArgs.builder() \n .network(redis_network.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(serviceRange.name())\n .build());\n\n var cache = new Instance(\"cache\", InstanceArgs.builder() \n .tier(\"STANDARD_HA\")\n .memorySizeGb(1)\n .locationId(\"us-central1-a\")\n .alternativeLocationId(\"us-central1-f\")\n .authorizedNetwork(redis_network.id())\n .connectMode(\"PRIVATE_SERVICE_ACCESS\")\n .redisVersion(\"REDIS_4_0\")\n .displayName(\"Test Instance\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(privateServiceConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n serviceRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${[\"redis-network\"].id}\n privateServiceConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${[\"redis-network\"].id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${serviceRange.name}\n cache:\n type: gcp:redis:Instance\n properties:\n tier: STANDARD_HA\n memorySizeGb: 1\n locationId: us-central1-a\n alternativeLocationId: us-central1-f\n authorizedNetwork: ${[\"redis-network\"].id}\n connectMode: PRIVATE_SERVICE_ACCESS\n redisVersion: REDIS_4_0\n displayName: Test Instance\n options:\n dependson:\n - ${privateServiceConnection}\nvariables:\n redis-network:\n fn::invoke:\n Function: gcp:compute:getNetwork\n Arguments:\n name: redis-test-network\n```\n{{% /example %}}\n{{% example %}}\n### Redis Instance Mrr\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst redis-network = gcp.compute.getNetwork({\n name: \"redis-test-network\",\n});\nconst cache = new gcp.redis.Instance(\"cache\", {\n tier: \"STANDARD_HA\",\n memorySizeGb: 5,\n locationId: \"us-central1-a\",\n alternativeLocationId: \"us-central1-f\",\n authorizedNetwork: redis_network.then(redis_network =\u003e redis_network.id),\n redisVersion: \"REDIS_6_X\",\n displayName: \"Terraform Test Instance\",\n reservedIpRange: \"192.168.0.0/28\",\n replicaCount: 5,\n readReplicasMode: \"READ_REPLICAS_ENABLED\",\n labels: {\n my_key: \"my_val\",\n other_key: \"other_val\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nredis_network = gcp.compute.get_network(name=\"redis-test-network\")\ncache = gcp.redis.Instance(\"cache\",\n tier=\"STANDARD_HA\",\n memory_size_gb=5,\n location_id=\"us-central1-a\",\n alternative_location_id=\"us-central1-f\",\n authorized_network=redis_network.id,\n redis_version=\"REDIS_6_X\",\n display_name=\"Terraform Test Instance\",\n reserved_ip_range=\"192.168.0.0/28\",\n replica_count=5,\n read_replicas_mode=\"READ_REPLICAS_ENABLED\",\n labels={\n \"my_key\": \"my_val\",\n \"other_key\": \"other_val\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var redis_network = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"redis-test-network\",\n });\n\n var cache = new Gcp.Redis.Instance(\"cache\", new()\n {\n Tier = \"STANDARD_HA\",\n MemorySizeGb = 5,\n LocationId = \"us-central1-a\",\n AlternativeLocationId = \"us-central1-f\",\n AuthorizedNetwork = redis_network.Apply(redis_network =\u003e redis_network.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n RedisVersion = \"REDIS_6_X\",\n DisplayName = \"Terraform Test Instance\",\n ReservedIpRange = \"192.168.0.0/28\",\n ReplicaCount = 5,\n ReadReplicasMode = \"READ_REPLICAS_ENABLED\",\n Labels = \n {\n { \"my_key\", \"my_val\" },\n { \"other_key\", \"other_val\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tredis_network, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"redis-test-network\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewInstance(ctx, \"cache\", \u0026redis.InstanceArgs{\n\t\t\tTier: pulumi.String(\"STANDARD_HA\"),\n\t\t\tMemorySizeGb: pulumi.Int(5),\n\t\t\tLocationId: pulumi.String(\"us-central1-a\"),\n\t\t\tAlternativeLocationId: pulumi.String(\"us-central1-f\"),\n\t\t\tAuthorizedNetwork: *pulumi.String(redis_network.Id),\n\t\t\tRedisVersion: pulumi.String(\"REDIS_6_X\"),\n\t\t\tDisplayName: pulumi.String(\"Terraform Test Instance\"),\n\t\t\tReservedIpRange: pulumi.String(\"192.168.0.0/28\"),\n\t\t\tReplicaCount: pulumi.Int(5),\n\t\t\tReadReplicasMode: pulumi.String(\"READ_REPLICAS_ENABLED\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_val\"),\n\t\t\t\t\"other_key\": pulumi.String(\"other_val\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.redis.Instance;\nimport com.pulumi.gcp.redis.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 redis-network = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"redis-test-network\")\n .build());\n\n var cache = new Instance(\"cache\", InstanceArgs.builder() \n .tier(\"STANDARD_HA\")\n .memorySizeGb(5)\n .locationId(\"us-central1-a\")\n .alternativeLocationId(\"us-central1-f\")\n .authorizedNetwork(redis_network.id())\n .redisVersion(\"REDIS_6_X\")\n .displayName(\"Terraform Test Instance\")\n .reservedIpRange(\"192.168.0.0/28\")\n .replicaCount(5)\n .readReplicasMode(\"READ_REPLICAS_ENABLED\")\n .labels(Map.ofEntries(\n Map.entry(\"my_key\", \"my_val\"),\n Map.entry(\"other_key\", \"other_val\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cache:\n type: gcp:redis:Instance\n properties:\n tier: STANDARD_HA\n memorySizeGb: 5\n locationId: us-central1-a\n alternativeLocationId: us-central1-f\n authorizedNetwork: ${[\"redis-network\"].id}\n redisVersion: REDIS_6_X\n displayName: Terraform Test Instance\n reservedIpRange: 192.168.0.0/28\n replicaCount: 5\n readReplicasMode: READ_REPLICAS_ENABLED\n labels:\n my_key: my_val\n other_key: other_val\nvariables:\n redis-network:\n fn::invoke:\n Function: gcp:compute:getNetwork\n Arguments:\n name: redis-test-network\n```\n{{% /example %}}\n{{% example %}}\n### Redis Instance Cmek\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst redisKeyring = new gcp.kms.KeyRing(\"redisKeyring\", {location: \"us-central1\"});\nconst redisKey = new gcp.kms.CryptoKey(\"redisKey\", {keyRing: redisKeyring.id});\nconst redis-network = gcp.compute.getNetwork({\n name: \"redis-test-network\",\n});\nconst cache = new gcp.redis.Instance(\"cache\", {\n tier: \"STANDARD_HA\",\n memorySizeGb: 1,\n locationId: \"us-central1-a\",\n alternativeLocationId: \"us-central1-f\",\n authorizedNetwork: redis_network.then(redis_network =\u003e redis_network.id),\n redisVersion: \"REDIS_6_X\",\n displayName: \"Terraform Test Instance\",\n reservedIpRange: \"192.168.0.0/29\",\n labels: {\n my_key: \"my_val\",\n other_key: \"other_val\",\n },\n customerManagedKey: redisKey.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nredis_keyring = gcp.kms.KeyRing(\"redisKeyring\", location=\"us-central1\")\nredis_key = gcp.kms.CryptoKey(\"redisKey\", key_ring=redis_keyring.id)\nredis_network = gcp.compute.get_network(name=\"redis-test-network\")\ncache = gcp.redis.Instance(\"cache\",\n tier=\"STANDARD_HA\",\n memory_size_gb=1,\n location_id=\"us-central1-a\",\n alternative_location_id=\"us-central1-f\",\n authorized_network=redis_network.id,\n redis_version=\"REDIS_6_X\",\n display_name=\"Terraform Test Instance\",\n reserved_ip_range=\"192.168.0.0/29\",\n labels={\n \"my_key\": \"my_val\",\n \"other_key\": \"other_val\",\n },\n customer_managed_key=redis_key.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var redisKeyring = new Gcp.Kms.KeyRing(\"redisKeyring\", new()\n {\n Location = \"us-central1\",\n });\n\n var redisKey = new Gcp.Kms.CryptoKey(\"redisKey\", new()\n {\n KeyRing = redisKeyring.Id,\n });\n\n var redis_network = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"redis-test-network\",\n });\n\n var cache = new Gcp.Redis.Instance(\"cache\", new()\n {\n Tier = \"STANDARD_HA\",\n MemorySizeGb = 1,\n LocationId = \"us-central1-a\",\n AlternativeLocationId = \"us-central1-f\",\n AuthorizedNetwork = redis_network.Apply(redis_network =\u003e redis_network.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n RedisVersion = \"REDIS_6_X\",\n DisplayName = \"Terraform Test Instance\",\n ReservedIpRange = \"192.168.0.0/29\",\n Labels = \n {\n { \"my_key\", \"my_val\" },\n { \"other_key\", \"other_val\" },\n },\n CustomerManagedKey = redisKey.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tredisKeyring, err := kms.NewKeyRing(ctx, \"redisKeyring\", \u0026kms.KeyRingArgs{\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\tredisKey, err := kms.NewCryptoKey(ctx, \"redisKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: redisKeyring.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tredis_network, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"redis-test-network\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewInstance(ctx, \"cache\", \u0026redis.InstanceArgs{\n\t\t\tTier: pulumi.String(\"STANDARD_HA\"),\n\t\t\tMemorySizeGb: pulumi.Int(1),\n\t\t\tLocationId: pulumi.String(\"us-central1-a\"),\n\t\t\tAlternativeLocationId: pulumi.String(\"us-central1-f\"),\n\t\t\tAuthorizedNetwork: *pulumi.String(redis_network.Id),\n\t\t\tRedisVersion: pulumi.String(\"REDIS_6_X\"),\n\t\t\tDisplayName: pulumi.String(\"Terraform Test Instance\"),\n\t\t\tReservedIpRange: pulumi.String(\"192.168.0.0/29\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_val\"),\n\t\t\t\t\"other_key\": pulumi.String(\"other_val\"),\n\t\t\t},\n\t\t\tCustomerManagedKey: redisKey.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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\nimport com.pulumi.gcp.redis.Instance;\nimport com.pulumi.gcp.redis.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var redisKeyring = new KeyRing(\"redisKeyring\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var redisKey = new CryptoKey(\"redisKey\", CryptoKeyArgs.builder() \n .keyRing(redisKeyring.id())\n .build());\n\n final var redis-network = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"redis-test-network\")\n .build());\n\n var cache = new Instance(\"cache\", InstanceArgs.builder() \n .tier(\"STANDARD_HA\")\n .memorySizeGb(1)\n .locationId(\"us-central1-a\")\n .alternativeLocationId(\"us-central1-f\")\n .authorizedNetwork(redis_network.id())\n .redisVersion(\"REDIS_6_X\")\n .displayName(\"Terraform Test Instance\")\n .reservedIpRange(\"192.168.0.0/29\")\n .labels(Map.ofEntries(\n Map.entry(\"my_key\", \"my_val\"),\n Map.entry(\"other_key\", \"other_val\")\n ))\n .customerManagedKey(redisKey.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cache:\n type: gcp:redis:Instance\n properties:\n tier: STANDARD_HA\n memorySizeGb: 1\n locationId: us-central1-a\n alternativeLocationId: us-central1-f\n authorizedNetwork: ${[\"redis-network\"].id}\n redisVersion: REDIS_6_X\n displayName: Terraform Test Instance\n reservedIpRange: 192.168.0.0/29\n labels:\n my_key: my_val\n other_key: other_val\n customerManagedKey: ${redisKey.id}\n redisKeyring:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n redisKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${redisKeyring.id}\nvariables:\n redis-network:\n fn::invoke:\n Function: gcp:compute:getNetwork\n Arguments:\n name: redis-test-network\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:redis/instance:Instance default projects/{{project}}/locations/{{region}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:redis/instance:Instance default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:redis/instance:Instance default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:redis/instance:Instance default {{name}}\n```\n\n ", + "description": "A Google Cloud Redis instance.\n\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/memorystore/docs/redis/reference/rest/v1/projects.locations.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/memorystore/docs/redis/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Redis Instance Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cache = new gcp.redis.Instance(\"cache\", {memorySizeGb: 1});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncache = gcp.redis.Instance(\"cache\", memory_size_gb=1)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cache = new Gcp.Redis.Instance(\"cache\", new()\n {\n MemorySizeGb = 1,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := redis.NewInstance(ctx, \"cache\", \u0026redis.InstanceArgs{\n\t\t\tMemorySizeGb: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.redis.Instance;\nimport com.pulumi.gcp.redis.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cache = new Instance(\"cache\", InstanceArgs.builder() \n .memorySizeGb(1)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cache:\n type: gcp:redis:Instance\n properties:\n memorySizeGb: 1\n```\n{{% /example %}}\n{{% example %}}\n### Redis Instance Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst redis-network = gcp.compute.getNetwork({\n name: \"redis-test-network\",\n});\nconst cache = new gcp.redis.Instance(\"cache\", {\n tier: \"STANDARD_HA\",\n memorySizeGb: 1,\n locationId: \"us-central1-a\",\n alternativeLocationId: \"us-central1-f\",\n authorizedNetwork: redis_network.then(redis_network =\u003e redis_network.id),\n redisVersion: \"REDIS_4_0\",\n displayName: \"Terraform Test Instance\",\n reservedIpRange: \"192.168.0.0/29\",\n labels: {\n my_key: \"my_val\",\n other_key: \"other_val\",\n },\n maintenancePolicy: {\n weeklyMaintenanceWindows: [{\n day: \"TUESDAY\",\n startTime: {\n hours: 0,\n minutes: 30,\n seconds: 0,\n nanos: 0,\n },\n }],\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nredis_network = gcp.compute.get_network(name=\"redis-test-network\")\ncache = gcp.redis.Instance(\"cache\",\n tier=\"STANDARD_HA\",\n memory_size_gb=1,\n location_id=\"us-central1-a\",\n alternative_location_id=\"us-central1-f\",\n authorized_network=redis_network.id,\n redis_version=\"REDIS_4_0\",\n display_name=\"Terraform Test Instance\",\n reserved_ip_range=\"192.168.0.0/29\",\n labels={\n \"my_key\": \"my_val\",\n \"other_key\": \"other_val\",\n },\n maintenance_policy=gcp.redis.InstanceMaintenancePolicyArgs(\n weekly_maintenance_windows=[gcp.redis.InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs(\n day=\"TUESDAY\",\n start_time=gcp.redis.InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs(\n hours=0,\n minutes=30,\n seconds=0,\n nanos=0,\n ),\n )],\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var redis_network = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"redis-test-network\",\n });\n\n var cache = new Gcp.Redis.Instance(\"cache\", new()\n {\n Tier = \"STANDARD_HA\",\n MemorySizeGb = 1,\n LocationId = \"us-central1-a\",\n AlternativeLocationId = \"us-central1-f\",\n AuthorizedNetwork = redis_network.Apply(redis_network =\u003e redis_network.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n RedisVersion = \"REDIS_4_0\",\n DisplayName = \"Terraform Test Instance\",\n ReservedIpRange = \"192.168.0.0/29\",\n Labels = \n {\n { \"my_key\", \"my_val\" },\n { \"other_key\", \"other_val\" },\n },\n MaintenancePolicy = new Gcp.Redis.Inputs.InstanceMaintenancePolicyArgs\n {\n WeeklyMaintenanceWindows = new[]\n {\n new Gcp.Redis.Inputs.InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs\n {\n Day = \"TUESDAY\",\n StartTime = new Gcp.Redis.Inputs.InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs\n {\n Hours = 0,\n Minutes = 30,\n Seconds = 0,\n Nanos = 0,\n },\n },\n },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tredis_network, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"redis-test-network\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewInstance(ctx, \"cache\", \u0026redis.InstanceArgs{\n\t\t\tTier: pulumi.String(\"STANDARD_HA\"),\n\t\t\tMemorySizeGb: pulumi.Int(1),\n\t\t\tLocationId: pulumi.String(\"us-central1-a\"),\n\t\t\tAlternativeLocationId: pulumi.String(\"us-central1-f\"),\n\t\t\tAuthorizedNetwork: *pulumi.String(redis_network.Id),\n\t\t\tRedisVersion: pulumi.String(\"REDIS_4_0\"),\n\t\t\tDisplayName: pulumi.String(\"Terraform Test Instance\"),\n\t\t\tReservedIpRange: pulumi.String(\"192.168.0.0/29\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_val\"),\n\t\t\t\t\"other_key\": pulumi.String(\"other_val\"),\n\t\t\t},\n\t\t\tMaintenancePolicy: \u0026redis.InstanceMaintenancePolicyArgs{\n\t\t\t\tWeeklyMaintenanceWindows: redis.InstanceMaintenancePolicyWeeklyMaintenanceWindowArray{\n\t\t\t\t\t\u0026redis.InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs{\n\t\t\t\t\t\tDay: pulumi.String(\"TUESDAY\"),\n\t\t\t\t\t\tStartTime: \u0026redis.InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs{\n\t\t\t\t\t\t\tHours: pulumi.Int(0),\n\t\t\t\t\t\t\tMinutes: pulumi.Int(30),\n\t\t\t\t\t\t\tSeconds: pulumi.Int(0),\n\t\t\t\t\t\t\tNanos: pulumi.Int(0),\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.redis.Instance;\nimport com.pulumi.gcp.redis.InstanceArgs;\nimport com.pulumi.gcp.redis.inputs.InstanceMaintenancePolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 redis-network = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"redis-test-network\")\n .build());\n\n var cache = new Instance(\"cache\", InstanceArgs.builder() \n .tier(\"STANDARD_HA\")\n .memorySizeGb(1)\n .locationId(\"us-central1-a\")\n .alternativeLocationId(\"us-central1-f\")\n .authorizedNetwork(redis_network.id())\n .redisVersion(\"REDIS_4_0\")\n .displayName(\"Terraform Test Instance\")\n .reservedIpRange(\"192.168.0.0/29\")\n .labels(Map.ofEntries(\n Map.entry(\"my_key\", \"my_val\"),\n Map.entry(\"other_key\", \"other_val\")\n ))\n .maintenancePolicy(InstanceMaintenancePolicyArgs.builder()\n .weeklyMaintenanceWindows(InstanceMaintenancePolicyWeeklyMaintenanceWindowArgs.builder()\n .day(\"TUESDAY\")\n .startTime(InstanceMaintenancePolicyWeeklyMaintenanceWindowStartTimeArgs.builder()\n .hours(0)\n .minutes(30)\n .seconds(0)\n .nanos(0)\n .build())\n .build())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cache:\n type: gcp:redis:Instance\n properties:\n tier: STANDARD_HA\n memorySizeGb: 1\n locationId: us-central1-a\n alternativeLocationId: us-central1-f\n authorizedNetwork: ${[\"redis-network\"].id}\n redisVersion: REDIS_4_0\n displayName: Terraform Test Instance\n reservedIpRange: 192.168.0.0/29\n labels:\n my_key: my_val\n other_key: other_val\n maintenancePolicy:\n weeklyMaintenanceWindows:\n - day: TUESDAY\n startTime:\n hours: 0\n minutes: 30\n seconds: 0\n nanos: 0\nvariables:\n redis-network:\n fn::invoke:\n Function: gcp:compute:getNetwork\n Arguments:\n name: redis-test-network\n```\n{{% /example %}}\n{{% example %}}\n### Redis Instance Full With Persistence Config\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst cache_persis = new gcp.redis.Instance(\"cache-persis\", {\n alternativeLocationId: \"us-central1-f\",\n locationId: \"us-central1-a\",\n memorySizeGb: 1,\n persistenceConfig: {\n persistenceMode: \"RDB\",\n rdbSnapshotPeriod: \"TWELVE_HOURS\",\n },\n tier: \"STANDARD_HA\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ncache_persis = gcp.redis.Instance(\"cache-persis\",\n alternative_location_id=\"us-central1-f\",\n location_id=\"us-central1-a\",\n memory_size_gb=1,\n persistence_config=gcp.redis.InstancePersistenceConfigArgs(\n persistence_mode=\"RDB\",\n rdb_snapshot_period=\"TWELVE_HOURS\",\n ),\n tier=\"STANDARD_HA\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var cache_persis = new Gcp.Redis.Instance(\"cache-persis\", new()\n {\n AlternativeLocationId = \"us-central1-f\",\n LocationId = \"us-central1-a\",\n MemorySizeGb = 1,\n PersistenceConfig = new Gcp.Redis.Inputs.InstancePersistenceConfigArgs\n {\n PersistenceMode = \"RDB\",\n RdbSnapshotPeriod = \"TWELVE_HOURS\",\n },\n Tier = \"STANDARD_HA\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := redis.NewInstance(ctx, \"cache-persis\", \u0026redis.InstanceArgs{\n\t\t\tAlternativeLocationId: pulumi.String(\"us-central1-f\"),\n\t\t\tLocationId: pulumi.String(\"us-central1-a\"),\n\t\t\tMemorySizeGb: pulumi.Int(1),\n\t\t\tPersistenceConfig: \u0026redis.InstancePersistenceConfigArgs{\n\t\t\t\tPersistenceMode: pulumi.String(\"RDB\"),\n\t\t\t\tRdbSnapshotPeriod: pulumi.String(\"TWELVE_HOURS\"),\n\t\t\t},\n\t\t\tTier: pulumi.String(\"STANDARD_HA\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.redis.Instance;\nimport com.pulumi.gcp.redis.InstanceArgs;\nimport com.pulumi.gcp.redis.inputs.InstancePersistenceConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var cache_persis = new Instance(\"cache-persis\", InstanceArgs.builder() \n .alternativeLocationId(\"us-central1-f\")\n .locationId(\"us-central1-a\")\n .memorySizeGb(1)\n .persistenceConfig(InstancePersistenceConfigArgs.builder()\n .persistenceMode(\"RDB\")\n .rdbSnapshotPeriod(\"TWELVE_HOURS\")\n .build())\n .tier(\"STANDARD_HA\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cache-persis:\n type: gcp:redis:Instance\n properties:\n alternativeLocationId: us-central1-f\n locationId: us-central1-a\n memorySizeGb: 1\n persistenceConfig:\n persistenceMode: RDB\n rdbSnapshotPeriod: TWELVE_HOURS\n tier: STANDARD_HA\n```\n{{% /example %}}\n{{% example %}}\n### Redis Instance Private Service\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst redis-network = gcp.compute.getNetwork({\n name: \"redis-test-network\",\n});\nconst serviceRange = new gcp.compute.GlobalAddress(\"serviceRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: redis_network.then(redis_network =\u003e redis_network.id),\n});\nconst privateServiceConnection = new gcp.servicenetworking.Connection(\"privateServiceConnection\", {\n network: redis_network.then(redis_network =\u003e redis_network.id),\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [serviceRange.name],\n});\nconst cache = new gcp.redis.Instance(\"cache\", {\n tier: \"STANDARD_HA\",\n memorySizeGb: 1,\n locationId: \"us-central1-a\",\n alternativeLocationId: \"us-central1-f\",\n authorizedNetwork: redis_network.then(redis_network =\u003e redis_network.id),\n connectMode: \"PRIVATE_SERVICE_ACCESS\",\n redisVersion: \"REDIS_4_0\",\n displayName: \"Terraform Test Instance\",\n}, {\n dependsOn: [privateServiceConnection],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nredis_network = gcp.compute.get_network(name=\"redis-test-network\")\nservice_range = gcp.compute.GlobalAddress(\"serviceRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=redis_network.id)\nprivate_service_connection = gcp.servicenetworking.Connection(\"privateServiceConnection\",\n network=redis_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[service_range.name])\ncache = gcp.redis.Instance(\"cache\",\n tier=\"STANDARD_HA\",\n memory_size_gb=1,\n location_id=\"us-central1-a\",\n alternative_location_id=\"us-central1-f\",\n authorized_network=redis_network.id,\n connect_mode=\"PRIVATE_SERVICE_ACCESS\",\n redis_version=\"REDIS_4_0\",\n display_name=\"Terraform Test Instance\",\n opts=pulumi.ResourceOptions(depends_on=[private_service_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var redis_network = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"redis-test-network\",\n });\n\n var serviceRange = new Gcp.Compute.GlobalAddress(\"serviceRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = redis_network.Apply(redis_network =\u003e redis_network.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n });\n\n var privateServiceConnection = new Gcp.ServiceNetworking.Connection(\"privateServiceConnection\", new()\n {\n Network = redis_network.Apply(redis_network =\u003e redis_network.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n serviceRange.Name,\n },\n });\n\n var cache = new Gcp.Redis.Instance(\"cache\", new()\n {\n Tier = \"STANDARD_HA\",\n MemorySizeGb = 1,\n LocationId = \"us-central1-a\",\n AlternativeLocationId = \"us-central1-f\",\n AuthorizedNetwork = redis_network.Apply(redis_network =\u003e redis_network.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n ConnectMode = \"PRIVATE_SERVICE_ACCESS\",\n RedisVersion = \"REDIS_4_0\",\n DisplayName = \"Terraform Test Instance\",\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n privateServiceConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tredis_network, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"redis-test-network\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tserviceRange, err := compute.NewGlobalAddress(ctx, \"serviceRange\", \u0026compute.GlobalAddressArgs{\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: *pulumi.String(redis_network.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateServiceConnection, err := servicenetworking.NewConnection(ctx, \"privateServiceConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: *pulumi.String(redis_network.Id),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tserviceRange.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 = redis.NewInstance(ctx, \"cache\", \u0026redis.InstanceArgs{\n\t\t\tTier: pulumi.String(\"STANDARD_HA\"),\n\t\t\tMemorySizeGb: pulumi.Int(1),\n\t\t\tLocationId: pulumi.String(\"us-central1-a\"),\n\t\t\tAlternativeLocationId: pulumi.String(\"us-central1-f\"),\n\t\t\tAuthorizedNetwork: *pulumi.String(redis_network.Id),\n\t\t\tConnectMode: pulumi.String(\"PRIVATE_SERVICE_ACCESS\"),\n\t\t\tRedisVersion: pulumi.String(\"REDIS_4_0\"),\n\t\t\tDisplayName: pulumi.String(\"Terraform Test Instance\"),\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tprivateServiceConnection,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.servicenetworking.Connection;\nimport com.pulumi.gcp.servicenetworking.ConnectionArgs;\nimport com.pulumi.gcp.redis.Instance;\nimport com.pulumi.gcp.redis.InstanceArgs;\nimport com.pulumi.resources.CustomResourceOptions;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var redis-network = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"redis-test-network\")\n .build());\n\n var serviceRange = new GlobalAddress(\"serviceRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(redis_network.id())\n .build());\n\n var privateServiceConnection = new Connection(\"privateServiceConnection\", ConnectionArgs.builder() \n .network(redis_network.id())\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(serviceRange.name())\n .build());\n\n var cache = new Instance(\"cache\", InstanceArgs.builder() \n .tier(\"STANDARD_HA\")\n .memorySizeGb(1)\n .locationId(\"us-central1-a\")\n .alternativeLocationId(\"us-central1-f\")\n .authorizedNetwork(redis_network.id())\n .connectMode(\"PRIVATE_SERVICE_ACCESS\")\n .redisVersion(\"REDIS_4_0\")\n .displayName(\"Terraform Test Instance\")\n .build(), CustomResourceOptions.builder()\n .dependsOn(privateServiceConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n serviceRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${[\"redis-network\"].id}\n privateServiceConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${[\"redis-network\"].id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${serviceRange.name}\n cache:\n type: gcp:redis:Instance\n properties:\n tier: STANDARD_HA\n memorySizeGb: 1\n locationId: us-central1-a\n alternativeLocationId: us-central1-f\n authorizedNetwork: ${[\"redis-network\"].id}\n connectMode: PRIVATE_SERVICE_ACCESS\n redisVersion: REDIS_4_0\n displayName: Terraform Test Instance\n options:\n dependson:\n - ${privateServiceConnection}\nvariables:\n redis-network:\n fn::invoke:\n Function: gcp:compute:getNetwork\n Arguments:\n name: redis-test-network\n```\n{{% /example %}}\n{{% example %}}\n### Redis Instance Mrr\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst redis-network = gcp.compute.getNetwork({\n name: \"redis-test-network\",\n});\nconst cache = new gcp.redis.Instance(\"cache\", {\n tier: \"STANDARD_HA\",\n memorySizeGb: 5,\n locationId: \"us-central1-a\",\n alternativeLocationId: \"us-central1-f\",\n authorizedNetwork: redis_network.then(redis_network =\u003e redis_network.id),\n redisVersion: \"REDIS_6_X\",\n displayName: \"Terraform Test Instance\",\n reservedIpRange: \"192.168.0.0/28\",\n replicaCount: 5,\n readReplicasMode: \"READ_REPLICAS_ENABLED\",\n labels: {\n my_key: \"my_val\",\n other_key: \"other_val\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nredis_network = gcp.compute.get_network(name=\"redis-test-network\")\ncache = gcp.redis.Instance(\"cache\",\n tier=\"STANDARD_HA\",\n memory_size_gb=5,\n location_id=\"us-central1-a\",\n alternative_location_id=\"us-central1-f\",\n authorized_network=redis_network.id,\n redis_version=\"REDIS_6_X\",\n display_name=\"Terraform Test Instance\",\n reserved_ip_range=\"192.168.0.0/28\",\n replica_count=5,\n read_replicas_mode=\"READ_REPLICAS_ENABLED\",\n labels={\n \"my_key\": \"my_val\",\n \"other_key\": \"other_val\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var redis_network = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"redis-test-network\",\n });\n\n var cache = new Gcp.Redis.Instance(\"cache\", new()\n {\n Tier = \"STANDARD_HA\",\n MemorySizeGb = 5,\n LocationId = \"us-central1-a\",\n AlternativeLocationId = \"us-central1-f\",\n AuthorizedNetwork = redis_network.Apply(redis_network =\u003e redis_network.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n RedisVersion = \"REDIS_6_X\",\n DisplayName = \"Terraform Test Instance\",\n ReservedIpRange = \"192.168.0.0/28\",\n ReplicaCount = 5,\n ReadReplicasMode = \"READ_REPLICAS_ENABLED\",\n Labels = \n {\n { \"my_key\", \"my_val\" },\n { \"other_key\", \"other_val\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tredis_network, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"redis-test-network\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewInstance(ctx, \"cache\", \u0026redis.InstanceArgs{\n\t\t\tTier: pulumi.String(\"STANDARD_HA\"),\n\t\t\tMemorySizeGb: pulumi.Int(5),\n\t\t\tLocationId: pulumi.String(\"us-central1-a\"),\n\t\t\tAlternativeLocationId: pulumi.String(\"us-central1-f\"),\n\t\t\tAuthorizedNetwork: *pulumi.String(redis_network.Id),\n\t\t\tRedisVersion: pulumi.String(\"REDIS_6_X\"),\n\t\t\tDisplayName: pulumi.String(\"Terraform Test Instance\"),\n\t\t\tReservedIpRange: pulumi.String(\"192.168.0.0/28\"),\n\t\t\tReplicaCount: pulumi.Int(5),\n\t\t\tReadReplicasMode: pulumi.String(\"READ_REPLICAS_ENABLED\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_val\"),\n\t\t\t\t\"other_key\": pulumi.String(\"other_val\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.redis.Instance;\nimport com.pulumi.gcp.redis.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 redis-network = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"redis-test-network\")\n .build());\n\n var cache = new Instance(\"cache\", InstanceArgs.builder() \n .tier(\"STANDARD_HA\")\n .memorySizeGb(5)\n .locationId(\"us-central1-a\")\n .alternativeLocationId(\"us-central1-f\")\n .authorizedNetwork(redis_network.id())\n .redisVersion(\"REDIS_6_X\")\n .displayName(\"Terraform Test Instance\")\n .reservedIpRange(\"192.168.0.0/28\")\n .replicaCount(5)\n .readReplicasMode(\"READ_REPLICAS_ENABLED\")\n .labels(Map.ofEntries(\n Map.entry(\"my_key\", \"my_val\"),\n Map.entry(\"other_key\", \"other_val\")\n ))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cache:\n type: gcp:redis:Instance\n properties:\n tier: STANDARD_HA\n memorySizeGb: 5\n locationId: us-central1-a\n alternativeLocationId: us-central1-f\n authorizedNetwork: ${[\"redis-network\"].id}\n redisVersion: REDIS_6_X\n displayName: Terraform Test Instance\n reservedIpRange: 192.168.0.0/28\n replicaCount: 5\n readReplicasMode: READ_REPLICAS_ENABLED\n labels:\n my_key: my_val\n other_key: other_val\nvariables:\n redis-network:\n fn::invoke:\n Function: gcp:compute:getNetwork\n Arguments:\n name: redis-test-network\n```\n{{% /example %}}\n{{% example %}}\n### Redis Instance Cmek\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst redisKeyring = new gcp.kms.KeyRing(\"redisKeyring\", {location: \"us-central1\"});\nconst redisKey = new gcp.kms.CryptoKey(\"redisKey\", {keyRing: redisKeyring.id});\nconst redis-network = gcp.compute.getNetwork({\n name: \"redis-test-network\",\n});\nconst cache = new gcp.redis.Instance(\"cache\", {\n tier: \"STANDARD_HA\",\n memorySizeGb: 1,\n locationId: \"us-central1-a\",\n alternativeLocationId: \"us-central1-f\",\n authorizedNetwork: redis_network.then(redis_network =\u003e redis_network.id),\n redisVersion: \"REDIS_6_X\",\n displayName: \"Terraform Test Instance\",\n reservedIpRange: \"192.168.0.0/29\",\n labels: {\n my_key: \"my_val\",\n other_key: \"other_val\",\n },\n customerManagedKey: redisKey.id,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nredis_keyring = gcp.kms.KeyRing(\"redisKeyring\", location=\"us-central1\")\nredis_key = gcp.kms.CryptoKey(\"redisKey\", key_ring=redis_keyring.id)\nredis_network = gcp.compute.get_network(name=\"redis-test-network\")\ncache = gcp.redis.Instance(\"cache\",\n tier=\"STANDARD_HA\",\n memory_size_gb=1,\n location_id=\"us-central1-a\",\n alternative_location_id=\"us-central1-f\",\n authorized_network=redis_network.id,\n redis_version=\"REDIS_6_X\",\n display_name=\"Terraform Test Instance\",\n reserved_ip_range=\"192.168.0.0/29\",\n labels={\n \"my_key\": \"my_val\",\n \"other_key\": \"other_val\",\n },\n customer_managed_key=redis_key.id)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var redisKeyring = new Gcp.Kms.KeyRing(\"redisKeyring\", new()\n {\n Location = \"us-central1\",\n });\n\n var redisKey = new Gcp.Kms.CryptoKey(\"redisKey\", new()\n {\n KeyRing = redisKeyring.Id,\n });\n\n var redis_network = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"redis-test-network\",\n });\n\n var cache = new Gcp.Redis.Instance(\"cache\", new()\n {\n Tier = \"STANDARD_HA\",\n MemorySizeGb = 1,\n LocationId = \"us-central1-a\",\n AlternativeLocationId = \"us-central1-f\",\n AuthorizedNetwork = redis_network.Apply(redis_network =\u003e redis_network.Apply(getNetworkResult =\u003e getNetworkResult.Id)),\n RedisVersion = \"REDIS_6_X\",\n DisplayName = \"Terraform Test Instance\",\n ReservedIpRange = \"192.168.0.0/29\",\n Labels = \n {\n { \"my_key\", \"my_val\" },\n { \"other_key\", \"other_val\" },\n },\n CustomerManagedKey = redisKey.Id,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/redis\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tredisKeyring, err := kms.NewKeyRing(ctx, \"redisKeyring\", \u0026kms.KeyRingArgs{\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\tredisKey, err := kms.NewCryptoKey(ctx, \"redisKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: redisKeyring.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tredis_network, err := compute.LookupNetwork(ctx, \u0026compute.LookupNetworkArgs{\n\t\t\tName: \"redis-test-network\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = redis.NewInstance(ctx, \"cache\", \u0026redis.InstanceArgs{\n\t\t\tTier: pulumi.String(\"STANDARD_HA\"),\n\t\t\tMemorySizeGb: pulumi.Int(1),\n\t\t\tLocationId: pulumi.String(\"us-central1-a\"),\n\t\t\tAlternativeLocationId: pulumi.String(\"us-central1-f\"),\n\t\t\tAuthorizedNetwork: *pulumi.String(redis_network.Id),\n\t\t\tRedisVersion: pulumi.String(\"REDIS_6_X\"),\n\t\t\tDisplayName: pulumi.String(\"Terraform Test Instance\"),\n\t\t\tReservedIpRange: pulumi.String(\"192.168.0.0/29\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"my_key\": pulumi.String(\"my_val\"),\n\t\t\t\t\"other_key\": pulumi.String(\"other_val\"),\n\t\t\t},\n\t\t\tCustomerManagedKey: redisKey.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.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\nimport com.pulumi.gcp.redis.Instance;\nimport com.pulumi.gcp.redis.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var redisKeyring = new KeyRing(\"redisKeyring\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var redisKey = new CryptoKey(\"redisKey\", CryptoKeyArgs.builder() \n .keyRing(redisKeyring.id())\n .build());\n\n final var redis-network = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"redis-test-network\")\n .build());\n\n var cache = new Instance(\"cache\", InstanceArgs.builder() \n .tier(\"STANDARD_HA\")\n .memorySizeGb(1)\n .locationId(\"us-central1-a\")\n .alternativeLocationId(\"us-central1-f\")\n .authorizedNetwork(redis_network.id())\n .redisVersion(\"REDIS_6_X\")\n .displayName(\"Terraform Test Instance\")\n .reservedIpRange(\"192.168.0.0/29\")\n .labels(Map.ofEntries(\n Map.entry(\"my_key\", \"my_val\"),\n Map.entry(\"other_key\", \"other_val\")\n ))\n .customerManagedKey(redisKey.id())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cache:\n type: gcp:redis:Instance\n properties:\n tier: STANDARD_HA\n memorySizeGb: 1\n locationId: us-central1-a\n alternativeLocationId: us-central1-f\n authorizedNetwork: ${[\"redis-network\"].id}\n redisVersion: REDIS_6_X\n displayName: Terraform Test Instance\n reservedIpRange: 192.168.0.0/29\n labels:\n my_key: my_val\n other_key: other_val\n customerManagedKey: ${redisKey.id}\n redisKeyring:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n redisKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${redisKeyring.id}\nvariables:\n redis-network:\n fn::invoke:\n Function: gcp:compute:getNetwork\n Arguments:\n name: redis-test-network\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:redis/instance:Instance default projects/{{project}}/locations/{{region}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:redis/instance:Instance default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:redis/instance:Instance default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:redis/instance:Instance default {{name}}\n```\n\n ", "properties": { "alternativeLocationId": { "type": "string", @@ -184214,7 +185750,7 @@ } }, "gcp:secretmanager/secret:Secret": { - "description": "A Secret is a logical secret whose value and versions can be accessed.\n\nTo get more information about Secret, see:\n\n* [API documentation](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets)\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Secret Config Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret_basic = new gcp.secretmanager.Secret(\"secret-basic\", {\n labels: {\n label: \"my-label\",\n },\n replication: {\n userManaged: {\n replicas: [\n {\n location: \"us-central1\",\n },\n {\n location: \"us-east1\",\n },\n ],\n },\n },\n secretId: \"secret\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret_basic = gcp.secretmanager.Secret(\"secret-basic\",\n labels={\n \"label\": \"my-label\",\n },\n replication=gcp.secretmanager.SecretReplicationArgs(\n user_managed=gcp.secretmanager.SecretReplicationUserManagedArgs(\n replicas=[\n gcp.secretmanager.SecretReplicationUserManagedReplicaArgs(\n location=\"us-central1\",\n ),\n gcp.secretmanager.SecretReplicationUserManagedReplicaArgs(\n location=\"us-east1\",\n ),\n ],\n ),\n ),\n secret_id=\"secret\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret_basic = new Gcp.SecretManager.Secret(\"secret-basic\", new()\n {\n Labels = \n {\n { \"label\", \"my-label\" },\n },\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n UserManaged = new Gcp.SecretManager.Inputs.SecretReplicationUserManagedArgs\n {\n Replicas = new[]\n {\n new Gcp.SecretManager.Inputs.SecretReplicationUserManagedReplicaArgs\n {\n Location = \"us-central1\",\n },\n new Gcp.SecretManager.Inputs.SecretReplicationUserManagedReplicaArgs\n {\n Location = \"us-east1\",\n },\n },\n },\n },\n SecretId = \"secret\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := secretmanager.NewSecret(ctx, \"secret-basic\", \u0026secretmanager.SecretArgs{\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"my-label\"),\n\t\t\t},\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tUserManaged: \u0026secretmanager.SecretReplicationUserManagedArgs{\n\t\t\t\t\tReplicas: secretmanager.SecretReplicationUserManagedReplicaArray{\n\t\t\t\t\t\t\u0026secretmanager.SecretReplicationUserManagedReplicaArgs{\n\t\t\t\t\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026secretmanager.SecretReplicationUserManagedReplicaArgs{\n\t\t\t\t\t\t\tLocation: pulumi.String(\"us-east1\"),\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\tSecretId: pulumi.String(\"secret\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationUserManagedArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret_basic = new Secret(\"secret-basic\", SecretArgs.builder() \n .labels(Map.of(\"label\", \"my-label\"))\n .replication(SecretReplicationArgs.builder()\n .userManaged(SecretReplicationUserManagedArgs.builder()\n .replicas( \n SecretReplicationUserManagedReplicaArgs.builder()\n .location(\"us-central1\")\n .build(),\n SecretReplicationUserManagedReplicaArgs.builder()\n .location(\"us-east1\")\n .build())\n .build())\n .build())\n .secretId(\"secret\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n secret-basic:\n type: gcp:secretmanager:Secret\n properties:\n labels:\n label: my-label\n replication:\n userManaged:\n replicas:\n - location: us-central1\n - location: us-east1\n secretId: secret\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSecret can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:secretmanager/secret:Secret default projects/{{project}}/secrets/{{secret_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:secretmanager/secret:Secret default {{project}}/{{secret_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:secretmanager/secret:Secret default {{secret_id}}\n```\n\n ", + "description": "A Secret is a logical secret whose value and versions can be accessed.\n\n\nTo get more information about Secret, see:\n\n* [API documentation](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Secret Config Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret_basic = new gcp.secretmanager.Secret(\"secret-basic\", {\n labels: {\n label: \"my-label\",\n },\n replication: {\n userManaged: {\n replicas: [\n {\n location: \"us-central1\",\n },\n {\n location: \"us-east1\",\n },\n ],\n },\n },\n secretId: \"secret\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret_basic = gcp.secretmanager.Secret(\"secret-basic\",\n labels={\n \"label\": \"my-label\",\n },\n replication=gcp.secretmanager.SecretReplicationArgs(\n user_managed=gcp.secretmanager.SecretReplicationUserManagedArgs(\n replicas=[\n gcp.secretmanager.SecretReplicationUserManagedReplicaArgs(\n location=\"us-central1\",\n ),\n gcp.secretmanager.SecretReplicationUserManagedReplicaArgs(\n location=\"us-east1\",\n ),\n ],\n ),\n ),\n secret_id=\"secret\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret_basic = new Gcp.SecretManager.Secret(\"secret-basic\", new()\n {\n Labels = \n {\n { \"label\", \"my-label\" },\n },\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n UserManaged = new Gcp.SecretManager.Inputs.SecretReplicationUserManagedArgs\n {\n Replicas = new[]\n {\n new Gcp.SecretManager.Inputs.SecretReplicationUserManagedReplicaArgs\n {\n Location = \"us-central1\",\n },\n new Gcp.SecretManager.Inputs.SecretReplicationUserManagedReplicaArgs\n {\n Location = \"us-east1\",\n },\n },\n },\n },\n SecretId = \"secret\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := secretmanager.NewSecret(ctx, \"secret-basic\", \u0026secretmanager.SecretArgs{\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"my-label\"),\n\t\t\t},\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tUserManaged: \u0026secretmanager.SecretReplicationUserManagedArgs{\n\t\t\t\t\tReplicas: secretmanager.SecretReplicationUserManagedReplicaArray{\n\t\t\t\t\t\t\u0026secretmanager.SecretReplicationUserManagedReplicaArgs{\n\t\t\t\t\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t\u0026secretmanager.SecretReplicationUserManagedReplicaArgs{\n\t\t\t\t\t\t\tLocation: pulumi.String(\"us-east1\"),\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\tSecretId: pulumi.String(\"secret\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationUserManagedArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret_basic = new Secret(\"secret-basic\", SecretArgs.builder() \n .labels(Map.of(\"label\", \"my-label\"))\n .replication(SecretReplicationArgs.builder()\n .userManaged(SecretReplicationUserManagedArgs.builder()\n .replicas( \n SecretReplicationUserManagedReplicaArgs.builder()\n .location(\"us-central1\")\n .build(),\n SecretReplicationUserManagedReplicaArgs.builder()\n .location(\"us-east1\")\n .build())\n .build())\n .build())\n .secretId(\"secret\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n secret-basic:\n type: gcp:secretmanager:Secret\n properties:\n labels:\n label: my-label\n replication:\n userManaged:\n replicas:\n - location: us-central1\n - location: us-east1\n secretId: secret\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSecret can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:secretmanager/secret:Secret default projects/{{project}}/secrets/{{secret_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:secretmanager/secret:Secret default {{project}}/{{secret_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:secretmanager/secret:Secret default {{secret_id}}\n```\n\n ", "properties": { "createTime": { "type": "string", @@ -184377,7 +185913,7 @@ } }, "gcp:secretmanager/secretIamBinding:SecretIamBinding": { - "description": "Three different resources help you manage your IAM policy for Secret Manager Secret. Each of these resources serves a different use case:\n\n* `gcp.secretmanager.SecretIamPolicy`: Authoritative. Sets the IAM policy for the secret and replaces any existing policy already attached.\n* `gcp.secretmanager.SecretIamBinding`: 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 secret are preserved.\n* `gcp.secretmanager.SecretIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the secret are preserved.\n\n\u003e **Note:** `gcp.secretmanager.SecretIamPolicy` **cannot** be used in conjunction with `gcp.secretmanager.SecretIamBinding` and `gcp.secretmanager.SecretIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.secretmanager.SecretIamBinding` resources **can be** used in conjunction with `gcp.secretmanager.SecretIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_secret\\_manager\\_secret\\_iam\\_policy\n\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/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.secretmanager.SecretIamPolicy(\"policy\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/secretmanager.secretAccessor\",\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\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.secretmanager.SecretIamPolicy;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:secretmanager:SecretIamPolicy\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\n## google\\_secret\\_manager\\_secret\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.secretmanager.SecretIamBinding(\"binding\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\n Role = \"roles/secretmanager.secretAccessor\",\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/v6/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\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\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.secretmanager.SecretIamBinding;\nimport com.pulumi.gcp.secretmanager.SecretIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SecretIamBinding(\"binding\", SecretIamBindingArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:secretmanager:SecretIamBinding\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\n## google\\_secret\\_manager\\_secret\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\n role: \"roles/secretmanager.secretAccessor\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.secretmanager.SecretIamMember(\"member\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\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.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SecretIamMember(\"member\", SecretIamMemberArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:secretmanager:SecretIamMember\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/secrets/{{secret_id}} * {{project}}/{{secret_id}} * {{secret_id}} Any variables not passed in the import command will be taken from the provider configuration. Secret Manager secret IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamBinding:SecretIamBinding editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamBinding:SecretIamBinding editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamBinding:SecretIamBinding editor projects/{{project}}/secrets/{{secret_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "Three different resources help you manage your IAM policy for Secret Manager Secret. Each of these resources serves a different use case:\n\n* `gcp.secretmanager.SecretIamPolicy`: Authoritative. Sets the IAM policy for the secret and replaces any existing policy already attached.\n* `gcp.secretmanager.SecretIamBinding`: 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 secret are preserved.\n* `gcp.secretmanager.SecretIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the secret are preserved.\n\n\u003e **Note:** `gcp.secretmanager.SecretIamPolicy` **cannot** be used in conjunction with `gcp.secretmanager.SecretIamBinding` and `gcp.secretmanager.SecretIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.secretmanager.SecretIamBinding` resources **can be** used in conjunction with `gcp.secretmanager.SecretIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n\n## google\\_secret\\_manager\\_secret\\_iam\\_policy\n\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/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.secretmanager.SecretIamPolicy(\"policy\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/secretmanager.secretAccessor\",\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\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.secretmanager.SecretIamPolicy;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:secretmanager:SecretIamPolicy\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\n## google\\_secret\\_manager\\_secret\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.secretmanager.SecretIamBinding(\"binding\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\n Role = \"roles/secretmanager.secretAccessor\",\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/v6/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\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\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.secretmanager.SecretIamBinding;\nimport com.pulumi.gcp.secretmanager.SecretIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SecretIamBinding(\"binding\", SecretIamBindingArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:secretmanager:SecretIamBinding\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\n## google\\_secret\\_manager\\_secret\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\n role: \"roles/secretmanager.secretAccessor\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.secretmanager.SecretIamMember(\"member\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\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.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SecretIamMember(\"member\", SecretIamMemberArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:secretmanager:SecretIamMember\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/secrets/{{secret_id}} * {{project}}/{{secret_id}} * {{secret_id}} Any variables not passed in the import command will be taken from the provider configuration. Secret Manager secret IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamBinding:SecretIamBinding editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamBinding:SecretIamBinding editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamBinding:SecretIamBinding editor projects/{{project}}/secrets/{{secret_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:secretmanager/SecretIamBindingCondition:SecretIamBindingCondition" @@ -184478,7 +186014,7 @@ } }, "gcp:secretmanager/secretIamMember:SecretIamMember": { - "description": "Three different resources help you manage your IAM policy for Secret Manager Secret. Each of these resources serves a different use case:\n\n* `gcp.secretmanager.SecretIamPolicy`: Authoritative. Sets the IAM policy for the secret and replaces any existing policy already attached.\n* `gcp.secretmanager.SecretIamBinding`: 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 secret are preserved.\n* `gcp.secretmanager.SecretIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the secret are preserved.\n\n\u003e **Note:** `gcp.secretmanager.SecretIamPolicy` **cannot** be used in conjunction with `gcp.secretmanager.SecretIamBinding` and `gcp.secretmanager.SecretIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.secretmanager.SecretIamBinding` resources **can be** used in conjunction with `gcp.secretmanager.SecretIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_secret\\_manager\\_secret\\_iam\\_policy\n\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/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.secretmanager.SecretIamPolicy(\"policy\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/secretmanager.secretAccessor\",\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\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.secretmanager.SecretIamPolicy;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:secretmanager:SecretIamPolicy\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\n## google\\_secret\\_manager\\_secret\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.secretmanager.SecretIamBinding(\"binding\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\n Role = \"roles/secretmanager.secretAccessor\",\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/v6/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\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\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.secretmanager.SecretIamBinding;\nimport com.pulumi.gcp.secretmanager.SecretIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SecretIamBinding(\"binding\", SecretIamBindingArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:secretmanager:SecretIamBinding\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\n## google\\_secret\\_manager\\_secret\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\n role: \"roles/secretmanager.secretAccessor\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.secretmanager.SecretIamMember(\"member\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\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.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SecretIamMember(\"member\", SecretIamMemberArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:secretmanager:SecretIamMember\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/secrets/{{secret_id}} * {{project}}/{{secret_id}} * {{secret_id}} Any variables not passed in the import command will be taken from the provider configuration. Secret Manager secret IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamMember:SecretIamMember editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamMember:SecretIamMember editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamMember:SecretIamMember editor projects/{{project}}/secrets/{{secret_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "Three different resources help you manage your IAM policy for Secret Manager Secret. Each of these resources serves a different use case:\n\n* `gcp.secretmanager.SecretIamPolicy`: Authoritative. Sets the IAM policy for the secret and replaces any existing policy already attached.\n* `gcp.secretmanager.SecretIamBinding`: 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 secret are preserved.\n* `gcp.secretmanager.SecretIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the secret are preserved.\n\n\u003e **Note:** `gcp.secretmanager.SecretIamPolicy` **cannot** be used in conjunction with `gcp.secretmanager.SecretIamBinding` and `gcp.secretmanager.SecretIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.secretmanager.SecretIamBinding` resources **can be** used in conjunction with `gcp.secretmanager.SecretIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n\n## google\\_secret\\_manager\\_secret\\_iam\\_policy\n\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/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.secretmanager.SecretIamPolicy(\"policy\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/secretmanager.secretAccessor\",\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\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.secretmanager.SecretIamPolicy;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:secretmanager:SecretIamPolicy\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\n## google\\_secret\\_manager\\_secret\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.secretmanager.SecretIamBinding(\"binding\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\n Role = \"roles/secretmanager.secretAccessor\",\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/v6/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\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\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.secretmanager.SecretIamBinding;\nimport com.pulumi.gcp.secretmanager.SecretIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SecretIamBinding(\"binding\", SecretIamBindingArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:secretmanager:SecretIamBinding\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\n## google\\_secret\\_manager\\_secret\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\n role: \"roles/secretmanager.secretAccessor\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.secretmanager.SecretIamMember(\"member\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\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.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SecretIamMember(\"member\", SecretIamMemberArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:secretmanager:SecretIamMember\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/secrets/{{secret_id}} * {{project}}/{{secret_id}} * {{secret_id}} Any variables not passed in the import command will be taken from the provider configuration. Secret Manager secret IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamMember:SecretIamMember editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamMember:SecretIamMember editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamMember:SecretIamMember editor projects/{{project}}/secrets/{{secret_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:secretmanager/SecretIamMemberCondition:SecretIamMemberCondition" @@ -184572,7 +186108,7 @@ } }, "gcp:secretmanager/secretIamPolicy:SecretIamPolicy": { - "description": "Three different resources help you manage your IAM policy for Secret Manager Secret. Each of these resources serves a different use case:\n\n* `gcp.secretmanager.SecretIamPolicy`: Authoritative. Sets the IAM policy for the secret and replaces any existing policy already attached.\n* `gcp.secretmanager.SecretIamBinding`: 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 secret are preserved.\n* `gcp.secretmanager.SecretIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the secret are preserved.\n\n\u003e **Note:** `gcp.secretmanager.SecretIamPolicy` **cannot** be used in conjunction with `gcp.secretmanager.SecretIamBinding` and `gcp.secretmanager.SecretIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.secretmanager.SecretIamBinding` resources **can be** used in conjunction with `gcp.secretmanager.SecretIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_secret\\_manager\\_secret\\_iam\\_policy\n\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/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.secretmanager.SecretIamPolicy(\"policy\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/secretmanager.secretAccessor\",\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\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.secretmanager.SecretIamPolicy;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:secretmanager:SecretIamPolicy\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\n## google\\_secret\\_manager\\_secret\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.secretmanager.SecretIamBinding(\"binding\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\n Role = \"roles/secretmanager.secretAccessor\",\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/v6/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\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\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.secretmanager.SecretIamBinding;\nimport com.pulumi.gcp.secretmanager.SecretIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SecretIamBinding(\"binding\", SecretIamBindingArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:secretmanager:SecretIamBinding\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\n## google\\_secret\\_manager\\_secret\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\n role: \"roles/secretmanager.secretAccessor\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.secretmanager.SecretIamMember(\"member\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\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.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SecretIamMember(\"member\", SecretIamMemberArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:secretmanager:SecretIamMember\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/secrets/{{secret_id}} * {{project}}/{{secret_id}} * {{secret_id}} Any variables not passed in the import command will be taken from the provider configuration. Secret Manager secret IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamPolicy:SecretIamPolicy editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamPolicy:SecretIamPolicy editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamPolicy:SecretIamPolicy editor projects/{{project}}/secrets/{{secret_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "Three different resources help you manage your IAM policy for Secret Manager Secret. Each of these resources serves a different use case:\n\n* `gcp.secretmanager.SecretIamPolicy`: Authoritative. Sets the IAM policy for the secret and replaces any existing policy already attached.\n* `gcp.secretmanager.SecretIamBinding`: 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 secret are preserved.\n* `gcp.secretmanager.SecretIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the secret are preserved.\n\n\u003e **Note:** `gcp.secretmanager.SecretIamPolicy` **cannot** be used in conjunction with `gcp.secretmanager.SecretIamBinding` and `gcp.secretmanager.SecretIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.secretmanager.SecretIamBinding` resources **can be** used in conjunction with `gcp.secretmanager.SecretIamMember` resources **only if** they do not grant privilege to the same role.\n\n\n\n\n## google\\_secret\\_manager\\_secret\\_iam\\_policy\n\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/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst policy = new gcp.secretmanager.SecretIamPolicy(\"policy\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.secretmanager.SecretIamPolicy(\"policy\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/secretmanager.secretAccessor\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var policy = new Gcp.SecretManager.SecretIamPolicy(\"policy\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/secretmanager.secretAccessor\",\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 = secretmanager.NewSecretIamPolicy(ctx, \"policy\", \u0026secretmanager.SecretIamPolicyArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\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.secretmanager.SecretIamPolicy;\nimport com.pulumi.gcp.secretmanager.SecretIamPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var policy = new SecretIamPolicy(\"policy\", SecretIamPolicyArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:secretmanager:SecretIamPolicy\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\n## google\\_secret\\_manager\\_secret\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.secretmanager.SecretIamBinding(\"binding\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\n role: \"roles/secretmanager.secretAccessor\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.secretmanager.SecretIamBinding(\"binding\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n role=\"roles/secretmanager.secretAccessor\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.SecretManager.SecretIamBinding(\"binding\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\n Role = \"roles/secretmanager.secretAccessor\",\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/v6/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\t_, err := secretmanager.NewSecretIamBinding(ctx, \"binding\", \u0026secretmanager.SecretIamBindingArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\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.secretmanager.SecretIamBinding;\nimport com.pulumi.gcp.secretmanager.SecretIamBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SecretIamBinding(\"binding\", SecretIamBindingArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .role(\"roles/secretmanager.secretAccessor\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:secretmanager:SecretIamBinding\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n role: roles/secretmanager.secretAccessor\n members:\n - user:jane@example.com\n```\n\n## google\\_secret\\_manager\\_secret\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.secretmanager.SecretIamMember(\"member\", {\n project: google_secret_manager_secret[\"secret-basic\"].project,\n secretId: google_secret_manager_secret[\"secret-basic\"].secret_id,\n role: \"roles/secretmanager.secretAccessor\",\n member: \"user:jane@example.com\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.secretmanager.SecretIamMember(\"member\",\n project=google_secret_manager_secret[\"secret-basic\"][\"project\"],\n secret_id=google_secret_manager_secret[\"secret-basic\"][\"secret_id\"],\n role=\"roles/secretmanager.secretAccessor\",\n member=\"user:jane@example.com\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.SecretManager.SecretIamMember(\"member\", new()\n {\n Project = google_secret_manager_secret.Secret_basic.Project,\n SecretId = google_secret_manager_secret.Secret_basic.Secret_id,\n Role = \"roles/secretmanager.secretAccessor\",\n Member = \"user:jane@example.com\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := secretmanager.NewSecretIamMember(ctx, \"member\", \u0026secretmanager.SecretIamMemberArgs{\n\t\t\tProject: pulumi.Any(google_secret_manager_secret.SecretBasic.Project),\n\t\t\tSecretId: pulumi.Any(google_secret_manager_secret.SecretBasic.Secret_id),\n\t\t\tRole: pulumi.String(\"roles/secretmanager.secretAccessor\"),\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.secretmanager.SecretIamMember;\nimport com.pulumi.gcp.secretmanager.SecretIamMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SecretIamMember(\"member\", SecretIamMemberArgs.builder() \n .project(google_secret_manager_secret.secret-basic().project())\n .secretId(google_secret_manager_secret.secret-basic().secret_id())\n .role(\"roles/secretmanager.secretAccessor\")\n .member(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:secretmanager:SecretIamMember\n properties:\n project: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].project}\n secretId: ${google_secret_manager_secret\"secret-basic\"[%!s(MISSING)].secret_id}\n role: roles/secretmanager.secretAccessor\n member: user:jane@example.com\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/secrets/{{secret_id}} * {{project}}/{{secret_id}} * {{secret_id}} Any variables not passed in the import command will be taken from the provider configuration. Secret Manager secret IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamPolicy:SecretIamPolicy editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamPolicy:SecretIamPolicy editor \"projects/{{project}}/secrets/{{secret_id}} roles/secretmanager.secretAccessor\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:secretmanager/secretIamPolicy:SecretIamPolicy editor projects/{{project}}/secrets/{{secret_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "etag": { "type": "string", @@ -184640,7 +186176,7 @@ } }, "gcp:secretmanager/secretVersion:SecretVersion": { - "description": "A secret version resource.\n\n\u003e **Warning:** All arguments including `payload.secret_data` will be stored in the raw\nstate as plain-text.\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Secret Version Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret_basic = new gcp.secretmanager.Secret(\"secret-basic\", {\n secretId: \"secret-version\",\n labels: {\n label: \"my-label\",\n },\n replication: {\n automatic: true,\n },\n});\nconst secret_version_basic = new gcp.secretmanager.SecretVersion(\"secret-version-basic\", {\n secret: secret_basic.id,\n secretData: \"secret-data\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret_basic = gcp.secretmanager.Secret(\"secret-basic\",\n secret_id=\"secret-version\",\n labels={\n \"label\": \"my-label\",\n },\n replication=gcp.secretmanager.SecretReplicationArgs(\n automatic=True,\n ))\nsecret_version_basic = gcp.secretmanager.SecretVersion(\"secret-version-basic\",\n secret=secret_basic.id,\n secret_data=\"secret-data\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret_basic = new Gcp.SecretManager.Secret(\"secret-basic\", new()\n {\n SecretId = \"secret-version\",\n Labels = \n {\n { \"label\", \"my-label\" },\n },\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Automatic = true,\n },\n });\n\n var secret_version_basic = new Gcp.SecretManager.SecretVersion(\"secret-version-basic\", new()\n {\n Secret = secret_basic.Id,\n SecretData = \"secret-data\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := secretmanager.NewSecret(ctx, \"secret-basic\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret-version\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"my-label\"),\n\t\t\t},\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAutomatic: 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 = secretmanager.NewSecretVersion(ctx, \"secret-version-basic\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret_basic.ID(),\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret_basic = new Secret(\"secret-basic\", SecretArgs.builder() \n .secretId(\"secret-version\")\n .labels(Map.of(\"label\", \"my-label\"))\n .replication(SecretReplicationArgs.builder()\n .automatic(true)\n .build())\n .build());\n\n var secret_version_basic = new SecretVersion(\"secret-version-basic\", SecretVersionArgs.builder() \n .secret(secret_basic.id())\n .secretData(\"secret-data\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n secret-basic:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret-version\n labels:\n label: my-label\n replication:\n automatic: true\n secret-version-basic:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${[\"secret-basic\"].id}\n secretData: secret-data\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSecretVersion can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:secretmanager/secretVersion:SecretVersion default projects/{{project}}/secrets/{{secret_id}}/versions/{{version}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Secret Version Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst secret_basic = new gcp.secretmanager.Secret(\"secret-basic\", {\n secretId: \"secret-version\",\n labels: {\n label: \"my-label\",\n },\n replication: {\n automatic: true,\n },\n});\nconst secret_version_basic = new gcp.secretmanager.SecretVersion(\"secret-version-basic\", {\n secret: secret_basic.id,\n secretData: \"secret-data\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsecret_basic = gcp.secretmanager.Secret(\"secret-basic\",\n secret_id=\"secret-version\",\n labels={\n \"label\": \"my-label\",\n },\n replication=gcp.secretmanager.SecretReplicationArgs(\n automatic=True,\n ))\nsecret_version_basic = gcp.secretmanager.SecretVersion(\"secret-version-basic\",\n secret=secret_basic.id,\n secret_data=\"secret-data\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var secret_basic = new Gcp.SecretManager.Secret(\"secret-basic\", new()\n {\n SecretId = \"secret-version\",\n Labels = \n {\n { \"label\", \"my-label\" },\n },\n Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs\n {\n Automatic = true,\n },\n });\n\n var secret_version_basic = new Gcp.SecretManager.SecretVersion(\"secret-version-basic\", new()\n {\n Secret = secret_basic.Id,\n SecretData = \"secret-data\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := secretmanager.NewSecret(ctx, \"secret-basic\", \u0026secretmanager.SecretArgs{\n\t\t\tSecretId: pulumi.String(\"secret-version\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"my-label\"),\n\t\t\t},\n\t\t\tReplication: \u0026secretmanager.SecretReplicationArgs{\n\t\t\t\tAutomatic: 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 = secretmanager.NewSecretVersion(ctx, \"secret-version-basic\", \u0026secretmanager.SecretVersionArgs{\n\t\t\tSecret: secret_basic.ID(),\n\t\t\tSecretData: pulumi.String(\"secret-data\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.secretmanager.Secret;\nimport com.pulumi.gcp.secretmanager.SecretArgs;\nimport com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs;\nimport com.pulumi.gcp.secretmanager.SecretVersion;\nimport com.pulumi.gcp.secretmanager.SecretVersionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var secret_basic = new Secret(\"secret-basic\", SecretArgs.builder() \n .secretId(\"secret-version\")\n .labels(Map.of(\"label\", \"my-label\"))\n .replication(SecretReplicationArgs.builder()\n .automatic(true)\n .build())\n .build());\n\n var secret_version_basic = new SecretVersion(\"secret-version-basic\", SecretVersionArgs.builder() \n .secret(secret_basic.id())\n .secretData(\"secret-data\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n secret-basic:\n type: gcp:secretmanager:Secret\n properties:\n secretId: secret-version\n labels:\n label: my-label\n replication:\n automatic: true\n secret-version-basic:\n type: gcp:secretmanager:SecretVersion\n properties:\n secret: ${[\"secret-basic\"].id}\n secretData: secret-data\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSecretVersion can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:secretmanager/secretVersion:SecretVersion default projects/{{project}}/secrets/{{secret_id}}/versions/{{version}}\n```\n\n ", "properties": { "createTime": { "type": "string", @@ -184740,7 +186276,7 @@ } }, "gcp:securitycenter/instanceIamBinding:InstanceIamBinding": { - "description": "Represents a Data Fusion instance.\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/data-fusion/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Fusion Instance Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicInstance = new gcp.datafusion.Instance(\"basicInstance\", {\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"BASIC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_instance = gcp.datafusion.Instance(\"basicInstance\",\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"BASIC\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicInstance = new Gcp.DataFusion.Instance(\"basicInstance\", new()\n {\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"BASIC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"basicInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicInstance = new Instance(\"basicInstance\", InstanceArgs.builder() \n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"BASIC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicInstance:\n type: gcp:datafusion:Instance\n properties:\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: BASIC\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Full\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.appengine.getDefaultServiceAccount({});\nconst network = new gcp.compute.Network(\"network\", {});\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"privateIpAlloc\", {\n addressType: \"INTERNAL\",\n purpose: \"VPC_PEERING\",\n prefixLength: 22,\n network: network.id,\n});\nconst extendedInstance = new gcp.datafusion.Instance(\"extendedInstance\", {\n description: \"My Data Fusion instance\",\n displayName: \"My Data Fusion instance\",\n region: \"us-central1\",\n type: \"BASIC\",\n enableStackdriverLogging: true,\n enableStackdriverMonitoring: true,\n privateInstance: true,\n version: \"6.6.0\",\n dataprocServiceAccount: _default.then(_default =\u003e _default.email),\n labels: {\n example_key: \"example_value\",\n },\n networkConfig: {\n network: \"default\",\n ipAllocation: pulumi.all([privateIpAlloc.address, privateIpAlloc.prefixLength]).apply(([address, prefixLength]) =\u003e `${address}/${prefixLength}`),\n },\n options: {\n prober_test_run: \"true\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.appengine.get_default_service_account()\nnetwork = gcp.compute.Network(\"network\")\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"privateIpAlloc\",\n address_type=\"INTERNAL\",\n purpose=\"VPC_PEERING\",\n prefix_length=22,\n network=network.id)\nextended_instance = gcp.datafusion.Instance(\"extendedInstance\",\n description=\"My Data Fusion instance\",\n display_name=\"My Data Fusion instance\",\n region=\"us-central1\",\n type=\"BASIC\",\n enable_stackdriver_logging=True,\n enable_stackdriver_monitoring=True,\n private_instance=True,\n version=\"6.6.0\",\n dataproc_service_account=default.email,\n labels={\n \"example_key\": \"example_value\",\n },\n network_config=gcp.datafusion.InstanceNetworkConfigArgs(\n network=\"default\",\n ip_allocation=pulumi.Output.all(private_ip_alloc.address, private_ip_alloc.prefix_length).apply(lambda address, prefix_length: f\"{address}/{prefix_length}\"),\n ),\n options={\n \"prober_test_run\": \"true\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.AppEngine.GetDefaultServiceAccount.Invoke();\n\n var network = new Gcp.Compute.Network(\"network\");\n\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"privateIpAlloc\", new()\n {\n AddressType = \"INTERNAL\",\n Purpose = \"VPC_PEERING\",\n PrefixLength = 22,\n Network = network.Id,\n });\n\n var extendedInstance = new Gcp.DataFusion.Instance(\"extendedInstance\", new()\n {\n Description = \"My Data Fusion instance\",\n DisplayName = \"My Data Fusion instance\",\n Region = \"us-central1\",\n Type = \"BASIC\",\n EnableStackdriverLogging = true,\n EnableStackdriverMonitoring = true,\n PrivateInstance = true,\n Version = \"6.6.0\",\n DataprocServiceAccount = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Email)),\n Labels = \n {\n { \"example_key\", \"example_value\" },\n },\n NetworkConfig = new Gcp.DataFusion.Inputs.InstanceNetworkConfigArgs\n {\n Network = \"default\",\n IpAllocation = Output.Tuple(privateIpAlloc.Address, privateIpAlloc.PrefixLength).Apply(values =\u003e\n {\n var address = values.Item1;\n var prefixLength = values.Item2;\n return $\"{address}/{prefixLength}\";\n }),\n },\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/appengine\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := appengine.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"privateIpAlloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tPrefixLength: pulumi.Int(22),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"extendedInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tDescription: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tDisplayName: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tEnableStackdriverLogging: pulumi.Bool(true),\n\t\t\tEnableStackdriverMonitoring: pulumi.Bool(true),\n\t\t\tPrivateInstance: pulumi.Bool(true),\n\t\t\tVersion: pulumi.String(\"6.6.0\"),\n\t\t\tDataprocServiceAccount: *pulumi.String(_default.Email),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"example_key\": pulumi.String(\"example_value\"),\n\t\t\t},\n\t\t\tNetworkConfig: \u0026datafusion.InstanceNetworkConfigArgs{\n\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\tIpAllocation: pulumi.All(privateIpAlloc.Address, privateIpAlloc.PrefixLength).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\taddress := _args[0].(string)\n\t\t\t\t\tprefixLength := _args[1].(*int)\n\t\t\t\t\treturn fmt.Sprintf(\"%v/%v\", address, prefixLength), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"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.appengine.AppengineFunctions;\nimport com.pulumi.gcp.appengine.inputs.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceNetworkConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = AppengineFunctions.getDefaultServiceAccount();\n\n var network = new Network(\"network\");\n\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder() \n .addressType(\"INTERNAL\")\n .purpose(\"VPC_PEERING\")\n .prefixLength(22)\n .network(network.id())\n .build());\n\n var extendedInstance = new Instance(\"extendedInstance\", InstanceArgs.builder() \n .description(\"My Data Fusion instance\")\n .displayName(\"My Data Fusion instance\")\n .region(\"us-central1\")\n .type(\"BASIC\")\n .enableStackdriverLogging(true)\n .enableStackdriverMonitoring(true)\n .privateInstance(true)\n .version(\"6.6.0\")\n .dataprocServiceAccount(default_.email())\n .labels(Map.of(\"example_key\", \"example_value\"))\n .networkConfig(InstanceNetworkConfigArgs.builder()\n .network(\"default\")\n .ipAllocation(Output.tuple(privateIpAlloc.address(), privateIpAlloc.prefixLength()).applyValue(values -\u003e {\n var address = values.t1;\n var prefixLength = values.t2;\n return String.format(\"%s/%s\", address,prefixLength);\n }))\n .build())\n .options(Map.of(\"prober_test_run\", \"true\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n extendedInstance:\n type: gcp:datafusion:Instance\n properties:\n description: My Data Fusion instance\n displayName: My Data Fusion instance\n region: us-central1\n type: BASIC\n enableStackdriverLogging: true\n enableStackdriverMonitoring: true\n privateInstance: true\n version: 6.6.0\n dataprocServiceAccount: ${default.email}\n labels:\n example_key: example_value\n networkConfig:\n network: default\n ipAllocation: ${privateIpAlloc.address}/${privateIpAlloc.prefixLength}\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n network:\n type: gcp:compute:Network\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n properties:\n addressType: INTERNAL\n purpose: VPC_PEERING\n prefixLength: 22\n network: ${network.id}\nvariables:\n default:\n fn::invoke:\n Function: gcp:appengine:getDefaultServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Cmek\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRing(\"keyRing\", {location: \"us-central1\"});\nconst cryptoKey = new gcp.kms.CryptoKey(\"cryptoKey\", {keyRing: keyRing.id});\nconst project = gcp.organizations.getProject({});\nconst cryptoKeyBinding = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", {\n cryptoKeyId: cryptoKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com`)],\n});\nconst cmek = new gcp.datafusion.Instance(\"cmek\", {\n region: \"us-central1\",\n type: \"BASIC\",\n cryptoKeyConfig: {\n keyReference: cryptoKey.id,\n },\n}, {\n dependsOn: [cryptoKeyBinding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRing(\"keyRing\", location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"cryptoKey\", key_ring=key_ring.id)\nproject = gcp.organizations.get_project()\ncrypto_key_binding = gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\",\n crypto_key_id=crypto_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[f\"serviceAccount:service-{project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\"])\ncmek = gcp.datafusion.Instance(\"cmek\",\n region=\"us-central1\",\n type=\"BASIC\",\n crypto_key_config=gcp.datafusion.InstanceCryptoKeyConfigArgs(\n key_reference=crypto_key.id,\n ),\n opts=pulumi.ResourceOptions(depends_on=[crypto_key_binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRing(\"keyRing\", new()\n {\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"cryptoKey\", new()\n {\n KeyRing = keyRing.Id,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cryptoKeyBinding = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", new()\n {\n CryptoKeyId = cryptoKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datafusion.iam.gserviceaccount.com\",\n },\n });\n\n var cmek = new Gcp.DataFusion.Instance(\"cmek\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n CryptoKeyConfig = new Gcp.DataFusion.Inputs.InstanceCryptoKeyConfigArgs\n {\n KeyReference = cryptoKey.Id,\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n cryptoKeyBinding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyRing, err := kms.NewKeyRing(ctx, \"keyRing\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"cryptoKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyBinding, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKeyBinding\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: cryptoKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datafusion.iam.gserviceaccount.com\", project.Number)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"cmek\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tCryptoKeyConfig: \u0026datafusion.InstanceCryptoKeyConfigArgs{\n\t\t\t\tKeyReference: cryptoKey.ID(),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyBinding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceCryptoKeyConfigArgs;\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 keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .keyRing(keyRing.id())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var cryptoKeyBinding = new CryptoKeyIAMBinding(\"cryptoKeyBinding\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(cryptoKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(String.format(\"serviceAccount:service-%s@gcp-sa-datafusion.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var cmek = new Instance(\"cmek\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .cryptoKeyConfig(InstanceCryptoKeyConfigArgs.builder()\n .keyReference(cryptoKey.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyBinding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cmek:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n cryptoKeyConfig:\n keyReference: ${cryptoKey.id}\n options:\n dependson:\n - ${cryptoKeyBinding}\n cryptoKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n cryptoKeyBinding:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${cryptoKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Enterprise\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst enterpriseInstance = new gcp.datafusion.Instance(\"enterpriseInstance\", {\n enableRbac: true,\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"ENTERPRISE\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nenterprise_instance = gcp.datafusion.Instance(\"enterpriseInstance\",\n enable_rbac=True,\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"ENTERPRISE\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var enterpriseInstance = new Gcp.DataFusion.Instance(\"enterpriseInstance\", new()\n {\n EnableRbac = true,\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"ENTERPRISE\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"enterpriseInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tEnableRbac: pulumi.Bool(true),\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"ENTERPRISE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var enterpriseInstance = new Instance(\"enterpriseInstance\", InstanceArgs.builder() \n .enableRbac(true)\n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"ENTERPRISE\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n enterpriseInstance:\n type: gcp:datafusion:Instance\n properties:\n enableRbac: true\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: ENTERPRISE\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Event\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst eventTopic = new gcp.pubsub.Topic(\"eventTopic\", {});\nconst eventInstance = new gcp.datafusion.Instance(\"eventInstance\", {\n region: \"us-central1\",\n type: \"BASIC\",\n version: \"6.7.0\",\n eventPublishConfig: {\n enabled: true,\n topic: eventTopic.id,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nevent_topic = gcp.pubsub.Topic(\"eventTopic\")\nevent_instance = gcp.datafusion.Instance(\"eventInstance\",\n region=\"us-central1\",\n type=\"BASIC\",\n version=\"6.7.0\",\n event_publish_config=gcp.datafusion.InstanceEventPublishConfigArgs(\n enabled=True,\n topic=event_topic.id,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var eventTopic = new Gcp.PubSub.Topic(\"eventTopic\");\n\n var eventInstance = new Gcp.DataFusion.Instance(\"eventInstance\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n Version = \"6.7.0\",\n EventPublishConfig = new Gcp.DataFusion.Inputs.InstanceEventPublishConfigArgs\n {\n Enabled = true,\n Topic = eventTopic.Id,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\teventTopic, err := pubsub.NewTopic(ctx, \"eventTopic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"eventInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tVersion: pulumi.String(\"6.7.0\"),\n\t\t\tEventPublishConfig: \u0026datafusion.InstanceEventPublishConfigArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tTopic: eventTopic.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceEventPublishConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var eventTopic = new Topic(\"eventTopic\");\n\n var eventInstance = new Instance(\"eventInstance\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .version(\"6.7.0\")\n .eventPublishConfig(InstanceEventPublishConfigArgs.builder()\n .enabled(true)\n .topic(eventTopic.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n eventInstance:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n version: 6.7.0\n eventPublishConfig:\n enabled: true\n topic: ${eventTopic.id}\n eventTopic:\n type: gcp:pubsub:Topic\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Zone\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst zone = new gcp.datafusion.Instance(\"zone\", {\n region: \"us-central1\",\n type: \"DEVELOPER\",\n zone: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nzone = gcp.datafusion.Instance(\"zone\",\n region=\"us-central1\",\n type=\"DEVELOPER\",\n zone=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var zone = new Gcp.DataFusion.Instance(\"zone\", new()\n {\n Region = \"us-central1\",\n Type = \"DEVELOPER\",\n Zone = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"zone\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"DEVELOPER\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var zone = new Instance(\"zone\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"DEVELOPER\")\n .zone(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n zone:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: DEVELOPER\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamBinding:InstanceIamBinding default projects/{{project}}/locations/{{region}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamBinding:InstanceIamBinding default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamBinding:InstanceIamBinding default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamBinding:InstanceIamBinding default {{name}}\n```\n\n ", + "description": "Represents a Data Fusion instance.\n\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/data-fusion/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Fusion Instance Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicInstance = new gcp.datafusion.Instance(\"basicInstance\", {\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"BASIC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_instance = gcp.datafusion.Instance(\"basicInstance\",\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"BASIC\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicInstance = new Gcp.DataFusion.Instance(\"basicInstance\", new()\n {\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"BASIC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"basicInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicInstance = new Instance(\"basicInstance\", InstanceArgs.builder() \n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"BASIC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicInstance:\n type: gcp:datafusion:Instance\n properties:\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: BASIC\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.appengine.getDefaultServiceAccount({});\nconst network = new gcp.compute.Network(\"network\", {});\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"privateIpAlloc\", {\n addressType: \"INTERNAL\",\n purpose: \"VPC_PEERING\",\n prefixLength: 22,\n network: network.id,\n});\nconst extendedInstance = new gcp.datafusion.Instance(\"extendedInstance\", {\n description: \"My Data Fusion instance\",\n displayName: \"My Data Fusion instance\",\n region: \"us-central1\",\n type: \"BASIC\",\n enableStackdriverLogging: true,\n enableStackdriverMonitoring: true,\n privateInstance: true,\n version: \"6.6.0\",\n dataprocServiceAccount: _default.then(_default =\u003e _default.email),\n labels: {\n example_key: \"example_value\",\n },\n networkConfig: {\n network: \"default\",\n ipAllocation: pulumi.all([privateIpAlloc.address, privateIpAlloc.prefixLength]).apply(([address, prefixLength]) =\u003e `${address}/${prefixLength}`),\n },\n options: {\n prober_test_run: \"true\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.appengine.get_default_service_account()\nnetwork = gcp.compute.Network(\"network\")\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"privateIpAlloc\",\n address_type=\"INTERNAL\",\n purpose=\"VPC_PEERING\",\n prefix_length=22,\n network=network.id)\nextended_instance = gcp.datafusion.Instance(\"extendedInstance\",\n description=\"My Data Fusion instance\",\n display_name=\"My Data Fusion instance\",\n region=\"us-central1\",\n type=\"BASIC\",\n enable_stackdriver_logging=True,\n enable_stackdriver_monitoring=True,\n private_instance=True,\n version=\"6.6.0\",\n dataproc_service_account=default.email,\n labels={\n \"example_key\": \"example_value\",\n },\n network_config=gcp.datafusion.InstanceNetworkConfigArgs(\n network=\"default\",\n ip_allocation=pulumi.Output.all(private_ip_alloc.address, private_ip_alloc.prefix_length).apply(lambda address, prefix_length: f\"{address}/{prefix_length}\"),\n ),\n options={\n \"prober_test_run\": \"true\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.AppEngine.GetDefaultServiceAccount.Invoke();\n\n var network = new Gcp.Compute.Network(\"network\");\n\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"privateIpAlloc\", new()\n {\n AddressType = \"INTERNAL\",\n Purpose = \"VPC_PEERING\",\n PrefixLength = 22,\n Network = network.Id,\n });\n\n var extendedInstance = new Gcp.DataFusion.Instance(\"extendedInstance\", new()\n {\n Description = \"My Data Fusion instance\",\n DisplayName = \"My Data Fusion instance\",\n Region = \"us-central1\",\n Type = \"BASIC\",\n EnableStackdriverLogging = true,\n EnableStackdriverMonitoring = true,\n PrivateInstance = true,\n Version = \"6.6.0\",\n DataprocServiceAccount = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Email)),\n Labels = \n {\n { \"example_key\", \"example_value\" },\n },\n NetworkConfig = new Gcp.DataFusion.Inputs.InstanceNetworkConfigArgs\n {\n Network = \"default\",\n IpAllocation = Output.Tuple(privateIpAlloc.Address, privateIpAlloc.PrefixLength).Apply(values =\u003e\n {\n var address = values.Item1;\n var prefixLength = values.Item2;\n return $\"{address}/{prefixLength}\";\n }),\n },\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/appengine\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := appengine.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"privateIpAlloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tPrefixLength: pulumi.Int(22),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"extendedInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tDescription: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tDisplayName: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tEnableStackdriverLogging: pulumi.Bool(true),\n\t\t\tEnableStackdriverMonitoring: pulumi.Bool(true),\n\t\t\tPrivateInstance: pulumi.Bool(true),\n\t\t\tVersion: pulumi.String(\"6.6.0\"),\n\t\t\tDataprocServiceAccount: *pulumi.String(_default.Email),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"example_key\": pulumi.String(\"example_value\"),\n\t\t\t},\n\t\t\tNetworkConfig: \u0026datafusion.InstanceNetworkConfigArgs{\n\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\tIpAllocation: pulumi.All(privateIpAlloc.Address, privateIpAlloc.PrefixLength).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\taddress := _args[0].(string)\n\t\t\t\t\tprefixLength := _args[1].(*int)\n\t\t\t\t\treturn fmt.Sprintf(\"%v/%v\", address, prefixLength), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"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.appengine.AppengineFunctions;\nimport com.pulumi.gcp.appengine.inputs.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceNetworkConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = AppengineFunctions.getDefaultServiceAccount();\n\n var network = new Network(\"network\");\n\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder() \n .addressType(\"INTERNAL\")\n .purpose(\"VPC_PEERING\")\n .prefixLength(22)\n .network(network.id())\n .build());\n\n var extendedInstance = new Instance(\"extendedInstance\", InstanceArgs.builder() \n .description(\"My Data Fusion instance\")\n .displayName(\"My Data Fusion instance\")\n .region(\"us-central1\")\n .type(\"BASIC\")\n .enableStackdriverLogging(true)\n .enableStackdriverMonitoring(true)\n .privateInstance(true)\n .version(\"6.6.0\")\n .dataprocServiceAccount(default_.email())\n .labels(Map.of(\"example_key\", \"example_value\"))\n .networkConfig(InstanceNetworkConfigArgs.builder()\n .network(\"default\")\n .ipAllocation(Output.tuple(privateIpAlloc.address(), privateIpAlloc.prefixLength()).applyValue(values -\u003e {\n var address = values.t1;\n var prefixLength = values.t2;\n return String.format(\"%s/%s\", address,prefixLength);\n }))\n .build())\n .options(Map.of(\"prober_test_run\", \"true\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n extendedInstance:\n type: gcp:datafusion:Instance\n properties:\n description: My Data Fusion instance\n displayName: My Data Fusion instance\n region: us-central1\n type: BASIC\n enableStackdriverLogging: true\n enableStackdriverMonitoring: true\n privateInstance: true\n version: 6.6.0\n dataprocServiceAccount: ${default.email}\n labels:\n example_key: example_value\n networkConfig:\n network: default\n ipAllocation: ${privateIpAlloc.address}/${privateIpAlloc.prefixLength}\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n network:\n type: gcp:compute:Network\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n properties:\n addressType: INTERNAL\n purpose: VPC_PEERING\n prefixLength: 22\n network: ${network.id}\nvariables:\n default:\n fn::invoke:\n Function: gcp:appengine:getDefaultServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Cmek\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRing(\"keyRing\", {location: \"us-central1\"});\nconst cryptoKey = new gcp.kms.CryptoKey(\"cryptoKey\", {keyRing: keyRing.id});\nconst project = gcp.organizations.getProject({});\nconst cryptoKeyBinding = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", {\n cryptoKeyId: cryptoKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com`)],\n});\nconst cmek = new gcp.datafusion.Instance(\"cmek\", {\n region: \"us-central1\",\n type: \"BASIC\",\n cryptoKeyConfig: {\n keyReference: cryptoKey.id,\n },\n}, {\n dependsOn: [cryptoKeyBinding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRing(\"keyRing\", location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"cryptoKey\", key_ring=key_ring.id)\nproject = gcp.organizations.get_project()\ncrypto_key_binding = gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\",\n crypto_key_id=crypto_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[f\"serviceAccount:service-{project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\"])\ncmek = gcp.datafusion.Instance(\"cmek\",\n region=\"us-central1\",\n type=\"BASIC\",\n crypto_key_config=gcp.datafusion.InstanceCryptoKeyConfigArgs(\n key_reference=crypto_key.id,\n ),\n opts=pulumi.ResourceOptions(depends_on=[crypto_key_binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRing(\"keyRing\", new()\n {\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"cryptoKey\", new()\n {\n KeyRing = keyRing.Id,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cryptoKeyBinding = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", new()\n {\n CryptoKeyId = cryptoKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datafusion.iam.gserviceaccount.com\",\n },\n });\n\n var cmek = new Gcp.DataFusion.Instance(\"cmek\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n CryptoKeyConfig = new Gcp.DataFusion.Inputs.InstanceCryptoKeyConfigArgs\n {\n KeyReference = cryptoKey.Id,\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n cryptoKeyBinding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyRing, err := kms.NewKeyRing(ctx, \"keyRing\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"cryptoKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyBinding, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKeyBinding\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: cryptoKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datafusion.iam.gserviceaccount.com\", project.Number)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"cmek\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tCryptoKeyConfig: \u0026datafusion.InstanceCryptoKeyConfigArgs{\n\t\t\t\tKeyReference: cryptoKey.ID(),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyBinding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceCryptoKeyConfigArgs;\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 keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .keyRing(keyRing.id())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var cryptoKeyBinding = new CryptoKeyIAMBinding(\"cryptoKeyBinding\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(cryptoKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(String.format(\"serviceAccount:service-%s@gcp-sa-datafusion.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var cmek = new Instance(\"cmek\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .cryptoKeyConfig(InstanceCryptoKeyConfigArgs.builder()\n .keyReference(cryptoKey.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyBinding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cmek:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n cryptoKeyConfig:\n keyReference: ${cryptoKey.id}\n options:\n dependson:\n - ${cryptoKeyBinding}\n cryptoKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n cryptoKeyBinding:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${cryptoKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Enterprise\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst enterpriseInstance = new gcp.datafusion.Instance(\"enterpriseInstance\", {\n enableRbac: true,\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"ENTERPRISE\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nenterprise_instance = gcp.datafusion.Instance(\"enterpriseInstance\",\n enable_rbac=True,\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"ENTERPRISE\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var enterpriseInstance = new Gcp.DataFusion.Instance(\"enterpriseInstance\", new()\n {\n EnableRbac = true,\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"ENTERPRISE\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"enterpriseInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tEnableRbac: pulumi.Bool(true),\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"ENTERPRISE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var enterpriseInstance = new Instance(\"enterpriseInstance\", InstanceArgs.builder() \n .enableRbac(true)\n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"ENTERPRISE\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n enterpriseInstance:\n type: gcp:datafusion:Instance\n properties:\n enableRbac: true\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: ENTERPRISE\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Event\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst eventTopic = new gcp.pubsub.Topic(\"eventTopic\", {});\nconst eventInstance = new gcp.datafusion.Instance(\"eventInstance\", {\n region: \"us-central1\",\n type: \"BASIC\",\n version: \"6.7.0\",\n eventPublishConfig: {\n enabled: true,\n topic: eventTopic.id,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nevent_topic = gcp.pubsub.Topic(\"eventTopic\")\nevent_instance = gcp.datafusion.Instance(\"eventInstance\",\n region=\"us-central1\",\n type=\"BASIC\",\n version=\"6.7.0\",\n event_publish_config=gcp.datafusion.InstanceEventPublishConfigArgs(\n enabled=True,\n topic=event_topic.id,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var eventTopic = new Gcp.PubSub.Topic(\"eventTopic\");\n\n var eventInstance = new Gcp.DataFusion.Instance(\"eventInstance\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n Version = \"6.7.0\",\n EventPublishConfig = new Gcp.DataFusion.Inputs.InstanceEventPublishConfigArgs\n {\n Enabled = true,\n Topic = eventTopic.Id,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\teventTopic, err := pubsub.NewTopic(ctx, \"eventTopic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"eventInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tVersion: pulumi.String(\"6.7.0\"),\n\t\t\tEventPublishConfig: \u0026datafusion.InstanceEventPublishConfigArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tTopic: eventTopic.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceEventPublishConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var eventTopic = new Topic(\"eventTopic\");\n\n var eventInstance = new Instance(\"eventInstance\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .version(\"6.7.0\")\n .eventPublishConfig(InstanceEventPublishConfigArgs.builder()\n .enabled(true)\n .topic(eventTopic.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n eventInstance:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n version: 6.7.0\n eventPublishConfig:\n enabled: true\n topic: ${eventTopic.id}\n eventTopic:\n type: gcp:pubsub:Topic\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Zone\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst zone = new gcp.datafusion.Instance(\"zone\", {\n region: \"us-central1\",\n type: \"DEVELOPER\",\n zone: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nzone = gcp.datafusion.Instance(\"zone\",\n region=\"us-central1\",\n type=\"DEVELOPER\",\n zone=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var zone = new Gcp.DataFusion.Instance(\"zone\", new()\n {\n Region = \"us-central1\",\n Type = \"DEVELOPER\",\n Zone = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"zone\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"DEVELOPER\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var zone = new Instance(\"zone\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"DEVELOPER\")\n .zone(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n zone:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: DEVELOPER\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamBinding:InstanceIamBinding default projects/{{project}}/locations/{{region}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamBinding:InstanceIamBinding default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamBinding:InstanceIamBinding default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamBinding:InstanceIamBinding default {{name}}\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:securitycenter/InstanceIamBindingCondition:InstanceIamBindingCondition" @@ -184853,7 +186389,7 @@ } }, "gcp:securitycenter/instanceIamMember:InstanceIamMember": { - "description": "Represents a Data Fusion instance.\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/data-fusion/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Fusion Instance Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicInstance = new gcp.datafusion.Instance(\"basicInstance\", {\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"BASIC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_instance = gcp.datafusion.Instance(\"basicInstance\",\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"BASIC\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicInstance = new Gcp.DataFusion.Instance(\"basicInstance\", new()\n {\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"BASIC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"basicInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicInstance = new Instance(\"basicInstance\", InstanceArgs.builder() \n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"BASIC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicInstance:\n type: gcp:datafusion:Instance\n properties:\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: BASIC\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Full\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.appengine.getDefaultServiceAccount({});\nconst network = new gcp.compute.Network(\"network\", {});\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"privateIpAlloc\", {\n addressType: \"INTERNAL\",\n purpose: \"VPC_PEERING\",\n prefixLength: 22,\n network: network.id,\n});\nconst extendedInstance = new gcp.datafusion.Instance(\"extendedInstance\", {\n description: \"My Data Fusion instance\",\n displayName: \"My Data Fusion instance\",\n region: \"us-central1\",\n type: \"BASIC\",\n enableStackdriverLogging: true,\n enableStackdriverMonitoring: true,\n privateInstance: true,\n version: \"6.6.0\",\n dataprocServiceAccount: _default.then(_default =\u003e _default.email),\n labels: {\n example_key: \"example_value\",\n },\n networkConfig: {\n network: \"default\",\n ipAllocation: pulumi.all([privateIpAlloc.address, privateIpAlloc.prefixLength]).apply(([address, prefixLength]) =\u003e `${address}/${prefixLength}`),\n },\n options: {\n prober_test_run: \"true\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.appengine.get_default_service_account()\nnetwork = gcp.compute.Network(\"network\")\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"privateIpAlloc\",\n address_type=\"INTERNAL\",\n purpose=\"VPC_PEERING\",\n prefix_length=22,\n network=network.id)\nextended_instance = gcp.datafusion.Instance(\"extendedInstance\",\n description=\"My Data Fusion instance\",\n display_name=\"My Data Fusion instance\",\n region=\"us-central1\",\n type=\"BASIC\",\n enable_stackdriver_logging=True,\n enable_stackdriver_monitoring=True,\n private_instance=True,\n version=\"6.6.0\",\n dataproc_service_account=default.email,\n labels={\n \"example_key\": \"example_value\",\n },\n network_config=gcp.datafusion.InstanceNetworkConfigArgs(\n network=\"default\",\n ip_allocation=pulumi.Output.all(private_ip_alloc.address, private_ip_alloc.prefix_length).apply(lambda address, prefix_length: f\"{address}/{prefix_length}\"),\n ),\n options={\n \"prober_test_run\": \"true\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.AppEngine.GetDefaultServiceAccount.Invoke();\n\n var network = new Gcp.Compute.Network(\"network\");\n\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"privateIpAlloc\", new()\n {\n AddressType = \"INTERNAL\",\n Purpose = \"VPC_PEERING\",\n PrefixLength = 22,\n Network = network.Id,\n });\n\n var extendedInstance = new Gcp.DataFusion.Instance(\"extendedInstance\", new()\n {\n Description = \"My Data Fusion instance\",\n DisplayName = \"My Data Fusion instance\",\n Region = \"us-central1\",\n Type = \"BASIC\",\n EnableStackdriverLogging = true,\n EnableStackdriverMonitoring = true,\n PrivateInstance = true,\n Version = \"6.6.0\",\n DataprocServiceAccount = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Email)),\n Labels = \n {\n { \"example_key\", \"example_value\" },\n },\n NetworkConfig = new Gcp.DataFusion.Inputs.InstanceNetworkConfigArgs\n {\n Network = \"default\",\n IpAllocation = Output.Tuple(privateIpAlloc.Address, privateIpAlloc.PrefixLength).Apply(values =\u003e\n {\n var address = values.Item1;\n var prefixLength = values.Item2;\n return $\"{address}/{prefixLength}\";\n }),\n },\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/appengine\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := appengine.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"privateIpAlloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tPrefixLength: pulumi.Int(22),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"extendedInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tDescription: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tDisplayName: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tEnableStackdriverLogging: pulumi.Bool(true),\n\t\t\tEnableStackdriverMonitoring: pulumi.Bool(true),\n\t\t\tPrivateInstance: pulumi.Bool(true),\n\t\t\tVersion: pulumi.String(\"6.6.0\"),\n\t\t\tDataprocServiceAccount: *pulumi.String(_default.Email),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"example_key\": pulumi.String(\"example_value\"),\n\t\t\t},\n\t\t\tNetworkConfig: \u0026datafusion.InstanceNetworkConfigArgs{\n\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\tIpAllocation: pulumi.All(privateIpAlloc.Address, privateIpAlloc.PrefixLength).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\taddress := _args[0].(string)\n\t\t\t\t\tprefixLength := _args[1].(*int)\n\t\t\t\t\treturn fmt.Sprintf(\"%v/%v\", address, prefixLength), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"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.appengine.AppengineFunctions;\nimport com.pulumi.gcp.appengine.inputs.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceNetworkConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = AppengineFunctions.getDefaultServiceAccount();\n\n var network = new Network(\"network\");\n\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder() \n .addressType(\"INTERNAL\")\n .purpose(\"VPC_PEERING\")\n .prefixLength(22)\n .network(network.id())\n .build());\n\n var extendedInstance = new Instance(\"extendedInstance\", InstanceArgs.builder() \n .description(\"My Data Fusion instance\")\n .displayName(\"My Data Fusion instance\")\n .region(\"us-central1\")\n .type(\"BASIC\")\n .enableStackdriverLogging(true)\n .enableStackdriverMonitoring(true)\n .privateInstance(true)\n .version(\"6.6.0\")\n .dataprocServiceAccount(default_.email())\n .labels(Map.of(\"example_key\", \"example_value\"))\n .networkConfig(InstanceNetworkConfigArgs.builder()\n .network(\"default\")\n .ipAllocation(Output.tuple(privateIpAlloc.address(), privateIpAlloc.prefixLength()).applyValue(values -\u003e {\n var address = values.t1;\n var prefixLength = values.t2;\n return String.format(\"%s/%s\", address,prefixLength);\n }))\n .build())\n .options(Map.of(\"prober_test_run\", \"true\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n extendedInstance:\n type: gcp:datafusion:Instance\n properties:\n description: My Data Fusion instance\n displayName: My Data Fusion instance\n region: us-central1\n type: BASIC\n enableStackdriverLogging: true\n enableStackdriverMonitoring: true\n privateInstance: true\n version: 6.6.0\n dataprocServiceAccount: ${default.email}\n labels:\n example_key: example_value\n networkConfig:\n network: default\n ipAllocation: ${privateIpAlloc.address}/${privateIpAlloc.prefixLength}\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n network:\n type: gcp:compute:Network\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n properties:\n addressType: INTERNAL\n purpose: VPC_PEERING\n prefixLength: 22\n network: ${network.id}\nvariables:\n default:\n fn::invoke:\n Function: gcp:appengine:getDefaultServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Cmek\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRing(\"keyRing\", {location: \"us-central1\"});\nconst cryptoKey = new gcp.kms.CryptoKey(\"cryptoKey\", {keyRing: keyRing.id});\nconst project = gcp.organizations.getProject({});\nconst cryptoKeyBinding = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", {\n cryptoKeyId: cryptoKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com`)],\n});\nconst cmek = new gcp.datafusion.Instance(\"cmek\", {\n region: \"us-central1\",\n type: \"BASIC\",\n cryptoKeyConfig: {\n keyReference: cryptoKey.id,\n },\n}, {\n dependsOn: [cryptoKeyBinding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRing(\"keyRing\", location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"cryptoKey\", key_ring=key_ring.id)\nproject = gcp.organizations.get_project()\ncrypto_key_binding = gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\",\n crypto_key_id=crypto_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[f\"serviceAccount:service-{project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\"])\ncmek = gcp.datafusion.Instance(\"cmek\",\n region=\"us-central1\",\n type=\"BASIC\",\n crypto_key_config=gcp.datafusion.InstanceCryptoKeyConfigArgs(\n key_reference=crypto_key.id,\n ),\n opts=pulumi.ResourceOptions(depends_on=[crypto_key_binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRing(\"keyRing\", new()\n {\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"cryptoKey\", new()\n {\n KeyRing = keyRing.Id,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cryptoKeyBinding = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", new()\n {\n CryptoKeyId = cryptoKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datafusion.iam.gserviceaccount.com\",\n },\n });\n\n var cmek = new Gcp.DataFusion.Instance(\"cmek\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n CryptoKeyConfig = new Gcp.DataFusion.Inputs.InstanceCryptoKeyConfigArgs\n {\n KeyReference = cryptoKey.Id,\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n cryptoKeyBinding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyRing, err := kms.NewKeyRing(ctx, \"keyRing\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"cryptoKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyBinding, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKeyBinding\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: cryptoKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datafusion.iam.gserviceaccount.com\", project.Number)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"cmek\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tCryptoKeyConfig: \u0026datafusion.InstanceCryptoKeyConfigArgs{\n\t\t\t\tKeyReference: cryptoKey.ID(),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyBinding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceCryptoKeyConfigArgs;\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 keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .keyRing(keyRing.id())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var cryptoKeyBinding = new CryptoKeyIAMBinding(\"cryptoKeyBinding\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(cryptoKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(String.format(\"serviceAccount:service-%s@gcp-sa-datafusion.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var cmek = new Instance(\"cmek\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .cryptoKeyConfig(InstanceCryptoKeyConfigArgs.builder()\n .keyReference(cryptoKey.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyBinding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cmek:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n cryptoKeyConfig:\n keyReference: ${cryptoKey.id}\n options:\n dependson:\n - ${cryptoKeyBinding}\n cryptoKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n cryptoKeyBinding:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${cryptoKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Enterprise\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst enterpriseInstance = new gcp.datafusion.Instance(\"enterpriseInstance\", {\n enableRbac: true,\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"ENTERPRISE\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nenterprise_instance = gcp.datafusion.Instance(\"enterpriseInstance\",\n enable_rbac=True,\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"ENTERPRISE\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var enterpriseInstance = new Gcp.DataFusion.Instance(\"enterpriseInstance\", new()\n {\n EnableRbac = true,\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"ENTERPRISE\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"enterpriseInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tEnableRbac: pulumi.Bool(true),\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"ENTERPRISE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var enterpriseInstance = new Instance(\"enterpriseInstance\", InstanceArgs.builder() \n .enableRbac(true)\n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"ENTERPRISE\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n enterpriseInstance:\n type: gcp:datafusion:Instance\n properties:\n enableRbac: true\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: ENTERPRISE\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Event\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst eventTopic = new gcp.pubsub.Topic(\"eventTopic\", {});\nconst eventInstance = new gcp.datafusion.Instance(\"eventInstance\", {\n region: \"us-central1\",\n type: \"BASIC\",\n version: \"6.7.0\",\n eventPublishConfig: {\n enabled: true,\n topic: eventTopic.id,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nevent_topic = gcp.pubsub.Topic(\"eventTopic\")\nevent_instance = gcp.datafusion.Instance(\"eventInstance\",\n region=\"us-central1\",\n type=\"BASIC\",\n version=\"6.7.0\",\n event_publish_config=gcp.datafusion.InstanceEventPublishConfigArgs(\n enabled=True,\n topic=event_topic.id,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var eventTopic = new Gcp.PubSub.Topic(\"eventTopic\");\n\n var eventInstance = new Gcp.DataFusion.Instance(\"eventInstance\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n Version = \"6.7.0\",\n EventPublishConfig = new Gcp.DataFusion.Inputs.InstanceEventPublishConfigArgs\n {\n Enabled = true,\n Topic = eventTopic.Id,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\teventTopic, err := pubsub.NewTopic(ctx, \"eventTopic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"eventInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tVersion: pulumi.String(\"6.7.0\"),\n\t\t\tEventPublishConfig: \u0026datafusion.InstanceEventPublishConfigArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tTopic: eventTopic.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceEventPublishConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var eventTopic = new Topic(\"eventTopic\");\n\n var eventInstance = new Instance(\"eventInstance\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .version(\"6.7.0\")\n .eventPublishConfig(InstanceEventPublishConfigArgs.builder()\n .enabled(true)\n .topic(eventTopic.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n eventInstance:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n version: 6.7.0\n eventPublishConfig:\n enabled: true\n topic: ${eventTopic.id}\n eventTopic:\n type: gcp:pubsub:Topic\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Zone\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst zone = new gcp.datafusion.Instance(\"zone\", {\n region: \"us-central1\",\n type: \"DEVELOPER\",\n zone: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nzone = gcp.datafusion.Instance(\"zone\",\n region=\"us-central1\",\n type=\"DEVELOPER\",\n zone=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var zone = new Gcp.DataFusion.Instance(\"zone\", new()\n {\n Region = \"us-central1\",\n Type = \"DEVELOPER\",\n Zone = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"zone\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"DEVELOPER\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var zone = new Instance(\"zone\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"DEVELOPER\")\n .zone(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n zone:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: DEVELOPER\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamMember:InstanceIamMember default projects/{{project}}/locations/{{region}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamMember:InstanceIamMember default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamMember:InstanceIamMember default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamMember:InstanceIamMember default {{name}}\n```\n\n ", + "description": "Represents a Data Fusion instance.\n\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/data-fusion/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Fusion Instance Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicInstance = new gcp.datafusion.Instance(\"basicInstance\", {\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"BASIC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_instance = gcp.datafusion.Instance(\"basicInstance\",\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"BASIC\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicInstance = new Gcp.DataFusion.Instance(\"basicInstance\", new()\n {\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"BASIC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"basicInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicInstance = new Instance(\"basicInstance\", InstanceArgs.builder() \n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"BASIC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicInstance:\n type: gcp:datafusion:Instance\n properties:\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: BASIC\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.appengine.getDefaultServiceAccount({});\nconst network = new gcp.compute.Network(\"network\", {});\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"privateIpAlloc\", {\n addressType: \"INTERNAL\",\n purpose: \"VPC_PEERING\",\n prefixLength: 22,\n network: network.id,\n});\nconst extendedInstance = new gcp.datafusion.Instance(\"extendedInstance\", {\n description: \"My Data Fusion instance\",\n displayName: \"My Data Fusion instance\",\n region: \"us-central1\",\n type: \"BASIC\",\n enableStackdriverLogging: true,\n enableStackdriverMonitoring: true,\n privateInstance: true,\n version: \"6.6.0\",\n dataprocServiceAccount: _default.then(_default =\u003e _default.email),\n labels: {\n example_key: \"example_value\",\n },\n networkConfig: {\n network: \"default\",\n ipAllocation: pulumi.all([privateIpAlloc.address, privateIpAlloc.prefixLength]).apply(([address, prefixLength]) =\u003e `${address}/${prefixLength}`),\n },\n options: {\n prober_test_run: \"true\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.appengine.get_default_service_account()\nnetwork = gcp.compute.Network(\"network\")\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"privateIpAlloc\",\n address_type=\"INTERNAL\",\n purpose=\"VPC_PEERING\",\n prefix_length=22,\n network=network.id)\nextended_instance = gcp.datafusion.Instance(\"extendedInstance\",\n description=\"My Data Fusion instance\",\n display_name=\"My Data Fusion instance\",\n region=\"us-central1\",\n type=\"BASIC\",\n enable_stackdriver_logging=True,\n enable_stackdriver_monitoring=True,\n private_instance=True,\n version=\"6.6.0\",\n dataproc_service_account=default.email,\n labels={\n \"example_key\": \"example_value\",\n },\n network_config=gcp.datafusion.InstanceNetworkConfigArgs(\n network=\"default\",\n ip_allocation=pulumi.Output.all(private_ip_alloc.address, private_ip_alloc.prefix_length).apply(lambda address, prefix_length: f\"{address}/{prefix_length}\"),\n ),\n options={\n \"prober_test_run\": \"true\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.AppEngine.GetDefaultServiceAccount.Invoke();\n\n var network = new Gcp.Compute.Network(\"network\");\n\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"privateIpAlloc\", new()\n {\n AddressType = \"INTERNAL\",\n Purpose = \"VPC_PEERING\",\n PrefixLength = 22,\n Network = network.Id,\n });\n\n var extendedInstance = new Gcp.DataFusion.Instance(\"extendedInstance\", new()\n {\n Description = \"My Data Fusion instance\",\n DisplayName = \"My Data Fusion instance\",\n Region = \"us-central1\",\n Type = \"BASIC\",\n EnableStackdriverLogging = true,\n EnableStackdriverMonitoring = true,\n PrivateInstance = true,\n Version = \"6.6.0\",\n DataprocServiceAccount = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Email)),\n Labels = \n {\n { \"example_key\", \"example_value\" },\n },\n NetworkConfig = new Gcp.DataFusion.Inputs.InstanceNetworkConfigArgs\n {\n Network = \"default\",\n IpAllocation = Output.Tuple(privateIpAlloc.Address, privateIpAlloc.PrefixLength).Apply(values =\u003e\n {\n var address = values.Item1;\n var prefixLength = values.Item2;\n return $\"{address}/{prefixLength}\";\n }),\n },\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/appengine\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := appengine.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"privateIpAlloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tPrefixLength: pulumi.Int(22),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"extendedInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tDescription: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tDisplayName: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tEnableStackdriverLogging: pulumi.Bool(true),\n\t\t\tEnableStackdriverMonitoring: pulumi.Bool(true),\n\t\t\tPrivateInstance: pulumi.Bool(true),\n\t\t\tVersion: pulumi.String(\"6.6.0\"),\n\t\t\tDataprocServiceAccount: *pulumi.String(_default.Email),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"example_key\": pulumi.String(\"example_value\"),\n\t\t\t},\n\t\t\tNetworkConfig: \u0026datafusion.InstanceNetworkConfigArgs{\n\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\tIpAllocation: pulumi.All(privateIpAlloc.Address, privateIpAlloc.PrefixLength).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\taddress := _args[0].(string)\n\t\t\t\t\tprefixLength := _args[1].(*int)\n\t\t\t\t\treturn fmt.Sprintf(\"%v/%v\", address, prefixLength), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"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.appengine.AppengineFunctions;\nimport com.pulumi.gcp.appengine.inputs.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceNetworkConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = AppengineFunctions.getDefaultServiceAccount();\n\n var network = new Network(\"network\");\n\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder() \n .addressType(\"INTERNAL\")\n .purpose(\"VPC_PEERING\")\n .prefixLength(22)\n .network(network.id())\n .build());\n\n var extendedInstance = new Instance(\"extendedInstance\", InstanceArgs.builder() \n .description(\"My Data Fusion instance\")\n .displayName(\"My Data Fusion instance\")\n .region(\"us-central1\")\n .type(\"BASIC\")\n .enableStackdriverLogging(true)\n .enableStackdriverMonitoring(true)\n .privateInstance(true)\n .version(\"6.6.0\")\n .dataprocServiceAccount(default_.email())\n .labels(Map.of(\"example_key\", \"example_value\"))\n .networkConfig(InstanceNetworkConfigArgs.builder()\n .network(\"default\")\n .ipAllocation(Output.tuple(privateIpAlloc.address(), privateIpAlloc.prefixLength()).applyValue(values -\u003e {\n var address = values.t1;\n var prefixLength = values.t2;\n return String.format(\"%s/%s\", address,prefixLength);\n }))\n .build())\n .options(Map.of(\"prober_test_run\", \"true\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n extendedInstance:\n type: gcp:datafusion:Instance\n properties:\n description: My Data Fusion instance\n displayName: My Data Fusion instance\n region: us-central1\n type: BASIC\n enableStackdriverLogging: true\n enableStackdriverMonitoring: true\n privateInstance: true\n version: 6.6.0\n dataprocServiceAccount: ${default.email}\n labels:\n example_key: example_value\n networkConfig:\n network: default\n ipAllocation: ${privateIpAlloc.address}/${privateIpAlloc.prefixLength}\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n network:\n type: gcp:compute:Network\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n properties:\n addressType: INTERNAL\n purpose: VPC_PEERING\n prefixLength: 22\n network: ${network.id}\nvariables:\n default:\n fn::invoke:\n Function: gcp:appengine:getDefaultServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Cmek\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRing(\"keyRing\", {location: \"us-central1\"});\nconst cryptoKey = new gcp.kms.CryptoKey(\"cryptoKey\", {keyRing: keyRing.id});\nconst project = gcp.organizations.getProject({});\nconst cryptoKeyBinding = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", {\n cryptoKeyId: cryptoKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com`)],\n});\nconst cmek = new gcp.datafusion.Instance(\"cmek\", {\n region: \"us-central1\",\n type: \"BASIC\",\n cryptoKeyConfig: {\n keyReference: cryptoKey.id,\n },\n}, {\n dependsOn: [cryptoKeyBinding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRing(\"keyRing\", location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"cryptoKey\", key_ring=key_ring.id)\nproject = gcp.organizations.get_project()\ncrypto_key_binding = gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\",\n crypto_key_id=crypto_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[f\"serviceAccount:service-{project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\"])\ncmek = gcp.datafusion.Instance(\"cmek\",\n region=\"us-central1\",\n type=\"BASIC\",\n crypto_key_config=gcp.datafusion.InstanceCryptoKeyConfigArgs(\n key_reference=crypto_key.id,\n ),\n opts=pulumi.ResourceOptions(depends_on=[crypto_key_binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRing(\"keyRing\", new()\n {\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"cryptoKey\", new()\n {\n KeyRing = keyRing.Id,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cryptoKeyBinding = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", new()\n {\n CryptoKeyId = cryptoKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datafusion.iam.gserviceaccount.com\",\n },\n });\n\n var cmek = new Gcp.DataFusion.Instance(\"cmek\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n CryptoKeyConfig = new Gcp.DataFusion.Inputs.InstanceCryptoKeyConfigArgs\n {\n KeyReference = cryptoKey.Id,\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n cryptoKeyBinding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyRing, err := kms.NewKeyRing(ctx, \"keyRing\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"cryptoKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyBinding, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKeyBinding\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: cryptoKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datafusion.iam.gserviceaccount.com\", project.Number)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"cmek\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tCryptoKeyConfig: \u0026datafusion.InstanceCryptoKeyConfigArgs{\n\t\t\t\tKeyReference: cryptoKey.ID(),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyBinding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceCryptoKeyConfigArgs;\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 keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .keyRing(keyRing.id())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var cryptoKeyBinding = new CryptoKeyIAMBinding(\"cryptoKeyBinding\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(cryptoKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(String.format(\"serviceAccount:service-%s@gcp-sa-datafusion.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var cmek = new Instance(\"cmek\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .cryptoKeyConfig(InstanceCryptoKeyConfigArgs.builder()\n .keyReference(cryptoKey.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyBinding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cmek:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n cryptoKeyConfig:\n keyReference: ${cryptoKey.id}\n options:\n dependson:\n - ${cryptoKeyBinding}\n cryptoKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n cryptoKeyBinding:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${cryptoKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Enterprise\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst enterpriseInstance = new gcp.datafusion.Instance(\"enterpriseInstance\", {\n enableRbac: true,\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"ENTERPRISE\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nenterprise_instance = gcp.datafusion.Instance(\"enterpriseInstance\",\n enable_rbac=True,\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"ENTERPRISE\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var enterpriseInstance = new Gcp.DataFusion.Instance(\"enterpriseInstance\", new()\n {\n EnableRbac = true,\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"ENTERPRISE\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"enterpriseInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tEnableRbac: pulumi.Bool(true),\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"ENTERPRISE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var enterpriseInstance = new Instance(\"enterpriseInstance\", InstanceArgs.builder() \n .enableRbac(true)\n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"ENTERPRISE\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n enterpriseInstance:\n type: gcp:datafusion:Instance\n properties:\n enableRbac: true\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: ENTERPRISE\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Event\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst eventTopic = new gcp.pubsub.Topic(\"eventTopic\", {});\nconst eventInstance = new gcp.datafusion.Instance(\"eventInstance\", {\n region: \"us-central1\",\n type: \"BASIC\",\n version: \"6.7.0\",\n eventPublishConfig: {\n enabled: true,\n topic: eventTopic.id,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nevent_topic = gcp.pubsub.Topic(\"eventTopic\")\nevent_instance = gcp.datafusion.Instance(\"eventInstance\",\n region=\"us-central1\",\n type=\"BASIC\",\n version=\"6.7.0\",\n event_publish_config=gcp.datafusion.InstanceEventPublishConfigArgs(\n enabled=True,\n topic=event_topic.id,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var eventTopic = new Gcp.PubSub.Topic(\"eventTopic\");\n\n var eventInstance = new Gcp.DataFusion.Instance(\"eventInstance\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n Version = \"6.7.0\",\n EventPublishConfig = new Gcp.DataFusion.Inputs.InstanceEventPublishConfigArgs\n {\n Enabled = true,\n Topic = eventTopic.Id,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\teventTopic, err := pubsub.NewTopic(ctx, \"eventTopic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"eventInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tVersion: pulumi.String(\"6.7.0\"),\n\t\t\tEventPublishConfig: \u0026datafusion.InstanceEventPublishConfigArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tTopic: eventTopic.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceEventPublishConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var eventTopic = new Topic(\"eventTopic\");\n\n var eventInstance = new Instance(\"eventInstance\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .version(\"6.7.0\")\n .eventPublishConfig(InstanceEventPublishConfigArgs.builder()\n .enabled(true)\n .topic(eventTopic.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n eventInstance:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n version: 6.7.0\n eventPublishConfig:\n enabled: true\n topic: ${eventTopic.id}\n eventTopic:\n type: gcp:pubsub:Topic\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Zone\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst zone = new gcp.datafusion.Instance(\"zone\", {\n region: \"us-central1\",\n type: \"DEVELOPER\",\n zone: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nzone = gcp.datafusion.Instance(\"zone\",\n region=\"us-central1\",\n type=\"DEVELOPER\",\n zone=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var zone = new Gcp.DataFusion.Instance(\"zone\", new()\n {\n Region = \"us-central1\",\n Type = \"DEVELOPER\",\n Zone = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"zone\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"DEVELOPER\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var zone = new Instance(\"zone\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"DEVELOPER\")\n .zone(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n zone:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: DEVELOPER\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamMember:InstanceIamMember default projects/{{project}}/locations/{{region}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamMember:InstanceIamMember default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamMember:InstanceIamMember default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamMember:InstanceIamMember default {{name}}\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:securitycenter/InstanceIamMemberCondition:InstanceIamMemberCondition" @@ -184959,7 +186495,7 @@ } }, "gcp:securitycenter/instanceIamPolicy:InstanceIamPolicy": { - "description": "Represents a Data Fusion instance.\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/data-fusion/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Fusion Instance Basic\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicInstance = new gcp.datafusion.Instance(\"basicInstance\", {\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"BASIC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_instance = gcp.datafusion.Instance(\"basicInstance\",\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"BASIC\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicInstance = new Gcp.DataFusion.Instance(\"basicInstance\", new()\n {\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"BASIC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"basicInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicInstance = new Instance(\"basicInstance\", InstanceArgs.builder() \n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"BASIC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicInstance:\n type: gcp:datafusion:Instance\n properties:\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: BASIC\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Full\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.appengine.getDefaultServiceAccount({});\nconst network = new gcp.compute.Network(\"network\", {});\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"privateIpAlloc\", {\n addressType: \"INTERNAL\",\n purpose: \"VPC_PEERING\",\n prefixLength: 22,\n network: network.id,\n});\nconst extendedInstance = new gcp.datafusion.Instance(\"extendedInstance\", {\n description: \"My Data Fusion instance\",\n displayName: \"My Data Fusion instance\",\n region: \"us-central1\",\n type: \"BASIC\",\n enableStackdriverLogging: true,\n enableStackdriverMonitoring: true,\n privateInstance: true,\n version: \"6.6.0\",\n dataprocServiceAccount: _default.then(_default =\u003e _default.email),\n labels: {\n example_key: \"example_value\",\n },\n networkConfig: {\n network: \"default\",\n ipAllocation: pulumi.all([privateIpAlloc.address, privateIpAlloc.prefixLength]).apply(([address, prefixLength]) =\u003e `${address}/${prefixLength}`),\n },\n options: {\n prober_test_run: \"true\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.appengine.get_default_service_account()\nnetwork = gcp.compute.Network(\"network\")\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"privateIpAlloc\",\n address_type=\"INTERNAL\",\n purpose=\"VPC_PEERING\",\n prefix_length=22,\n network=network.id)\nextended_instance = gcp.datafusion.Instance(\"extendedInstance\",\n description=\"My Data Fusion instance\",\n display_name=\"My Data Fusion instance\",\n region=\"us-central1\",\n type=\"BASIC\",\n enable_stackdriver_logging=True,\n enable_stackdriver_monitoring=True,\n private_instance=True,\n version=\"6.6.0\",\n dataproc_service_account=default.email,\n labels={\n \"example_key\": \"example_value\",\n },\n network_config=gcp.datafusion.InstanceNetworkConfigArgs(\n network=\"default\",\n ip_allocation=pulumi.Output.all(private_ip_alloc.address, private_ip_alloc.prefix_length).apply(lambda address, prefix_length: f\"{address}/{prefix_length}\"),\n ),\n options={\n \"prober_test_run\": \"true\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.AppEngine.GetDefaultServiceAccount.Invoke();\n\n var network = new Gcp.Compute.Network(\"network\");\n\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"privateIpAlloc\", new()\n {\n AddressType = \"INTERNAL\",\n Purpose = \"VPC_PEERING\",\n PrefixLength = 22,\n Network = network.Id,\n });\n\n var extendedInstance = new Gcp.DataFusion.Instance(\"extendedInstance\", new()\n {\n Description = \"My Data Fusion instance\",\n DisplayName = \"My Data Fusion instance\",\n Region = \"us-central1\",\n Type = \"BASIC\",\n EnableStackdriverLogging = true,\n EnableStackdriverMonitoring = true,\n PrivateInstance = true,\n Version = \"6.6.0\",\n DataprocServiceAccount = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Email)),\n Labels = \n {\n { \"example_key\", \"example_value\" },\n },\n NetworkConfig = new Gcp.DataFusion.Inputs.InstanceNetworkConfigArgs\n {\n Network = \"default\",\n IpAllocation = Output.Tuple(privateIpAlloc.Address, privateIpAlloc.PrefixLength).Apply(values =\u003e\n {\n var address = values.Item1;\n var prefixLength = values.Item2;\n return $\"{address}/{prefixLength}\";\n }),\n },\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/appengine\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := appengine.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"privateIpAlloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tPrefixLength: pulumi.Int(22),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"extendedInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tDescription: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tDisplayName: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tEnableStackdriverLogging: pulumi.Bool(true),\n\t\t\tEnableStackdriverMonitoring: pulumi.Bool(true),\n\t\t\tPrivateInstance: pulumi.Bool(true),\n\t\t\tVersion: pulumi.String(\"6.6.0\"),\n\t\t\tDataprocServiceAccount: *pulumi.String(_default.Email),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"example_key\": pulumi.String(\"example_value\"),\n\t\t\t},\n\t\t\tNetworkConfig: \u0026datafusion.InstanceNetworkConfigArgs{\n\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\tIpAllocation: pulumi.All(privateIpAlloc.Address, privateIpAlloc.PrefixLength).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\taddress := _args[0].(string)\n\t\t\t\t\tprefixLength := _args[1].(*int)\n\t\t\t\t\treturn fmt.Sprintf(\"%v/%v\", address, prefixLength), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"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.appengine.AppengineFunctions;\nimport com.pulumi.gcp.appengine.inputs.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceNetworkConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = AppengineFunctions.getDefaultServiceAccount();\n\n var network = new Network(\"network\");\n\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder() \n .addressType(\"INTERNAL\")\n .purpose(\"VPC_PEERING\")\n .prefixLength(22)\n .network(network.id())\n .build());\n\n var extendedInstance = new Instance(\"extendedInstance\", InstanceArgs.builder() \n .description(\"My Data Fusion instance\")\n .displayName(\"My Data Fusion instance\")\n .region(\"us-central1\")\n .type(\"BASIC\")\n .enableStackdriverLogging(true)\n .enableStackdriverMonitoring(true)\n .privateInstance(true)\n .version(\"6.6.0\")\n .dataprocServiceAccount(default_.email())\n .labels(Map.of(\"example_key\", \"example_value\"))\n .networkConfig(InstanceNetworkConfigArgs.builder()\n .network(\"default\")\n .ipAllocation(Output.tuple(privateIpAlloc.address(), privateIpAlloc.prefixLength()).applyValue(values -\u003e {\n var address = values.t1;\n var prefixLength = values.t2;\n return String.format(\"%s/%s\", address,prefixLength);\n }))\n .build())\n .options(Map.of(\"prober_test_run\", \"true\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n extendedInstance:\n type: gcp:datafusion:Instance\n properties:\n description: My Data Fusion instance\n displayName: My Data Fusion instance\n region: us-central1\n type: BASIC\n enableStackdriverLogging: true\n enableStackdriverMonitoring: true\n privateInstance: true\n version: 6.6.0\n dataprocServiceAccount: ${default.email}\n labels:\n example_key: example_value\n networkConfig:\n network: default\n ipAllocation: ${privateIpAlloc.address}/${privateIpAlloc.prefixLength}\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n network:\n type: gcp:compute:Network\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n properties:\n addressType: INTERNAL\n purpose: VPC_PEERING\n prefixLength: 22\n network: ${network.id}\nvariables:\n default:\n fn::invoke:\n Function: gcp:appengine:getDefaultServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Cmek\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRing(\"keyRing\", {location: \"us-central1\"});\nconst cryptoKey = new gcp.kms.CryptoKey(\"cryptoKey\", {keyRing: keyRing.id});\nconst project = gcp.organizations.getProject({});\nconst cryptoKeyBinding = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", {\n cryptoKeyId: cryptoKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com`)],\n});\nconst cmek = new gcp.datafusion.Instance(\"cmek\", {\n region: \"us-central1\",\n type: \"BASIC\",\n cryptoKeyConfig: {\n keyReference: cryptoKey.id,\n },\n}, {\n dependsOn: [cryptoKeyBinding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRing(\"keyRing\", location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"cryptoKey\", key_ring=key_ring.id)\nproject = gcp.organizations.get_project()\ncrypto_key_binding = gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\",\n crypto_key_id=crypto_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[f\"serviceAccount:service-{project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\"])\ncmek = gcp.datafusion.Instance(\"cmek\",\n region=\"us-central1\",\n type=\"BASIC\",\n crypto_key_config=gcp.datafusion.InstanceCryptoKeyConfigArgs(\n key_reference=crypto_key.id,\n ),\n opts=pulumi.ResourceOptions(depends_on=[crypto_key_binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRing(\"keyRing\", new()\n {\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"cryptoKey\", new()\n {\n KeyRing = keyRing.Id,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cryptoKeyBinding = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", new()\n {\n CryptoKeyId = cryptoKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datafusion.iam.gserviceaccount.com\",\n },\n });\n\n var cmek = new Gcp.DataFusion.Instance(\"cmek\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n CryptoKeyConfig = new Gcp.DataFusion.Inputs.InstanceCryptoKeyConfigArgs\n {\n KeyReference = cryptoKey.Id,\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n cryptoKeyBinding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyRing, err := kms.NewKeyRing(ctx, \"keyRing\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"cryptoKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyBinding, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKeyBinding\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: cryptoKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datafusion.iam.gserviceaccount.com\", project.Number)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"cmek\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tCryptoKeyConfig: \u0026datafusion.InstanceCryptoKeyConfigArgs{\n\t\t\t\tKeyReference: cryptoKey.ID(),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyBinding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceCryptoKeyConfigArgs;\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 keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .keyRing(keyRing.id())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var cryptoKeyBinding = new CryptoKeyIAMBinding(\"cryptoKeyBinding\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(cryptoKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(String.format(\"serviceAccount:service-%s@gcp-sa-datafusion.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var cmek = new Instance(\"cmek\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .cryptoKeyConfig(InstanceCryptoKeyConfigArgs.builder()\n .keyReference(cryptoKey.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyBinding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cmek:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n cryptoKeyConfig:\n keyReference: ${cryptoKey.id}\n options:\n dependson:\n - ${cryptoKeyBinding}\n cryptoKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n cryptoKeyBinding:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${cryptoKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Enterprise\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst enterpriseInstance = new gcp.datafusion.Instance(\"enterpriseInstance\", {\n enableRbac: true,\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"ENTERPRISE\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nenterprise_instance = gcp.datafusion.Instance(\"enterpriseInstance\",\n enable_rbac=True,\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"ENTERPRISE\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var enterpriseInstance = new Gcp.DataFusion.Instance(\"enterpriseInstance\", new()\n {\n EnableRbac = true,\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"ENTERPRISE\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"enterpriseInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tEnableRbac: pulumi.Bool(true),\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"ENTERPRISE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var enterpriseInstance = new Instance(\"enterpriseInstance\", InstanceArgs.builder() \n .enableRbac(true)\n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"ENTERPRISE\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n enterpriseInstance:\n type: gcp:datafusion:Instance\n properties:\n enableRbac: true\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: ENTERPRISE\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Event\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst eventTopic = new gcp.pubsub.Topic(\"eventTopic\", {});\nconst eventInstance = new gcp.datafusion.Instance(\"eventInstance\", {\n region: \"us-central1\",\n type: \"BASIC\",\n version: \"6.7.0\",\n eventPublishConfig: {\n enabled: true,\n topic: eventTopic.id,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nevent_topic = gcp.pubsub.Topic(\"eventTopic\")\nevent_instance = gcp.datafusion.Instance(\"eventInstance\",\n region=\"us-central1\",\n type=\"BASIC\",\n version=\"6.7.0\",\n event_publish_config=gcp.datafusion.InstanceEventPublishConfigArgs(\n enabled=True,\n topic=event_topic.id,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var eventTopic = new Gcp.PubSub.Topic(\"eventTopic\");\n\n var eventInstance = new Gcp.DataFusion.Instance(\"eventInstance\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n Version = \"6.7.0\",\n EventPublishConfig = new Gcp.DataFusion.Inputs.InstanceEventPublishConfigArgs\n {\n Enabled = true,\n Topic = eventTopic.Id,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\teventTopic, err := pubsub.NewTopic(ctx, \"eventTopic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"eventInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tVersion: pulumi.String(\"6.7.0\"),\n\t\t\tEventPublishConfig: \u0026datafusion.InstanceEventPublishConfigArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tTopic: eventTopic.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceEventPublishConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var eventTopic = new Topic(\"eventTopic\");\n\n var eventInstance = new Instance(\"eventInstance\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .version(\"6.7.0\")\n .eventPublishConfig(InstanceEventPublishConfigArgs.builder()\n .enabled(true)\n .topic(eventTopic.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n eventInstance:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n version: 6.7.0\n eventPublishConfig:\n enabled: true\n topic: ${eventTopic.id}\n eventTopic:\n type: gcp:pubsub:Topic\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Zone\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst zone = new gcp.datafusion.Instance(\"zone\", {\n region: \"us-central1\",\n type: \"DEVELOPER\",\n zone: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nzone = gcp.datafusion.Instance(\"zone\",\n region=\"us-central1\",\n type=\"DEVELOPER\",\n zone=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var zone = new Gcp.DataFusion.Instance(\"zone\", new()\n {\n Region = \"us-central1\",\n Type = \"DEVELOPER\",\n Zone = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"zone\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"DEVELOPER\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var zone = new Instance(\"zone\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"DEVELOPER\")\n .zone(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n zone:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: DEVELOPER\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamPolicy:InstanceIamPolicy default projects/{{project}}/locations/{{region}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamPolicy:InstanceIamPolicy default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamPolicy:InstanceIamPolicy default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamPolicy:InstanceIamPolicy default {{name}}\n```\n\n ", + "description": "Represents a Data Fusion instance.\n\n\nTo get more information about Instance, see:\n\n* [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/data-fusion/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Data Fusion Instance Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basicInstance = new gcp.datafusion.Instance(\"basicInstance\", {\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"BASIC\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic_instance = gcp.datafusion.Instance(\"basicInstance\",\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"BASIC\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basicInstance = new Gcp.DataFusion.Instance(\"basicInstance\", new()\n {\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"BASIC\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"basicInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var basicInstance = new Instance(\"basicInstance\", InstanceArgs.builder() \n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"BASIC\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n basicInstance:\n type: gcp:datafusion:Instance\n properties:\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: BASIC\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.appengine.getDefaultServiceAccount({});\nconst network = new gcp.compute.Network(\"network\", {});\nconst privateIpAlloc = new gcp.compute.GlobalAddress(\"privateIpAlloc\", {\n addressType: \"INTERNAL\",\n purpose: \"VPC_PEERING\",\n prefixLength: 22,\n network: network.id,\n});\nconst extendedInstance = new gcp.datafusion.Instance(\"extendedInstance\", {\n description: \"My Data Fusion instance\",\n displayName: \"My Data Fusion instance\",\n region: \"us-central1\",\n type: \"BASIC\",\n enableStackdriverLogging: true,\n enableStackdriverMonitoring: true,\n privateInstance: true,\n version: \"6.6.0\",\n dataprocServiceAccount: _default.then(_default =\u003e _default.email),\n labels: {\n example_key: \"example_value\",\n },\n networkConfig: {\n network: \"default\",\n ipAllocation: pulumi.all([privateIpAlloc.address, privateIpAlloc.prefixLength]).apply(([address, prefixLength]) =\u003e `${address}/${prefixLength}`),\n },\n options: {\n prober_test_run: \"true\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.appengine.get_default_service_account()\nnetwork = gcp.compute.Network(\"network\")\nprivate_ip_alloc = gcp.compute.GlobalAddress(\"privateIpAlloc\",\n address_type=\"INTERNAL\",\n purpose=\"VPC_PEERING\",\n prefix_length=22,\n network=network.id)\nextended_instance = gcp.datafusion.Instance(\"extendedInstance\",\n description=\"My Data Fusion instance\",\n display_name=\"My Data Fusion instance\",\n region=\"us-central1\",\n type=\"BASIC\",\n enable_stackdriver_logging=True,\n enable_stackdriver_monitoring=True,\n private_instance=True,\n version=\"6.6.0\",\n dataproc_service_account=default.email,\n labels={\n \"example_key\": \"example_value\",\n },\n network_config=gcp.datafusion.InstanceNetworkConfigArgs(\n network=\"default\",\n ip_allocation=pulumi.Output.all(private_ip_alloc.address, private_ip_alloc.prefix_length).apply(lambda address, prefix_length: f\"{address}/{prefix_length}\"),\n ),\n options={\n \"prober_test_run\": \"true\",\n })\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.AppEngine.GetDefaultServiceAccount.Invoke();\n\n var network = new Gcp.Compute.Network(\"network\");\n\n var privateIpAlloc = new Gcp.Compute.GlobalAddress(\"privateIpAlloc\", new()\n {\n AddressType = \"INTERNAL\",\n Purpose = \"VPC_PEERING\",\n PrefixLength = 22,\n Network = network.Id,\n });\n\n var extendedInstance = new Gcp.DataFusion.Instance(\"extendedInstance\", new()\n {\n Description = \"My Data Fusion instance\",\n DisplayName = \"My Data Fusion instance\",\n Region = \"us-central1\",\n Type = \"BASIC\",\n EnableStackdriverLogging = true,\n EnableStackdriverMonitoring = true,\n PrivateInstance = true,\n Version = \"6.6.0\",\n DataprocServiceAccount = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Email)),\n Labels = \n {\n { \"example_key\", \"example_value\" },\n },\n NetworkConfig = new Gcp.DataFusion.Inputs.InstanceNetworkConfigArgs\n {\n Network = \"default\",\n IpAllocation = Output.Tuple(privateIpAlloc.Address, privateIpAlloc.PrefixLength).Apply(values =\u003e\n {\n var address = values.Item1;\n var prefixLength = values.Item2;\n return $\"{address}/{prefixLength}\";\n }),\n },\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/appengine\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := appengine.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, err := compute.NewNetwork(ctx, \"network\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAlloc, err := compute.NewGlobalAddress(ctx, \"privateIpAlloc\", \u0026compute.GlobalAddressArgs{\n\t\t\tAddressType: pulumi.String(\"INTERNAL\"),\n\t\t\tPurpose: pulumi.String(\"VPC_PEERING\"),\n\t\t\tPrefixLength: pulumi.Int(22),\n\t\t\tNetwork: network.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"extendedInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tDescription: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tDisplayName: pulumi.String(\"My Data Fusion instance\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tEnableStackdriverLogging: pulumi.Bool(true),\n\t\t\tEnableStackdriverMonitoring: pulumi.Bool(true),\n\t\t\tPrivateInstance: pulumi.Bool(true),\n\t\t\tVersion: pulumi.String(\"6.6.0\"),\n\t\t\tDataprocServiceAccount: *pulumi.String(_default.Email),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"example_key\": pulumi.String(\"example_value\"),\n\t\t\t},\n\t\t\tNetworkConfig: \u0026datafusion.InstanceNetworkConfigArgs{\n\t\t\t\tNetwork: pulumi.String(\"default\"),\n\t\t\t\tIpAllocation: pulumi.All(privateIpAlloc.Address, privateIpAlloc.PrefixLength).ApplyT(func(_args []interface{}) (string, error) {\n\t\t\t\t\taddress := _args[0].(string)\n\t\t\t\t\tprefixLength := _args[1].(*int)\n\t\t\t\t\treturn fmt.Sprintf(\"%v/%v\", address, prefixLength), nil\n\t\t\t\t}).(pulumi.StringOutput),\n\t\t\t},\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"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.appengine.AppengineFunctions;\nimport com.pulumi.gcp.appengine.inputs.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.compute.Network;\nimport com.pulumi.gcp.compute.GlobalAddress;\nimport com.pulumi.gcp.compute.GlobalAddressArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceNetworkConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = AppengineFunctions.getDefaultServiceAccount();\n\n var network = new Network(\"network\");\n\n var privateIpAlloc = new GlobalAddress(\"privateIpAlloc\", GlobalAddressArgs.builder() \n .addressType(\"INTERNAL\")\n .purpose(\"VPC_PEERING\")\n .prefixLength(22)\n .network(network.id())\n .build());\n\n var extendedInstance = new Instance(\"extendedInstance\", InstanceArgs.builder() \n .description(\"My Data Fusion instance\")\n .displayName(\"My Data Fusion instance\")\n .region(\"us-central1\")\n .type(\"BASIC\")\n .enableStackdriverLogging(true)\n .enableStackdriverMonitoring(true)\n .privateInstance(true)\n .version(\"6.6.0\")\n .dataprocServiceAccount(default_.email())\n .labels(Map.of(\"example_key\", \"example_value\"))\n .networkConfig(InstanceNetworkConfigArgs.builder()\n .network(\"default\")\n .ipAllocation(Output.tuple(privateIpAlloc.address(), privateIpAlloc.prefixLength()).applyValue(values -\u003e {\n var address = values.t1;\n var prefixLength = values.t2;\n return String.format(\"%s/%s\", address,prefixLength);\n }))\n .build())\n .options(Map.of(\"prober_test_run\", \"true\"))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n extendedInstance:\n type: gcp:datafusion:Instance\n properties:\n description: My Data Fusion instance\n displayName: My Data Fusion instance\n region: us-central1\n type: BASIC\n enableStackdriverLogging: true\n enableStackdriverMonitoring: true\n privateInstance: true\n version: 6.6.0\n dataprocServiceAccount: ${default.email}\n labels:\n example_key: example_value\n networkConfig:\n network: default\n ipAllocation: ${privateIpAlloc.address}/${privateIpAlloc.prefixLength}\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n network:\n type: gcp:compute:Network\n privateIpAlloc:\n type: gcp:compute:GlobalAddress\n properties:\n addressType: INTERNAL\n purpose: VPC_PEERING\n prefixLength: 22\n network: ${network.id}\nvariables:\n default:\n fn::invoke:\n Function: gcp:appengine:getDefaultServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Cmek\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst keyRing = new gcp.kms.KeyRing(\"keyRing\", {location: \"us-central1\"});\nconst cryptoKey = new gcp.kms.CryptoKey(\"cryptoKey\", {keyRing: keyRing.id});\nconst project = gcp.organizations.getProject({});\nconst cryptoKeyBinding = new gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", {\n cryptoKeyId: cryptoKey.id,\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [project.then(project =\u003e `serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com`)],\n});\nconst cmek = new gcp.datafusion.Instance(\"cmek\", {\n region: \"us-central1\",\n type: \"BASIC\",\n cryptoKeyConfig: {\n keyReference: cryptoKey.id,\n },\n}, {\n dependsOn: [cryptoKeyBinding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nkey_ring = gcp.kms.KeyRing(\"keyRing\", location=\"us-central1\")\ncrypto_key = gcp.kms.CryptoKey(\"cryptoKey\", key_ring=key_ring.id)\nproject = gcp.organizations.get_project()\ncrypto_key_binding = gcp.kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\",\n crypto_key_id=crypto_key.id,\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[f\"serviceAccount:service-{project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\"])\ncmek = gcp.datafusion.Instance(\"cmek\",\n region=\"us-central1\",\n type=\"BASIC\",\n crypto_key_config=gcp.datafusion.InstanceCryptoKeyConfigArgs(\n key_reference=crypto_key.id,\n ),\n opts=pulumi.ResourceOptions(depends_on=[crypto_key_binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var keyRing = new Gcp.Kms.KeyRing(\"keyRing\", new()\n {\n Location = \"us-central1\",\n });\n\n var cryptoKey = new Gcp.Kms.CryptoKey(\"cryptoKey\", new()\n {\n KeyRing = keyRing.Id,\n });\n\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var cryptoKeyBinding = new Gcp.Kms.CryptoKeyIAMBinding(\"cryptoKeyBinding\", new()\n {\n CryptoKeyId = cryptoKey.Id,\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n $\"serviceAccount:service-{project.Apply(getProjectResult =\u003e getProjectResult.Number)}@gcp-sa-datafusion.iam.gserviceaccount.com\",\n },\n });\n\n var cmek = new Gcp.DataFusion.Instance(\"cmek\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n CryptoKeyConfig = new Gcp.DataFusion.Inputs.InstanceCryptoKeyConfigArgs\n {\n KeyReference = cryptoKey.Id,\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n cryptoKeyBinding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tkeyRing, err := kms.NewKeyRing(ctx, \"keyRing\", \u0026kms.KeyRingArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKey, err := kms.NewCryptoKey(ctx, \"cryptoKey\", \u0026kms.CryptoKeyArgs{\n\t\t\tKeyRing: keyRing.ID(),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tproject, err := organizations.LookupProject(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tcryptoKeyBinding, err := kms.NewCryptoKeyIAMBinding(ctx, \"cryptoKeyBinding\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: cryptoKey.ID(),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:service-%v@gcp-sa-datafusion.iam.gserviceaccount.com\", project.Number)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"cmek\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tCryptoKeyConfig: \u0026datafusion.InstanceCryptoKeyConfigArgs{\n\t\t\t\tKeyReference: cryptoKey.ID(),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tcryptoKeyBinding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.kms.KeyRing;\nimport com.pulumi.gcp.kms.KeyRingArgs;\nimport com.pulumi.gcp.kms.CryptoKey;\nimport com.pulumi.gcp.kms.CryptoKeyArgs;\nimport com.pulumi.gcp.organizations.OrganizationsFunctions;\nimport com.pulumi.gcp.organizations.inputs.GetProjectArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceCryptoKeyConfigArgs;\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 keyRing = new KeyRing(\"keyRing\", KeyRingArgs.builder() \n .location(\"us-central1\")\n .build());\n\n var cryptoKey = new CryptoKey(\"cryptoKey\", CryptoKeyArgs.builder() \n .keyRing(keyRing.id())\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n var cryptoKeyBinding = new CryptoKeyIAMBinding(\"cryptoKeyBinding\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(cryptoKey.id())\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(String.format(\"serviceAccount:service-%s@gcp-sa-datafusion.iam.gserviceaccount.com\", project.applyValue(getProjectResult -\u003e getProjectResult.number())))\n .build());\n\n var cmek = new Instance(\"cmek\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .cryptoKeyConfig(InstanceCryptoKeyConfigArgs.builder()\n .keyReference(cryptoKey.id())\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(cryptoKeyBinding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n cmek:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n cryptoKeyConfig:\n keyReference: ${cryptoKey.id}\n options:\n dependson:\n - ${cryptoKeyBinding}\n cryptoKey:\n type: gcp:kms:CryptoKey\n properties:\n keyRing: ${keyRing.id}\n keyRing:\n type: gcp:kms:KeyRing\n properties:\n location: us-central1\n cryptoKeyBinding:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: ${cryptoKey.id}\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:service-${project.number}@gcp-sa-datafusion.iam.gserviceaccount.com\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Enterprise\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst enterpriseInstance = new gcp.datafusion.Instance(\"enterpriseInstance\", {\n enableRbac: true,\n options: {\n prober_test_run: \"true\",\n },\n region: \"us-central1\",\n type: \"ENTERPRISE\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nenterprise_instance = gcp.datafusion.Instance(\"enterpriseInstance\",\n enable_rbac=True,\n options={\n \"prober_test_run\": \"true\",\n },\n region=\"us-central1\",\n type=\"ENTERPRISE\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var enterpriseInstance = new Gcp.DataFusion.Instance(\"enterpriseInstance\", new()\n {\n EnableRbac = true,\n Options = \n {\n { \"prober_test_run\", \"true\" },\n },\n Region = \"us-central1\",\n Type = \"ENTERPRISE\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"enterpriseInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tEnableRbac: pulumi.Bool(true),\n\t\t\tOptions: pulumi.StringMap{\n\t\t\t\t\"prober_test_run\": pulumi.String(\"true\"),\n\t\t\t},\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"ENTERPRISE\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var enterpriseInstance = new Instance(\"enterpriseInstance\", InstanceArgs.builder() \n .enableRbac(true)\n .options(Map.of(\"prober_test_run\", \"true\"))\n .region(\"us-central1\")\n .type(\"ENTERPRISE\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n enterpriseInstance:\n type: gcp:datafusion:Instance\n properties:\n enableRbac: true\n # Mark for testing to avoid service networking connection usage that is not cleaned up\n options:\n prober_test_run: 'true'\n region: us-central1\n type: ENTERPRISE\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Event\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst eventTopic = new gcp.pubsub.Topic(\"eventTopic\", {});\nconst eventInstance = new gcp.datafusion.Instance(\"eventInstance\", {\n region: \"us-central1\",\n type: \"BASIC\",\n version: \"6.7.0\",\n eventPublishConfig: {\n enabled: true,\n topic: eventTopic.id,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nevent_topic = gcp.pubsub.Topic(\"eventTopic\")\nevent_instance = gcp.datafusion.Instance(\"eventInstance\",\n region=\"us-central1\",\n type=\"BASIC\",\n version=\"6.7.0\",\n event_publish_config=gcp.datafusion.InstanceEventPublishConfigArgs(\n enabled=True,\n topic=event_topic.id,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var eventTopic = new Gcp.PubSub.Topic(\"eventTopic\");\n\n var eventInstance = new Gcp.DataFusion.Instance(\"eventInstance\", new()\n {\n Region = \"us-central1\",\n Type = \"BASIC\",\n Version = \"6.7.0\",\n EventPublishConfig = new Gcp.DataFusion.Inputs.InstanceEventPublishConfigArgs\n {\n Enabled = true,\n Topic = eventTopic.Id,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\teventTopic, err := pubsub.NewTopic(ctx, \"eventTopic\", nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = datafusion.NewInstance(ctx, \"eventInstance\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"BASIC\"),\n\t\t\tVersion: pulumi.String(\"6.7.0\"),\n\t\t\tEventPublishConfig: \u0026datafusion.InstanceEventPublishConfigArgs{\n\t\t\t\tEnabled: pulumi.Bool(true),\n\t\t\t\tTopic: eventTopic.ID(),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport com.pulumi.gcp.datafusion.inputs.InstanceEventPublishConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var eventTopic = new Topic(\"eventTopic\");\n\n var eventInstance = new Instance(\"eventInstance\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"BASIC\")\n .version(\"6.7.0\")\n .eventPublishConfig(InstanceEventPublishConfigArgs.builder()\n .enabled(true)\n .topic(eventTopic.id())\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n eventInstance:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: BASIC\n version: 6.7.0\n eventPublishConfig:\n enabled: true\n topic: ${eventTopic.id}\n eventTopic:\n type: gcp:pubsub:Topic\n```\n{{% /example %}}\n{{% example %}}\n### Data Fusion Instance Zone\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst zone = new gcp.datafusion.Instance(\"zone\", {\n region: \"us-central1\",\n type: \"DEVELOPER\",\n zone: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nzone = gcp.datafusion.Instance(\"zone\",\n region=\"us-central1\",\n type=\"DEVELOPER\",\n zone=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var zone = new Gcp.DataFusion.Instance(\"zone\", new()\n {\n Region = \"us-central1\",\n Type = \"DEVELOPER\",\n Zone = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datafusion\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := datafusion.NewInstance(ctx, \"zone\", \u0026datafusion.InstanceArgs{\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tType: pulumi.String(\"DEVELOPER\"),\n\t\t\tZone: pulumi.String(\"us-central1-a\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.datafusion.Instance;\nimport com.pulumi.gcp.datafusion.InstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var zone = new Instance(\"zone\", InstanceArgs.builder() \n .region(\"us-central1\")\n .type(\"DEVELOPER\")\n .zone(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n zone:\n type: gcp:datafusion:Instance\n properties:\n region: us-central1\n type: DEVELOPER\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamPolicy:InstanceIamPolicy default projects/{{project}}/locations/{{region}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamPolicy:InstanceIamPolicy default {{project}}/{{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamPolicy:InstanceIamPolicy default {{region}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:securitycenter/instanceIamPolicy:InstanceIamPolicy default {{name}}\n```\n\n ", "properties": { "etag": { "type": "string" @@ -185465,7 +187001,7 @@ } }, "gcp:serviceAccount/account:Account": { - "description": "Allows management of a Google Cloud service account.\n\n* [API documentation](https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/compute/docs/access/service-accounts)\n\n\u003e **Warning:** If you delete and recreate a service account, you must reapply any IAM roles that it had before.\n\n\u003e Creation of service accounts is eventually consistent, and that can lead to\nerrors when you try to apply ACLs to service accounts immediately after\ncreation.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nThis snippet creates a service account in a project.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst serviceAccount = new gcp.serviceaccount.Account(\"serviceAccount\", {\n accountId: \"service-account-id\",\n displayName: \"Service Account\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nservice_account = gcp.service_account.Account(\"serviceAccount\",\n account_id=\"service-account-id\",\n display_name=\"Service Account\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var serviceAccount = new Gcp.ServiceAccount.Account(\"serviceAccount\", new()\n {\n AccountId = \"service-account-id\",\n DisplayName = \"Service Account\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := serviceAccount.NewAccount(ctx, \"serviceAccount\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"service-account-id\"),\n\t\t\tDisplayName: pulumi.String(\"Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var serviceAccount = new Account(\"serviceAccount\", AccountArgs.builder() \n .accountId(\"service-account-id\")\n .displayName(\"Service Account\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n serviceAccount:\n type: gcp:serviceAccount:Account\n properties:\n accountId: service-account-id\n displayName: Service Account\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nService accounts can be imported using their URI, e.g.\n\n```sh\n $ pulumi import gcp:serviceAccount/account:Account my_sa projects/my-project/serviceAccounts/my-sa@my-project.iam.gserviceaccount.com\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\nThis snippet creates a service account in a project.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst serviceAccount = new gcp.serviceaccount.Account(\"serviceAccount\", {\n accountId: \"service-account-id\",\n displayName: \"Service Account\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nservice_account = gcp.service_account.Account(\"serviceAccount\",\n account_id=\"service-account-id\",\n display_name=\"Service Account\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var serviceAccount = new Gcp.ServiceAccount.Account(\"serviceAccount\", new()\n {\n AccountId = \"service-account-id\",\n DisplayName = \"Service Account\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := serviceAccount.NewAccount(ctx, \"serviceAccount\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"service-account-id\"),\n\t\t\tDisplayName: pulumi.String(\"Service Account\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var serviceAccount = new Account(\"serviceAccount\", AccountArgs.builder() \n .accountId(\"service-account-id\")\n .displayName(\"Service Account\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n serviceAccount:\n type: gcp:serviceAccount:Account\n properties:\n accountId: service-account-id\n displayName: Service Account\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nService accounts can be imported using their URI, e.g.\n\n```sh\n $ pulumi import gcp:serviceAccount/account:Account my_sa projects/my-project/serviceAccounts/my-sa@my-project.iam.gserviceaccount.com\n```\n\n ", "properties": { "accountId": { "type": "string", @@ -185585,7 +187121,7 @@ } }, "gcp:serviceAccount/iAMBinding:IAMBinding": { - "description": "When managing IAM roles, you can treat a service account either as a resource or as an identity. This resource is to add iam policy bindings to a service account resource, such as allowing the members to run operations as or modify the service account. To configure permissions for a service account on other GCP resources, use the google_project_iam set of resources.\n\nThree different resources help you manage your IAM policy for a service account. Each of these resources serves a different use case:\n\n* `gcp.serviceAccount.IAMPolicy`: Authoritative. Sets the IAM policy for the service account and replaces any existing policy already attached.\n* `gcp.serviceAccount.IAMBinding`: 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 service account are preserved.\n* `gcp.serviceAccount.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service account are preserved.\n\n\u003e **Note:** `gcp.serviceAccount.IAMPolicy` **cannot** be used in conjunction with `gcp.serviceAccount.IAMBinding` and `gcp.serviceAccount.IAMMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Service Account IAM Policy\n\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/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can interact with\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMPolicy(\"admin-account-iam\", {\n serviceAccountId: sa.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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"],\n)])\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can interact with\")\nadmin_account_iam = gcp.service_account.IAMPolicy(\"admin-account-iam\",\n service_account_id=sa.name,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/iam.serviceAccountUser\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can interact with\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMPolicy(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/iam.serviceAccountUser\",\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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can interact with\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMPolicy(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMPolicyArgs{\n\t\t\tServiceAccountId: sa.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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMPolicy;\nimport com.pulumi.gcp.serviceAccount.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can interact with\")\n .build());\n\n var admin_account_iam = new IAMPolicy(\"admin-account-iam\", IAMPolicyArgs.builder() \n .serviceAccountId(sa.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can interact with\n admin-account-iam:\n type: gcp:serviceAccount:IAMPolicy\n properties:\n serviceAccountId: ${sa.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n```\n{{% /example %}}\n{{% example %}}\n### Service Account IAM Binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMBinding(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can use\")\nadmin_account_iam = gcp.service_account.IAMBinding(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMBinding(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\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/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMBinding(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMBindingArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMBinding;\nimport com.pulumi.gcp.serviceAccount.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can use\")\n .build());\n\n var admin_account_iam = new IAMBinding(\"admin-account-iam\", IAMBindingArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMBinding\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n```\n{{% /example %}}\n{{% example %}}\n### Service Account IAM Binding With IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMBinding(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can use\")\nadmin_account_iam = gcp.service_account.IAMBinding(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"],\n condition=gcp.service_account.IAMBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMBinding(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.ServiceAccount.Inputs.IAMBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMBinding(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMBindingArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026serviceaccount.IAMBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMBinding;\nimport com.pulumi.gcp.serviceAccount.IAMBindingArgs;\nimport com.pulumi.gcp.serviceAccount.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can use\")\n .build());\n\n var admin_account_iam = new IAMBinding(\"admin-account-iam\", IAMBindingArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .condition(IAMBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMBinding\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n{{% /example %}}\n{{% example %}}\n### Service Account IAM Member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.compute.getDefaultServiceAccount({});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMMember(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n member: \"user:jane@example.com\",\n});\n// Allow SA service account use the default GCE account\nconst gce_default_account_iam = new gcp.serviceaccount.IAMMember(\"gce-default-account-iam\", {\n serviceAccountId: _default.then(_default =\u003e _default.name),\n role: \"roles/iam.serviceAccountUser\",\n member: pulumi.interpolate`serviceAccount:${sa.email}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.get_default_service_account()\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that Jane can use\")\nadmin_account_iam = gcp.service_account.IAMMember(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n member=\"user:jane@example.com\")\n# Allow SA service account use the default GCE account\ngce_default_account_iam = gcp.service_account.IAMMember(\"gce-default-account-iam\",\n service_account_id=default.name,\n role=\"roles/iam.serviceAccountUser\",\n member=sa.email.apply(lambda email: f\"serviceAccount:{email}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Compute.GetDefaultServiceAccount.Invoke();\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMMember(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Member = \"user:jane@example.com\",\n });\n\n // Allow SA service account use the default GCE account\n var gce_default_account_iam = new Gcp.ServiceAccount.IAMMember(\"gce-default-account-iam\", new()\n {\n ServiceAccountId = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Name)),\n Role = \"roles/iam.serviceAccountUser\",\n Member = sa.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := compute.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMMember(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\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\t_, err = serviceAccount.NewIAMMember(ctx, \"gce-default-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: *pulumi.String(_default.Name),\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: sa.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\treturn nil\n\t})\n}\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.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMMember;\nimport com.pulumi.gcp.serviceAccount.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = ComputeFunctions.getDefaultServiceAccount();\n\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that Jane can use\")\n .build());\n\n var admin_account_iam = new IAMMember(\"admin-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(\"user:jane@example.com\")\n .build());\n\n var gce_default_account_iam = new IAMMember(\"gce-default-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(default_.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(sa.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n member: user:jane@example.com\n # Allow SA service account use the default GCE account\n gce-default-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${default.name}\n role: roles/iam.serviceAccountUser\n member: serviceAccount:${sa.email}\nvariables:\n default:\n fn::invoke:\n Function: gcp:compute:getDefaultServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Service Account IAM Member With IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMMember(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that Jane can use\")\nadmin_account_iam = gcp.service_account.IAMMember(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n member=\"user:jane@example.com\",\n condition=gcp.service_account.IAMMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMMember(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.ServiceAccount.Inputs.IAMMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMMember(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026serviceaccount.IAMMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMMember;\nimport com.pulumi.gcp.serviceAccount.IAMMemberArgs;\nimport com.pulumi.gcp.serviceAccount.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that Jane can use\")\n .build());\n\n var admin_account_iam = new IAMMember(\"admin-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(\"user:jane@example.com\")\n .condition(IAMMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nService account IAM resources can be imported using the project, service account email, role, member identity, and condition (beta).\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMBinding:IAMBinding admin-account-iam projects/{your-project-id}/serviceAccounts/{your-service-account-email}\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMBinding:IAMBinding admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser\"\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMBinding:IAMBinding admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/editor user:foo@example.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. With conditions\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMBinding:IAMBinding admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser expires_after_2019_12_31\"\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMBinding:IAMBinding admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser user:foo@example.com expires_after_2019_12_31\"\n```\n\n ", + "description": "When managing IAM roles, you can treat a service account either as a resource or as an identity. This resource is to add iam policy bindings to a service account resource, such as allowing the members to run operations as or modify the service account. To configure permissions for a service account on other GCP resources, use the google_project_iam set of resources.\n\nThree different resources help you manage your IAM policy for a service account. Each of these resources serves a different use case:\n\n* `gcp.serviceAccount.IAMPolicy`: Authoritative. Sets the IAM policy for the service account and replaces any existing policy already attached.\n* `gcp.serviceAccount.IAMBinding`: 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 service account are preserved.\n* `gcp.serviceAccount.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service account are preserved.\n\n\u003e **Note:** `gcp.serviceAccount.IAMPolicy` **cannot** be used in conjunction with `gcp.serviceAccount.IAMBinding` and `gcp.serviceAccount.IAMMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_service\\_account\\_iam\\_policy\n\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/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can interact with\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMPolicy(\"admin-account-iam\", {\n serviceAccountId: sa.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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"],\n)])\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can interact with\")\nadmin_account_iam = gcp.service_account.IAMPolicy(\"admin-account-iam\",\n service_account_id=sa.name,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/iam.serviceAccountUser\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can interact with\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMPolicy(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/iam.serviceAccountUser\",\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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can interact with\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMPolicy(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMPolicyArgs{\n\t\t\tServiceAccountId: sa.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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMPolicy;\nimport com.pulumi.gcp.serviceAccount.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can interact with\")\n .build());\n\n var admin_account_iam = new IAMPolicy(\"admin-account-iam\", IAMPolicyArgs.builder() \n .serviceAccountId(sa.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can interact with\n admin-account-iam:\n type: gcp:serviceAccount:IAMPolicy\n properties:\n serviceAccountId: ${sa.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n```\n\n## google\\_service\\_account\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMBinding(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can use\")\nadmin_account_iam = gcp.service_account.IAMBinding(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMBinding(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\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/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMBinding(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMBindingArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMBinding;\nimport com.pulumi.gcp.serviceAccount.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can use\")\n .build());\n\n var admin_account_iam = new IAMBinding(\"admin-account-iam\", IAMBindingArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMBinding\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMBinding(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can use\")\nadmin_account_iam = gcp.service_account.IAMBinding(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"],\n condition=gcp.service_account.IAMBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMBinding(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.ServiceAccount.Inputs.IAMBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMBinding(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMBindingArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026serviceaccount.IAMBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMBinding;\nimport com.pulumi.gcp.serviceAccount.IAMBindingArgs;\nimport com.pulumi.gcp.serviceAccount.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can use\")\n .build());\n\n var admin_account_iam = new IAMBinding(\"admin-account-iam\", IAMBindingArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .condition(IAMBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMBinding\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n## google\\_service\\_account\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.compute.getDefaultServiceAccount({});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMMember(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n member: \"user:jane@example.com\",\n});\n// Allow SA service account use the default GCE account\nconst gce_default_account_iam = new gcp.serviceaccount.IAMMember(\"gce-default-account-iam\", {\n serviceAccountId: _default.then(_default =\u003e _default.name),\n role: \"roles/iam.serviceAccountUser\",\n member: pulumi.interpolate`serviceAccount:${sa.email}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.get_default_service_account()\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that Jane can use\")\nadmin_account_iam = gcp.service_account.IAMMember(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n member=\"user:jane@example.com\")\n# Allow SA service account use the default GCE account\ngce_default_account_iam = gcp.service_account.IAMMember(\"gce-default-account-iam\",\n service_account_id=default.name,\n role=\"roles/iam.serviceAccountUser\",\n member=sa.email.apply(lambda email: f\"serviceAccount:{email}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Compute.GetDefaultServiceAccount.Invoke();\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMMember(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Member = \"user:jane@example.com\",\n });\n\n // Allow SA service account use the default GCE account\n var gce_default_account_iam = new Gcp.ServiceAccount.IAMMember(\"gce-default-account-iam\", new()\n {\n ServiceAccountId = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Name)),\n Role = \"roles/iam.serviceAccountUser\",\n Member = sa.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := compute.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMMember(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\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\t_, err = serviceAccount.NewIAMMember(ctx, \"gce-default-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: *pulumi.String(_default.Name),\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: sa.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\treturn nil\n\t})\n}\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.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMMember;\nimport com.pulumi.gcp.serviceAccount.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = ComputeFunctions.getDefaultServiceAccount();\n\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that Jane can use\")\n .build());\n\n var admin_account_iam = new IAMMember(\"admin-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(\"user:jane@example.com\")\n .build());\n\n var gce_default_account_iam = new IAMMember(\"gce-default-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(default_.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(sa.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n member: user:jane@example.com\n # Allow SA service account use the default GCE account\n gce-default-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${default.name}\n role: roles/iam.serviceAccountUser\n member: serviceAccount:${sa.email}\nvariables:\n default:\n fn::invoke:\n Function: gcp:compute:getDefaultServiceAccount\n Arguments: {}\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMMember(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that Jane can use\")\nadmin_account_iam = gcp.service_account.IAMMember(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n member=\"user:jane@example.com\",\n condition=gcp.service_account.IAMMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMMember(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.ServiceAccount.Inputs.IAMMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMMember(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026serviceaccount.IAMMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMMember;\nimport com.pulumi.gcp.serviceAccount.IAMMemberArgs;\nimport com.pulumi.gcp.serviceAccount.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that Jane can use\")\n .build());\n\n var admin_account_iam = new IAMMember(\"admin-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(\"user:jane@example.com\")\n .condition(IAMMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n\n## Import\n\nService account IAM resources can be imported using the project, service account email, role, member identity, and condition (beta).\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMBinding:IAMBinding admin-account-iam projects/{your-project-id}/serviceAccounts/{your-service-account-email}\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMBinding:IAMBinding admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser\"\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMBinding:IAMBinding admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/editor user:foo@example.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. With conditions\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMBinding:IAMBinding admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser expires_after_2019_12_31\"\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMBinding:IAMBinding admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser user:foo@example.com expires_after_2019_12_31\"\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:serviceAccount/IAMBindingCondition:IAMBindingCondition", @@ -185677,7 +187213,7 @@ } }, "gcp:serviceAccount/iAMMember:IAMMember": { - "description": "When managing IAM roles, you can treat a service account either as a resource or as an identity. This resource is to add iam policy bindings to a service account resource, such as allowing the members to run operations as or modify the service account. To configure permissions for a service account on other GCP resources, use the google_project_iam set of resources.\n\nThree different resources help you manage your IAM policy for a service account. Each of these resources serves a different use case:\n\n* `gcp.serviceAccount.IAMPolicy`: Authoritative. Sets the IAM policy for the service account and replaces any existing policy already attached.\n* `gcp.serviceAccount.IAMBinding`: 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 service account are preserved.\n* `gcp.serviceAccount.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service account are preserved.\n\n\u003e **Note:** `gcp.serviceAccount.IAMPolicy` **cannot** be used in conjunction with `gcp.serviceAccount.IAMBinding` and `gcp.serviceAccount.IAMMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Service Account IAM Policy\n\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/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can interact with\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMPolicy(\"admin-account-iam\", {\n serviceAccountId: sa.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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"],\n)])\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can interact with\")\nadmin_account_iam = gcp.service_account.IAMPolicy(\"admin-account-iam\",\n service_account_id=sa.name,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/iam.serviceAccountUser\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can interact with\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMPolicy(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/iam.serviceAccountUser\",\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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can interact with\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMPolicy(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMPolicyArgs{\n\t\t\tServiceAccountId: sa.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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMPolicy;\nimport com.pulumi.gcp.serviceAccount.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can interact with\")\n .build());\n\n var admin_account_iam = new IAMPolicy(\"admin-account-iam\", IAMPolicyArgs.builder() \n .serviceAccountId(sa.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can interact with\n admin-account-iam:\n type: gcp:serviceAccount:IAMPolicy\n properties:\n serviceAccountId: ${sa.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n```\n{{% /example %}}\n{{% example %}}\n### Service Account IAM Binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMBinding(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can use\")\nadmin_account_iam = gcp.service_account.IAMBinding(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMBinding(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\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/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMBinding(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMBindingArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMBinding;\nimport com.pulumi.gcp.serviceAccount.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can use\")\n .build());\n\n var admin_account_iam = new IAMBinding(\"admin-account-iam\", IAMBindingArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMBinding\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n```\n{{% /example %}}\n{{% example %}}\n### Service Account IAM Binding With IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMBinding(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can use\")\nadmin_account_iam = gcp.service_account.IAMBinding(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"],\n condition=gcp.service_account.IAMBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMBinding(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.ServiceAccount.Inputs.IAMBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMBinding(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMBindingArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026serviceaccount.IAMBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMBinding;\nimport com.pulumi.gcp.serviceAccount.IAMBindingArgs;\nimport com.pulumi.gcp.serviceAccount.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can use\")\n .build());\n\n var admin_account_iam = new IAMBinding(\"admin-account-iam\", IAMBindingArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .condition(IAMBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMBinding\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n{{% /example %}}\n{{% example %}}\n### Service Account IAM Member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.compute.getDefaultServiceAccount({});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMMember(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n member: \"user:jane@example.com\",\n});\n// Allow SA service account use the default GCE account\nconst gce_default_account_iam = new gcp.serviceaccount.IAMMember(\"gce-default-account-iam\", {\n serviceAccountId: _default.then(_default =\u003e _default.name),\n role: \"roles/iam.serviceAccountUser\",\n member: pulumi.interpolate`serviceAccount:${sa.email}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.get_default_service_account()\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that Jane can use\")\nadmin_account_iam = gcp.service_account.IAMMember(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n member=\"user:jane@example.com\")\n# Allow SA service account use the default GCE account\ngce_default_account_iam = gcp.service_account.IAMMember(\"gce-default-account-iam\",\n service_account_id=default.name,\n role=\"roles/iam.serviceAccountUser\",\n member=sa.email.apply(lambda email: f\"serviceAccount:{email}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Compute.GetDefaultServiceAccount.Invoke();\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMMember(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Member = \"user:jane@example.com\",\n });\n\n // Allow SA service account use the default GCE account\n var gce_default_account_iam = new Gcp.ServiceAccount.IAMMember(\"gce-default-account-iam\", new()\n {\n ServiceAccountId = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Name)),\n Role = \"roles/iam.serviceAccountUser\",\n Member = sa.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := compute.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMMember(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\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\t_, err = serviceAccount.NewIAMMember(ctx, \"gce-default-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: *pulumi.String(_default.Name),\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: sa.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\treturn nil\n\t})\n}\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.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMMember;\nimport com.pulumi.gcp.serviceAccount.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = ComputeFunctions.getDefaultServiceAccount();\n\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that Jane can use\")\n .build());\n\n var admin_account_iam = new IAMMember(\"admin-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(\"user:jane@example.com\")\n .build());\n\n var gce_default_account_iam = new IAMMember(\"gce-default-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(default_.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(sa.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n member: user:jane@example.com\n # Allow SA service account use the default GCE account\n gce-default-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${default.name}\n role: roles/iam.serviceAccountUser\n member: serviceAccount:${sa.email}\nvariables:\n default:\n fn::invoke:\n Function: gcp:compute:getDefaultServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Service Account IAM Member With IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMMember(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that Jane can use\")\nadmin_account_iam = gcp.service_account.IAMMember(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n member=\"user:jane@example.com\",\n condition=gcp.service_account.IAMMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMMember(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.ServiceAccount.Inputs.IAMMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMMember(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026serviceaccount.IAMMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMMember;\nimport com.pulumi.gcp.serviceAccount.IAMMemberArgs;\nimport com.pulumi.gcp.serviceAccount.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that Jane can use\")\n .build());\n\n var admin_account_iam = new IAMMember(\"admin-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(\"user:jane@example.com\")\n .condition(IAMMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nService account IAM resources can be imported using the project, service account email, role, member identity, and condition (beta).\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMMember:IAMMember admin-account-iam projects/{your-project-id}/serviceAccounts/{your-service-account-email}\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMMember:IAMMember admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser\"\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMMember:IAMMember admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/editor user:foo@example.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. With conditions\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMMember:IAMMember admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser expires_after_2019_12_31\"\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMMember:IAMMember admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser user:foo@example.com expires_after_2019_12_31\"\n```\n\n ", + "description": "When managing IAM roles, you can treat a service account either as a resource or as an identity. This resource is to add iam policy bindings to a service account resource, such as allowing the members to run operations as or modify the service account. To configure permissions for a service account on other GCP resources, use the google_project_iam set of resources.\n\nThree different resources help you manage your IAM policy for a service account. Each of these resources serves a different use case:\n\n* `gcp.serviceAccount.IAMPolicy`: Authoritative. Sets the IAM policy for the service account and replaces any existing policy already attached.\n* `gcp.serviceAccount.IAMBinding`: 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 service account are preserved.\n* `gcp.serviceAccount.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service account are preserved.\n\n\u003e **Note:** `gcp.serviceAccount.IAMPolicy` **cannot** be used in conjunction with `gcp.serviceAccount.IAMBinding` and `gcp.serviceAccount.IAMMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_service\\_account\\_iam\\_policy\n\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/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can interact with\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMPolicy(\"admin-account-iam\", {\n serviceAccountId: sa.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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"],\n)])\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can interact with\")\nadmin_account_iam = gcp.service_account.IAMPolicy(\"admin-account-iam\",\n service_account_id=sa.name,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/iam.serviceAccountUser\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can interact with\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMPolicy(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/iam.serviceAccountUser\",\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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can interact with\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMPolicy(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMPolicyArgs{\n\t\t\tServiceAccountId: sa.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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMPolicy;\nimport com.pulumi.gcp.serviceAccount.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can interact with\")\n .build());\n\n var admin_account_iam = new IAMPolicy(\"admin-account-iam\", IAMPolicyArgs.builder() \n .serviceAccountId(sa.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can interact with\n admin-account-iam:\n type: gcp:serviceAccount:IAMPolicy\n properties:\n serviceAccountId: ${sa.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n```\n\n## google\\_service\\_account\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMBinding(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can use\")\nadmin_account_iam = gcp.service_account.IAMBinding(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMBinding(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\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/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMBinding(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMBindingArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMBinding;\nimport com.pulumi.gcp.serviceAccount.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can use\")\n .build());\n\n var admin_account_iam = new IAMBinding(\"admin-account-iam\", IAMBindingArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMBinding\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMBinding(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can use\")\nadmin_account_iam = gcp.service_account.IAMBinding(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"],\n condition=gcp.service_account.IAMBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMBinding(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.ServiceAccount.Inputs.IAMBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMBinding(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMBindingArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026serviceaccount.IAMBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMBinding;\nimport com.pulumi.gcp.serviceAccount.IAMBindingArgs;\nimport com.pulumi.gcp.serviceAccount.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can use\")\n .build());\n\n var admin_account_iam = new IAMBinding(\"admin-account-iam\", IAMBindingArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .condition(IAMBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMBinding\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n## google\\_service\\_account\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.compute.getDefaultServiceAccount({});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMMember(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n member: \"user:jane@example.com\",\n});\n// Allow SA service account use the default GCE account\nconst gce_default_account_iam = new gcp.serviceaccount.IAMMember(\"gce-default-account-iam\", {\n serviceAccountId: _default.then(_default =\u003e _default.name),\n role: \"roles/iam.serviceAccountUser\",\n member: pulumi.interpolate`serviceAccount:${sa.email}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.get_default_service_account()\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that Jane can use\")\nadmin_account_iam = gcp.service_account.IAMMember(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n member=\"user:jane@example.com\")\n# Allow SA service account use the default GCE account\ngce_default_account_iam = gcp.service_account.IAMMember(\"gce-default-account-iam\",\n service_account_id=default.name,\n role=\"roles/iam.serviceAccountUser\",\n member=sa.email.apply(lambda email: f\"serviceAccount:{email}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Compute.GetDefaultServiceAccount.Invoke();\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMMember(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Member = \"user:jane@example.com\",\n });\n\n // Allow SA service account use the default GCE account\n var gce_default_account_iam = new Gcp.ServiceAccount.IAMMember(\"gce-default-account-iam\", new()\n {\n ServiceAccountId = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Name)),\n Role = \"roles/iam.serviceAccountUser\",\n Member = sa.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := compute.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMMember(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\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\t_, err = serviceAccount.NewIAMMember(ctx, \"gce-default-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: *pulumi.String(_default.Name),\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: sa.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\treturn nil\n\t})\n}\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.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMMember;\nimport com.pulumi.gcp.serviceAccount.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = ComputeFunctions.getDefaultServiceAccount();\n\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that Jane can use\")\n .build());\n\n var admin_account_iam = new IAMMember(\"admin-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(\"user:jane@example.com\")\n .build());\n\n var gce_default_account_iam = new IAMMember(\"gce-default-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(default_.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(sa.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n member: user:jane@example.com\n # Allow SA service account use the default GCE account\n gce-default-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${default.name}\n role: roles/iam.serviceAccountUser\n member: serviceAccount:${sa.email}\nvariables:\n default:\n fn::invoke:\n Function: gcp:compute:getDefaultServiceAccount\n Arguments: {}\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMMember(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that Jane can use\")\nadmin_account_iam = gcp.service_account.IAMMember(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n member=\"user:jane@example.com\",\n condition=gcp.service_account.IAMMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMMember(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.ServiceAccount.Inputs.IAMMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMMember(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026serviceaccount.IAMMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMMember;\nimport com.pulumi.gcp.serviceAccount.IAMMemberArgs;\nimport com.pulumi.gcp.serviceAccount.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that Jane can use\")\n .build());\n\n var admin_account_iam = new IAMMember(\"admin-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(\"user:jane@example.com\")\n .condition(IAMMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n\n## Import\n\nService account IAM resources can be imported using the project, service account email, role, member identity, and condition (beta).\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMMember:IAMMember admin-account-iam projects/{your-project-id}/serviceAccounts/{your-service-account-email}\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMMember:IAMMember admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser\"\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMMember:IAMMember admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/editor user:foo@example.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. With conditions\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMMember:IAMMember admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser expires_after_2019_12_31\"\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMMember:IAMMember admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser user:foo@example.com expires_after_2019_12_31\"\n```\n\n ", "properties": { "condition": { "$ref": "#/types/gcp:serviceAccount/IAMMemberCondition:IAMMemberCondition", @@ -185762,7 +187298,7 @@ } }, "gcp:serviceAccount/iAMPolicy:IAMPolicy": { - "description": "When managing IAM roles, you can treat a service account either as a resource or as an identity. This resource is to add iam policy bindings to a service account resource, such as allowing the members to run operations as or modify the service account. To configure permissions for a service account on other GCP resources, use the google_project_iam set of resources.\n\nThree different resources help you manage your IAM policy for a service account. Each of these resources serves a different use case:\n\n* `gcp.serviceAccount.IAMPolicy`: Authoritative. Sets the IAM policy for the service account and replaces any existing policy already attached.\n* `gcp.serviceAccount.IAMBinding`: 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 service account are preserved.\n* `gcp.serviceAccount.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service account are preserved.\n\n\u003e **Note:** `gcp.serviceAccount.IAMPolicy` **cannot** be used in conjunction with `gcp.serviceAccount.IAMBinding` and `gcp.serviceAccount.IAMMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Service Account IAM Policy\n\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/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can interact with\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMPolicy(\"admin-account-iam\", {\n serviceAccountId: sa.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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"],\n)])\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can interact with\")\nadmin_account_iam = gcp.service_account.IAMPolicy(\"admin-account-iam\",\n service_account_id=sa.name,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/iam.serviceAccountUser\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can interact with\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMPolicy(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/iam.serviceAccountUser\",\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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can interact with\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMPolicy(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMPolicyArgs{\n\t\t\tServiceAccountId: sa.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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMPolicy;\nimport com.pulumi.gcp.serviceAccount.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can interact with\")\n .build());\n\n var admin_account_iam = new IAMPolicy(\"admin-account-iam\", IAMPolicyArgs.builder() \n .serviceAccountId(sa.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can interact with\n admin-account-iam:\n type: gcp:serviceAccount:IAMPolicy\n properties:\n serviceAccountId: ${sa.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n```\n{{% /example %}}\n{{% example %}}\n### Service Account IAM Binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMBinding(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can use\")\nadmin_account_iam = gcp.service_account.IAMBinding(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMBinding(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\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/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMBinding(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMBindingArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMBinding;\nimport com.pulumi.gcp.serviceAccount.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can use\")\n .build());\n\n var admin_account_iam = new IAMBinding(\"admin-account-iam\", IAMBindingArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMBinding\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n```\n{{% /example %}}\n{{% example %}}\n### Service Account IAM Binding With IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMBinding(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can use\")\nadmin_account_iam = gcp.service_account.IAMBinding(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"],\n condition=gcp.service_account.IAMBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMBinding(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.ServiceAccount.Inputs.IAMBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMBinding(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMBindingArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026serviceaccount.IAMBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMBinding;\nimport com.pulumi.gcp.serviceAccount.IAMBindingArgs;\nimport com.pulumi.gcp.serviceAccount.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can use\")\n .build());\n\n var admin_account_iam = new IAMBinding(\"admin-account-iam\", IAMBindingArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .condition(IAMBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMBinding\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n{{% /example %}}\n{{% example %}}\n### Service Account IAM Member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.compute.getDefaultServiceAccount({});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMMember(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n member: \"user:jane@example.com\",\n});\n// Allow SA service account use the default GCE account\nconst gce_default_account_iam = new gcp.serviceaccount.IAMMember(\"gce-default-account-iam\", {\n serviceAccountId: _default.then(_default =\u003e _default.name),\n role: \"roles/iam.serviceAccountUser\",\n member: pulumi.interpolate`serviceAccount:${sa.email}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.get_default_service_account()\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that Jane can use\")\nadmin_account_iam = gcp.service_account.IAMMember(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n member=\"user:jane@example.com\")\n# Allow SA service account use the default GCE account\ngce_default_account_iam = gcp.service_account.IAMMember(\"gce-default-account-iam\",\n service_account_id=default.name,\n role=\"roles/iam.serviceAccountUser\",\n member=sa.email.apply(lambda email: f\"serviceAccount:{email}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Compute.GetDefaultServiceAccount.Invoke();\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMMember(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Member = \"user:jane@example.com\",\n });\n\n // Allow SA service account use the default GCE account\n var gce_default_account_iam = new Gcp.ServiceAccount.IAMMember(\"gce-default-account-iam\", new()\n {\n ServiceAccountId = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Name)),\n Role = \"roles/iam.serviceAccountUser\",\n Member = sa.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := compute.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMMember(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\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\t_, err = serviceAccount.NewIAMMember(ctx, \"gce-default-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: *pulumi.String(_default.Name),\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: sa.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\treturn nil\n\t})\n}\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.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMMember;\nimport com.pulumi.gcp.serviceAccount.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = ComputeFunctions.getDefaultServiceAccount();\n\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that Jane can use\")\n .build());\n\n var admin_account_iam = new IAMMember(\"admin-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(\"user:jane@example.com\")\n .build());\n\n var gce_default_account_iam = new IAMMember(\"gce-default-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(default_.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(sa.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n member: user:jane@example.com\n # Allow SA service account use the default GCE account\n gce-default-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${default.name}\n role: roles/iam.serviceAccountUser\n member: serviceAccount:${sa.email}\nvariables:\n default:\n fn::invoke:\n Function: gcp:compute:getDefaultServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Service Account IAM Member With IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMMember(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that Jane can use\")\nadmin_account_iam = gcp.service_account.IAMMember(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n member=\"user:jane@example.com\",\n condition=gcp.service_account.IAMMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMMember(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.ServiceAccount.Inputs.IAMMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMMember(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026serviceaccount.IAMMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMMember;\nimport com.pulumi.gcp.serviceAccount.IAMMemberArgs;\nimport com.pulumi.gcp.serviceAccount.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that Jane can use\")\n .build());\n\n var admin_account_iam = new IAMMember(\"admin-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(\"user:jane@example.com\")\n .condition(IAMMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nService account IAM resources can be imported using the project, service account email, role, member identity, and condition (beta).\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMPolicy:IAMPolicy admin-account-iam projects/{your-project-id}/serviceAccounts/{your-service-account-email}\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMPolicy:IAMPolicy admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser\"\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMPolicy:IAMPolicy admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/editor user:foo@example.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. With conditions\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMPolicy:IAMPolicy admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser expires_after_2019_12_31\"\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMPolicy:IAMPolicy admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser user:foo@example.com expires_after_2019_12_31\"\n```\n\n ", + "description": "When managing IAM roles, you can treat a service account either as a resource or as an identity. This resource is to add iam policy bindings to a service account resource, such as allowing the members to run operations as or modify the service account. To configure permissions for a service account on other GCP resources, use the google_project_iam set of resources.\n\nThree different resources help you manage your IAM policy for a service account. Each of these resources serves a different use case:\n\n* `gcp.serviceAccount.IAMPolicy`: Authoritative. Sets the IAM policy for the service account and replaces any existing policy already attached.\n* `gcp.serviceAccount.IAMBinding`: 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 service account are preserved.\n* `gcp.serviceAccount.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service account are preserved.\n\n\u003e **Note:** `gcp.serviceAccount.IAMPolicy` **cannot** be used in conjunction with `gcp.serviceAccount.IAMBinding` and `gcp.serviceAccount.IAMMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_service\\_account\\_iam\\_policy\n\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/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n }],\n});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can interact with\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMPolicy(\"admin-account-iam\", {\n serviceAccountId: sa.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=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"],\n)])\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can interact with\")\nadmin_account_iam = gcp.service_account.IAMPolicy(\"admin-account-iam\",\n service_account_id=sa.name,\n policy_data=admin.policy_data)\n```\n```csharp\nusing System.Collections.Generic;\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/iam.serviceAccountUser\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n },\n },\n });\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can interact with\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMPolicy(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.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/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\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/iam.serviceAccountUser\",\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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can interact with\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMPolicy(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMPolicyArgs{\n\t\t\tServiceAccountId: sa.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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMPolicy;\nimport com.pulumi.gcp.serviceAccount.IAMPolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .build())\n .build());\n\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can interact with\")\n .build());\n\n var admin_account_iam = new IAMPolicy(\"admin-account-iam\", IAMPolicyArgs.builder() \n .serviceAccountId(sa.name())\n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can interact with\n admin-account-iam:\n type: gcp:serviceAccount:IAMPolicy\n properties:\n serviceAccountId: ${sa.name}\n policyData: ${admin.policyData}\nvariables:\n admin:\n fn::invoke:\n Function: gcp:organizations:getIAMPolicy\n Arguments:\n bindings:\n - role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n```\n\n## google\\_service\\_account\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMBinding(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can use\")\nadmin_account_iam = gcp.service_account.IAMBinding(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMBinding(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\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/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMBinding(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMBindingArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\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.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMBinding;\nimport com.pulumi.gcp.serviceAccount.IAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can use\")\n .build());\n\n var admin_account_iam = new IAMBinding(\"admin-account-iam\", IAMBindingArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMBinding\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that only Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMBinding(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n members: [\"user:jane@example.com\"],\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that only Jane can use\")\nadmin_account_iam = gcp.service_account.IAMBinding(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n members=[\"user:jane@example.com\"],\n condition=gcp.service_account.IAMBindingConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that only Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMBinding(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n Condition = new Gcp.ServiceAccount.Inputs.IAMBindingConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that only Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMBinding(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMBindingArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"user:jane@example.com\"),\n\t\t\t},\n\t\t\tCondition: \u0026serviceaccount.IAMBindingConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMBinding;\nimport com.pulumi.gcp.serviceAccount.IAMBindingArgs;\nimport com.pulumi.gcp.serviceAccount.inputs.IAMBindingConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that only Jane can use\")\n .build());\n\n var admin_account_iam = new IAMBinding(\"admin-account-iam\", IAMBindingArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .members(\"user:jane@example.com\")\n .condition(IAMBindingConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that only Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMBinding\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n members:\n - user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n## google\\_service\\_account\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst default = gcp.compute.getDefaultServiceAccount({});\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMMember(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n member: \"user:jane@example.com\",\n});\n// Allow SA service account use the default GCE account\nconst gce_default_account_iam = new gcp.serviceaccount.IAMMember(\"gce-default-account-iam\", {\n serviceAccountId: _default.then(_default =\u003e _default.name),\n role: \"roles/iam.serviceAccountUser\",\n member: pulumi.interpolate`serviceAccount:${sa.email}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault = gcp.compute.get_default_service_account()\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that Jane can use\")\nadmin_account_iam = gcp.service_account.IAMMember(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n member=\"user:jane@example.com\")\n# Allow SA service account use the default GCE account\ngce_default_account_iam = gcp.service_account.IAMMember(\"gce-default-account-iam\",\n service_account_id=default.name,\n role=\"roles/iam.serviceAccountUser\",\n member=sa.email.apply(lambda email: f\"serviceAccount:{email}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var @default = Gcp.Compute.GetDefaultServiceAccount.Invoke();\n\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMMember(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Member = \"user:jane@example.com\",\n });\n\n // Allow SA service account use the default GCE account\n var gce_default_account_iam = new Gcp.ServiceAccount.IAMMember(\"gce-default-account-iam\", new()\n {\n ServiceAccountId = @default.Apply(@default =\u003e @default.Apply(getDefaultServiceAccountResult =\u003e getDefaultServiceAccountResult.Name)),\n Role = \"roles/iam.serviceAccountUser\",\n Member = sa.Email.Apply(email =\u003e $\"serviceAccount:{email}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_default, err := compute.GetDefaultServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMMember(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\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\t_, err = serviceAccount.NewIAMMember(ctx, \"gce-default-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: *pulumi.String(_default.Name),\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: sa.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\treturn nil\n\t})\n}\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.GetDefaultServiceAccountArgs;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMMember;\nimport com.pulumi.gcp.serviceAccount.IAMMemberArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var default = ComputeFunctions.getDefaultServiceAccount();\n\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that Jane can use\")\n .build());\n\n var admin_account_iam = new IAMMember(\"admin-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(\"user:jane@example.com\")\n .build());\n\n var gce_default_account_iam = new IAMMember(\"gce-default-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(default_.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(sa.email().applyValue(email -\u003e String.format(\"serviceAccount:%s\", email)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n member: user:jane@example.com\n # Allow SA service account use the default GCE account\n gce-default-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${default.name}\n role: roles/iam.serviceAccountUser\n member: serviceAccount:${sa.email}\nvariables:\n default:\n fn::invoke:\n Function: gcp:compute:getDefaultServiceAccount\n Arguments: {}\n```\n\nWith IAM Conditions:\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst sa = new gcp.serviceaccount.Account(\"sa\", {\n accountId: \"my-service-account\",\n displayName: \"A service account that Jane can use\",\n});\nconst admin_account_iam = new gcp.serviceaccount.IAMMember(\"admin-account-iam\", {\n serviceAccountId: sa.name,\n role: \"roles/iam.serviceAccountUser\",\n member: \"user:jane@example.com\",\n condition: {\n title: \"expires_after_2019_12_31\",\n description: \"Expiring at midnight of 2019-12-31\",\n expression: \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nsa = gcp.service_account.Account(\"sa\",\n account_id=\"my-service-account\",\n display_name=\"A service account that Jane can use\")\nadmin_account_iam = gcp.service_account.IAMMember(\"admin-account-iam\",\n service_account_id=sa.name,\n role=\"roles/iam.serviceAccountUser\",\n member=\"user:jane@example.com\",\n condition=gcp.service_account.IAMMemberConditionArgs(\n title=\"expires_after_2019_12_31\",\n description=\"Expiring at midnight of 2019-12-31\",\n expression=\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var sa = new Gcp.ServiceAccount.Account(\"sa\", new()\n {\n AccountId = \"my-service-account\",\n DisplayName = \"A service account that Jane can use\",\n });\n\n var admin_account_iam = new Gcp.ServiceAccount.IAMMember(\"admin-account-iam\", new()\n {\n ServiceAccountId = sa.Name,\n Role = \"roles/iam.serviceAccountUser\",\n Member = \"user:jane@example.com\",\n Condition = new Gcp.ServiceAccount.Inputs.IAMMemberConditionArgs\n {\n Title = \"expires_after_2019_12_31\",\n Description = \"Expiring at midnight of 2019-12-31\",\n Expression = \"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tsa, err := serviceAccount.NewAccount(ctx, \"sa\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-service-account\"),\n\t\t\tDisplayName: pulumi.String(\"A service account that Jane can use\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = serviceAccount.NewIAMMember(ctx, \"admin-account-iam\", \u0026serviceAccount.IAMMemberArgs{\n\t\t\tServiceAccountId: sa.Name,\n\t\t\tRole: pulumi.String(\"roles/iam.serviceAccountUser\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t\tCondition: \u0026serviceaccount.IAMMemberConditionArgs{\n\t\t\t\tTitle: pulumi.String(\"expires_after_2019_12_31\"),\n\t\t\t\tDescription: pulumi.String(\"Expiring at midnight of 2019-12-31\"),\n\t\t\t\tExpression: pulumi.String(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.serviceAccount.IAMMember;\nimport com.pulumi.gcp.serviceAccount.IAMMemberArgs;\nimport com.pulumi.gcp.serviceAccount.inputs.IAMMemberConditionArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var sa = new Account(\"sa\", AccountArgs.builder() \n .accountId(\"my-service-account\")\n .displayName(\"A service account that Jane can use\")\n .build());\n\n var admin_account_iam = new IAMMember(\"admin-account-iam\", IAMMemberArgs.builder() \n .serviceAccountId(sa.name())\n .role(\"roles/iam.serviceAccountUser\")\n .member(\"user:jane@example.com\")\n .condition(IAMMemberConditionArgs.builder()\n .title(\"expires_after_2019_12_31\")\n .description(\"Expiring at midnight of 2019-12-31\")\n .expression(\"request.time \u003c timestamp(\\\"2020-01-01T00:00:00Z\\\")\")\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n sa:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-service-account\n displayName: A service account that Jane can use\n admin-account-iam:\n type: gcp:serviceAccount:IAMMember\n properties:\n serviceAccountId: ${sa.name}\n role: roles/iam.serviceAccountUser\n member: user:jane@example.com\n condition:\n title: expires_after_2019_12_31\n description: Expiring at midnight of 2019-12-31\n expression: request.time \u003c timestamp(\"2020-01-01T00:00:00Z\")\n```\n\n\n## Import\n\nService account IAM resources can be imported using the project, service account email, role, member identity, and condition (beta).\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMPolicy:IAMPolicy admin-account-iam projects/{your-project-id}/serviceAccounts/{your-service-account-email}\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMPolicy:IAMPolicy admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser\"\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMPolicy:IAMPolicy admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/editor user:foo@example.com\"\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. With conditions\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMPolicy:IAMPolicy admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser expires_after_2019_12_31\"\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceAccount/iAMPolicy:IAMPolicy admin-account-iam \"projects/{your-project-id}/serviceAccounts/{your-service-account-email} roles/iam.serviceAccountUser user:foo@example.com expires_after_2019_12_31\"\n```\n\n ", "properties": { "etag": { "type": "string", @@ -185979,7 +187515,7 @@ } }, "gcp:servicedirectory/endpoint:Endpoint": { - "description": "An individual endpoint that provides a service.\n\nTo get more information about Endpoint, see:\n\n* [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services.endpoints)\n* How-to Guides\n * [Configuring an endpoint](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_an_endpoint)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Service Directory Endpoint Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleNamespace = new gcp.servicedirectory.Namespace(\"exampleNamespace\", {\n namespaceId: \"example-namespace\",\n location: \"us-central1\",\n}, {\n provider: google_beta,\n});\nconst exampleService = new gcp.servicedirectory.Service(\"exampleService\", {\n serviceId: \"example-service\",\n namespace: exampleNamespace.id,\n}, {\n provider: google_beta,\n});\nconst exampleEndpoint = new gcp.servicedirectory.Endpoint(\"exampleEndpoint\", {\n endpointId: \"example-endpoint\",\n service: exampleService.id,\n metadata: {\n stage: \"prod\",\n region: \"us-central1\",\n },\n address: \"1.2.3.4\",\n port: 5353,\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_namespace = gcp.servicedirectory.Namespace(\"exampleNamespace\",\n namespace_id=\"example-namespace\",\n location=\"us-central1\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nexample_service = gcp.servicedirectory.Service(\"exampleService\",\n service_id=\"example-service\",\n namespace=example_namespace.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\nexample_endpoint = gcp.servicedirectory.Endpoint(\"exampleEndpoint\",\n endpoint_id=\"example-endpoint\",\n service=example_service.id,\n metadata={\n \"stage\": \"prod\",\n \"region\": \"us-central1\",\n },\n address=\"1.2.3.4\",\n port=5353,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleNamespace = new Gcp.ServiceDirectory.Namespace(\"exampleNamespace\", new()\n {\n NamespaceId = \"example-namespace\",\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var exampleService = new Gcp.ServiceDirectory.Service(\"exampleService\", new()\n {\n ServiceId = \"example-service\",\n Namespace = exampleNamespace.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var exampleEndpoint = new Gcp.ServiceDirectory.Endpoint(\"exampleEndpoint\", new()\n {\n EndpointId = \"example-endpoint\",\n Service = exampleService.Id,\n Metadata = \n {\n { \"stage\", \"prod\" },\n { \"region\", \"us-central1\" },\n },\n Address = \"1.2.3.4\",\n Port = 5353,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleNamespace, err := servicedirectory.NewNamespace(ctx, \"exampleNamespace\", \u0026servicedirectory.NamespaceArgs{\n\t\t\tNamespaceId: pulumi.String(\"example-namespace\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleService, err := servicedirectory.NewService(ctx, \"exampleService\", \u0026servicedirectory.ServiceArgs{\n\t\t\tServiceId: pulumi.String(\"example-service\"),\n\t\t\tNamespace: exampleNamespace.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = servicedirectory.NewEndpoint(ctx, \"exampleEndpoint\", \u0026servicedirectory.EndpointArgs{\n\t\t\tEndpointId: pulumi.String(\"example-endpoint\"),\n\t\t\tService: exampleService.ID(),\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"stage\": pulumi.String(\"prod\"),\n\t\t\t\t\"region\": pulumi.String(\"us-central1\"),\n\t\t\t},\n\t\t\tAddress: pulumi.String(\"1.2.3.4\"),\n\t\t\tPort: pulumi.Int(5353),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.Namespace;\nimport com.pulumi.gcp.servicedirectory.NamespaceArgs;\nimport com.pulumi.gcp.servicedirectory.Service;\nimport com.pulumi.gcp.servicedirectory.ServiceArgs;\nimport com.pulumi.gcp.servicedirectory.Endpoint;\nimport com.pulumi.gcp.servicedirectory.EndpointArgs;\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 exampleNamespace = new Namespace(\"exampleNamespace\", NamespaceArgs.builder() \n .namespaceId(\"example-namespace\")\n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var exampleService = new Service(\"exampleService\", ServiceArgs.builder() \n .serviceId(\"example-service\")\n .namespace(exampleNamespace.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var exampleEndpoint = new Endpoint(\"exampleEndpoint\", EndpointArgs.builder() \n .endpointId(\"example-endpoint\")\n .service(exampleService.id())\n .metadata(Map.ofEntries(\n Map.entry(\"stage\", \"prod\"),\n Map.entry(\"region\", \"us-central1\")\n ))\n .address(\"1.2.3.4\")\n .port(5353)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleNamespace:\n type: gcp:servicedirectory:Namespace\n properties:\n namespaceId: example-namespace\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n exampleService:\n type: gcp:servicedirectory:Service\n properties:\n serviceId: example-service\n namespace: ${exampleNamespace.id}\n options:\n provider: ${[\"google-beta\"]}\n exampleEndpoint:\n type: gcp:servicedirectory:Endpoint\n properties:\n endpointId: example-endpoint\n service: ${exampleService.id}\n metadata:\n stage: prod\n region: us-central1\n address: 1.2.3.4\n port: 5353\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Service Directory Endpoint With Network\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst exampleNetwork = new gcp.compute.Network(\"exampleNetwork\", {}, {\n provider: google_beta,\n});\nconst exampleNamespace = new gcp.servicedirectory.Namespace(\"exampleNamespace\", {\n namespaceId: \"example-namespace\",\n location: \"us-central1\",\n}, {\n provider: google_beta,\n});\nconst exampleService = new gcp.servicedirectory.Service(\"exampleService\", {\n serviceId: \"example-service\",\n namespace: exampleNamespace.id,\n}, {\n provider: google_beta,\n});\nconst exampleEndpoint = new gcp.servicedirectory.Endpoint(\"exampleEndpoint\", {\n endpointId: \"example-endpoint\",\n service: exampleService.id,\n metadata: {\n stage: \"prod\",\n region: \"us-central1\",\n },\n network: pulumi.all([project, exampleNetwork.name]).apply(([project, name]) =\u003e `projects/${project.number}/locations/global/networks/${name}`),\n address: \"1.2.3.4\",\n port: 5353,\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_network = gcp.compute.Network(\"exampleNetwork\", opts=pulumi.ResourceOptions(provider=google_beta))\nexample_namespace = gcp.servicedirectory.Namespace(\"exampleNamespace\",\n namespace_id=\"example-namespace\",\n location=\"us-central1\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nexample_service = gcp.servicedirectory.Service(\"exampleService\",\n service_id=\"example-service\",\n namespace=example_namespace.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\nexample_endpoint = gcp.servicedirectory.Endpoint(\"exampleEndpoint\",\n endpoint_id=\"example-endpoint\",\n service=example_service.id,\n metadata={\n \"stage\": \"prod\",\n \"region\": \"us-central1\",\n },\n network=example_network.name.apply(lambda name: f\"projects/{project.number}/locations/global/networks/{name}\"),\n address=\"1.2.3.4\",\n port=5353,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleNetwork = new Gcp.Compute.Network(\"exampleNetwork\", new()\n {\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var exampleNamespace = new Gcp.ServiceDirectory.Namespace(\"exampleNamespace\", new()\n {\n NamespaceId = \"example-namespace\",\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var exampleService = new Gcp.ServiceDirectory.Service(\"exampleService\", new()\n {\n ServiceId = \"example-service\",\n Namespace = exampleNamespace.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var exampleEndpoint = new Gcp.ServiceDirectory.Endpoint(\"exampleEndpoint\", new()\n {\n EndpointId = \"example-endpoint\",\n Service = exampleService.Id,\n Metadata = \n {\n { \"stage\", \"prod\" },\n { \"region\", \"us-central1\" },\n },\n Network = Output.Tuple(project, exampleNetwork.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/locations/global/networks/{name}\";\n }),\n Address = \"1.2.3.4\",\n Port = 5353,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\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, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleNetwork, err := compute.NewNetwork(ctx, \"exampleNetwork\", nil, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleNamespace, err := servicedirectory.NewNamespace(ctx, \"exampleNamespace\", \u0026servicedirectory.NamespaceArgs{\n\t\t\tNamespaceId: pulumi.String(\"example-namespace\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleService, err := servicedirectory.NewService(ctx, \"exampleService\", \u0026servicedirectory.ServiceArgs{\n\t\t\tServiceId: pulumi.String(\"example-service\"),\n\t\t\tNamespace: exampleNamespace.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = servicedirectory.NewEndpoint(ctx, \"exampleEndpoint\", \u0026servicedirectory.EndpointArgs{\n\t\t\tEndpointId: pulumi.String(\"example-endpoint\"),\n\t\t\tService: exampleService.ID(),\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"stage\": pulumi.String(\"prod\"),\n\t\t\t\t\"region\": pulumi.String(\"us-central1\"),\n\t\t\t},\n\t\t\tNetwork: exampleNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/locations/global/networks/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tAddress: pulumi.String(\"1.2.3.4\"),\n\t\t\tPort: pulumi.Int(5353),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.servicedirectory.Namespace;\nimport com.pulumi.gcp.servicedirectory.NamespaceArgs;\nimport com.pulumi.gcp.servicedirectory.Service;\nimport com.pulumi.gcp.servicedirectory.ServiceArgs;\nimport com.pulumi.gcp.servicedirectory.Endpoint;\nimport com.pulumi.gcp.servicedirectory.EndpointArgs;\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 exampleNetwork = new Network(\"exampleNetwork\", NetworkArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var exampleNamespace = new Namespace(\"exampleNamespace\", NamespaceArgs.builder() \n .namespaceId(\"example-namespace\")\n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var exampleService = new Service(\"exampleService\", ServiceArgs.builder() \n .serviceId(\"example-service\")\n .namespace(exampleNamespace.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var exampleEndpoint = new Endpoint(\"exampleEndpoint\", EndpointArgs.builder() \n .endpointId(\"example-endpoint\")\n .service(exampleService.id())\n .metadata(Map.ofEntries(\n Map.entry(\"stage\", \"prod\"),\n Map.entry(\"region\", \"us-central1\")\n ))\n .network(exampleNetwork.name().applyValue(name -\u003e String.format(\"projects/%s/locations/global/networks/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .address(\"1.2.3.4\")\n .port(5353)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleNetwork:\n type: gcp:compute:Network\n options:\n provider: ${[\"google-beta\"]}\n exampleNamespace:\n type: gcp:servicedirectory:Namespace\n properties:\n namespaceId: example-namespace\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n exampleService:\n type: gcp:servicedirectory:Service\n properties:\n serviceId: example-service\n namespace: ${exampleNamespace.id}\n options:\n provider: ${[\"google-beta\"]}\n exampleEndpoint:\n type: gcp:servicedirectory:Endpoint\n properties:\n endpointId: example-endpoint\n service: ${exampleService.id}\n metadata:\n stage: prod\n region: us-central1\n network: projects/${project.number}/locations/global/networks/${exampleNetwork.name}\n address: 1.2.3.4\n port: 5353\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nEndpoint can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:servicedirectory/endpoint:Endpoint default projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}}/endpoints/{{endpoint_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:servicedirectory/endpoint:Endpoint default {{project}}/{{location}}/{{namespace_id}}/{{service_id}}/{{endpoint_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:servicedirectory/endpoint:Endpoint default {{location}}/{{namespace_id}}/{{service_id}}/{{endpoint_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Service Directory Endpoint Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleNamespace = new gcp.servicedirectory.Namespace(\"exampleNamespace\", {\n namespaceId: \"example-namespace\",\n location: \"us-central1\",\n}, {\n provider: google_beta,\n});\nconst exampleService = new gcp.servicedirectory.Service(\"exampleService\", {\n serviceId: \"example-service\",\n namespace: exampleNamespace.id,\n}, {\n provider: google_beta,\n});\nconst exampleEndpoint = new gcp.servicedirectory.Endpoint(\"exampleEndpoint\", {\n endpointId: \"example-endpoint\",\n service: exampleService.id,\n metadata: {\n stage: \"prod\",\n region: \"us-central1\",\n },\n address: \"1.2.3.4\",\n port: 5353,\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_namespace = gcp.servicedirectory.Namespace(\"exampleNamespace\",\n namespace_id=\"example-namespace\",\n location=\"us-central1\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nexample_service = gcp.servicedirectory.Service(\"exampleService\",\n service_id=\"example-service\",\n namespace=example_namespace.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\nexample_endpoint = gcp.servicedirectory.Endpoint(\"exampleEndpoint\",\n endpoint_id=\"example-endpoint\",\n service=example_service.id,\n metadata={\n \"stage\": \"prod\",\n \"region\": \"us-central1\",\n },\n address=\"1.2.3.4\",\n port=5353,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleNamespace = new Gcp.ServiceDirectory.Namespace(\"exampleNamespace\", new()\n {\n NamespaceId = \"example-namespace\",\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var exampleService = new Gcp.ServiceDirectory.Service(\"exampleService\", new()\n {\n ServiceId = \"example-service\",\n Namespace = exampleNamespace.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var exampleEndpoint = new Gcp.ServiceDirectory.Endpoint(\"exampleEndpoint\", new()\n {\n EndpointId = \"example-endpoint\",\n Service = exampleService.Id,\n Metadata = \n {\n { \"stage\", \"prod\" },\n { \"region\", \"us-central1\" },\n },\n Address = \"1.2.3.4\",\n Port = 5353,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleNamespace, err := servicedirectory.NewNamespace(ctx, \"exampleNamespace\", \u0026servicedirectory.NamespaceArgs{\n\t\t\tNamespaceId: pulumi.String(\"example-namespace\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleService, err := servicedirectory.NewService(ctx, \"exampleService\", \u0026servicedirectory.ServiceArgs{\n\t\t\tServiceId: pulumi.String(\"example-service\"),\n\t\t\tNamespace: exampleNamespace.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = servicedirectory.NewEndpoint(ctx, \"exampleEndpoint\", \u0026servicedirectory.EndpointArgs{\n\t\t\tEndpointId: pulumi.String(\"example-endpoint\"),\n\t\t\tService: exampleService.ID(),\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"stage\": pulumi.String(\"prod\"),\n\t\t\t\t\"region\": pulumi.String(\"us-central1\"),\n\t\t\t},\n\t\t\tAddress: pulumi.String(\"1.2.3.4\"),\n\t\t\tPort: pulumi.Int(5353),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.Namespace;\nimport com.pulumi.gcp.servicedirectory.NamespaceArgs;\nimport com.pulumi.gcp.servicedirectory.Service;\nimport com.pulumi.gcp.servicedirectory.ServiceArgs;\nimport com.pulumi.gcp.servicedirectory.Endpoint;\nimport com.pulumi.gcp.servicedirectory.EndpointArgs;\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 exampleNamespace = new Namespace(\"exampleNamespace\", NamespaceArgs.builder() \n .namespaceId(\"example-namespace\")\n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var exampleService = new Service(\"exampleService\", ServiceArgs.builder() \n .serviceId(\"example-service\")\n .namespace(exampleNamespace.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var exampleEndpoint = new Endpoint(\"exampleEndpoint\", EndpointArgs.builder() \n .endpointId(\"example-endpoint\")\n .service(exampleService.id())\n .metadata(Map.ofEntries(\n Map.entry(\"stage\", \"prod\"),\n Map.entry(\"region\", \"us-central1\")\n ))\n .address(\"1.2.3.4\")\n .port(5353)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleNamespace:\n type: gcp:servicedirectory:Namespace\n properties:\n namespaceId: example-namespace\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n exampleService:\n type: gcp:servicedirectory:Service\n properties:\n serviceId: example-service\n namespace: ${exampleNamespace.id}\n options:\n provider: ${[\"google-beta\"]}\n exampleEndpoint:\n type: gcp:servicedirectory:Endpoint\n properties:\n endpointId: example-endpoint\n service: ${exampleService.id}\n metadata:\n stage: prod\n region: us-central1\n address: 1.2.3.4\n port: 5353\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% example %}}\n### Service Directory Endpoint With Network\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = gcp.organizations.getProject({});\nconst exampleNetwork = new gcp.compute.Network(\"exampleNetwork\", {}, {\n provider: google_beta,\n});\nconst exampleNamespace = new gcp.servicedirectory.Namespace(\"exampleNamespace\", {\n namespaceId: \"example-namespace\",\n location: \"us-central1\",\n}, {\n provider: google_beta,\n});\nconst exampleService = new gcp.servicedirectory.Service(\"exampleService\", {\n serviceId: \"example-service\",\n namespace: exampleNamespace.id,\n}, {\n provider: google_beta,\n});\nconst exampleEndpoint = new gcp.servicedirectory.Endpoint(\"exampleEndpoint\", {\n endpointId: \"example-endpoint\",\n service: exampleService.id,\n metadata: {\n stage: \"prod\",\n region: \"us-central1\",\n },\n network: pulumi.all([project, exampleNetwork.name]).apply(([project, name]) =\u003e `projects/${project.number}/locations/global/networks/${name}`),\n address: \"1.2.3.4\",\n port: 5353,\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.get_project()\nexample_network = gcp.compute.Network(\"exampleNetwork\", opts=pulumi.ResourceOptions(provider=google_beta))\nexample_namespace = gcp.servicedirectory.Namespace(\"exampleNamespace\",\n namespace_id=\"example-namespace\",\n location=\"us-central1\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nexample_service = gcp.servicedirectory.Service(\"exampleService\",\n service_id=\"example-service\",\n namespace=example_namespace.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\nexample_endpoint = gcp.servicedirectory.Endpoint(\"exampleEndpoint\",\n endpoint_id=\"example-endpoint\",\n service=example_service.id,\n metadata={\n \"stage\": \"prod\",\n \"region\": \"us-central1\",\n },\n network=example_network.name.apply(lambda name: f\"projects/{project.number}/locations/global/networks/{name}\"),\n address=\"1.2.3.4\",\n port=5353,\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = Gcp.Organizations.GetProject.Invoke();\n\n var exampleNetwork = new Gcp.Compute.Network(\"exampleNetwork\", new()\n {\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var exampleNamespace = new Gcp.ServiceDirectory.Namespace(\"exampleNamespace\", new()\n {\n NamespaceId = \"example-namespace\",\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var exampleService = new Gcp.ServiceDirectory.Service(\"exampleService\", new()\n {\n ServiceId = \"example-service\",\n Namespace = exampleNamespace.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var exampleEndpoint = new Gcp.ServiceDirectory.Endpoint(\"exampleEndpoint\", new()\n {\n EndpointId = \"example-endpoint\",\n Service = exampleService.Id,\n Metadata = \n {\n { \"stage\", \"prod\" },\n { \"region\", \"us-central1\" },\n },\n Network = Output.Tuple(project, exampleNetwork.Name).Apply(values =\u003e\n {\n var project = values.Item1;\n var name = values.Item2;\n return $\"projects/{project.Apply(getProjectResult =\u003e getProjectResult.Number)}/locations/global/networks/{name}\";\n }),\n Address = \"1.2.3.4\",\n Port = 5353,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\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, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleNetwork, err := compute.NewNetwork(ctx, \"exampleNetwork\", nil, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleNamespace, err := servicedirectory.NewNamespace(ctx, \"exampleNamespace\", \u0026servicedirectory.NamespaceArgs{\n\t\t\tNamespaceId: pulumi.String(\"example-namespace\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\texampleService, err := servicedirectory.NewService(ctx, \"exampleService\", \u0026servicedirectory.ServiceArgs{\n\t\t\tServiceId: pulumi.String(\"example-service\"),\n\t\t\tNamespace: exampleNamespace.ID(),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = servicedirectory.NewEndpoint(ctx, \"exampleEndpoint\", \u0026servicedirectory.EndpointArgs{\n\t\t\tEndpointId: pulumi.String(\"example-endpoint\"),\n\t\t\tService: exampleService.ID(),\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"stage\": pulumi.String(\"prod\"),\n\t\t\t\t\"region\": pulumi.String(\"us-central1\"),\n\t\t\t},\n\t\t\tNetwork: exampleNetwork.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"projects/%v/locations/global/networks/%v\", project.Number, name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tAddress: pulumi.String(\"1.2.3.4\"),\n\t\t\tPort: pulumi.Int(5353),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.servicedirectory.Namespace;\nimport com.pulumi.gcp.servicedirectory.NamespaceArgs;\nimport com.pulumi.gcp.servicedirectory.Service;\nimport com.pulumi.gcp.servicedirectory.ServiceArgs;\nimport com.pulumi.gcp.servicedirectory.Endpoint;\nimport com.pulumi.gcp.servicedirectory.EndpointArgs;\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 exampleNetwork = new Network(\"exampleNetwork\", NetworkArgs.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var exampleNamespace = new Namespace(\"exampleNamespace\", NamespaceArgs.builder() \n .namespaceId(\"example-namespace\")\n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var exampleService = new Service(\"exampleService\", ServiceArgs.builder() \n .serviceId(\"example-service\")\n .namespace(exampleNamespace.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var exampleEndpoint = new Endpoint(\"exampleEndpoint\", EndpointArgs.builder() \n .endpointId(\"example-endpoint\")\n .service(exampleService.id())\n .metadata(Map.ofEntries(\n Map.entry(\"stage\", \"prod\"),\n Map.entry(\"region\", \"us-central1\")\n ))\n .network(exampleNetwork.name().applyValue(name -\u003e String.format(\"projects/%s/locations/global/networks/%s\", project.applyValue(getProjectResult -\u003e getProjectResult.number()),name)))\n .address(\"1.2.3.4\")\n .port(5353)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleNetwork:\n type: gcp:compute:Network\n options:\n provider: ${[\"google-beta\"]}\n exampleNamespace:\n type: gcp:servicedirectory:Namespace\n properties:\n namespaceId: example-namespace\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n exampleService:\n type: gcp:servicedirectory:Service\n properties:\n serviceId: example-service\n namespace: ${exampleNamespace.id}\n options:\n provider: ${[\"google-beta\"]}\n exampleEndpoint:\n type: gcp:servicedirectory:Endpoint\n properties:\n endpointId: example-endpoint\n service: ${exampleService.id}\n metadata:\n stage: prod\n region: us-central1\n network: projects/${project.number}/locations/global/networks/${exampleNetwork.name}\n address: 1.2.3.4\n port: 5353\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nEndpoint can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:servicedirectory/endpoint:Endpoint default projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}}/endpoints/{{endpoint_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:servicedirectory/endpoint:Endpoint default {{project}}/{{location}}/{{namespace_id}}/{{service_id}}/{{endpoint_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:servicedirectory/endpoint:Endpoint default {{location}}/{{namespace_id}}/{{service_id}}/{{endpoint_id}}\n```\n\n ", "properties": { "address": { "type": "string", @@ -186096,7 +187632,7 @@ } }, "gcp:servicedirectory/namespace:Namespace": { - "description": "A container for `services`. Namespaces allow administrators to group services\ntogether and define permissions for a collection of services.\n\nTo get more information about Namespace, see:\n\n* [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces)\n* How-to Guides\n * [Configuring a namespace](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_namespace)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Service Directory Namespace Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.servicedirectory.Namespace(\"example\", {\n namespaceId: \"example-namespace\",\n location: \"us-central1\",\n labels: {\n key: \"value\",\n foo: \"bar\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.servicedirectory.Namespace(\"example\",\n namespace_id=\"example-namespace\",\n location=\"us-central1\",\n labels={\n \"key\": \"value\",\n \"foo\": \"bar\",\n },\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.ServiceDirectory.Namespace(\"example\", new()\n {\n NamespaceId = \"example-namespace\",\n Location = \"us-central1\",\n Labels = \n {\n { \"key\", \"value\" },\n { \"foo\", \"bar\" },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewNamespace(ctx, \"example\", \u0026servicedirectory.NamespaceArgs{\n\t\t\tNamespaceId: pulumi.String(\"example-namespace\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"key\": pulumi.String(\"value\"),\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.Namespace;\nimport com.pulumi.gcp.servicedirectory.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 example = new Namespace(\"example\", NamespaceArgs.builder() \n .namespaceId(\"example-namespace\")\n .location(\"us-central1\")\n .labels(Map.ofEntries(\n Map.entry(\"key\", \"value\"),\n Map.entry(\"foo\", \"bar\")\n ))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:servicedirectory:Namespace\n properties:\n namespaceId: example-namespace\n location: us-central1\n labels:\n key: value\n foo: bar\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nNamespace can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:servicedirectory/namespace:Namespace default projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:servicedirectory/namespace:Namespace default {{project}}/{{location}}/{{namespace_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:servicedirectory/namespace:Namespace default {{location}}/{{namespace_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Service Directory Namespace Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst example = new gcp.servicedirectory.Namespace(\"example\", {\n namespaceId: \"example-namespace\",\n location: \"us-central1\",\n labels: {\n key: \"value\",\n foo: \"bar\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample = gcp.servicedirectory.Namespace(\"example\",\n namespace_id=\"example-namespace\",\n location=\"us-central1\",\n labels={\n \"key\": \"value\",\n \"foo\": \"bar\",\n },\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var example = new Gcp.ServiceDirectory.Namespace(\"example\", new()\n {\n NamespaceId = \"example-namespace\",\n Location = \"us-central1\",\n Labels = \n {\n { \"key\", \"value\" },\n { \"foo\", \"bar\" },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewNamespace(ctx, \"example\", \u0026servicedirectory.NamespaceArgs{\n\t\t\tNamespaceId: pulumi.String(\"example-namespace\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"key\": pulumi.String(\"value\"),\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.Namespace;\nimport com.pulumi.gcp.servicedirectory.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 example = new Namespace(\"example\", NamespaceArgs.builder() \n .namespaceId(\"example-namespace\")\n .location(\"us-central1\")\n .labels(Map.ofEntries(\n Map.entry(\"key\", \"value\"),\n Map.entry(\"foo\", \"bar\")\n ))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n example:\n type: gcp:servicedirectory:Namespace\n properties:\n namespaceId: example-namespace\n location: us-central1\n labels:\n key: value\n foo: bar\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nNamespace can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:servicedirectory/namespace:Namespace default projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:servicedirectory/namespace:Namespace default {{project}}/{{location}}/{{namespace_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:servicedirectory/namespace:Namespace default {{location}}/{{namespace_id}}\n```\n\n ", "properties": { "labels": { "type": "object", @@ -186188,7 +187724,7 @@ } }, "gcp:servicedirectory/namespaceIamBinding:NamespaceIamBinding": { - "description": "Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case:\n\n* `gcp.servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached.\n* `gcp.servicedirectory.NamespaceIamBinding`: 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 namespace are preserved.\n* `gcp.servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved.\n\n\u003e **Note:** `gcp.servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.NamespaceIamBinding` and `gcp.servicedirectory.NamespaceIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_service\\_directory\\_namespace\\_iam\\_policy\n\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.servicedirectory.NamespaceIamPolicy(\"policy\", {policyData: admin.then(admin =\u003e admin.policyData)}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.servicedirectory.NamespaceIamPolicy(\"policy\", policy_data=admin.policy_data,\nopts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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.ServiceDirectory.NamespaceIamPolicy(\"policy\", new()\n {\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\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 = servicedirectory.NewNamespaceIamPolicy(ctx, \"policy\", \u0026servicedirectory.NamespaceIamPolicyArgs{\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.servicedirectory.NamespaceIamPolicy;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamPolicyArgs;\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 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 NamespaceIamPolicy(\"policy\", NamespaceIamPolicyArgs.builder() \n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:servicedirectory:NamespaceIamPolicy\n properties:\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\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\n## google\\_service\\_directory\\_namespace\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.servicedirectory.NamespaceIamBinding(\"binding\", {\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.servicedirectory.NamespaceIamBinding(\"binding\",\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ServiceDirectory.NamespaceIamBinding(\"binding\", new()\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewNamespaceIamBinding(ctx, \"binding\", \u0026servicedirectory.NamespaceIamBindingArgs{\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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamBinding;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamBindingArgs;\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 binding = new NamespaceIamBinding(\"binding\", NamespaceIamBindingArgs.builder() \n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:servicedirectory:NamespaceIamBinding\n properties:\n role: roles/viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_service\\_directory\\_namespace\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.servicedirectory.NamespaceIamMember(\"member\", {\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.servicedirectory.NamespaceIamMember(\"member\",\n role=\"roles/viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ServiceDirectory.NamespaceIamMember(\"member\", new()\n {\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewNamespaceIamMember(ctx, \"member\", \u0026servicedirectory.NamespaceIamMemberArgs{\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamMember;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamMemberArgs;\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 member = new NamespaceIamMember(\"member\", NamespaceIamMemberArgs.builder() \n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:servicedirectory:NamespaceIamMember\n properties:\n role: roles/viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamBinding:NamespaceIamBinding editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamBinding:NamespaceIamBinding editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamBinding:NamespaceIamBinding editor projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamBinding:NamespaceIamBinding editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamBinding:NamespaceIamBinding editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamBinding:NamespaceIamBinding editor projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:servicedirectory/NamespaceIamBindingCondition:NamespaceIamBindingCondition" @@ -186276,7 +187812,7 @@ } }, "gcp:servicedirectory/namespaceIamMember:NamespaceIamMember": { - "description": "Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case:\n\n* `gcp.servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached.\n* `gcp.servicedirectory.NamespaceIamBinding`: 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 namespace are preserved.\n* `gcp.servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved.\n\n\u003e **Note:** `gcp.servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.NamespaceIamBinding` and `gcp.servicedirectory.NamespaceIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_service\\_directory\\_namespace\\_iam\\_policy\n\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.servicedirectory.NamespaceIamPolicy(\"policy\", {policyData: admin.then(admin =\u003e admin.policyData)}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.servicedirectory.NamespaceIamPolicy(\"policy\", policy_data=admin.policy_data,\nopts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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.ServiceDirectory.NamespaceIamPolicy(\"policy\", new()\n {\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\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 = servicedirectory.NewNamespaceIamPolicy(ctx, \"policy\", \u0026servicedirectory.NamespaceIamPolicyArgs{\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.servicedirectory.NamespaceIamPolicy;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamPolicyArgs;\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 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 NamespaceIamPolicy(\"policy\", NamespaceIamPolicyArgs.builder() \n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:servicedirectory:NamespaceIamPolicy\n properties:\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\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\n## google\\_service\\_directory\\_namespace\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.servicedirectory.NamespaceIamBinding(\"binding\", {\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.servicedirectory.NamespaceIamBinding(\"binding\",\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ServiceDirectory.NamespaceIamBinding(\"binding\", new()\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewNamespaceIamBinding(ctx, \"binding\", \u0026servicedirectory.NamespaceIamBindingArgs{\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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamBinding;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamBindingArgs;\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 binding = new NamespaceIamBinding(\"binding\", NamespaceIamBindingArgs.builder() \n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:servicedirectory:NamespaceIamBinding\n properties:\n role: roles/viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_service\\_directory\\_namespace\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.servicedirectory.NamespaceIamMember(\"member\", {\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.servicedirectory.NamespaceIamMember(\"member\",\n role=\"roles/viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ServiceDirectory.NamespaceIamMember(\"member\", new()\n {\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewNamespaceIamMember(ctx, \"member\", \u0026servicedirectory.NamespaceIamMemberArgs{\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamMember;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamMemberArgs;\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 member = new NamespaceIamMember(\"member\", NamespaceIamMemberArgs.builder() \n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:servicedirectory:NamespaceIamMember\n properties:\n role: roles/viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamMember:NamespaceIamMember editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamMember:NamespaceIamMember editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamMember:NamespaceIamMember editor projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamMember:NamespaceIamMember editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamMember:NamespaceIamMember editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamMember:NamespaceIamMember editor projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:servicedirectory/NamespaceIamMemberCondition:NamespaceIamMemberCondition" @@ -186357,7 +187893,7 @@ } }, "gcp:servicedirectory/namespaceIamPolicy:NamespaceIamPolicy": { - "description": "Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case:\n\n* `gcp.servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached.\n* `gcp.servicedirectory.NamespaceIamBinding`: 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 namespace are preserved.\n* `gcp.servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved.\n\n\u003e **Note:** `gcp.servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.NamespaceIamBinding` and `gcp.servicedirectory.NamespaceIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_service\\_directory\\_namespace\\_iam\\_policy\n\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.servicedirectory.NamespaceIamPolicy(\"policy\", {policyData: admin.then(admin =\u003e admin.policyData)}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.servicedirectory.NamespaceIamPolicy(\"policy\", policy_data=admin.policy_data,\nopts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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.ServiceDirectory.NamespaceIamPolicy(\"policy\", new()\n {\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\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 = servicedirectory.NewNamespaceIamPolicy(ctx, \"policy\", \u0026servicedirectory.NamespaceIamPolicyArgs{\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.servicedirectory.NamespaceIamPolicy;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamPolicyArgs;\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 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 NamespaceIamPolicy(\"policy\", NamespaceIamPolicyArgs.builder() \n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:servicedirectory:NamespaceIamPolicy\n properties:\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\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\n## google\\_service\\_directory\\_namespace\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.servicedirectory.NamespaceIamBinding(\"binding\", {\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.servicedirectory.NamespaceIamBinding(\"binding\",\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ServiceDirectory.NamespaceIamBinding(\"binding\", new()\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewNamespaceIamBinding(ctx, \"binding\", \u0026servicedirectory.NamespaceIamBindingArgs{\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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamBinding;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamBindingArgs;\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 binding = new NamespaceIamBinding(\"binding\", NamespaceIamBindingArgs.builder() \n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:servicedirectory:NamespaceIamBinding\n properties:\n role: roles/viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_service\\_directory\\_namespace\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.servicedirectory.NamespaceIamMember(\"member\", {\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.servicedirectory.NamespaceIamMember(\"member\",\n role=\"roles/viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ServiceDirectory.NamespaceIamMember(\"member\", new()\n {\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewNamespaceIamMember(ctx, \"member\", \u0026servicedirectory.NamespaceIamMemberArgs{\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamMember;\nimport com.pulumi.gcp.servicedirectory.NamespaceIamMemberArgs;\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 member = new NamespaceIamMember(\"member\", NamespaceIamMemberArgs.builder() \n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:servicedirectory:NamespaceIamMember\n properties:\n role: roles/viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamPolicy:NamespaceIamPolicy editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamPolicy:NamespaceIamPolicy editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamPolicy:NamespaceIamPolicy editor projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamPolicy:NamespaceIamPolicy editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamPolicy:NamespaceIamPolicy editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/namespaceIamPolicy:NamespaceIamPolicy editor projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "etag": { "type": "string", @@ -186412,7 +187948,7 @@ } }, "gcp:servicedirectory/service:Service": { - "description": "An individual service. A service contains a name and optional metadata.\n\nTo get more information about Service, see:\n\n* [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services)\n* How-to Guides\n * [Configuring a service](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_service)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Service Directory Service Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleNamespace = new gcp.servicedirectory.Namespace(\"exampleNamespace\", {\n namespaceId: \"example-namespace\",\n location: \"us-central1\",\n}, {\n provider: google_beta,\n});\nconst exampleService = new gcp.servicedirectory.Service(\"exampleService\", {\n serviceId: \"example-service\",\n namespace: exampleNamespace.id,\n metadata: {\n stage: \"prod\",\n region: \"us-central1\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_namespace = gcp.servicedirectory.Namespace(\"exampleNamespace\",\n namespace_id=\"example-namespace\",\n location=\"us-central1\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nexample_service = gcp.servicedirectory.Service(\"exampleService\",\n service_id=\"example-service\",\n namespace=example_namespace.id,\n metadata={\n \"stage\": \"prod\",\n \"region\": \"us-central1\",\n },\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleNamespace = new Gcp.ServiceDirectory.Namespace(\"exampleNamespace\", new()\n {\n NamespaceId = \"example-namespace\",\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var exampleService = new Gcp.ServiceDirectory.Service(\"exampleService\", new()\n {\n ServiceId = \"example-service\",\n Namespace = exampleNamespace.Id,\n Metadata = \n {\n { \"stage\", \"prod\" },\n { \"region\", \"us-central1\" },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleNamespace, err := servicedirectory.NewNamespace(ctx, \"exampleNamespace\", \u0026servicedirectory.NamespaceArgs{\n\t\t\tNamespaceId: pulumi.String(\"example-namespace\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = servicedirectory.NewService(ctx, \"exampleService\", \u0026servicedirectory.ServiceArgs{\n\t\t\tServiceId: pulumi.String(\"example-service\"),\n\t\t\tNamespace: exampleNamespace.ID(),\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"stage\": pulumi.String(\"prod\"),\n\t\t\t\t\"region\": pulumi.String(\"us-central1\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.Namespace;\nimport com.pulumi.gcp.servicedirectory.NamespaceArgs;\nimport com.pulumi.gcp.servicedirectory.Service;\nimport com.pulumi.gcp.servicedirectory.ServiceArgs;\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 exampleNamespace = new Namespace(\"exampleNamespace\", NamespaceArgs.builder() \n .namespaceId(\"example-namespace\")\n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var exampleService = new Service(\"exampleService\", ServiceArgs.builder() \n .serviceId(\"example-service\")\n .namespace(exampleNamespace.id())\n .metadata(Map.ofEntries(\n Map.entry(\"stage\", \"prod\"),\n Map.entry(\"region\", \"us-central1\")\n ))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleNamespace:\n type: gcp:servicedirectory:Namespace\n properties:\n namespaceId: example-namespace\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n exampleService:\n type: gcp:servicedirectory:Service\n properties:\n serviceId: example-service\n namespace: ${exampleNamespace.id}\n metadata:\n stage: prod\n region: us-central1\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nService can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:servicedirectory/service:Service default projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:servicedirectory/service:Service default {{project}}/{{location}}/{{namespace_id}}/{{service_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:servicedirectory/service:Service default {{location}}/{{namespace_id}}/{{service_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Service Directory Service Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst exampleNamespace = new gcp.servicedirectory.Namespace(\"exampleNamespace\", {\n namespaceId: \"example-namespace\",\n location: \"us-central1\",\n}, {\n provider: google_beta,\n});\nconst exampleService = new gcp.servicedirectory.Service(\"exampleService\", {\n serviceId: \"example-service\",\n namespace: exampleNamespace.id,\n metadata: {\n stage: \"prod\",\n region: \"us-central1\",\n },\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nexample_namespace = gcp.servicedirectory.Namespace(\"exampleNamespace\",\n namespace_id=\"example-namespace\",\n location=\"us-central1\",\n opts=pulumi.ResourceOptions(provider=google_beta))\nexample_service = gcp.servicedirectory.Service(\"exampleService\",\n service_id=\"example-service\",\n namespace=example_namespace.id,\n metadata={\n \"stage\": \"prod\",\n \"region\": \"us-central1\",\n },\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var exampleNamespace = new Gcp.ServiceDirectory.Namespace(\"exampleNamespace\", new()\n {\n NamespaceId = \"example-namespace\",\n Location = \"us-central1\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var exampleService = new Gcp.ServiceDirectory.Service(\"exampleService\", new()\n {\n ServiceId = \"example-service\",\n Namespace = exampleNamespace.Id,\n Metadata = \n {\n { \"stage\", \"prod\" },\n { \"region\", \"us-central1\" },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\texampleNamespace, err := servicedirectory.NewNamespace(ctx, \"exampleNamespace\", \u0026servicedirectory.NamespaceArgs{\n\t\t\tNamespaceId: pulumi.String(\"example-namespace\"),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = servicedirectory.NewService(ctx, \"exampleService\", \u0026servicedirectory.ServiceArgs{\n\t\t\tServiceId: pulumi.String(\"example-service\"),\n\t\t\tNamespace: exampleNamespace.ID(),\n\t\t\tMetadata: pulumi.StringMap{\n\t\t\t\t\"stage\": pulumi.String(\"prod\"),\n\t\t\t\t\"region\": pulumi.String(\"us-central1\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.Namespace;\nimport com.pulumi.gcp.servicedirectory.NamespaceArgs;\nimport com.pulumi.gcp.servicedirectory.Service;\nimport com.pulumi.gcp.servicedirectory.ServiceArgs;\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 exampleNamespace = new Namespace(\"exampleNamespace\", NamespaceArgs.builder() \n .namespaceId(\"example-namespace\")\n .location(\"us-central1\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var exampleService = new Service(\"exampleService\", ServiceArgs.builder() \n .serviceId(\"example-service\")\n .namespace(exampleNamespace.id())\n .metadata(Map.ofEntries(\n Map.entry(\"stage\", \"prod\"),\n Map.entry(\"region\", \"us-central1\")\n ))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n exampleNamespace:\n type: gcp:servicedirectory:Namespace\n properties:\n namespaceId: example-namespace\n location: us-central1\n options:\n provider: ${[\"google-beta\"]}\n exampleService:\n type: gcp:servicedirectory:Service\n properties:\n serviceId: example-service\n namespace: ${exampleNamespace.id}\n metadata:\n stage: prod\n region: us-central1\n options:\n provider: ${[\"google-beta\"]}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nService can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:servicedirectory/service:Service default projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:servicedirectory/service:Service default {{project}}/{{location}}/{{namespace_id}}/{{service_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:servicedirectory/service:Service default {{location}}/{{namespace_id}}/{{service_id}}\n```\n\n ", "properties": { "metadata": { "type": "object", @@ -186489,7 +188025,7 @@ } }, "gcp:servicedirectory/serviceIamBinding:ServiceIamBinding": { - "description": "Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case:\n\n* `gcp.servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached.\n* `gcp.servicedirectory.ServiceIamBinding`: 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 service are preserved.\n* `gcp.servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved.\n\n\u003e **Note:** `gcp.servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.ServiceIamBinding` and `gcp.servicedirectory.ServiceIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_service\\_directory\\_service\\_iam\\_policy\n\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.servicedirectory.ServiceIamPolicy(\"policy\", {policyData: admin.then(admin =\u003e admin.policyData)}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.servicedirectory.ServiceIamPolicy(\"policy\", policy_data=admin.policy_data,\nopts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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.ServiceDirectory.ServiceIamPolicy(\"policy\", new()\n {\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\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 = servicedirectory.NewServiceIamPolicy(ctx, \"policy\", \u0026servicedirectory.ServiceIamPolicyArgs{\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.servicedirectory.ServiceIamPolicy;\nimport com.pulumi.gcp.servicedirectory.ServiceIamPolicyArgs;\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 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 ServiceIamPolicy(\"policy\", ServiceIamPolicyArgs.builder() \n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:servicedirectory:ServiceIamPolicy\n properties:\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\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\n## google\\_service\\_directory\\_service\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.servicedirectory.ServiceIamBinding(\"binding\", {\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.servicedirectory.ServiceIamBinding(\"binding\",\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ServiceDirectory.ServiceIamBinding(\"binding\", new()\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewServiceIamBinding(ctx, \"binding\", \u0026servicedirectory.ServiceIamBindingArgs{\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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.ServiceIamBinding;\nimport com.pulumi.gcp.servicedirectory.ServiceIamBindingArgs;\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 binding = new ServiceIamBinding(\"binding\", ServiceIamBindingArgs.builder() \n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:servicedirectory:ServiceIamBinding\n properties:\n role: roles/viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_service\\_directory\\_service\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.servicedirectory.ServiceIamMember(\"member\", {\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.servicedirectory.ServiceIamMember(\"member\",\n role=\"roles/viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ServiceDirectory.ServiceIamMember(\"member\", new()\n {\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewServiceIamMember(ctx, \"member\", \u0026servicedirectory.ServiceIamMemberArgs{\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.ServiceIamMember;\nimport com.pulumi.gcp.servicedirectory.ServiceIamMemberArgs;\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 member = new ServiceIamMember(\"member\", ServiceIamMemberArgs.builder() \n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:servicedirectory:ServiceIamMember\n properties:\n role: roles/viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamBinding:ServiceIamBinding editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamBinding:ServiceIamBinding editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamBinding:ServiceIamBinding editor projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamBinding:ServiceIamBinding editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamBinding:ServiceIamBinding editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamBinding:ServiceIamBinding editor projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:servicedirectory/ServiceIamBindingCondition:ServiceIamBindingCondition" @@ -186577,7 +188113,7 @@ } }, "gcp:servicedirectory/serviceIamMember:ServiceIamMember": { - "description": "Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case:\n\n* `gcp.servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached.\n* `gcp.servicedirectory.ServiceIamBinding`: 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 service are preserved.\n* `gcp.servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved.\n\n\u003e **Note:** `gcp.servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.ServiceIamBinding` and `gcp.servicedirectory.ServiceIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_service\\_directory\\_service\\_iam\\_policy\n\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.servicedirectory.ServiceIamPolicy(\"policy\", {policyData: admin.then(admin =\u003e admin.policyData)}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.servicedirectory.ServiceIamPolicy(\"policy\", policy_data=admin.policy_data,\nopts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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.ServiceDirectory.ServiceIamPolicy(\"policy\", new()\n {\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\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 = servicedirectory.NewServiceIamPolicy(ctx, \"policy\", \u0026servicedirectory.ServiceIamPolicyArgs{\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.servicedirectory.ServiceIamPolicy;\nimport com.pulumi.gcp.servicedirectory.ServiceIamPolicyArgs;\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 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 ServiceIamPolicy(\"policy\", ServiceIamPolicyArgs.builder() \n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:servicedirectory:ServiceIamPolicy\n properties:\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\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\n## google\\_service\\_directory\\_service\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.servicedirectory.ServiceIamBinding(\"binding\", {\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.servicedirectory.ServiceIamBinding(\"binding\",\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ServiceDirectory.ServiceIamBinding(\"binding\", new()\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewServiceIamBinding(ctx, \"binding\", \u0026servicedirectory.ServiceIamBindingArgs{\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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.ServiceIamBinding;\nimport com.pulumi.gcp.servicedirectory.ServiceIamBindingArgs;\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 binding = new ServiceIamBinding(\"binding\", ServiceIamBindingArgs.builder() \n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:servicedirectory:ServiceIamBinding\n properties:\n role: roles/viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_service\\_directory\\_service\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.servicedirectory.ServiceIamMember(\"member\", {\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.servicedirectory.ServiceIamMember(\"member\",\n role=\"roles/viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ServiceDirectory.ServiceIamMember(\"member\", new()\n {\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewServiceIamMember(ctx, \"member\", \u0026servicedirectory.ServiceIamMemberArgs{\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.ServiceIamMember;\nimport com.pulumi.gcp.servicedirectory.ServiceIamMemberArgs;\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 member = new ServiceIamMember(\"member\", ServiceIamMemberArgs.builder() \n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:servicedirectory:ServiceIamMember\n properties:\n role: roles/viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamMember:ServiceIamMember editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamMember:ServiceIamMember editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamMember:ServiceIamMember editor projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamMember:ServiceIamMember editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamMember:ServiceIamMember editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamMember:ServiceIamMember editor projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "condition": { "$ref": "#/types/gcp:servicedirectory/ServiceIamMemberCondition:ServiceIamMemberCondition" @@ -186658,7 +188194,7 @@ } }, "gcp:servicedirectory/serviceIamPolicy:ServiceIamPolicy": { - "description": "Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case:\n\n* `gcp.servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached.\n* `gcp.servicedirectory.ServiceIamBinding`: 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 service are preserved.\n* `gcp.servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved.\n\n\u003e **Note:** `gcp.servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.ServiceIamBinding` and `gcp.servicedirectory.ServiceIamMember` or they will fight over what your policy should be.\n\n\u003e **Note:** `gcp.servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role.\n\n## google\\_service\\_directory\\_service\\_iam\\_policy\n\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.servicedirectory.ServiceIamPolicy(\"policy\", {policyData: admin.then(admin =\u003e admin.policyData)}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nadmin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs(\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n)])\npolicy = gcp.servicedirectory.ServiceIamPolicy(\"policy\", policy_data=admin.policy_data,\nopts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\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.ServiceDirectory.ServiceIamPolicy(\"policy\", new()\n {\n PolicyData = admin.Apply(getIAMPolicyResult =\u003e getIAMPolicyResult.PolicyData),\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\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 = servicedirectory.NewServiceIamPolicy(ctx, \"policy\", \u0026servicedirectory.ServiceIamPolicyArgs{\n\t\t\tPolicyData: *pulumi.String(admin.PolicyData),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.servicedirectory.ServiceIamPolicy;\nimport com.pulumi.gcp.servicedirectory.ServiceIamPolicyArgs;\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 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 ServiceIamPolicy(\"policy\", ServiceIamPolicyArgs.builder() \n .policyData(admin.applyValue(getIAMPolicyResult -\u003e getIAMPolicyResult.policyData()))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n policy:\n type: gcp:servicedirectory:ServiceIamPolicy\n properties:\n policyData: ${admin.policyData}\n options:\n provider: ${[\"google-beta\"]}\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\n## google\\_service\\_directory\\_service\\_iam\\_binding\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst binding = new gcp.servicedirectory.ServiceIamBinding(\"binding\", {\n role: \"roles/viewer\",\n members: [\"user:jane@example.com\"],\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbinding = gcp.servicedirectory.ServiceIamBinding(\"binding\",\n role=\"roles/viewer\",\n members=[\"user:jane@example.com\"],\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var binding = new Gcp.ServiceDirectory.ServiceIamBinding(\"binding\", new()\n {\n Role = \"roles/viewer\",\n Members = new[]\n {\n \"user:jane@example.com\",\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewServiceIamBinding(ctx, \"binding\", \u0026servicedirectory.ServiceIamBindingArgs{\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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.ServiceIamBinding;\nimport com.pulumi.gcp.servicedirectory.ServiceIamBindingArgs;\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 binding = new ServiceIamBinding(\"binding\", ServiceIamBindingArgs.builder() \n .role(\"roles/viewer\")\n .members(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:servicedirectory:ServiceIamBinding\n properties:\n role: roles/viewer\n members:\n - user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n## google\\_service\\_directory\\_service\\_iam\\_member\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst member = new gcp.servicedirectory.ServiceIamMember(\"member\", {\n role: \"roles/viewer\",\n member: \"user:jane@example.com\",\n}, {\n provider: google_beta,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmember = gcp.servicedirectory.ServiceIamMember(\"member\",\n role=\"roles/viewer\",\n member=\"user:jane@example.com\",\n opts=pulumi.ResourceOptions(provider=google_beta))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var member = new Gcp.ServiceDirectory.ServiceIamMember(\"member\", new()\n {\n Role = \"roles/viewer\",\n Member = \"user:jane@example.com\",\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := servicedirectory.NewServiceIamMember(ctx, \"member\", \u0026servicedirectory.ServiceIamMemberArgs{\n\t\t\tRole: pulumi.String(\"roles/viewer\"),\n\t\t\tMember: pulumi.String(\"user:jane@example.com\"),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.servicedirectory.ServiceIamMember;\nimport com.pulumi.gcp.servicedirectory.ServiceIamMemberArgs;\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 member = new ServiceIamMember(\"member\", ServiceIamMemberArgs.builder() \n .role(\"roles/viewer\")\n .member(\"user:jane@example.com\")\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n member:\n type: gcp:servicedirectory:ServiceIamMember\n properties:\n role: roles/viewer\n member: user:jane@example.com\n options:\n provider: ${[\"google-beta\"]}\n```\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamPolicy:ServiceIamPolicy editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamPolicy:ServiceIamPolicy editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamPolicy:ServiceIamPolicy editor projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", + "description": "\n\n\n## Import\n\nFor all import syntaxes, the \"resource in question\" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamPolicy:ServiceIamPolicy editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} roles/viewer user:jane@example.com\"\n```\n\n IAM binding imports use space-delimited identifiersthe resource in question and the role, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamPolicy:ServiceIamPolicy editor \"projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} roles/viewer\"\n```\n\n IAM policy imports use the identifier of the resource in question, e.g.\n\n```sh\n $ pulumi import gcp:servicedirectory/serviceIamPolicy:ServiceIamPolicy editor projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}}\n```\n\n -\u003e **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the\n\nfull name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. ", "properties": { "etag": { "type": "string", @@ -186896,7 +188432,7 @@ } }, "gcp:serviceusage/consumerQuotaOverride:ConsumerQuotaOverride": { - "description": "A consumer override is applied to the consumer on its own authority to limit its own quota usage.\nConsumer overrides cannot be used to grant more quota than would be allowed by admin overrides,\nproducer overrides, or the default limit of the service.\n\nTo get more information about ConsumerQuotaOverride, see:\n\n* How-to Guides\n * [Getting Started](https://cloud.google.com/service-usage/docs/getting-started)\n * [REST API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services.consumerQuotaMetrics.limits.consumerOverrides)\n\n{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nConsumerQuotaOverride can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:serviceusage/consumerQuotaOverride:ConsumerQuotaOverride default projects/{{project}}/services/{{service}}/consumerQuotaMetrics/{{metric}}/limits/{{limit}}/consumerOverrides/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceusage/consumerQuotaOverride:ConsumerQuotaOverride default services/{{service}}/consumerQuotaMetrics/{{metric}}/limits/{{limit}}/consumerOverrides/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceusage/consumerQuotaOverride:ConsumerQuotaOverride default {{service}}/{{metric}}/{{limit}}/{{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% /examples %}}\n\n## Import\n\nConsumerQuotaOverride can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:serviceusage/consumerQuotaOverride:ConsumerQuotaOverride default projects/{{project}}/services/{{service}}/consumerQuotaMetrics/{{metric}}/limits/{{limit}}/consumerOverrides/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceusage/consumerQuotaOverride:ConsumerQuotaOverride default services/{{service}}/consumerQuotaMetrics/{{metric}}/limits/{{limit}}/consumerOverrides/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:serviceusage/consumerQuotaOverride:ConsumerQuotaOverride default {{service}}/{{metric}}/{{limit}}/{{name}}\n```\n\n ", "properties": { "dimensions": { "type": "object", @@ -187381,7 +188917,7 @@ } }, "gcp:spanner/database:Database": { - "description": "A Cloud Spanner Database which is hosted on a Spanner instance.\n\n\nTo get more information about Database, see:\n\n* [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instances.databases)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/spanner/)\n\n\u003e **Warning:** It is strongly recommended to set `lifecycle { prevent_destroy = true }` on databases in order to prevent accidental data loss.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Spanner Database Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.spanner.Instance(\"main\", {\n config: \"regional-europe-west1\",\n displayName: \"main-instance\",\n numNodes: 1,\n});\nconst database = new gcp.spanner.Database(\"database\", {\n instance: main.name,\n versionRetentionPeriod: \"3d\",\n ddls: [\n \"CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)\",\n \"CREATE TABLE t2 (t2 INT64 NOT NULL,) PRIMARY KEY(t2)\",\n ],\n deletionProtection: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.spanner.Instance(\"main\",\n config=\"regional-europe-west1\",\n display_name=\"main-instance\",\n num_nodes=1)\ndatabase = gcp.spanner.Database(\"database\",\n instance=main.name,\n version_retention_period=\"3d\",\n ddls=[\n \"CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)\",\n \"CREATE TABLE t2 (t2 INT64 NOT NULL,) PRIMARY KEY(t2)\",\n ],\n deletion_protection=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Spanner.Instance(\"main\", new()\n {\n Config = \"regional-europe-west1\",\n DisplayName = \"main-instance\",\n NumNodes = 1,\n });\n\n var database = new Gcp.Spanner.Database(\"database\", new()\n {\n Instance = main.Name,\n VersionRetentionPeriod = \"3d\",\n Ddls = new[]\n {\n \"CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)\",\n \"CREATE TABLE t2 (t2 INT64 NOT NULL,) PRIMARY KEY(t2)\",\n },\n DeletionProtection = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/spanner\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := spanner.NewInstance(ctx, \"main\", \u0026spanner.InstanceArgs{\n\t\t\tConfig: pulumi.String(\"regional-europe-west1\"),\n\t\t\tDisplayName: pulumi.String(\"main-instance\"),\n\t\t\tNumNodes: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = spanner.NewDatabase(ctx, \"database\", \u0026spanner.DatabaseArgs{\n\t\t\tInstance: main.Name,\n\t\t\tVersionRetentionPeriod: pulumi.String(\"3d\"),\n\t\t\tDdls: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)\"),\n\t\t\t\tpulumi.String(\"CREATE TABLE t2 (t2 INT64 NOT NULL,) PRIMARY KEY(t2)\"),\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\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.spanner.Instance;\nimport com.pulumi.gcp.spanner.InstanceArgs;\nimport com.pulumi.gcp.spanner.Database;\nimport com.pulumi.gcp.spanner.DatabaseArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Instance(\"main\", InstanceArgs.builder() \n .config(\"regional-europe-west1\")\n .displayName(\"main-instance\")\n .numNodes(1)\n .build());\n\n var database = new Database(\"database\", DatabaseArgs.builder() \n .instance(main.name())\n .versionRetentionPeriod(\"3d\")\n .ddls( \n \"CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)\",\n \"CREATE TABLE t2 (t2 INT64 NOT NULL,) PRIMARY KEY(t2)\")\n .deletionProtection(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:spanner:Instance\n properties:\n config: regional-europe-west1\n displayName: main-instance\n numNodes: 1\n database:\n type: gcp:spanner:Database\n properties:\n instance: ${main.name}\n versionRetentionPeriod: 3d\n ddls:\n - CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)\n - CREATE TABLE t2 (t2 INT64 NOT NULL,) PRIMARY KEY(t2)\n deletionProtection: false\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDatabase can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:spanner/database:Database default projects/{{project}}/instances/{{instance}}/databases/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:spanner/database:Database default instances/{{instance}}/databases/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:spanner/database:Database default {{project}}/{{instance}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:spanner/database:Database default {{instance}}/{{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Spanner Database Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.spanner.Instance(\"main\", {\n config: \"regional-europe-west1\",\n displayName: \"main-instance\",\n numNodes: 1,\n});\nconst database = new gcp.spanner.Database(\"database\", {\n instance: main.name,\n versionRetentionPeriod: \"3d\",\n ddls: [\n \"CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)\",\n \"CREATE TABLE t2 (t2 INT64 NOT NULL,) PRIMARY KEY(t2)\",\n ],\n deletionProtection: false,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nmain = gcp.spanner.Instance(\"main\",\n config=\"regional-europe-west1\",\n display_name=\"main-instance\",\n num_nodes=1)\ndatabase = gcp.spanner.Database(\"database\",\n instance=main.name,\n version_retention_period=\"3d\",\n ddls=[\n \"CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)\",\n \"CREATE TABLE t2 (t2 INT64 NOT NULL,) PRIMARY KEY(t2)\",\n ],\n deletion_protection=False)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Spanner.Instance(\"main\", new()\n {\n Config = \"regional-europe-west1\",\n DisplayName = \"main-instance\",\n NumNodes = 1,\n });\n\n var database = new Gcp.Spanner.Database(\"database\", new()\n {\n Instance = main.Name,\n VersionRetentionPeriod = \"3d\",\n Ddls = new[]\n {\n \"CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)\",\n \"CREATE TABLE t2 (t2 INT64 NOT NULL,) PRIMARY KEY(t2)\",\n },\n DeletionProtection = false,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/spanner\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tmain, err := spanner.NewInstance(ctx, \"main\", \u0026spanner.InstanceArgs{\n\t\t\tConfig: pulumi.String(\"regional-europe-west1\"),\n\t\t\tDisplayName: pulumi.String(\"main-instance\"),\n\t\t\tNumNodes: pulumi.Int(1),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = spanner.NewDatabase(ctx, \"database\", \u0026spanner.DatabaseArgs{\n\t\t\tInstance: main.Name,\n\t\t\tVersionRetentionPeriod: pulumi.String(\"3d\"),\n\t\t\tDdls: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)\"),\n\t\t\t\tpulumi.String(\"CREATE TABLE t2 (t2 INT64 NOT NULL,) PRIMARY KEY(t2)\"),\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\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.spanner.Instance;\nimport com.pulumi.gcp.spanner.InstanceArgs;\nimport com.pulumi.gcp.spanner.Database;\nimport com.pulumi.gcp.spanner.DatabaseArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 Instance(\"main\", InstanceArgs.builder() \n .config(\"regional-europe-west1\")\n .displayName(\"main-instance\")\n .numNodes(1)\n .build());\n\n var database = new Database(\"database\", DatabaseArgs.builder() \n .instance(main.name())\n .versionRetentionPeriod(\"3d\")\n .ddls( \n \"CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)\",\n \"CREATE TABLE t2 (t2 INT64 NOT NULL,) PRIMARY KEY(t2)\")\n .deletionProtection(false)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n main:\n type: gcp:spanner:Instance\n properties:\n config: regional-europe-west1\n displayName: main-instance\n numNodes: 1\n database:\n type: gcp:spanner:Database\n properties:\n instance: ${main.name}\n versionRetentionPeriod: 3d\n ddls:\n - CREATE TABLE t1 (t1 INT64 NOT NULL,) PRIMARY KEY(t1)\n - CREATE TABLE t2 (t2 INT64 NOT NULL,) PRIMARY KEY(t2)\n deletionProtection: false\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDatabase can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:spanner/database:Database default projects/{{project}}/instances/{{instance}}/databases/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:spanner/database:Database default instances/{{instance}}/databases/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:spanner/database:Database default {{project}}/{{instance}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:spanner/database:Database default {{instance}}/{{name}}\n```\n\n ", "properties": { "databaseDialect": { "type": "string", @@ -187396,7 +188932,7 @@ }, "deletionProtection": { "type": "boolean", - "description": "Whether or not to allow the provider to destroy the instance. Unless this field is set to false\nin state, a `destroy` or `update` that would delete the instance will fail.\n" + "description": "Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a\n'terraform destroy' or 'terraform apply' that would delete the instance will fail.\n" }, "encryptionConfig": { "$ref": "#/types/gcp:spanner/DatabaseEncryptionConfig:DatabaseEncryptionConfig", @@ -187446,7 +188982,7 @@ }, "deletionProtection": { "type": "boolean", - "description": "Whether or not to allow the provider to destroy the instance. Unless this field is set to false\nin state, a `destroy` or `update` that would delete the instance will fail.\n" + "description": "Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a\n'terraform destroy' or 'terraform apply' that would delete the instance will fail.\n" }, "encryptionConfig": { "$ref": "#/types/gcp:spanner/DatabaseEncryptionConfig:DatabaseEncryptionConfig", @@ -187493,7 +189029,7 @@ }, "deletionProtection": { "type": "boolean", - "description": "Whether or not to allow the provider to destroy the instance. Unless this field is set to false\nin state, a `destroy` or `update` that would delete the instance will fail.\n" + "description": "Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a\n'terraform destroy' or 'terraform apply' that would delete the instance will fail.\n" }, "encryptionConfig": { "$ref": "#/types/gcp:spanner/DatabaseEncryptionConfig:DatabaseEncryptionConfig", @@ -188375,7 +189911,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/),\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{{% examples %}}\n## Example Usage\n{{% example %}}\n### SQL Second Generation Instance\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n databaseVersion: \"POSTGRES_14\",\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 database_version=\"POSTGRES_14\",\n region=\"us-central1\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n DatabaseVersion = \"POSTGRES_14\",\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/v6/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\tDatabaseVersion: pulumi.String(\"POSTGRES_14\"),\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 .databaseVersion(\"POSTGRES_14\")\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 databaseVersion: POSTGRES_14\n region: us-central1\n settings:\n tier: db-f1-micro\n```\n{{% /example %}}\n{{% example %}}\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```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(\"privateNetwork\", {}, {\n provider: google_beta,\n});\nconst privateIpAddress = new gcp.compute.GlobalAddress(\"privateIpAddress\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: privateNetwork.id,\n}, {\n provider: google_beta,\n});\nconst privateVpcConnection = new gcp.servicenetworking.Connection(\"privateVpcConnection\", {\n network: privateNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [privateIpAddress.name],\n}, {\n provider: google_beta,\n});\nconst dbNameSuffix = new random.RandomId(\"dbNameSuffix\", {byteLength: 4});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n ipConfiguration: {\n ipv4Enabled: false,\n privateNetwork: privateNetwork.id,\n },\n },\n}, {\n provider: google_beta,\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(\"privateNetwork\", opts=pulumi.ResourceOptions(provider=google_beta))\nprivate_ip_address = gcp.compute.GlobalAddress(\"privateIpAddress\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=private_network.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\nprivate_vpc_connection = gcp.servicenetworking.Connection(\"privateVpcConnection\",\n network=private_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[private_ip_address.name],\n opts=pulumi.ResourceOptions(provider=google_beta))\ndb_name_suffix = random.RandomId(\"dbNameSuffix\", byte_length=4)\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ip_configuration=gcp.sql.DatabaseInstanceSettingsIpConfigurationArgs(\n ipv4_enabled=False,\n private_network=private_network.id,\n ),\n ),\n opts=pulumi.ResourceOptions(provider=google_beta,\n depends_on=[private_vpc_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var privateNetwork = new Gcp.Compute.Network(\"privateNetwork\", new()\n {\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var privateIpAddress = new Gcp.Compute.GlobalAddress(\"privateIpAddress\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = privateNetwork.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var privateVpcConnection = new Gcp.ServiceNetworking.Connection(\"privateVpcConnection\", new()\n {\n Network = privateNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n privateIpAddress.Name,\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var dbNameSuffix = new Random.RandomId(\"dbNameSuffix\", new()\n {\n ByteLength = 4,\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\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.Id,\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n DependsOn = new[]\n {\n privateVpcConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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, \"privateNetwork\", nil, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAddress, err := compute.NewGlobalAddress(ctx, \"privateIpAddress\", \u0026compute.GlobalAddressArgs{\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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateVpcConnection, err := servicenetworking.NewConnection(ctx, \"privateVpcConnection\", \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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = random.NewRandomId(ctx, \"dbNameSuffix\", \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\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.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta), 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.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var privateIpAddress = new GlobalAddress(\"privateIpAddress\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(privateNetwork.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\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(), CustomResourceOptions.builder()\n .provider(google_beta)\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 .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.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .dependsOn(privateVpcConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n privateNetwork:\n type: gcp:compute:Network\n options:\n provider: ${[\"google-beta\"]}\n privateIpAddress:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${privateNetwork.id}\n options:\n provider: ${[\"google-beta\"]}\n privateVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${privateNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${privateIpAddress.name}\n options:\n provider: ${[\"google-beta\"]}\n dbNameSuffix:\n type: random:RandomId\n properties:\n byteLength: 4\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n ipConfiguration:\n ipv4Enabled: false\n privateNetwork: ${privateNetwork.id}\n options:\n provider: ${[\"google-beta\"]}\n dependson:\n - ${privateVpcConnection}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDatabase instances can be imported using one of any of these accepted formats\n\n```sh\n $ pulumi import gcp:sql/databaseInstance:DatabaseInstance main projects/{{project}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:sql/databaseInstance:DatabaseInstance main {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:sql/databaseInstance:DatabaseInstance main {{name}}\n```\n\n config and set on the server. When importing, double-check that your config has all the fields set that you expect- just seeing no diff isn't sufficient to know that your config could reproduce the imported resource. ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### SQL Second Generation Instance\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n databaseVersion: \"POSTGRES_14\",\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 database_version=\"POSTGRES_14\",\n region=\"us-central1\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n DatabaseVersion = \"POSTGRES_14\",\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/v6/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\tDatabaseVersion: pulumi.String(\"POSTGRES_14\"),\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 .databaseVersion(\"POSTGRES_14\")\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 databaseVersion: POSTGRES_14\n region: us-central1\n settings:\n tier: db-f1-micro\n```\n{{% /example %}}\n{{% example %}}\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```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(\"privateNetwork\", {}, {\n provider: google_beta,\n});\nconst privateIpAddress = new gcp.compute.GlobalAddress(\"privateIpAddress\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: privateNetwork.id,\n}, {\n provider: google_beta,\n});\nconst privateVpcConnection = new gcp.servicenetworking.Connection(\"privateVpcConnection\", {\n network: privateNetwork.id,\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [privateIpAddress.name],\n}, {\n provider: google_beta,\n});\nconst dbNameSuffix = new random.RandomId(\"dbNameSuffix\", {byteLength: 4});\nconst instance = new gcp.sql.DatabaseInstance(\"instance\", {\n region: \"us-central1\",\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n ipConfiguration: {\n ipv4Enabled: false,\n privateNetwork: privateNetwork.id,\n },\n },\n}, {\n provider: google_beta,\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(\"privateNetwork\", opts=pulumi.ResourceOptions(provider=google_beta))\nprivate_ip_address = gcp.compute.GlobalAddress(\"privateIpAddress\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=private_network.id,\n opts=pulumi.ResourceOptions(provider=google_beta))\nprivate_vpc_connection = gcp.servicenetworking.Connection(\"privateVpcConnection\",\n network=private_network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[private_ip_address.name],\n opts=pulumi.ResourceOptions(provider=google_beta))\ndb_name_suffix = random.RandomId(\"dbNameSuffix\", byte_length=4)\ninstance = gcp.sql.DatabaseInstance(\"instance\",\n region=\"us-central1\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ip_configuration=gcp.sql.DatabaseInstanceSettingsIpConfigurationArgs(\n ipv4_enabled=False,\n private_network=private_network.id,\n ),\n ),\n opts=pulumi.ResourceOptions(provider=google_beta,\n depends_on=[private_vpc_connection]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var privateNetwork = new Gcp.Compute.Network(\"privateNetwork\", new()\n {\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var privateIpAddress = new Gcp.Compute.GlobalAddress(\"privateIpAddress\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = privateNetwork.Id,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var privateVpcConnection = new Gcp.ServiceNetworking.Connection(\"privateVpcConnection\", new()\n {\n Network = privateNetwork.Id,\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n privateIpAddress.Name,\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var dbNameSuffix = new Random.RandomId(\"dbNameSuffix\", new()\n {\n ByteLength = 4,\n });\n\n var instance = new Gcp.Sql.DatabaseInstance(\"instance\", new()\n {\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.Id,\n },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n DependsOn = new[]\n {\n privateVpcConnection,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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, \"privateNetwork\", nil, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateIpAddress, err := compute.NewGlobalAddress(ctx, \"privateIpAddress\", \u0026compute.GlobalAddressArgs{\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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateVpcConnection, err := servicenetworking.NewConnection(ctx, \"privateVpcConnection\", \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}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = random.NewRandomId(ctx, \"dbNameSuffix\", \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\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.ID(),\n\t\t\t\t},\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta), 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.Empty, CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var privateIpAddress = new GlobalAddress(\"privateIpAddress\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(privateNetwork.id())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\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(), CustomResourceOptions.builder()\n .provider(google_beta)\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 .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.id())\n .build())\n .build())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .dependsOn(privateVpcConnection)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n privateNetwork:\n type: gcp:compute:Network\n options:\n provider: ${[\"google-beta\"]}\n privateIpAddress:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${privateNetwork.id}\n options:\n provider: ${[\"google-beta\"]}\n privateVpcConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${privateNetwork.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${privateIpAddress.name}\n options:\n provider: ${[\"google-beta\"]}\n dbNameSuffix:\n type: random:RandomId\n properties:\n byteLength: 4\n instance:\n type: gcp:sql:DatabaseInstance\n properties:\n region: us-central1\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n ipConfiguration:\n ipv4Enabled: false\n privateNetwork: ${privateNetwork.id}\n options:\n provider: ${[\"google-beta\"]}\n dependson:\n - ${privateVpcConnection}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nDatabase instances can be imported using one of any of these accepted formats\n\n```sh\n $ pulumi import gcp:sql/databaseInstance:DatabaseInstance main projects/{{project}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:sql/databaseInstance:DatabaseInstance main {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:sql/databaseInstance:DatabaseInstance main {{name}}\n```\n\n config and set on the server. When importing, double-check that your config has all the fields set that you expect- just seeing no diff isn't sufficient to know that your config could reproduce the imported resource. ", "properties": { "availableMaintenanceVersions": { "type": "array", @@ -188386,7 +189922,7 @@ }, "clone": { "$ref": "#/types/gcp:sql/DatabaseInstanceClone:DatabaseInstanceClone", - "description": "The context needed to create this instance as a clone of another instance. When this field is set during\nresource creation, this provider will attempt to clone another instance as indicated in the context. The\nconfiguration is detailed below.\n" + "description": "Configuration for creating a new instance as a clone of another instance.\n" }, "connectionName": { "type": "string", @@ -188398,15 +189934,14 @@ }, "deletionProtection": { "type": "boolean", - "description": "Whether or not to allow the provider to destroy the instance. Unless this field is set to false\nin state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`.\n" + "description": "Used to block Terraform from deleting a SQL Instance. Defaults to true.\n" }, "encryptionKeyName": { - "type": "string", - "description": "The full path to the encryption key used for the CMEK disk encryption. Setting\nup disk encryption currently requires manual steps outside of this provider.\nThe provided key must be in the same region as the SQL instance. In order\nto use this feature, a special kind of service account must be created and\ngranted permission on this key. This step can currently only be done\nmanually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account).\nThat service account needs the `Cloud KMS \u003e Cloud KMS CryptoKey Encrypter/Decrypter` role on your\nkey - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey).\n" + "type": "string" }, "firstIpAddress": { "type": "string", - "description": "The first IPv4 address of any type assigned.\n" + "description": "The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform\noutput when the resource is configured with a count.\n" }, "instanceType": { "type": "string", @@ -188428,11 +189963,11 @@ }, "name": { "type": "string", - "description": "The name of the instance. If the name is left\nblank, the provider will randomly generate one when the instance is first\ncreated. This is done because after a name is used, it cannot be reused for\nup to [one week](https://cloud.google.com/sql/docs/delete-instance).\n" + "description": "The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first\ncreated. This is done because after a name is used, it cannot be reused for up to one week.\n" }, "privateIpAddress": { "type": "string", - "description": "The first private (`PRIVATE`) IPv4 address assigned.\n" + "description": "IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to\naccess an IP of a specific type without performing filtering in a Terraform config.\n" }, "project": { "type": "string", @@ -188440,7 +189975,7 @@ }, "publicIpAddress": { "type": "string", - "description": "The first public (`PRIMARY`) IPv4 address assigned.\n" + "description": "IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to\naccess an IP of a specific type without performing filtering in a Terraform config.\n" }, "region": { "type": "string", @@ -188451,12 +189986,11 @@ "description": "The configuration for replication. The\nconfiguration is detailed below. Valid only for MySQL instances.\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" + "$ref": "#/types/gcp:sql/DatabaseInstanceRestoreBackupContext:DatabaseInstanceRestoreBackupContext" }, "rootPassword": { "type": "string", - "description": "Initial root password. Required for MS SQL Server.\n", + "description": "Initial root password. Can be updated. Required for MS SQL Server.\n", "secret": true }, "selfLink": { @@ -188502,7 +190036,7 @@ "inputProperties": { "clone": { "$ref": "#/types/gcp:sql/DatabaseInstanceClone:DatabaseInstanceClone", - "description": "The context needed to create this instance as a clone of another instance. When this field is set during\nresource creation, this provider will attempt to clone another instance as indicated in the context. The\nconfiguration is detailed below.\n" + "description": "Configuration for creating a new instance as a clone of another instance.\n" }, "databaseVersion": { "type": "string", @@ -188510,11 +190044,10 @@ }, "deletionProtection": { "type": "boolean", - "description": "Whether or not to allow the provider to destroy the instance. Unless this field is set to false\nin state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`.\n" + "description": "Used to block Terraform from deleting a SQL Instance. Defaults to true.\n" }, "encryptionKeyName": { "type": "string", - "description": "The full path to the encryption key used for the CMEK disk encryption. Setting\nup disk encryption currently requires manual steps outside of this provider.\nThe provided key must be in the same region as the SQL instance. In order\nto use this feature, a special kind of service account must be created and\ngranted permission on this key. This step can currently only be done\nmanually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account).\nThat service account needs the `Cloud KMS \u003e Cloud KMS CryptoKey Encrypter/Decrypter` role on your\nkey - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey).\n", "willReplaceOnChanges": true }, "maintenanceVersion": { @@ -188528,7 +190061,7 @@ }, "name": { "type": "string", - "description": "The name of the instance. If the name is left\nblank, the provider will randomly generate one when the instance is first\ncreated. This is done because after a name is used, it cannot be reused for\nup to [one week](https://cloud.google.com/sql/docs/delete-instance).\n", + "description": "The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first\ncreated. This is done because after a name is used, it cannot be reused for up to one week.\n", "willReplaceOnChanges": true }, "project": { @@ -188546,14 +190079,12 @@ "description": "The configuration for replication. The\nconfiguration is detailed below. Valid only for MySQL instances.\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" + "$ref": "#/types/gcp:sql/DatabaseInstanceRestoreBackupContext:DatabaseInstanceRestoreBackupContext" }, "rootPassword": { "type": "string", - "description": "Initial root password. Required for MS SQL Server.\n", - "secret": true, - "willReplaceOnChanges": true + "description": "Initial root password. Can be updated. Required for MS SQL Server.\n", + "secret": true }, "settings": { "$ref": "#/types/gcp:sql/DatabaseInstanceSettings:DatabaseInstanceSettings", @@ -188575,7 +190106,7 @@ }, "clone": { "$ref": "#/types/gcp:sql/DatabaseInstanceClone:DatabaseInstanceClone", - "description": "The context needed to create this instance as a clone of another instance. When this field is set during\nresource creation, this provider will attempt to clone another instance as indicated in the context. The\nconfiguration is detailed below.\n" + "description": "Configuration for creating a new instance as a clone of another instance.\n" }, "connectionName": { "type": "string", @@ -188587,16 +190118,15 @@ }, "deletionProtection": { "type": "boolean", - "description": "Whether or not to allow the provider to destroy the instance. Unless this field is set to false\nin state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`.\n" + "description": "Used to block Terraform from deleting a SQL Instance. Defaults to true.\n" }, "encryptionKeyName": { "type": "string", - "description": "The full path to the encryption key used for the CMEK disk encryption. Setting\nup disk encryption currently requires manual steps outside of this provider.\nThe provided key must be in the same region as the SQL instance. In order\nto use this feature, a special kind of service account must be created and\ngranted permission on this key. This step can currently only be done\nmanually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account).\nThat service account needs the `Cloud KMS \u003e Cloud KMS CryptoKey Encrypter/Decrypter` role on your\nkey - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey).\n", "willReplaceOnChanges": true }, "firstIpAddress": { "type": "string", - "description": "The first IPv4 address of any type assigned.\n" + "description": "The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform\noutput when the resource is configured with a count.\n" }, "instanceType": { "type": "string", @@ -188619,12 +190149,12 @@ }, "name": { "type": "string", - "description": "The name of the instance. If the name is left\nblank, the provider will randomly generate one when the instance is first\ncreated. This is done because after a name is used, it cannot be reused for\nup to [one week](https://cloud.google.com/sql/docs/delete-instance).\n", + "description": "The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first\ncreated. This is done because after a name is used, it cannot be reused for up to one week.\n", "willReplaceOnChanges": true }, "privateIpAddress": { "type": "string", - "description": "The first private (`PRIVATE`) IPv4 address assigned.\n" + "description": "IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to\naccess an IP of a specific type without performing filtering in a Terraform config.\n" }, "project": { "type": "string", @@ -188633,7 +190163,7 @@ }, "publicIpAddress": { "type": "string", - "description": "The first public (`PRIMARY`) IPv4 address assigned.\n" + "description": "IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to\naccess an IP of a specific type without performing filtering in a Terraform config.\n" }, "region": { "type": "string", @@ -188645,14 +190175,12 @@ "description": "The configuration for replication. The\nconfiguration is detailed below. Valid only for MySQL instances.\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" + "$ref": "#/types/gcp:sql/DatabaseInstanceRestoreBackupContext:DatabaseInstanceRestoreBackupContext" }, "rootPassword": { "type": "string", - "description": "Initial root password. Required for MS SQL Server.\n", - "secret": true, - "willReplaceOnChanges": true + "description": "Initial root password. Can be updated. Required for MS SQL Server.\n", + "secret": true }, "selfLink": { "type": "string", @@ -188677,7 +190205,7 @@ } }, "gcp:sql/sourceRepresentationInstance:SourceRepresentationInstance": { - "description": "A source representation instance is a Cloud SQL instance that represents\nthe source database server to the Cloud SQL replica. It is visible in the\nCloud Console and appears the same as a regular Cloud SQL instance, but it\ncontains no data, requires no configuration or maintenance, and does not\naffect billing. You cannot update the source representation instance.\n\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Sql Source Representation Instance Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.sql.SourceRepresentationInstance(\"instance\", {\n databaseVersion: \"MYSQL_8_0\",\n host: \"10.20.30.40\",\n port: 3306,\n region: \"us-central1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.sql.SourceRepresentationInstance(\"instance\",\n database_version=\"MYSQL_8_0\",\n host=\"10.20.30.40\",\n port=3306,\n region=\"us-central1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Sql.SourceRepresentationInstance(\"instance\", new()\n {\n DatabaseVersion = \"MYSQL_8_0\",\n Host = \"10.20.30.40\",\n Port = 3306,\n Region = \"us-central1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewSourceRepresentationInstance(ctx, \"instance\", \u0026sql.SourceRepresentationInstanceArgs{\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0\"),\n\t\t\tHost: pulumi.String(\"10.20.30.40\"),\n\t\t\tPort: pulumi.Int(3306),\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\treturn nil\n\t})\n}\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.SourceRepresentationInstance;\nimport com.pulumi.gcp.sql.SourceRepresentationInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SourceRepresentationInstance(\"instance\", SourceRepresentationInstanceArgs.builder() \n .databaseVersion(\"MYSQL_8_0\")\n .host(\"10.20.30.40\")\n .port(3306)\n .region(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:sql:SourceRepresentationInstance\n properties:\n databaseVersion: MYSQL_8_0\n host: 10.20.30.40\n port: 3306\n region: us-central1\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSourceRepresentationInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:sql/sourceRepresentationInstance:SourceRepresentationInstance default projects/{{project}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:sql/sourceRepresentationInstance:SourceRepresentationInstance default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:sql/sourceRepresentationInstance:SourceRepresentationInstance default {{name}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Sql Source Representation Instance Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst instance = new gcp.sql.SourceRepresentationInstance(\"instance\", {\n databaseVersion: \"MYSQL_8_0\",\n dumpFilePath: \"gs://replica-bucket/source-database.sql.gz\",\n host: \"10.20.30.40\",\n password: \"password-for-the-user\",\n port: 3306,\n region: \"us-central1\",\n username: \"some-user\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ninstance = gcp.sql.SourceRepresentationInstance(\"instance\",\n database_version=\"MYSQL_8_0\",\n dump_file_path=\"gs://replica-bucket/source-database.sql.gz\",\n host=\"10.20.30.40\",\n password=\"password-for-the-user\",\n port=3306,\n region=\"us-central1\",\n username=\"some-user\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var instance = new Gcp.Sql.SourceRepresentationInstance(\"instance\", new()\n {\n DatabaseVersion = \"MYSQL_8_0\",\n DumpFilePath = \"gs://replica-bucket/source-database.sql.gz\",\n Host = \"10.20.30.40\",\n Password = \"password-for-the-user\",\n Port = 3306,\n Region = \"us-central1\",\n Username = \"some-user\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.NewSourceRepresentationInstance(ctx, \"instance\", \u0026sql.SourceRepresentationInstanceArgs{\n\t\t\tDatabaseVersion: pulumi.String(\"MYSQL_8_0\"),\n\t\t\tDumpFilePath: pulumi.String(\"gs://replica-bucket/source-database.sql.gz\"),\n\t\t\tHost: pulumi.String(\"10.20.30.40\"),\n\t\t\tPassword: pulumi.String(\"password-for-the-user\"),\n\t\t\tPort: pulumi.Int(3306),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tUsername: pulumi.String(\"some-user\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\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.SourceRepresentationInstance;\nimport com.pulumi.gcp.sql.SourceRepresentationInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 SourceRepresentationInstance(\"instance\", SourceRepresentationInstanceArgs.builder() \n .databaseVersion(\"MYSQL_8_0\")\n .dumpFilePath(\"gs://replica-bucket/source-database.sql.gz\")\n .host(\"10.20.30.40\")\n .password(\"password-for-the-user\")\n .port(3306)\n .region(\"us-central1\")\n .username(\"some-user\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n instance:\n type: gcp:sql:SourceRepresentationInstance\n properties:\n databaseVersion: MYSQL_8_0\n dumpFilePath: gs://replica-bucket/source-database.sql.gz\n host: 10.20.30.40\n password: password-for-the-user\n port: 3306\n region: us-central1\n username: some-user\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSourceRepresentationInstance can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:sql/sourceRepresentationInstance:SourceRepresentationInstance default projects/{{project}}/instances/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:sql/sourceRepresentationInstance:SourceRepresentationInstance default {{project}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:sql/sourceRepresentationInstance:SourceRepresentationInstance default {{name}}\n```\n\n ", "properties": { "caCertificate": { "type": "string", @@ -188709,7 +190237,8 @@ }, "password": { "type": "string", - "description": "The password for the replication user account.\n" + "description": "The password for the replication user account.\n**Note**: This property is sensitive and will not be displayed in the plan.\n", + "secret": true }, "port": { "type": "integer", @@ -188773,7 +190302,8 @@ }, "password": { "type": "string", - "description": "The password for the replication user account.\n", + "description": "The password for the replication user account.\n**Note**: This property is sensitive and will not be displayed in the plan.\n", + "secret": true, "willReplaceOnChanges": true }, "port": { @@ -188841,7 +190371,8 @@ }, "password": { "type": "string", - "description": "The password for the replication user account.\n", + "description": "The password for the replication user account.\n**Note**: This property is sensitive and will not be displayed in the plan.\n", + "secret": true, "willReplaceOnChanges": true }, "port": { @@ -188869,7 +190400,7 @@ } }, "gcp:sql/sslCert:SslCert": { - "description": "Creates a new Google SQL SSL Cert on a Google SQL Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/sslCerts).\n\n\u003e **Note:** All arguments including the private key will be stored in the raw state as plain-text\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nExample creating a SQL Client Certificate.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst dbNameSuffix = new random.RandomId(\"dbNameSuffix\", {byteLength: 4});\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n});\nconst clientCert = new gcp.sql.SslCert(\"clientCert\", {\n commonName: \"client-name\",\n instance: main.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ndb_name_suffix = random.RandomId(\"dbNameSuffix\", byte_length=4)\nmain = gcp.sql.DatabaseInstance(\"main\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ))\nclient_cert = gcp.sql.SslCert(\"clientCert\",\n common_name=\"client-name\",\n instance=main.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dbNameSuffix = new Random.RandomId(\"dbNameSuffix\", new()\n {\n ByteLength = 4,\n });\n\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n });\n\n var clientCert = new Gcp.Sql.SslCert(\"clientCert\", new()\n {\n CommonName = \"client-name\",\n Instance = main.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := random.NewRandomId(ctx, \"dbNameSuffix\", \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\tmain, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\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},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sql.NewSslCert(ctx, \"clientCert\", \u0026sql.SslCertArgs{\n\t\t\tCommonName: pulumi.String(\"client-name\"),\n\t\t\tInstance: main.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.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.SslCert;\nimport com.pulumi.gcp.sql.SslCertArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dbNameSuffix = new RandomId(\"dbNameSuffix\", RandomIdArgs.builder() \n .byteLength(4)\n .build());\n\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder() \n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .build());\n\n var clientCert = new SslCert(\"clientCert\", SslCertArgs.builder() \n .commonName(\"client-name\")\n .instance(main.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dbNameSuffix:\n type: random:RandomId\n properties:\n byteLength: 4\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n clientCert:\n type: gcp:sql:SslCert\n properties:\n commonName: client-name\n instance: ${main.name}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSince the contents of the certificate cannot be accessed after its creation, this resource cannot be imported. ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\nExample creating a SQL Client Certificate.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst dbNameSuffix = new random.RandomId(\"dbNameSuffix\", {byteLength: 4});\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n});\nconst clientCert = new gcp.sql.SslCert(\"clientCert\", {\n commonName: \"client-name\",\n instance: main.name,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ndb_name_suffix = random.RandomId(\"dbNameSuffix\", byte_length=4)\nmain = gcp.sql.DatabaseInstance(\"main\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ))\nclient_cert = gcp.sql.SslCert(\"clientCert\",\n common_name=\"client-name\",\n instance=main.name)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dbNameSuffix = new Random.RandomId(\"dbNameSuffix\", new()\n {\n ByteLength = 4,\n });\n\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n });\n\n var clientCert = new Gcp.Sql.SslCert(\"clientCert\", new()\n {\n CommonName = \"client-name\",\n Instance = main.Name,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := random.NewRandomId(ctx, \"dbNameSuffix\", \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\tmain, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\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},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sql.NewSslCert(ctx, \"clientCert\", \u0026sql.SslCertArgs{\n\t\t\tCommonName: pulumi.String(\"client-name\"),\n\t\t\tInstance: main.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.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.SslCert;\nimport com.pulumi.gcp.sql.SslCertArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dbNameSuffix = new RandomId(\"dbNameSuffix\", RandomIdArgs.builder() \n .byteLength(4)\n .build());\n\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder() \n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .build());\n\n var clientCert = new SslCert(\"clientCert\", SslCertArgs.builder() \n .commonName(\"client-name\")\n .instance(main.name())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dbNameSuffix:\n type: random:RandomId\n properties:\n byteLength: 4\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n clientCert:\n type: gcp:sql:SslCert\n properties:\n commonName: client-name\n instance: ${main.name}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSince the contents of the certificate cannot be accessed after its creation, this resource cannot be imported. ", "properties": { "cert": { "type": "string", @@ -188998,7 +190529,7 @@ } }, "gcp:sql/user:User": { - "description": "Creates a new Google SQL User on a Google SQL User Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/users).\n\n\u003e **Note:** All arguments including the username and password will be stored in the raw state as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nExample creating a SQL User.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst dbNameSuffix = new random.RandomId(\"dbNameSuffix\", {byteLength: 4});\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n});\nconst users = new gcp.sql.User(\"users\", {\n instance: main.name,\n host: \"me.com\",\n password: \"changeme\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ndb_name_suffix = random.RandomId(\"dbNameSuffix\", byte_length=4)\nmain = gcp.sql.DatabaseInstance(\"main\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ))\nusers = gcp.sql.User(\"users\",\n instance=main.name,\n host=\"me.com\",\n password=\"changeme\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dbNameSuffix = new Random.RandomId(\"dbNameSuffix\", new()\n {\n ByteLength = 4,\n });\n\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n });\n\n var users = new Gcp.Sql.User(\"users\", new()\n {\n Instance = main.Name,\n Host = \"me.com\",\n Password = \"changeme\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := random.NewRandomId(ctx, \"dbNameSuffix\", \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\tmain, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\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},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sql.NewUser(ctx, \"users\", \u0026sql.UserArgs{\n\t\t\tInstance: main.Name,\n\t\t\tHost: pulumi.String(\"me.com\"),\n\t\t\tPassword: pulumi.String(\"changeme\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\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.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dbNameSuffix = new RandomId(\"dbNameSuffix\", RandomIdArgs.builder() \n .byteLength(4)\n .build());\n\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder() \n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .build());\n\n var users = new User(\"users\", UserArgs.builder() \n .instance(main.name())\n .host(\"me.com\")\n .password(\"changeme\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dbNameSuffix:\n type: random:RandomId\n properties:\n byteLength: 4\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n users:\n type: gcp:sql:User\n properties:\n instance: ${main.name}\n host: me.com\n password: changeme\n```\n\nExample creating a Cloud IAM User. (For MySQL, specify `cloudsql_iam_authentication`)\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst dbNameSuffix = new random.RandomId(\"dbNameSuffix\", {byteLength: 4});\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n databaseVersion: \"POSTGRES_9_6\",\n settings: {\n tier: \"db-f1-micro\",\n databaseFlags: [{\n name: \"cloudsql.iam_authentication\",\n value: \"on\",\n }],\n },\n});\nconst users = new gcp.sql.User(\"users\", {\n instance: main.name,\n type: \"CLOUD_IAM_USER\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ndb_name_suffix = random.RandomId(\"dbNameSuffix\", byte_length=4)\nmain = gcp.sql.DatabaseInstance(\"main\",\n database_version=\"POSTGRES_9_6\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n database_flags=[gcp.sql.DatabaseInstanceSettingsDatabaseFlagArgs(\n name=\"cloudsql.iam_authentication\",\n value=\"on\",\n )],\n ))\nusers = gcp.sql.User(\"users\",\n instance=main.name,\n type=\"CLOUD_IAM_USER\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dbNameSuffix = new Random.RandomId(\"dbNameSuffix\", new()\n {\n ByteLength = 4,\n });\n\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n DatabaseVersion = \"POSTGRES_9_6\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n DatabaseFlags = new[]\n {\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsDatabaseFlagArgs\n {\n Name = \"cloudsql.iam_authentication\",\n Value = \"on\",\n },\n },\n },\n });\n\n var users = new Gcp.Sql.User(\"users\", new()\n {\n Instance = main.Name,\n Type = \"CLOUD_IAM_USER\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := random.NewRandomId(ctx, \"dbNameSuffix\", \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\tmain, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_9_6\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t\tDatabaseFlags: sql.DatabaseInstanceSettingsDatabaseFlagArray{\n\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsDatabaseFlagArgs{\n\t\t\t\t\t\tName: pulumi.String(\"cloudsql.iam_authentication\"),\n\t\t\t\t\t\tValue: pulumi.String(\"on\"),\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 = sql.NewUser(ctx, \"users\", \u0026sql.UserArgs{\n\t\t\tInstance: main.Name,\n\t\t\tType: pulumi.String(\"CLOUD_IAM_USER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\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.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dbNameSuffix = new RandomId(\"dbNameSuffix\", RandomIdArgs.builder() \n .byteLength(4)\n .build());\n\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder() \n .databaseVersion(\"POSTGRES_9_6\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .databaseFlags(DatabaseInstanceSettingsDatabaseFlagArgs.builder()\n .name(\"cloudsql.iam_authentication\")\n .value(\"on\")\n .build())\n .build())\n .build());\n\n var users = new User(\"users\", UserArgs.builder() \n .instance(main.name())\n .type(\"CLOUD_IAM_USER\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dbNameSuffix:\n type: random:RandomId\n properties:\n byteLength: 4\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n databaseVersion: POSTGRES_9_6\n settings:\n tier: db-f1-micro\n databaseFlags:\n - name: cloudsql.iam_authentication\n value: on\n users:\n type: gcp:sql:User\n properties:\n instance: ${main.name}\n type: CLOUD_IAM_USER\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSQL users for MySQL databases can be imported using the `project`, `instance`, `host` and `name`, e.g.\n\n```sh\n $ pulumi import gcp:sql/user:User users my-project/main-instance/my-domain.com/me\n```\n\n SQL users for PostgreSQL databases can be imported using the `project`, `instance` and `name`, e.g.\n\n```sh\n $ pulumi import gcp:sql/user:User users my-project/main-instance/me\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\nExample creating a SQL User.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst dbNameSuffix = new random.RandomId(\"dbNameSuffix\", {byteLength: 4});\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n databaseVersion: \"MYSQL_5_7\",\n settings: {\n tier: \"db-f1-micro\",\n },\n});\nconst users = new gcp.sql.User(\"users\", {\n instance: main.name,\n host: \"me.com\",\n password: \"changeme\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ndb_name_suffix = random.RandomId(\"dbNameSuffix\", byte_length=4)\nmain = gcp.sql.DatabaseInstance(\"main\",\n database_version=\"MYSQL_5_7\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n ))\nusers = gcp.sql.User(\"users\",\n instance=main.name,\n host=\"me.com\",\n password=\"changeme\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dbNameSuffix = new Random.RandomId(\"dbNameSuffix\", new()\n {\n ByteLength = 4,\n });\n\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n DatabaseVersion = \"MYSQL_5_7\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n },\n });\n\n var users = new Gcp.Sql.User(\"users\", new()\n {\n Instance = main.Name,\n Host = \"me.com\",\n Password = \"changeme\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := random.NewRandomId(ctx, \"dbNameSuffix\", \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\tmain, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\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},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = sql.NewUser(ctx, \"users\", \u0026sql.UserArgs{\n\t\t\tInstance: main.Name,\n\t\t\tHost: pulumi.String(\"me.com\"),\n\t\t\tPassword: pulumi.String(\"changeme\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\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.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dbNameSuffix = new RandomId(\"dbNameSuffix\", RandomIdArgs.builder() \n .byteLength(4)\n .build());\n\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder() \n .databaseVersion(\"MYSQL_5_7\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .build())\n .build());\n\n var users = new User(\"users\", UserArgs.builder() \n .instance(main.name())\n .host(\"me.com\")\n .password(\"changeme\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dbNameSuffix:\n type: random:RandomId\n properties:\n byteLength: 4\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n databaseVersion: MYSQL_5_7\n settings:\n tier: db-f1-micro\n users:\n type: gcp:sql:User\n properties:\n instance: ${main.name}\n host: me.com\n password: changeme\n```\n\nExample creating a Cloud IAM User. (For MySQL, specify `cloudsql_iam_authentication`)\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\nimport * as random from \"@pulumi/random\";\n\nconst dbNameSuffix = new random.RandomId(\"dbNameSuffix\", {byteLength: 4});\nconst main = new gcp.sql.DatabaseInstance(\"main\", {\n databaseVersion: \"POSTGRES_9_6\",\n settings: {\n tier: \"db-f1-micro\",\n databaseFlags: [{\n name: \"cloudsql.iam_authentication\",\n value: \"on\",\n }],\n },\n});\nconst users = new gcp.sql.User(\"users\", {\n instance: main.name,\n type: \"CLOUD_IAM_USER\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\nimport pulumi_random as random\n\ndb_name_suffix = random.RandomId(\"dbNameSuffix\", byte_length=4)\nmain = gcp.sql.DatabaseInstance(\"main\",\n database_version=\"POSTGRES_9_6\",\n settings=gcp.sql.DatabaseInstanceSettingsArgs(\n tier=\"db-f1-micro\",\n database_flags=[gcp.sql.DatabaseInstanceSettingsDatabaseFlagArgs(\n name=\"cloudsql.iam_authentication\",\n value=\"on\",\n )],\n ))\nusers = gcp.sql.User(\"users\",\n instance=main.name,\n type=\"CLOUD_IAM_USER\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\nusing Random = Pulumi.Random;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var dbNameSuffix = new Random.RandomId(\"dbNameSuffix\", new()\n {\n ByteLength = 4,\n });\n\n var main = new Gcp.Sql.DatabaseInstance(\"main\", new()\n {\n DatabaseVersion = \"POSTGRES_9_6\",\n Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs\n {\n Tier = \"db-f1-micro\",\n DatabaseFlags = new[]\n {\n new Gcp.Sql.Inputs.DatabaseInstanceSettingsDatabaseFlagArgs\n {\n Name = \"cloudsql.iam_authentication\",\n Value = \"on\",\n },\n },\n },\n });\n\n var users = new Gcp.Sql.User(\"users\", new()\n {\n Instance = main.Name,\n Type = \"CLOUD_IAM_USER\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := random.NewRandomId(ctx, \"dbNameSuffix\", \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\tmain, err := sql.NewDatabaseInstance(ctx, \"main\", \u0026sql.DatabaseInstanceArgs{\n\t\t\tDatabaseVersion: pulumi.String(\"POSTGRES_9_6\"),\n\t\t\tSettings: \u0026sql.DatabaseInstanceSettingsArgs{\n\t\t\t\tTier: pulumi.String(\"db-f1-micro\"),\n\t\t\t\tDatabaseFlags: sql.DatabaseInstanceSettingsDatabaseFlagArray{\n\t\t\t\t\t\u0026sql.DatabaseInstanceSettingsDatabaseFlagArgs{\n\t\t\t\t\t\tName: pulumi.String(\"cloudsql.iam_authentication\"),\n\t\t\t\t\t\tValue: pulumi.String(\"on\"),\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 = sql.NewUser(ctx, \"users\", \u0026sql.UserArgs{\n\t\t\tInstance: main.Name,\n\t\t\tType: pulumi.String(\"CLOUD_IAM_USER\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\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.User;\nimport com.pulumi.gcp.sql.UserArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var dbNameSuffix = new RandomId(\"dbNameSuffix\", RandomIdArgs.builder() \n .byteLength(4)\n .build());\n\n var main = new DatabaseInstance(\"main\", DatabaseInstanceArgs.builder() \n .databaseVersion(\"POSTGRES_9_6\")\n .settings(DatabaseInstanceSettingsArgs.builder()\n .tier(\"db-f1-micro\")\n .databaseFlags(DatabaseInstanceSettingsDatabaseFlagArgs.builder()\n .name(\"cloudsql.iam_authentication\")\n .value(\"on\")\n .build())\n .build())\n .build());\n\n var users = new User(\"users\", UserArgs.builder() \n .instance(main.name())\n .type(\"CLOUD_IAM_USER\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n dbNameSuffix:\n type: random:RandomId\n properties:\n byteLength: 4\n main:\n type: gcp:sql:DatabaseInstance\n properties:\n databaseVersion: POSTGRES_9_6\n settings:\n tier: db-f1-micro\n databaseFlags:\n - name: cloudsql.iam_authentication\n value: on\n users:\n type: gcp:sql:User\n properties:\n instance: ${main.name}\n type: CLOUD_IAM_USER\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nSQL users for MySQL databases can be imported using the `project`, `instance`, `host` and `name`, e.g.\n\n```sh\n $ pulumi import gcp:sql/user:User users my-project/main-instance/my-domain.com/me\n```\n\n SQL users for PostgreSQL databases can be imported using the `project`, `instance` and `name`, e.g.\n\n```sh\n $ pulumi import gcp:sql/user:User users my-project/main-instance/me\n```\n\n ", "properties": { "deletionPolicy": { "type": "string", @@ -189166,7 +190697,7 @@ }, "forceDestroy": { "type": "boolean", - "description": "When deleting a bucket, this\nboolean option will delete all contained objects. If you try to delete a\nbucket that contains objects, the provider will fail that run.\n" + "description": "When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that\ncontains objects, Terraform will fail that run.\n" }, "labels": { "type": "object", @@ -189273,7 +190804,7 @@ }, "forceDestroy": { "type": "boolean", - "description": "When deleting a bucket, this\nboolean option will delete all contained objects. If you try to delete a\nbucket that contains objects, the provider will fail that run.\n" + "description": "When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that\ncontains objects, Terraform will fail that run.\n" }, "labels": { "type": "object", @@ -189369,7 +190900,7 @@ }, "forceDestroy": { "type": "boolean", - "description": "When deleting a bucket, this\nboolean option will delete all contained objects. If you try to delete a\nbucket that contains objects, the provider will fail that run.\n" + "description": "When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that\ncontains objects, Terraform will fail that run.\n" }, "labels": { "type": "object", @@ -189445,7 +190976,7 @@ } }, "gcp:storage/bucketACL:BucketACL": { - "description": "Authoritatively manages a bucket's ACLs in Google cloud storage service (GCS). For more information see\n[the official documentation](https://cloud.google.com/storage/docs/access-control/lists)\nand\n[API](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls).\n\nBucket ACLs can be managed non authoritatively using the `storage_bucket_access_control` resource. Do not use these two resources in conjunction to manage the same bucket.\n\nPermissions can be granted either by ACLs or Cloud IAM policies. In general, permissions granted by Cloud IAM policies do not appear in ACLs, and permissions granted by ACLs do not appear in Cloud IAM policies. The only exception is for ACLs applied directly on a bucket and certain bucket-level Cloud IAM policies, as described in [Cloud IAM relation to ACLs](https://cloud.google.com/storage/docs/access-control/iam#acls).\n\n**NOTE** This resource will not remove the `project-owners-\u003cproject_id\u003e` entity from the `OWNER` role.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\nExample creating an ACL on a bucket with one owner, and one reader.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst image_store = new gcp.storage.Bucket(\"image-store\", {location: \"EU\"});\nconst image_store_acl = new gcp.storage.BucketACL(\"image-store-acl\", {\n bucket: image_store.name,\n roleEntities: [\n \"OWNER:user-my.email@gmail.com\",\n \"READER:group-mygroup\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nimage_store = gcp.storage.Bucket(\"image-store\", location=\"EU\")\nimage_store_acl = gcp.storage.BucketACL(\"image-store-acl\",\n bucket=image_store.name,\n role_entities=[\n \"OWNER:user-my.email@gmail.com\",\n \"READER:group-mygroup\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image_store = new Gcp.Storage.Bucket(\"image-store\", new()\n {\n Location = \"EU\",\n });\n\n var image_store_acl = new Gcp.Storage.BucketACL(\"image-store-acl\", new()\n {\n Bucket = image_store.Name,\n RoleEntities = new[]\n {\n \"OWNER:user-my.email@gmail.com\",\n \"READER:group-mygroup\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 := storage.NewBucket(ctx, \"image-store\", \u0026storage.BucketArgs{\n\t\t\tLocation: pulumi.String(\"EU\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.NewBucketACL(ctx, \"image-store-acl\", \u0026storage.BucketACLArgs{\n\t\t\tBucket: image_store.Name,\n\t\t\tRoleEntities: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"OWNER:user-my.email@gmail.com\"),\n\t\t\t\tpulumi.String(\"READER:group-mygroup\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketACL;\nimport com.pulumi.gcp.storage.BucketACLArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image_store = new Bucket(\"image-store\", BucketArgs.builder() \n .location(\"EU\")\n .build());\n\n var image_store_acl = new BucketACL(\"image-store-acl\", BucketACLArgs.builder() \n .bucket(image_store.name())\n .roleEntities( \n \"OWNER:user-my.email@gmail.com\",\n \"READER:group-mygroup\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n image-store:\n type: gcp:storage:Bucket\n properties:\n location: EU\n image-store-acl:\n type: gcp:storage:BucketACL\n properties:\n bucket: ${[\"image-store\"].name}\n roleEntities:\n - OWNER:user-my.email@gmail.com\n - READER:group-mygroup\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource does not support import. ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\nExample creating an ACL on a bucket with one owner, and one reader.\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst image_store = new gcp.storage.Bucket(\"image-store\", {location: \"EU\"});\nconst image_store_acl = new gcp.storage.BucketACL(\"image-store-acl\", {\n bucket: image_store.name,\n roleEntities: [\n \"OWNER:user-my.email@gmail.com\",\n \"READER:group-mygroup\",\n ],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nimage_store = gcp.storage.Bucket(\"image-store\", location=\"EU\")\nimage_store_acl = gcp.storage.BucketACL(\"image-store-acl\",\n bucket=image_store.name,\n role_entities=[\n \"OWNER:user-my.email@gmail.com\",\n \"READER:group-mygroup\",\n ])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var image_store = new Gcp.Storage.Bucket(\"image-store\", new()\n {\n Location = \"EU\",\n });\n\n var image_store_acl = new Gcp.Storage.BucketACL(\"image-store-acl\", new()\n {\n Bucket = image_store.Name,\n RoleEntities = new[]\n {\n \"OWNER:user-my.email@gmail.com\",\n \"READER:group-mygroup\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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 := storage.NewBucket(ctx, \"image-store\", \u0026storage.BucketArgs{\n\t\t\tLocation: pulumi.String(\"EU\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.NewBucketACL(ctx, \"image-store-acl\", \u0026storage.BucketACLArgs{\n\t\t\tBucket: image_store.Name,\n\t\t\tRoleEntities: pulumi.StringArray{\n\t\t\t\tpulumi.String(\"OWNER:user-my.email@gmail.com\"),\n\t\t\t\tpulumi.String(\"READER:group-mygroup\"),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketACL;\nimport com.pulumi.gcp.storage.BucketACLArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var image_store = new Bucket(\"image-store\", BucketArgs.builder() \n .location(\"EU\")\n .build());\n\n var image_store_acl = new BucketACL(\"image-store-acl\", BucketACLArgs.builder() \n .bucket(image_store.name())\n .roleEntities( \n \"OWNER:user-my.email@gmail.com\",\n \"READER:group-mygroup\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n image-store:\n type: gcp:storage:Bucket\n properties:\n location: EU\n image-store-acl:\n type: gcp:storage:BucketACL\n properties:\n bucket: ${[\"image-store\"].name}\n roleEntities:\n - OWNER:user-my.email@gmail.com\n - READER:group-mygroup\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nThis resource does not support import. ", "properties": { "bucket": { "type": "string", @@ -189526,7 +191057,7 @@ } }, "gcp:storage/bucketAccessControl:BucketAccessControl": { - "description": "Bucket ACLs can be managed authoritatively using the\n`storage_bucket_acl` resource. Do not use these two resources in conjunction to manage the same bucket.\n\nThe BucketAccessControls resource manages the Access Control List\n(ACLs) for a single entity/role pairing on a bucket. ACLs let you specify who\nhas access to your data and to what extent.\n\nThere are three roles that can be assigned to an entity:\n\nREADERs can get the bucket, though no acl property will be returned, and\nlist the bucket's objects. WRITERs are READERs, and they can insert\nobjects into the bucket and delete the bucket's objects. OWNERs are\nWRITERs, and they can get the acl property of a bucket, update a bucket,\nand call all BucketAccessControls methods on the bucket. For more\ninformation, see Access Control, with the caveat that this API uses\nREADER, WRITER, and OWNER instead of READ, WRITE, and FULL_CONTROL.\n\n\nTo get more information about BucketAccessControl, see:\n\n* [API documentation](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/storage/docs/access-control/lists)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Storage Bucket Access Control Public Bucket\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bucket = new gcp.storage.Bucket(\"bucket\", {location: \"US\"});\nconst publicRule = new gcp.storage.BucketAccessControl(\"publicRule\", {\n bucket: bucket.name,\n role: \"READER\",\n entity: \"allUsers\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbucket = gcp.storage.Bucket(\"bucket\", location=\"US\")\npublic_rule = gcp.storage.BucketAccessControl(\"publicRule\",\n bucket=bucket.name,\n role=\"READER\",\n entity=\"allUsers\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Location = \"US\",\n });\n\n var publicRule = new Gcp.Storage.BucketAccessControl(\"publicRule\", new()\n {\n Bucket = bucket.Name,\n Role = \"READER\",\n Entity = \"allUsers\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.NewBucketAccessControl(ctx, \"publicRule\", \u0026storage.BucketAccessControlArgs{\n\t\t\tBucket: bucket.Name,\n\t\t\tRole: pulumi.String(\"READER\"),\n\t\t\tEntity: pulumi.String(\"allUsers\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketAccessControl;\nimport com.pulumi.gcp.storage.BucketAccessControlArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .location(\"US\")\n .build());\n\n var publicRule = new BucketAccessControl(\"publicRule\", BucketAccessControlArgs.builder() \n .bucket(bucket.name())\n .role(\"READER\")\n .entity(\"allUsers\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n publicRule:\n type: gcp:storage:BucketAccessControl\n properties:\n bucket: ${bucket.name}\n role: READER\n entity: allUsers\n bucket:\n type: gcp:storage:Bucket\n properties:\n location: US\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBucketAccessControl can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:storage/bucketAccessControl:BucketAccessControl default {{bucket}}/{{entity}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Storage Bucket Access Control Public Bucket\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst bucket = new gcp.storage.Bucket(\"bucket\", {location: \"US\"});\nconst publicRule = new gcp.storage.BucketAccessControl(\"publicRule\", {\n bucket: bucket.name,\n role: \"READER\",\n entity: \"allUsers\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbucket = gcp.storage.Bucket(\"bucket\", location=\"US\")\npublic_rule = gcp.storage.BucketAccessControl(\"publicRule\",\n bucket=bucket.name,\n role=\"READER\",\n entity=\"allUsers\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Location = \"US\",\n });\n\n var publicRule = new Gcp.Storage.BucketAccessControl(\"publicRule\", new()\n {\n Bucket = bucket.Name,\n Role = \"READER\",\n Entity = \"allUsers\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/storage\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tbucket, err := storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.NewBucketAccessControl(ctx, \"publicRule\", \u0026storage.BucketAccessControlArgs{\n\t\t\tBucket: bucket.Name,\n\t\t\tRole: pulumi.String(\"READER\"),\n\t\t\tEntity: pulumi.String(\"allUsers\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.BucketAccessControl;\nimport com.pulumi.gcp.storage.BucketAccessControlArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .location(\"US\")\n .build());\n\n var publicRule = new BucketAccessControl(\"publicRule\", BucketAccessControlArgs.builder() \n .bucket(bucket.name())\n .role(\"READER\")\n .entity(\"allUsers\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n publicRule:\n type: gcp:storage:BucketAccessControl\n properties:\n bucket: ${bucket.name}\n role: READER\n entity: allUsers\n bucket:\n type: gcp:storage:Bucket\n properties:\n location: US\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nBucketAccessControl can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:storage/bucketAccessControl:BucketAccessControl default {{bucket}}/{{entity}}\n```\n\n ", "properties": { "bucket": { "type": "string", @@ -189850,7 +191381,7 @@ }, "content": { "type": "string", - "description": "Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive.\n", + "description": "Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html).\n", "secret": true }, "contentDisposition": { @@ -189954,7 +191485,7 @@ }, "content": { "type": "string", - "description": "Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive.\n", + "description": "Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html).\n", "secret": true, "willReplaceOnChanges": true }, @@ -190042,7 +191573,7 @@ }, "content": { "type": "string", - "description": "Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive.\n", + "description": "Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html).\n", "secret": true, "willReplaceOnChanges": true }, @@ -190313,7 +191844,7 @@ } }, "gcp:storage/hmacKey:HmacKey": { - "description": "The hmacKeys resource represents an HMAC key within Cloud Storage. The resource\nconsists of a secret and HMAC key metadata. HMAC keys can be used as credentials\nfor service accounts.\n\n\nTo get more information about HmacKey, see:\n\n* [API documentation](https://cloud.google.com/storage/docs/json_api/v1/projects/hmacKeys)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/storage/docs/authentication/managing-hmackeys)\n\n\u003e **Warning:** All arguments including the `secret` value will be stored in the raw\nstate as plain-text. On import, the `secret` value will not be retrieved.\n\n\u003e **Warning:** All arguments including `secret` will be stored in the raw\nstate as plain-text.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Storage Hmac Key\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\n// Create a new service account\nconst serviceAccount = new gcp.serviceaccount.Account(\"serviceAccount\", {accountId: \"my-svc-acc\"});\n//Create the HMAC key for the associated service account\nconst key = new gcp.storage.HmacKey(\"key\", {serviceAccountEmail: serviceAccount.email});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\n# Create a new service account\nservice_account = gcp.service_account.Account(\"serviceAccount\", account_id=\"my-svc-acc\")\n#Create the HMAC key for the associated service account\nkey = gcp.storage.HmacKey(\"key\", service_account_email=service_account.email)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // Create a new service account\n var serviceAccount = new Gcp.ServiceAccount.Account(\"serviceAccount\", new()\n {\n AccountId = \"my-svc-acc\",\n });\n\n //Create the HMAC key for the associated service account\n var key = new Gcp.Storage.HmacKey(\"key\", new()\n {\n ServiceAccountEmail = serviceAccount.Email,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tserviceAccount, err := serviceAccount.NewAccount(ctx, \"serviceAccount\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-svc-acc\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.NewHmacKey(ctx, \"key\", \u0026storage.HmacKeyArgs{\n\t\t\tServiceAccountEmail: serviceAccount.Email,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.storage.HmacKey;\nimport com.pulumi.gcp.storage.HmacKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var serviceAccount = new Account(\"serviceAccount\", AccountArgs.builder() \n .accountId(\"my-svc-acc\")\n .build());\n\n var key = new HmacKey(\"key\", HmacKeyArgs.builder() \n .serviceAccountEmail(serviceAccount.email())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Create a new service account\n serviceAccount:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-svc-acc\n #Create the HMAC key for the associated service account\n key:\n type: gcp:storage:HmacKey\n properties:\n serviceAccountEmail: ${serviceAccount.email}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nHmacKey can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:storage/hmacKey:HmacKey default projects/{{project}}/hmacKeys/{{access_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:storage/hmacKey:HmacKey default {{project}}/{{access_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:storage/hmacKey:HmacKey default {{access_id}}\n```\n\n ", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Storage Hmac Key\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\n// Create a new service account\nconst serviceAccount = new gcp.serviceaccount.Account(\"serviceAccount\", {accountId: \"my-svc-acc\"});\n//Create the HMAC key for the associated service account \nconst key = new gcp.storage.HmacKey(\"key\", {serviceAccountEmail: serviceAccount.email});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\n# Create a new service account\nservice_account = gcp.service_account.Account(\"serviceAccount\", account_id=\"my-svc-acc\")\n#Create the HMAC key for the associated service account \nkey = gcp.storage.HmacKey(\"key\", service_account_email=service_account.email)\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n // Create a new service account\n var serviceAccount = new Gcp.ServiceAccount.Account(\"serviceAccount\", new()\n {\n AccountId = \"my-svc-acc\",\n });\n\n //Create the HMAC key for the associated service account \n var key = new Gcp.Storage.HmacKey(\"key\", new()\n {\n ServiceAccountEmail = serviceAccount.Email,\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tserviceAccount, err := serviceAccount.NewAccount(ctx, \"serviceAccount\", \u0026serviceAccount.AccountArgs{\n\t\t\tAccountId: pulumi.String(\"my-svc-acc\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.NewHmacKey(ctx, \"key\", \u0026storage.HmacKeyArgs{\n\t\t\tServiceAccountEmail: serviceAccount.Email,\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.Account;\nimport com.pulumi.gcp.serviceAccount.AccountArgs;\nimport com.pulumi.gcp.storage.HmacKey;\nimport com.pulumi.gcp.storage.HmacKeyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n var serviceAccount = new Account(\"serviceAccount\", AccountArgs.builder() \n .accountId(\"my-svc-acc\")\n .build());\n\n var key = new HmacKey(\"key\", HmacKeyArgs.builder() \n .serviceAccountEmail(serviceAccount.email())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n # Create a new service account\n serviceAccount:\n type: gcp:serviceAccount:Account\n properties:\n accountId: my-svc-acc\n #Create the HMAC key for the associated service account\n key:\n type: gcp:storage:HmacKey\n properties:\n serviceAccountEmail: ${serviceAccount.email}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nHmacKey can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:storage/hmacKey:HmacKey default projects/{{project}}/hmacKeys/{{access_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:storage/hmacKey:HmacKey default {{project}}/{{access_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:storage/hmacKey:HmacKey default {{access_id}}\n```\n\n ", "properties": { "accessId": { "type": "string", @@ -190970,6 +192501,78 @@ "type": "object" } }, + "gcp:tags/locationTagBinding:LocationTagBinding": { + "description": "## subcategory: \"Tags\"\n\npage_title: \"Google: gcp.tags.LocationTagBinding\"\ndescription: |-\n A LocationTagBinding represents a connection between a TagValue and a Regional cloud resources.\n---\n\n# google\\_tags\\_location\\_tag\\_binding\n\nA TagBinding represents a connection between a TagValue and a Regional cloud resource (currently project, folder, or organization). Once a TagBinding is created, the TagValue is applied to all the descendants of the cloud resource.\n\n\nTo get more information about TagBinding, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/reference/rest/v3/tagBindings)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Location Tag Binding Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.organizations.Project(\"project\", {\n orgId: \"123456789\",\n projectId: \"project_id\",\n});\nconst key = new gcp.tags.TagKey(\"key\", {\n description: \"For keyname resources.\",\n parent: \"organizations/123456789\",\n shortName: \"keyname\",\n});\nconst value = new gcp.tags.TagValue(\"value\", {\n description: \"For valuename resources.\",\n parent: pulumi.interpolate`tagKeys/${key.name}`,\n shortName: \"valuename\",\n});\nconst binding = new gcp.tags.LocationTagBinding(\"binding\", {\n location: \"us-central1\",\n parent: pulumi.interpolate`//run.googleapis.com/projects/${project.number}/locations/${google_cloud_run_service[\"default\"].location}/services/${google_cloud_run_service[\"default\"].name}`,\n tagValue: pulumi.interpolate`tagValues/${value.name}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.Project(\"project\",\n org_id=\"123456789\",\n project_id=\"project_id\")\nkey = gcp.tags.TagKey(\"key\",\n description=\"For keyname resources.\",\n parent=\"organizations/123456789\",\n short_name=\"keyname\")\nvalue = gcp.tags.TagValue(\"value\",\n description=\"For valuename resources.\",\n parent=key.name.apply(lambda name: f\"tagKeys/{name}\"),\n short_name=\"valuename\")\nbinding = gcp.tags.LocationTagBinding(\"binding\",\n location=\"us-central1\",\n parent=project.number.apply(lambda number: f\"//run.googleapis.com/projects/{number}/locations/{google_cloud_run_service['default']['location']}/services/{google_cloud_run_service['default']['name']}\"),\n tag_value=value.name.apply(lambda name: f\"tagValues/{name}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n OrgId = \"123456789\",\n ProjectId = \"project_id\",\n });\n\n var key = new Gcp.Tags.TagKey(\"key\", new()\n {\n Description = \"For keyname resources.\",\n Parent = \"organizations/123456789\",\n ShortName = \"keyname\",\n });\n\n var @value = new Gcp.Tags.TagValue(\"value\", new()\n {\n Description = \"For valuename resources.\",\n Parent = key.Name.Apply(name =\u003e $\"tagKeys/{name}\"),\n ShortName = \"valuename\",\n });\n\n var binding = new Gcp.Tags.LocationTagBinding(\"binding\", new()\n {\n Location = \"us-central1\",\n Parent = project.Number.Apply(number =\u003e $\"//run.googleapis.com/projects/{number}/locations/{google_cloud_run_service.Default.Location}/services/{google_cloud_run_service.Default.Name}\"),\n TagValue = @value.Name.Apply(name =\u003e $\"tagValues/{name}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/tags\"\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\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tProjectId: pulumi.String(\"project_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkey, err := tags.NewTagKey(ctx, \"key\", \u0026tags.TagKeyArgs{\n\t\t\tDescription: pulumi.String(\"For keyname resources.\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tShortName: pulumi.String(\"keyname\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvalue, err := tags.NewTagValue(ctx, \"value\", \u0026tags.TagValueArgs{\n\t\t\tDescription: pulumi.String(\"For valuename resources.\"),\n\t\t\tParent: key.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"tagKeys/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tShortName: pulumi.String(\"valuename\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = tags.NewLocationTagBinding(ctx, \"binding\", \u0026tags.LocationTagBindingArgs{\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tParent: project.Number.ApplyT(func(number string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"//run.googleapis.com/projects/%v/locations/%v/services/%v\", number, google_cloud_run_service.Default.Location, google_cloud_run_service.Default.Name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tTagValue: value.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"tagValues/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.tags.LocationTagBinding;\nimport com.pulumi.gcp.tags.LocationTagBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .orgId(\"123456789\")\n .projectId(\"project_id\")\n .build());\n\n var key = new TagKey(\"key\", TagKeyArgs.builder() \n .description(\"For keyname resources.\")\n .parent(\"organizations/123456789\")\n .shortName(\"keyname\")\n .build());\n\n var value = new TagValue(\"value\", TagValueArgs.builder() \n .description(\"For valuename resources.\")\n .parent(key.name().applyValue(name -\u003e String.format(\"tagKeys/%s\", name)))\n .shortName(\"valuename\")\n .build());\n\n var binding = new LocationTagBinding(\"binding\", LocationTagBindingArgs.builder() \n .location(\"us-central1\")\n .parent(project.number().applyValue(number -\u003e String.format(\"//run.googleapis.com/projects/%s/locations/%s/services/%s\", number,google_cloud_run_service.default().location(),google_cloud_run_service.default().name())))\n .tagValue(value.name().applyValue(name -\u003e String.format(\"tagValues/%s\", name)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n orgId: '123456789'\n projectId: project_id\n key:\n type: gcp:tags:TagKey\n properties:\n description: For keyname resources.\n parent: organizations/123456789\n shortName: keyname\n value:\n type: gcp:tags:TagValue\n properties:\n description: For valuename resources.\n parent: tagKeys/${key.name}\n shortName: valuename\n binding:\n type: gcp:tags:LocationTagBinding\n properties:\n location: us-central1\n parent: //run.googleapis.com/projects/${project.number}/locations/${google_cloud_run_service.default.location}/services/${google_cloud_run_service.default.name}\n tagValue: tagValues/${value.name}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nTagBinding can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:tags/locationTagBinding:LocationTagBinding default {{location}}/{{name}}\n```\n\n ", + "properties": { + "location": { + "type": "string", + "description": "Location of the resource.\n" + }, + "name": { + "type": "string", + "description": "The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}`\n" + }, + "parent": { + "type": "string", + "description": "The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123\n" + }, + "tagValue": { + "type": "string", + "description": "The TagValue of the TagBinding. Must be of the form tagValues/456.\n" + } + }, + "required": [ + "name", + "parent", + "tagValue" + ], + "inputProperties": { + "location": { + "type": "string", + "description": "Location of the resource.\n", + "willReplaceOnChanges": true + }, + "parent": { + "type": "string", + "description": "The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123\n", + "willReplaceOnChanges": true + }, + "tagValue": { + "type": "string", + "description": "The TagValue of the TagBinding. Must be of the form tagValues/456.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "parent", + "tagValue" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering LocationTagBinding resources.\n", + "properties": { + "location": { + "type": "string", + "description": "Location of the resource.\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}`\n" + }, + "parent": { + "type": "string", + "description": "The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123\n", + "willReplaceOnChanges": true + }, + "tagValue": { + "type": "string", + "description": "The TagValue of the TagBinding. Must be of the form tagValues/456.\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + } + }, "gcp:tags/tagBinding:TagBinding": { "description": "A TagBinding represents a connection between a TagValue and a cloud resource (currently project, folder, or organization). Once a TagBinding is created, the TagValue is applied to all the descendants of the cloud resource.\n\n\nTo get more information about TagBinding, see:\n\n* [API documentation](https://cloud.google.com/resource-manager/reference/rest/v3/tagBindings)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Tag Binding Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst project = new gcp.organizations.Project(\"project\", {\n orgId: \"123456789\",\n projectId: \"project_id\",\n});\nconst key = new gcp.tags.TagKey(\"key\", {\n description: \"For keyname resources.\",\n parent: \"organizations/123456789\",\n shortName: \"keyname\",\n});\nconst value = new gcp.tags.TagValue(\"value\", {\n description: \"For valuename resources.\",\n parent: pulumi.interpolate`tagKeys/${key.name}`,\n shortName: \"valuename\",\n});\nconst binding = new gcp.tags.TagBinding(\"binding\", {\n parent: pulumi.interpolate`//cloudresourcemanager.googleapis.com/projects/${project.number}`,\n tagValue: pulumi.interpolate`tagValues/${value.name}`,\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nproject = gcp.organizations.Project(\"project\",\n org_id=\"123456789\",\n project_id=\"project_id\")\nkey = gcp.tags.TagKey(\"key\",\n description=\"For keyname resources.\",\n parent=\"organizations/123456789\",\n short_name=\"keyname\")\nvalue = gcp.tags.TagValue(\"value\",\n description=\"For valuename resources.\",\n parent=key.name.apply(lambda name: f\"tagKeys/{name}\"),\n short_name=\"valuename\")\nbinding = gcp.tags.TagBinding(\"binding\",\n parent=project.number.apply(lambda number: f\"//cloudresourcemanager.googleapis.com/projects/{number}\"),\n tag_value=value.name.apply(lambda name: f\"tagValues/{name}\"))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var project = new Gcp.Organizations.Project(\"project\", new()\n {\n OrgId = \"123456789\",\n ProjectId = \"project_id\",\n });\n\n var key = new Gcp.Tags.TagKey(\"key\", new()\n {\n Description = \"For keyname resources.\",\n Parent = \"organizations/123456789\",\n ShortName = \"keyname\",\n });\n\n var @value = new Gcp.Tags.TagValue(\"value\", new()\n {\n Description = \"For valuename resources.\",\n Parent = key.Name.Apply(name =\u003e $\"tagKeys/{name}\"),\n ShortName = \"valuename\",\n });\n\n var binding = new Gcp.Tags.TagBinding(\"binding\", new()\n {\n Parent = project.Number.Apply(number =\u003e $\"//cloudresourcemanager.googleapis.com/projects/{number}\"),\n TagValue = @value.Name.Apply(name =\u003e $\"tagValues/{name}\"),\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/tags\"\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\tOrgId: pulumi.String(\"123456789\"),\n\t\t\tProjectId: pulumi.String(\"project_id\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tkey, err := tags.NewTagKey(ctx, \"key\", \u0026tags.TagKeyArgs{\n\t\t\tDescription: pulumi.String(\"For keyname resources.\"),\n\t\t\tParent: pulumi.String(\"organizations/123456789\"),\n\t\t\tShortName: pulumi.String(\"keyname\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tvalue, err := tags.NewTagValue(ctx, \"value\", \u0026tags.TagValueArgs{\n\t\t\tDescription: pulumi.String(\"For valuename resources.\"),\n\t\t\tParent: key.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"tagKeys/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tShortName: pulumi.String(\"valuename\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = tags.NewTagBinding(ctx, \"binding\", \u0026tags.TagBindingArgs{\n\t\t\tParent: project.Number.ApplyT(func(number string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"//cloudresourcemanager.googleapis.com/projects/%v\", number), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t\tTagValue: value.Name.ApplyT(func(name string) (string, error) {\n\t\t\t\treturn fmt.Sprintf(\"tagValues/%v\", name), nil\n\t\t\t}).(pulumi.StringOutput),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.organizations.Project;\nimport com.pulumi.gcp.organizations.ProjectArgs;\nimport com.pulumi.gcp.tags.TagKey;\nimport com.pulumi.gcp.tags.TagKeyArgs;\nimport com.pulumi.gcp.tags.TagValue;\nimport com.pulumi.gcp.tags.TagValueArgs;\nimport com.pulumi.gcp.tags.TagBinding;\nimport com.pulumi.gcp.tags.TagBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class 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 .orgId(\"123456789\")\n .projectId(\"project_id\")\n .build());\n\n var key = new TagKey(\"key\", TagKeyArgs.builder() \n .description(\"For keyname resources.\")\n .parent(\"organizations/123456789\")\n .shortName(\"keyname\")\n .build());\n\n var value = new TagValue(\"value\", TagValueArgs.builder() \n .description(\"For valuename resources.\")\n .parent(key.name().applyValue(name -\u003e String.format(\"tagKeys/%s\", name)))\n .shortName(\"valuename\")\n .build());\n\n var binding = new TagBinding(\"binding\", TagBindingArgs.builder() \n .parent(project.number().applyValue(number -\u003e String.format(\"//cloudresourcemanager.googleapis.com/projects/%s\", number)))\n .tagValue(value.name().applyValue(name -\u003e String.format(\"tagValues/%s\", name)))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n project:\n type: gcp:organizations:Project\n properties:\n orgId: '123456789'\n projectId: project_id\n key:\n type: gcp:tags:TagKey\n properties:\n description: For keyname resources.\n parent: organizations/123456789\n shortName: keyname\n value:\n type: gcp:tags:TagValue\n properties:\n description: For valuename resources.\n parent: tagKeys/${key.name}\n shortName: valuename\n binding:\n type: gcp:tags:TagBinding\n properties:\n parent: //cloudresourcemanager.googleapis.com/projects/${project.number}\n tagValue: tagValues/${value.name}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nTagBinding can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:tags/tagBinding:TagBinding default tagBindings/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:tags/tagBinding:TagBinding default {{name}}\n```\n\n ", "properties": { @@ -191714,7 +193317,7 @@ } }, "gcp:tpu/node:Node": { - "description": "A Cloud TPU instance.\n\n\nTo get more information about Node, see:\n\n* [API documentation](https://cloud.google.com/tpu/docs/reference/rest/v1/projects.locations.nodes)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/tpu/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### TPU Node Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst available = gcp.tpu.getTensorflowVersions({});\nconst tpu = new gcp.tpu.Node(\"tpu\", {\n zone: \"us-central1-b\",\n acceleratorType: \"v3-8\",\n tensorflowVersion: available.then(available =\u003e available.versions?.[0]),\n cidrBlock: \"10.2.0.0/29\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\navailable = gcp.tpu.get_tensorflow_versions()\ntpu = gcp.tpu.Node(\"tpu\",\n zone=\"us-central1-b\",\n accelerator_type=\"v3-8\",\n tensorflow_version=available.versions[0],\n cidr_block=\"10.2.0.0/29\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var available = Gcp.Tpu.GetTensorflowVersions.Invoke();\n\n var tpu = new Gcp.Tpu.Node(\"tpu\", new()\n {\n Zone = \"us-central1-b\",\n AcceleratorType = \"v3-8\",\n TensorflowVersion = available.Apply(getTensorflowVersionsResult =\u003e getTensorflowVersionsResult.Versions[0]),\n CidrBlock = \"10.2.0.0/29\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/tpu\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tavailable, err := tpu.GetTensorflowVersions(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = tpu.NewNode(ctx, \"tpu\", \u0026tpu.NodeArgs{\n\t\t\tZone: pulumi.String(\"us-central1-b\"),\n\t\t\tAcceleratorType: pulumi.String(\"v3-8\"),\n\t\t\tTensorflowVersion: *pulumi.String(available.Versions[0]),\n\t\t\tCidrBlock: pulumi.String(\"10.2.0.0/29\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.tpu.TpuFunctions;\nimport com.pulumi.gcp.tpu.inputs.GetTensorflowVersionsArgs;\nimport com.pulumi.gcp.tpu.Node;\nimport com.pulumi.gcp.tpu.NodeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var available = TpuFunctions.getTensorflowVersions();\n\n var tpu = new Node(\"tpu\", NodeArgs.builder() \n .zone(\"us-central1-b\")\n .acceleratorType(\"v3-8\")\n .tensorflowVersion(available.applyValue(getTensorflowVersionsResult -\u003e getTensorflowVersionsResult.versions()[0]))\n .cidrBlock(\"10.2.0.0/29\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tpu:\n type: gcp:tpu:Node\n properties:\n zone: us-central1-b\n acceleratorType: v3-8\n tensorflowVersion: ${available.versions[0]}\n cidrBlock: 10.2.0.0/29\nvariables:\n available:\n fn::invoke:\n Function: gcp:tpu:getTensorflowVersions\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### TPU Node Full\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst available = gcp.tpu.getTensorflowVersions({});\nconst network = gcp.compute.getNetwork({\n name: \"default\",\n});\nconst serviceRange = new gcp.compute.GlobalAddress(\"serviceRange\", {\n purpose: \"VPC_PEERING\",\n addressType: \"INTERNAL\",\n prefixLength: 16,\n network: network.then(network =\u003e network.id),\n});\nconst privateServiceConnection = new gcp.servicenetworking.Connection(\"privateServiceConnection\", {\n network: network.then(network =\u003e network.id),\n service: \"servicenetworking.googleapis.com\",\n reservedPeeringRanges: [serviceRange.name],\n});\nconst tpu = new gcp.tpu.Node(\"tpu\", {\n zone: \"us-central1-b\",\n acceleratorType: \"v3-8\",\n tensorflowVersion: available.then(available =\u003e available.versions?.[0]),\n description: \"Google Provider test TPU\",\n useServiceNetworking: true,\n network: privateServiceConnection.network,\n labels: {\n foo: \"bar\",\n },\n schedulingConfig: {\n preemptible: true,\n },\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\navailable = gcp.tpu.get_tensorflow_versions()\nnetwork = gcp.compute.get_network(name=\"default\")\nservice_range = gcp.compute.GlobalAddress(\"serviceRange\",\n purpose=\"VPC_PEERING\",\n address_type=\"INTERNAL\",\n prefix_length=16,\n network=network.id)\nprivate_service_connection = gcp.servicenetworking.Connection(\"privateServiceConnection\",\n network=network.id,\n service=\"servicenetworking.googleapis.com\",\n reserved_peering_ranges=[service_range.name])\ntpu = gcp.tpu.Node(\"tpu\",\n zone=\"us-central1-b\",\n accelerator_type=\"v3-8\",\n tensorflow_version=available.versions[0],\n description=\"Google Provider test TPU\",\n use_service_networking=True,\n network=private_service_connection.network,\n labels={\n \"foo\": \"bar\",\n },\n scheduling_config=gcp.tpu.NodeSchedulingConfigArgs(\n preemptible=True,\n ))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var available = Gcp.Tpu.GetTensorflowVersions.Invoke();\n\n var network = Gcp.Compute.GetNetwork.Invoke(new()\n {\n Name = \"default\",\n });\n\n var serviceRange = new Gcp.Compute.GlobalAddress(\"serviceRange\", new()\n {\n Purpose = \"VPC_PEERING\",\n AddressType = \"INTERNAL\",\n PrefixLength = 16,\n Network = network.Apply(getNetworkResult =\u003e getNetworkResult.Id),\n });\n\n var privateServiceConnection = new Gcp.ServiceNetworking.Connection(\"privateServiceConnection\", new()\n {\n Network = network.Apply(getNetworkResult =\u003e getNetworkResult.Id),\n Service = \"servicenetworking.googleapis.com\",\n ReservedPeeringRanges = new[]\n {\n serviceRange.Name,\n },\n });\n\n var tpu = new Gcp.Tpu.Node(\"tpu\", new()\n {\n Zone = \"us-central1-b\",\n AcceleratorType = \"v3-8\",\n TensorflowVersion = available.Apply(getTensorflowVersionsResult =\u003e getTensorflowVersionsResult.Versions[0]),\n Description = \"Google Provider test TPU\",\n UseServiceNetworking = true,\n Network = privateServiceConnection.Network,\n Labels = \n {\n { \"foo\", \"bar\" },\n },\n SchedulingConfig = new Gcp.Tpu.Inputs.NodeSchedulingConfigArgs\n {\n Preemptible = true,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicenetworking\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/tpu\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tavailable, err := tpu.GetTensorflowVersions(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tnetwork, 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\tserviceRange, err := compute.NewGlobalAddress(ctx, \"serviceRange\", \u0026compute.GlobalAddressArgs{\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: *pulumi.String(network.Id),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tprivateServiceConnection, err := servicenetworking.NewConnection(ctx, \"privateServiceConnection\", \u0026servicenetworking.ConnectionArgs{\n\t\t\tNetwork: *pulumi.String(network.Id),\n\t\t\tService: pulumi.String(\"servicenetworking.googleapis.com\"),\n\t\t\tReservedPeeringRanges: pulumi.StringArray{\n\t\t\t\tserviceRange.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 = tpu.NewNode(ctx, \"tpu\", \u0026tpu.NodeArgs{\n\t\t\tZone: pulumi.String(\"us-central1-b\"),\n\t\t\tAcceleratorType: pulumi.String(\"v3-8\"),\n\t\t\tTensorflowVersion: *pulumi.String(available.Versions[0]),\n\t\t\tDescription: pulumi.String(\"Google Provider test TPU\"),\n\t\t\tUseServiceNetworking: pulumi.Bool(true),\n\t\t\tNetwork: privateServiceConnection.Network,\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"foo\": pulumi.String(\"bar\"),\n\t\t\t},\n\t\t\tSchedulingConfig: \u0026tpu.NodeSchedulingConfigArgs{\n\t\t\t\tPreemptible: 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.tpu.TpuFunctions;\nimport com.pulumi.gcp.tpu.inputs.GetTensorflowVersionsArgs;\nimport com.pulumi.gcp.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetNetworkArgs;\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.tpu.Node;\nimport com.pulumi.gcp.tpu.NodeArgs;\nimport com.pulumi.gcp.tpu.inputs.NodeSchedulingConfigArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var available = TpuFunctions.getTensorflowVersions();\n\n final var network = ComputeFunctions.getNetwork(GetNetworkArgs.builder()\n .name(\"default\")\n .build());\n\n var serviceRange = new GlobalAddress(\"serviceRange\", GlobalAddressArgs.builder() \n .purpose(\"VPC_PEERING\")\n .addressType(\"INTERNAL\")\n .prefixLength(16)\n .network(network.applyValue(getNetworkResult -\u003e getNetworkResult.id()))\n .build());\n\n var privateServiceConnection = new Connection(\"privateServiceConnection\", ConnectionArgs.builder() \n .network(network.applyValue(getNetworkResult -\u003e getNetworkResult.id()))\n .service(\"servicenetworking.googleapis.com\")\n .reservedPeeringRanges(serviceRange.name())\n .build());\n\n var tpu = new Node(\"tpu\", NodeArgs.builder() \n .zone(\"us-central1-b\")\n .acceleratorType(\"v3-8\")\n .tensorflowVersion(available.applyValue(getTensorflowVersionsResult -\u003e getTensorflowVersionsResult.versions()[0]))\n .description(\"Google Provider test TPU\")\n .useServiceNetworking(true)\n .network(privateServiceConnection.network())\n .labels(Map.of(\"foo\", \"bar\"))\n .schedulingConfig(NodeSchedulingConfigArgs.builder()\n .preemptible(true)\n .build())\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tpu:\n type: gcp:tpu:Node\n properties:\n zone: us-central1-b\n acceleratorType: v3-8\n tensorflowVersion: ${available.versions[0]}\n description: Google Provider test TPU\n useServiceNetworking: true\n network: ${privateServiceConnection.network}\n labels:\n foo: bar\n schedulingConfig:\n preemptible: true\n serviceRange:\n type: gcp:compute:GlobalAddress\n properties:\n purpose: VPC_PEERING\n addressType: INTERNAL\n prefixLength: 16\n network: ${network.id}\n privateServiceConnection:\n type: gcp:servicenetworking:Connection\n properties:\n network: ${network.id}\n service: servicenetworking.googleapis.com\n reservedPeeringRanges:\n - ${serviceRange.name}\nvariables:\n available:\n fn::invoke:\n Function: gcp:tpu:getTensorflowVersions\n Arguments: {}\n network:\n fn::invoke:\n Function: gcp:compute:getNetwork\n Arguments:\n name: default\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nNode can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:tpu/node:Node default projects/{{project}}/locations/{{zone}}/nodes/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:tpu/node:Node default {{project}}/{{zone}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:tpu/node:Node default {{zone}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:tpu/node:Node default {{name}}\n```\n\n ", + "description": "A Cloud TPU instance.\n\n\nTo get more information about Node, see:\n\n* [API documentation](https://cloud.google.com/tpu/docs/reference/rest/v1/projects.locations.nodes)\n* How-to Guides\n * [Official Documentation](https://cloud.google.com/tpu/docs/)\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### TPU Node Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst available = gcp.tpu.getTensorflowVersions({});\nconst tpu = new gcp.tpu.Node(\"tpu\", {\n zone: \"us-central1-b\",\n acceleratorType: \"v3-8\",\n tensorflowVersion: available.then(available =\u003e available.versions?.[0]),\n cidrBlock: \"10.2.0.0/29\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\navailable = gcp.tpu.get_tensorflow_versions()\ntpu = gcp.tpu.Node(\"tpu\",\n zone=\"us-central1-b\",\n accelerator_type=\"v3-8\",\n tensorflow_version=available.versions[0],\n cidr_block=\"10.2.0.0/29\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var available = Gcp.Tpu.GetTensorflowVersions.Invoke();\n\n var tpu = new Gcp.Tpu.Node(\"tpu\", new()\n {\n Zone = \"us-central1-b\",\n AcceleratorType = \"v3-8\",\n TensorflowVersion = available.Apply(getTensorflowVersionsResult =\u003e getTensorflowVersionsResult.Versions[0]),\n CidrBlock = \"10.2.0.0/29\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/tpu\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tavailable, err := tpu.GetTensorflowVersions(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = tpu.NewNode(ctx, \"tpu\", \u0026tpu.NodeArgs{\n\t\t\tZone: pulumi.String(\"us-central1-b\"),\n\t\t\tAcceleratorType: pulumi.String(\"v3-8\"),\n\t\t\tTensorflowVersion: *pulumi.String(available.Versions[0]),\n\t\t\tCidrBlock: pulumi.String(\"10.2.0.0/29\"),\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.tpu.TpuFunctions;\nimport com.pulumi.gcp.tpu.inputs.GetTensorflowVersionsArgs;\nimport com.pulumi.gcp.tpu.Node;\nimport com.pulumi.gcp.tpu.NodeArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var available = TpuFunctions.getTensorflowVersions();\n\n var tpu = new Node(\"tpu\", NodeArgs.builder() \n .zone(\"us-central1-b\")\n .acceleratorType(\"v3-8\")\n .tensorflowVersion(available.applyValue(getTensorflowVersionsResult -\u003e getTensorflowVersionsResult.versions()[0]))\n .cidrBlock(\"10.2.0.0/29\")\n .build());\n\n }\n}\n```\n```yaml\nresources:\n tpu:\n type: gcp:tpu:Node\n properties:\n zone: us-central1-b\n acceleratorType: v3-8\n tensorflowVersion: ${available.versions[0]}\n cidrBlock: 10.2.0.0/29\nvariables:\n available:\n fn::invoke:\n Function: gcp:tpu:getTensorflowVersions\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nNode can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:tpu/node:Node default projects/{{project}}/locations/{{zone}}/nodes/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:tpu/node:Node default {{project}}/{{zone}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:tpu/node:Node default {{zone}}/{{name}}\n```\n\n\n\n```sh\n $ pulumi import gcp:tpu/node:Node default {{name}}\n```\n\n ", "properties": { "acceleratorType": { "type": "string", @@ -194059,6 +195662,226 @@ }, "type": "object" } + }, + "gcp:workstations/workstationCluster:WorkstationCluster": { + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Workstation Cluster Basic\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultNetwork = new gcp.compute.Network(\"defaultNetwork\", {autoCreateSubnetworks: false}, {\n provider: google_beta,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"defaultSubnetwork\", {\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: defaultNetwork.name,\n}, {\n provider: google_beta,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"defaultWorkstationCluster\", {\n workstationClusterId: \"workstation-cluster\",\n network: defaultNetwork.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n}, {\n provider: google_beta,\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_network = gcp.compute.Network(\"defaultNetwork\", auto_create_subnetworks=False,\nopts=pulumi.ResourceOptions(provider=google_beta))\ndefault_subnetwork = gcp.compute.Subnetwork(\"defaultSubnetwork\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default_network.name,\n opts=pulumi.ResourceOptions(provider=google_beta))\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"defaultWorkstationCluster\",\n workstation_cluster_id=\"workstation-cluster\",\n network=default_network.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n },\n opts=pulumi.ResourceOptions(provider=google_beta))\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultNetwork = new Gcp.Compute.Network(\"defaultNetwork\", new()\n {\n AutoCreateSubnetworks = false,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"defaultSubnetwork\", new()\n {\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = defaultNetwork.Name,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"defaultWorkstationCluster\", new()\n {\n WorkstationClusterId = \"workstation-cluster\",\n Network = defaultNetwork.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\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/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultNetwork, err := compute.NewNetwork(ctx, \"defaultNetwork\", \u0026compute.NetworkArgs{\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"defaultSubnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: defaultNetwork.Name,\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationCluster(ctx, \"defaultWorkstationCluster\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster\"),\n\t\t\tNetwork: defaultNetwork.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, nil, 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.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\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 defaultNetwork = new Network(\"defaultNetwork\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(defaultNetwork.name())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder() \n .workstationClusterId(\"workstation-cluster\")\n .network(defaultNetwork.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n properties:\n workstationClusterId: workstation-cluster\n network: ${defaultNetwork.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n labels:\n label: key\n annotations:\n label-one: value-one\n options:\n provider: ${[\"google-beta\"]}\n defaultNetwork:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n options:\n provider: ${[\"google-beta\"]}\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${defaultNetwork.name}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% example %}}\n### Workstation Cluster Private\n\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst defaultNetwork = new gcp.compute.Network(\"defaultNetwork\", {autoCreateSubnetworks: false}, {\n provider: google_beta,\n});\nconst defaultSubnetwork = new gcp.compute.Subnetwork(\"defaultSubnetwork\", {\n ipCidrRange: \"10.0.0.0/24\",\n region: \"us-central1\",\n network: defaultNetwork.name,\n}, {\n provider: google_beta,\n});\nconst defaultWorkstationCluster = new gcp.workstations.WorkstationCluster(\"defaultWorkstationCluster\", {\n workstationClusterId: \"workstation-cluster-private\",\n network: defaultNetwork.id,\n subnetwork: defaultSubnetwork.id,\n location: \"us-central1\",\n privateClusterConfig: {\n enablePrivateEndpoint: true,\n },\n labels: {\n label: \"key\",\n },\n annotations: {\n \"label-one\": \"value-one\",\n },\n}, {\n provider: google_beta,\n});\nconst project = gcp.organizations.getProject({});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndefault_network = gcp.compute.Network(\"defaultNetwork\", auto_create_subnetworks=False,\nopts=pulumi.ResourceOptions(provider=google_beta))\ndefault_subnetwork = gcp.compute.Subnetwork(\"defaultSubnetwork\",\n ip_cidr_range=\"10.0.0.0/24\",\n region=\"us-central1\",\n network=default_network.name,\n opts=pulumi.ResourceOptions(provider=google_beta))\ndefault_workstation_cluster = gcp.workstations.WorkstationCluster(\"defaultWorkstationCluster\",\n workstation_cluster_id=\"workstation-cluster-private\",\n network=default_network.id,\n subnetwork=default_subnetwork.id,\n location=\"us-central1\",\n private_cluster_config=gcp.workstations.WorkstationClusterPrivateClusterConfigArgs(\n enable_private_endpoint=True,\n ),\n labels={\n \"label\": \"key\",\n },\n annotations={\n \"label-one\": \"value-one\",\n },\n opts=pulumi.ResourceOptions(provider=google_beta))\nproject = gcp.organizations.get_project()\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var defaultNetwork = new Gcp.Compute.Network(\"defaultNetwork\", new()\n {\n AutoCreateSubnetworks = false,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var defaultSubnetwork = new Gcp.Compute.Subnetwork(\"defaultSubnetwork\", new()\n {\n IpCidrRange = \"10.0.0.0/24\",\n Region = \"us-central1\",\n Network = defaultNetwork.Name,\n }, new CustomResourceOptions\n {\n Provider = google_beta,\n });\n\n var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster(\"defaultWorkstationCluster\", new()\n {\n WorkstationClusterId = \"workstation-cluster-private\",\n Network = defaultNetwork.Id,\n Subnetwork = defaultSubnetwork.Id,\n Location = \"us-central1\",\n PrivateClusterConfig = new Gcp.Workstations.Inputs.WorkstationClusterPrivateClusterConfigArgs\n {\n EnablePrivateEndpoint = true,\n },\n Labels = \n {\n { \"label\", \"key\" },\n },\n Annotations = \n {\n { \"label-one\", \"value-one\" },\n },\n }, new CustomResourceOptions\n {\n Provider = google_beta,\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/v6/go/gcp/compute\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/workstations\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\tdefaultNetwork, err := compute.NewNetwork(ctx, \"defaultNetwork\", \u0026compute.NetworkArgs{\n\t\t\tAutoCreateSubnetworks: pulumi.Bool(false),\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tdefaultSubnetwork, err := compute.NewSubnetwork(ctx, \"defaultSubnetwork\", \u0026compute.SubnetworkArgs{\n\t\t\tIpCidrRange: pulumi.String(\"10.0.0.0/24\"),\n\t\t\tRegion: pulumi.String(\"us-central1\"),\n\t\t\tNetwork: defaultNetwork.Name,\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = workstations.NewWorkstationCluster(ctx, \"defaultWorkstationCluster\", \u0026workstations.WorkstationClusterArgs{\n\t\t\tWorkstationClusterId: pulumi.String(\"workstation-cluster-private\"),\n\t\t\tNetwork: defaultNetwork.ID(),\n\t\t\tSubnetwork: defaultSubnetwork.ID(),\n\t\t\tLocation: pulumi.String(\"us-central1\"),\n\t\t\tPrivateClusterConfig: \u0026workstations.WorkstationClusterPrivateClusterConfigArgs{\n\t\t\t\tEnablePrivateEndpoint: pulumi.Bool(true),\n\t\t\t},\n\t\t\tLabels: pulumi.StringMap{\n\t\t\t\t\"label\": pulumi.String(\"key\"),\n\t\t\t},\n\t\t\tAnnotations: pulumi.StringMap{\n\t\t\t\t\"label-one\": pulumi.String(\"value-one\"),\n\t\t\t},\n\t\t}, pulumi.Provider(google_beta))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = organizations.LookupProject(ctx, nil, 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.compute.Network;\nimport com.pulumi.gcp.compute.NetworkArgs;\nimport com.pulumi.gcp.compute.Subnetwork;\nimport com.pulumi.gcp.compute.SubnetworkArgs;\nimport com.pulumi.gcp.workstations.WorkstationCluster;\nimport com.pulumi.gcp.workstations.WorkstationClusterArgs;\nimport com.pulumi.gcp.workstations.inputs.WorkstationClusterPrivateClusterConfigArgs;\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 defaultNetwork = new Network(\"defaultNetwork\", NetworkArgs.builder() \n .autoCreateSubnetworks(false)\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultSubnetwork = new Subnetwork(\"defaultSubnetwork\", SubnetworkArgs.builder() \n .ipCidrRange(\"10.0.0.0/24\")\n .region(\"us-central1\")\n .network(defaultNetwork.name())\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n var defaultWorkstationCluster = new WorkstationCluster(\"defaultWorkstationCluster\", WorkstationClusterArgs.builder() \n .workstationClusterId(\"workstation-cluster-private\")\n .network(defaultNetwork.id())\n .subnetwork(defaultSubnetwork.id())\n .location(\"us-central1\")\n .privateClusterConfig(WorkstationClusterPrivateClusterConfigArgs.builder()\n .enablePrivateEndpoint(true)\n .build())\n .labels(Map.of(\"label\", \"key\"))\n .annotations(Map.of(\"label-one\", \"value-one\"))\n .build(), CustomResourceOptions.builder()\n .provider(google_beta)\n .build());\n\n final var project = OrganizationsFunctions.getProject();\n\n }\n}\n```\n```yaml\nresources:\n defaultWorkstationCluster:\n type: gcp:workstations:WorkstationCluster\n properties:\n workstationClusterId: workstation-cluster-private\n network: ${defaultNetwork.id}\n subnetwork: ${defaultSubnetwork.id}\n location: us-central1\n privateClusterConfig:\n enablePrivateEndpoint: true\n labels:\n label: key\n annotations:\n label-one: value-one\n options:\n provider: ${[\"google-beta\"]}\n defaultNetwork:\n type: gcp:compute:Network\n properties:\n autoCreateSubnetworks: false\n options:\n provider: ${[\"google-beta\"]}\n defaultSubnetwork:\n type: gcp:compute:Subnetwork\n properties:\n ipCidrRange: 10.0.0.0/24\n region: us-central1\n network: ${defaultNetwork.name}\n options:\n provider: ${[\"google-beta\"]}\nvariables:\n project:\n fn::invoke:\n Function: gcp:organizations:getProject\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}\n\n## Import\n\nWorkstationCluster can be imported using any of these accepted formats\n\n```sh\n $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{project}}/{{location}}/{{workstation_cluster_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{location}}/{{workstation_cluster_id}}\n```\n\n\n\n```sh\n $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{workstation_cluster_id}}\n```\n\n ", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Client-specified annotations. This is distinct from labels.\n" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/types/gcp:workstations/WorkstationClusterCondition:WorkstationClusterCondition" + }, + "description": "Status conditions describing the current resource state.\nStructure is documented below.\n" + }, + "createTime": { + "type": "string", + "description": "Time the Instance was created in UTC.\n" + }, + "degraded": { + "type": "boolean", + "description": "Whether this resource is in degraded mode, in which case it may require user action to restore full functionality.\nDetails can be found in the conditions field.\n" + }, + "displayName": { + "type": "string", + "description": "Human-readable name for this resource.\n" + }, + "etag": { + "type": "string", + "description": "Checksum computed by the server.\nMay be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding.\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources.\n" + }, + "location": { + "type": "string", + "description": "The location where the workstation cluster should reside.\n" + }, + "name": { + "type": "string", + "description": "The name of the cluster resource.\n" + }, + "network": { + "type": "string", + "description": "The relative resource name of the VPC network on which the instance can be accessed.\nIt is specified in the following form: \"projects/{projectNumber}/global/networks/{network_id}\".\n" + }, + "privateClusterConfig": { + "$ref": "#/types/gcp:workstations/WorkstationClusterPrivateClusterConfig:WorkstationClusterPrivateClusterConfig", + "description": "Configuration for private cluster.\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" + }, + "subnetwork": { + "type": "string", + "description": "Name of the Compute Engine subnetwork in which instances associated with this cluster will be created.\nMust be part of the subnetwork specified for this cluster.\n" + }, + "uid": { + "type": "string", + "description": "The system-generated UID of the resource.\n" + }, + "workstationClusterId": { + "type": "string", + "description": "The ID of the workstation cluster.\n" + } + }, + "required": [ + "conditions", + "createTime", + "degraded", + "etag", + "name", + "network", + "project", + "subnetwork", + "uid", + "workstationClusterId" + ], + "inputProperties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Client-specified annotations. This is distinct from labels.\n" + }, + "displayName": { + "type": "string", + "description": "Human-readable name for this resource.\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources.\n" + }, + "location": { + "type": "string", + "description": "The location where the workstation cluster should reside.\n", + "willReplaceOnChanges": true + }, + "network": { + "type": "string", + "description": "The relative resource name of the VPC network on which the instance can be accessed.\nIt is specified in the following form: \"projects/{projectNumber}/global/networks/{network_id}\".\n", + "willReplaceOnChanges": true + }, + "privateClusterConfig": { + "$ref": "#/types/gcp:workstations/WorkstationClusterPrivateClusterConfig:WorkstationClusterPrivateClusterConfig", + "description": "Configuration for private cluster.\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 + }, + "subnetwork": { + "type": "string", + "description": "Name of the Compute Engine subnetwork in which instances associated with this cluster will be created.\nMust be part of the subnetwork specified for this cluster.\n", + "willReplaceOnChanges": true + }, + "workstationClusterId": { + "type": "string", + "description": "The ID of the workstation cluster.\n", + "willReplaceOnChanges": true + } + }, + "requiredInputs": [ + "network", + "subnetwork", + "workstationClusterId" + ], + "stateInputs": { + "description": "Input properties used for looking up and filtering WorkstationCluster resources.\n", + "properties": { + "annotations": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Client-specified annotations. This is distinct from labels.\n" + }, + "conditions": { + "type": "array", + "items": { + "$ref": "#/types/gcp:workstations/WorkstationClusterCondition:WorkstationClusterCondition" + }, + "description": "Status conditions describing the current resource state.\nStructure is documented below.\n" + }, + "createTime": { + "type": "string", + "description": "Time the Instance was created in UTC.\n" + }, + "degraded": { + "type": "boolean", + "description": "Whether this resource is in degraded mode, in which case it may require user action to restore full functionality.\nDetails can be found in the conditions field.\n" + }, + "displayName": { + "type": "string", + "description": "Human-readable name for this resource.\n" + }, + "etag": { + "type": "string", + "description": "Checksum computed by the server.\nMay be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding.\n" + }, + "labels": { + "type": "object", + "additionalProperties": { + "type": "string" + }, + "description": "Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources.\n" + }, + "location": { + "type": "string", + "description": "The location where the workstation cluster should reside.\n", + "willReplaceOnChanges": true + }, + "name": { + "type": "string", + "description": "The name of the cluster resource.\n" + }, + "network": { + "type": "string", + "description": "The relative resource name of the VPC network on which the instance can be accessed.\nIt is specified in the following form: \"projects/{projectNumber}/global/networks/{network_id}\".\n", + "willReplaceOnChanges": true + }, + "privateClusterConfig": { + "$ref": "#/types/gcp:workstations/WorkstationClusterPrivateClusterConfig:WorkstationClusterPrivateClusterConfig", + "description": "Configuration for private cluster.\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 + }, + "subnetwork": { + "type": "string", + "description": "Name of the Compute Engine subnetwork in which instances associated with this cluster will be created.\nMust be part of the subnetwork specified for this cluster.\n", + "willReplaceOnChanges": true + }, + "uid": { + "type": "string", + "description": "The system-generated UID of the resource.\n" + }, + "workstationClusterId": { + "type": "string", + "description": "The ID of the workstation cluster.\n", + "willReplaceOnChanges": true + } + }, + "type": "object" + } } }, "functions": { @@ -194915,6 +196738,12 @@ "$ref": "#/types/gcp:cloudbuild/getTriggerPubsubConfig:getTriggerPubsubConfig" } }, + "repositoryEventConfigs": { + "type": "array", + "items": { + "$ref": "#/types/gcp:cloudbuild/getTriggerRepositoryEventConfig:getTriggerRepositoryEventConfig" + } + }, "serviceAccount": { "type": "string" }, @@ -194969,6 +196798,7 @@ "location", "name", "pubsubConfigs", + "repositoryEventConfigs", "serviceAccount", "sourceToBuilds", "substitutions", @@ -195073,7 +196903,7 @@ }, "maxInstances": { "type": "integer", - "description": "The limit on the maximum number of function instances that may coexist at a given time.\n" + "description": "The limit on the maximum number of function instances that may coexist at a given time. If unset or set to `0`, the API default will be used.\n" }, "minInstances": { "type": "integer" @@ -195500,8 +197330,7 @@ "type": "array", "items": { "$ref": "#/types/gcp:composer/getEnvironmentConfig:getEnvironmentConfig" - }, - "description": "Configuration parameters for the environment.\n" + } }, "id": { "type": "string", @@ -195888,6 +197717,12 @@ "loadBalancingScheme": { "type": "string" }, + "localityLbPolicies": { + "type": "array", + "items": { + "$ref": "#/types/gcp:compute/getBackendServiceLocalityLbPolicy:getBackendServiceLocalityLbPolicy" + } + }, "localityLbPolicy": { "type": "string" }, @@ -195959,6 +197794,7 @@ "healthChecks", "iaps", "loadBalancingScheme", + "localityLbPolicies", "localityLbPolicy", "logConfigs", "name", @@ -196908,7 +198744,7 @@ } }, "gcp:compute/getInstance:getInstance": { - "description": "Get information about a VM instance resource within GCE. For more information see\n[the official documentation](https://cloud.google.com/compute/docs/instances)\nand\n[API](https://cloud.google.com/compute/docs/reference/latest/instances).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst appserver = gcp.compute.getInstance({\n name: \"primary-application-server\",\n zone: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nappserver = gcp.compute.get_instance(name=\"primary-application-server\",\n zone=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var appserver = Gcp.Compute.GetInstance.Invoke(new()\n {\n Name = \"primary-application-server\",\n Zone = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.LookupInstance(ctx, \u0026compute.LookupInstanceArgs{\n\t\t\tName: pulumi.StringRef(\"primary-application-server\"),\n\t\t\tZone: pulumi.StringRef(\"us-central1-a\"),\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.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 appserver = ComputeFunctions.getInstance(GetInstanceArgs.builder()\n .name(\"primary-application-server\")\n .zone(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n appserver:\n fn::invoke:\n Function: gcp:compute:getInstance\n Arguments:\n name: primary-application-server\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "Get information about a VM instance resource within GCE. For more information see\n[the official documentation](https://cloud.google.com/compute/docs/instances)\nand\n[API](https://cloud.google.com/compute/docs/reference/latest/instances).\n\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst appserver = gcp.compute.getInstance({\n name: \"primary-application-server\",\n zone: \"us-central1-a\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nappserver = gcp.compute.get_instance(name=\"primary-application-server\",\n zone=\"us-central1-a\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var appserver = Gcp.Compute.GetInstance.Invoke(new()\n {\n Name = \"primary-application-server\",\n Zone = \"us-central1-a\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.LookupInstance(ctx, \u0026compute.LookupInstanceArgs{\n\t\t\tName: pulumi.StringRef(\"primary-application-server\"),\n\t\t\tZone: pulumi.StringRef(\"us-central1-a\"),\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.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetInstanceArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 appserver = ComputeFunctions.getInstance(GetInstanceArgs.builder()\n .name(\"primary-application-server\")\n .zone(\"us-central1-a\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n appserver:\n fn::invoke:\n Function: gcp:compute:getInstance\n Arguments:\n name: primary-application-server\n zone: us-central1-a\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getInstance.\n", "properties": { @@ -197572,8 +199408,7 @@ "type": "boolean" }, "name": { - "type": "string", - "description": "The name of the instance template. If you leave\nthis blank, the provider will auto-generate a unique name.\n" + "type": "string" }, "namePrefix": { "type": "string", @@ -198319,7 +200154,6 @@ } }, "gcp:compute/getResourcePolicy:getResourcePolicy": { - "description": "Provide access to a Resource Policy's attributes. For more information see [the official documentation](https://cloud.google.com/compute/docs/disks/scheduled-snapshots) or the [API](https://cloud.google.com/compute/docs/reference/rest/beta/resourcePolicies).\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst daily = gcp.compute.getResourcePolicy({\n name: \"daily\",\n region: \"us-central1\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ndaily = gcp.compute.get_resource_policy(name=\"daily\",\n region=\"us-central1\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var daily = Gcp.Compute.GetResourcePolicy.Invoke(new()\n {\n Name = \"daily\",\n Region = \"us-central1\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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.LookupResourcePolicy(ctx, \u0026compute.LookupResourcePolicyArgs{\n\t\t\tName: \"daily\",\n\t\t\tRegion: pulumi.StringRef(\"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.compute.ComputeFunctions;\nimport com.pulumi.gcp.compute.inputs.GetResourcePolicyArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 daily = ComputeFunctions.getResourcePolicy(GetResourcePolicyArgs.builder()\n .name(\"daily\")\n .region(\"us-central1\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n daily:\n fn::invoke:\n Function: gcp:compute:getResourcePolicy\n Arguments:\n name: daily\n region: us-central1\n```\n", "inputs": { "description": "A collection of arguments for invoking getResourcePolicy.\n", "properties": { @@ -198576,6 +200410,9 @@ "tcpEstablishedIdleTimeoutSec": { "type": "integer" }, + "tcpTimeWaitTimeoutSec": { + "type": "integer" + }, "tcpTransitoryIdleTimeoutSec": { "type": "integer" }, @@ -198600,6 +200437,7 @@ "sourceSubnetworkIpRangesToNat", "subnetworks", "tcpEstablishedIdleTimeoutSec", + "tcpTimeWaitTimeoutSec", "tcpTransitoryIdleTimeoutSec", "udpIdleTimeoutSec", "id" @@ -199795,8 +201633,7 @@ "description": "ID of the project to list available cluster versions for. Should match the project the cluster will be deployed to.\nDefaults to the project that the provider is authenticated with.\n" }, "versionPrefix": { - "type": "string", - "description": "If provided, the provider will only return versions\nthat match the string prefix. For example, `1.11.` will match all `1.11` series\nreleases. Since this is just a string match, it's recommended that you append a\n`.` after minor versions to ensure that prefixes such as `1.1` don't match\nversions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme)\nfor full details on how version strings are formatted.\n" + "type": "string" } }, "type": "object" @@ -200065,8 +201902,7 @@ "description": "A textual description field.\n" }, "dnsName": { - "type": "string", - "description": "The fully qualified DNS name of this zone, e.g. `example.io.`.\n" + "type": "string" }, "id": { "type": "string", @@ -200368,7 +202204,6 @@ } }, "gcp:firebase/getWebApp:getWebApp": { - "description": "A Google Cloud Firebase web application instance\n", "inputs": { "description": "A collection of arguments for invoking getWebApp.\n", "properties": { @@ -200426,7 +202261,6 @@ } }, "gcp:firebase/getWebAppConfig:getWebAppConfig": { - "description": "A Google Cloud Firebase web application configuration\n\nTo get more information about WebApp, see:\n\n* [API documentation](https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects.webApps)\n* How-to Guides\n * [Official Documentation](https://firebase.google.com/)\n", "inputs": { "description": "A collection of arguments for invoking getWebAppConfig.\n", "properties": { @@ -200745,7 +202579,7 @@ } }, "gcp:iam/getWorkloadIdentityPool:getWorkloadIdentityPool": { - "description": "Get a IAM workload identity pool from Google Cloud by its id.\n\u003e **Note:** The following resource requires the Beta IAM role `roles/iam.workloadIdentityPoolAdmin` in order to succeed. `OWNER` and `EDITOR` roles do not include the necessary permissions.\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst foo = gcp.iam.getWorkloadIdentityPool({\n workloadIdentityPoolId: \"foo-pool\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfoo = gcp.iam.get_workload_identity_pool(workload_identity_pool_id=\"foo-pool\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Gcp.Iam.GetWorkloadIdentityPool.Invoke(new()\n {\n WorkloadIdentityPoolId = \"foo-pool\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.LookupWorkloadIdentityPool(ctx, \u0026iam.LookupWorkloadIdentityPoolArgs{\n\t\t\tWorkloadIdentityPoolId: \"foo-pool\",\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.iam.IamFunctions;\nimport com.pulumi.gcp.iam.inputs.GetWorkloadIdentityPoolArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 foo = IamFunctions.getWorkloadIdentityPool(GetWorkloadIdentityPoolArgs.builder()\n .workloadIdentityPoolId(\"foo-pool\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: gcp:iam:getWorkloadIdentityPool\n Arguments:\n workloadIdentityPoolId: foo-pool\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst foo = gcp.iam.getWorkloadIdentityPool({\n workloadIdentityPoolId: \"foo-pool\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfoo = gcp.iam.get_workload_identity_pool(workload_identity_pool_id=\"foo-pool\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Gcp.Iam.GetWorkloadIdentityPool.Invoke(new()\n {\n WorkloadIdentityPoolId = \"foo-pool\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.LookupWorkloadIdentityPool(ctx, \u0026iam.LookupWorkloadIdentityPoolArgs{\n\t\t\tWorkloadIdentityPoolId: \"foo-pool\",\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.iam.IamFunctions;\nimport com.pulumi.gcp.iam.inputs.GetWorkloadIdentityPoolArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 foo = IamFunctions.getWorkloadIdentityPool(GetWorkloadIdentityPoolArgs.builder()\n .workloadIdentityPoolId(\"foo-pool\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: gcp:iam:getWorkloadIdentityPool\n Arguments:\n workloadIdentityPoolId: foo-pool\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getWorkloadIdentityPool.\n", "properties": { @@ -200805,7 +202639,7 @@ } }, "gcp:iam/getWorkloadIdentityPoolProvider:getWorkloadIdentityPoolProvider": { - "description": "Get a IAM workload identity provider from Google Cloud by its id.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst foo = gcp.iam.getWorkloadIdentityPoolProvider({\n workloadIdentityPoolId: \"foo-pool\",\n workloadIdentityPoolProviderId: \"bar-provider\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfoo = gcp.iam.get_workload_identity_pool_provider(workload_identity_pool_id=\"foo-pool\",\n workload_identity_pool_provider_id=\"bar-provider\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Gcp.Iam.GetWorkloadIdentityPoolProvider.Invoke(new()\n {\n WorkloadIdentityPoolId = \"foo-pool\",\n WorkloadIdentityPoolProviderId = \"bar-provider\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.LookupWorkloadIdentityPoolProvider(ctx, \u0026iam.LookupWorkloadIdentityPoolProviderArgs{\n\t\t\tWorkloadIdentityPoolId: \"foo-pool\",\n\t\t\tWorkloadIdentityPoolProviderId: \"bar-provider\",\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.iam.IamFunctions;\nimport com.pulumi.gcp.iam.inputs.GetWorkloadIdentityPoolProviderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 foo = IamFunctions.getWorkloadIdentityPoolProvider(GetWorkloadIdentityPoolProviderArgs.builder()\n .workloadIdentityPoolId(\"foo-pool\")\n .workloadIdentityPoolProviderId(\"bar-provider\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: gcp:iam:getWorkloadIdentityPoolProvider\n Arguments:\n workloadIdentityPoolId: foo-pool\n workloadIdentityPoolProviderId: bar-provider\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst foo = gcp.iam.getWorkloadIdentityPoolProvider({\n workloadIdentityPoolId: \"foo-pool\",\n workloadIdentityPoolProviderId: \"bar-provider\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nfoo = gcp.iam.get_workload_identity_pool_provider(workload_identity_pool_id=\"foo-pool\",\n workload_identity_pool_provider_id=\"bar-provider\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var foo = Gcp.Iam.GetWorkloadIdentityPoolProvider.Invoke(new()\n {\n WorkloadIdentityPoolId = \"foo-pool\",\n WorkloadIdentityPoolProviderId = \"bar-provider\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iam\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := iam.LookupWorkloadIdentityPoolProvider(ctx, \u0026iam.LookupWorkloadIdentityPoolProviderArgs{\n\t\t\tWorkloadIdentityPoolId: \"foo-pool\",\n\t\t\tWorkloadIdentityPoolProviderId: \"bar-provider\",\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.iam.IamFunctions;\nimport com.pulumi.gcp.iam.inputs.GetWorkloadIdentityPoolProviderArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 foo = IamFunctions.getWorkloadIdentityPoolProvider(GetWorkloadIdentityPoolProviderArgs.builder()\n .workloadIdentityPoolId(\"foo-pool\")\n .workloadIdentityPoolProviderId(\"bar-provider\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n foo:\n fn::invoke:\n Function: gcp:iam:getWorkloadIdentityPoolProvider\n Arguments:\n workloadIdentityPoolId: foo-pool\n workloadIdentityPoolProviderId: bar-provider\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getWorkloadIdentityPoolProvider.\n", "properties": { @@ -203154,6 +204988,66 @@ ] } }, + "gcp:secretmanager/getSecretVersionAccess:getSecretVersionAccess": { + "description": "Get a payload of Secret Manager secret's version. It only requires the [Secret Manager Secret Accessor](https://cloud.google.com/secret-manager/docs/access-control#secretmanager.secretAccessor) role. For more information see the [official documentation](https://cloud.google.com/secret-manager/docs/) and [API](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets.versions/access). \n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst basic = gcp.secretmanager.getSecretVersionAccess({\n secret: \"my-secret\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nbasic = gcp.secretmanager.get_secret_version_access(secret=\"my-secret\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var basic = Gcp.SecretManager.GetSecretVersionAccess.Invoke(new()\n {\n Secret = \"my-secret\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\t_, err := secretmanager.GetSecretVersionAccess(ctx, \u0026secretmanager.GetSecretVersionAccessArgs{\n\t\t\tSecret: \"my-secret\",\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.secretmanager.SecretmanagerFunctions;\nimport com.pulumi.gcp.secretmanager.inputs.GetSecretVersionAccessArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 basic = SecretmanagerFunctions.getSecretVersionAccess(GetSecretVersionAccessArgs.builder()\n .secret(\"my-secret\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n basic:\n fn::invoke:\n Function: gcp:secretmanager:getSecretVersionAccess\n Arguments:\n secret: my-secret\n```\n{{% /example %}}\n{{% /examples %}}", + "inputs": { + "description": "A collection of arguments for invoking getSecretVersionAccess.\n", + "properties": { + "project": { + "type": "string", + "description": "The project to get the secret version for. If it\nis not provided, the provider project is used.\n" + }, + "secret": { + "type": "string", + "description": "The secret to get the secret version for.\n" + }, + "version": { + "type": "string", + "description": "The version of the secret to get. If it\nis not provided, the latest version is retrieved.\n" + } + }, + "type": "object", + "required": [ + "secret" + ] + }, + "outputs": { + "description": "A collection of values returned by getSecretVersionAccess.\n", + "properties": { + "id": { + "type": "string", + "description": "The provider-assigned unique ID for this managed resource.\n" + }, + "name": { + "type": "string", + "description": "The resource name of the SecretVersion. Format:\n`projects/{{project}}/secrets/{{secret_id}}/versions/{{version}}`\n" + }, + "project": { + "type": "string" + }, + "secret": { + "type": "string" + }, + "secretData": { + "type": "string", + "description": "The secret data. No larger than 64KiB.\n", + "secret": true + }, + "version": { + "type": "string" + } + }, + "type": "object", + "required": [ + "name", + "project", + "secret", + "secretData", + "version", + "id" + ] + } + }, "gcp:serviceAccount/getAccount:getAccount": { "description": "Get the service account from a project. For more information see\nthe official [API](https://cloud.google.com/compute/docs/access/service-accounts) documentation.\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst objectViewer = gcp.serviceAccount.getAccount({\n accountId: \"object-viewer\",\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\nobject_viewer = gcp.serviceAccount.get_account(account_id=\"object-viewer\")\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var objectViewer = Gcp.ServiceAccount.GetAccount.Invoke(new()\n {\n AccountId = \"object-viewer\",\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount\"\n\t\"github.com/pulumi/pulumi/sdk/v3/go/pulumi\"\n)\n\nfunc main() {\n\tpulumi.Run(func(ctx *pulumi.Context) error {\n\t\t_, err := serviceAccount.GetAccount(ctx, \u0026serviceaccount.GetAccountArgs{\n\t\t\tAccountId: \"object-viewer\",\n\t\t}, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.serviceAccount.ServiceAccountFunctions;\nimport com.pulumi.gcp.serviceAccount.inputs.GetAccountArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic class App {\n public static void main(String[] args) {\n Pulumi.run(App::stack);\n }\n\n public static void stack(Context ctx) {\n final var objectViewer = ServiceAccountFunctions.getAccount(GetAccountArgs.builder()\n .accountId(\"object-viewer\")\n .build());\n\n }\n}\n```\n```yaml\nvariables:\n objectViewer:\n fn::invoke:\n Function: gcp:serviceAccount:getAccount\n Arguments:\n accountId: object-viewer\n```\n\n{{% /example %}}\n{{% /examples %}}", "inputs": { @@ -203294,7 +205188,6 @@ } }, "gcp:serviceAccount/getAccountIdToken:getAccountIdToken": { - "description": "This data source provides a Google OpenID Connect (`oidc`) `id_token`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)).\n\nFor more information see\n[OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken).\n\n{{% examples %}}\n## Example Usage\n\n### ServiceAccount JSON Credential File.\n `gcp.serviceAccount.getAccountIdToken` will use the configured provider credentials\n\n ```hcl\n data \"google_service_account_id_token\" \"oidc\" {\n target_audience = \"https://foo.bar/\"\n }\n\n output \"oidc_token\" {\n value = data.google_service_account_id_token.oidc.id_token\n }\n ```\n\n### Service Account Impersonation.\n `gcp.serviceAccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceAccount.getAccountAccessToken`.\n\n Note: to use the following, you must grant `target_service_account` the\n `roles/iam.serviceAccountTokenCreator` role on itself.\n\n ```hcl\n data \"google_service_account_access_token\" \"impersonated\" {\n provider = google\n target_service_account = \"impersonated-account@project.iam.gserviceaccount.com\"\n delegates = []\n scopes = [\"userinfo-email\", \"cloud-platform\"]\n lifetime = \"300s\"\n }\n\n provider \"google\" {\n alias = \"impersonated\"\n access_token = data.google_service_account_access_token.impersonated.access_token\n }\n\n data \"google_service_account_id_token\" \"oidc\" {\n provider = google.impersonated\n target_service_account = \"impersonated-account@project.iam.gserviceaccount.com\"\n delegates = []\n include_email = true\n target_audience = \"https://foo.bar/\"\n }\n\n output \"oidc_token\" {\n value = data.google_service_account_id_token.oidc.id_token\n }\n ```\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getAccountIdToken.\n", "properties": { @@ -204582,7 +206475,7 @@ } }, "gcp:storage/getProjectServiceAccount:getProjectServiceAccount": { - "description": "Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts).\n\nFor each Google Cloud project, Google maintains a unique service account which\nis used as the identity for various Google Cloud Storage operations, including\noperations involving\n[customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys)\nand those involving\n[storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification).\nThis automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use\nthese customer-managed resources.\n\nThe service account has a well-known, documented naming format which is parameterised on the numeric Google project ID.\nHowever, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which\npresuppose its existence.\nThese actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the\nservice account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys\non the bucket creation page.\n\nUse of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations\nwhich demand its existence, such as specifying it in Cloud IAM policy.\nAlways prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause\nprovider update errors in cases where the service account does not yet exist.\n\n\u003e When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources,\n you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource.\n Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a\n bucket configuration, otherwise the API calls will fail.\n You may need to use `depends_on` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it.\n See the examples here and in the `gcp.storage.Notification` resource.\n\nFor more information see\n[the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount).\n\n{{% examples %}}\n## Example Usage\n{{% example %}}\n### Pub/Sub Notifications\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst gcsAccount = gcp.storage.getProjectServiceAccount({});\nconst binding = new gcp.pubsub.TopicIAMBinding(\"binding\", {\n topic: google_pubsub_topic.topic.name,\n role: \"roles/pubsub.publisher\",\n members: [gcsAccount.then(gcsAccount =\u003e `serviceAccount:${gcsAccount.emailAddress}`)],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ngcs_account = gcp.storage.get_project_service_account()\nbinding = gcp.pubsub.TopicIAMBinding(\"binding\",\n topic=google_pubsub_topic[\"topic\"][\"name\"],\n role=\"roles/pubsub.publisher\",\n members=[f\"serviceAccount:{gcs_account.email_address}\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var gcsAccount = Gcp.Storage.GetProjectServiceAccount.Invoke();\n\n var binding = new Gcp.PubSub.TopicIAMBinding(\"binding\", new()\n {\n Topic = google_pubsub_topic.Topic.Name,\n Role = \"roles/pubsub.publisher\",\n Members = new[]\n {\n $\"serviceAccount:{gcsAccount.Apply(getProjectServiceAccountResult =\u003e getProjectServiceAccountResult.EmailAddress)}\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tgcsAccount, err := storage.GetProjectServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewTopicIAMBinding(ctx, \"binding\", \u0026pubsub.TopicIAMBindingArgs{\n\t\t\tTopic: pulumi.Any(google_pubsub_topic.Topic.Name),\n\t\t\tRole: pulumi.String(\"roles/pubsub.publisher\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:%v\", gcsAccount.EmailAddress)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.StorageFunctions;\nimport com.pulumi.gcp.storage.inputs.GetProjectServiceAccountArgs;\nimport com.pulumi.gcp.pubsub.TopicIAMBinding;\nimport com.pulumi.gcp.pubsub.TopicIAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 gcsAccount = StorageFunctions.getProjectServiceAccount();\n\n var binding = new TopicIAMBinding(\"binding\", TopicIAMBindingArgs.builder() \n .topic(google_pubsub_topic.topic().name())\n .role(\"roles/pubsub.publisher\")\n .members(String.format(\"serviceAccount:%s\", gcsAccount.applyValue(getProjectServiceAccountResult -\u003e getProjectServiceAccountResult.emailAddress())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:pubsub:TopicIAMBinding\n properties:\n topic: ${google_pubsub_topic.topic.name}\n role: roles/pubsub.publisher\n members:\n - serviceAccount:${gcsAccount.emailAddress}\nvariables:\n gcsAccount:\n fn::invoke:\n Function: gcp:storage:getProjectServiceAccount\n Arguments: {}\n```\n\n{{% /example %}}\n{{% example %}}\n### Cloud KMS Keys\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst gcsAccount = gcp.storage.getProjectServiceAccount({});\nconst binding = new gcp.kms.CryptoKeyIAMBinding(\"binding\", {\n cryptoKeyId: \"your-crypto-key-id\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [gcsAccount.then(gcsAccount =\u003e `serviceAccount:${gcsAccount.emailAddress}`)],\n});\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n location: \"US\",\n encryption: {\n defaultKmsKeyName: \"your-crypto-key-id\",\n },\n}, {\n dependsOn: [binding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ngcs_account = gcp.storage.get_project_service_account()\nbinding = gcp.kms.CryptoKeyIAMBinding(\"binding\",\n crypto_key_id=\"your-crypto-key-id\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[f\"serviceAccount:{gcs_account.email_address}\"])\nbucket = gcp.storage.Bucket(\"bucket\",\n location=\"US\",\n encryption=gcp.storage.BucketEncryptionArgs(\n default_kms_key_name=\"your-crypto-key-id\",\n ),\n opts=pulumi.ResourceOptions(depends_on=[binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var gcsAccount = Gcp.Storage.GetProjectServiceAccount.Invoke();\n\n var binding = new Gcp.Kms.CryptoKeyIAMBinding(\"binding\", new()\n {\n CryptoKeyId = \"your-crypto-key-id\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n $\"serviceAccount:{gcsAccount.Apply(getProjectServiceAccountResult =\u003e getProjectServiceAccountResult.EmailAddress)}\",\n },\n });\n\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Location = \"US\",\n Encryption = new Gcp.Storage.Inputs.BucketEncryptionArgs\n {\n DefaultKmsKeyName = \"your-crypto-key-id\",\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n binding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tgcsAccount, err := storage.GetProjectServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbinding, err := kms.NewCryptoKeyIAMBinding(ctx, \"binding\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"your-crypto-key-id\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:%v\", gcsAccount.EmailAddress)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tEncryption: \u0026storage.BucketEncryptionArgs{\n\t\t\t\tDefaultKmsKeyName: pulumi.String(\"your-crypto-key-id\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tbinding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.StorageFunctions;\nimport com.pulumi.gcp.storage.inputs.GetProjectServiceAccountArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.inputs.BucketEncryptionArgs;\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 gcsAccount = StorageFunctions.getProjectServiceAccount();\n\n var binding = new CryptoKeyIAMBinding(\"binding\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(\"your-crypto-key-id\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(String.format(\"serviceAccount:%s\", gcsAccount.applyValue(getProjectServiceAccountResult -\u003e getProjectServiceAccountResult.emailAddress())))\n .build());\n\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .location(\"US\")\n .encryption(BucketEncryptionArgs.builder()\n .defaultKmsKeyName(\"your-crypto-key-id\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(binding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: your-crypto-key-id\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:${gcsAccount.emailAddress}\n bucket:\n type: gcp:storage:Bucket\n properties:\n location: US\n encryption:\n defaultKmsKeyName: your-crypto-key-id\n options:\n dependson:\n - ${binding}\nvariables:\n gcsAccount:\n fn::invoke:\n Function: gcp:storage:getProjectServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}", + "description": "{{% examples %}}\n## Example Usage\n{{% example %}}\n### Pub/Sub Notifications\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst gcsAccount = gcp.storage.getProjectServiceAccount({});\nconst binding = new gcp.pubsub.TopicIAMBinding(\"binding\", {\n topic: google_pubsub_topic.topic.name,\n role: \"roles/pubsub.publisher\",\n members: [gcsAccount.then(gcsAccount =\u003e `serviceAccount:${gcsAccount.emailAddress}`)],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ngcs_account = gcp.storage.get_project_service_account()\nbinding = gcp.pubsub.TopicIAMBinding(\"binding\",\n topic=google_pubsub_topic[\"topic\"][\"name\"],\n role=\"roles/pubsub.publisher\",\n members=[f\"serviceAccount:{gcs_account.email_address}\"])\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var gcsAccount = Gcp.Storage.GetProjectServiceAccount.Invoke();\n\n var binding = new Gcp.PubSub.TopicIAMBinding(\"binding\", new()\n {\n Topic = google_pubsub_topic.Topic.Name,\n Role = \"roles/pubsub.publisher\",\n Members = new[]\n {\n $\"serviceAccount:{gcsAccount.Apply(getProjectServiceAccountResult =\u003e getProjectServiceAccountResult.EmailAddress)}\",\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/pubsub\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tgcsAccount, err := storage.GetProjectServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = pubsub.NewTopicIAMBinding(ctx, \"binding\", \u0026pubsub.TopicIAMBindingArgs{\n\t\t\tTopic: pulumi.Any(google_pubsub_topic.Topic.Name),\n\t\t\tRole: pulumi.String(\"roles/pubsub.publisher\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:%v\", gcsAccount.EmailAddress)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.StorageFunctions;\nimport com.pulumi.gcp.storage.inputs.GetProjectServiceAccountArgs;\nimport com.pulumi.gcp.pubsub.TopicIAMBinding;\nimport com.pulumi.gcp.pubsub.TopicIAMBindingArgs;\nimport java.util.List;\nimport java.util.ArrayList;\nimport java.util.Map;\nimport java.io.File;\nimport java.nio.file.Files;\nimport java.nio.file.Paths;\n\npublic 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 gcsAccount = StorageFunctions.getProjectServiceAccount();\n\n var binding = new TopicIAMBinding(\"binding\", TopicIAMBindingArgs.builder() \n .topic(google_pubsub_topic.topic().name())\n .role(\"roles/pubsub.publisher\")\n .members(String.format(\"serviceAccount:%s\", gcsAccount.applyValue(getProjectServiceAccountResult -\u003e getProjectServiceAccountResult.emailAddress())))\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:pubsub:TopicIAMBinding\n properties:\n topic: ${google_pubsub_topic.topic.name}\n role: roles/pubsub.publisher\n members:\n - serviceAccount:${gcsAccount.emailAddress}\nvariables:\n gcsAccount:\n fn::invoke:\n Function: gcp:storage:getProjectServiceAccount\n Arguments: {}\n```\n\n{{% /example %}}\n{{% example %}}\n### Cloud KMS Keys\n\n```typescript\nimport * as pulumi from \"@pulumi/pulumi\";\nimport * as gcp from \"@pulumi/gcp\";\n\nconst gcsAccount = gcp.storage.getProjectServiceAccount({});\nconst binding = new gcp.kms.CryptoKeyIAMBinding(\"binding\", {\n cryptoKeyId: \"your-crypto-key-id\",\n role: \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members: [gcsAccount.then(gcsAccount =\u003e `serviceAccount:${gcsAccount.emailAddress}`)],\n});\nconst bucket = new gcp.storage.Bucket(\"bucket\", {\n location: \"US\",\n encryption: {\n defaultKmsKeyName: \"your-crypto-key-id\",\n },\n}, {\n dependsOn: [binding],\n});\n```\n```python\nimport pulumi\nimport pulumi_gcp as gcp\n\ngcs_account = gcp.storage.get_project_service_account()\nbinding = gcp.kms.CryptoKeyIAMBinding(\"binding\",\n crypto_key_id=\"your-crypto-key-id\",\n role=\"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n members=[f\"serviceAccount:{gcs_account.email_address}\"])\nbucket = gcp.storage.Bucket(\"bucket\",\n location=\"US\",\n encryption=gcp.storage.BucketEncryptionArgs(\n default_kms_key_name=\"your-crypto-key-id\",\n ),\n opts=pulumi.ResourceOptions(depends_on=[binding]))\n```\n```csharp\nusing System.Collections.Generic;\nusing Pulumi;\nusing Gcp = Pulumi.Gcp;\n\nreturn await Deployment.RunAsync(() =\u003e \n{\n var gcsAccount = Gcp.Storage.GetProjectServiceAccount.Invoke();\n\n var binding = new Gcp.Kms.CryptoKeyIAMBinding(\"binding\", new()\n {\n CryptoKeyId = \"your-crypto-key-id\",\n Role = \"roles/cloudkms.cryptoKeyEncrypterDecrypter\",\n Members = new[]\n {\n $\"serviceAccount:{gcsAccount.Apply(getProjectServiceAccountResult =\u003e getProjectServiceAccountResult.EmailAddress)}\",\n },\n });\n\n var bucket = new Gcp.Storage.Bucket(\"bucket\", new()\n {\n Location = \"US\",\n Encryption = new Gcp.Storage.Inputs.BucketEncryptionArgs\n {\n DefaultKmsKeyName = \"your-crypto-key-id\",\n },\n }, new CustomResourceOptions\n {\n DependsOn = new[]\n {\n binding,\n },\n });\n\n});\n```\n```go\npackage main\n\nimport (\n\t\"fmt\"\n\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms\"\n\t\"github.com/pulumi/pulumi-gcp/sdk/v6/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\tgcsAccount, err := storage.GetProjectServiceAccount(ctx, nil, nil)\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\tbinding, err := kms.NewCryptoKeyIAMBinding(ctx, \"binding\", \u0026kms.CryptoKeyIAMBindingArgs{\n\t\t\tCryptoKeyId: pulumi.String(\"your-crypto-key-id\"),\n\t\t\tRole: pulumi.String(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\"),\n\t\t\tMembers: pulumi.StringArray{\n\t\t\t\tpulumi.String(fmt.Sprintf(\"serviceAccount:%v\", gcsAccount.EmailAddress)),\n\t\t\t},\n\t\t})\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\t_, err = storage.NewBucket(ctx, \"bucket\", \u0026storage.BucketArgs{\n\t\t\tLocation: pulumi.String(\"US\"),\n\t\t\tEncryption: \u0026storage.BucketEncryptionArgs{\n\t\t\t\tDefaultKmsKeyName: pulumi.String(\"your-crypto-key-id\"),\n\t\t\t},\n\t\t}, pulumi.DependsOn([]pulumi.Resource{\n\t\t\tbinding,\n\t\t}))\n\t\tif err != nil {\n\t\t\treturn err\n\t\t}\n\t\treturn nil\n\t})\n}\n```\n```java\npackage generated_program;\n\nimport com.pulumi.Context;\nimport com.pulumi.Pulumi;\nimport com.pulumi.core.Output;\nimport com.pulumi.gcp.storage.StorageFunctions;\nimport com.pulumi.gcp.storage.inputs.GetProjectServiceAccountArgs;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBinding;\nimport com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs;\nimport com.pulumi.gcp.storage.Bucket;\nimport com.pulumi.gcp.storage.BucketArgs;\nimport com.pulumi.gcp.storage.inputs.BucketEncryptionArgs;\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 gcsAccount = StorageFunctions.getProjectServiceAccount();\n\n var binding = new CryptoKeyIAMBinding(\"binding\", CryptoKeyIAMBindingArgs.builder() \n .cryptoKeyId(\"your-crypto-key-id\")\n .role(\"roles/cloudkms.cryptoKeyEncrypterDecrypter\")\n .members(String.format(\"serviceAccount:%s\", gcsAccount.applyValue(getProjectServiceAccountResult -\u003e getProjectServiceAccountResult.emailAddress())))\n .build());\n\n var bucket = new Bucket(\"bucket\", BucketArgs.builder() \n .location(\"US\")\n .encryption(BucketEncryptionArgs.builder()\n .defaultKmsKeyName(\"your-crypto-key-id\")\n .build())\n .build(), CustomResourceOptions.builder()\n .dependsOn(binding)\n .build());\n\n }\n}\n```\n```yaml\nresources:\n binding:\n type: gcp:kms:CryptoKeyIAMBinding\n properties:\n cryptoKeyId: your-crypto-key-id\n role: roles/cloudkms.cryptoKeyEncrypterDecrypter\n members:\n - serviceAccount:${gcsAccount.emailAddress}\n bucket:\n type: gcp:storage:Bucket\n properties:\n location: US\n encryption:\n defaultKmsKeyName: your-crypto-key-id\n options:\n dependson:\n - ${binding}\nvariables:\n gcsAccount:\n fn::invoke:\n Function: gcp:storage:getProjectServiceAccount\n Arguments: {}\n```\n{{% /example %}}\n{{% /examples %}}", "inputs": { "description": "A collection of arguments for invoking getProjectServiceAccount.\n", "properties": { diff --git a/provider/go.mod b/provider/go.mod index 1fb68df308..50094a484d 100644 --- a/provider/go.mod +++ b/provider/go.mod @@ -11,7 +11,7 @@ require ( replace ( github.com/hashicorp/terraform-plugin-sdk/v2 => github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20220824175045-450992f2f5b9 - github.com/hashicorp/terraform-provider-google-beta => github.com/pulumi/terraform-provider-google-beta v0.0.0-20230124184134-2ee3abe07b0c + github.com/hashicorp/terraform-provider-google-beta => github.com/pulumi/terraform-provider-google-beta v0.0.0-20230131222603-7068d3cf5711 github.com/hashicorp/vault => github.com/hashicorp/vault v1.2.0 ) diff --git a/provider/go.sum b/provider/go.sum index 5d62a4d1ac..4d9773fde7 100644 --- a/provider/go.sum +++ b/provider/go.sum @@ -1555,8 +1555,8 @@ github.com/pulumi/terraform-diff-reader v0.0.0-20201211191010-ad4715e9285e h1:Di github.com/pulumi/terraform-diff-reader v0.0.0-20201211191010-ad4715e9285e/go.mod h1:sZ9FUzGO+yM41hsQHs/yIcj/Y993qMdBxBU5mpDmAfQ= github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20220824175045-450992f2f5b9 h1:JMw+t5I+6E8Lna7JF+ghAoOLOl23UIbshJyRNP+K1HU= github.com/pulumi/terraform-plugin-sdk/v2 v2.0.0-20220824175045-450992f2f5b9/go.mod h1:mYPs/uchNcBq7AclQv9QUtSf9iNcfp1Ag21jqTlDf2M= -github.com/pulumi/terraform-provider-google-beta v0.0.0-20230124184134-2ee3abe07b0c h1:tTNB8Nu/ZYSGCFTl+br1tjP+PETAXlVzgeV8hl0RyKs= -github.com/pulumi/terraform-provider-google-beta v0.0.0-20230124184134-2ee3abe07b0c/go.mod h1:Tr+M2PwsgVHLT2QQe13F/ZARUr+YxUcak4AOYalo+Eg= +github.com/pulumi/terraform-provider-google-beta v0.0.0-20230131222603-7068d3cf5711 h1:5Ysh5Be8Pb8xjKcE/Ql3L/sFbcqi1HgBhvTXFZss18o= +github.com/pulumi/terraform-provider-google-beta v0.0.0-20230131222603-7068d3cf5711/go.mod h1:LcpN8YCNx8yB54Hs54Flx34cNVWQys6FIU8ZeeGEU50= github.com/rakyll/embedmd v0.0.0-20171029212350-c8060a0752a2/go.mod h1:7jOTMgqac46PZcF54q6l2hkLEG8op93fZu61KmxWDV4= github.com/rcrowley/go-metrics v0.0.0-20181016184325-3113b8401b8a/go.mod h1:bCqnVzQkZxMG4s8nGwiZ5l3QUCyqpo9Y+/ZMZ9VjZe4= github.com/rivo/uniseg v0.2.0 h1:S1pD9weZBuJdFmowNwbpi7BJ8TNftyUImj/0WQi72jY= diff --git a/provider/resources.go b/provider/resources.go index 63cc9f5a04..fcaf48ff8e 100644 --- a/provider/resources.go +++ b/provider/resources.go @@ -49,6 +49,7 @@ const ( gcpCertificateManager = "CertificateManager" // CertificateManager resources gcpCloudAsset = "CloudAsset" // CloudAsset resources gcpCloudBuild = "CloudBuild" // CloudBuild resources + gcpCloudBuildV2 = "CloudBuildV2" // CloudBuild (2nd Gen) resources gcpCloudDeploy = "CloudDeploy" // CloudDeploy resources gcpCloudFunctions = "CloudFunctions" // CloudFunction resources gcpCloudFunctionsV2 = "CloudFunctionsV2" // CloudFunction (2nd Gen) resources @@ -124,6 +125,7 @@ const ( gcpVertex = "Vertex" // Vertex gcpVpcAccess = "VpcAccess" // VPC Access gcpWorkflows = "Workflows" // Workflows + gcpWorkstations = "Workstations" // Workstations ) var namespaceMap = map[string]string{ @@ -627,6 +629,10 @@ func Provider() tfbridge.ProviderInfo { }, "google_cloudbuild_worker_pool": {Tok: gcpResource(gcpCloudBuild, "WorkerPool")}, + // Cloud Build V2 + "google_cloudbuildv2_connection": {Tok: gcpResource(gcpCloudBuildV2, "Connection")}, + "google_cloudbuildv2_repository": {Tok: gcpResource(gcpCloudBuildV2, "Repository")}, + // Cloud Deploy "google_clouddeploy_delivery_pipeline": {Tok: gcpResource(gcpCloudDeploy, "DeliveryPipeline")}, "google_clouddeploy_target": {Tok: gcpResource(gcpCloudDeploy, "Target")}, @@ -2574,6 +2580,7 @@ func Provider() tfbridge.ProviderInfo { "google_iam_deny_policy": {Tok: gcpResource(gcpIAM, "DenyPolicy")}, "google_iam_workforce_pool": {Tok: gcpResource(gcpIAM, "WorkforcePool")}, "google_iam_workforce_pool_provider": {Tok: gcpResource(gcpIAM, "WorkforcePoolProvider")}, + "google_iam_access_boundary_policy": {Tok: gcpResource(gcpIAM, "AccessBoundaryPolicy")}, // apigee "google_apigee_organization": {Tok: gcpResource(gcpApigee, "Organization")}, @@ -2721,6 +2728,9 @@ func Provider() tfbridge.ProviderInfo { // workflows "google_workflows_workflow": {Tok: gcpResource(gcpWorkflows, "Workflow")}, + // Workstations + "google_workstations_workstation_cluster": {Tok: gcpResource(gcpWorkstations, "WorkstationCluster")}, + //eventarc "google_eventarc_channel": { Tok: gcpResource(gcpEventarc, "Channel"), @@ -2791,9 +2801,10 @@ func Provider() tfbridge.ProviderInfo { }, // tags - "google_tags_tag_key": {Tok: gcpResource(gcpTags, "TagKey")}, - "google_tags_tag_value": {Tok: gcpResource(gcpTags, "TagValue")}, - "google_tags_tag_binding": {Tok: gcpResource(gcpTags, "TagBinding")}, + "google_tags_location_tag_binding": {Tok: gcpResource(gcpTags, "LocationTagBinding")}, + "google_tags_tag_key": {Tok: gcpResource(gcpTags, "TagKey")}, + "google_tags_tag_value": {Tok: gcpResource(gcpTags, "TagValue")}, + "google_tags_tag_binding": {Tok: gcpResource(gcpTags, "TagBinding")}, "google_tags_tag_key_iam_binding": { Tok: gcpResource(gcpTags, "TagKeyIamBinding"), Docs: &tfbridge.DocInfo{ @@ -3413,7 +3424,8 @@ func Provider() tfbridge.ProviderInfo { "google_iap_client": {Tok: gcpDataSource(gcpIAP, "getClient")}, // Secret Manager - "google_secret_manager_secret": {Tok: gcpDataSource(gcpSecretManager, "getSecret")}, + "google_secret_manager_secret": {Tok: gcpDataSource(gcpSecretManager, "getSecret")}, + "google_secret_manager_secret_version_access": {Tok: gcpDataSource(gcpSecretManager, "getSecretVersionAccess")}, // Tags "google_tags_tag_key": {Tok: gcpDataSource(gcpTags, "getTagKey")}, diff --git a/sdk/dotnet/AccessContextManager/AccessLevelCondition.cs b/sdk/dotnet/AccessContextManager/AccessLevelCondition.cs index 086f1b20b5..2abb839fa2 100644 --- a/sdk/dotnet/AccessContextManager/AccessLevelCondition.cs +++ b/sdk/dotnet/AccessContextManager/AccessLevelCondition.cs @@ -32,94 +32,6 @@ namespace Pulumi.Gcp.AccessContextManager /// `billing_project` you defined. /// /// ## Example Usage - /// ### Access Context Manager Access Level Condition Basic - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var access_policy = new Gcp.AccessContextManager.AccessPolicy("access-policy", new() - /// { - /// Parent = "organizations/123456789", - /// Title = "my policy", - /// }); - /// - /// var access_level_service_account = new Gcp.AccessContextManager.AccessLevel("access-level-service-account", new() - /// { - /// Parent = access_policy.Name.Apply(name => $"accessPolicies/{name}"), - /// Title = "tf_test_chromeos_no_lock", - /// Basic = new Gcp.AccessContextManager.Inputs.AccessLevelBasicArgs - /// { - /// Conditions = new[] - /// { - /// new Gcp.AccessContextManager.Inputs.AccessLevelBasicConditionArgs - /// { - /// DevicePolicy = new Gcp.AccessContextManager.Inputs.AccessLevelBasicConditionDevicePolicyArgs - /// { - /// RequireScreenLock = true, - /// OsConstraints = new[] - /// { - /// new Gcp.AccessContextManager.Inputs.AccessLevelBasicConditionDevicePolicyOsConstraintArgs - /// { - /// OsType = "DESKTOP_CHROME_OS", - /// }, - /// }, - /// }, - /// Regions = new[] - /// { - /// "CH", - /// "IT", - /// "US", - /// }, - /// }, - /// }, - /// }, - /// }); - /// - /// var created_later = new Gcp.ServiceAccount.Account("created-later", new() - /// { - /// AccountId = "tf-test", - /// }); - /// - /// var access_level_conditions = new Gcp.AccessContextManager.AccessLevelCondition("access-level-conditions", new() - /// { - /// AccessLevel = access_level_service_account.Name, - /// IpSubnetworks = new[] - /// { - /// "192.0.4.0/24", - /// }, - /// Members = new[] - /// { - /// "user:test@google.com", - /// "user:test2@google.com", - /// created_later.Email.Apply(email => $"serviceAccount:{email}"), - /// }, - /// Negate = false, - /// DevicePolicy = new Gcp.AccessContextManager.Inputs.AccessLevelConditionDevicePolicyArgs - /// { - /// RequireScreenLock = false, - /// RequireAdminApproval = false, - /// RequireCorpOwned = true, - /// OsConstraints = new[] - /// { - /// new Gcp.AccessContextManager.Inputs.AccessLevelConditionDevicePolicyOsConstraintArgs - /// { - /// OsType = "DESKTOP_CHROME_OS", - /// }, - /// }, - /// }, - /// Regions = new[] - /// { - /// "IT", - /// "US", - /// }, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/ApiGateway/Api.cs b/sdk/dotnet/ApiGateway/Api.cs index ae1ed24c4c..274958f68b 100644 --- a/sdk/dotnet/ApiGateway/Api.cs +++ b/sdk/dotnet/ApiGateway/Api.cs @@ -10,14 +10,6 @@ namespace Pulumi.Gcp.ApiGateway { /// - /// A consumable API that can be used by multiple Gateways. - /// - /// To get more information about Api, see: - /// - /// * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart) - /// /// ## Example Usage /// ### Apigateway Api Basic /// diff --git a/sdk/dotnet/ApiGateway/ApiConfig.cs b/sdk/dotnet/ApiGateway/ApiConfig.cs index 0b143d6e10..d8923ca991 100644 --- a/sdk/dotnet/ApiGateway/ApiConfig.cs +++ b/sdk/dotnet/ApiGateway/ApiConfig.cs @@ -10,14 +10,6 @@ namespace Pulumi.Gcp.ApiGateway { /// - /// An API Configuration is an association of an API Controller Config and a Gateway Config - /// - /// To get more information about ApiConfig, see: - /// - /// * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis.configs) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/api-gateway/docs/creating-api-config) - /// /// ## Example Usage /// ### Apigateway Api Config Basic /// diff --git a/sdk/dotnet/ApiGateway/ApiConfigIamBinding.cs b/sdk/dotnet/ApiGateway/ApiConfigIamBinding.cs index 729ce8d2b2..e7d2321e22 100644 --- a/sdk/dotnet/ApiGateway/ApiConfigIamBinding.cs +++ b/sdk/dotnet/ApiGateway/ApiConfigIamBinding.cs @@ -10,102 +10,6 @@ namespace Pulumi.Gcp.ApiGateway { /// - /// Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - /// - /// * `gcp.apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - /// * `gcp.apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - /// * `gcp.apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - /// - /// > **Note:** `gcp.apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiConfigIamBinding` and `gcp.apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_api\_gateway\_api\_config\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ApiGateway.ApiConfigIamPolicy("policy", new() - /// { - /// Api = google_api_gateway_api_config.Api_cfg.Api, - /// ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_api\_config\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ApiGateway.ApiConfigIamBinding("binding", new() - /// { - /// Api = google_api_gateway_api_config.Api_cfg.Api, - /// ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id, - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_api\_config\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ApiGateway.ApiConfigIamMember("member", new() - /// { - /// Api = google_api_gateway_api_config.Api_cfg.Api, - /// ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id, - /// Role = "roles/apigateway.viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ApiGateway/ApiConfigIamMember.cs b/sdk/dotnet/ApiGateway/ApiConfigIamMember.cs index d7abfacadb..209208a66a 100644 --- a/sdk/dotnet/ApiGateway/ApiConfigIamMember.cs +++ b/sdk/dotnet/ApiGateway/ApiConfigIamMember.cs @@ -10,102 +10,6 @@ namespace Pulumi.Gcp.ApiGateway { /// - /// Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - /// - /// * `gcp.apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - /// * `gcp.apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - /// * `gcp.apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - /// - /// > **Note:** `gcp.apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiConfigIamBinding` and `gcp.apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_api\_gateway\_api\_config\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ApiGateway.ApiConfigIamPolicy("policy", new() - /// { - /// Api = google_api_gateway_api_config.Api_cfg.Api, - /// ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_api\_config\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ApiGateway.ApiConfigIamBinding("binding", new() - /// { - /// Api = google_api_gateway_api_config.Api_cfg.Api, - /// ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id, - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_api\_config\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ApiGateway.ApiConfigIamMember("member", new() - /// { - /// Api = google_api_gateway_api_config.Api_cfg.Api, - /// ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id, - /// Role = "roles/apigateway.viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ApiGateway/ApiConfigIamPolicy.cs b/sdk/dotnet/ApiGateway/ApiConfigIamPolicy.cs index 8b344ee355..37de584df9 100644 --- a/sdk/dotnet/ApiGateway/ApiConfigIamPolicy.cs +++ b/sdk/dotnet/ApiGateway/ApiConfigIamPolicy.cs @@ -10,102 +10,6 @@ namespace Pulumi.Gcp.ApiGateway { /// - /// Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - /// - /// * `gcp.apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - /// * `gcp.apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - /// * `gcp.apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - /// - /// > **Note:** `gcp.apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiConfigIamBinding` and `gcp.apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_api\_gateway\_api\_config\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ApiGateway.ApiConfigIamPolicy("policy", new() - /// { - /// Api = google_api_gateway_api_config.Api_cfg.Api, - /// ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_api\_config\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ApiGateway.ApiConfigIamBinding("binding", new() - /// { - /// Api = google_api_gateway_api_config.Api_cfg.Api, - /// ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id, - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_api\_config\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ApiGateway.ApiConfigIamMember("member", new() - /// { - /// Api = google_api_gateway_api_config.Api_cfg.Api, - /// ApiConfig = google_api_gateway_api_config.Api_cfg.Api_config_id, - /// Role = "roles/apigateway.viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ApiGateway/ApiIamBinding.cs b/sdk/dotnet/ApiGateway/ApiIamBinding.cs index 397c0be3ce..4f0f394bb1 100644 --- a/sdk/dotnet/ApiGateway/ApiIamBinding.cs +++ b/sdk/dotnet/ApiGateway/ApiIamBinding.cs @@ -10,102 +10,6 @@ namespace Pulumi.Gcp.ApiGateway { /// - /// Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - /// - /// * `gcp.apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - /// * `gcp.apigateway.ApiIamBinding`: 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 api are preserved. - /// * `gcp.apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - /// - /// > **Note:** `gcp.apigateway.ApiIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiIamBinding` and `gcp.apigateway.ApiIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.apigateway.ApiIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_api\_gateway\_api\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ApiGateway.ApiIamPolicy("policy", new() - /// { - /// Project = google_api_gateway_api.Api.Project, - /// Api = google_api_gateway_api.Api.Api_id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_api\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ApiGateway.ApiIamBinding("binding", new() - /// { - /// Project = google_api_gateway_api.Api.Project, - /// Api = google_api_gateway_api.Api.Api_id, - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_api\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ApiGateway.ApiIamMember("member", new() - /// { - /// Project = google_api_gateway_api.Api.Project, - /// Api = google_api_gateway_api.Api.Api_id, - /// Role = "roles/apigateway.viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ApiGateway/ApiIamMember.cs b/sdk/dotnet/ApiGateway/ApiIamMember.cs index 3c6d3550a2..a9b5392de1 100644 --- a/sdk/dotnet/ApiGateway/ApiIamMember.cs +++ b/sdk/dotnet/ApiGateway/ApiIamMember.cs @@ -10,102 +10,6 @@ namespace Pulumi.Gcp.ApiGateway { /// - /// Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - /// - /// * `gcp.apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - /// * `gcp.apigateway.ApiIamBinding`: 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 api are preserved. - /// * `gcp.apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - /// - /// > **Note:** `gcp.apigateway.ApiIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiIamBinding` and `gcp.apigateway.ApiIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.apigateway.ApiIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_api\_gateway\_api\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ApiGateway.ApiIamPolicy("policy", new() - /// { - /// Project = google_api_gateway_api.Api.Project, - /// Api = google_api_gateway_api.Api.Api_id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_api\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ApiGateway.ApiIamBinding("binding", new() - /// { - /// Project = google_api_gateway_api.Api.Project, - /// Api = google_api_gateway_api.Api.Api_id, - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_api\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ApiGateway.ApiIamMember("member", new() - /// { - /// Project = google_api_gateway_api.Api.Project, - /// Api = google_api_gateway_api.Api.Api_id, - /// Role = "roles/apigateway.viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ApiGateway/ApiIamPolicy.cs b/sdk/dotnet/ApiGateway/ApiIamPolicy.cs index feb7545ca7..9fcd65720e 100644 --- a/sdk/dotnet/ApiGateway/ApiIamPolicy.cs +++ b/sdk/dotnet/ApiGateway/ApiIamPolicy.cs @@ -10,102 +10,6 @@ namespace Pulumi.Gcp.ApiGateway { /// - /// Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - /// - /// * `gcp.apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - /// * `gcp.apigateway.ApiIamBinding`: 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 api are preserved. - /// * `gcp.apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - /// - /// > **Note:** `gcp.apigateway.ApiIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiIamBinding` and `gcp.apigateway.ApiIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.apigateway.ApiIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_api\_gateway\_api\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ApiGateway.ApiIamPolicy("policy", new() - /// { - /// Project = google_api_gateway_api.Api.Project, - /// Api = google_api_gateway_api.Api.Api_id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_api\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ApiGateway.ApiIamBinding("binding", new() - /// { - /// Project = google_api_gateway_api.Api.Project, - /// Api = google_api_gateway_api.Api.Api_id, - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_api\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ApiGateway.ApiIamMember("member", new() - /// { - /// Project = google_api_gateway_api.Api.Project, - /// Api = google_api_gateway_api.Api.Api_id, - /// Role = "roles/apigateway.viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ApiGateway/Gateway.cs b/sdk/dotnet/ApiGateway/Gateway.cs index 448fa14965..fd43ac0e6e 100644 --- a/sdk/dotnet/ApiGateway/Gateway.cs +++ b/sdk/dotnet/ApiGateway/Gateway.cs @@ -10,14 +10,6 @@ namespace Pulumi.Gcp.ApiGateway { /// - /// A consumable API that can be used by multiple Gateways. - /// - /// To get more information about Gateway, see: - /// - /// * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart) - /// /// ## Example Usage /// ### Apigateway Gateway Basic /// diff --git a/sdk/dotnet/ApiGateway/GatewayIamBinding.cs b/sdk/dotnet/ApiGateway/GatewayIamBinding.cs index 25ec656c75..9a8c9f0161 100644 --- a/sdk/dotnet/ApiGateway/GatewayIamBinding.cs +++ b/sdk/dotnet/ApiGateway/GatewayIamBinding.cs @@ -10,105 +10,6 @@ namespace Pulumi.Gcp.ApiGateway { /// - /// Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - /// - /// * `gcp.apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - /// * `gcp.apigateway.GatewayIamBinding`: 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 gateway are preserved. - /// * `gcp.apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - /// - /// > **Note:** `gcp.apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.GatewayIamBinding` and `gcp.apigateway.GatewayIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.apigateway.GatewayIamBinding` resources **can be** used in conjunction with `gcp.apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_api\_gateway\_gateway\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ApiGateway.GatewayIamPolicy("policy", new() - /// { - /// Project = google_api_gateway_gateway.Api_gw.Project, - /// Region = google_api_gateway_gateway.Api_gw.Region, - /// Gateway = google_api_gateway_gateway.Api_gw.Gateway_id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_gateway\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ApiGateway.GatewayIamBinding("binding", new() - /// { - /// Project = google_api_gateway_gateway.Api_gw.Project, - /// Region = google_api_gateway_gateway.Api_gw.Region, - /// Gateway = google_api_gateway_gateway.Api_gw.Gateway_id, - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_gateway\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ApiGateway.GatewayIamMember("member", new() - /// { - /// Project = google_api_gateway_gateway.Api_gw.Project, - /// Region = google_api_gateway_gateway.Api_gw.Region, - /// Gateway = google_api_gateway_gateway.Api_gw.Gateway_id, - /// Role = "roles/apigateway.viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ApiGateway/GatewayIamMember.cs b/sdk/dotnet/ApiGateway/GatewayIamMember.cs index cf36791c09..640fd8a717 100644 --- a/sdk/dotnet/ApiGateway/GatewayIamMember.cs +++ b/sdk/dotnet/ApiGateway/GatewayIamMember.cs @@ -10,105 +10,6 @@ namespace Pulumi.Gcp.ApiGateway { /// - /// Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - /// - /// * `gcp.apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - /// * `gcp.apigateway.GatewayIamBinding`: 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 gateway are preserved. - /// * `gcp.apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - /// - /// > **Note:** `gcp.apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.GatewayIamBinding` and `gcp.apigateway.GatewayIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.apigateway.GatewayIamBinding` resources **can be** used in conjunction with `gcp.apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_api\_gateway\_gateway\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ApiGateway.GatewayIamPolicy("policy", new() - /// { - /// Project = google_api_gateway_gateway.Api_gw.Project, - /// Region = google_api_gateway_gateway.Api_gw.Region, - /// Gateway = google_api_gateway_gateway.Api_gw.Gateway_id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_gateway\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ApiGateway.GatewayIamBinding("binding", new() - /// { - /// Project = google_api_gateway_gateway.Api_gw.Project, - /// Region = google_api_gateway_gateway.Api_gw.Region, - /// Gateway = google_api_gateway_gateway.Api_gw.Gateway_id, - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_gateway\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ApiGateway.GatewayIamMember("member", new() - /// { - /// Project = google_api_gateway_gateway.Api_gw.Project, - /// Region = google_api_gateway_gateway.Api_gw.Region, - /// Gateway = google_api_gateway_gateway.Api_gw.Gateway_id, - /// Role = "roles/apigateway.viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ApiGateway/GatewayIamPolicy.cs b/sdk/dotnet/ApiGateway/GatewayIamPolicy.cs index e5b31eca60..cd71d6a6d6 100644 --- a/sdk/dotnet/ApiGateway/GatewayIamPolicy.cs +++ b/sdk/dotnet/ApiGateway/GatewayIamPolicy.cs @@ -10,105 +10,6 @@ namespace Pulumi.Gcp.ApiGateway { /// - /// Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - /// - /// * `gcp.apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - /// * `gcp.apigateway.GatewayIamBinding`: 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 gateway are preserved. - /// * `gcp.apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - /// - /// > **Note:** `gcp.apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.GatewayIamBinding` and `gcp.apigateway.GatewayIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.apigateway.GatewayIamBinding` resources **can be** used in conjunction with `gcp.apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_api\_gateway\_gateway\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ApiGateway.GatewayIamPolicy("policy", new() - /// { - /// Project = google_api_gateway_gateway.Api_gw.Project, - /// Region = google_api_gateway_gateway.Api_gw.Region, - /// Gateway = google_api_gateway_gateway.Api_gw.Gateway_id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_gateway\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ApiGateway.GatewayIamBinding("binding", new() - /// { - /// Project = google_api_gateway_gateway.Api_gw.Project, - /// Region = google_api_gateway_gateway.Api_gw.Region, - /// Gateway = google_api_gateway_gateway.Api_gw.Gateway_id, - /// Role = "roles/apigateway.viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_api\_gateway\_gateway\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ApiGateway.GatewayIamMember("member", new() - /// { - /// Project = google_api_gateway_gateway.Api_gw.Project, - /// Region = google_api_gateway_gateway.Api_gw.Region, - /// Gateway = google_api_gateway_gateway.Api_gw.Gateway_id, - /// Role = "roles/apigateway.viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/Apigee/EnvGroup.cs b/sdk/dotnet/Apigee/EnvGroup.cs index 80d058b77e..633ce931e5 100644 --- a/sdk/dotnet/Apigee/EnvGroup.cs +++ b/sdk/dotnet/Apigee/EnvGroup.cs @@ -19,61 +19,6 @@ namespace Pulumi.Gcp.Apigee /// * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) /// /// ## Example Usage - /// ### Apigee Environment Group Basic - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var current = Gcp.Organizations.GetClientConfig.Invoke(); - /// - /// var apigeeNetwork = new Gcp.Compute.Network("apigeeNetwork"); - /// - /// var apigeeRange = new Gcp.Compute.GlobalAddress("apigeeRange", new() - /// { - /// Purpose = "VPC_PEERING", - /// AddressType = "INTERNAL", - /// PrefixLength = 16, - /// Network = apigeeNetwork.Id, - /// }); - /// - /// var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection("apigeeVpcConnection", new() - /// { - /// Network = apigeeNetwork.Id, - /// Service = "servicenetworking.googleapis.com", - /// ReservedPeeringRanges = new[] - /// { - /// apigeeRange.Name, - /// }, - /// }); - /// - /// var apigeeOrg = new Gcp.Apigee.Organization("apigeeOrg", new() - /// { - /// AnalyticsRegion = "us-central1", - /// ProjectId = current.Apply(getClientConfigResult => getClientConfigResult.Project), - /// AuthorizedNetwork = apigeeNetwork.Id, - /// }, new CustomResourceOptions - /// { - /// DependsOn = new[] - /// { - /// apigeeVpcConnection, - /// }, - /// }); - /// - /// var envGrp = new Gcp.Apigee.EnvGroup("envGrp", new() - /// { - /// Hostnames = new[] - /// { - /// "abc.foo.com", - /// }, - /// OrgId = apigeeOrg.Id, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Apigee/EnvGroupAttachment.cs b/sdk/dotnet/Apigee/EnvGroupAttachment.cs index 56a53e9af8..5b4aee2b70 100644 --- a/sdk/dotnet/Apigee/EnvGroupAttachment.cs +++ b/sdk/dotnet/Apigee/EnvGroupAttachment.cs @@ -19,114 +19,6 @@ namespace Pulumi.Gcp.Apigee /// * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) /// /// ## Example Usage - /// ### Apigee Environment Group Attachment Basic - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Organizations.Project("project", new() - /// { - /// ProjectId = "tf-test", - /// OrgId = "", - /// BillingAccount = "", - /// }); - /// - /// var apigee = new Gcp.Projects.Service("apigee", new() - /// { - /// Project = project.ProjectId, - /// ServiceName = "apigee.googleapis.com", - /// }); - /// - /// var compute = new Gcp.Projects.Service("compute", new() - /// { - /// Project = project.ProjectId, - /// ServiceName = "compute.googleapis.com", - /// }); - /// - /// var servicenetworking = new Gcp.Projects.Service("servicenetworking", new() - /// { - /// Project = project.ProjectId, - /// ServiceName = "servicenetworking.googleapis.com", - /// }); - /// - /// var apigeeNetwork = new Gcp.Compute.Network("apigeeNetwork", new() - /// { - /// Project = project.ProjectId, - /// }, new CustomResourceOptions - /// { - /// DependsOn = new[] - /// { - /// compute, - /// }, - /// }); - /// - /// var apigeeRange = new Gcp.Compute.GlobalAddress("apigeeRange", new() - /// { - /// Purpose = "VPC_PEERING", - /// AddressType = "INTERNAL", - /// PrefixLength = 16, - /// Network = apigeeNetwork.Id, - /// Project = project.ProjectId, - /// }); - /// - /// var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection("apigeeVpcConnection", new() - /// { - /// Network = apigeeNetwork.Id, - /// Service = "servicenetworking.googleapis.com", - /// ReservedPeeringRanges = new[] - /// { - /// apigeeRange.Name, - /// }, - /// }, new CustomResourceOptions - /// { - /// DependsOn = new[] - /// { - /// servicenetworking, - /// }, - /// }); - /// - /// var apigeeOrg = new Gcp.Apigee.Organization("apigeeOrg", new() - /// { - /// AnalyticsRegion = "us-central1", - /// ProjectId = project.ProjectId, - /// AuthorizedNetwork = apigeeNetwork.Id, - /// }, new CustomResourceOptions - /// { - /// DependsOn = new[] - /// { - /// apigeeVpcConnection, - /// apigee, - /// }, - /// }); - /// - /// var apigeeEnvgroup = new Gcp.Apigee.EnvGroup("apigeeEnvgroup", new() - /// { - /// OrgId = apigeeOrg.Id, - /// Hostnames = new[] - /// { - /// "abc.foo.com", - /// }, - /// }); - /// - /// var apigeeEnv = new Gcp.Apigee.Environment("apigeeEnv", new() - /// { - /// OrgId = apigeeOrg.Id, - /// Description = "Apigee Environment", - /// DisplayName = "tf-test", - /// }); - /// - /// var envGroupAttachment = new Gcp.Apigee.EnvGroupAttachment("envGroupAttachment", new() - /// { - /// EnvgroupId = apigeeEnvgroup.Id, - /// Environment = apigeeEnv.Name, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Apigee/Environment.cs b/sdk/dotnet/Apigee/Environment.cs index 0006bca47b..c92518e1d3 100644 --- a/sdk/dotnet/Apigee/Environment.cs +++ b/sdk/dotnet/Apigee/Environment.cs @@ -19,59 +19,6 @@ namespace Pulumi.Gcp.Apigee /// * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) /// /// ## Example Usage - /// ### Apigee Environment Basic - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var current = Gcp.Organizations.GetClientConfig.Invoke(); - /// - /// var apigeeNetwork = new Gcp.Compute.Network("apigeeNetwork"); - /// - /// var apigeeRange = new Gcp.Compute.GlobalAddress("apigeeRange", new() - /// { - /// Purpose = "VPC_PEERING", - /// AddressType = "INTERNAL", - /// PrefixLength = 16, - /// Network = apigeeNetwork.Id, - /// }); - /// - /// var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection("apigeeVpcConnection", new() - /// { - /// Network = apigeeNetwork.Id, - /// Service = "servicenetworking.googleapis.com", - /// ReservedPeeringRanges = new[] - /// { - /// apigeeRange.Name, - /// }, - /// }); - /// - /// var apigeeOrg = new Gcp.Apigee.Organization("apigeeOrg", new() - /// { - /// AnalyticsRegion = "us-central1", - /// ProjectId = current.Apply(getClientConfigResult => getClientConfigResult.Project), - /// AuthorizedNetwork = apigeeNetwork.Id, - /// }, new CustomResourceOptions - /// { - /// DependsOn = new[] - /// { - /// apigeeVpcConnection, - /// }, - /// }); - /// - /// var env = new Gcp.Apigee.Environment("env", new() - /// { - /// Description = "Apigee Environment", - /// DisplayName = "environment-1", - /// OrgId = apigeeOrg.Id, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Apigee/Instance.cs b/sdk/dotnet/Apigee/Instance.cs index 618a69b773..d2e65df8ec 100644 --- a/sdk/dotnet/Apigee/Instance.cs +++ b/sdk/dotnet/Apigee/Instance.cs @@ -19,252 +19,6 @@ namespace Pulumi.Gcp.Apigee /// * [Creating a runtime instance](https://cloud.google.com/apigee/docs/api-platform/get-started/create-instance) /// /// ## Example Usage - /// ### Apigee Instance Basic - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var current = Gcp.Organizations.GetClientConfig.Invoke(); - /// - /// var apigeeNetwork = new Gcp.Compute.Network("apigeeNetwork"); - /// - /// var apigeeRange = new Gcp.Compute.GlobalAddress("apigeeRange", new() - /// { - /// Purpose = "VPC_PEERING", - /// AddressType = "INTERNAL", - /// PrefixLength = 16, - /// Network = apigeeNetwork.Id, - /// }); - /// - /// var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection("apigeeVpcConnection", new() - /// { - /// Network = apigeeNetwork.Id, - /// Service = "servicenetworking.googleapis.com", - /// ReservedPeeringRanges = new[] - /// { - /// apigeeRange.Name, - /// }, - /// }); - /// - /// var apigeeOrg = new Gcp.Apigee.Organization("apigeeOrg", new() - /// { - /// AnalyticsRegion = "us-central1", - /// ProjectId = current.Apply(getClientConfigResult => getClientConfigResult.Project), - /// AuthorizedNetwork = apigeeNetwork.Id, - /// }, new CustomResourceOptions - /// { - /// DependsOn = new[] - /// { - /// apigeeVpcConnection, - /// }, - /// }); - /// - /// var apigeeInstance = new Gcp.Apigee.Instance("apigeeInstance", new() - /// { - /// Location = "us-central1", - /// OrgId = apigeeOrg.Id, - /// }); - /// - /// }); - /// ``` - /// ### Apigee Instance Cidr Range - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var current = Gcp.Organizations.GetClientConfig.Invoke(); - /// - /// var apigeeNetwork = new Gcp.Compute.Network("apigeeNetwork"); - /// - /// var apigeeRange = new Gcp.Compute.GlobalAddress("apigeeRange", new() - /// { - /// Purpose = "VPC_PEERING", - /// AddressType = "INTERNAL", - /// PrefixLength = 22, - /// Network = apigeeNetwork.Id, - /// }); - /// - /// var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection("apigeeVpcConnection", new() - /// { - /// Network = apigeeNetwork.Id, - /// Service = "servicenetworking.googleapis.com", - /// ReservedPeeringRanges = new[] - /// { - /// apigeeRange.Name, - /// }, - /// }); - /// - /// var apigeeOrg = new Gcp.Apigee.Organization("apigeeOrg", new() - /// { - /// AnalyticsRegion = "us-central1", - /// ProjectId = current.Apply(getClientConfigResult => getClientConfigResult.Project), - /// AuthorizedNetwork = apigeeNetwork.Id, - /// }, new CustomResourceOptions - /// { - /// DependsOn = new[] - /// { - /// apigeeVpcConnection, - /// }, - /// }); - /// - /// var apigeeInstance = new Gcp.Apigee.Instance("apigeeInstance", new() - /// { - /// Location = "us-central1", - /// OrgId = apigeeOrg.Id, - /// PeeringCidrRange = "SLASH_22", - /// }); - /// - /// }); - /// ``` - /// ### Apigee Instance Ip Range - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var current = Gcp.Organizations.GetClientConfig.Invoke(); - /// - /// var apigeeNetwork = new Gcp.Compute.Network("apigeeNetwork"); - /// - /// var apigeeRange = new Gcp.Compute.GlobalAddress("apigeeRange", new() - /// { - /// Purpose = "VPC_PEERING", - /// AddressType = "INTERNAL", - /// PrefixLength = 22, - /// Network = apigeeNetwork.Id, - /// }); - /// - /// var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection("apigeeVpcConnection", new() - /// { - /// Network = apigeeNetwork.Id, - /// Service = "servicenetworking.googleapis.com", - /// ReservedPeeringRanges = new[] - /// { - /// apigeeRange.Name, - /// }, - /// }); - /// - /// var apigeeOrg = new Gcp.Apigee.Organization("apigeeOrg", new() - /// { - /// AnalyticsRegion = "us-central1", - /// ProjectId = current.Apply(getClientConfigResult => getClientConfigResult.Project), - /// AuthorizedNetwork = apigeeNetwork.Id, - /// }, new CustomResourceOptions - /// { - /// DependsOn = new[] - /// { - /// apigeeVpcConnection, - /// }, - /// }); - /// - /// var apigeeInstance = new Gcp.Apigee.Instance("apigeeInstance", new() - /// { - /// Location = "us-central1", - /// OrgId = apigeeOrg.Id, - /// IpRange = "10.87.8.0/22", - /// }); - /// - /// }); - /// ``` - /// ### Apigee Instance Full - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var current = Gcp.Organizations.GetClientConfig.Invoke(); - /// - /// var apigeeNetwork = new Gcp.Compute.Network("apigeeNetwork"); - /// - /// var apigeeRange = new Gcp.Compute.GlobalAddress("apigeeRange", new() - /// { - /// Purpose = "VPC_PEERING", - /// AddressType = "INTERNAL", - /// PrefixLength = 16, - /// Network = apigeeNetwork.Id, - /// }); - /// - /// var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection("apigeeVpcConnection", new() - /// { - /// Network = apigeeNetwork.Id, - /// Service = "servicenetworking.googleapis.com", - /// ReservedPeeringRanges = new[] - /// { - /// apigeeRange.Name, - /// }, - /// }); - /// - /// var apigeeKeyring = new Gcp.Kms.KeyRing("apigeeKeyring", new() - /// { - /// Location = "us-central1", - /// }); - /// - /// var apigeeKey = new Gcp.Kms.CryptoKey("apigeeKey", new() - /// { - /// KeyRing = apigeeKeyring.Id, - /// }); - /// - /// var apigeeSa = new Gcp.Projects.ServiceIdentity("apigeeSa", new() - /// { - /// Project = google_project.Project.Project_id, - /// Service = google_project_service.Apigee.Service, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// var apigeeSaKeyuser = new Gcp.Kms.CryptoKeyIAMBinding("apigeeSaKeyuser", new() - /// { - /// CryptoKeyId = apigeeKey.Id, - /// Role = "roles/cloudkms.cryptoKeyEncrypterDecrypter", - /// Members = new[] - /// { - /// apigeeSa.Email.Apply(email => $"serviceAccount:{email}"), - /// }, - /// }); - /// - /// var apigeeOrg = new Gcp.Apigee.Organization("apigeeOrg", new() - /// { - /// AnalyticsRegion = "us-central1", - /// DisplayName = "apigee-org", - /// Description = "Auto-provisioned Apigee Org.", - /// ProjectId = current.Apply(getClientConfigResult => getClientConfigResult.Project), - /// AuthorizedNetwork = apigeeNetwork.Id, - /// RuntimeDatabaseEncryptionKeyName = apigeeKey.Id, - /// }, new CustomResourceOptions - /// { - /// DependsOn = new[] - /// { - /// apigeeVpcConnection, - /// apigeeSaKeyuser, - /// }, - /// }); - /// - /// var apigeeInstance = new Gcp.Apigee.Instance("apigeeInstance", new() - /// { - /// Location = "us-central1", - /// Description = "Auto-managed Apigee Runtime Instance", - /// DisplayName = "tf-test", - /// OrgId = apigeeOrg.Id, - /// DiskEncryptionKeyName = apigeeKey.Id, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Apigee/InstanceAttachment.cs b/sdk/dotnet/Apigee/InstanceAttachment.cs index 6e633dd23f..6b6865d942 100644 --- a/sdk/dotnet/Apigee/InstanceAttachment.cs +++ b/sdk/dotnet/Apigee/InstanceAttachment.cs @@ -19,111 +19,6 @@ namespace Pulumi.Gcp.Apigee /// * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) /// /// ## Example Usage - /// ### Apigee Instance Attachment Basic - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Organizations.Project("project", new() - /// { - /// ProjectId = "tf-test", - /// OrgId = "", - /// BillingAccount = "", - /// }); - /// - /// var apigee = new Gcp.Projects.Service("apigee", new() - /// { - /// Project = project.ProjectId, - /// ServiceName = "apigee.googleapis.com", - /// }); - /// - /// var compute = new Gcp.Projects.Service("compute", new() - /// { - /// Project = project.ProjectId, - /// ServiceName = "compute.googleapis.com", - /// }); - /// - /// var servicenetworking = new Gcp.Projects.Service("servicenetworking", new() - /// { - /// Project = project.ProjectId, - /// ServiceName = "servicenetworking.googleapis.com", - /// }); - /// - /// var apigeeNetwork = new Gcp.Compute.Network("apigeeNetwork", new() - /// { - /// Project = project.ProjectId, - /// }, new CustomResourceOptions - /// { - /// DependsOn = new[] - /// { - /// compute, - /// }, - /// }); - /// - /// var apigeeRange = new Gcp.Compute.GlobalAddress("apigeeRange", new() - /// { - /// Purpose = "VPC_PEERING", - /// AddressType = "INTERNAL", - /// PrefixLength = 16, - /// Network = apigeeNetwork.Id, - /// Project = project.ProjectId, - /// }); - /// - /// var apigeeVpcConnection = new Gcp.ServiceNetworking.Connection("apigeeVpcConnection", new() - /// { - /// Network = apigeeNetwork.Id, - /// Service = "servicenetworking.googleapis.com", - /// ReservedPeeringRanges = new[] - /// { - /// apigeeRange.Name, - /// }, - /// }, new CustomResourceOptions - /// { - /// DependsOn = new[] - /// { - /// servicenetworking, - /// }, - /// }); - /// - /// var apigeeOrg = new Gcp.Apigee.Organization("apigeeOrg", new() - /// { - /// AnalyticsRegion = "us-central1", - /// ProjectId = project.ProjectId, - /// AuthorizedNetwork = apigeeNetwork.Id, - /// }, new CustomResourceOptions - /// { - /// DependsOn = new[] - /// { - /// apigeeVpcConnection, - /// apigee, - /// }, - /// }); - /// - /// var apigeeIns = new Gcp.Apigee.Instance("apigeeIns", new() - /// { - /// Location = "us-central1", - /// OrgId = apigeeOrg.Id, - /// }); - /// - /// var apigeeEnv = new Gcp.Apigee.Environment("apigeeEnv", new() - /// { - /// OrgId = apigeeOrg.Id, - /// Description = "Apigee Environment", - /// DisplayName = "environment-1", - /// }); - /// - /// var instanceAttachment = new Gcp.Apigee.InstanceAttachment("instanceAttachment", new() - /// { - /// InstanceId = google_apigee_instance.Apigee_instance.Id, - /// Environment = apigeeEnv.Name, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Apigee/Organization.cs b/sdk/dotnet/Apigee/Organization.cs index f09ebb1b2a..2354ec73d7 100644 --- a/sdk/dotnet/Apigee/Organization.cs +++ b/sdk/dotnet/Apigee/Organization.cs @@ -129,7 +129,7 @@ namespace Pulumi.Gcp.Apigee /// { /// AnalyticsRegion = "us-central1", /// DisplayName = "apigee-org", - /// Description = "Auto-provisioned Apigee Org.", + /// Description = "Terraform-provisioned Apigee Org.", /// ProjectId = current.Apply(getClientConfigResult => getClientConfigResult.Project), /// AuthorizedNetwork = apigeeNetwork.Id, /// RuntimeDatabaseEncryptionKeyName = apigeeKey.Id, diff --git a/sdk/dotnet/AppEngine/FlexibleAppVersion.cs b/sdk/dotnet/AppEngine/FlexibleAppVersion.cs index 76a917f682..cb02e36e33 100644 --- a/sdk/dotnet/AppEngine/FlexibleAppVersion.cs +++ b/sdk/dotnet/AppEngine/FlexibleAppVersion.cs @@ -232,7 +232,8 @@ public partial class FlexibleAppVersion : global::Pulumi.CustomResource public Output Entrypoint { get; private set; } = null!; /// - /// Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + /// Environment variables available to the application. As these are not returned in the API request, Terraform will not + /// detect any changes made outside of the Terraform config. /// [Output("envVariables")] public Output?> EnvVariables { get; private set; } = null!; @@ -499,7 +500,8 @@ public InputMap BetaSettings private InputMap? _envVariables; /// - /// Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + /// Environment variables available to the application. As these are not returned in the API request, Terraform will not + /// detect any changes made outside of the Terraform config. /// public InputMap EnvVariables { @@ -730,7 +732,8 @@ public InputMap BetaSettings private InputMap? _envVariables; /// - /// Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + /// Environment variables available to the application. As these are not returned in the API request, Terraform will not + /// detect any changes made outside of the Terraform config. /// public InputMap EnvVariables { diff --git a/sdk/dotnet/BigQuery/Connection.cs b/sdk/dotnet/BigQuery/Connection.cs index 7070e736d4..37b3a61675 100644 --- a/sdk/dotnet/BigQuery/Connection.cs +++ b/sdk/dotnet/BigQuery/Connection.cs @@ -188,6 +188,7 @@ namespace Pulumi.Gcp.BigQuery /// Azure = new Gcp.BigQuery.Inputs.ConnectionAzureArgs /// { /// CustomerTenantId = "customer-tenant-id", + /// FederatedApplicationClientId = "b43eeeee-eeee-eeee-eeee-a480155501ce", /// }, /// ConnectionId = "my-connection", /// Description = "a riveting description", @@ -269,7 +270,7 @@ public partial class Connection : global::Pulumi.CustomResource public Output CloudSpanner { get; private set; } = null!; /// - /// A nested object resource + /// Connection properties specific to the Cloud SQL. /// Structure is documented below. /// [Output("cloudSql")] @@ -400,7 +401,7 @@ public sealed class ConnectionArgs : global::Pulumi.ResourceArgs public Input? CloudSpanner { get; set; } /// - /// A nested object resource + /// Connection properties specific to the Cloud SQL. /// Structure is documented below. /// [Input("cloudSql")] @@ -480,7 +481,7 @@ public sealed class ConnectionState : global::Pulumi.ResourceArgs public Input? CloudSpanner { get; set; } /// - /// A nested object resource + /// Connection properties specific to the Cloud SQL. /// Structure is documented below. /// [Input("cloudSql")] diff --git a/sdk/dotnet/BigQuery/Inputs/ConnectionAzureArgs.cs b/sdk/dotnet/BigQuery/Inputs/ConnectionAzureArgs.cs index 5ae4625fdd..857b404c56 100644 --- a/sdk/dotnet/BigQuery/Inputs/ConnectionAzureArgs.cs +++ b/sdk/dotnet/BigQuery/Inputs/ConnectionAzureArgs.cs @@ -30,6 +30,18 @@ public sealed class ConnectionAzureArgs : global::Pulumi.ResourceArgs [Input("customerTenantId", required: true)] public Input CustomerTenantId { get; set; } = null!; + /// + /// The Azure Application (client) ID where the federated credentials will be hosted. + /// + [Input("federatedApplicationClientId")] + public Input? FederatedApplicationClientId { get; set; } + + /// + /// A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + /// + [Input("identity")] + public Input? Identity { get; set; } + /// /// The object id of the Azure Active Directory Application. /// diff --git a/sdk/dotnet/BigQuery/Inputs/ConnectionAzureGetArgs.cs b/sdk/dotnet/BigQuery/Inputs/ConnectionAzureGetArgs.cs index 7287c2884d..856765a977 100644 --- a/sdk/dotnet/BigQuery/Inputs/ConnectionAzureGetArgs.cs +++ b/sdk/dotnet/BigQuery/Inputs/ConnectionAzureGetArgs.cs @@ -30,6 +30,18 @@ public sealed class ConnectionAzureGetArgs : global::Pulumi.ResourceArgs [Input("customerTenantId", required: true)] public Input CustomerTenantId { get; set; } = null!; + /// + /// The Azure Application (client) ID where the federated credentials will be hosted. + /// + [Input("federatedApplicationClientId")] + public Input? FederatedApplicationClientId { get; set; } + + /// + /// A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + /// + [Input("identity")] + public Input? Identity { get; set; } + /// /// The object id of the Azure Active Directory Application. /// diff --git a/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSpannerArgs.cs b/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSpannerArgs.cs index 41adfec73e..547ba5e36a 100644 --- a/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSpannerArgs.cs +++ b/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSpannerArgs.cs @@ -24,6 +24,12 @@ public sealed class ConnectionCloudSpannerArgs : global::Pulumi.ResourceArgs [Input("useParallelism")] public Input? UseParallelism { get; set; } + /// + /// If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + /// + [Input("useServerlessAnalytics")] + public Input? UseServerlessAnalytics { get; set; } + public ConnectionCloudSpannerArgs() { } diff --git a/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSpannerGetArgs.cs b/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSpannerGetArgs.cs index 469898c696..b7ccf302ef 100644 --- a/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSpannerGetArgs.cs +++ b/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSpannerGetArgs.cs @@ -24,6 +24,12 @@ public sealed class ConnectionCloudSpannerGetArgs : global::Pulumi.ResourceArgs [Input("useParallelism")] public Input? UseParallelism { get; set; } + /// + /// If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + /// + [Input("useServerlessAnalytics")] + public Input? UseServerlessAnalytics { get; set; } + public ConnectionCloudSpannerGetArgs() { } diff --git a/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSqlArgs.cs b/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSqlArgs.cs index 2c8c711d85..897a02a67e 100644 --- a/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSqlArgs.cs +++ b/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSqlArgs.cs @@ -31,6 +31,12 @@ public sealed class ConnectionCloudSqlArgs : global::Pulumi.ResourceArgs [Input("instanceId", required: true)] public Input InstanceId { get; set; } = null!; + /// + /// When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + /// + [Input("serviceAccountId")] + public Input? ServiceAccountId { get; set; } + /// /// Type of the Cloud SQL database. /// Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. diff --git a/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSqlGetArgs.cs b/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSqlGetArgs.cs index bbcad39915..3ae09dab2f 100644 --- a/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSqlGetArgs.cs +++ b/sdk/dotnet/BigQuery/Inputs/ConnectionCloudSqlGetArgs.cs @@ -31,6 +31,12 @@ public sealed class ConnectionCloudSqlGetArgs : global::Pulumi.ResourceArgs [Input("instanceId", required: true)] public Input InstanceId { get; set; } = null!; + /// + /// When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + /// + [Input("serviceAccountId")] + public Input? ServiceAccountId { get; set; } + /// /// Type of the Cloud SQL database. /// Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. diff --git a/sdk/dotnet/BigQuery/Inputs/JobLoadArgs.cs b/sdk/dotnet/BigQuery/Inputs/JobLoadArgs.cs index 0731508644..bb94f05bdf 100644 --- a/sdk/dotnet/BigQuery/Inputs/JobLoadArgs.cs +++ b/sdk/dotnet/BigQuery/Inputs/JobLoadArgs.cs @@ -103,8 +103,8 @@ public sealed class JobLoadArgs : global::Pulumi.ResourceArgs public Input? MaxBadRecords { get; set; } /// - /// Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - /// property to a custom value, BigQuery throws an error if an + /// Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value + /// when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an /// empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as /// an empty value. /// diff --git a/sdk/dotnet/BigQuery/Inputs/JobLoadGetArgs.cs b/sdk/dotnet/BigQuery/Inputs/JobLoadGetArgs.cs index 5551bacc30..ec88fc8bf7 100644 --- a/sdk/dotnet/BigQuery/Inputs/JobLoadGetArgs.cs +++ b/sdk/dotnet/BigQuery/Inputs/JobLoadGetArgs.cs @@ -103,8 +103,8 @@ public sealed class JobLoadGetArgs : global::Pulumi.ResourceArgs public Input? MaxBadRecords { get; set; } /// - /// Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - /// property to a custom value, BigQuery throws an error if an + /// Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value + /// when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an /// empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as /// an empty value. /// diff --git a/sdk/dotnet/BigQuery/Inputs/TableExternalDataConfigurationCsvOptionsArgs.cs b/sdk/dotnet/BigQuery/Inputs/TableExternalDataConfigurationCsvOptionsArgs.cs index 342390529b..f61cf88490 100644 --- a/sdk/dotnet/BigQuery/Inputs/TableExternalDataConfigurationCsvOptionsArgs.cs +++ b/sdk/dotnet/BigQuery/Inputs/TableExternalDataConfigurationCsvOptionsArgs.cs @@ -40,15 +40,6 @@ public sealed class TableExternalDataConfigurationCsvOptionsArgs : global::Pulum [Input("fieldDelimiter")] public Input? FieldDelimiter { get; set; } - /// - /// The value that is used to quote data sections in a - /// CSV file. If your data does not contain quoted sections, set the - /// property value to an empty string. If your data contains quoted newline - /// characters, you must also set the `allow_quoted_newlines` property to true. - /// The API-side default is `"`, specified in the provider escaped as `\"`. Due to - /// limitations with default values, this value is required to be - /// explicitly set. - /// [Input("quote", required: true)] public Input Quote { get; set; } = null!; diff --git a/sdk/dotnet/BigQuery/Inputs/TableExternalDataConfigurationCsvOptionsGetArgs.cs b/sdk/dotnet/BigQuery/Inputs/TableExternalDataConfigurationCsvOptionsGetArgs.cs index 4afde2e5e6..ad08173018 100644 --- a/sdk/dotnet/BigQuery/Inputs/TableExternalDataConfigurationCsvOptionsGetArgs.cs +++ b/sdk/dotnet/BigQuery/Inputs/TableExternalDataConfigurationCsvOptionsGetArgs.cs @@ -40,15 +40,6 @@ public sealed class TableExternalDataConfigurationCsvOptionsGetArgs : global::Pu [Input("fieldDelimiter")] public Input? FieldDelimiter { get; set; } - /// - /// The value that is used to quote data sections in a - /// CSV file. If your data does not contain quoted sections, set the - /// property value to an empty string. If your data contains quoted newline - /// characters, you must also set the `allow_quoted_newlines` property to true. - /// The API-side default is `"`, specified in the provider escaped as `\"`. Due to - /// limitations with default values, this value is required to be - /// explicitly set. - /// [Input("quote", required: true)] public Input Quote { get; set; } = null!; diff --git a/sdk/dotnet/BigQuery/Outputs/ConnectionAzure.cs b/sdk/dotnet/BigQuery/Outputs/ConnectionAzure.cs index b994b9bf52..3a9f9271b5 100644 --- a/sdk/dotnet/BigQuery/Outputs/ConnectionAzure.cs +++ b/sdk/dotnet/BigQuery/Outputs/ConnectionAzure.cs @@ -26,6 +26,14 @@ public sealed class ConnectionAzure /// public readonly string CustomerTenantId; /// + /// The Azure Application (client) ID where the federated credentials will be hosted. + /// + public readonly string? FederatedApplicationClientId; + /// + /// A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + /// + public readonly string? Identity; + /// /// The object id of the Azure Active Directory Application. /// public readonly string? ObjectId; @@ -42,6 +50,10 @@ private ConnectionAzure( string customerTenantId, + string? federatedApplicationClientId, + + string? identity, + string? objectId, string? redirectUri) @@ -49,6 +61,8 @@ private ConnectionAzure( Application = application; ClientId = clientId; CustomerTenantId = customerTenantId; + FederatedApplicationClientId = federatedApplicationClientId; + Identity = identity; ObjectId = objectId; RedirectUri = redirectUri; } diff --git a/sdk/dotnet/BigQuery/Outputs/ConnectionCloudSpanner.cs b/sdk/dotnet/BigQuery/Outputs/ConnectionCloudSpanner.cs index 33b78afa2a..fc8ad74a4d 100644 --- a/sdk/dotnet/BigQuery/Outputs/ConnectionCloudSpanner.cs +++ b/sdk/dotnet/BigQuery/Outputs/ConnectionCloudSpanner.cs @@ -21,15 +21,22 @@ public sealed class ConnectionCloudSpanner /// If parallelism should be used when reading from Cloud Spanner /// public readonly bool? UseParallelism; + /// + /// If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + /// + public readonly bool? UseServerlessAnalytics; [OutputConstructor] private ConnectionCloudSpanner( string database, - bool? useParallelism) + bool? useParallelism, + + bool? useServerlessAnalytics) { Database = database; UseParallelism = useParallelism; + UseServerlessAnalytics = useServerlessAnalytics; } } } diff --git a/sdk/dotnet/BigQuery/Outputs/ConnectionCloudSql.cs b/sdk/dotnet/BigQuery/Outputs/ConnectionCloudSql.cs index 11d9cbfc0f..062107eb24 100644 --- a/sdk/dotnet/BigQuery/Outputs/ConnectionCloudSql.cs +++ b/sdk/dotnet/BigQuery/Outputs/ConnectionCloudSql.cs @@ -27,6 +27,10 @@ public sealed class ConnectionCloudSql /// public readonly string InstanceId; /// + /// When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + /// + public readonly string? ServiceAccountId; + /// /// Type of the Cloud SQL database. /// Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. /// @@ -40,11 +44,14 @@ private ConnectionCloudSql( string instanceId, + string? serviceAccountId, + string type) { Credential = credential; Database = database; InstanceId = instanceId; + ServiceAccountId = serviceAccountId; Type = type; } } diff --git a/sdk/dotnet/BigQuery/Outputs/JobLoad.cs b/sdk/dotnet/BigQuery/Outputs/JobLoad.cs index 7df536713d..5ac4d783a4 100644 --- a/sdk/dotnet/BigQuery/Outputs/JobLoad.cs +++ b/sdk/dotnet/BigQuery/Outputs/JobLoad.cs @@ -82,8 +82,8 @@ public sealed class JobLoad /// public readonly int? MaxBadRecords; /// - /// Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - /// property to a custom value, BigQuery throws an error if an + /// Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value + /// when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an /// empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as /// an empty value. /// diff --git a/sdk/dotnet/BigQuery/Outputs/TableExternalDataConfigurationCsvOptions.cs b/sdk/dotnet/BigQuery/Outputs/TableExternalDataConfigurationCsvOptions.cs index 86a9f8d851..4077ef57f2 100644 --- a/sdk/dotnet/BigQuery/Outputs/TableExternalDataConfigurationCsvOptions.cs +++ b/sdk/dotnet/BigQuery/Outputs/TableExternalDataConfigurationCsvOptions.cs @@ -33,15 +33,6 @@ public sealed class TableExternalDataConfigurationCsvOptions /// The separator for fields in a CSV file. /// public readonly string? FieldDelimiter; - /// - /// The value that is used to quote data sections in a - /// CSV file. If your data does not contain quoted sections, set the - /// property value to an empty string. If your data contains quoted newline - /// characters, you must also set the `allow_quoted_newlines` property to true. - /// The API-side default is `"`, specified in the provider escaped as `\"`. Due to - /// limitations with default values, this value is required to be - /// explicitly set. - /// public readonly string Quote; /// /// The number of rows at the top of a CSV diff --git a/sdk/dotnet/BigQuery/ReservationAssignment.cs b/sdk/dotnet/BigQuery/ReservationAssignment.cs index e901e4f97d..4a7ce74177 100644 --- a/sdk/dotnet/BigQuery/ReservationAssignment.cs +++ b/sdk/dotnet/BigQuery/ReservationAssignment.cs @@ -13,31 +13,6 @@ namespace Pulumi.Gcp.BigQuery /// The BigqueryReservation Assignment resource /// /// ## Example Usage - /// ### Basic - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var basic = new Gcp.BigQuery.Reservation("basic", new() - /// { - /// Project = "my-project-name", - /// Location = "us-central1", - /// SlotCapacity = 0, - /// IgnoreIdleSlots = false, - /// }); - /// - /// var primary = new Gcp.BigQuery.ReservationAssignment("primary", new() - /// { - /// Assignee = "projects/my-project-name", - /// JobType = "PIPELINE", - /// Reservation = basic.Id, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/BigQuery/Routine.cs b/sdk/dotnet/BigQuery/Routine.cs index 9c2593290c..6b8c7d183c 100644 --- a/sdk/dotnet/BigQuery/Routine.cs +++ b/sdk/dotnet/BigQuery/Routine.cs @@ -44,98 +44,6 @@ namespace Pulumi.Gcp.BigQuery /// /// }); /// ``` - /// ### Big Query Routine Json - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var test = new Gcp.BigQuery.Dataset("test", new() - /// { - /// DatasetId = "dataset_id", - /// }); - /// - /// var sproc = new Gcp.BigQuery.Routine("sproc", new() - /// { - /// DatasetId = test.DatasetId, - /// RoutineId = "tf_test_routine_id", - /// RoutineType = "SCALAR_FUNCTION", - /// Language = "JAVASCRIPT", - /// DefinitionBody = "CREATE FUNCTION multiplyInputs return x*y;", - /// Arguments = new[] - /// { - /// new Gcp.BigQuery.Inputs.RoutineArgumentArgs - /// { - /// Name = "x", - /// DataType = "{\"typeKind\" : \"FLOAT64\"}", - /// }, - /// new Gcp.BigQuery.Inputs.RoutineArgumentArgs - /// { - /// Name = "y", - /// DataType = "{\"typeKind\" : \"FLOAT64\"}", - /// }, - /// }, - /// ReturnType = "{\"typeKind\" : \"FLOAT64\"}", - /// }); - /// - /// }); - /// ``` - /// ### Big Query Routine Tvf - /// - /// ```csharp - /// using System.Collections.Generic; - /// using System.Text.Json; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var test = new Gcp.BigQuery.Dataset("test", new() - /// { - /// DatasetId = "dataset_id", - /// }); - /// - /// var sproc = new Gcp.BigQuery.Routine("sproc", new() - /// { - /// DatasetId = test.DatasetId, - /// RoutineId = "tf_test_routine_id", - /// RoutineType = "TABLE_VALUED_FUNCTION", - /// Language = "SQL", - /// DefinitionBody = @"SELECT 1 + value AS value - /// ", - /// Arguments = new[] - /// { - /// new Gcp.BigQuery.Inputs.RoutineArgumentArgs - /// { - /// Name = "value", - /// ArgumentKind = "FIXED_TYPE", - /// DataType = JsonSerializer.Serialize(new Dictionary<string, object?> - /// { - /// ["typeKind"] = "INT64", - /// }), - /// }, - /// }, - /// ReturnTableType = JsonSerializer.Serialize(new Dictionary<string, object?> - /// { - /// ["columns"] = new[] - /// { - /// new Dictionary<string, object?> - /// { - /// ["name"] = "value", - /// ["type"] = new Dictionary<string, object?> - /// { - /// ["typeKind"] = "INT64", - /// }, - /// }, - /// }, - /// }), - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/BigQuery/Table.cs b/sdk/dotnet/BigQuery/Table.cs index 2de05dfc1f..609f871578 100644 --- a/sdk/dotnet/BigQuery/Table.cs +++ b/sdk/dotnet/BigQuery/Table.cs @@ -10,14 +10,6 @@ namespace Pulumi.Gcp.BigQuery { /// - /// Creates a table resource in a dataset for Google BigQuery. For more information see - /// [the official documentation](https://cloud.google.com/bigquery/docs/) and - /// [API](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables). - /// - /// > **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false` - /// (and run `pulumi update` to write the field to state) in order to destroy an instance. - /// It is recommended to not set this field (or set it to true) until you're ready to destroy. - /// /// ## Example Usage /// /// ```csharp @@ -132,8 +124,8 @@ public partial class Table : global::Pulumi.CustomResource public Output DatasetId { get; private set; } = null!; /// - /// Whether or not to allow the provider to destroy the instance. Unless this field is set to false - /// in state, a `=destroy` or `=update` that would delete the instance will fail. + /// Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + /// terraform destroy or terraform apply that would delete the instance will fail. /// [Output("deletionProtection")] public Output DeletionProtection { get; private set; } = null!; @@ -347,8 +339,8 @@ public InputList Clusterings public Input DatasetId { get; set; } = null!; /// - /// Whether or not to allow the provider to destroy the instance. Unless this field is set to false - /// in state, a `=destroy` or `=update` that would delete the instance will fail. + /// Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + /// terraform destroy or terraform apply that would delete the instance will fail. /// [Input("deletionProtection")] public Input? DeletionProtection { get; set; } @@ -487,8 +479,8 @@ public InputList Clusterings public Input? DatasetId { get; set; } /// - /// Whether or not to allow the provider to destroy the instance. Unless this field is set to false - /// in state, a `=destroy` or `=update` that would delete the instance will fail. + /// Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + /// terraform destroy or terraform apply that would delete the instance will fail. /// [Input("deletionProtection")] public Input? DeletionProtection { get; set; } diff --git a/sdk/dotnet/BigTable/Instance.cs b/sdk/dotnet/BigTable/Instance.cs index 3f710e1862..725dde86e2 100644 --- a/sdk/dotnet/BigTable/Instance.cs +++ b/sdk/dotnet/BigTable/Instance.cs @@ -10,22 +10,6 @@ namespace Pulumi.Gcp.BigTable { /// - /// ## +--- - /// - /// subcategory: "Cloud Bigtable" - /// page_title: "Google: gcp.bigtable.Instance" - /// description: |- - /// Creates a Google Bigtable instance. - /// --- - /// - /// # gcp.bigtable.Instance - /// - /// Creates a Google Bigtable instance. For more information see: - /// - /// * [API documentation](https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/bigtable/docs) - /// /// ## Example Usage /// ### Simple Instance /// @@ -125,8 +109,8 @@ public partial class Instance : global::Pulumi.CustomResource public Output> Clusters { get; private set; } = null!; /// - /// Whether or not to allow this provider to destroy the instance. Unless this field is set to false - /// in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + /// Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + /// terraform destroy or terraform apply that would delete the instance will fail. /// [Output("deletionProtection")] public Output DeletionProtection { get; private set; } = null!; @@ -227,8 +211,8 @@ public InputList Clusters } /// - /// Whether or not to allow this provider to destroy the instance. Unless this field is set to false - /// in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + /// Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + /// terraform destroy or terraform apply that would delete the instance will fail. /// [Input("deletionProtection")] public Input? DeletionProtection { get; set; } @@ -297,8 +281,8 @@ public InputList Clusters } /// - /// Whether or not to allow this provider to destroy the instance. Unless this field is set to false - /// in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + /// Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + /// terraform destroy or terraform apply that would delete the instance will fail. /// [Input("deletionProtection")] public Input? DeletionProtection { get; set; } diff --git a/sdk/dotnet/BigTable/InstanceIamBinding.cs b/sdk/dotnet/BigTable/InstanceIamBinding.cs index 5c5461396b..2a7e8ebcf5 100644 --- a/sdk/dotnet/BigTable/InstanceIamBinding.cs +++ b/sdk/dotnet/BigTable/InstanceIamBinding.cs @@ -136,10 +136,6 @@ public partial class InstanceIamBinding : global::Pulumi.CustomResource [Output("members")] public Output> Members { get; private set; } = null!; - /// - /// The project in which the instance belongs. If it - /// is not provided, a default will be supplied. - /// [Output("project")] public Output Project { get; private set; } = null!; @@ -214,10 +210,6 @@ public InputList Members set => _members = value; } - /// - /// The project in which the instance belongs. If it - /// is not provided, a default will be supplied. - /// [Input("project")] public Input? Project { get; set; } @@ -260,10 +252,6 @@ public InputList Members set => _members = value; } - /// - /// The project in which the instance belongs. If it - /// is not provided, a default will be supplied. - /// [Input("project")] public Input? Project { get; set; } diff --git a/sdk/dotnet/BigTable/InstanceIamMember.cs b/sdk/dotnet/BigTable/InstanceIamMember.cs index 2d4a91ad58..8abdac7f51 100644 --- a/sdk/dotnet/BigTable/InstanceIamMember.cs +++ b/sdk/dotnet/BigTable/InstanceIamMember.cs @@ -136,10 +136,6 @@ public partial class InstanceIamMember : global::Pulumi.CustomResource [Output("member")] public Output Member { get; private set; } = null!; - /// - /// The project in which the instance belongs. If it - /// is not provided, a default will be supplied. - /// [Output("project")] public Output Project { get; private set; } = null!; @@ -209,10 +205,6 @@ public sealed class InstanceIamMemberArgs : global::Pulumi.ResourceArgs [Input("member", required: true)] public Input Member { get; set; } = null!; - /// - /// The project in which the instance belongs. If it - /// is not provided, a default will be supplied. - /// [Input("project")] public Input? Project { get; set; } @@ -250,10 +242,6 @@ public sealed class InstanceIamMemberState : global::Pulumi.ResourceArgs [Input("member")] public Input? Member { get; set; } - /// - /// The project in which the instance belongs. If it - /// is not provided, a default will be supplied. - /// [Input("project")] public Input? Project { get; set; } diff --git a/sdk/dotnet/BigTable/InstanceIamPolicy.cs b/sdk/dotnet/BigTable/InstanceIamPolicy.cs index 261b3e88ab..3688b6d02c 100644 --- a/sdk/dotnet/BigTable/InstanceIamPolicy.cs +++ b/sdk/dotnet/BigTable/InstanceIamPolicy.cs @@ -136,10 +136,6 @@ public partial class InstanceIamPolicy : global::Pulumi.CustomResource [Output("policyData")] public Output PolicyData { get; private set; } = null!; - /// - /// The project in which the instance belongs. If it - /// is not provided, a default will be supplied. - /// [Output("project")] public Output Project { get; private set; } = null!; @@ -201,10 +197,6 @@ public sealed class InstanceIamPolicyArgs : global::Pulumi.ResourceArgs [Input("policyData", required: true)] public Input PolicyData { get; set; } = null!; - /// - /// The project in which the instance belongs. If it - /// is not provided, a default will be supplied. - /// [Input("project")] public Input? Project { get; set; } @@ -234,10 +226,6 @@ public sealed class InstanceIamPolicyState : global::Pulumi.ResourceArgs [Input("policyData")] public Input? PolicyData { get; set; } - /// - /// The project in which the instance belongs. If it - /// is not provided, a default will be supplied. - /// [Input("project")] public Input? Project { get; set; } diff --git a/sdk/dotnet/BigTable/Table.cs b/sdk/dotnet/BigTable/Table.cs index d1707008b0..584a104dc0 100644 --- a/sdk/dotnet/BigTable/Table.cs +++ b/sdk/dotnet/BigTable/Table.cs @@ -10,10 +10,6 @@ namespace Pulumi.Gcp.BigTable { /// - /// Creates a Google Cloud Bigtable table inside an instance. For more information see - /// [the official documentation](https://cloud.google.com/bigtable/) and - /// [API](https://cloud.google.com/bigtable/docs/go/reference). - /// /// ## Example Usage /// /// ```csharp @@ -115,9 +111,8 @@ public partial class Table : global::Pulumi.CustomResource public Output Project { get; private set; } = null!; /// - /// A list of predefined keys to split the table on. - /// !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - /// to delete/recreate the entire `gcp.bigtable.Table` resource. + /// A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + /// Terraform to delete/recreate the entire google_bigtable_table resource. /// [Output("splitKeys")] public Output> SplitKeys { get; private set; } = null!; @@ -209,9 +204,8 @@ public InputList ColumnFamilies private InputList? _splitKeys; /// - /// A list of predefined keys to split the table on. - /// !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - /// to delete/recreate the entire `gcp.bigtable.Table` resource. + /// A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + /// Terraform to delete/recreate the entire google_bigtable_table resource. /// public InputList SplitKeys { @@ -268,9 +262,8 @@ public InputList ColumnFamilies private InputList? _splitKeys; /// - /// A list of predefined keys to split the table on. - /// !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - /// to delete/recreate the entire `gcp.bigtable.Table` resource. + /// A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + /// Terraform to delete/recreate the entire google_bigtable_table resource. /// public InputList SplitKeys { diff --git a/sdk/dotnet/BigTable/TableIamBinding.cs b/sdk/dotnet/BigTable/TableIamBinding.cs index 9bcca8c177..a668ef213e 100644 --- a/sdk/dotnet/BigTable/TableIamBinding.cs +++ b/sdk/dotnet/BigTable/TableIamBinding.cs @@ -139,10 +139,6 @@ public partial class TableIamBinding : global::Pulumi.CustomResource [Output("members")] public Output> Members { get; private set; } = null!; - /// - /// The project in which the table belongs. If it - /// is not provided, this provider will use the provider default. - /// [Output("project")] public Output Project { get; private set; } = null!; @@ -223,10 +219,6 @@ public InputList Members set => _members = value; } - /// - /// The project in which the table belongs. If it - /// is not provided, this provider will use the provider default. - /// [Input("project")] public Input? Project { get; set; } @@ -275,10 +267,6 @@ public InputList Members set => _members = value; } - /// - /// The project in which the table belongs. If it - /// is not provided, this provider will use the provider default. - /// [Input("project")] public Input? Project { get; set; } diff --git a/sdk/dotnet/BigTable/TableIamMember.cs b/sdk/dotnet/BigTable/TableIamMember.cs index b0881a0eee..f8ec9c8f08 100644 --- a/sdk/dotnet/BigTable/TableIamMember.cs +++ b/sdk/dotnet/BigTable/TableIamMember.cs @@ -139,10 +139,6 @@ public partial class TableIamMember : global::Pulumi.CustomResource [Output("member")] public Output Member { get; private set; } = null!; - /// - /// The project in which the table belongs. If it - /// is not provided, this provider will use the provider default. - /// [Output("project")] public Output Project { get; private set; } = null!; @@ -218,10 +214,6 @@ public sealed class TableIamMemberArgs : global::Pulumi.ResourceArgs [Input("member", required: true)] public Input Member { get; set; } = null!; - /// - /// The project in which the table belongs. If it - /// is not provided, this provider will use the provider default. - /// [Input("project")] public Input? Project { get; set; } @@ -265,10 +257,6 @@ public sealed class TableIamMemberState : global::Pulumi.ResourceArgs [Input("member")] public Input? Member { get; set; } - /// - /// The project in which the table belongs. If it - /// is not provided, this provider will use the provider default. - /// [Input("project")] public Input? Project { get; set; } diff --git a/sdk/dotnet/BigTable/TableIamPolicy.cs b/sdk/dotnet/BigTable/TableIamPolicy.cs index d782b9e752..7f5da36aee 100644 --- a/sdk/dotnet/BigTable/TableIamPolicy.cs +++ b/sdk/dotnet/BigTable/TableIamPolicy.cs @@ -139,10 +139,6 @@ public partial class TableIamPolicy : global::Pulumi.CustomResource [Output("policyData")] public Output PolicyData { get; private set; } = null!; - /// - /// The project in which the table belongs. If it - /// is not provided, this provider will use the provider default. - /// [Output("project")] public Output Project { get; private set; } = null!; @@ -210,10 +206,6 @@ public sealed class TableIamPolicyArgs : global::Pulumi.ResourceArgs [Input("policyData", required: true)] public Input PolicyData { get; set; } = null!; - /// - /// The project in which the table belongs. If it - /// is not provided, this provider will use the provider default. - /// [Input("project")] public Input? Project { get; set; } @@ -249,10 +241,6 @@ public sealed class TableIamPolicyState : global::Pulumi.ResourceArgs [Input("policyData")] public Input? PolicyData { get; set; } - /// - /// The project in which the table belongs. If it - /// is not provided, this provider will use the provider default. - /// [Input("project")] public Input? Project { get; set; } diff --git a/sdk/dotnet/Billing/SubAccount.cs b/sdk/dotnet/Billing/SubAccount.cs index 0647fa13fb..5fc21bfb23 100644 --- a/sdk/dotnet/Billing/SubAccount.cs +++ b/sdk/dotnet/Billing/SubAccount.cs @@ -10,26 +10,6 @@ namespace Pulumi.Gcp.Billing { /// - /// Allows creation and management of a Google Cloud Billing Subaccount. - /// - /// !> **WARNING:** Deleting this resource will not delete or close the billing subaccount. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var subaccount = new Gcp.Billing.SubAccount("subaccount", new() - /// { - /// DisplayName = "My Billing Account", - /// MasterBillingAccount = "012345-567890-ABCDEF", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// Billing Subaccounts can be imported using any of these accepted formats @@ -47,11 +27,6 @@ public partial class SubAccount : global::Pulumi.CustomResource [Output("billingAccountId")] public Output BillingAccountId { get; private set; } = null!; - /// - /// If set to "RENAME_ON_DESTROY" the billing account display_name - /// will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - /// Default is "". - /// [Output("deletionPolicy")] public Output DeletionPolicy { get; private set; } = null!; @@ -126,11 +101,6 @@ public static SubAccount Get(string name, Input id, SubAccountState? sta public sealed class SubAccountArgs : global::Pulumi.ResourceArgs { - /// - /// If set to "RENAME_ON_DESTROY" the billing account display_name - /// will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - /// Default is "". - /// [Input("deletionPolicy")] public Input? DeletionPolicy { get; set; } @@ -161,11 +131,6 @@ public sealed class SubAccountState : global::Pulumi.ResourceArgs [Input("billingAccountId")] public Input? BillingAccountId { get; set; } - /// - /// If set to "RENAME_ON_DESTROY" the billing account display_name - /// will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - /// Default is "". - /// [Input("deletionPolicy")] public Input? DeletionPolicy { get; set; } diff --git a/sdk/dotnet/CertificateManager/Certificate.cs b/sdk/dotnet/CertificateManager/Certificate.cs index 391ff0a3f7..e91cccbe7a 100644 --- a/sdk/dotnet/CertificateManager/Certificate.cs +++ b/sdk/dotnet/CertificateManager/Certificate.cs @@ -11,43 +11,24 @@ namespace Pulumi.Gcp.CertificateManager { /// /// ## Example Usage - /// ### Certificate Manager Certificate Basic + /// ### Certificate Manager Self Managed Certificate /// /// ```csharp /// using System.Collections.Generic; + /// using System.IO; /// using Pulumi; /// using Gcp = Pulumi.Gcp; /// /// return await Deployment.RunAsync(() => /// { - /// var instance = new Gcp.CertificateManager.DnsAuthorization("instance", new() - /// { - /// Description = "The default dnss", - /// Domain = "subdomain.hashicorptest.com", - /// }); - /// - /// var instance2 = new Gcp.CertificateManager.DnsAuthorization("instance2", new() - /// { - /// Description = "The default dnss", - /// Domain = "subdomain2.hashicorptest.com", - /// }); - /// /// var @default = new Gcp.CertificateManager.Certificate("default", new() /// { /// Description = "The default cert", /// Scope = "EDGE_CACHE", - /// Managed = new Gcp.CertificateManager.Inputs.CertificateManagedArgs + /// SelfManaged = new Gcp.CertificateManager.Inputs.CertificateSelfManagedArgs /// { - /// Domains = new[] - /// { - /// instance.Domain, - /// instance2.Domain, - /// }, - /// DnsAuthorizations = new[] - /// { - /// instance.Id, - /// instance2.Id, - /// }, + /// PemCertificate = File.ReadAllText("test-fixtures/certificatemanager/cert.pem"), + /// PemPrivateKey = File.ReadAllText("test-fixtures/certificatemanager/private-key.pem"), /// }, /// }); /// diff --git a/sdk/dotnet/CertificateManager/Inputs/CertificateSelfManagedArgs.cs b/sdk/dotnet/CertificateManager/Inputs/CertificateSelfManagedArgs.cs index 31c9eb08e4..23af9f2ce7 100644 --- a/sdk/dotnet/CertificateManager/Inputs/CertificateSelfManagedArgs.cs +++ b/sdk/dotnet/CertificateManager/Inputs/CertificateSelfManagedArgs.cs @@ -35,7 +35,6 @@ public Input? CertificatePem /// /// The certificate chain in PEM-encoded form. /// Leaf certificate comes first, followed by intermediate ones if any. - /// **Note**: This property is sensitive and will not be displayed in the plan. /// [Input("pemCertificate")] public Input? PemCertificate { get; set; } diff --git a/sdk/dotnet/CertificateManager/Inputs/CertificateSelfManagedGetArgs.cs b/sdk/dotnet/CertificateManager/Inputs/CertificateSelfManagedGetArgs.cs index d0bfb73577..11edd95cc4 100644 --- a/sdk/dotnet/CertificateManager/Inputs/CertificateSelfManagedGetArgs.cs +++ b/sdk/dotnet/CertificateManager/Inputs/CertificateSelfManagedGetArgs.cs @@ -35,7 +35,6 @@ public Input? CertificatePem /// /// The certificate chain in PEM-encoded form. /// Leaf certificate comes first, followed by intermediate ones if any. - /// **Note**: This property is sensitive and will not be displayed in the plan. /// [Input("pemCertificate")] public Input? PemCertificate { get; set; } diff --git a/sdk/dotnet/CertificateManager/Outputs/CertificateSelfManaged.cs b/sdk/dotnet/CertificateManager/Outputs/CertificateSelfManaged.cs index 20a64eb1be..05113b031f 100644 --- a/sdk/dotnet/CertificateManager/Outputs/CertificateSelfManaged.cs +++ b/sdk/dotnet/CertificateManager/Outputs/CertificateSelfManaged.cs @@ -23,7 +23,6 @@ public sealed class CertificateSelfManaged /// /// The certificate chain in PEM-encoded form. /// Leaf certificate comes first, followed by intermediate ones if any. - /// **Note**: This property is sensitive and will not be displayed in the plan. /// public readonly string? PemCertificate; /// diff --git a/sdk/dotnet/CloudBuild/GetTrigger.cs b/sdk/dotnet/CloudBuild/GetTrigger.cs index f04e43d319..67e0452410 100644 --- a/sdk/dotnet/CloudBuild/GetTrigger.cs +++ b/sdk/dotnet/CloudBuild/GetTrigger.cs @@ -155,6 +155,7 @@ public sealed class GetTriggerResult public readonly string Name; public readonly string? Project; public readonly ImmutableArray PubsubConfigs; + public readonly ImmutableArray RepositoryEventConfigs; public readonly string ServiceAccount; public readonly ImmutableArray SourceToBuilds; public readonly ImmutableDictionary Substitutions; @@ -199,6 +200,8 @@ private GetTriggerResult( ImmutableArray pubsubConfigs, + ImmutableArray repositoryEventConfigs, + string serviceAccount, ImmutableArray sourceToBuilds, @@ -230,6 +233,7 @@ private GetTriggerResult( Name = name; Project = project; PubsubConfigs = pubsubConfigs; + RepositoryEventConfigs = repositoryEventConfigs; ServiceAccount = serviceAccount; SourceToBuilds = sourceToBuilds; Substitutions = substitutions; diff --git a/sdk/dotnet/CloudBuild/Inputs/TriggerGitFileSourceArgs.cs b/sdk/dotnet/CloudBuild/Inputs/TriggerGitFileSourceArgs.cs index cfb36cd23c..75ea7240fc 100644 --- a/sdk/dotnet/CloudBuild/Inputs/TriggerGitFileSourceArgs.cs +++ b/sdk/dotnet/CloudBuild/Inputs/TriggerGitFileSourceArgs.cs @@ -12,6 +12,13 @@ namespace Pulumi.Gcp.CloudBuild.Inputs public sealed class TriggerGitFileSourceArgs : global::Pulumi.ResourceArgs { + /// + /// The full resource name of the github enterprise config. + /// Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + /// + [Input("githubEnterpriseConfig")] + public Input? GithubEnterpriseConfig { get; set; } + /// /// The path of the file, with the repo root as the root of the path. /// diff --git a/sdk/dotnet/CloudBuild/Inputs/TriggerGitFileSourceGetArgs.cs b/sdk/dotnet/CloudBuild/Inputs/TriggerGitFileSourceGetArgs.cs index 8edfba3f52..71442d0788 100644 --- a/sdk/dotnet/CloudBuild/Inputs/TriggerGitFileSourceGetArgs.cs +++ b/sdk/dotnet/CloudBuild/Inputs/TriggerGitFileSourceGetArgs.cs @@ -12,6 +12,13 @@ namespace Pulumi.Gcp.CloudBuild.Inputs public sealed class TriggerGitFileSourceGetArgs : global::Pulumi.ResourceArgs { + /// + /// The full resource name of the github enterprise config. + /// Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + /// + [Input("githubEnterpriseConfig")] + public Input? GithubEnterpriseConfig { get; set; } + /// /// The path of the file, with the repo root as the root of the path. /// diff --git a/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigArgs.cs b/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigArgs.cs new file mode 100644 index 0000000000..84c92fc592 --- /dev/null +++ b/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigArgs.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.CloudBuild.Inputs +{ + + public sealed class TriggerRepositoryEventConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// Contains filter properties for matching Pull Requests. + /// Structure is documented below. + /// + [Input("pullRequest")] + public Input? PullRequest { get; set; } + + /// + /// Contains filter properties for matching git pushes. + /// Structure is documented below. + /// + [Input("push")] + public Input? Push { get; set; } + + /// + /// The resource name of the Repo API resource. + /// + [Input("repository")] + public Input? Repository { get; set; } + + public TriggerRepositoryEventConfigArgs() + { + } + public static new TriggerRepositoryEventConfigArgs Empty => new TriggerRepositoryEventConfigArgs(); + } +} diff --git a/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigGetArgs.cs b/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigGetArgs.cs new file mode 100644 index 0000000000..f043a5c5ed --- /dev/null +++ b/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigGetArgs.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.CloudBuild.Inputs +{ + + public sealed class TriggerRepositoryEventConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Contains filter properties for matching Pull Requests. + /// Structure is documented below. + /// + [Input("pullRequest")] + public Input? PullRequest { get; set; } + + /// + /// Contains filter properties for matching git pushes. + /// Structure is documented below. + /// + [Input("push")] + public Input? Push { get; set; } + + /// + /// The resource name of the Repo API resource. + /// + [Input("repository")] + public Input? Repository { get; set; } + + public TriggerRepositoryEventConfigGetArgs() + { + } + public static new TriggerRepositoryEventConfigGetArgs Empty => new TriggerRepositoryEventConfigGetArgs(); + } +} diff --git a/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPullRequestArgs.cs b/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPullRequestArgs.cs new file mode 100644 index 0000000000..7fef95b1d4 --- /dev/null +++ b/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPullRequestArgs.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.CloudBuild.Inputs +{ + + public sealed class TriggerRepositoryEventConfigPullRequestArgs : global::Pulumi.ResourceArgs + { + /// + /// Regex of branches to match. + /// + [Input("branch")] + public Input? Branch { get; set; } + + /// + /// Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + /// Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + /// + [Input("commentControl")] + public Input? CommentControl { get; set; } + + /// + /// If true, branches that do NOT match the git_ref will trigger a build. + /// + [Input("invertRegex")] + public Input? InvertRegex { get; set; } + + public TriggerRepositoryEventConfigPullRequestArgs() + { + } + public static new TriggerRepositoryEventConfigPullRequestArgs Empty => new TriggerRepositoryEventConfigPullRequestArgs(); + } +} diff --git a/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPullRequestGetArgs.cs b/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPullRequestGetArgs.cs new file mode 100644 index 0000000000..ea91bdef46 --- /dev/null +++ b/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPullRequestGetArgs.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.CloudBuild.Inputs +{ + + public sealed class TriggerRepositoryEventConfigPullRequestGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Regex of branches to match. + /// + [Input("branch")] + public Input? Branch { get; set; } + + /// + /// Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + /// Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + /// + [Input("commentControl")] + public Input? CommentControl { get; set; } + + /// + /// If true, branches that do NOT match the git_ref will trigger a build. + /// + [Input("invertRegex")] + public Input? InvertRegex { get; set; } + + public TriggerRepositoryEventConfigPullRequestGetArgs() + { + } + public static new TriggerRepositoryEventConfigPullRequestGetArgs Empty => new TriggerRepositoryEventConfigPullRequestGetArgs(); + } +} diff --git a/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPushArgs.cs b/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPushArgs.cs new file mode 100644 index 0000000000..1beb656b96 --- /dev/null +++ b/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPushArgs.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.CloudBuild.Inputs +{ + + public sealed class TriggerRepositoryEventConfigPushArgs : global::Pulumi.ResourceArgs + { + /// + /// Regex of branches to match. Specify only one of branch or tag. + /// + [Input("branch")] + public Input? Branch { get; set; } + + /// + /// When true, only trigger a build if the revision regex does NOT match the git_ref regex. + /// + [Input("invertRegex")] + public Input? InvertRegex { get; set; } + + /// + /// Regex of tags to match. Specify only one of branch or tag. + /// + [Input("tag")] + public Input? Tag { get; set; } + + public TriggerRepositoryEventConfigPushArgs() + { + } + public static new TriggerRepositoryEventConfigPushArgs Empty => new TriggerRepositoryEventConfigPushArgs(); + } +} diff --git a/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPushGetArgs.cs b/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPushGetArgs.cs new file mode 100644 index 0000000000..84d5a53ebb --- /dev/null +++ b/sdk/dotnet/CloudBuild/Inputs/TriggerRepositoryEventConfigPushGetArgs.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.CloudBuild.Inputs +{ + + public sealed class TriggerRepositoryEventConfigPushGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Regex of branches to match. Specify only one of branch or tag. + /// + [Input("branch")] + public Input? Branch { get; set; } + + /// + /// When true, only trigger a build if the revision regex does NOT match the git_ref regex. + /// + [Input("invertRegex")] + public Input? InvertRegex { get; set; } + + /// + /// Regex of tags to match. Specify only one of branch or tag. + /// + [Input("tag")] + public Input? Tag { get; set; } + + public TriggerRepositoryEventConfigPushGetArgs() + { + } + public static new TriggerRepositoryEventConfigPushGetArgs Empty => new TriggerRepositoryEventConfigPushGetArgs(); + } +} diff --git a/sdk/dotnet/CloudBuild/Inputs/TriggerSourceToBuildArgs.cs b/sdk/dotnet/CloudBuild/Inputs/TriggerSourceToBuildArgs.cs index 03c838e8e0..a71046c84a 100644 --- a/sdk/dotnet/CloudBuild/Inputs/TriggerSourceToBuildArgs.cs +++ b/sdk/dotnet/CloudBuild/Inputs/TriggerSourceToBuildArgs.cs @@ -12,6 +12,13 @@ namespace Pulumi.Gcp.CloudBuild.Inputs public sealed class TriggerSourceToBuildArgs : global::Pulumi.ResourceArgs { + /// + /// The full resource name of the github enterprise config. + /// Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + /// + [Input("githubEnterpriseConfig")] + public Input? GithubEnterpriseConfig { get; set; } + /// /// The branch or tag to use. Must start with "refs/" (required). /// diff --git a/sdk/dotnet/CloudBuild/Inputs/TriggerSourceToBuildGetArgs.cs b/sdk/dotnet/CloudBuild/Inputs/TriggerSourceToBuildGetArgs.cs index d2a1c3bdd7..a833561daf 100644 --- a/sdk/dotnet/CloudBuild/Inputs/TriggerSourceToBuildGetArgs.cs +++ b/sdk/dotnet/CloudBuild/Inputs/TriggerSourceToBuildGetArgs.cs @@ -12,6 +12,13 @@ namespace Pulumi.Gcp.CloudBuild.Inputs public sealed class TriggerSourceToBuildGetArgs : global::Pulumi.ResourceArgs { + /// + /// The full resource name of the github enterprise config. + /// Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + /// + [Input("githubEnterpriseConfig")] + public Input? GithubEnterpriseConfig { get; set; } + /// /// The branch or tag to use. Must start with "refs/" (required). /// diff --git a/sdk/dotnet/CloudBuild/Outputs/GetTriggerGitFileSourceResult.cs b/sdk/dotnet/CloudBuild/Outputs/GetTriggerGitFileSourceResult.cs index a355de9684..337b97de65 100644 --- a/sdk/dotnet/CloudBuild/Outputs/GetTriggerGitFileSourceResult.cs +++ b/sdk/dotnet/CloudBuild/Outputs/GetTriggerGitFileSourceResult.cs @@ -13,6 +13,7 @@ namespace Pulumi.Gcp.CloudBuild.Outputs [OutputType] public sealed class GetTriggerGitFileSourceResult { + public readonly string GithubEnterpriseConfig; public readonly string Path; public readonly string RepoType; public readonly string Revision; @@ -20,6 +21,8 @@ public sealed class GetTriggerGitFileSourceResult [OutputConstructor] private GetTriggerGitFileSourceResult( + string githubEnterpriseConfig, + string path, string repoType, @@ -28,6 +31,7 @@ private GetTriggerGitFileSourceResult( string uri) { + GithubEnterpriseConfig = githubEnterpriseConfig; Path = path; RepoType = repoType; Revision = revision; diff --git a/sdk/dotnet/CloudBuild/Outputs/GetTriggerRepositoryEventConfigPullRequestResult.cs b/sdk/dotnet/CloudBuild/Outputs/GetTriggerRepositoryEventConfigPullRequestResult.cs new file mode 100644 index 0000000000..676c424b12 --- /dev/null +++ b/sdk/dotnet/CloudBuild/Outputs/GetTriggerRepositoryEventConfigPullRequestResult.cs @@ -0,0 +1,33 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.CloudBuild.Outputs +{ + + [OutputType] + public sealed class GetTriggerRepositoryEventConfigPullRequestResult + { + public readonly string Branch; + public readonly string CommentControl; + public readonly bool InvertRegex; + + [OutputConstructor] + private GetTriggerRepositoryEventConfigPullRequestResult( + string branch, + + string commentControl, + + bool invertRegex) + { + Branch = branch; + CommentControl = commentControl; + InvertRegex = invertRegex; + } + } +} diff --git a/sdk/dotnet/CloudBuild/Outputs/GetTriggerRepositoryEventConfigPushResult.cs b/sdk/dotnet/CloudBuild/Outputs/GetTriggerRepositoryEventConfigPushResult.cs new file mode 100644 index 0000000000..bc7df47e8b --- /dev/null +++ b/sdk/dotnet/CloudBuild/Outputs/GetTriggerRepositoryEventConfigPushResult.cs @@ -0,0 +1,33 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.CloudBuild.Outputs +{ + + [OutputType] + public sealed class GetTriggerRepositoryEventConfigPushResult + { + public readonly string Branch; + public readonly bool InvertRegex; + public readonly string Tag; + + [OutputConstructor] + private GetTriggerRepositoryEventConfigPushResult( + string branch, + + bool invertRegex, + + string tag) + { + Branch = branch; + InvertRegex = invertRegex; + Tag = tag; + } + } +} diff --git a/sdk/dotnet/CloudBuild/Outputs/GetTriggerRepositoryEventConfigResult.cs b/sdk/dotnet/CloudBuild/Outputs/GetTriggerRepositoryEventConfigResult.cs new file mode 100644 index 0000000000..aa65a8f6cb --- /dev/null +++ b/sdk/dotnet/CloudBuild/Outputs/GetTriggerRepositoryEventConfigResult.cs @@ -0,0 +1,33 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.CloudBuild.Outputs +{ + + [OutputType] + public sealed class GetTriggerRepositoryEventConfigResult + { + public readonly ImmutableArray PullRequests; + public readonly ImmutableArray Pushes; + public readonly string Repository; + + [OutputConstructor] + private GetTriggerRepositoryEventConfigResult( + ImmutableArray pullRequests, + + ImmutableArray pushes, + + string repository) + { + PullRequests = pullRequests; + Pushes = pushes; + Repository = repository; + } + } +} diff --git a/sdk/dotnet/CloudBuild/Outputs/GetTriggerSourceToBuildResult.cs b/sdk/dotnet/CloudBuild/Outputs/GetTriggerSourceToBuildResult.cs index 9ec6110929..e2859e48e4 100644 --- a/sdk/dotnet/CloudBuild/Outputs/GetTriggerSourceToBuildResult.cs +++ b/sdk/dotnet/CloudBuild/Outputs/GetTriggerSourceToBuildResult.cs @@ -13,18 +13,22 @@ namespace Pulumi.Gcp.CloudBuild.Outputs [OutputType] public sealed class GetTriggerSourceToBuildResult { + public readonly string GithubEnterpriseConfig; public readonly string Ref; public readonly string RepoType; public readonly string Uri; [OutputConstructor] private GetTriggerSourceToBuildResult( + string githubEnterpriseConfig, + string @ref, string repoType, string uri) { + GithubEnterpriseConfig = githubEnterpriseConfig; Ref = @ref; RepoType = repoType; Uri = uri; diff --git a/sdk/dotnet/CloudBuild/Outputs/TriggerGitFileSource.cs b/sdk/dotnet/CloudBuild/Outputs/TriggerGitFileSource.cs index 0736ccd367..a09c4bc06d 100644 --- a/sdk/dotnet/CloudBuild/Outputs/TriggerGitFileSource.cs +++ b/sdk/dotnet/CloudBuild/Outputs/TriggerGitFileSource.cs @@ -13,6 +13,11 @@ namespace Pulumi.Gcp.CloudBuild.Outputs [OutputType] public sealed class TriggerGitFileSource { + /// + /// The full resource name of the github enterprise config. + /// Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + /// + public readonly string? GithubEnterpriseConfig; /// /// The path of the file, with the repo root as the root of the path. /// @@ -37,6 +42,8 @@ public sealed class TriggerGitFileSource [OutputConstructor] private TriggerGitFileSource( + string? githubEnterpriseConfig, + string path, string repoType, @@ -45,6 +52,7 @@ private TriggerGitFileSource( string? uri) { + GithubEnterpriseConfig = githubEnterpriseConfig; Path = path; RepoType = repoType; Revision = revision; diff --git a/sdk/dotnet/CloudBuild/Outputs/TriggerRepositoryEventConfig.cs b/sdk/dotnet/CloudBuild/Outputs/TriggerRepositoryEventConfig.cs new file mode 100644 index 0000000000..08c2235906 --- /dev/null +++ b/sdk/dotnet/CloudBuild/Outputs/TriggerRepositoryEventConfig.cs @@ -0,0 +1,44 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.CloudBuild.Outputs +{ + + [OutputType] + public sealed class TriggerRepositoryEventConfig + { + /// + /// Contains filter properties for matching Pull Requests. + /// Structure is documented below. + /// + public readonly Outputs.TriggerRepositoryEventConfigPullRequest? PullRequest; + /// + /// Contains filter properties for matching git pushes. + /// Structure is documented below. + /// + public readonly Outputs.TriggerRepositoryEventConfigPush? Push; + /// + /// The resource name of the Repo API resource. + /// + public readonly string? Repository; + + [OutputConstructor] + private TriggerRepositoryEventConfig( + Outputs.TriggerRepositoryEventConfigPullRequest? pullRequest, + + Outputs.TriggerRepositoryEventConfigPush? push, + + string? repository) + { + PullRequest = pullRequest; + Push = push; + Repository = repository; + } + } +} diff --git a/sdk/dotnet/CloudBuild/Outputs/TriggerRepositoryEventConfigPullRequest.cs b/sdk/dotnet/CloudBuild/Outputs/TriggerRepositoryEventConfigPullRequest.cs new file mode 100644 index 0000000000..9773167e89 --- /dev/null +++ b/sdk/dotnet/CloudBuild/Outputs/TriggerRepositoryEventConfigPullRequest.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.CloudBuild.Outputs +{ + + [OutputType] + public sealed class TriggerRepositoryEventConfigPullRequest + { + /// + /// Regex of branches to match. + /// + public readonly string? Branch; + /// + /// Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + /// Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + /// + public readonly string? CommentControl; + /// + /// If true, branches that do NOT match the git_ref will trigger a build. + /// + public readonly bool? InvertRegex; + + [OutputConstructor] + private TriggerRepositoryEventConfigPullRequest( + string? branch, + + string? commentControl, + + bool? invertRegex) + { + Branch = branch; + CommentControl = commentControl; + InvertRegex = invertRegex; + } + } +} diff --git a/sdk/dotnet/CloudBuild/Outputs/TriggerRepositoryEventConfigPush.cs b/sdk/dotnet/CloudBuild/Outputs/TriggerRepositoryEventConfigPush.cs new file mode 100644 index 0000000000..f5f31e4303 --- /dev/null +++ b/sdk/dotnet/CloudBuild/Outputs/TriggerRepositoryEventConfigPush.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.CloudBuild.Outputs +{ + + [OutputType] + public sealed class TriggerRepositoryEventConfigPush + { + /// + /// Regex of branches to match. Specify only one of branch or tag. + /// + public readonly string? Branch; + /// + /// When true, only trigger a build if the revision regex does NOT match the git_ref regex. + /// + public readonly bool? InvertRegex; + /// + /// Regex of tags to match. Specify only one of branch or tag. + /// + public readonly string? Tag; + + [OutputConstructor] + private TriggerRepositoryEventConfigPush( + string? branch, + + bool? invertRegex, + + string? tag) + { + Branch = branch; + InvertRegex = invertRegex; + Tag = tag; + } + } +} diff --git a/sdk/dotnet/CloudBuild/Outputs/TriggerSourceToBuild.cs b/sdk/dotnet/CloudBuild/Outputs/TriggerSourceToBuild.cs index 7f3b98acf2..afd72ee78e 100644 --- a/sdk/dotnet/CloudBuild/Outputs/TriggerSourceToBuild.cs +++ b/sdk/dotnet/CloudBuild/Outputs/TriggerSourceToBuild.cs @@ -13,6 +13,11 @@ namespace Pulumi.Gcp.CloudBuild.Outputs [OutputType] public sealed class TriggerSourceToBuild { + /// + /// The full resource name of the github enterprise config. + /// Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + /// + public readonly string? GithubEnterpriseConfig; /// /// The branch or tag to use. Must start with "refs/" (required). /// @@ -30,12 +35,15 @@ public sealed class TriggerSourceToBuild [OutputConstructor] private TriggerSourceToBuild( + string? githubEnterpriseConfig, + string @ref, string repoType, string uri) { + GithubEnterpriseConfig = githubEnterpriseConfig; Ref = @ref; RepoType = repoType; Uri = uri; diff --git a/sdk/dotnet/CloudBuild/Trigger.cs b/sdk/dotnet/CloudBuild/Trigger.cs index 38c502b556..bf73d0de81 100644 --- a/sdk/dotnet/CloudBuild/Trigger.cs +++ b/sdk/dotnet/CloudBuild/Trigger.cs @@ -279,6 +279,89 @@ namespace Pulumi.Gcp.CloudBuild /// /// }); /// ``` + /// ### Cloudbuild Trigger Manual Github Enterprise + /// + /// ```csharp + /// using System.Collections.Generic; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var manual_ghe_trigger = new Gcp.CloudBuild.Trigger("manual-ghe-trigger", new() + /// { + /// GitFileSource = new Gcp.CloudBuild.Inputs.TriggerGitFileSourceArgs + /// { + /// GithubEnterpriseConfig = "projects/myProject/locations/global/githubEnterpriseConfigs/configID", + /// Path = "cloudbuild.yaml", + /// RepoType = "GITHUB", + /// Revision = "refs/heads/main", + /// Uri = "https://hashicorp/terraform-provider-google-beta", + /// }, + /// SourceToBuild = new Gcp.CloudBuild.Inputs.TriggerSourceToBuildArgs + /// { + /// GithubEnterpriseConfig = "projects/myProject/locations/global/githubEnterpriseConfigs/configID", + /// Ref = "refs/heads/main", + /// RepoType = "GITHUB", + /// Uri = "https://hashicorp/terraform-provider-google-beta", + /// }, + /// }); + /// + /// }); + /// ``` + /// ### Cloudbuild Trigger Repo + /// + /// ```csharp + /// using System.Collections.Generic; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var my_connection = new Gcp.CloudBuildV2.Connection("my-connection", new() + /// { + /// Location = "us-central1", + /// GithubConfig = new Gcp.CloudBuildV2.Inputs.ConnectionGithubConfigArgs + /// { + /// AppInstallationId = 123123, + /// AuthorizerCredential = new Gcp.CloudBuildV2.Inputs.ConnectionGithubConfigAuthorizerCredentialArgs + /// { + /// OauthTokenSecretVersion = "projects/my-project/secrets/github-pat-secret/versions/latest", + /// }, + /// }, + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var my_repository = new Gcp.CloudBuildV2.Repository("my-repository", new() + /// { + /// ParentConnection = my_connection.Id, + /// RemoteUri = "https://github.com/myuser/my-repo.git", + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var repo_trigger = new Gcp.CloudBuild.Trigger("repo-trigger", new() + /// { + /// Location = "us-central1", + /// RepositoryEventConfig = new Gcp.CloudBuild.Inputs.TriggerRepositoryEventConfigArgs + /// { + /// Repository = my_repository.Id, + /// Push = new Gcp.CloudBuild.Inputs.TriggerRepositoryEventConfigPushArgs + /// { + /// Branch = "feature-.*", + /// }, + /// }, + /// Filename = "cloudbuild.yaml", + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// }); + /// ``` /// /// ## Import /// @@ -430,6 +513,12 @@ public partial class Trigger : global::Pulumi.CustomResource [Output("pubsubConfig")] public Output PubsubConfig { get; private set; } = null!; + /// + /// The configuration of a trigger that creates a build whenever an event from Repo API is received. + /// + [Output("repositoryEventConfig")] + public Output RepositoryEventConfig { get; private set; } = null!; + /// /// The service account used for all user-controlled operations including /// triggers.patch, triggers.run, builds.create, and builds.cancel. @@ -668,6 +757,12 @@ public InputList IncludedFiles [Input("pubsubConfig")] public Input? PubsubConfig { get; set; } + /// + /// The configuration of a trigger that creates a build whenever an event from Repo API is received. + /// + [Input("repositoryEventConfig")] + public Input? RepositoryEventConfig { get; set; } + /// /// The service account used for all user-controlled operations including /// triggers.patch, triggers.run, builds.create, and builds.cancel. @@ -880,6 +975,12 @@ public InputList IncludedFiles [Input("pubsubConfig")] public Input? PubsubConfig { get; set; } + /// + /// The configuration of a trigger that creates a build whenever an event from Repo API is received. + /// + [Input("repositoryEventConfig")] + public Input? RepositoryEventConfig { get; set; } + /// /// The service account used for all user-controlled operations including /// triggers.patch, triggers.run, builds.create, and builds.cancel. diff --git a/sdk/dotnet/CloudBuildV2/Connection.cs b/sdk/dotnet/CloudBuildV2/Connection.cs new file mode 100644 index 0000000000..9ae3fecd07 --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Connection.cs @@ -0,0 +1,372 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.CloudBuildV2 +{ + /// + /// Beta only: The Cloudbuildv2 Connection resource + /// + /// ## Example Usage + /// ### GitHub Connection + /// Creates a Connection to github.com + /// ```csharp + /// using System.Collections.Generic; + /// using System.IO; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var github_token_secret = new Gcp.SecretManager.Secret("github-token-secret", new() + /// { + /// SecretId = "github-token-secret", + /// Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs + /// { + /// Automatic = true, + /// }, + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var github_token_secret_version = new Gcp.SecretManager.SecretVersion("github-token-secret-version", new() + /// { + /// Secret = github_token_secret.Id, + /// SecretData = File.ReadAllText("my-github-token.txt"), + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var p4sa_secretAccessor = Gcp.Organizations.GetIAMPolicy.Invoke(new() + /// { + /// Bindings = new[] + /// { + /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs + /// { + /// Role = "roles/secretmanager.secretAccessor", + /// Members = new[] + /// { + /// "serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com", + /// }, + /// }, + /// }, + /// }); + /// + /// var policy = new Gcp.SecretManager.SecretIamPolicy("policy", new() + /// { + /// SecretId = github_token_secret.SecretId, + /// PolicyData = p4sa_secretAccessor.Apply(p4sa_secretAccessor => p4sa_secretAccessor.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData)), + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var my_connection = new Gcp.CloudBuildV2.Connection("my-connection", new() + /// { + /// Location = "us-west1", + /// GithubConfig = new Gcp.CloudBuildV2.Inputs.ConnectionGithubConfigArgs + /// { + /// AppInstallationId = 123123, + /// AuthorizerCredential = new Gcp.CloudBuildV2.Inputs.ConnectionGithubConfigAuthorizerCredentialArgs + /// { + /// OauthTokenSecretVersion = github_token_secret_version.Id, + /// }, + /// }, + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// Connection can be imported using any of these accepted formats + /// + /// ```sh + /// $ pulumi import gcp:cloudbuildv2/connection:Connection default projects/{{project}}/locations/{{location}}/connections/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:cloudbuildv2/connection:Connection default {{project}}/{{location}}/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:cloudbuildv2/connection:Connection default {{location}}/{{name}} + /// ``` + /// + [GcpResourceType("gcp:cloudbuildv2/connection:Connection")] + public partial class Connection : global::Pulumi.CustomResource + { + /// + /// Allows clients to store small amounts of arbitrary data. + /// + [Output("annotations")] + public Output?> Annotations { get; private set; } = null!; + + /// + /// Output only. Server assigned timestamp for when the connection was created. + /// + [Output("createTime")] + public Output CreateTime { get; private set; } = null!; + + /// + /// If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + /// + [Output("disabled")] + public Output Disabled { get; private set; } = null!; + + /// + /// This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + /// + [Output("etag")] + public Output Etag { get; private set; } = null!; + + /// + /// Configuration for connections to github.com. + /// + [Output("githubConfig")] + public Output GithubConfig { get; private set; } = null!; + + /// + /// Configuration for connections to an instance of GitHub Enterprise. + /// + [Output("githubEnterpriseConfig")] + public Output GithubEnterpriseConfig { get; private set; } = null!; + + /// + /// Output only. Installation state of the Connection. + /// + [Output("installationStates")] + public Output> InstallationStates { get; private set; } = null!; + + /// + /// The location for the resource + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// The project for the resource + /// + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// Output only. Set to true when the connection is being set up or updated in the background. + /// + [Output("reconciling")] + public Output Reconciling { get; private set; } = null!; + + /// + /// Output only. Server assigned timestamp for when the connection was updated. + /// + [Output("updateTime")] + public Output UpdateTime { get; private set; } = null!; + + + /// + /// Create a Connection 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 Connection(string name, ConnectionArgs args, CustomResourceOptions? options = null) + : base("gcp:cloudbuildv2/connection:Connection", name, args ?? new ConnectionArgs(), MakeResourceOptions(options, "")) + { + } + + private Connection(string name, Input id, ConnectionState? state = null, CustomResourceOptions? options = null) + : base("gcp:cloudbuildv2/connection:Connection", 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 Connection 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 Connection Get(string name, Input id, ConnectionState? state = null, CustomResourceOptions? options = null) + { + return new Connection(name, id, state, options); + } + } + + public sealed class ConnectionArgs : global::Pulumi.ResourceArgs + { + [Input("annotations")] + private InputMap? _annotations; + + /// + /// Allows clients to store small amounts of arbitrary data. + /// + public InputMap Annotations + { + get => _annotations ?? (_annotations = new InputMap()); + set => _annotations = value; + } + + /// + /// If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + /// + [Input("disabled")] + public Input? Disabled { get; set; } + + /// + /// Configuration for connections to github.com. + /// + [Input("githubConfig")] + public Input? GithubConfig { get; set; } + + /// + /// Configuration for connections to an instance of GitHub Enterprise. + /// + [Input("githubEnterpriseConfig")] + public Input? GithubEnterpriseConfig { get; set; } + + /// + /// The location for the resource + /// + [Input("location", required: true)] + public Input Location { get; set; } = null!; + + /// + /// Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The project for the resource + /// + [Input("project")] + public Input? Project { get; set; } + + public ConnectionArgs() + { + } + public static new ConnectionArgs Empty => new ConnectionArgs(); + } + + public sealed class ConnectionState : global::Pulumi.ResourceArgs + { + [Input("annotations")] + private InputMap? _annotations; + + /// + /// Allows clients to store small amounts of arbitrary data. + /// + public InputMap Annotations + { + get => _annotations ?? (_annotations = new InputMap()); + set => _annotations = value; + } + + /// + /// Output only. Server assigned timestamp for when the connection was created. + /// + [Input("createTime")] + public Input? CreateTime { get; set; } + + /// + /// If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + /// + [Input("disabled")] + public Input? Disabled { get; set; } + + /// + /// This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + /// + [Input("etag")] + public Input? Etag { get; set; } + + /// + /// Configuration for connections to github.com. + /// + [Input("githubConfig")] + public Input? GithubConfig { get; set; } + + /// + /// Configuration for connections to an instance of GitHub Enterprise. + /// + [Input("githubEnterpriseConfig")] + public Input? GithubEnterpriseConfig { get; set; } + + [Input("installationStates")] + private InputList? _installationStates; + + /// + /// Output only. Installation state of the Connection. + /// + public InputList InstallationStates + { + get => _installationStates ?? (_installationStates = new InputList()); + set => _installationStates = value; + } + + /// + /// The location for the resource + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The project for the resource + /// + [Input("project")] + public Input? Project { get; set; } + + /// + /// Output only. Set to true when the connection is being set up or updated in the background. + /// + [Input("reconciling")] + public Input? Reconciling { get; set; } + + /// + /// Output only. Server assigned timestamp for when the connection was updated. + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public ConnectionState() + { + } + public static new ConnectionState Empty => new ConnectionState(); + } +} diff --git a/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigArgs.cs b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigArgs.cs new file mode 100644 index 0000000000..1613528237 --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigArgs.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.CloudBuildV2.Inputs +{ + + public sealed class ConnectionGithubConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// GitHub App installation id. + /// + [Input("appInstallationId")] + public Input? AppInstallationId { get; set; } + + /// + /// OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + /// + [Input("authorizerCredential")] + public Input? AuthorizerCredential { get; set; } + + public ConnectionGithubConfigArgs() + { + } + public static new ConnectionGithubConfigArgs Empty => new ConnectionGithubConfigArgs(); + } +} diff --git a/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigAuthorizerCredentialArgs.cs b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigAuthorizerCredentialArgs.cs new file mode 100644 index 0000000000..c44dee64cd --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigAuthorizerCredentialArgs.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.CloudBuildV2.Inputs +{ + + public sealed class ConnectionGithubConfigAuthorizerCredentialArgs : global::Pulumi.ResourceArgs + { + /// + /// A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`. + /// + [Input("oauthTokenSecretVersion")] + public Input? OauthTokenSecretVersion { get; set; } + + /// + /// The username associated to this token. + /// + [Input("username")] + public Input? Username { get; set; } + + public ConnectionGithubConfigAuthorizerCredentialArgs() + { + } + public static new ConnectionGithubConfigAuthorizerCredentialArgs Empty => new ConnectionGithubConfigAuthorizerCredentialArgs(); + } +} diff --git a/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigAuthorizerCredentialGetArgs.cs b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigAuthorizerCredentialGetArgs.cs new file mode 100644 index 0000000000..a7c25833b1 --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigAuthorizerCredentialGetArgs.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.CloudBuildV2.Inputs +{ + + public sealed class ConnectionGithubConfigAuthorizerCredentialGetArgs : global::Pulumi.ResourceArgs + { + /// + /// A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`. + /// + [Input("oauthTokenSecretVersion")] + public Input? OauthTokenSecretVersion { get; set; } + + /// + /// The username associated to this token. + /// + [Input("username")] + public Input? Username { get; set; } + + public ConnectionGithubConfigAuthorizerCredentialGetArgs() + { + } + public static new ConnectionGithubConfigAuthorizerCredentialGetArgs Empty => new ConnectionGithubConfigAuthorizerCredentialGetArgs(); + } +} diff --git a/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigGetArgs.cs b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigGetArgs.cs new file mode 100644 index 0000000000..0567f34970 --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubConfigGetArgs.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.CloudBuildV2.Inputs +{ + + public sealed class ConnectionGithubConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// GitHub App installation id. + /// + [Input("appInstallationId")] + public Input? AppInstallationId { get; set; } + + /// + /// OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + /// + [Input("authorizerCredential")] + public Input? AuthorizerCredential { get; set; } + + public ConnectionGithubConfigGetArgs() + { + } + public static new ConnectionGithubConfigGetArgs Empty => new ConnectionGithubConfigGetArgs(); + } +} diff --git a/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigArgs.cs b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigArgs.cs new file mode 100644 index 0000000000..631ac759d3 --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigArgs.cs @@ -0,0 +1,68 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.CloudBuildV2.Inputs +{ + + public sealed class ConnectionGithubEnterpriseConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// Id of the GitHub App created from the manifest. + /// + [Input("appId")] + public Input? AppId { get; set; } + + /// + /// ID of the installation of the GitHub App. + /// + [Input("appInstallationId")] + public Input? AppInstallationId { get; set; } + + /// + /// The URL-friendly name of the GitHub App. + /// + [Input("appSlug")] + public Input? AppSlug { get; set; } + + /// + /// Required. The URI of the GitHub Enterprise host this connection is for. + /// + [Input("hostUri", required: true)] + public Input HostUri { get; set; } = null!; + + /// + /// SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + /// + [Input("privateKeySecretVersion")] + public Input? PrivateKeySecretVersion { get; set; } + + /// + /// Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + /// + [Input("serviceDirectoryConfig")] + public Input? ServiceDirectoryConfig { get; set; } + + /// + /// SSL certificate to use for requests to GitHub Enterprise. + /// + [Input("sslCa")] + public Input? SslCa { get; set; } + + /// + /// SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + /// + [Input("webhookSecretSecretVersion")] + public Input? WebhookSecretSecretVersion { get; set; } + + public ConnectionGithubEnterpriseConfigArgs() + { + } + public static new ConnectionGithubEnterpriseConfigArgs Empty => new ConnectionGithubEnterpriseConfigArgs(); + } +} diff --git a/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigGetArgs.cs b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigGetArgs.cs new file mode 100644 index 0000000000..29ff2da91b --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigGetArgs.cs @@ -0,0 +1,68 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.CloudBuildV2.Inputs +{ + + public sealed class ConnectionGithubEnterpriseConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Id of the GitHub App created from the manifest. + /// + [Input("appId")] + public Input? AppId { get; set; } + + /// + /// ID of the installation of the GitHub App. + /// + [Input("appInstallationId")] + public Input? AppInstallationId { get; set; } + + /// + /// The URL-friendly name of the GitHub App. + /// + [Input("appSlug")] + public Input? AppSlug { get; set; } + + /// + /// Required. The URI of the GitHub Enterprise host this connection is for. + /// + [Input("hostUri", required: true)] + public Input HostUri { get; set; } = null!; + + /// + /// SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + /// + [Input("privateKeySecretVersion")] + public Input? PrivateKeySecretVersion { get; set; } + + /// + /// Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + /// + [Input("serviceDirectoryConfig")] + public Input? ServiceDirectoryConfig { get; set; } + + /// + /// SSL certificate to use for requests to GitHub Enterprise. + /// + [Input("sslCa")] + public Input? SslCa { get; set; } + + /// + /// SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + /// + [Input("webhookSecretSecretVersion")] + public Input? WebhookSecretSecretVersion { get; set; } + + public ConnectionGithubEnterpriseConfigGetArgs() + { + } + public static new ConnectionGithubEnterpriseConfigGetArgs Empty => new ConnectionGithubEnterpriseConfigGetArgs(); + } +} diff --git a/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs.cs b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs.cs new file mode 100644 index 0000000000..0e3fe039cb --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs.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.CloudBuildV2.Inputs +{ + + public sealed class ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + /// + [Input("service", required: true)] + public Input Service { get; set; } = null!; + + public ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs() + { + } + public static new ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs Empty => new ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs(); + } +} diff --git a/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfigGetArgs.cs b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfigGetArgs.cs new file mode 100644 index 0000000000..c63506b6db --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfigGetArgs.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.CloudBuildV2.Inputs +{ + + public sealed class ConnectionGithubEnterpriseConfigServiceDirectoryConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + /// + [Input("service", required: true)] + public Input Service { get; set; } = null!; + + public ConnectionGithubEnterpriseConfigServiceDirectoryConfigGetArgs() + { + } + public static new ConnectionGithubEnterpriseConfigServiceDirectoryConfigGetArgs Empty => new ConnectionGithubEnterpriseConfigServiceDirectoryConfigGetArgs(); + } +} diff --git a/sdk/dotnet/CloudBuildV2/Inputs/ConnectionInstallationStateArgs.cs b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionInstallationStateArgs.cs new file mode 100644 index 0000000000..5a6633cb80 --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionInstallationStateArgs.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.CloudBuildV2.Inputs +{ + + public sealed class ConnectionInstallationStateArgs : global::Pulumi.ResourceArgs + { + [Input("actionUri")] + public Input? ActionUri { get; set; } + + [Input("message")] + public Input? Message { get; set; } + + [Input("stage")] + public Input? Stage { get; set; } + + public ConnectionInstallationStateArgs() + { + } + public static new ConnectionInstallationStateArgs Empty => new ConnectionInstallationStateArgs(); + } +} diff --git a/sdk/dotnet/CloudBuildV2/Inputs/ConnectionInstallationStateGetArgs.cs b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionInstallationStateGetArgs.cs new file mode 100644 index 0000000000..da65da9975 --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Inputs/ConnectionInstallationStateGetArgs.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.CloudBuildV2.Inputs +{ + + public sealed class ConnectionInstallationStateGetArgs : global::Pulumi.ResourceArgs + { + [Input("actionUri")] + public Input? ActionUri { get; set; } + + [Input("message")] + public Input? Message { get; set; } + + [Input("stage")] + public Input? Stage { get; set; } + + public ConnectionInstallationStateGetArgs() + { + } + public static new ConnectionInstallationStateGetArgs Empty => new ConnectionInstallationStateGetArgs(); + } +} diff --git a/sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubConfig.cs b/sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubConfig.cs new file mode 100644 index 0000000000..7c424e392c --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubConfig.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.CloudBuildV2.Outputs +{ + + [OutputType] + public sealed class ConnectionGithubConfig + { + /// + /// GitHub App installation id. + /// + public readonly int? AppInstallationId; + /// + /// OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + /// + public readonly Outputs.ConnectionGithubConfigAuthorizerCredential? AuthorizerCredential; + + [OutputConstructor] + private ConnectionGithubConfig( + int? appInstallationId, + + Outputs.ConnectionGithubConfigAuthorizerCredential? authorizerCredential) + { + AppInstallationId = appInstallationId; + AuthorizerCredential = authorizerCredential; + } + } +} diff --git a/sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubConfigAuthorizerCredential.cs b/sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubConfigAuthorizerCredential.cs new file mode 100644 index 0000000000..3109617e97 --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubConfigAuthorizerCredential.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.CloudBuildV2.Outputs +{ + + [OutputType] + public sealed class ConnectionGithubConfigAuthorizerCredential + { + /// + /// A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`. + /// + public readonly string? OauthTokenSecretVersion; + /// + /// The username associated to this token. + /// + public readonly string? Username; + + [OutputConstructor] + private ConnectionGithubConfigAuthorizerCredential( + string? oauthTokenSecretVersion, + + string? username) + { + OauthTokenSecretVersion = oauthTokenSecretVersion; + Username = username; + } + } +} diff --git a/sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubEnterpriseConfig.cs b/sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubEnterpriseConfig.cs new file mode 100644 index 0000000000..5bc68e381d --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubEnterpriseConfig.cs @@ -0,0 +1,77 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.CloudBuildV2.Outputs +{ + + [OutputType] + public sealed class ConnectionGithubEnterpriseConfig + { + /// + /// Id of the GitHub App created from the manifest. + /// + public readonly int? AppId; + /// + /// ID of the installation of the GitHub App. + /// + public readonly int? AppInstallationId; + /// + /// The URL-friendly name of the GitHub App. + /// + public readonly string? AppSlug; + /// + /// Required. The URI of the GitHub Enterprise host this connection is for. + /// + public readonly string HostUri; + /// + /// SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + /// + public readonly string? PrivateKeySecretVersion; + /// + /// Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + /// + public readonly Outputs.ConnectionGithubEnterpriseConfigServiceDirectoryConfig? ServiceDirectoryConfig; + /// + /// SSL certificate to use for requests to GitHub Enterprise. + /// + public readonly string? SslCa; + /// + /// SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + /// + public readonly string? WebhookSecretSecretVersion; + + [OutputConstructor] + private ConnectionGithubEnterpriseConfig( + int? appId, + + int? appInstallationId, + + string? appSlug, + + string hostUri, + + string? privateKeySecretVersion, + + Outputs.ConnectionGithubEnterpriseConfigServiceDirectoryConfig? serviceDirectoryConfig, + + string? sslCa, + + string? webhookSecretSecretVersion) + { + AppId = appId; + AppInstallationId = appInstallationId; + AppSlug = appSlug; + HostUri = hostUri; + PrivateKeySecretVersion = privateKeySecretVersion; + ServiceDirectoryConfig = serviceDirectoryConfig; + SslCa = sslCa; + WebhookSecretSecretVersion = webhookSecretSecretVersion; + } + } +} diff --git a/sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfig.cs b/sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfig.cs new file mode 100644 index 0000000000..18813cc66e --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Outputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfig.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.CloudBuildV2.Outputs +{ + + [OutputType] + public sealed class ConnectionGithubEnterpriseConfigServiceDirectoryConfig + { + /// + /// Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + /// + public readonly string Service; + + [OutputConstructor] + private ConnectionGithubEnterpriseConfigServiceDirectoryConfig(string service) + { + Service = service; + } + } +} diff --git a/sdk/dotnet/CloudBuildV2/Outputs/ConnectionInstallationState.cs b/sdk/dotnet/CloudBuildV2/Outputs/ConnectionInstallationState.cs new file mode 100644 index 0000000000..96eb96913d --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Outputs/ConnectionInstallationState.cs @@ -0,0 +1,33 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.CloudBuildV2.Outputs +{ + + [OutputType] + public sealed class ConnectionInstallationState + { + public readonly string? ActionUri; + public readonly string? Message; + public readonly string? Stage; + + [OutputConstructor] + private ConnectionInstallationState( + string? actionUri, + + string? message, + + string? stage) + { + ActionUri = actionUri; + Message = message; + Stage = stage; + } + } +} diff --git a/sdk/dotnet/CloudBuildV2/README.md b/sdk/dotnet/CloudBuildV2/README.md new file mode 100644 index 0000000000..061b113996 --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing Google Cloud Platform resources. diff --git a/sdk/dotnet/CloudBuildV2/Repository.cs b/sdk/dotnet/CloudBuildV2/Repository.cs new file mode 100644 index 0000000000..12995c2a31 --- /dev/null +++ b/sdk/dotnet/CloudBuildV2/Repository.cs @@ -0,0 +1,334 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.CloudBuildV2 +{ + /// + /// Beta only: The Cloudbuildv2 Repository resource + /// + /// ## Example Usage + /// ### Repository In GitHub Connection + /// Creates a Repository resource inside a Connection to github.com + /// ```csharp + /// using System.Collections.Generic; + /// using System.IO; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var github_token_secret = new Gcp.SecretManager.Secret("github-token-secret", new() + /// { + /// SecretId = "github-token-secret", + /// Replication = new Gcp.SecretManager.Inputs.SecretReplicationArgs + /// { + /// Automatic = true, + /// }, + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var github_token_secret_version = new Gcp.SecretManager.SecretVersion("github-token-secret-version", new() + /// { + /// Secret = github_token_secret.Id, + /// SecretData = File.ReadAllText("my-github-token.txt"), + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var p4sa_secretAccessor = Gcp.Organizations.GetIAMPolicy.Invoke(new() + /// { + /// Bindings = new[] + /// { + /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs + /// { + /// Role = "roles/secretmanager.secretAccessor", + /// Members = new[] + /// { + /// "serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com", + /// }, + /// }, + /// }, + /// }); + /// + /// var policy = new Gcp.SecretManager.SecretIamPolicy("policy", new() + /// { + /// SecretId = github_token_secret.SecretId, + /// PolicyData = p4sa_secretAccessor.Apply(p4sa_secretAccessor => p4sa_secretAccessor.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData)), + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var my_connection = new Gcp.CloudBuildV2.Connection("my-connection", new() + /// { + /// Location = "us-west1", + /// GithubConfig = new Gcp.CloudBuildV2.Inputs.ConnectionGithubConfigArgs + /// { + /// AppInstallationId = 123123, + /// AuthorizerCredential = new Gcp.CloudBuildV2.Inputs.ConnectionGithubConfigAuthorizerCredentialArgs + /// { + /// OauthTokenSecretVersion = github_token_secret_version.Id, + /// }, + /// }, + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var my_repository = new Gcp.CloudBuildV2.Repository("my-repository", new() + /// { + /// Location = "us-west1", + /// ParentConnection = my_connection.Name, + /// RemoteUri = "https://github.com/myuser/myrepo.git", + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// Repository can be imported using any of these accepted formats + /// + /// ```sh + /// $ pulumi import gcp:cloudbuildv2/repository:Repository default projects/{{project}}/locations/{{location}}/connections/{{parent_connection}}/repositories/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:cloudbuildv2/repository:Repository default {{project}}/{{location}}/{{parent_connection}}/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:cloudbuildv2/repository:Repository default {{location}}/{{parent_connection}}/{{name}} + /// ``` + /// + [GcpResourceType("gcp:cloudbuildv2/repository:Repository")] + public partial class Repository : global::Pulumi.CustomResource + { + /// + /// Allows clients to store small amounts of arbitrary data. + /// + [Output("annotations")] + public Output?> Annotations { get; private set; } = null!; + + /// + /// Output only. Server assigned timestamp for when the connection was created. + /// + [Output("createTime")] + public Output CreateTime { get; private set; } = null!; + + /// + /// This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + /// + [Output("etag")] + public Output Etag { get; private set; } = null!; + + /// + /// The location for the resource + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// Name of the repository. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// The connection for the resource + /// + [Output("parentConnection")] + public Output ParentConnection { get; private set; } = null!; + + /// + /// The project for the resource + /// + [Output("project")] + public Output Project { get; private set; } = null!; + + /// + /// Required. Git Clone HTTPS URI. + /// + [Output("remoteUri")] + public Output RemoteUri { get; private set; } = null!; + + /// + /// Output only. Server assigned timestamp for when the connection was updated. + /// + [Output("updateTime")] + public Output UpdateTime { get; private set; } = null!; + + + /// + /// Create a Repository 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 Repository(string name, RepositoryArgs args, CustomResourceOptions? options = null) + : base("gcp:cloudbuildv2/repository:Repository", name, args ?? new RepositoryArgs(), MakeResourceOptions(options, "")) + { + } + + private Repository(string name, Input id, RepositoryState? state = null, CustomResourceOptions? options = null) + : base("gcp:cloudbuildv2/repository:Repository", 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 Repository 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 Repository Get(string name, Input id, RepositoryState? state = null, CustomResourceOptions? options = null) + { + return new Repository(name, id, state, options); + } + } + + public sealed class RepositoryArgs : global::Pulumi.ResourceArgs + { + [Input("annotations")] + private InputMap? _annotations; + + /// + /// Allows clients to store small amounts of arbitrary data. + /// + public InputMap Annotations + { + get => _annotations ?? (_annotations = new InputMap()); + set => _annotations = value; + } + + /// + /// The location for the resource + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// Name of the repository. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The connection for the resource + /// + [Input("parentConnection", required: true)] + public Input ParentConnection { get; set; } = null!; + + /// + /// The project for the resource + /// + [Input("project")] + public Input? Project { get; set; } + + /// + /// Required. Git Clone HTTPS URI. + /// + [Input("remoteUri", required: true)] + public Input RemoteUri { get; set; } = null!; + + public RepositoryArgs() + { + } + public static new RepositoryArgs Empty => new RepositoryArgs(); + } + + public sealed class RepositoryState : global::Pulumi.ResourceArgs + { + [Input("annotations")] + private InputMap? _annotations; + + /// + /// Allows clients to store small amounts of arbitrary data. + /// + public InputMap Annotations + { + get => _annotations ?? (_annotations = new InputMap()); + set => _annotations = value; + } + + /// + /// Output only. Server assigned timestamp for when the connection was created. + /// + [Input("createTime")] + public Input? CreateTime { get; set; } + + /// + /// This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + /// + [Input("etag")] + public Input? Etag { get; set; } + + /// + /// The location for the resource + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// Name of the repository. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The connection for the resource + /// + [Input("parentConnection")] + public Input? ParentConnection { get; set; } + + /// + /// The project for the resource + /// + [Input("project")] + public Input? Project { get; set; } + + /// + /// Required. Git Clone HTTPS URI. + /// + [Input("remoteUri")] + public Input? RemoteUri { get; set; } + + /// + /// Output only. Server assigned timestamp for when the connection was updated. + /// + [Input("updateTime")] + public Input? UpdateTime { get; set; } + + public RepositoryState() + { + } + public static new RepositoryState Empty => new RepositoryState(); + } +} diff --git a/sdk/dotnet/CloudFunctions/Function.cs b/sdk/dotnet/CloudFunctions/Function.cs index 56a7f19216..6826fffe7a 100644 --- a/sdk/dotnet/CloudFunctions/Function.cs +++ b/sdk/dotnet/CloudFunctions/Function.cs @@ -224,7 +224,7 @@ public partial class Function : global::Pulumi.CustomResource /// The limit on the maximum number of function instances that may coexist at a given time. /// [Output("maxInstances")] - public Output MaxInstances { get; private set; } = null!; + public Output MaxInstances { get; private set; } = null!; /// /// The limit on the minimum number of function instances that may coexist at a given time. diff --git a/sdk/dotnet/CloudFunctions/GetFunction.cs b/sdk/dotnet/CloudFunctions/GetFunction.cs index feeba3d83c..eb0b960eb6 100644 --- a/sdk/dotnet/CloudFunctions/GetFunction.cs +++ b/sdk/dotnet/CloudFunctions/GetFunction.cs @@ -171,7 +171,7 @@ public sealed class GetFunctionResult /// public readonly ImmutableDictionary Labels; /// - /// The limit on the maximum number of function instances that may coexist at a given time. + /// The limit on the maximum number of function instances that may coexist at a given time. If unset or set to `0`, the API default will be used. /// public readonly int MaxInstances; public readonly int MinInstances; diff --git a/sdk/dotnet/CloudIdentity/GroupMembership.cs b/sdk/dotnet/CloudIdentity/GroupMembership.cs index 281e107dd6..a720233c81 100644 --- a/sdk/dotnet/CloudIdentity/GroupMembership.cs +++ b/sdk/dotnet/CloudIdentity/GroupMembership.cs @@ -151,7 +151,6 @@ public partial class GroupMembership : global::Pulumi.CustomResource /// /// EntityKey of the member. - /// Structure is documented below. /// [Output("memberKey")] public Output MemberKey { get; private set; } = null!; @@ -244,7 +243,6 @@ public sealed class GroupMembershipArgs : global::Pulumi.ResourceArgs /// /// EntityKey of the member. - /// Structure is documented below. /// [Input("memberKey")] public Input? MemberKey { get; set; } @@ -292,7 +290,6 @@ public sealed class GroupMembershipState : global::Pulumi.ResourceArgs /// /// EntityKey of the member. - /// Structure is documented below. /// [Input("memberKey")] public Input? MemberKey { get; set; } diff --git a/sdk/dotnet/CloudRun/Inputs/DomainMappingMetadataArgs.cs b/sdk/dotnet/CloudRun/Inputs/DomainMappingMetadataArgs.cs index ccec0730de..3937634e83 100644 --- a/sdk/dotnet/CloudRun/Inputs/DomainMappingMetadataArgs.cs +++ b/sdk/dotnet/CloudRun/Inputs/DomainMappingMetadataArgs.cs @@ -14,15 +14,6 @@ public sealed class DomainMappingMetadataArgs : global::Pulumi.ResourceArgs { [Input("annotations")] private InputMap? _annotations; - - /// - /// Annotations is a key value map stored with a resource that - /// may be set by external tools to store and retrieve arbitrary metadata. More - /// info: http://kubernetes.io/docs/user-guide/annotations - /// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - /// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - /// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - /// public InputMap Annotations { get => _annotations ?? (_annotations = new InputMap()); diff --git a/sdk/dotnet/CloudRun/Inputs/DomainMappingMetadataGetArgs.cs b/sdk/dotnet/CloudRun/Inputs/DomainMappingMetadataGetArgs.cs index d269e0ceea..9cef6e4b8f 100644 --- a/sdk/dotnet/CloudRun/Inputs/DomainMappingMetadataGetArgs.cs +++ b/sdk/dotnet/CloudRun/Inputs/DomainMappingMetadataGetArgs.cs @@ -14,15 +14,6 @@ public sealed class DomainMappingMetadataGetArgs : global::Pulumi.ResourceArgs { [Input("annotations")] private InputMap? _annotations; - - /// - /// Annotations is a key value map stored with a resource that - /// may be set by external tools to store and retrieve arbitrary metadata. More - /// info: http://kubernetes.io/docs/user-guide/annotations - /// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - /// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - /// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - /// public InputMap Annotations { get => _annotations ?? (_annotations = new InputMap()); diff --git a/sdk/dotnet/CloudRun/Inputs/ServiceMetadataArgs.cs b/sdk/dotnet/CloudRun/Inputs/ServiceMetadataArgs.cs index 5465068e01..4bdbdb745d 100644 --- a/sdk/dotnet/CloudRun/Inputs/ServiceMetadataArgs.cs +++ b/sdk/dotnet/CloudRun/Inputs/ServiceMetadataArgs.cs @@ -14,18 +14,6 @@ public sealed class ServiceMetadataArgs : global::Pulumi.ResourceArgs { [Input("annotations")] private InputMap? _annotations; - - /// - /// Annotations is a key value map stored with a resource that - /// may be set by external tools to store and retrieve arbitrary metadata. More - /// info: http://kubernetes.io/docs/user-guide/annotations - /// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - /// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - /// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - /// Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - /// - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - /// for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - /// public InputMap Annotations { get => _annotations ?? (_annotations = new InputMap()); diff --git a/sdk/dotnet/CloudRun/Inputs/ServiceMetadataGetArgs.cs b/sdk/dotnet/CloudRun/Inputs/ServiceMetadataGetArgs.cs index 04e53900fa..05d0f2a5f6 100644 --- a/sdk/dotnet/CloudRun/Inputs/ServiceMetadataGetArgs.cs +++ b/sdk/dotnet/CloudRun/Inputs/ServiceMetadataGetArgs.cs @@ -14,18 +14,6 @@ public sealed class ServiceMetadataGetArgs : global::Pulumi.ResourceArgs { [Input("annotations")] private InputMap? _annotations; - - /// - /// Annotations is a key value map stored with a resource that - /// may be set by external tools to store and retrieve arbitrary metadata. More - /// info: http://kubernetes.io/docs/user-guide/annotations - /// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - /// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - /// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - /// Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - /// - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - /// for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - /// public InputMap Annotations { get => _annotations ?? (_annotations = new InputMap()); diff --git a/sdk/dotnet/CloudRun/Inputs/ServiceTemplateMetadataArgs.cs b/sdk/dotnet/CloudRun/Inputs/ServiceTemplateMetadataArgs.cs index d0b5d3cf25..f89c557fab 100644 --- a/sdk/dotnet/CloudRun/Inputs/ServiceTemplateMetadataArgs.cs +++ b/sdk/dotnet/CloudRun/Inputs/ServiceTemplateMetadataArgs.cs @@ -14,18 +14,6 @@ public sealed class ServiceTemplateMetadataArgs : global::Pulumi.ResourceArgs { [Input("annotations")] private InputMap? _annotations; - - /// - /// Annotations is a key value map stored with a resource that - /// may be set by external tools to store and retrieve arbitrary metadata. More - /// info: http://kubernetes.io/docs/user-guide/annotations - /// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - /// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - /// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - /// Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - /// - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - /// for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - /// public InputMap Annotations { get => _annotations ?? (_annotations = new InputMap()); diff --git a/sdk/dotnet/CloudRun/Inputs/ServiceTemplateMetadataGetArgs.cs b/sdk/dotnet/CloudRun/Inputs/ServiceTemplateMetadataGetArgs.cs index 38f803c0bb..1124e853df 100644 --- a/sdk/dotnet/CloudRun/Inputs/ServiceTemplateMetadataGetArgs.cs +++ b/sdk/dotnet/CloudRun/Inputs/ServiceTemplateMetadataGetArgs.cs @@ -14,18 +14,6 @@ public sealed class ServiceTemplateMetadataGetArgs : global::Pulumi.ResourceArgs { [Input("annotations")] private InputMap? _annotations; - - /// - /// Annotations is a key value map stored with a resource that - /// may be set by external tools to store and retrieve arbitrary metadata. More - /// info: http://kubernetes.io/docs/user-guide/annotations - /// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - /// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - /// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - /// Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - /// - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - /// for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - /// public InputMap Annotations { get => _annotations ?? (_annotations = new InputMap()); diff --git a/sdk/dotnet/CloudRun/Inputs/ServiceTemplateSpecContainerArgs.cs b/sdk/dotnet/CloudRun/Inputs/ServiceTemplateSpecContainerArgs.cs index 1bb48daa00..1c67ba4769 100644 --- a/sdk/dotnet/CloudRun/Inputs/ServiceTemplateSpecContainerArgs.cs +++ b/sdk/dotnet/CloudRun/Inputs/ServiceTemplateSpecContainerArgs.cs @@ -92,11 +92,6 @@ public InputList Envs [Input("image", required: true)] public Input Image { get; set; } = null!; - /// - /// Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - /// https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - /// Structure is documented below. - /// [Input("livenessProbe")] public Input? LivenessProbe { get; set; } diff --git a/sdk/dotnet/CloudRun/Inputs/ServiceTemplateSpecContainerGetArgs.cs b/sdk/dotnet/CloudRun/Inputs/ServiceTemplateSpecContainerGetArgs.cs index e1ee0b90b8..dd664bd301 100644 --- a/sdk/dotnet/CloudRun/Inputs/ServiceTemplateSpecContainerGetArgs.cs +++ b/sdk/dotnet/CloudRun/Inputs/ServiceTemplateSpecContainerGetArgs.cs @@ -92,11 +92,6 @@ public InputList Envs [Input("image", required: true)] public Input Image { get; set; } = null!; - /// - /// Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - /// https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - /// Structure is documented below. - /// [Input("livenessProbe")] public Input? LivenessProbe { get; set; } diff --git a/sdk/dotnet/CloudRun/Outputs/DomainMappingMetadata.cs b/sdk/dotnet/CloudRun/Outputs/DomainMappingMetadata.cs index a5108ac59c..487bc64025 100644 --- a/sdk/dotnet/CloudRun/Outputs/DomainMappingMetadata.cs +++ b/sdk/dotnet/CloudRun/Outputs/DomainMappingMetadata.cs @@ -13,14 +13,6 @@ namespace Pulumi.Gcp.CloudRun.Outputs [OutputType] public sealed class DomainMappingMetadata { - /// - /// Annotations is a key value map stored with a resource that - /// may be set by external tools to store and retrieve arbitrary metadata. More - /// info: http://kubernetes.io/docs/user-guide/annotations - /// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - /// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - /// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - /// public readonly ImmutableDictionary? Annotations; /// /// A sequence number representing a specific generation of the desired state. diff --git a/sdk/dotnet/CloudRun/Outputs/ServiceMetadata.cs b/sdk/dotnet/CloudRun/Outputs/ServiceMetadata.cs index 5158ebe5e8..757466cccc 100644 --- a/sdk/dotnet/CloudRun/Outputs/ServiceMetadata.cs +++ b/sdk/dotnet/CloudRun/Outputs/ServiceMetadata.cs @@ -13,17 +13,6 @@ namespace Pulumi.Gcp.CloudRun.Outputs [OutputType] public sealed class ServiceMetadata { - /// - /// Annotations is a key value map stored with a resource that - /// may be set by external tools to store and retrieve arbitrary metadata. More - /// info: http://kubernetes.io/docs/user-guide/annotations - /// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - /// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - /// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - /// Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - /// - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - /// for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - /// public readonly ImmutableDictionary? Annotations; /// /// A sequence number representing a specific generation of the desired state. diff --git a/sdk/dotnet/CloudRun/Outputs/ServiceTemplateMetadata.cs b/sdk/dotnet/CloudRun/Outputs/ServiceTemplateMetadata.cs index 3df1e5abe6..69253028f5 100644 --- a/sdk/dotnet/CloudRun/Outputs/ServiceTemplateMetadata.cs +++ b/sdk/dotnet/CloudRun/Outputs/ServiceTemplateMetadata.cs @@ -13,17 +13,6 @@ namespace Pulumi.Gcp.CloudRun.Outputs [OutputType] public sealed class ServiceTemplateMetadata { - /// - /// Annotations is a key value map stored with a resource that - /// may be set by external tools to store and retrieve arbitrary metadata. More - /// info: http://kubernetes.io/docs/user-guide/annotations - /// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - /// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - /// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - /// Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - /// - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - /// for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - /// public readonly ImmutableDictionary? Annotations; /// /// A sequence number representing a specific generation of the desired state. diff --git a/sdk/dotnet/CloudRun/Outputs/ServiceTemplateSpecContainer.cs b/sdk/dotnet/CloudRun/Outputs/ServiceTemplateSpecContainer.cs index 2e0bcc6aa9..2e1cfbd8d4 100644 --- a/sdk/dotnet/CloudRun/Outputs/ServiceTemplateSpecContainer.cs +++ b/sdk/dotnet/CloudRun/Outputs/ServiceTemplateSpecContainer.cs @@ -58,11 +58,6 @@ public sealed class ServiceTemplateSpecContainer /// More info: https://kubernetes.io/docs/concepts/containers/images /// public readonly string Image; - /// - /// Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - /// https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - /// Structure is documented below. - /// public readonly Outputs.ServiceTemplateSpecContainerLivenessProbe? LivenessProbe; /// /// List of open ports in the container. diff --git a/sdk/dotnet/CloudRun/Service.cs b/sdk/dotnet/CloudRun/Service.cs index c86d56e37b..64e9976b04 100644 --- a/sdk/dotnet/CloudRun/Service.cs +++ b/sdk/dotnet/CloudRun/Service.cs @@ -35,88 +35,6 @@ namespace Pulumi.Gcp.CloudRun /// Have a look at the Cloud Run Anthos example below. /// /// ## Example Usage - /// ### Cloud Run Service Pubsub - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var @default = new Gcp.CloudRun.Service("default", new() - /// { - /// Location = "us-central1", - /// Template = new Gcp.CloudRun.Inputs.ServiceTemplateArgs - /// { - /// Spec = new Gcp.CloudRun.Inputs.ServiceTemplateSpecArgs - /// { - /// Containers = new[] - /// { - /// new Gcp.CloudRun.Inputs.ServiceTemplateSpecContainerArgs - /// { - /// Image = "gcr.io/cloudrun/hello", - /// }, - /// }, - /// }, - /// }, - /// Traffics = new[] - /// { - /// new Gcp.CloudRun.Inputs.ServiceTrafficArgs - /// { - /// Percent = 100, - /// LatestRevision = true, - /// }, - /// }, - /// }); - /// - /// var sa = new Gcp.ServiceAccount.Account("sa", new() - /// { - /// AccountId = "cloud-run-pubsub-invoker", - /// DisplayName = "Cloud Run Pub/Sub Invoker", - /// }); - /// - /// var binding = new Gcp.CloudRun.IamBinding("binding", new() - /// { - /// Location = @default.Location, - /// Service = @default.Name, - /// Role = "roles/run.invoker", - /// Members = new[] - /// { - /// sa.Email.Apply(email => $"serviceAccount:{email}"), - /// }, - /// }); - /// - /// var project = new Gcp.Projects.IAMBinding("project", new() - /// { - /// Role = "roles/iam.serviceAccountTokenCreator", - /// Members = new[] - /// { - /// sa.Email.Apply(email => $"serviceAccount:{email}"), - /// }, - /// }); - /// - /// var topic = new Gcp.PubSub.Topic("topic"); - /// - /// var subscription = new Gcp.PubSub.Subscription("subscription", new() - /// { - /// Topic = topic.Name, - /// PushConfig = new Gcp.PubSub.Inputs.SubscriptionPushConfigArgs - /// { - /// PushEndpoint = @default.Statuses.Apply(statuses => statuses[0].Url), - /// OidcToken = new Gcp.PubSub.Inputs.SubscriptionPushConfigOidcTokenArgs - /// { - /// ServiceAccountEmail = sa.Email, - /// }, - /// Attributes = - /// { - /// { "x-goog-version", "v1" }, - /// }, - /// }, - /// }); - /// - /// }); - /// ``` /// ### Cloud Run Service Basic /// /// ```csharp @@ -195,7 +113,7 @@ namespace Pulumi.Gcp.CloudRun /// { /// { "autoscaling.knative.dev/maxScale", "1000" }, /// { "run.googleapis.com/cloudsql-instances", instance.ConnectionName }, - /// { "run.googleapis.com/client-name", "demo" }, + /// { "run.googleapis.com/client-name", "terraform" }, /// }, /// }, /// }, diff --git a/sdk/dotnet/CloudRunV2/Inputs/JobTemplateTemplateContainerArgs.cs b/sdk/dotnet/CloudRunV2/Inputs/JobTemplateTemplateContainerArgs.cs index 687afccc1a..26afee5712 100644 --- a/sdk/dotnet/CloudRunV2/Inputs/JobTemplateTemplateContainerArgs.cs +++ b/sdk/dotnet/CloudRunV2/Inputs/JobTemplateTemplateContainerArgs.cs @@ -56,7 +56,9 @@ public InputList Envs public Input Image { get; set; } = null!; /// + /// (Optional, Deprecated) /// Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + /// This field is not supported in Cloud Run Job currently. /// Structure is documented below. /// [Input("livenessProbe")] @@ -90,7 +92,9 @@ public InputList Ports public Input? Resources { get; set; } /// + /// (Optional, Deprecated) /// Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + /// This field is not supported in Cloud Run Job currently. /// Structure is documented below. /// [Input("startupProbe")] diff --git a/sdk/dotnet/CloudRunV2/Inputs/JobTemplateTemplateContainerGetArgs.cs b/sdk/dotnet/CloudRunV2/Inputs/JobTemplateTemplateContainerGetArgs.cs index 000e7353d2..0242fefc8d 100644 --- a/sdk/dotnet/CloudRunV2/Inputs/JobTemplateTemplateContainerGetArgs.cs +++ b/sdk/dotnet/CloudRunV2/Inputs/JobTemplateTemplateContainerGetArgs.cs @@ -56,7 +56,9 @@ public InputList Envs public Input Image { get; set; } = null!; /// + /// (Optional, Deprecated) /// Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + /// This field is not supported in Cloud Run Job currently. /// Structure is documented below. /// [Input("livenessProbe")] @@ -90,7 +92,9 @@ public InputList Ports public Input? Resources { get; set; } /// + /// (Optional, Deprecated) /// Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + /// This field is not supported in Cloud Run Job currently. /// Structure is documented below. /// [Input("startupProbe")] diff --git a/sdk/dotnet/CloudRunV2/Inputs/ServiceTemplateContainerLivenessProbeArgs.cs b/sdk/dotnet/CloudRunV2/Inputs/ServiceTemplateContainerLivenessProbeArgs.cs index ceeeaad62a..feae9cc9f7 100644 --- a/sdk/dotnet/CloudRunV2/Inputs/ServiceTemplateContainerLivenessProbeArgs.cs +++ b/sdk/dotnet/CloudRunV2/Inputs/ServiceTemplateContainerLivenessProbeArgs.cs @@ -19,7 +19,7 @@ public sealed class ServiceTemplateContainerLivenessProbeArgs : global::Pulumi.R public Input? FailureThreshold { get; set; } /// - /// HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + /// HTTPGet specifies the http request to perform. /// Structure is documented below. /// [Input("httpGet")] @@ -38,7 +38,8 @@ public sealed class ServiceTemplateContainerLivenessProbeArgs : global::Pulumi.R public Input? PeriodSeconds { get; set; } /// - /// TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + /// (Optional, Deprecated) + /// TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. /// Structure is documented below. /// [Input("tcpSocket")] diff --git a/sdk/dotnet/CloudRunV2/Inputs/ServiceTemplateContainerLivenessProbeGetArgs.cs b/sdk/dotnet/CloudRunV2/Inputs/ServiceTemplateContainerLivenessProbeGetArgs.cs index ab4659afec..7f964b1a99 100644 --- a/sdk/dotnet/CloudRunV2/Inputs/ServiceTemplateContainerLivenessProbeGetArgs.cs +++ b/sdk/dotnet/CloudRunV2/Inputs/ServiceTemplateContainerLivenessProbeGetArgs.cs @@ -19,7 +19,7 @@ public sealed class ServiceTemplateContainerLivenessProbeGetArgs : global::Pulum public Input? FailureThreshold { get; set; } /// - /// HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + /// HTTPGet specifies the http request to perform. /// Structure is documented below. /// [Input("httpGet")] @@ -38,7 +38,8 @@ public sealed class ServiceTemplateContainerLivenessProbeGetArgs : global::Pulum public Input? PeriodSeconds { get; set; } /// - /// TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + /// (Optional, Deprecated) + /// TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. /// Structure is documented below. /// [Input("tcpSocket")] diff --git a/sdk/dotnet/CloudRunV2/Job.cs b/sdk/dotnet/CloudRunV2/Job.cs index f04fe630b0..91fbeb3e41 100644 --- a/sdk/dotnet/CloudRunV2/Job.cs +++ b/sdk/dotnet/CloudRunV2/Job.cs @@ -221,54 +221,6 @@ namespace Pulumi.Gcp.CloudRunV2 /// /// }); /// ``` - /// ### Cloudrunv2 Job Probes - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var @default = new Gcp.CloudRunV2.Job("default", new() - /// { - /// LaunchStage = "BETA", - /// Location = "us-central1", - /// Template = new Gcp.CloudRunV2.Inputs.JobTemplateArgs - /// { - /// Template = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateArgs - /// { - /// Containers = new[] - /// { - /// new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerArgs - /// { - /// Image = "us-docker.pkg.dev/cloudrun/container/hello", - /// LivenessProbe = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerLivenessProbeArgs - /// { - /// HttpGet = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerLivenessProbeHttpGetArgs - /// { - /// Path = "/", - /// }, - /// }, - /// StartupProbe = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerStartupProbeArgs - /// { - /// FailureThreshold = 1, - /// InitialDelaySeconds = 0, - /// PeriodSeconds = 3, - /// TcpSocket = new Gcp.CloudRunV2.Inputs.JobTemplateTemplateContainerStartupProbeTcpSocketArgs - /// { - /// Port = 8080, - /// }, - /// TimeoutSeconds = 1, - /// }, - /// }, - /// }, - /// }, - /// }, - /// }); - /// - /// }); - /// ``` /// ### Cloudrunv2 Job Secret /// /// ```csharp diff --git a/sdk/dotnet/CloudRunV2/Outputs/JobTemplateTemplateContainer.cs b/sdk/dotnet/CloudRunV2/Outputs/JobTemplateTemplateContainer.cs index 21f76a5d0f..0ee094ae78 100644 --- a/sdk/dotnet/CloudRunV2/Outputs/JobTemplateTemplateContainer.cs +++ b/sdk/dotnet/CloudRunV2/Outputs/JobTemplateTemplateContainer.cs @@ -31,7 +31,9 @@ public sealed class JobTemplateTemplateContainer /// public readonly string Image; /// + /// (Optional, Deprecated) /// Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + /// This field is not supported in Cloud Run Job currently. /// Structure is documented below. /// public readonly Outputs.JobTemplateTemplateContainerLivenessProbe? LivenessProbe; @@ -51,7 +53,9 @@ public sealed class JobTemplateTemplateContainer /// public readonly Outputs.JobTemplateTemplateContainerResources? Resources; /// + /// (Optional, Deprecated) /// Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + /// This field is not supported in Cloud Run Job currently. /// Structure is documented below. /// public readonly Outputs.JobTemplateTemplateContainerStartupProbe? StartupProbe; diff --git a/sdk/dotnet/CloudRunV2/Outputs/ServiceTemplateContainerLivenessProbe.cs b/sdk/dotnet/CloudRunV2/Outputs/ServiceTemplateContainerLivenessProbe.cs index 3fbf728bad..edb88ef16e 100644 --- a/sdk/dotnet/CloudRunV2/Outputs/ServiceTemplateContainerLivenessProbe.cs +++ b/sdk/dotnet/CloudRunV2/Outputs/ServiceTemplateContainerLivenessProbe.cs @@ -18,7 +18,7 @@ public sealed class ServiceTemplateContainerLivenessProbe /// public readonly int? FailureThreshold; /// - /// HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + /// HTTPGet specifies the http request to perform. /// Structure is documented below. /// public readonly Outputs.ServiceTemplateContainerLivenessProbeHttpGet? HttpGet; @@ -31,7 +31,8 @@ public sealed class ServiceTemplateContainerLivenessProbe /// public readonly int? PeriodSeconds; /// - /// TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + /// (Optional, Deprecated) + /// TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. /// Structure is documented below. /// public readonly Outputs.ServiceTemplateContainerLivenessProbeTcpSocket? TcpSocket; diff --git a/sdk/dotnet/CloudScheduler/Job.cs b/sdk/dotnet/CloudScheduler/Job.cs index f76e3e0f39..7a4a458821 100644 --- a/sdk/dotnet/CloudScheduler/Job.cs +++ b/sdk/dotnet/CloudScheduler/Job.cs @@ -208,7 +208,7 @@ public partial class Job : global::Pulumi.CustomResource public Output PubsubTarget { get; private set; } = null!; /// - /// Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + /// Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. /// [Output("region")] public Output Region { get; private set; } = null!; @@ -354,7 +354,7 @@ public sealed class JobArgs : global::Pulumi.ResourceArgs public Input? PubsubTarget { get; set; } /// - /// Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + /// Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. /// [Input("region")] public Input? Region { get; set; } @@ -456,7 +456,7 @@ public sealed class JobState : global::Pulumi.ResourceArgs public Input? PubsubTarget { get; set; } /// - /// Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + /// Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. /// [Input("region")] public Input? Region { get; set; } diff --git a/sdk/dotnet/Composer/GetEnvironment.cs b/sdk/dotnet/Composer/GetEnvironment.cs index 7ae7552506..1835e7154e 100644 --- a/sdk/dotnet/Composer/GetEnvironment.cs +++ b/sdk/dotnet/Composer/GetEnvironment.cs @@ -83,9 +83,6 @@ public GetEnvironmentInvokeArgs() [OutputType] public sealed class GetEnvironmentResult { - /// - /// Configuration parameters for the environment. - /// public readonly ImmutableArray Configs; /// /// The provider-assigned unique ID for this managed resource. diff --git a/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigArgs.cs b/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigArgs.cs index cbf7bb0486..f6b12cf62c 100644 --- a/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigArgs.cs +++ b/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigArgs.cs @@ -20,6 +20,9 @@ public InputMap AirflowConfigOverrides set => _airflowConfigOverrides = value; } + [Input("cloudDataLineageIntegration")] + public Input? CloudDataLineageIntegration { get; set; } + [Input("envVariables")] private InputMap? _envVariables; public InputMap EnvVariables diff --git a/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs.cs b/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs.cs new file mode 100644 index 0000000000..413df40304 --- /dev/null +++ b/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs.cs @@ -0,0 +1,23 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Composer.Inputs +{ + + public sealed class EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs : global::Pulumi.ResourceArgs + { + [Input("enabled", required: true)] + public Input Enabled { get; set; } = null!; + + public EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs() + { + } + public static new EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs Empty => new EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs(); + } +} diff --git a/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationGetArgs.cs b/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationGetArgs.cs new file mode 100644 index 0000000000..548bed1b9b --- /dev/null +++ b/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationGetArgs.cs @@ -0,0 +1,23 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Composer.Inputs +{ + + public sealed class EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationGetArgs : global::Pulumi.ResourceArgs + { + [Input("enabled", required: true)] + public Input Enabled { get; set; } = null!; + + public EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationGetArgs() + { + } + public static new EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationGetArgs Empty => new EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationGetArgs(); + } +} diff --git a/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigGetArgs.cs b/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigGetArgs.cs index 377b028ee9..d2db67ccdf 100644 --- a/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigGetArgs.cs +++ b/sdk/dotnet/Composer/Inputs/EnvironmentConfigSoftwareConfigGetArgs.cs @@ -20,6 +20,9 @@ public InputMap AirflowConfigOverrides set => _airflowConfigOverrides = value; } + [Input("cloudDataLineageIntegration")] + public Input? CloudDataLineageIntegration { get; set; } + [Input("envVariables")] private InputMap? _envVariables; public InputMap EnvVariables diff --git a/sdk/dotnet/Composer/Outputs/EnvironmentConfigSoftwareConfig.cs b/sdk/dotnet/Composer/Outputs/EnvironmentConfigSoftwareConfig.cs index 45ea981313..737a3be96c 100644 --- a/sdk/dotnet/Composer/Outputs/EnvironmentConfigSoftwareConfig.cs +++ b/sdk/dotnet/Composer/Outputs/EnvironmentConfigSoftwareConfig.cs @@ -14,6 +14,7 @@ namespace Pulumi.Gcp.Composer.Outputs public sealed class EnvironmentConfigSoftwareConfig { public readonly ImmutableDictionary? AirflowConfigOverrides; + public readonly Outputs.EnvironmentConfigSoftwareConfigCloudDataLineageIntegration? CloudDataLineageIntegration; public readonly ImmutableDictionary? EnvVariables; public readonly string? ImageVersion; public readonly ImmutableDictionary? PypiPackages; @@ -24,6 +25,8 @@ public sealed class EnvironmentConfigSoftwareConfig private EnvironmentConfigSoftwareConfig( ImmutableDictionary? airflowConfigOverrides, + Outputs.EnvironmentConfigSoftwareConfigCloudDataLineageIntegration? cloudDataLineageIntegration, + ImmutableDictionary? envVariables, string? imageVersion, @@ -35,6 +38,7 @@ private EnvironmentConfigSoftwareConfig( int? schedulerCount) { AirflowConfigOverrides = airflowConfigOverrides; + CloudDataLineageIntegration = cloudDataLineageIntegration; EnvVariables = envVariables; ImageVersion = imageVersion; PypiPackages = pypiPackages; diff --git a/sdk/dotnet/Composer/Outputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegration.cs b/sdk/dotnet/Composer/Outputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegration.cs new file mode 100644 index 0000000000..580cf0be66 --- /dev/null +++ b/sdk/dotnet/Composer/Outputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegration.cs @@ -0,0 +1,24 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Composer.Outputs +{ + + [OutputType] + public sealed class EnvironmentConfigSoftwareConfigCloudDataLineageIntegration + { + public readonly bool Enabled; + + [OutputConstructor] + private EnvironmentConfigSoftwareConfigCloudDataLineageIntegration(bool enabled) + { + Enabled = enabled; + } + } +} diff --git a/sdk/dotnet/Composer/Outputs/GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationResult.cs b/sdk/dotnet/Composer/Outputs/GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationResult.cs new file mode 100644 index 0000000000..3539c6597f --- /dev/null +++ b/sdk/dotnet/Composer/Outputs/GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationResult.cs @@ -0,0 +1,24 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Composer.Outputs +{ + + [OutputType] + public sealed class GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationResult + { + public readonly bool Enabled; + + [OutputConstructor] + private GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationResult(bool enabled) + { + Enabled = enabled; + } + } +} diff --git a/sdk/dotnet/Composer/Outputs/GetEnvironmentConfigSoftwareConfigResult.cs b/sdk/dotnet/Composer/Outputs/GetEnvironmentConfigSoftwareConfigResult.cs index 0d6def5d08..91f3de7e1d 100644 --- a/sdk/dotnet/Composer/Outputs/GetEnvironmentConfigSoftwareConfigResult.cs +++ b/sdk/dotnet/Composer/Outputs/GetEnvironmentConfigSoftwareConfigResult.cs @@ -14,6 +14,7 @@ namespace Pulumi.Gcp.Composer.Outputs public sealed class GetEnvironmentConfigSoftwareConfigResult { public readonly ImmutableDictionary AirflowConfigOverrides; + public readonly ImmutableArray CloudDataLineageIntegrations; public readonly ImmutableDictionary EnvVariables; public readonly string ImageVersion; public readonly ImmutableDictionary PypiPackages; @@ -24,6 +25,8 @@ public sealed class GetEnvironmentConfigSoftwareConfigResult private GetEnvironmentConfigSoftwareConfigResult( ImmutableDictionary airflowConfigOverrides, + ImmutableArray cloudDataLineageIntegrations, + ImmutableDictionary envVariables, string imageVersion, @@ -35,6 +38,7 @@ private GetEnvironmentConfigSoftwareConfigResult( int schedulerCount) { AirflowConfigOverrides = airflowConfigOverrides; + CloudDataLineageIntegrations = cloudDataLineageIntegrations; EnvVariables = envVariables; ImageVersion = imageVersion; PypiPackages = pypiPackages; diff --git a/sdk/dotnet/Compute/Address.cs b/sdk/dotnet/Compute/Address.cs index 9025b4baf2..dd227278ce 100644 --- a/sdk/dotnet/Compute/Address.cs +++ b/sdk/dotnet/Compute/Address.cs @@ -221,7 +221,7 @@ public partial class Address : global::Pulumi.CustomResource public Output LabelFingerprint { get; private set; } = null!; /// - /// Labels to apply to this address. A list of key->value pairs. + /// Labels to apply to this address. A list of key->value pairs. /// [Output("labels")] public Output?> Labels { get; private set; } = null!; @@ -385,7 +385,7 @@ public sealed class AddressArgs : global::Pulumi.ResourceArgs private InputMap? _labels; /// - /// Labels to apply to this address. A list of key->value pairs. + /// Labels to apply to this address. A list of key->value pairs. /// public InputMap Labels { @@ -514,7 +514,7 @@ public sealed class AddressState : global::Pulumi.ResourceArgs private InputMap? _labels; /// - /// Labels to apply to this address. A list of key->value pairs. + /// Labels to apply to this address. A list of key->value pairs. /// public InputMap Labels { diff --git a/sdk/dotnet/Compute/AttachedDisk.cs b/sdk/dotnet/Compute/AttachedDisk.cs index ead64bee41..c25875a37c 100644 --- a/sdk/dotnet/Compute/AttachedDisk.cs +++ b/sdk/dotnet/Compute/AttachedDisk.cs @@ -10,20 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Persistent disks can be attached to a compute instance using the `attached_disk` - /// section within the compute instance configuration. - /// However there may be situations where managing the attached disks via the compute - /// instance config isn't preferable or possible, such as attaching dynamic - /// numbers of disks using the `count` variable. - /// - /// To get more information about attaching disks, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/instances/attachDisk) - /// * How-to Guides - /// * [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk) - /// - /// **Note:** When using `gcp.compute.AttachedDisk` you **must** use `lifecycle.ignore_changes = ["attached_disk"]` on the `gcp.compute.Instance` resource that has the disks attached. Otherwise the two resources will fight for control of the attached disk block. - /// /// ## Example Usage /// /// ```csharp diff --git a/sdk/dotnet/Compute/BackendBucketSignedUrlKey.cs b/sdk/dotnet/Compute/BackendBucketSignedUrlKey.cs index e978934ec7..53a157ffe9 100644 --- a/sdk/dotnet/Compute/BackendBucketSignedUrlKey.cs +++ b/sdk/dotnet/Compute/BackendBucketSignedUrlKey.cs @@ -10,17 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// A key for signing Cloud CDN signed URLs for BackendBuckets. - /// - /// To get more information about BackendBucketSignedUrlKey, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendBuckets) - /// * How-to Guides - /// * [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/) - /// - /// > **Warning:** All arguments including `key_value` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage /// ### Backend Bucket Signed Url Key /// diff --git a/sdk/dotnet/Compute/BackendService.cs b/sdk/dotnet/Compute/BackendService.cs index 3fd651661d..24d990775a 100644 --- a/sdk/dotnet/Compute/BackendService.cs +++ b/sdk/dotnet/Compute/BackendService.cs @@ -10,22 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// A Backend Service defines a group of virtual machines that will serve - /// traffic for load balancing. This resource is a global backend service, - /// appropriate for external load balancing or self-managed internal load balancing. - /// For managed internal load balancing, use a regional backend service instead. - /// - /// Currently self-managed internal load balancing is only available in beta. - /// - /// To get more information about BackendService, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/v1/backendServices) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/compute/docs/load-balancing/http/backend-service) - /// - /// > **Warning:** All arguments including `iap.oauth2_client_secret` and `iap.oauth2_client_secret_sha256` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage /// ### Backend Service Cache Include Http Headers /// @@ -306,6 +290,18 @@ public partial class BackendService : global::Pulumi.CustomResource [Output("loadBalancingScheme")] public Output LoadBalancingScheme { get; private set; } = null!; + /// + /// A list of locality load balancing policies to be used in order of + /// preference. Either the policy or the customPolicy field should be set. + /// Overrides any value set in the localityLbPolicy field. + /// localityLbPolicies is only supported when the BackendService is referenced + /// by a URL Map that is referenced by a target gRPC proxy that has the + /// validateForProxyless field set to true. + /// Structure is documented below. + /// + [Output("localityLbPolicies")] + public Output> LocalityLbPolicies { get; private set; } = null!; + /// /// The load balancing algorithm used within the scope of the locality. /// The possible values are: @@ -588,6 +584,24 @@ public InputList CustomResponseHeaders [Input("loadBalancingScheme")] public Input? LoadBalancingScheme { get; set; } + [Input("localityLbPolicies")] + private InputList? _localityLbPolicies; + + /// + /// A list of locality load balancing policies to be used in order of + /// preference. Either the policy or the customPolicy field should be set. + /// Overrides any value set in the localityLbPolicy field. + /// localityLbPolicies is only supported when the BackendService is referenced + /// by a URL Map that is referenced by a target gRPC proxy that has the + /// validateForProxyless field set to true. + /// Structure is documented below. + /// + public InputList LocalityLbPolicies + { + get => _localityLbPolicies ?? (_localityLbPolicies = new InputList()); + set => _localityLbPolicies = value; + } + /// /// The load balancing algorithm used within the scope of the locality. /// The possible values are: @@ -845,6 +859,24 @@ public InputList CustomResponseHeaders [Input("loadBalancingScheme")] public Input? LoadBalancingScheme { get; set; } + [Input("localityLbPolicies")] + private InputList? _localityLbPolicies; + + /// + /// A list of locality load balancing policies to be used in order of + /// preference. Either the policy or the customPolicy field should be set. + /// Overrides any value set in the localityLbPolicy field. + /// localityLbPolicies is only supported when the BackendService is referenced + /// by a URL Map that is referenced by a target gRPC proxy that has the + /// validateForProxyless field set to true. + /// Structure is documented below. + /// + public InputList LocalityLbPolicies + { + get => _localityLbPolicies ?? (_localityLbPolicies = new InputList()); + set => _localityLbPolicies = value; + } + /// /// The load balancing algorithm used within the scope of the locality. /// The possible values are: diff --git a/sdk/dotnet/Compute/BackendServiceSignedUrlKey.cs b/sdk/dotnet/Compute/BackendServiceSignedUrlKey.cs index c724a40733..ff750d974a 100644 --- a/sdk/dotnet/Compute/BackendServiceSignedUrlKey.cs +++ b/sdk/dotnet/Compute/BackendServiceSignedUrlKey.cs @@ -10,17 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// A key for signing Cloud CDN signed URLs for Backend Services. - /// - /// To get more information about BackendServiceSignedUrlKey, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendServices) - /// * How-to Guides - /// * [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/) - /// - /// > **Warning:** All arguments including `key_value` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage /// /// ## Import diff --git a/sdk/dotnet/Compute/Disk.cs b/sdk/dotnet/Compute/Disk.cs index 3285d2bff8..0392e0e6a6 100644 --- a/sdk/dotnet/Compute/Disk.cs +++ b/sdk/dotnet/Compute/Disk.cs @@ -10,31 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Persistent disks are durable storage devices that function similarly to - /// the physical disks in a desktop or a server. Compute Engine manages the - /// hardware behind these devices to ensure data redundancy and optimize - /// performance for you. Persistent disks are available as either standard - /// hard disk drives (HDD) or solid-state drives (SSD). - /// - /// Persistent disks are located independently from your virtual machine - /// instances, so you can detach or move persistent disks to keep your data - /// even after you delete your instances. Persistent disk performance scales - /// automatically with size, so you can resize your existing persistent disks - /// or add more persistent disks to an instance to meet your performance and - /// storage space requirements. - /// - /// Add a persistent disk to your instance when you need reliable and - /// affordable storage with consistent performance characteristics. - /// - /// To get more information about Disk, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/v1/disks) - /// * How-to Guides - /// * [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk) - /// - /// > **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage /// ### Disk Basic /// @@ -198,11 +173,9 @@ public partial class Disk : global::Pulumi.CustomResource public Output ProvisionedIops { get; private set; } = null!; /// - /// Resource policies applied to this disk for automatic snapshot creations. - /// ~>**NOTE** This value does not support updating the - /// resource policy, as resource policies can not be updated more than - /// one at a time. Use - /// `gcp.compute.DiskResourcePolicyAttachment` + /// Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + /// the resource policy, as resource policies can not be updated more than one at a time. Use + /// ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) /// to allow for updating the resource policy attached to the disk. /// [Output("resourcePolicies")] @@ -215,17 +188,11 @@ public partial class Disk : global::Pulumi.CustomResource public Output SelfLink { get; private set; } = null!; /// - /// Size of the persistent disk, specified in GB. You can specify this - /// field when creating a persistent disk using the `image` or - /// `snapshot` parameter, or specify it alone to create an empty - /// persistent disk. - /// If you specify this field along with `image` or `snapshot`, - /// the value must not be less than the size of the image - /// or the size of the snapshot. - /// ~>**NOTE** If you change the size, the provider updates the disk size - /// if upsizing is detected but recreates the disk if downsizing is requested. - /// You can add `lifecycle.prevent_destroy` in the config to prevent destroying - /// and recreating. + /// Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + /// 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + /// with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + /// ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + /// downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. /// [Output("size")] public Output Size { get; private set; } = null!; @@ -463,11 +430,9 @@ public InputMap Labels private InputList? _resourcePolicies; /// - /// Resource policies applied to this disk for automatic snapshot creations. - /// ~>**NOTE** This value does not support updating the - /// resource policy, as resource policies can not be updated more than - /// one at a time. Use - /// `gcp.compute.DiskResourcePolicyAttachment` + /// Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + /// the resource policy, as resource policies can not be updated more than one at a time. Use + /// ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) /// to allow for updating the resource policy attached to the disk. /// public InputList ResourcePolicies @@ -477,17 +442,11 @@ public InputList ResourcePolicies } /// - /// Size of the persistent disk, specified in GB. You can specify this - /// field when creating a persistent disk using the `image` or - /// `snapshot` parameter, or specify it alone to create an empty - /// persistent disk. - /// If you specify this field along with `image` or `snapshot`, - /// the value must not be less than the size of the image - /// or the size of the snapshot. - /// ~>**NOTE** If you change the size, the provider updates the disk size - /// if upsizing is detected but recreates the disk if downsizing is requested. - /// You can add `lifecycle.prevent_destroy` in the config to prevent destroying - /// and recreating. + /// Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + /// 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + /// with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + /// ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + /// downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. /// [Input("size")] public Input? Size { get; set; } @@ -676,11 +635,9 @@ public InputMap Labels private InputList? _resourcePolicies; /// - /// Resource policies applied to this disk for automatic snapshot creations. - /// ~>**NOTE** This value does not support updating the - /// resource policy, as resource policies can not be updated more than - /// one at a time. Use - /// `gcp.compute.DiskResourcePolicyAttachment` + /// Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + /// the resource policy, as resource policies can not be updated more than one at a time. Use + /// ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) /// to allow for updating the resource policy attached to the disk. /// public InputList ResourcePolicies @@ -696,17 +653,11 @@ public InputList ResourcePolicies public Input? SelfLink { get; set; } /// - /// Size of the persistent disk, specified in GB. You can specify this - /// field when creating a persistent disk using the `image` or - /// `snapshot` parameter, or specify it alone to create an empty - /// persistent disk. - /// If you specify this field along with `image` or `snapshot`, - /// the value must not be less than the size of the image - /// or the size of the snapshot. - /// ~>**NOTE** If you change the size, the provider updates the disk size - /// if upsizing is detected but recreates the disk if downsizing is requested. - /// You can add `lifecycle.prevent_destroy` in the config to prevent destroying - /// and recreating. + /// Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + /// 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + /// with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + /// ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + /// downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. /// [Input("size")] public Input? Size { get; set; } diff --git a/sdk/dotnet/Compute/DiskResourcePolicyAttachment.cs b/sdk/dotnet/Compute/DiskResourcePolicyAttachment.cs index 9cb40e916a..82d422d929 100644 --- a/sdk/dotnet/Compute/DiskResourcePolicyAttachment.cs +++ b/sdk/dotnet/Compute/DiskResourcePolicyAttachment.cs @@ -10,11 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Adds existing resource policies to a disk. You can only add one policy - /// which will be applied to this disk for scheduling snapshot creation. - /// - /// > **Note:** This resource does not support regional disks (`gcp.compute.RegionDisk`). For regional disks, please refer to the `gcp.compute.RegionDiskResourcePolicyAttachment` resource. - /// /// ## Example Usage /// ### Disk Resource Policy Attachment Basic /// diff --git a/sdk/dotnet/Compute/ForwardingRule.cs b/sdk/dotnet/Compute/ForwardingRule.cs index 5e3740911d..a511f7356a 100644 --- a/sdk/dotnet/Compute/ForwardingRule.cs +++ b/sdk/dotnet/Compute/ForwardingRule.cs @@ -148,7 +148,7 @@ public partial class ForwardingRule : global::Pulumi.CustomResource public Output LabelFingerprint { get; private set; } = null!; /// - /// Labels to apply to this forwarding rule. A list of key->value pairs. + /// Labels to apply to this rule. /// [Output("labels")] public Output?> Labels { get; private set; } = null!; @@ -431,7 +431,7 @@ public sealed class ForwardingRuleArgs : global::Pulumi.ResourceArgs private InputMap? _labels; /// - /// Labels to apply to this forwarding rule. A list of key->value pairs. + /// Labels to apply to this rule. /// public InputMap Labels { @@ -678,7 +678,7 @@ public sealed class ForwardingRuleState : global::Pulumi.ResourceArgs private InputMap? _labels; /// - /// Labels to apply to this forwarding rule. A list of key->value pairs. + /// Labels to apply to this rule. /// public InputMap Labels { diff --git a/sdk/dotnet/Compute/GetBackendService.cs b/sdk/dotnet/Compute/GetBackendService.cs index ddd3ec9ea8..14c59c31ab 100644 --- a/sdk/dotnet/Compute/GetBackendService.cs +++ b/sdk/dotnet/Compute/GetBackendService.cs @@ -116,6 +116,7 @@ public sealed class GetBackendServiceResult /// public readonly string Id; public readonly string LoadBalancingScheme; + public readonly ImmutableArray LocalityLbPolicies; public readonly string LocalityLbPolicy; public readonly ImmutableArray LogConfigs; public readonly string Name; @@ -184,6 +185,8 @@ private GetBackendServiceResult( string loadBalancingScheme, + ImmutableArray localityLbPolicies, + string localityLbPolicy, ImmutableArray logConfigs, @@ -227,6 +230,7 @@ private GetBackendServiceResult( Iaps = iaps; Id = id; LoadBalancingScheme = loadBalancingScheme; + LocalityLbPolicies = localityLbPolicies; LocalityLbPolicy = localityLbPolicy; LogConfigs = logConfigs; Name = name; diff --git a/sdk/dotnet/Compute/GetInstance.cs b/sdk/dotnet/Compute/GetInstance.cs index 8045d14b76..8b5b3462dd 100644 --- a/sdk/dotnet/Compute/GetInstance.cs +++ b/sdk/dotnet/Compute/GetInstance.cs @@ -17,6 +17,7 @@ public static class GetInstance /// and /// [API](https://cloud.google.com/compute/docs/reference/latest/instances). /// + /// /// {{% examples %}} /// ## Example Usage /// {{% example %}} @@ -48,6 +49,7 @@ public static Task InvokeAsync(GetInstanceArgs? args = null, /// and /// [API](https://cloud.google.com/compute/docs/reference/latest/instances). /// + /// /// {{% examples %}} /// ## Example Usage /// {{% example %}} diff --git a/sdk/dotnet/Compute/GetInstanceTemplate.cs b/sdk/dotnet/Compute/GetInstanceTemplate.cs index 14aca37734..7e992c3c81 100644 --- a/sdk/dotnet/Compute/GetInstanceTemplate.cs +++ b/sdk/dotnet/Compute/GetInstanceTemplate.cs @@ -229,10 +229,6 @@ public sealed class GetInstanceTemplateResult /// public readonly string MinCpuPlatform; public readonly bool? MostRecent; - /// - /// The name of the instance template. If you leave - /// this blank, the provider will auto-generate a unique name. - /// public readonly string? Name; /// /// Creates a unique name beginning with the specified diff --git a/sdk/dotnet/Compute/GetResourcePolicy.cs b/sdk/dotnet/Compute/GetResourcePolicy.cs index 81193fc977..5b61e33c01 100644 --- a/sdk/dotnet/Compute/GetResourcePolicy.cs +++ b/sdk/dotnet/Compute/GetResourcePolicy.cs @@ -11,47 +11,9 @@ namespace Pulumi.Gcp.Compute { public static class GetResourcePolicy { - /// - /// Provide access to a Resource Policy's attributes. For more information see [the official documentation](https://cloud.google.com/compute/docs/disks/scheduled-snapshots) or the [API](https://cloud.google.com/compute/docs/reference/rest/beta/resourcePolicies). - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var daily = Gcp.Compute.GetResourcePolicy.Invoke(new() - /// { - /// Name = "daily", - /// Region = "us-central1", - /// }); - /// - /// }); - /// ``` - /// public static Task InvokeAsync(GetResourcePolicyArgs args, InvokeOptions? options = null) => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:compute/getResourcePolicy:getResourcePolicy", args ?? new GetResourcePolicyArgs(), options.WithDefaults()); - /// - /// Provide access to a Resource Policy's attributes. For more information see [the official documentation](https://cloud.google.com/compute/docs/disks/scheduled-snapshots) or the [API](https://cloud.google.com/compute/docs/reference/rest/beta/resourcePolicies). - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var daily = Gcp.Compute.GetResourcePolicy.Invoke(new() - /// { - /// Name = "daily", - /// Region = "us-central1", - /// }); - /// - /// }); - /// ``` - /// public static Output Invoke(GetResourcePolicyInvokeArgs args, InvokeOptions? options = null) => global::Pulumi.Deployment.Instance.Invoke("gcp:compute/getResourcePolicy:getResourcePolicy", args ?? new GetResourcePolicyInvokeArgs(), options.WithDefaults()); } diff --git a/sdk/dotnet/Compute/GetRouterNat.cs b/sdk/dotnet/Compute/GetRouterNat.cs index 4e452fce04..843e24c9b7 100644 --- a/sdk/dotnet/Compute/GetRouterNat.cs +++ b/sdk/dotnet/Compute/GetRouterNat.cs @@ -170,6 +170,7 @@ public sealed class GetRouterNatResult public readonly string SourceSubnetworkIpRangesToNat; public readonly ImmutableArray Subnetworks; public readonly int TcpEstablishedIdleTimeoutSec; + public readonly int TcpTimeWaitTimeoutSec; public readonly int TcpTransitoryIdleTimeoutSec; public readonly int UdpIdleTimeoutSec; @@ -211,6 +212,8 @@ private GetRouterNatResult( int tcpEstablishedIdleTimeoutSec, + int tcpTimeWaitTimeoutSec, + int tcpTransitoryIdleTimeoutSec, int udpIdleTimeoutSec) @@ -233,6 +236,7 @@ private GetRouterNatResult( SourceSubnetworkIpRangesToNat = sourceSubnetworkIpRangesToNat; Subnetworks = subnetworks; TcpEstablishedIdleTimeoutSec = tcpEstablishedIdleTimeoutSec; + TcpTimeWaitTimeoutSec = tcpTimeWaitTimeoutSec; TcpTransitoryIdleTimeoutSec = tcpTransitoryIdleTimeoutSec; UdpIdleTimeoutSec = udpIdleTimeoutSec; } diff --git a/sdk/dotnet/Compute/GlobalAddress.cs b/sdk/dotnet/Compute/GlobalAddress.cs index 9f07abbb51..b4e41f104a 100644 --- a/sdk/dotnet/Compute/GlobalAddress.cs +++ b/sdk/dotnet/Compute/GlobalAddress.cs @@ -33,36 +33,6 @@ namespace Pulumi.Gcp.Compute /// /// }); /// ``` - /// ### Global Address Private Services Connect - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var network = new Gcp.Compute.Network("network", new() - /// { - /// AutoCreateSubnetworks = false, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// var @default = new Gcp.Compute.GlobalAddress("default", new() - /// { - /// AddressType = "INTERNAL", - /// Purpose = "PRIVATE_SERVICE_CONNECT", - /// Network = network.Id, - /// Address = "100.100.100.105", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// @@ -127,7 +97,7 @@ public partial class GlobalAddress : global::Pulumi.CustomResource public Output LabelFingerprint { get; private set; } = null!; /// - /// Labels to apply to this address. A list of key->value pairs. + /// Labels to apply to this address. A list of key->value pairs. /// [Output("labels")] public Output?> Labels { get; private set; } = null!; @@ -170,9 +140,8 @@ public partial class GlobalAddress : global::Pulumi.CustomResource public Output Project { get; private set; } = null!; /// - /// The purpose of the resource. Possible values include: - /// * VPC_PEERING - for peer networks - /// * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + /// The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + /// ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks /// [Output("purpose")] public Output Purpose { get; private set; } = null!; @@ -264,7 +233,7 @@ public sealed class GlobalAddressArgs : global::Pulumi.ResourceArgs private InputMap? _labels; /// - /// Labels to apply to this address. A list of key->value pairs. + /// Labels to apply to this address. A list of key->value pairs. /// public InputMap Labels { @@ -310,9 +279,8 @@ public InputMap Labels public Input? Project { get; set; } /// - /// The purpose of the resource. Possible values include: - /// * VPC_PEERING - for peer networks - /// * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + /// The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + /// ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks /// [Input("purpose")] public Input? Purpose { get; set; } @@ -372,7 +340,7 @@ public sealed class GlobalAddressState : global::Pulumi.ResourceArgs private InputMap? _labels; /// - /// Labels to apply to this address. A list of key->value pairs. + /// Labels to apply to this address. A list of key->value pairs. /// public InputMap Labels { @@ -418,9 +386,8 @@ public InputMap Labels public Input? Project { get; set; } /// - /// The purpose of the resource. Possible values include: - /// * VPC_PEERING - for peer networks - /// * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + /// The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + /// ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks /// [Input("purpose")] public Input? Purpose { get; set; } diff --git a/sdk/dotnet/Compute/GlobalForwardingRule.cs b/sdk/dotnet/Compute/GlobalForwardingRule.cs index d2980be062..26921b5c69 100644 --- a/sdk/dotnet/Compute/GlobalForwardingRule.cs +++ b/sdk/dotnet/Compute/GlobalForwardingRule.cs @@ -16,7 +16,7 @@ namespace Pulumi.Gcp.Compute /// balancing. /// /// For more information, see - /// <https://cloud.google.com/compute/docs/load-balancing/http/> + /// https://cloud.google.com/compute/docs/load-balancing/http/ /// /// ## Example Usage /// ### Global Forwarding Rule External Managed @@ -88,7 +88,6 @@ namespace Pulumi.Gcp.Compute /// }); /// ``` /// ### Private Service Connect Google Apis - /// ### Private Service Connect Google Apis /// /// ```csharp /// using System.Collections.Generic; @@ -213,24 +212,19 @@ public partial class GlobalForwardingRule : global::Pulumi.CustomResource public Output LabelFingerprint { get; private set; } = null!; /// - /// Labels to apply to this forwarding rule. A list of key->value pairs. + /// Labels to apply to this rule. /// [Output("labels")] public Output?> Labels { get; private set; } = null!; /// - /// This signifies what the GlobalForwardingRule will be used for. - /// The value of INTERNAL_SELF_MANAGED means that this will be used for - /// Internal Global HTTP(S) LB. The value of EXTERNAL means that this - /// will be used for External Global Load Balancing (HTTP(S) LB, - /// External TCP/UDP LB, SSL Proxy) - /// Note: This field must be set "" if the global address is - /// External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - /// that this will be used for Global external HTTP(S) load balancers. - /// Note: This field must be set "" if the global address is - /// configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - /// Default value is `EXTERNAL`. - /// Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + /// Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + /// from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + /// `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + /// `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + /// Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + /// forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + /// INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED /// [Output("loadBalancingScheme")] public Output LoadBalancingScheme { get; private set; } = null!; @@ -268,11 +262,9 @@ public partial class GlobalForwardingRule : global::Pulumi.CustomResource public Output Name { get; private set; } = null!; /// - /// This field is not used for external load balancing. - /// For INTERNAL_SELF_MANAGED load balancing, this field - /// identifies the network that the load balanced IP should belong to - /// for this global forwarding rule. If this field is not specified, - /// the default network will be used. + /// This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + /// field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + /// specified, the default network will be used. /// [Output("network")] public Output Network { get; private set; } = null!; @@ -325,12 +317,10 @@ public partial class GlobalForwardingRule : global::Pulumi.CustomResource public Output SelfLink { get; private set; } = null!; /// - /// The URL of the target resource to receive the matched traffic. - /// The forwarded traffic must be of a type appropriate to the target object. - /// For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - /// are valid. - /// For global address with a purpose of PRIVATE_SERVICE_CONNECT and - /// addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + /// The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + /// the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + /// resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + /// balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. /// [Output("target")] public Output Target { get; private set; } = null!; @@ -427,7 +417,7 @@ public sealed class GlobalForwardingRuleArgs : global::Pulumi.ResourceArgs private InputMap? _labels; /// - /// Labels to apply to this forwarding rule. A list of key->value pairs. + /// Labels to apply to this rule. /// public InputMap Labels { @@ -436,18 +426,13 @@ public InputMap Labels } /// - /// This signifies what the GlobalForwardingRule will be used for. - /// The value of INTERNAL_SELF_MANAGED means that this will be used for - /// Internal Global HTTP(S) LB. The value of EXTERNAL means that this - /// will be used for External Global Load Balancing (HTTP(S) LB, - /// External TCP/UDP LB, SSL Proxy) - /// Note: This field must be set "" if the global address is - /// External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - /// that this will be used for Global external HTTP(S) load balancers. - /// Note: This field must be set "" if the global address is - /// configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - /// Default value is `EXTERNAL`. - /// Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + /// Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + /// from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + /// `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + /// `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + /// Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + /// forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + /// INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED /// [Input("loadBalancingScheme")] public Input? LoadBalancingScheme { get; set; } @@ -491,11 +476,9 @@ public InputList MetadataFilters public Input? Name { get; set; } /// - /// This field is not used for external load balancing. - /// For INTERNAL_SELF_MANAGED load balancing, this field - /// identifies the network that the load balanced IP should belong to - /// for this global forwarding rule. If this field is not specified, - /// the default network will be used. + /// This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + /// field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + /// specified, the default network will be used. /// [Input("network")] public Input? Network { get; set; } @@ -529,12 +512,10 @@ public InputList MetadataFilters public Input? Project { get; set; } /// - /// The URL of the target resource to receive the matched traffic. - /// The forwarded traffic must be of a type appropriate to the target object. - /// For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - /// are valid. - /// For global address with a purpose of PRIVATE_SERVICE_CONNECT and - /// addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + /// The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + /// the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + /// resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + /// balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. /// [Input("target", required: true)] public Input Target { get; set; } = null!; @@ -599,7 +580,7 @@ public sealed class GlobalForwardingRuleState : global::Pulumi.ResourceArgs private InputMap? _labels; /// - /// Labels to apply to this forwarding rule. A list of key->value pairs. + /// Labels to apply to this rule. /// public InputMap Labels { @@ -608,18 +589,13 @@ public InputMap Labels } /// - /// This signifies what the GlobalForwardingRule will be used for. - /// The value of INTERNAL_SELF_MANAGED means that this will be used for - /// Internal Global HTTP(S) LB. The value of EXTERNAL means that this - /// will be used for External Global Load Balancing (HTTP(S) LB, - /// External TCP/UDP LB, SSL Proxy) - /// Note: This field must be set "" if the global address is - /// External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - /// that this will be used for Global external HTTP(S) load balancers. - /// Note: This field must be set "" if the global address is - /// configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - /// Default value is `EXTERNAL`. - /// Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + /// Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + /// from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + /// `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + /// `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + /// Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + /// forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + /// INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED /// [Input("loadBalancingScheme")] public Input? LoadBalancingScheme { get; set; } @@ -663,11 +639,9 @@ public InputList MetadataFilte public Input? Name { get; set; } /// - /// This field is not used for external load balancing. - /// For INTERNAL_SELF_MANAGED load balancing, this field - /// identifies the network that the load balanced IP should belong to - /// for this global forwarding rule. If this field is not specified, - /// the default network will be used. + /// This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + /// field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + /// specified, the default network will be used. /// [Input("network")] public Input? Network { get; set; } @@ -720,12 +694,10 @@ public InputList MetadataFilte public Input? SelfLink { get; set; } /// - /// The URL of the target resource to receive the matched traffic. - /// The forwarded traffic must be of a type appropriate to the target object. - /// For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - /// are valid. - /// For global address with a purpose of PRIVATE_SERVICE_CONNECT and - /// addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + /// The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + /// the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + /// resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + /// balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. /// [Input("target")] public Input? Target { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyArgs.cs b/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyArgs.cs index 35dba15b40..e8e32fb8cb 100644 --- a/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyArgs.cs +++ b/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyArgs.cs @@ -81,11 +81,6 @@ public InputList Metrics [Input("mode")] public Input? Mode { get; set; } - /// - /// Defines scale down controls to reduce the risk of response latency - /// and outages due to abrupt scale-in events - /// Structure is documented below. - /// [Input("scaleDownControl")] public Input? ScaleDownControl { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyGetArgs.cs b/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyGetArgs.cs index e9b786e480..aea15ad598 100644 --- a/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyGetArgs.cs @@ -81,11 +81,6 @@ public InputList Metrics [Input("mode")] public Input? Mode { get; set; } - /// - /// Defines scale down controls to reduce the risk of response latency - /// and outages due to abrupt scale-in events - /// Structure is documented below. - /// [Input("scaleDownControl")] public Input? ScaleDownControl { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyMetricArgs.cs b/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyMetricArgs.cs index 232fcc2b58..550f9fcf7c 100644 --- a/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyMetricArgs.cs +++ b/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyMetricArgs.cs @@ -12,35 +12,6 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class AutoscalarAutoscalingPolicyMetricArgs : global::Pulumi.ResourceArgs { - /// - /// A filter string to be used as the filter string for - /// a Stackdriver Monitoring TimeSeries.list API call. - /// This filter is used to select a specific TimeSeries for - /// the purpose of autoscaling and to determine whether the metric - /// is exporting per-instance or per-group data. - /// You can only use the AND operator for joining selectors. - /// You can only use direct equality comparison operator (=) without - /// any functions for each selector. - /// You can specify the metric in both the filter string and in the - /// metric field. However, if specified in both places, the metric must - /// be identical. - /// The monitored resource type determines what kind of values are - /// expected for the metric. If it is a gce_instance, the autoscaler - /// expects the metric to include a separate TimeSeries for each - /// instance in a group. In such a case, you cannot filter on resource - /// labels. - /// If the resource type is any other value, the autoscaler expects - /// this metric to contain values that apply to the entire autoscaled - /// instance group and resource label filtering can be performed to - /// point autoscaler at the correct TimeSeries to scale upon. - /// This is called a per-group metric for the purpose of autoscaling. - /// If not specified, the type defaults to gce_instance. - /// You should provide a filter that is selective enough to pick just - /// one TimeSeries for the autoscaled group or for each of the instances - /// (if you are using gce_instance resource type). If multiple - /// TimeSeries are returned upon the query execution, the autoscaler - /// will sum their respective values to obtain its scaling value. - /// [Input("filter")] public Input? Filter { get; set; } @@ -52,22 +23,6 @@ public sealed class AutoscalarAutoscalingPolicyMetricArgs : global::Pulumi.Resou [Input("name", required: true)] public Input Name { get; set; } = null!; - /// - /// If scaling is based on a per-group metric value that represents the - /// total amount of work to be done or resource usage, set this value to - /// an amount assigned for a single instance of the scaled group. - /// The autoscaler will keep the number of instances proportional to the - /// value of this metric, the metric itself should not change value due - /// to group resizing. - /// For example, a good metric to use with the target is - /// `pubsub.googleapis.com/subscription/num_undelivered_messages` - /// or a custom metric exporting the total number of requests coming to - /// your instances. - /// A bad example would be a metric exporting an average or median - /// latency, since this value can't include a chunk assignable to a - /// single instance, it could be better used with utilization_target - /// instead. - /// [Input("singleInstanceAssignment")] public Input? SingleInstanceAssignment { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyMetricGetArgs.cs b/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyMetricGetArgs.cs index d488bd152e..1b002e27e2 100644 --- a/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyMetricGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/AutoscalarAutoscalingPolicyMetricGetArgs.cs @@ -12,35 +12,6 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class AutoscalarAutoscalingPolicyMetricGetArgs : global::Pulumi.ResourceArgs { - /// - /// A filter string to be used as the filter string for - /// a Stackdriver Monitoring TimeSeries.list API call. - /// This filter is used to select a specific TimeSeries for - /// the purpose of autoscaling and to determine whether the metric - /// is exporting per-instance or per-group data. - /// You can only use the AND operator for joining selectors. - /// You can only use direct equality comparison operator (=) without - /// any functions for each selector. - /// You can specify the metric in both the filter string and in the - /// metric field. However, if specified in both places, the metric must - /// be identical. - /// The monitored resource type determines what kind of values are - /// expected for the metric. If it is a gce_instance, the autoscaler - /// expects the metric to include a separate TimeSeries for each - /// instance in a group. In such a case, you cannot filter on resource - /// labels. - /// If the resource type is any other value, the autoscaler expects - /// this metric to contain values that apply to the entire autoscaled - /// instance group and resource label filtering can be performed to - /// point autoscaler at the correct TimeSeries to scale upon. - /// This is called a per-group metric for the purpose of autoscaling. - /// If not specified, the type defaults to gce_instance. - /// You should provide a filter that is selective enough to pick just - /// one TimeSeries for the autoscaled group or for each of the instances - /// (if you are using gce_instance resource type). If multiple - /// TimeSeries are returned upon the query execution, the autoscaler - /// will sum their respective values to obtain its scaling value. - /// [Input("filter")] public Input? Filter { get; set; } @@ -52,22 +23,6 @@ public sealed class AutoscalarAutoscalingPolicyMetricGetArgs : global::Pulumi.Re [Input("name", required: true)] public Input Name { get; set; } = null!; - /// - /// If scaling is based on a per-group metric value that represents the - /// total amount of work to be done or resource usage, set this value to - /// an amount assigned for a single instance of the scaled group. - /// The autoscaler will keep the number of instances proportional to the - /// value of this metric, the metric itself should not change value due - /// to group resizing. - /// For example, a good metric to use with the target is - /// `pubsub.googleapis.com/subscription/num_undelivered_messages` - /// or a custom metric exporting the total number of requests coming to - /// your instances. - /// A bad example would be a metric exporting an average or median - /// latency, since this value can't include a chunk assignable to a - /// single instance, it could be better used with utilization_target - /// instead. - /// [Input("singleInstanceAssignment")] public Input? SingleInstanceAssignment { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyArgs.cs b/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyArgs.cs index cb21c5359e..004dac9910 100644 --- a/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyArgs.cs +++ b/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyArgs.cs @@ -81,11 +81,6 @@ public InputList Metrics [Input("mode")] public Input? Mode { get; set; } - /// - /// Defines scale down controls to reduce the risk of response latency - /// and outages due to abrupt scale-in events - /// Structure is documented below. - /// [Input("scaleDownControl")] public Input? ScaleDownControl { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyGetArgs.cs b/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyGetArgs.cs index 94f1cd6fdb..4d0ff5b9ac 100644 --- a/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyGetArgs.cs @@ -81,11 +81,6 @@ public InputList Metrics [Input("mode")] public Input? Mode { get; set; } - /// - /// Defines scale down controls to reduce the risk of response latency - /// and outages due to abrupt scale-in events - /// Structure is documented below. - /// [Input("scaleDownControl")] public Input? ScaleDownControl { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyMetricArgs.cs b/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyMetricArgs.cs index 22482ed3f2..5d03111910 100644 --- a/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyMetricArgs.cs +++ b/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyMetricArgs.cs @@ -12,35 +12,6 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class AutoscalerAutoscalingPolicyMetricArgs : global::Pulumi.ResourceArgs { - /// - /// A filter string to be used as the filter string for - /// a Stackdriver Monitoring TimeSeries.list API call. - /// This filter is used to select a specific TimeSeries for - /// the purpose of autoscaling and to determine whether the metric - /// is exporting per-instance or per-group data. - /// You can only use the AND operator for joining selectors. - /// You can only use direct equality comparison operator (=) without - /// any functions for each selector. - /// You can specify the metric in both the filter string and in the - /// metric field. However, if specified in both places, the metric must - /// be identical. - /// The monitored resource type determines what kind of values are - /// expected for the metric. If it is a gce_instance, the autoscaler - /// expects the metric to include a separate TimeSeries for each - /// instance in a group. In such a case, you cannot filter on resource - /// labels. - /// If the resource type is any other value, the autoscaler expects - /// this metric to contain values that apply to the entire autoscaled - /// instance group and resource label filtering can be performed to - /// point autoscaler at the correct TimeSeries to scale upon. - /// This is called a per-group metric for the purpose of autoscaling. - /// If not specified, the type defaults to gce_instance. - /// You should provide a filter that is selective enough to pick just - /// one TimeSeries for the autoscaled group or for each of the instances - /// (if you are using gce_instance resource type). If multiple - /// TimeSeries are returned upon the query execution, the autoscaler - /// will sum their respective values to obtain its scaling value. - /// [Input("filter")] public Input? Filter { get; set; } @@ -52,22 +23,6 @@ public sealed class AutoscalerAutoscalingPolicyMetricArgs : global::Pulumi.Resou [Input("name", required: true)] public Input Name { get; set; } = null!; - /// - /// If scaling is based on a per-group metric value that represents the - /// total amount of work to be done or resource usage, set this value to - /// an amount assigned for a single instance of the scaled group. - /// The autoscaler will keep the number of instances proportional to the - /// value of this metric, the metric itself should not change value due - /// to group resizing. - /// For example, a good metric to use with the target is - /// `pubsub.googleapis.com/subscription/num_undelivered_messages` - /// or a custom metric exporting the total number of requests coming to - /// your instances. - /// A bad example would be a metric exporting an average or median - /// latency, since this value can't include a chunk assignable to a - /// single instance, it could be better used with utilization_target - /// instead. - /// [Input("singleInstanceAssignment")] public Input? SingleInstanceAssignment { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyMetricGetArgs.cs b/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyMetricGetArgs.cs index 56e6ba5b8d..959728088f 100644 --- a/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyMetricGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/AutoscalerAutoscalingPolicyMetricGetArgs.cs @@ -12,35 +12,6 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class AutoscalerAutoscalingPolicyMetricGetArgs : global::Pulumi.ResourceArgs { - /// - /// A filter string to be used as the filter string for - /// a Stackdriver Monitoring TimeSeries.list API call. - /// This filter is used to select a specific TimeSeries for - /// the purpose of autoscaling and to determine whether the metric - /// is exporting per-instance or per-group data. - /// You can only use the AND operator for joining selectors. - /// You can only use direct equality comparison operator (=) without - /// any functions for each selector. - /// You can specify the metric in both the filter string and in the - /// metric field. However, if specified in both places, the metric must - /// be identical. - /// The monitored resource type determines what kind of values are - /// expected for the metric. If it is a gce_instance, the autoscaler - /// expects the metric to include a separate TimeSeries for each - /// instance in a group. In such a case, you cannot filter on resource - /// labels. - /// If the resource type is any other value, the autoscaler expects - /// this metric to contain values that apply to the entire autoscaled - /// instance group and resource label filtering can be performed to - /// point autoscaler at the correct TimeSeries to scale upon. - /// This is called a per-group metric for the purpose of autoscaling. - /// If not specified, the type defaults to gce_instance. - /// You should provide a filter that is selective enough to pick just - /// one TimeSeries for the autoscaled group or for each of the instances - /// (if you are using gce_instance resource type). If multiple - /// TimeSeries are returned upon the query execution, the autoscaler - /// will sum their respective values to obtain its scaling value. - /// [Input("filter")] public Input? Filter { get; set; } @@ -52,22 +23,6 @@ public sealed class AutoscalerAutoscalingPolicyMetricGetArgs : global::Pulumi.Re [Input("name", required: true)] public Input Name { get; set; } = null!; - /// - /// If scaling is based on a per-group metric value that represents the - /// total amount of work to be done or resource usage, set this value to - /// an amount assigned for a single instance of the scaled group. - /// The autoscaler will keep the number of instances proportional to the - /// value of this metric, the metric itself should not change value due - /// to group resizing. - /// For example, a good metric to use with the target is - /// `pubsub.googleapis.com/subscription/num_undelivered_messages` - /// or a custom metric exporting the total number of requests coming to - /// your instances. - /// A bad example would be a metric exporting an average or median - /// latency, since this value can't include a chunk assignable to a - /// single instance, it could be better used with utilization_target - /// instead. - /// [Input("singleInstanceAssignment")] public Input? SingleInstanceAssignment { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/BackendServiceCircuitBreakersArgs.cs b/sdk/dotnet/Compute/Inputs/BackendServiceCircuitBreakersArgs.cs index 46bea2952b..52f260e0e9 100644 --- a/sdk/dotnet/Compute/Inputs/BackendServiceCircuitBreakersArgs.cs +++ b/sdk/dotnet/Compute/Inputs/BackendServiceCircuitBreakersArgs.cs @@ -12,10 +12,6 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class BackendServiceCircuitBreakersArgs : global::Pulumi.ResourceArgs { - /// - /// The timeout for new network connections to hosts. - /// Structure is documented below. - /// [Input("connectTimeout")] public Input? ConnectTimeout { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/BackendServiceCircuitBreakersGetArgs.cs b/sdk/dotnet/Compute/Inputs/BackendServiceCircuitBreakersGetArgs.cs index b61e9ed99b..c006413384 100644 --- a/sdk/dotnet/Compute/Inputs/BackendServiceCircuitBreakersGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/BackendServiceCircuitBreakersGetArgs.cs @@ -12,10 +12,6 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class BackendServiceCircuitBreakersGetArgs : global::Pulumi.ResourceArgs { - /// - /// The timeout for new network connections to hosts. - /// Structure is documented below. - /// [Input("connectTimeout")] public Input? ConnectTimeout { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyArgs.cs b/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyArgs.cs new file mode 100644 index 0000000000..4039581411 --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyArgs.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.Compute.Inputs +{ + + public sealed class BackendServiceLocalityLbPolicyArgs : global::Pulumi.ResourceArgs + { + /// + /// The configuration for a custom policy implemented by the user and + /// deployed with the client. + /// Structure is documented below. + /// + [Input("customPolicy")] + public Input? CustomPolicy { get; set; } + + /// + /// The configuration for a built-in load balancing policy. + /// Structure is documented below. + /// + [Input("policy")] + public Input? Policy { get; set; } + + public BackendServiceLocalityLbPolicyArgs() + { + } + public static new BackendServiceLocalityLbPolicyArgs Empty => new BackendServiceLocalityLbPolicyArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyCustomPolicyArgs.cs b/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyCustomPolicyArgs.cs new file mode 100644 index 0000000000..6375c9b641 --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyCustomPolicyArgs.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.Compute.Inputs +{ + + public sealed class BackendServiceLocalityLbPolicyCustomPolicyArgs : global::Pulumi.ResourceArgs + { + /// + /// An optional, arbitrary JSON object with configuration data, understood + /// by a locally installed custom policy implementation. + /// + [Input("data")] + public Input? Data { get; set; } + + /// + /// Identifies the custom policy. + /// The value should match the type the custom implementation is registered + /// with on the gRPC clients. It should follow protocol buffer + /// message naming conventions and include the full path (e.g. + /// myorg.CustomLbPolicy). The maximum length is 256 characters. + /// Note that specifying the same custom policy more than once for a + /// backend is not a valid configuration and will be rejected. + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + public BackendServiceLocalityLbPolicyCustomPolicyArgs() + { + } + public static new BackendServiceLocalityLbPolicyCustomPolicyArgs Empty => new BackendServiceLocalityLbPolicyCustomPolicyArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyCustomPolicyGetArgs.cs b/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyCustomPolicyGetArgs.cs new file mode 100644 index 0000000000..6307ac0b3b --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyCustomPolicyGetArgs.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.Compute.Inputs +{ + + public sealed class BackendServiceLocalityLbPolicyCustomPolicyGetArgs : global::Pulumi.ResourceArgs + { + /// + /// An optional, arbitrary JSON object with configuration data, understood + /// by a locally installed custom policy implementation. + /// + [Input("data")] + public Input? Data { get; set; } + + /// + /// Identifies the custom policy. + /// The value should match the type the custom implementation is registered + /// with on the gRPC clients. It should follow protocol buffer + /// message naming conventions and include the full path (e.g. + /// myorg.CustomLbPolicy). The maximum length is 256 characters. + /// Note that specifying the same custom policy more than once for a + /// backend is not a valid configuration and will be rejected. + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + public BackendServiceLocalityLbPolicyCustomPolicyGetArgs() + { + } + public static new BackendServiceLocalityLbPolicyCustomPolicyGetArgs Empty => new BackendServiceLocalityLbPolicyCustomPolicyGetArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyGetArgs.cs b/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyGetArgs.cs new file mode 100644 index 0000000000..6c2c779f42 --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyGetArgs.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.Compute.Inputs +{ + + public sealed class BackendServiceLocalityLbPolicyGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The configuration for a custom policy implemented by the user and + /// deployed with the client. + /// Structure is documented below. + /// + [Input("customPolicy")] + public Input? CustomPolicy { get; set; } + + /// + /// The configuration for a built-in load balancing policy. + /// Structure is documented below. + /// + [Input("policy")] + public Input? Policy { get; set; } + + public BackendServiceLocalityLbPolicyGetArgs() + { + } + public static new BackendServiceLocalityLbPolicyGetArgs Empty => new BackendServiceLocalityLbPolicyGetArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyPolicyArgs.cs b/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyPolicyArgs.cs new file mode 100644 index 0000000000..ef4970441c --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyPolicyArgs.cs @@ -0,0 +1,33 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Compute.Inputs +{ + + public sealed class BackendServiceLocalityLbPolicyPolicyArgs : global::Pulumi.ResourceArgs + { + /// + /// The name of a locality load balancer policy to be used. The value + /// should be one of the predefined ones as supported by localityLbPolicy, + /// although at the moment only ROUND_ROBIN is supported. + /// This field should only be populated when the customPolicy field is not + /// used. + /// Note that specifying the same policy more than once for a backend is + /// not a valid configuration and will be rejected. + /// The possible values are: + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + public BackendServiceLocalityLbPolicyPolicyArgs() + { + } + public static new BackendServiceLocalityLbPolicyPolicyArgs Empty => new BackendServiceLocalityLbPolicyPolicyArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyPolicyGetArgs.cs b/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyPolicyGetArgs.cs new file mode 100644 index 0000000000..90b0f9942f --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/BackendServiceLocalityLbPolicyPolicyGetArgs.cs @@ -0,0 +1,33 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Compute.Inputs +{ + + public sealed class BackendServiceLocalityLbPolicyPolicyGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The name of a locality load balancer policy to be used. The value + /// should be one of the predefined ones as supported by localityLbPolicy, + /// although at the moment only ROUND_ROBIN is supported. + /// This field should only be populated when the customPolicy field is not + /// used. + /// Note that specifying the same policy more than once for a backend is + /// not a valid configuration and will be rejected. + /// The possible values are: + /// + [Input("name", required: true)] + public Input Name { get; set; } = null!; + + public BackendServiceLocalityLbPolicyPolicyGetArgs() + { + } + public static new BackendServiceLocalityLbPolicyPolicyGetArgs Empty => new BackendServiceLocalityLbPolicyPolicyGetArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/InstanceAttachedDiskArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceAttachedDiskArgs.cs index 4ccff72af7..2f1f68ddbe 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceAttachedDiskArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceAttachedDiskArgs.cs @@ -24,7 +24,7 @@ public sealed class InstanceAttachedDiskArgs : global::Pulumi.ResourceArgs /// /// A 256-bit [customer-supplied encryption key] - /// (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + /// (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), /// encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) /// to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. /// diff --git a/sdk/dotnet/Compute/Inputs/InstanceAttachedDiskGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceAttachedDiskGetArgs.cs index 6c71323234..56d1b047d8 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceAttachedDiskGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceAttachedDiskGetArgs.cs @@ -24,7 +24,7 @@ public sealed class InstanceAttachedDiskGetArgs : global::Pulumi.ResourceArgs /// /// A 256-bit [customer-supplied encryption key] - /// (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + /// (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), /// encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) /// to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. /// diff --git a/sdk/dotnet/Compute/Inputs/InstanceBootDiskArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceBootDiskArgs.cs index ce27656075..a4311d9937 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceBootDiskArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceBootDiskArgs.cs @@ -31,7 +31,7 @@ public sealed class InstanceBootDiskArgs : global::Pulumi.ResourceArgs /// /// A 256-bit [customer-supplied encryption key] - /// (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + /// (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), /// encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) /// to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` /// may be set. diff --git a/sdk/dotnet/Compute/Inputs/InstanceBootDiskGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceBootDiskGetArgs.cs index 47c6de9d66..3496615dff 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceBootDiskGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceBootDiskGetArgs.cs @@ -31,7 +31,7 @@ public sealed class InstanceBootDiskGetArgs : global::Pulumi.ResourceArgs /// /// A 256-bit [customer-supplied encryption key] - /// (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + /// (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), /// encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) /// to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` /// may be set. diff --git a/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceArgs.cs index b69b87da9d..39768c361f 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceArgs.cs @@ -14,15 +14,6 @@ public sealed class InstanceNetworkInterfaceArgs : global::Pulumi.ResourceArgs { [Input("accessConfigs")] private InputList? _accessConfigs; - - /// - /// Access configurations, i.e. IPs via which this - /// instance can be accessed via the Internet. Omit to ensure that the instance - /// is not accessible from the Internet. If omitted, ssh will not - /// work unless this provider can send traffic to the instance's network (e.g. via - /// tunnel or because it is running on another cloud instance on that network). - /// This block can be repeated multiple times. Structure documented below. - /// public InputList AccessConfigs { get => _accessConfigs ?? (_accessConfigs = new InputList()); diff --git a/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceGetArgs.cs index f2acbdf1fb..af220d5a54 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceNetworkInterfaceGetArgs.cs @@ -14,15 +14,6 @@ public sealed class InstanceNetworkInterfaceGetArgs : global::Pulumi.ResourceArg { [Input("accessConfigs")] private InputList? _accessConfigs; - - /// - /// Access configurations, i.e. IPs via which this - /// instance can be accessed via the Internet. Omit to ensure that the instance - /// is not accessible from the Internet. If omitted, ssh will not - /// work unless this provider can send traffic to the instance's network (e.g. via - /// tunnel or because it is running on another cloud instance on that network). - /// This block can be repeated multiple times. Structure documented below. - /// public InputList AccessConfigs { get => _accessConfigs ?? (_accessConfigs = new InputList()); diff --git a/sdk/dotnet/Compute/Inputs/InstanceSchedulingArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceSchedulingArgs.cs index 1cc566ef20..ef4591afdd 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceSchedulingArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceSchedulingArgs.cs @@ -68,7 +68,7 @@ public InputList NodeAffinities public Input? Preemptible { get; set; } /// - /// Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, + /// Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, /// `preemptible` should be `true` and `auto_restart` should be /// `false`. For more info about /// `SPOT`, read [here](https://cloud.google.com/compute/docs/instances/spot) diff --git a/sdk/dotnet/Compute/Inputs/InstanceSchedulingGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceSchedulingGetArgs.cs index 0d7cf362bd..c75b4ca49d 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceSchedulingGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceSchedulingGetArgs.cs @@ -68,7 +68,7 @@ public InputList NodeAffinities public Input? Preemptible { get; set; } /// - /// Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, + /// Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, /// `preemptible` should be `true` and `auto_restart` should be /// `false`. For more info about /// `SPOT`, read [here](https://cloud.google.com/compute/docs/instances/spot) diff --git a/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceArgs.cs index 7b88a08fa8..81475a981a 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceArgs.cs @@ -14,15 +14,6 @@ public sealed class InstanceTemplateNetworkInterfaceArgs : global::Pulumi.Resour { [Input("accessConfigs")] private InputList? _accessConfigs; - - /// - /// Access configurations, i.e. IPs via which this - /// instance can be accessed via the Internet. Omit to ensure that the instance - /// is not accessible from the Internet (this means that ssh provisioners will - /// not work unless you can send traffic to the instance's - /// network (e.g. via tunnel or because it is running on another cloud instance - /// on that network). This block can be repeated multiple times. Structure documented below. - /// public InputList AccessConfigs { get => _accessConfigs ?? (_accessConfigs = new InputList()); @@ -60,10 +51,6 @@ public InputList Ip [Input("ipv6AccessType")] public Input? Ipv6AccessType { get; set; } - /// - /// The name of the instance template. If you leave - /// this blank, the provider will auto-generate a unique name. - /// [Input("name")] public Input? Name { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceGetArgs.cs index d64e8fd55f..dea03047d1 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceTemplateNetworkInterfaceGetArgs.cs @@ -14,15 +14,6 @@ public sealed class InstanceTemplateNetworkInterfaceGetArgs : global::Pulumi.Res { [Input("accessConfigs")] private InputList? _accessConfigs; - - /// - /// Access configurations, i.e. IPs via which this - /// instance can be accessed via the Internet. Omit to ensure that the instance - /// is not accessible from the Internet (this means that ssh provisioners will - /// not work unless you can send traffic to the instance's - /// network (e.g. via tunnel or because it is running on another cloud instance - /// on that network). This block can be repeated multiple times. Structure documented below. - /// public InputList AccessConfigs { get => _accessConfigs ?? (_accessConfigs = new InputList()); @@ -60,10 +51,6 @@ public InputList [Input("ipv6AccessType")] public Input? Ipv6AccessType { get; set; } - /// - /// The name of the instance template. If you leave - /// this blank, the provider will auto-generate a unique name. - /// [Input("name")] public Input? Name { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/InstanceTemplateSchedulingArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceTemplateSchedulingArgs.cs index 37a3889136..498edac963 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceTemplateSchedulingArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceTemplateSchedulingArgs.cs @@ -26,9 +26,6 @@ public sealed class InstanceTemplateSchedulingArgs : global::Pulumi.ResourceArgs [Input("instanceTerminationAction")] public Input? InstanceTerminationAction { get; set; } - /// - /// Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below. - /// [Input("maxRunDuration")] public Input? MaxRunDuration { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/InstanceTemplateSchedulingGetArgs.cs b/sdk/dotnet/Compute/Inputs/InstanceTemplateSchedulingGetArgs.cs index f6bdab46ba..34dd9f3a0c 100644 --- a/sdk/dotnet/Compute/Inputs/InstanceTemplateSchedulingGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/InstanceTemplateSchedulingGetArgs.cs @@ -26,9 +26,6 @@ public sealed class InstanceTemplateSchedulingGetArgs : global::Pulumi.ResourceA [Input("instanceTerminationAction")] public Input? InstanceTerminationAction { get; set; } - /// - /// Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below. - /// [Input("maxRunDuration")] public Input? MaxRunDuration { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsArgs.cs b/sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsArgs.cs new file mode 100644 index 0000000000..73782a4cc5 --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsArgs.cs @@ -0,0 +1,40 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Compute.Inputs +{ + + public sealed class NodeGroupShareSettingsArgs : global::Pulumi.ResourceArgs + { + [Input("projectMaps")] + private InputList? _projectMaps; + + /// + /// A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + /// Structure is documented below. + /// + public InputList ProjectMaps + { + get => _projectMaps ?? (_projectMaps = new InputList()); + set => _projectMaps = value; + } + + /// + /// Node group sharing type. + /// Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + /// + [Input("shareType", required: true)] + public Input ShareType { get; set; } = null!; + + public NodeGroupShareSettingsArgs() + { + } + public static new NodeGroupShareSettingsArgs Empty => new NodeGroupShareSettingsArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsGetArgs.cs b/sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsGetArgs.cs new file mode 100644 index 0000000000..2e1e07c7ec --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsGetArgs.cs @@ -0,0 +1,40 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Compute.Inputs +{ + + public sealed class NodeGroupShareSettingsGetArgs : global::Pulumi.ResourceArgs + { + [Input("projectMaps")] + private InputList? _projectMaps; + + /// + /// A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + /// Structure is documented below. + /// + public InputList ProjectMaps + { + get => _projectMaps ?? (_projectMaps = new InputList()); + set => _projectMaps = value; + } + + /// + /// Node group sharing type. + /// Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + /// + [Input("shareType", required: true)] + public Input ShareType { get; set; } = null!; + + public NodeGroupShareSettingsGetArgs() + { + } + public static new NodeGroupShareSettingsGetArgs Empty => new NodeGroupShareSettingsGetArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsProjectMapArgs.cs b/sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsProjectMapArgs.cs new file mode 100644 index 0000000000..55999ddee2 --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsProjectMapArgs.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.Compute.Inputs +{ + + public sealed class NodeGroupShareSettingsProjectMapArgs : global::Pulumi.ResourceArgs + { + /// + /// The identifier for this object. Format specified above. + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + /// + /// The project id/number should be the same as the key of this project config in the project map. + /// + [Input("projectId", required: true)] + public Input ProjectId { get; set; } = null!; + + public NodeGroupShareSettingsProjectMapArgs() + { + } + public static new NodeGroupShareSettingsProjectMapArgs Empty => new NodeGroupShareSettingsProjectMapArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsProjectMapGetArgs.cs b/sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsProjectMapGetArgs.cs new file mode 100644 index 0000000000..4a97065a5f --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/NodeGroupShareSettingsProjectMapGetArgs.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.Compute.Inputs +{ + + public sealed class NodeGroupShareSettingsProjectMapGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The identifier for this object. Format specified above. + /// + [Input("id", required: true)] + public Input Id { get; set; } = null!; + + /// + /// The project id/number should be the same as the key of this project config in the project map. + /// + [Input("projectId", required: true)] + public Input ProjectId { get; set; } = null!; + + public NodeGroupShareSettingsProjectMapGetArgs() + { + } + public static new NodeGroupShareSettingsProjectMapGetArgs Empty => new NodeGroupShareSettingsProjectMapGetArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyArgs.cs b/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyArgs.cs index c3dd1664b6..f5224a39a2 100644 --- a/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyArgs.cs @@ -81,11 +81,6 @@ public InputList Metrics [Input("mode")] public Input? Mode { get; set; } - /// - /// Defines scale down controls to reduce the risk of response latency - /// and outages due to abrupt scale-in events - /// Structure is documented below. - /// [Input("scaleDownControl")] public Input? ScaleDownControl { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyGetArgs.cs b/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyGetArgs.cs index 411556f21b..88cc4eb658 100644 --- a/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyGetArgs.cs @@ -81,11 +81,6 @@ public InputList Metrics [Input("mode")] public Input? Mode { get; set; } - /// - /// Defines scale down controls to reduce the risk of response latency - /// and outages due to abrupt scale-in events - /// Structure is documented below. - /// [Input("scaleDownControl")] public Input? ScaleDownControl { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyMetricArgs.cs b/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyMetricArgs.cs index e2a3c02763..e71677d4ff 100644 --- a/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyMetricArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyMetricArgs.cs @@ -12,35 +12,6 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class RegionAutoscalerAutoscalingPolicyMetricArgs : global::Pulumi.ResourceArgs { - /// - /// A filter string to be used as the filter string for - /// a Stackdriver Monitoring TimeSeries.list API call. - /// This filter is used to select a specific TimeSeries for - /// the purpose of autoscaling and to determine whether the metric - /// is exporting per-instance or per-group data. - /// You can only use the AND operator for joining selectors. - /// You can only use direct equality comparison operator (=) without - /// any functions for each selector. - /// You can specify the metric in both the filter string and in the - /// metric field. However, if specified in both places, the metric must - /// be identical. - /// The monitored resource type determines what kind of values are - /// expected for the metric. If it is a gce_instance, the autoscaler - /// expects the metric to include a separate TimeSeries for each - /// instance in a group. In such a case, you cannot filter on resource - /// labels. - /// If the resource type is any other value, the autoscaler expects - /// this metric to contain values that apply to the entire autoscaled - /// instance group and resource label filtering can be performed to - /// point autoscaler at the correct TimeSeries to scale upon. - /// This is called a per-group metric for the purpose of autoscaling. - /// If not specified, the type defaults to gce_instance. - /// You should provide a filter that is selective enough to pick just - /// one TimeSeries for the autoscaled group or for each of the instances - /// (if you are using gce_instance resource type). If multiple - /// TimeSeries are returned upon the query execution, the autoscaler - /// will sum their respective values to obtain its scaling value. - /// [Input("filter")] public Input? Filter { get; set; } @@ -52,22 +23,6 @@ public sealed class RegionAutoscalerAutoscalingPolicyMetricArgs : global::Pulumi [Input("name", required: true)] public Input Name { get; set; } = null!; - /// - /// If scaling is based on a per-group metric value that represents the - /// total amount of work to be done or resource usage, set this value to - /// an amount assigned for a single instance of the scaled group. - /// The autoscaler will keep the number of instances proportional to the - /// value of this metric, the metric itself should not change value due - /// to group resizing. - /// For example, a good metric to use with the target is - /// `pubsub.googleapis.com/subscription/num_undelivered_messages` - /// or a custom metric exporting the total number of requests coming to - /// your instances. - /// A bad example would be a metric exporting an average or median - /// latency, since this value can't include a chunk assignable to a - /// single instance, it could be better used with utilization_target - /// instead. - /// [Input("singleInstanceAssignment")] public Input? SingleInstanceAssignment { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyMetricGetArgs.cs b/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyMetricGetArgs.cs index 99440c1be0..bb000d095e 100644 --- a/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyMetricGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RegionAutoscalerAutoscalingPolicyMetricGetArgs.cs @@ -12,35 +12,6 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class RegionAutoscalerAutoscalingPolicyMetricGetArgs : global::Pulumi.ResourceArgs { - /// - /// A filter string to be used as the filter string for - /// a Stackdriver Monitoring TimeSeries.list API call. - /// This filter is used to select a specific TimeSeries for - /// the purpose of autoscaling and to determine whether the metric - /// is exporting per-instance or per-group data. - /// You can only use the AND operator for joining selectors. - /// You can only use direct equality comparison operator (=) without - /// any functions for each selector. - /// You can specify the metric in both the filter string and in the - /// metric field. However, if specified in both places, the metric must - /// be identical. - /// The monitored resource type determines what kind of values are - /// expected for the metric. If it is a gce_instance, the autoscaler - /// expects the metric to include a separate TimeSeries for each - /// instance in a group. In such a case, you cannot filter on resource - /// labels. - /// If the resource type is any other value, the autoscaler expects - /// this metric to contain values that apply to the entire autoscaled - /// instance group and resource label filtering can be performed to - /// point autoscaler at the correct TimeSeries to scale upon. - /// This is called a per-group metric for the purpose of autoscaling. - /// If not specified, the type defaults to gce_instance. - /// You should provide a filter that is selective enough to pick just - /// one TimeSeries for the autoscaled group or for each of the instances - /// (if you are using gce_instance resource type). If multiple - /// TimeSeries are returned upon the query execution, the autoscaler - /// will sum their respective values to obtain its scaling value. - /// [Input("filter")] public Input? Filter { get; set; } @@ -52,22 +23,6 @@ public sealed class RegionAutoscalerAutoscalingPolicyMetricGetArgs : global::Pul [Input("name", required: true)] public Input Name { get; set; } = null!; - /// - /// If scaling is based on a per-group metric value that represents the - /// total amount of work to be done or resource usage, set this value to - /// an amount assigned for a single instance of the scaled group. - /// The autoscaler will keep the number of instances proportional to the - /// value of this metric, the metric itself should not change value due - /// to group resizing. - /// For example, a good metric to use with the target is - /// `pubsub.googleapis.com/subscription/num_undelivered_messages` - /// or a custom metric exporting the total number of requests coming to - /// your instances. - /// A bad example would be a metric exporting an average or median - /// latency, since this value can't include a chunk assignable to a - /// single instance, it could be better used with utilization_target - /// instead. - /// [Input("singleInstanceAssignment")] public Input? SingleInstanceAssignment { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/RegionBackendServiceCdnPolicyNegativeCachingPolicyArgs.cs b/sdk/dotnet/Compute/Inputs/RegionBackendServiceCdnPolicyNegativeCachingPolicyArgs.cs index a0377132b0..d483d39780 100644 --- a/sdk/dotnet/Compute/Inputs/RegionBackendServiceCdnPolicyNegativeCachingPolicyArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RegionBackendServiceCdnPolicyNegativeCachingPolicyArgs.cs @@ -19,10 +19,6 @@ public sealed class RegionBackendServiceCdnPolicyNegativeCachingPolicyArgs : glo [Input("code")] public Input? Code { get; set; } - /// - /// The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - /// (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - /// [Input("ttl")] public Input? Ttl { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/RegionBackendServiceCdnPolicyNegativeCachingPolicyGetArgs.cs b/sdk/dotnet/Compute/Inputs/RegionBackendServiceCdnPolicyNegativeCachingPolicyGetArgs.cs index 36ca8f3c0d..e6bd6b9a5e 100644 --- a/sdk/dotnet/Compute/Inputs/RegionBackendServiceCdnPolicyNegativeCachingPolicyGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RegionBackendServiceCdnPolicyNegativeCachingPolicyGetArgs.cs @@ -19,10 +19,6 @@ public sealed class RegionBackendServiceCdnPolicyNegativeCachingPolicyGetArgs : [Input("code")] public Input? Code { get; set; } - /// - /// The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - /// (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - /// [Input("ttl")] public Input? Ttl { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/RegionBackendServiceCircuitBreakersArgs.cs b/sdk/dotnet/Compute/Inputs/RegionBackendServiceCircuitBreakersArgs.cs index e47e13db8f..18974a1fbe 100644 --- a/sdk/dotnet/Compute/Inputs/RegionBackendServiceCircuitBreakersArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RegionBackendServiceCircuitBreakersArgs.cs @@ -12,10 +12,6 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class RegionBackendServiceCircuitBreakersArgs : global::Pulumi.ResourceArgs { - /// - /// The timeout for new network connections to hosts. - /// Structure is documented below. - /// [Input("connectTimeout")] public Input? ConnectTimeout { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/RegionBackendServiceCircuitBreakersGetArgs.cs b/sdk/dotnet/Compute/Inputs/RegionBackendServiceCircuitBreakersGetArgs.cs index 86c9eff7fb..0bb874df24 100644 --- a/sdk/dotnet/Compute/Inputs/RegionBackendServiceCircuitBreakersGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RegionBackendServiceCircuitBreakersGetArgs.cs @@ -12,10 +12,6 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class RegionBackendServiceCircuitBreakersGetArgs : global::Pulumi.ResourceArgs { - /// - /// The timeout for new network connections to hosts. - /// Structure is documented below. - /// [Input("connectTimeout")] public Input? ConnectTimeout { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/RegionDiskSourceSnapshotEncryptionKeyArgs.cs b/sdk/dotnet/Compute/Inputs/RegionDiskSourceSnapshotEncryptionKeyArgs.cs index e185425e77..b8e1bab516 100644 --- a/sdk/dotnet/Compute/Inputs/RegionDiskSourceSnapshotEncryptionKeyArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RegionDiskSourceSnapshotEncryptionKeyArgs.cs @@ -12,9 +12,6 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class RegionDiskSourceSnapshotEncryptionKeyArgs : global::Pulumi.ResourceArgs { - /// - /// The name of the encryption key that is stored in Google Cloud KMS. - /// [Input("kmsKeyName")] public Input? KmsKeyName { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/RegionDiskSourceSnapshotEncryptionKeyGetArgs.cs b/sdk/dotnet/Compute/Inputs/RegionDiskSourceSnapshotEncryptionKeyGetArgs.cs index 9a44850acc..831bdbb8d3 100644 --- a/sdk/dotnet/Compute/Inputs/RegionDiskSourceSnapshotEncryptionKeyGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/RegionDiskSourceSnapshotEncryptionKeyGetArgs.cs @@ -12,9 +12,6 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class RegionDiskSourceSnapshotEncryptionKeyGetArgs : global::Pulumi.ResourceArgs { - /// - /// The name of the encryption key that is stored in Google Cloud KMS. - /// [Input("kmsKeyName")] public Input? KmsKeyName { get; set; } diff --git a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigArgs.cs b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigArgs.cs index 190286357f..7cc39cc1ec 100644 --- a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigArgs.cs +++ b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigArgs.cs @@ -12,6 +12,12 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class SecurityPolicyAdaptiveProtectionConfigArgs : global::Pulumi.ResourceArgs { + /// + /// ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + /// + [Input("autoDeployConfig")] + public Input? AutoDeployConfig { get; set; } + /// /// Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. /// diff --git a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs.cs b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs.cs new file mode 100644 index 0000000000..95b6ad4f8c --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs.cs @@ -0,0 +1,44 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Compute.Inputs +{ + + public sealed class SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + /// + [Input("confidenceThreshold")] + public Input? ConfidenceThreshold { get; set; } + + /// + /// Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + /// + [Input("expirationSec")] + public Input? ExpirationSec { get; set; } + + /// + /// Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + /// + [Input("impactedBaselineThreshold")] + public Input? ImpactedBaselineThreshold { get; set; } + + /// + /// Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + /// + [Input("loadThreshold")] + public Input? LoadThreshold { get; set; } + + public SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs() + { + } + public static new SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs Empty => new SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigGetArgs.cs b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigGetArgs.cs new file mode 100644 index 0000000000..97415e76a3 --- /dev/null +++ b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigGetArgs.cs @@ -0,0 +1,44 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Compute.Inputs +{ + + public sealed class SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + /// + [Input("confidenceThreshold")] + public Input? ConfidenceThreshold { get; set; } + + /// + /// Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + /// + [Input("expirationSec")] + public Input? ExpirationSec { get; set; } + + /// + /// Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + /// + [Input("impactedBaselineThreshold")] + public Input? ImpactedBaselineThreshold { get; set; } + + /// + /// Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + /// + [Input("loadThreshold")] + public Input? LoadThreshold { get; set; } + + public SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigGetArgs() + { + } + public static new SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigGetArgs Empty => new SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigGetArgs(); + } +} diff --git a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigGetArgs.cs b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigGetArgs.cs index bfa28339a6..4a98cf0dad 100644 --- a/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigGetArgs.cs +++ b/sdk/dotnet/Compute/Inputs/SecurityPolicyAdaptiveProtectionConfigGetArgs.cs @@ -12,6 +12,12 @@ namespace Pulumi.Gcp.Compute.Inputs public sealed class SecurityPolicyAdaptiveProtectionConfigGetArgs : global::Pulumi.ResourceArgs { + /// + /// ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + /// + [Input("autoDeployConfig")] + public Input? AutoDeployConfig { get; set; } + /// /// Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. /// diff --git a/sdk/dotnet/Compute/Instance.cs b/sdk/dotnet/Compute/Instance.cs index 27c7e14a2d..9ba9e6662c 100644 --- a/sdk/dotnet/Compute/Instance.cs +++ b/sdk/dotnet/Compute/Instance.cs @@ -114,8 +114,8 @@ public partial class Instance : global::Pulumi.CustomResource public Output AdvancedMachineFeatures { get; private set; } = null!; /// - /// If true, allows this prvider to stop the instance to update its properties. - /// If you try to update a property that requires stopping the instance without setting this field, the update will fail. + /// If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + /// stopping the instance without setting this field, the update will fail. /// [Output("allowStoppingForUpdate")] public Output AllowStoppingForUpdate { get; private set; } = null!; @@ -160,8 +160,7 @@ public partial class Instance : global::Pulumi.CustomResource public Output CurrentStatus { get; private set; } = null!; /// - /// Enable deletion protection on this instance. Defaults to false. - /// **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + /// Whether deletion protection is enabled on this instance. /// [Output("deletionProtection")] public Output DeletionProtection { get; private set; } = null!; @@ -187,8 +186,7 @@ public partial class Instance : global::Pulumi.CustomResource public Output EnableDisplay { get; private set; } = null!; /// - /// List of the type and count of accelerator cards attached to the instance. Structure documented below. - /// **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + /// List of the type and count of accelerator cards attached to the instance. /// [Output("guestAccelerators")] public Output> GuestAccelerators { get; private set; } = null!; @@ -241,16 +239,7 @@ public partial class Instance : global::Pulumi.CustomResource public Output MetadataFingerprint { get; private set; } = null!; /// - /// An alternative to using the - /// startup-script metadata key, except this one forces the instance to be recreated - /// (thus re-running the script) if it is changed. This replaces the startup-script - /// metadata key on the created instance and thus the two mechanisms are not - /// allowed to be used simultaneously. Users are free to use either mechanism - the - /// only distinction is that this separate attribute will cause a recreate on - /// modification. On import, `metadata_startup_script` will not be set - if you - /// choose to specify it you will see a diff immediately after import causing a - /// destroy/recreate operation. If importing an instance and specifying this value - /// is desired, you will need to modify your state file. + /// Metadata startup scripts made available within the instance. /// [Output("metadataStartupScript")] public Output MetadataStartupScript { get; private set; } = null!; @@ -414,8 +403,8 @@ public sealed class InstanceArgs : global::Pulumi.ResourceArgs public Input? AdvancedMachineFeatures { get; set; } /// - /// If true, allows this prvider to stop the instance to update its properties. - /// If you try to update a property that requires stopping the instance without setting this field, the update will fail. + /// If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + /// stopping the instance without setting this field, the update will fail. /// [Input("allowStoppingForUpdate")] public Input? AllowStoppingForUpdate { get; set; } @@ -454,8 +443,7 @@ public InputList AttachedDisks public Input? ConfidentialInstanceConfig { get; set; } /// - /// Enable deletion protection on this instance. Defaults to false. - /// **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + /// Whether deletion protection is enabled on this instance. /// [Input("deletionProtection")] public Input? DeletionProtection { get; set; } @@ -484,8 +472,7 @@ public InputList AttachedDisks private InputList? _guestAccelerators; /// - /// List of the type and count of accelerator cards attached to the instance. Structure documented below. - /// **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + /// List of the type and count of accelerator cards attached to the instance. /// public InputList GuestAccelerators { @@ -535,16 +522,7 @@ public InputMap Metadata } /// - /// An alternative to using the - /// startup-script metadata key, except this one forces the instance to be recreated - /// (thus re-running the script) if it is changed. This replaces the startup-script - /// metadata key on the created instance and thus the two mechanisms are not - /// allowed to be used simultaneously. Users are free to use either mechanism - the - /// only distinction is that this separate attribute will cause a recreate on - /// modification. On import, `metadata_startup_script` will not be set - if you - /// choose to specify it you will see a diff immediately after import causing a - /// destroy/recreate operation. If importing an instance and specifying this value - /// is desired, you will need to modify your state file. + /// Metadata startup scripts made available within the instance. /// [Input("metadataStartupScript")] public Input? MetadataStartupScript { get; set; } @@ -676,8 +654,8 @@ public sealed class InstanceState : global::Pulumi.ResourceArgs public Input? AdvancedMachineFeatures { get; set; } /// - /// If true, allows this prvider to stop the instance to update its properties. - /// If you try to update a property that requires stopping the instance without setting this field, the update will fail. + /// If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + /// stopping the instance without setting this field, the update will fail. /// [Input("allowStoppingForUpdate")] public Input? AllowStoppingForUpdate { get; set; } @@ -728,8 +706,7 @@ public InputList AttachedDisks public Input? CurrentStatus { get; set; } /// - /// Enable deletion protection on this instance. Defaults to false. - /// **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + /// Whether deletion protection is enabled on this instance. /// [Input("deletionProtection")] public Input? DeletionProtection { get; set; } @@ -758,8 +735,7 @@ public InputList AttachedDisks private InputList? _guestAccelerators; /// - /// List of the type and count of accelerator cards attached to the instance. Structure documented below. - /// **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + /// List of the type and count of accelerator cards attached to the instance. /// public InputList GuestAccelerators { @@ -827,16 +803,7 @@ public InputMap Metadata public Input? MetadataFingerprint { get; set; } /// - /// An alternative to using the - /// startup-script metadata key, except this one forces the instance to be recreated - /// (thus re-running the script) if it is changed. This replaces the startup-script - /// metadata key on the created instance and thus the two mechanisms are not - /// allowed to be used simultaneously. Users are free to use either mechanism - the - /// only distinction is that this separate attribute will cause a recreate on - /// modification. On import, `metadata_startup_script` will not be set - if you - /// choose to specify it you will see a diff immediately after import causing a - /// destroy/recreate operation. If importing an instance and specifying this value - /// is desired, you will need to modify your state file. + /// Metadata startup scripts made available within the instance. /// [Input("metadataStartupScript")] public Input? MetadataStartupScript { get; set; } diff --git a/sdk/dotnet/Compute/InstanceFromMachineImage.cs b/sdk/dotnet/Compute/InstanceFromMachineImage.cs index 15cf885841..8edfd7d6a6 100644 --- a/sdk/dotnet/Compute/InstanceFromMachineImage.cs +++ b/sdk/dotnet/Compute/InstanceFromMachineImage.cs @@ -10,15 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Manages a VM instance resource within GCE. For more information see - /// [the official documentation](https://cloud.google.com/compute/docs/instances) - /// and - /// [API](https://cloud.google.com/compute/docs/reference/latest/instances). - /// - /// This resource is specifically to create a compute instance from a given - /// `source_machine_image`. To create an instance without a machine image, use the - /// `gcp.compute.Instance` resource. - /// /// ## Example Usage /// /// ```csharp diff --git a/sdk/dotnet/Compute/InstanceFromTemplate.cs b/sdk/dotnet/Compute/InstanceFromTemplate.cs index e8fb35bbe3..8f669bd120 100644 --- a/sdk/dotnet/Compute/InstanceFromTemplate.cs +++ b/sdk/dotnet/Compute/InstanceFromTemplate.cs @@ -258,7 +258,8 @@ public partial class InstanceFromTemplate : global::Pulumi.CustomResource public Output Scheduling { get; private set; } = null!; /// - /// The scratch disks attached to the instance. + /// * `network_interface.alias_ip_range` + /// * `network_interface.access_config` /// [Output("scratchDisks")] public Output> ScratchDisks { get; private set; } = null!; @@ -538,7 +539,8 @@ public InputList NetworkInterfa private InputList? _scratchDisks; /// - /// The scratch disks attached to the instance. + /// * `network_interface.alias_ip_range` + /// * `network_interface.access_config` /// public InputList ScratchDisks { @@ -807,7 +809,8 @@ public InputList NetworkInte private InputList? _scratchDisks; /// - /// The scratch disks attached to the instance. + /// * `network_interface.alias_ip_range` + /// * `network_interface.access_config` /// public InputList ScratchDisks { diff --git a/sdk/dotnet/Compute/InstanceGroup.cs b/sdk/dotnet/Compute/InstanceGroup.cs index 5ab10f158e..7c91440c3f 100644 --- a/sdk/dotnet/Compute/InstanceGroup.cs +++ b/sdk/dotnet/Compute/InstanceGroup.cs @@ -10,65 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Creates a group of dissimilar Compute Engine virtual machine instances. - /// For more information, see [the official documentation](https://cloud.google.com/compute/docs/instance-groups/#unmanaged_instance_groups) - /// and [API](https://cloud.google.com/compute/docs/reference/latest/instanceGroups) - /// - /// ## Example Usage - /// ### Empty Instance Group - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var test = new Gcp.Compute.InstanceGroup("test", new() - /// { - /// Description = "Test instance group", - /// Zone = "us-central1-a", - /// Network = google_compute_network.Default.Id, - /// }); - /// - /// }); - /// ``` - /// ### Example Usage - With instances and named ports - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var webservers = new Gcp.Compute.InstanceGroup("webservers", new() - /// { - /// Description = "Test instance group", - /// Instances = new[] - /// { - /// google_compute_instance.Test.Id, - /// google_compute_instance.Test2.Id, - /// }, - /// NamedPorts = new[] - /// { - /// new Gcp.Compute.Inputs.InstanceGroupNamedPortArgs - /// { - /// Name = "http", - /// Port = 8080, - /// }, - /// new Gcp.Compute.Inputs.InstanceGroupNamedPortArgs - /// { - /// Name = "https", - /// Port = 8443, - /// }, - /// }, - /// Zone = "us-central1-a", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// Instance group can be imported using the `zone` and `name` with an optional `project`, e.g. diff --git a/sdk/dotnet/Compute/InstanceGroupManager.cs b/sdk/dotnet/Compute/InstanceGroupManager.cs index 316700a80b..d8bb9b3a1b 100644 --- a/sdk/dotnet/Compute/InstanceGroupManager.cs +++ b/sdk/dotnet/Compute/InstanceGroupManager.cs @@ -289,9 +289,8 @@ public partial class InstanceGroupManager : global::Pulumi.CustomResource public Output> Versions { get; private set; } = null!; /// - /// Whether to wait for all instances to be created/updated before - /// returning. Note that if this is set to true and the operation does not succeed, this provider will - /// continue trying until it times out. + /// Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + /// operation does not succeed, Terraform will continue trying until it times out. /// [Output("waitForInstances")] public Output WaitForInstances { get; private set; } = null!; @@ -511,9 +510,8 @@ public InputList Versions } /// - /// Whether to wait for all instances to be created/updated before - /// returning. Note that if this is set to true and the operation does not succeed, this provider will - /// continue trying until it times out. + /// Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + /// operation does not succeed, Terraform will continue trying until it times out. /// [Input("waitForInstances")] public Input? WaitForInstances { get; set; } @@ -728,9 +726,8 @@ public InputList Versions } /// - /// Whether to wait for all instances to be created/updated before - /// returning. Note that if this is set to true and the operation does not succeed, this provider will - /// continue trying until it times out. + /// Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + /// operation does not succeed, Terraform will continue trying until it times out. /// [Input("waitForInstances")] public Input? WaitForInstances { get; set; } diff --git a/sdk/dotnet/Compute/InstanceTemplate.cs b/sdk/dotnet/Compute/InstanceTemplate.cs index e2be1600fa..bb63aabf2a 100644 --- a/sdk/dotnet/Compute/InstanceTemplate.cs +++ b/sdk/dotnet/Compute/InstanceTemplate.cs @@ -10,184 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Manages a VM instance template resource within GCE. For more information see - /// [the official documentation](https://cloud.google.com/compute/docs/instance-templates) - /// and - /// [API](https://cloud.google.com/compute/docs/reference/latest/instanceTemplates). - /// - /// ## Example Usage - /// ### Automatic Envoy Deployment - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var @default = Gcp.Compute.GetDefaultServiceAccount.Invoke(); - /// - /// var myImage = Gcp.Compute.GetImage.Invoke(new() - /// { - /// Family = "debian-11", - /// Project = "debian-cloud", - /// }); - /// - /// var foobar = new Gcp.Compute.InstanceTemplate("foobar", new() - /// { - /// MachineType = "e2-medium", - /// CanIpForward = false, - /// Tags = new[] - /// { - /// "foo", - /// "bar", - /// }, - /// Disks = new[] - /// { - /// new Gcp.Compute.Inputs.InstanceTemplateDiskArgs - /// { - /// SourceImage = myImage.Apply(getImageResult => getImageResult.SelfLink), - /// AutoDelete = true, - /// Boot = true, - /// }, - /// }, - /// NetworkInterfaces = new[] - /// { - /// new Gcp.Compute.Inputs.InstanceTemplateNetworkInterfaceArgs - /// { - /// Network = "default", - /// }, - /// }, - /// Scheduling = new Gcp.Compute.Inputs.InstanceTemplateSchedulingArgs - /// { - /// Preemptible = false, - /// AutomaticRestart = true, - /// }, - /// Metadata = - /// { - /// { "gce-software-declaration", @"{ - /// ""softwareRecipes"": [{ - /// ""name"": ""install-gce-service-proxy-agent"", - /// ""desired_state"": ""INSTALLED"", - /// ""installSteps"": [{ - /// ""scriptRun"": { - /// ""script"": ""#! /bin/bash\nZONE=$(curl --silent http://metadata.google.internal/computeMetadata/v1/instance/zone -H Metadata-Flavor:Google | cut -d/ -f4 )\nexport SERVICE_PROXY_AGENT_DIRECTORY=$(mktemp -d)\nsudo gsutil cp gs://gce-service-proxy-""$ZONE""/service-proxy-agent/releases/service-proxy-agent-0.2.tgz ""$SERVICE_PROXY_AGENT_DIRECTORY"" || sudo gsutil cp gs://gce-service-proxy/service-proxy-agent/releases/service-proxy-agent-0.2.tgz ""$SERVICE_PROXY_AGENT_DIRECTORY""\nsudo tar -xzf ""$SERVICE_PROXY_AGENT_DIRECTORY""/service-proxy-agent-0.2.tgz -C ""$SERVICE_PROXY_AGENT_DIRECTORY""\n""$SERVICE_PROXY_AGENT_DIRECTORY""/service-proxy-agent/service-proxy-agent-bootstrap.sh"" - /// } - /// }] - /// }] - /// } - /// " }, - /// { "gce-service-proxy", @"{ - /// ""api-version"": ""0.2"", - /// ""proxy-spec"": { - /// ""proxy-port"": 15001, - /// ""network"": ""my-network"", - /// ""tracing"": ""ON"", - /// ""access-log"": ""/var/log/envoy/access.log"" - /// } - /// ""service"": { - /// ""serving-ports"": [80, 81] - /// }, - /// ""labels"": { - /// ""app_name"": ""bookserver_app"", - /// ""app_version"": ""STABLE"" - /// } - /// } - /// " }, - /// { "enable-guest-attributes", "true" }, - /// { "enable-osconfig", "true" }, - /// }, - /// ServiceAccount = new Gcp.Compute.Inputs.InstanceTemplateServiceAccountArgs - /// { - /// Email = @default.Apply(@default => @default.Apply(getDefaultServiceAccountResult => getDefaultServiceAccountResult.Email)), - /// Scopes = new[] - /// { - /// "cloud-platform", - /// }, - /// }, - /// Labels = - /// { - /// { "gce-service-proxy", "on" }, - /// }, - /// }); - /// - /// }); - /// ``` - /// ## Deploying the Latest Image - /// - /// A common way to use instance templates and managed instance groups is to deploy the - /// latest image in a family, usually the latest build of your application. There are two - /// ways to do this in the provider, and they have their pros and cons. The difference ends - /// up being in how "latest" is interpreted. You can either deploy the latest image available - /// when the provider runs, or you can have each instance check what the latest image is when - /// it's being created, either as part of a scaling event or being rebuilt by the instance - /// group manager. - /// - /// If you're not sure, we recommend deploying the latest image available when the provider runs, - /// because this means all the instances in your group will be based on the same image, always, - /// and means that no upgrades or changes to your instances happen outside of a `pulumi up`. - /// You can achieve this by using the `gcp.compute.Image` - /// data source, which will retrieve the latest image on every `pulumi apply`, and will update - /// the template to use that specific image: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var myImage = Gcp.Compute.GetImage.Invoke(new() - /// { - /// Family = "debian-11", - /// Project = "debian-cloud", - /// }); - /// - /// var instanceTemplate = new Gcp.Compute.InstanceTemplate("instanceTemplate", new() - /// { - /// NamePrefix = "instance-template-", - /// MachineType = "e2-medium", - /// Region = "us-central1", - /// Disks = new[] - /// { - /// new Gcp.Compute.Inputs.InstanceTemplateDiskArgs - /// { - /// SourceImage = myImage.Apply(getImageResult => getImageResult.SelfLink), - /// }, - /// }, - /// }); - /// - /// }); - /// ``` - /// - /// To have instances update to the latest on every scaling event or instance re-creation, - /// use the family as the image for the disk, and it will use GCP's default behavior, setting - /// the image for the template to the family: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var instanceTemplate = new Gcp.Compute.InstanceTemplate("instanceTemplate", new() - /// { - /// Disks = new[] - /// { - /// new Gcp.Compute.Inputs.InstanceTemplateDiskArgs - /// { - /// SourceImage = "debian-cloud/debian-11", - /// }, - /// }, - /// MachineType = "e2-medium", - /// NamePrefix = "instance-template-", - /// Region = "us-central1", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// Instance templates can be imported using any of these accepted formats @@ -305,8 +127,7 @@ public partial class InstanceTemplate : global::Pulumi.CustomResource public Output MinCpuPlatform { get; private set; } = null!; /// - /// The name of the instance template. If you leave - /// this blank, the provider will auto-generate a unique name. + /// The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. /// [Output("name")] public Output Name { get; private set; } = null!; @@ -560,8 +381,7 @@ public InputMap Metadata public Input? MinCpuPlatform { get; set; } /// - /// The name of the instance template. If you leave - /// this blank, the provider will auto-generate a unique name. + /// The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. /// [Input("name")] public Input? Name { get; set; } @@ -783,8 +603,7 @@ public InputMap Metadata public Input? MinCpuPlatform { get; set; } /// - /// The name of the instance template. If you leave - /// this blank, the provider will auto-generate a unique name. + /// The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. /// [Input("name")] public Input? Name { get; set; } diff --git a/sdk/dotnet/Compute/MachineImage.cs b/sdk/dotnet/Compute/MachineImage.cs index 4a18aada57..11094fc4f0 100644 --- a/sdk/dotnet/Compute/MachineImage.cs +++ b/sdk/dotnet/Compute/MachineImage.cs @@ -10,16 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Represents a Machine Image resource. Machine images store all the configuration, - /// metadata, permissions, and data from one or more disks required to create a - /// Virtual machine (VM) instance. - /// - /// To get more information about MachineImage, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/machineImages) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/compute/docs/machine-images) - /// /// ## Example Usage /// ### Machine Image Basic /// diff --git a/sdk/dotnet/Compute/MachineImageIamBinding.cs b/sdk/dotnet/Compute/MachineImageIamBinding.cs index c4a6643488..089569df6c 100644 --- a/sdk/dotnet/Compute/MachineImageIamBinding.cs +++ b/sdk/dotnet/Compute/MachineImageIamBinding.cs @@ -10,205 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - /// - /// * `gcp.compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - /// * `gcp.compute.MachineImageIamBinding`: 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 machineimage are preserved. - /// * `gcp.compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - /// - /// > **Note:** `gcp.compute.MachineImageIamPolicy` **cannot** be used in conjunction with `gcp.compute.MachineImageIamBinding` and `gcp.compute.MachineImageIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.compute.MachineImageIamBinding` resources **can be** used in conjunction with `gcp.compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - /// ## google\_compute\_machine\_image\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/compute.admin", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.Compute.MachineImageIamPolicy("policy", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/compute.admin", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.Compute.MachineImageIamPolicy("policy", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// ## google\_compute\_machine\_image\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.Compute.MachineImageIamBinding("binding", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// Role = "roles/compute.admin", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.Compute.MachineImageIamBinding("binding", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// Role = "roles/compute.admin", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Condition = new Gcp.Compute.Inputs.MachineImageIamBindingConditionArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// ## google\_compute\_machine\_image\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.Compute.MachineImageIamMember("member", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// Role = "roles/compute.admin", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.Compute.MachineImageIamMember("member", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// Role = "roles/compute.admin", - /// Member = "user:jane@example.com", - /// Condition = new Gcp.Compute.Inputs.MachineImageIamMemberConditionArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/Compute/MachineImageIamMember.cs b/sdk/dotnet/Compute/MachineImageIamMember.cs index c8b6929dca..5c6b67920e 100644 --- a/sdk/dotnet/Compute/MachineImageIamMember.cs +++ b/sdk/dotnet/Compute/MachineImageIamMember.cs @@ -10,205 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - /// - /// * `gcp.compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - /// * `gcp.compute.MachineImageIamBinding`: 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 machineimage are preserved. - /// * `gcp.compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - /// - /// > **Note:** `gcp.compute.MachineImageIamPolicy` **cannot** be used in conjunction with `gcp.compute.MachineImageIamBinding` and `gcp.compute.MachineImageIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.compute.MachineImageIamBinding` resources **can be** used in conjunction with `gcp.compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - /// ## google\_compute\_machine\_image\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/compute.admin", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.Compute.MachineImageIamPolicy("policy", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/compute.admin", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.Compute.MachineImageIamPolicy("policy", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// ## google\_compute\_machine\_image\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.Compute.MachineImageIamBinding("binding", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// Role = "roles/compute.admin", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.Compute.MachineImageIamBinding("binding", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// Role = "roles/compute.admin", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Condition = new Gcp.Compute.Inputs.MachineImageIamBindingConditionArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// ## google\_compute\_machine\_image\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.Compute.MachineImageIamMember("member", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// Role = "roles/compute.admin", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.Compute.MachineImageIamMember("member", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// Role = "roles/compute.admin", - /// Member = "user:jane@example.com", - /// Condition = new Gcp.Compute.Inputs.MachineImageIamMemberConditionArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/Compute/MachineImageIamPolicy.cs b/sdk/dotnet/Compute/MachineImageIamPolicy.cs index 814bbcce72..7f4b677f0c 100644 --- a/sdk/dotnet/Compute/MachineImageIamPolicy.cs +++ b/sdk/dotnet/Compute/MachineImageIamPolicy.cs @@ -10,205 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - /// - /// * `gcp.compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - /// * `gcp.compute.MachineImageIamBinding`: 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 machineimage are preserved. - /// * `gcp.compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - /// - /// > **Note:** `gcp.compute.MachineImageIamPolicy` **cannot** be used in conjunction with `gcp.compute.MachineImageIamBinding` and `gcp.compute.MachineImageIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.compute.MachineImageIamBinding` resources **can be** used in conjunction with `gcp.compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - /// ## google\_compute\_machine\_image\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/compute.admin", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.Compute.MachineImageIamPolicy("policy", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/compute.admin", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.Compute.MachineImageIamPolicy("policy", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// ## google\_compute\_machine\_image\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.Compute.MachineImageIamBinding("binding", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// Role = "roles/compute.admin", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.Compute.MachineImageIamBinding("binding", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// Role = "roles/compute.admin", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Condition = new Gcp.Compute.Inputs.MachineImageIamBindingConditionArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// ## google\_compute\_machine\_image\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.Compute.MachineImageIamMember("member", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// Role = "roles/compute.admin", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.Compute.MachineImageIamMember("member", new() - /// { - /// Project = google_compute_machine_image.Image.Project, - /// MachineImage = google_compute_machine_image.Image.Name, - /// Role = "roles/compute.admin", - /// Member = "user:jane@example.com", - /// Condition = new Gcp.Compute.Inputs.MachineImageIamMemberConditionArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/Compute/NodeGroup.cs b/sdk/dotnet/Compute/NodeGroup.cs index fc9fa814ef..3a8ff5891c 100644 --- a/sdk/dotnet/Compute/NodeGroup.cs +++ b/sdk/dotnet/Compute/NodeGroup.cs @@ -10,19 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Represents a NodeGroup resource to manage a group of sole-tenant nodes. - /// - /// To get more information about NodeGroup, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups) - /// * How-to Guides - /// * [Sole-Tenant Nodes](https://cloud.google.com/compute/docs/nodes/) - /// - /// > **Warning:** Due to limitations of the API, this provider cannot update the - /// number of nodes in a node group and changes to node group size either - /// through provider config or through external changes will cause - /// the provider to delete and recreate the node group. - /// /// ## Example Usage /// ### Node Group Basic /// @@ -41,8 +28,8 @@ namespace Pulumi.Gcp.Compute /// /// var nodes = new Gcp.Compute.NodeGroup("nodes", new() /// { - /// Zone = "us-central1-a", - /// Description = "example google_compute_node_group for the Google Provider", + /// Zone = "us-central1-f", + /// Description = "example google_compute_node_group for Terraform Google Provider", /// Size = 1, /// NodeTemplate = soletenant_tmpl.Id, /// }); @@ -66,8 +53,8 @@ namespace Pulumi.Gcp.Compute /// /// var nodes = new Gcp.Compute.NodeGroup("nodes", new() /// { - /// Zone = "us-central1-a", - /// Description = "example google_compute_node_group for Google Provider", + /// Zone = "us-central1-f", + /// Description = "example google_compute_node_group for Terraform Google Provider", /// MaintenancePolicy = "RESTART_IN_PLACE", /// MaintenanceWindow = new Gcp.Compute.Inputs.NodeGroupMaintenanceWindowArgs /// { @@ -85,6 +72,49 @@ namespace Pulumi.Gcp.Compute /// /// }); /// ``` + /// ### Node Group Share Settings + /// + /// ```csharp + /// using System.Collections.Generic; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var guestProject = new Gcp.Organizations.Project("guestProject", new() + /// { + /// ProjectId = "project-id", + /// OrgId = "123456789", + /// }); + /// + /// var soletenant_tmpl = new Gcp.Compute.NodeTemplate("soletenant-tmpl", new() + /// { + /// Region = "us-central1", + /// NodeType = "n1-node-96-624", + /// }); + /// + /// var nodes = new Gcp.Compute.NodeGroup("nodes", new() + /// { + /// Zone = "us-central1-f", + /// Description = "example google_compute_node_group for Terraform Google Provider", + /// Size = 1, + /// NodeTemplate = soletenant_tmpl.Id, + /// ShareSettings = new Gcp.Compute.Inputs.NodeGroupShareSettingsArgs + /// { + /// ShareType = "SPECIFIC_PROJECTS", + /// ProjectMaps = new[] + /// { + /// new Gcp.Compute.Inputs.NodeGroupShareSettingsProjectMapArgs + /// { + /// Id = guestProject.ProjectId, + /// ProjectId = guestProject.ProjectId, + /// }, + /// }, + /// }, + /// }); + /// + /// }); + /// ``` /// /// ## Import /// @@ -173,6 +203,13 @@ public partial class NodeGroup : global::Pulumi.CustomResource [Output("selfLink")] public Output SelfLink { get; private set; } = null!; + /// + /// Share settings for the node group. + /// Structure is documented below. + /// + [Output("shareSettings")] + public Output ShareSettings { get; private set; } = null!; + /// /// The total number of nodes in the node group. One of `initial_size` or `size` must be specified. /// @@ -283,6 +320,13 @@ public sealed class NodeGroupArgs : global::Pulumi.ResourceArgs [Input("project")] public Input? Project { get; set; } + /// + /// Share settings for the node group. + /// Structure is documented below. + /// + [Input("shareSettings")] + public Input? ShareSettings { get; set; } + /// /// The total number of nodes in the node group. One of `initial_size` or `size` must be specified. /// @@ -367,6 +411,13 @@ public sealed class NodeGroupState : global::Pulumi.ResourceArgs [Input("selfLink")] public Input? SelfLink { get; set; } + /// + /// Share settings for the node group. + /// Structure is documented below. + /// + [Input("shareSettings")] + public Input? ShareSettings { get; set; } + /// /// The total number of nodes in the node group. One of `initial_size` or `size` must be specified. /// diff --git a/sdk/dotnet/Compute/OrganizationSecurityPolicy.cs b/sdk/dotnet/Compute/OrganizationSecurityPolicy.cs index 18801d6fed..7accf9e4b9 100644 --- a/sdk/dotnet/Compute/OrganizationSecurityPolicy.cs +++ b/sdk/dotnet/Compute/OrganizationSecurityPolicy.cs @@ -10,35 +10,7 @@ namespace Pulumi.Gcp.Compute { /// - /// Organization security policies are used to control incoming/outgoing traffic. - /// - /// To get more information about OrganizationSecurityPolicy, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies) - /// * How-to Guides - /// * [Creating a firewall policy](https://cloud.google.com/vpc/docs/using-firewall-policies#create-policy) - /// /// ## Example Usage - /// ### Organization Security Policy Basic - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var policy = new Gcp.Compute.OrganizationSecurityPolicy("policy", new() - /// { - /// DisplayName = "tf-test", - /// Parent = "organizations/123456789", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Compute/OrganizationSecurityPolicyAssociation.cs b/sdk/dotnet/Compute/OrganizationSecurityPolicyAssociation.cs index 96aef86100..92ef20aa02 100644 --- a/sdk/dotnet/Compute/OrganizationSecurityPolicyAssociation.cs +++ b/sdk/dotnet/Compute/OrganizationSecurityPolicyAssociation.cs @@ -10,91 +10,7 @@ namespace Pulumi.Gcp.Compute { /// - /// An association for the OrganizationSecurityPolicy. - /// - /// To get more information about OrganizationSecurityPolicyAssociation, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addAssociation) - /// * How-to Guides - /// * [Associating a policy with the organization or folder](https://cloud.google.com/vpc/docs/using-firewall-policies#associate) - /// /// ## Example Usage - /// ### Organization Security Policy Association Basic - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var securityPolicyTarget = new Gcp.Organizations.Folder("securityPolicyTarget", new() - /// { - /// DisplayName = "tf-test-secpol", - /// Parent = "organizations/123456789", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// var policyOrganizationSecurityPolicy = new Gcp.Compute.OrganizationSecurityPolicy("policyOrganizationSecurityPolicy", new() - /// { - /// DisplayName = "tf-test", - /// Parent = securityPolicyTarget.Name, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// var policyOrganizationSecurityPolicyRule = new Gcp.Compute.OrganizationSecurityPolicyRule("policyOrganizationSecurityPolicyRule", new() - /// { - /// PolicyId = policyOrganizationSecurityPolicy.Id, - /// Action = "allow", - /// Direction = "INGRESS", - /// EnableLogging = true, - /// Match = new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchArgs - /// { - /// Config = new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchConfigArgs - /// { - /// SrcIpRanges = new[] - /// { - /// "192.168.0.0/16", - /// "10.0.0.0/8", - /// }, - /// Layer4Configs = new[] - /// { - /// new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs - /// { - /// IpProtocol = "tcp", - /// Ports = new[] - /// { - /// "22", - /// }, - /// }, - /// new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs - /// { - /// IpProtocol = "icmp", - /// }, - /// }, - /// }, - /// }, - /// Priority = 100, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// var policyOrganizationSecurityPolicyAssociation = new Gcp.Compute.OrganizationSecurityPolicyAssociation("policyOrganizationSecurityPolicyAssociation", new() - /// { - /// AttachmentId = policyOrganizationSecurityPolicy.Parent, - /// PolicyId = policyOrganizationSecurityPolicy.Id, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Compute/OrganizationSecurityPolicyRule.cs b/sdk/dotnet/Compute/OrganizationSecurityPolicyRule.cs index d09129d181..c3983130f1 100644 --- a/sdk/dotnet/Compute/OrganizationSecurityPolicyRule.cs +++ b/sdk/dotnet/Compute/OrganizationSecurityPolicyRule.cs @@ -10,73 +10,7 @@ namespace Pulumi.Gcp.Compute { /// - /// A rule for the OrganizationSecurityPolicy. - /// - /// To get more information about OrganizationSecurityPolicyRule, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addRule) - /// * How-to Guides - /// * [Creating firewall rules](https://cloud.google.com/vpc/docs/using-firewall-policies#create-rules) - /// /// ## Example Usage - /// ### Organization Security Policy Rule Basic - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var policyOrganizationSecurityPolicy = new Gcp.Compute.OrganizationSecurityPolicy("policyOrganizationSecurityPolicy", new() - /// { - /// DisplayName = "tf-test", - /// Parent = "organizations/123456789", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// var policyOrganizationSecurityPolicyRule = new Gcp.Compute.OrganizationSecurityPolicyRule("policyOrganizationSecurityPolicyRule", new() - /// { - /// PolicyId = policyOrganizationSecurityPolicy.Id, - /// Action = "allow", - /// Direction = "INGRESS", - /// EnableLogging = true, - /// Match = new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchArgs - /// { - /// Config = new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchConfigArgs - /// { - /// SrcIpRanges = new[] - /// { - /// "192.168.0.0/16", - /// "10.0.0.0/8", - /// }, - /// Layer4Configs = new[] - /// { - /// new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs - /// { - /// IpProtocol = "tcp", - /// Ports = new[] - /// { - /// "22", - /// }, - /// }, - /// new Gcp.Compute.Inputs.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs - /// { - /// IpProtocol = "icmp", - /// }, - /// }, - /// }, - /// }, - /// Priority = 100, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Compute/Outputs/AutoscalarAutoscalingPolicy.cs b/sdk/dotnet/Compute/Outputs/AutoscalarAutoscalingPolicy.cs index a146bb914c..8b401e634b 100644 --- a/sdk/dotnet/Compute/Outputs/AutoscalarAutoscalingPolicy.cs +++ b/sdk/dotnet/Compute/Outputs/AutoscalarAutoscalingPolicy.cs @@ -62,11 +62,6 @@ public sealed class AutoscalarAutoscalingPolicy /// Possible values are `OFF`, `ONLY_UP`, and `ON`. /// public readonly string? Mode; - /// - /// Defines scale down controls to reduce the risk of response latency - /// and outages due to abrupt scale-in events - /// Structure is documented below. - /// public readonly Outputs.AutoscalarAutoscalingPolicyScaleDownControl? ScaleDownControl; /// /// Defines scale in controls to reduce the risk of response latency diff --git a/sdk/dotnet/Compute/Outputs/AutoscalarAutoscalingPolicyMetric.cs b/sdk/dotnet/Compute/Outputs/AutoscalarAutoscalingPolicyMetric.cs index b30f8abcb4..339b7a6f06 100644 --- a/sdk/dotnet/Compute/Outputs/AutoscalarAutoscalingPolicyMetric.cs +++ b/sdk/dotnet/Compute/Outputs/AutoscalarAutoscalingPolicyMetric.cs @@ -13,35 +13,6 @@ namespace Pulumi.Gcp.Compute.Outputs [OutputType] public sealed class AutoscalarAutoscalingPolicyMetric { - /// - /// A filter string to be used as the filter string for - /// a Stackdriver Monitoring TimeSeries.list API call. - /// This filter is used to select a specific TimeSeries for - /// the purpose of autoscaling and to determine whether the metric - /// is exporting per-instance or per-group data. - /// You can only use the AND operator for joining selectors. - /// You can only use direct equality comparison operator (=) without - /// any functions for each selector. - /// You can specify the metric in both the filter string and in the - /// metric field. However, if specified in both places, the metric must - /// be identical. - /// The monitored resource type determines what kind of values are - /// expected for the metric. If it is a gce_instance, the autoscaler - /// expects the metric to include a separate TimeSeries for each - /// instance in a group. In such a case, you cannot filter on resource - /// labels. - /// If the resource type is any other value, the autoscaler expects - /// this metric to contain values that apply to the entire autoscaled - /// instance group and resource label filtering can be performed to - /// point autoscaler at the correct TimeSeries to scale upon. - /// This is called a per-group metric for the purpose of autoscaling. - /// If not specified, the type defaults to gce_instance. - /// You should provide a filter that is selective enough to pick just - /// one TimeSeries for the autoscaled group or for each of the instances - /// (if you are using gce_instance resource type). If multiple - /// TimeSeries are returned upon the query execution, the autoscaler - /// will sum their respective values to obtain its scaling value. - /// public readonly string? Filter; /// /// The identifier (type) of the Stackdriver Monitoring metric. @@ -49,22 +20,6 @@ public sealed class AutoscalarAutoscalingPolicyMetric /// The metric must have a value type of INT64 or DOUBLE. /// public readonly string Name; - /// - /// If scaling is based on a per-group metric value that represents the - /// total amount of work to be done or resource usage, set this value to - /// an amount assigned for a single instance of the scaled group. - /// The autoscaler will keep the number of instances proportional to the - /// value of this metric, the metric itself should not change value due - /// to group resizing. - /// For example, a good metric to use with the target is - /// `pubsub.googleapis.com/subscription/num_undelivered_messages` - /// or a custom metric exporting the total number of requests coming to - /// your instances. - /// A bad example would be a metric exporting an average or median - /// latency, since this value can't include a chunk assignable to a - /// single instance, it could be better used with utilization_target - /// instead. - /// public readonly double? SingleInstanceAssignment; /// /// The target value of the metric that autoscaler should diff --git a/sdk/dotnet/Compute/Outputs/AutoscalerAutoscalingPolicy.cs b/sdk/dotnet/Compute/Outputs/AutoscalerAutoscalingPolicy.cs index 18d765a137..2bc3de33fb 100644 --- a/sdk/dotnet/Compute/Outputs/AutoscalerAutoscalingPolicy.cs +++ b/sdk/dotnet/Compute/Outputs/AutoscalerAutoscalingPolicy.cs @@ -62,11 +62,6 @@ public sealed class AutoscalerAutoscalingPolicy /// Possible values are `OFF`, `ONLY_UP`, and `ON`. /// public readonly string? Mode; - /// - /// Defines scale down controls to reduce the risk of response latency - /// and outages due to abrupt scale-in events - /// Structure is documented below. - /// public readonly Outputs.AutoscalerAutoscalingPolicyScaleDownControl? ScaleDownControl; /// /// Defines scale in controls to reduce the risk of response latency diff --git a/sdk/dotnet/Compute/Outputs/AutoscalerAutoscalingPolicyMetric.cs b/sdk/dotnet/Compute/Outputs/AutoscalerAutoscalingPolicyMetric.cs index 3691e7270f..02f1b409f3 100644 --- a/sdk/dotnet/Compute/Outputs/AutoscalerAutoscalingPolicyMetric.cs +++ b/sdk/dotnet/Compute/Outputs/AutoscalerAutoscalingPolicyMetric.cs @@ -13,35 +13,6 @@ namespace Pulumi.Gcp.Compute.Outputs [OutputType] public sealed class AutoscalerAutoscalingPolicyMetric { - /// - /// A filter string to be used as the filter string for - /// a Stackdriver Monitoring TimeSeries.list API call. - /// This filter is used to select a specific TimeSeries for - /// the purpose of autoscaling and to determine whether the metric - /// is exporting per-instance or per-group data. - /// You can only use the AND operator for joining selectors. - /// You can only use direct equality comparison operator (=) without - /// any functions for each selector. - /// You can specify the metric in both the filter string and in the - /// metric field. However, if specified in both places, the metric must - /// be identical. - /// The monitored resource type determines what kind of values are - /// expected for the metric. If it is a gce_instance, the autoscaler - /// expects the metric to include a separate TimeSeries for each - /// instance in a group. In such a case, you cannot filter on resource - /// labels. - /// If the resource type is any other value, the autoscaler expects - /// this metric to contain values that apply to the entire autoscaled - /// instance group and resource label filtering can be performed to - /// point autoscaler at the correct TimeSeries to scale upon. - /// This is called a per-group metric for the purpose of autoscaling. - /// If not specified, the type defaults to gce_instance. - /// You should provide a filter that is selective enough to pick just - /// one TimeSeries for the autoscaled group or for each of the instances - /// (if you are using gce_instance resource type). If multiple - /// TimeSeries are returned upon the query execution, the autoscaler - /// will sum their respective values to obtain its scaling value. - /// public readonly string? Filter; /// /// The identifier (type) of the Stackdriver Monitoring metric. @@ -49,22 +20,6 @@ public sealed class AutoscalerAutoscalingPolicyMetric /// The metric must have a value type of INT64 or DOUBLE. /// public readonly string Name; - /// - /// If scaling is based on a per-group metric value that represents the - /// total amount of work to be done or resource usage, set this value to - /// an amount assigned for a single instance of the scaled group. - /// The autoscaler will keep the number of instances proportional to the - /// value of this metric, the metric itself should not change value due - /// to group resizing. - /// For example, a good metric to use with the target is - /// `pubsub.googleapis.com/subscription/num_undelivered_messages` - /// or a custom metric exporting the total number of requests coming to - /// your instances. - /// A bad example would be a metric exporting an average or median - /// latency, since this value can't include a chunk assignable to a - /// single instance, it could be better used with utilization_target - /// instead. - /// public readonly double? SingleInstanceAssignment; /// /// The target value of the metric that autoscaler should diff --git a/sdk/dotnet/Compute/Outputs/BackendServiceCircuitBreakers.cs b/sdk/dotnet/Compute/Outputs/BackendServiceCircuitBreakers.cs index 9bdc1c3513..cba22847c9 100644 --- a/sdk/dotnet/Compute/Outputs/BackendServiceCircuitBreakers.cs +++ b/sdk/dotnet/Compute/Outputs/BackendServiceCircuitBreakers.cs @@ -13,10 +13,6 @@ namespace Pulumi.Gcp.Compute.Outputs [OutputType] public sealed class BackendServiceCircuitBreakers { - /// - /// The timeout for new network connections to hosts. - /// Structure is documented below. - /// public readonly Outputs.BackendServiceCircuitBreakersConnectTimeout? ConnectTimeout; /// /// The maximum number of connections to the backend cluster. diff --git a/sdk/dotnet/Compute/Outputs/BackendServiceLocalityLbPolicy.cs b/sdk/dotnet/Compute/Outputs/BackendServiceLocalityLbPolicy.cs new file mode 100644 index 0000000000..4087728aef --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/BackendServiceLocalityLbPolicy.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.Compute.Outputs +{ + + [OutputType] + public sealed class BackendServiceLocalityLbPolicy + { + /// + /// The configuration for a custom policy implemented by the user and + /// deployed with the client. + /// Structure is documented below. + /// + public readonly Outputs.BackendServiceLocalityLbPolicyCustomPolicy? CustomPolicy; + /// + /// The configuration for a built-in load balancing policy. + /// Structure is documented below. + /// + public readonly Outputs.BackendServiceLocalityLbPolicyPolicy? Policy; + + [OutputConstructor] + private BackendServiceLocalityLbPolicy( + Outputs.BackendServiceLocalityLbPolicyCustomPolicy? customPolicy, + + Outputs.BackendServiceLocalityLbPolicyPolicy? policy) + { + CustomPolicy = customPolicy; + Policy = policy; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/BackendServiceLocalityLbPolicyCustomPolicy.cs b/sdk/dotnet/Compute/Outputs/BackendServiceLocalityLbPolicyCustomPolicy.cs new file mode 100644 index 0000000000..3d731d3b65 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/BackendServiceLocalityLbPolicyCustomPolicy.cs @@ -0,0 +1,42 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Compute.Outputs +{ + + [OutputType] + public sealed class BackendServiceLocalityLbPolicyCustomPolicy + { + /// + /// An optional, arbitrary JSON object with configuration data, understood + /// by a locally installed custom policy implementation. + /// + public readonly string? Data; + /// + /// Identifies the custom policy. + /// The value should match the type the custom implementation is registered + /// with on the gRPC clients. It should follow protocol buffer + /// message naming conventions and include the full path (e.g. + /// myorg.CustomLbPolicy). The maximum length is 256 characters. + /// Note that specifying the same custom policy more than once for a + /// backend is not a valid configuration and will be rejected. + /// + public readonly string Name; + + [OutputConstructor] + private BackendServiceLocalityLbPolicyCustomPolicy( + string? data, + + string name) + { + Data = data; + Name = name; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/BackendServiceLocalityLbPolicyPolicy.cs b/sdk/dotnet/Compute/Outputs/BackendServiceLocalityLbPolicyPolicy.cs new file mode 100644 index 0000000000..03a89d1665 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/BackendServiceLocalityLbPolicyPolicy.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.Compute.Outputs +{ + + [OutputType] + public sealed class BackendServiceLocalityLbPolicyPolicy + { + /// + /// The name of a locality load balancer policy to be used. The value + /// should be one of the predefined ones as supported by localityLbPolicy, + /// although at the moment only ROUND_ROBIN is supported. + /// This field should only be populated when the customPolicy field is not + /// used. + /// Note that specifying the same policy more than once for a backend is + /// not a valid configuration and will be rejected. + /// The possible values are: + /// + public readonly string Name; + + [OutputConstructor] + private BackendServiceLocalityLbPolicyPolicy(string name) + { + Name = name; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetBackendServiceLocalityLbPolicyCustomPolicyResult.cs b/sdk/dotnet/Compute/Outputs/GetBackendServiceLocalityLbPolicyCustomPolicyResult.cs new file mode 100644 index 0000000000..f43c929f98 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetBackendServiceLocalityLbPolicyCustomPolicyResult.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.Compute.Outputs +{ + + [OutputType] + public sealed class GetBackendServiceLocalityLbPolicyCustomPolicyResult + { + public readonly string Data; + /// + /// The name of the Backend Service. + /// + public readonly string Name; + + [OutputConstructor] + private GetBackendServiceLocalityLbPolicyCustomPolicyResult( + string data, + + string name) + { + Data = data; + Name = name; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetBackendServiceLocalityLbPolicyPolicyResult.cs b/sdk/dotnet/Compute/Outputs/GetBackendServiceLocalityLbPolicyPolicyResult.cs new file mode 100644 index 0000000000..0659b744f6 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetBackendServiceLocalityLbPolicyPolicyResult.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.Compute.Outputs +{ + + [OutputType] + public sealed class GetBackendServiceLocalityLbPolicyPolicyResult + { + /// + /// The name of the Backend Service. + /// + public readonly string Name; + + [OutputConstructor] + private GetBackendServiceLocalityLbPolicyPolicyResult(string name) + { + Name = name; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetBackendServiceLocalityLbPolicyResult.cs b/sdk/dotnet/Compute/Outputs/GetBackendServiceLocalityLbPolicyResult.cs new file mode 100644 index 0000000000..cc021984c4 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/GetBackendServiceLocalityLbPolicyResult.cs @@ -0,0 +1,29 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Compute.Outputs +{ + + [OutputType] + public sealed class GetBackendServiceLocalityLbPolicyResult + { + public readonly ImmutableArray CustomPolicies; + public readonly ImmutableArray Policies; + + [OutputConstructor] + private GetBackendServiceLocalityLbPolicyResult( + ImmutableArray customPolicies, + + ImmutableArray policies) + { + CustomPolicies = customPolicies; + Policies = policies; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/GetInstanceTemplateNetworkInterfaceResult.cs b/sdk/dotnet/Compute/Outputs/GetInstanceTemplateNetworkInterfaceResult.cs index fbf87fb10f..2f8a4a44a0 100644 --- a/sdk/dotnet/Compute/Outputs/GetInstanceTemplateNetworkInterfaceResult.cs +++ b/sdk/dotnet/Compute/Outputs/GetInstanceTemplateNetworkInterfaceResult.cs @@ -13,14 +13,6 @@ namespace Pulumi.Gcp.Compute.Outputs [OutputType] public sealed class GetInstanceTemplateNetworkInterfaceResult { - /// - /// Access configurations, i.e. IPs via which this - /// instance can be accessed via the Internet. Omit to ensure that the instance - /// is not accessible from the Internet (this means that ssh provisioners will - /// not work unless you are running the prvovider can send traffic to the instance's - /// network (e.g. via tunnel or because it is running on another cloud instance - /// on that network). This block can be repeated multiple times. Structure documented below. - /// public readonly ImmutableArray AccessConfigs; /// /// An diff --git a/sdk/dotnet/Compute/Outputs/InstanceAttachedDisk.cs b/sdk/dotnet/Compute/Outputs/InstanceAttachedDisk.cs index d05617bef8..24638ddcaa 100644 --- a/sdk/dotnet/Compute/Outputs/InstanceAttachedDisk.cs +++ b/sdk/dotnet/Compute/Outputs/InstanceAttachedDisk.cs @@ -20,7 +20,7 @@ public sealed class InstanceAttachedDisk public readonly string? DeviceName; /// /// A 256-bit [customer-supplied encryption key] - /// (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + /// (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), /// encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) /// to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. /// diff --git a/sdk/dotnet/Compute/Outputs/InstanceBootDisk.cs b/sdk/dotnet/Compute/Outputs/InstanceBootDisk.cs index b443db83be..b52466bbfc 100644 --- a/sdk/dotnet/Compute/Outputs/InstanceBootDisk.cs +++ b/sdk/dotnet/Compute/Outputs/InstanceBootDisk.cs @@ -25,7 +25,7 @@ public sealed class InstanceBootDisk public readonly string? DeviceName; /// /// A 256-bit [customer-supplied encryption key] - /// (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + /// (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), /// encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) /// to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` /// may be set. diff --git a/sdk/dotnet/Compute/Outputs/InstanceNetworkInterface.cs b/sdk/dotnet/Compute/Outputs/InstanceNetworkInterface.cs index 9f46e26b47..e6dc9cc2e9 100644 --- a/sdk/dotnet/Compute/Outputs/InstanceNetworkInterface.cs +++ b/sdk/dotnet/Compute/Outputs/InstanceNetworkInterface.cs @@ -13,14 +13,6 @@ namespace Pulumi.Gcp.Compute.Outputs [OutputType] public sealed class InstanceNetworkInterface { - /// - /// Access configurations, i.e. IPs via which this - /// instance can be accessed via the Internet. Omit to ensure that the instance - /// is not accessible from the Internet. If omitted, ssh will not - /// work unless this provider can send traffic to the instance's network (e.g. via - /// tunnel or because it is running on another cloud instance on that network). - /// This block can be repeated multiple times. Structure documented below. - /// public readonly ImmutableArray AccessConfigs; /// /// An diff --git a/sdk/dotnet/Compute/Outputs/InstanceScheduling.cs b/sdk/dotnet/Compute/Outputs/InstanceScheduling.cs index 2976d55b2a..3bfd0d0e00 100644 --- a/sdk/dotnet/Compute/Outputs/InstanceScheduling.cs +++ b/sdk/dotnet/Compute/Outputs/InstanceScheduling.cs @@ -49,7 +49,7 @@ public sealed class InstanceScheduling /// public readonly bool? Preemptible; /// - /// Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, + /// Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, /// `preemptible` should be `true` and `auto_restart` should be /// `false`. For more info about /// `SPOT`, read [here](https://cloud.google.com/compute/docs/instances/spot) diff --git a/sdk/dotnet/Compute/Outputs/InstanceTemplateNetworkInterface.cs b/sdk/dotnet/Compute/Outputs/InstanceTemplateNetworkInterface.cs index 677028bd4c..7d7eb23534 100644 --- a/sdk/dotnet/Compute/Outputs/InstanceTemplateNetworkInterface.cs +++ b/sdk/dotnet/Compute/Outputs/InstanceTemplateNetworkInterface.cs @@ -13,14 +13,6 @@ namespace Pulumi.Gcp.Compute.Outputs [OutputType] public sealed class InstanceTemplateNetworkInterface { - /// - /// Access configurations, i.e. IPs via which this - /// instance can be accessed via the Internet. Omit to ensure that the instance - /// is not accessible from the Internet (this means that ssh provisioners will - /// not work unless you can send traffic to the instance's - /// network (e.g. via tunnel or because it is running on another cloud instance - /// on that network). This block can be repeated multiple times. Structure documented below. - /// public readonly ImmutableArray AccessConfigs; /// /// An @@ -35,10 +27,6 @@ public sealed class InstanceTemplateNetworkInterface /// public readonly ImmutableArray Ipv6AccessConfigs; public readonly string? Ipv6AccessType; - /// - /// The name of the instance template. If you leave - /// this blank, the provider will auto-generate a unique name. - /// public readonly string? Name; /// /// The name or self_link of the network to attach this interface to. diff --git a/sdk/dotnet/Compute/Outputs/InstanceTemplateScheduling.cs b/sdk/dotnet/Compute/Outputs/InstanceTemplateScheduling.cs index e60a46f3fe..57788f31b4 100644 --- a/sdk/dotnet/Compute/Outputs/InstanceTemplateScheduling.cs +++ b/sdk/dotnet/Compute/Outputs/InstanceTemplateScheduling.cs @@ -23,9 +23,6 @@ public sealed class InstanceTemplateScheduling /// Describe the type of termination action for `SPOT` VM. Can be `STOP` or `DELETE`. Read more on [here](https://cloud.google.com/compute/docs/instances/create-use-spot) /// public readonly string? InstanceTerminationAction; - /// - /// Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below. - /// public readonly Outputs.InstanceTemplateSchedulingMaxRunDuration? MaxRunDuration; public readonly int? MinNodeCpus; /// diff --git a/sdk/dotnet/Compute/Outputs/NodeGroupShareSettings.cs b/sdk/dotnet/Compute/Outputs/NodeGroupShareSettings.cs new file mode 100644 index 0000000000..645b0a1bdf --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/NodeGroupShareSettings.cs @@ -0,0 +1,37 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Compute.Outputs +{ + + [OutputType] + public sealed class NodeGroupShareSettings + { + /// + /// A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + /// Structure is documented below. + /// + public readonly ImmutableArray ProjectMaps; + /// + /// Node group sharing type. + /// Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + /// + public readonly string ShareType; + + [OutputConstructor] + private NodeGroupShareSettings( + ImmutableArray projectMaps, + + string shareType) + { + ProjectMaps = projectMaps; + ShareType = shareType; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/NodeGroupShareSettingsProjectMap.cs b/sdk/dotnet/Compute/Outputs/NodeGroupShareSettingsProjectMap.cs new file mode 100644 index 0000000000..6109eafa10 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/NodeGroupShareSettingsProjectMap.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.Compute.Outputs +{ + + [OutputType] + public sealed class NodeGroupShareSettingsProjectMap + { + /// + /// The identifier for this object. Format specified above. + /// + public readonly string Id; + /// + /// The project id/number should be the same as the key of this project config in the project map. + /// + public readonly string ProjectId; + + [OutputConstructor] + private NodeGroupShareSettingsProjectMap( + string id, + + string projectId) + { + Id = id; + ProjectId = projectId; + } + } +} diff --git a/sdk/dotnet/Compute/Outputs/RegionAutoscalerAutoscalingPolicy.cs b/sdk/dotnet/Compute/Outputs/RegionAutoscalerAutoscalingPolicy.cs index fc4fd8d50f..43e9874ff6 100644 --- a/sdk/dotnet/Compute/Outputs/RegionAutoscalerAutoscalingPolicy.cs +++ b/sdk/dotnet/Compute/Outputs/RegionAutoscalerAutoscalingPolicy.cs @@ -62,11 +62,6 @@ public sealed class RegionAutoscalerAutoscalingPolicy /// Possible values are `OFF`, `ONLY_UP`, and `ON`. /// public readonly string? Mode; - /// - /// Defines scale down controls to reduce the risk of response latency - /// and outages due to abrupt scale-in events - /// Structure is documented below. - /// public readonly Outputs.RegionAutoscalerAutoscalingPolicyScaleDownControl? ScaleDownControl; /// /// Defines scale in controls to reduce the risk of response latency diff --git a/sdk/dotnet/Compute/Outputs/RegionAutoscalerAutoscalingPolicyMetric.cs b/sdk/dotnet/Compute/Outputs/RegionAutoscalerAutoscalingPolicyMetric.cs index b74cc7bb73..d2a08ec8d9 100644 --- a/sdk/dotnet/Compute/Outputs/RegionAutoscalerAutoscalingPolicyMetric.cs +++ b/sdk/dotnet/Compute/Outputs/RegionAutoscalerAutoscalingPolicyMetric.cs @@ -13,35 +13,6 @@ namespace Pulumi.Gcp.Compute.Outputs [OutputType] public sealed class RegionAutoscalerAutoscalingPolicyMetric { - /// - /// A filter string to be used as the filter string for - /// a Stackdriver Monitoring TimeSeries.list API call. - /// This filter is used to select a specific TimeSeries for - /// the purpose of autoscaling and to determine whether the metric - /// is exporting per-instance or per-group data. - /// You can only use the AND operator for joining selectors. - /// You can only use direct equality comparison operator (=) without - /// any functions for each selector. - /// You can specify the metric in both the filter string and in the - /// metric field. However, if specified in both places, the metric must - /// be identical. - /// The monitored resource type determines what kind of values are - /// expected for the metric. If it is a gce_instance, the autoscaler - /// expects the metric to include a separate TimeSeries for each - /// instance in a group. In such a case, you cannot filter on resource - /// labels. - /// If the resource type is any other value, the autoscaler expects - /// this metric to contain values that apply to the entire autoscaled - /// instance group and resource label filtering can be performed to - /// point autoscaler at the correct TimeSeries to scale upon. - /// This is called a per-group metric for the purpose of autoscaling. - /// If not specified, the type defaults to gce_instance. - /// You should provide a filter that is selective enough to pick just - /// one TimeSeries for the autoscaled group or for each of the instances - /// (if you are using gce_instance resource type). If multiple - /// TimeSeries are returned upon the query execution, the autoscaler - /// will sum their respective values to obtain its scaling value. - /// public readonly string? Filter; /// /// The identifier (type) of the Stackdriver Monitoring metric. @@ -49,22 +20,6 @@ public sealed class RegionAutoscalerAutoscalingPolicyMetric /// The metric must have a value type of INT64 or DOUBLE. /// public readonly string Name; - /// - /// If scaling is based on a per-group metric value that represents the - /// total amount of work to be done or resource usage, set this value to - /// an amount assigned for a single instance of the scaled group. - /// The autoscaler will keep the number of instances proportional to the - /// value of this metric, the metric itself should not change value due - /// to group resizing. - /// For example, a good metric to use with the target is - /// `pubsub.googleapis.com/subscription/num_undelivered_messages` - /// or a custom metric exporting the total number of requests coming to - /// your instances. - /// A bad example would be a metric exporting an average or median - /// latency, since this value can't include a chunk assignable to a - /// single instance, it could be better used with utilization_target - /// instead. - /// public readonly double? SingleInstanceAssignment; /// /// The target value of the metric that autoscaler should diff --git a/sdk/dotnet/Compute/Outputs/RegionBackendServiceCdnPolicyNegativeCachingPolicy.cs b/sdk/dotnet/Compute/Outputs/RegionBackendServiceCdnPolicyNegativeCachingPolicy.cs index 6e38e3de56..2bff511e27 100644 --- a/sdk/dotnet/Compute/Outputs/RegionBackendServiceCdnPolicyNegativeCachingPolicy.cs +++ b/sdk/dotnet/Compute/Outputs/RegionBackendServiceCdnPolicyNegativeCachingPolicy.cs @@ -18,10 +18,6 @@ public sealed class RegionBackendServiceCdnPolicyNegativeCachingPolicy /// can be specified as values, and you cannot specify a status code more than once. /// public readonly int? Code; - /// - /// The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - /// (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - /// public readonly int? Ttl; [OutputConstructor] diff --git a/sdk/dotnet/Compute/Outputs/RegionBackendServiceCircuitBreakers.cs b/sdk/dotnet/Compute/Outputs/RegionBackendServiceCircuitBreakers.cs index 74880064e2..9eda8c62cb 100644 --- a/sdk/dotnet/Compute/Outputs/RegionBackendServiceCircuitBreakers.cs +++ b/sdk/dotnet/Compute/Outputs/RegionBackendServiceCircuitBreakers.cs @@ -13,10 +13,6 @@ namespace Pulumi.Gcp.Compute.Outputs [OutputType] public sealed class RegionBackendServiceCircuitBreakers { - /// - /// The timeout for new network connections to hosts. - /// Structure is documented below. - /// public readonly Outputs.RegionBackendServiceCircuitBreakersConnectTimeout? ConnectTimeout; /// /// The maximum number of connections to the backend cluster. diff --git a/sdk/dotnet/Compute/Outputs/RegionDiskSourceSnapshotEncryptionKey.cs b/sdk/dotnet/Compute/Outputs/RegionDiskSourceSnapshotEncryptionKey.cs index dd0c7e059d..590984431f 100644 --- a/sdk/dotnet/Compute/Outputs/RegionDiskSourceSnapshotEncryptionKey.cs +++ b/sdk/dotnet/Compute/Outputs/RegionDiskSourceSnapshotEncryptionKey.cs @@ -13,9 +13,6 @@ namespace Pulumi.Gcp.Compute.Outputs [OutputType] public sealed class RegionDiskSourceSnapshotEncryptionKey { - /// - /// The name of the encryption key that is stored in Google Cloud KMS. - /// public readonly string? KmsKeyName; /// /// Specifies a 256-bit customer-supplied encryption key, encoded in diff --git a/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfig.cs b/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfig.cs index 3f0f3f4b15..3ba1c92892 100644 --- a/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfig.cs +++ b/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfig.cs @@ -13,14 +13,22 @@ namespace Pulumi.Gcp.Compute.Outputs [OutputType] public sealed class SecurityPolicyAdaptiveProtectionConfig { + /// + /// ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + /// + public readonly Outputs.SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig? AutoDeployConfig; /// /// Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. /// public readonly Outputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig? Layer7DdosDefenseConfig; [OutputConstructor] - private SecurityPolicyAdaptiveProtectionConfig(Outputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig? layer7DdosDefenseConfig) + private SecurityPolicyAdaptiveProtectionConfig( + Outputs.SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig? autoDeployConfig, + + Outputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig? layer7DdosDefenseConfig) { + AutoDeployConfig = autoDeployConfig; Layer7DdosDefenseConfig = layer7DdosDefenseConfig; } } diff --git a/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.cs b/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.cs new file mode 100644 index 0000000000..3e22c77af8 --- /dev/null +++ b/sdk/dotnet/Compute/Outputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.cs @@ -0,0 +1,49 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Compute.Outputs +{ + + [OutputType] + public sealed class SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig + { + /// + /// Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + /// + public readonly double? ConfidenceThreshold; + /// + /// Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + /// + public readonly int? ExpirationSec; + /// + /// Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + /// + public readonly double? ImpactedBaselineThreshold; + /// + /// Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + /// + public readonly double? LoadThreshold; + + [OutputConstructor] + private SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig( + double? confidenceThreshold, + + int? expirationSec, + + double? impactedBaselineThreshold, + + double? loadThreshold) + { + ConfidenceThreshold = confidenceThreshold; + ExpirationSec = expirationSec; + ImpactedBaselineThreshold = impactedBaselineThreshold; + LoadThreshold = loadThreshold; + } + } +} diff --git a/sdk/dotnet/Compute/PerInstanceConfig.cs b/sdk/dotnet/Compute/PerInstanceConfig.cs index e4d4eab862..7dba2ecec9 100644 --- a/sdk/dotnet/Compute/PerInstanceConfig.cs +++ b/sdk/dotnet/Compute/PerInstanceConfig.cs @@ -20,106 +20,6 @@ namespace Pulumi.Gcp.Compute /// * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs) /// /// ## Example Usage - /// ### Stateful Igm - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var myImage = Gcp.Compute.GetImage.Invoke(new() - /// { - /// Family = "debian-11", - /// Project = "debian-cloud", - /// }); - /// - /// var igm_basic = new Gcp.Compute.InstanceTemplate("igm-basic", new() - /// { - /// MachineType = "e2-medium", - /// CanIpForward = false, - /// Tags = new[] - /// { - /// "foo", - /// "bar", - /// }, - /// Disks = new[] - /// { - /// new Gcp.Compute.Inputs.InstanceTemplateDiskArgs - /// { - /// SourceImage = myImage.Apply(getImageResult => getImageResult.SelfLink), - /// AutoDelete = true, - /// Boot = true, - /// }, - /// }, - /// NetworkInterfaces = new[] - /// { - /// new Gcp.Compute.Inputs.InstanceTemplateNetworkInterfaceArgs - /// { - /// Network = "default", - /// }, - /// }, - /// ServiceAccount = new Gcp.Compute.Inputs.InstanceTemplateServiceAccountArgs - /// { - /// Scopes = new[] - /// { - /// "userinfo-email", - /// "compute-ro", - /// "storage-ro", - /// }, - /// }, - /// }); - /// - /// var igm_no_tp = new Gcp.Compute.InstanceGroupManager("igm-no-tp", new() - /// { - /// Description = "Test instance group manager", - /// Versions = new[] - /// { - /// new Gcp.Compute.Inputs.InstanceGroupManagerVersionArgs - /// { - /// Name = "prod", - /// InstanceTemplate = igm_basic.SelfLink, - /// }, - /// }, - /// BaseInstanceName = "igm-no-tp", - /// Zone = "us-central1-c", - /// TargetSize = 2, - /// }); - /// - /// var @default = new Gcp.Compute.Disk("default", new() - /// { - /// Type = "pd-ssd", - /// Zone = google_compute_instance_group_manager.Igm.Zone, - /// Image = "debian-11-bullseye-v20220719", - /// PhysicalBlockSizeBytes = 4096, - /// }); - /// - /// var withDisk = new Gcp.Compute.PerInstanceConfig("withDisk", new() - /// { - /// Zone = google_compute_instance_group_manager.Igm.Zone, - /// InstanceGroupManager = google_compute_instance_group_manager.Igm.Name, - /// PreservedState = new Gcp.Compute.Inputs.PerInstanceConfigPreservedStateArgs - /// { - /// Metadata = - /// { - /// { "foo", "bar" }, - /// { "instance_template", igm_basic.SelfLink }, - /// }, - /// Disks = new[] - /// { - /// new Gcp.Compute.Inputs.PerInstanceConfigPreservedStateDiskArgs - /// { - /// DeviceName = "my-stateful-disk", - /// Source = @default.Id, - /// Mode = "READ_ONLY", - /// }, - /// }, - /// }, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Compute/ProjectMetadataItem.cs b/sdk/dotnet/Compute/ProjectMetadataItem.cs index d54dfa14d7..b0e16c7f81 100644 --- a/sdk/dotnet/Compute/ProjectMetadataItem.cs +++ b/sdk/dotnet/Compute/ProjectMetadataItem.cs @@ -10,11 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Manages a single key/value pair on metadata common to all instances for - /// a project in GCE. Using `gcp.compute.ProjectMetadataItem` lets you - /// manage a single key/value setting in the provider rather than the entire - /// project metadata map. - /// /// ## Example Usage /// /// ```csharp diff --git a/sdk/dotnet/Compute/RegionBackendService.cs b/sdk/dotnet/Compute/RegionBackendService.cs index 235e304384..5851e4136a 100644 --- a/sdk/dotnet/Compute/RegionBackendService.cs +++ b/sdk/dotnet/Compute/RegionBackendService.cs @@ -76,10 +76,8 @@ public partial class RegionBackendService : global::Pulumi.CustomResource public Output ConnectionDrainingTimeoutSec { get; private set; } = null!; /// - /// Connection Tracking configuration for this BackendService. - /// This is available only for Layer 4 Internal Load Balancing and - /// Network Load Balancing. - /// Structure is documented below. + /// Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + /// and Network Load Balancing. /// [Output("connectionTrackingPolicy")] public Output ConnectionTrackingPolicy { get; private set; } = null!; @@ -355,10 +353,8 @@ public InputList Backends public Input? ConnectionDrainingTimeoutSec { get; set; } /// - /// Connection Tracking configuration for this BackendService. - /// This is available only for Layer 4 Internal Load Balancing and - /// Network Load Balancing. - /// Structure is documented below. + /// Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + /// and Network Load Balancing. /// [Input("connectionTrackingPolicy")] public Input? ConnectionTrackingPolicy { get; set; } @@ -577,10 +573,8 @@ public InputList Backends public Input? ConnectionDrainingTimeoutSec { get; set; } /// - /// Connection Tracking configuration for this BackendService. - /// This is available only for Layer 4 Internal Load Balancing and - /// Network Load Balancing. - /// Structure is documented below. + /// Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + /// and Network Load Balancing. /// [Input("connectionTrackingPolicy")] public Input? ConnectionTrackingPolicy { get; set; } diff --git a/sdk/dotnet/Compute/RegionDisk.cs b/sdk/dotnet/Compute/RegionDisk.cs index 89fdc48cc9..09605b0939 100644 --- a/sdk/dotnet/Compute/RegionDisk.cs +++ b/sdk/dotnet/Compute/RegionDisk.cs @@ -10,31 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Persistent disks are durable storage devices that function similarly to - /// the physical disks in a desktop or a server. Compute Engine manages the - /// hardware behind these devices to ensure data redundancy and optimize - /// performance for you. Persistent disks are available as either standard - /// hard disk drives (HDD) or solid-state drives (SSD). - /// - /// Persistent disks are located independently from your virtual machine - /// instances, so you can detach or move persistent disks to keep your data - /// even after you delete your instances. Persistent disk performance scales - /// automatically with size, so you can resize your existing persistent disks - /// or add more persistent disks to an instance to meet your performance and - /// storage space requirements. - /// - /// Add a persistent disk to your instance when you need reliable and - /// affordable storage with consistent performance characteristics. - /// - /// To get more information about RegionDisk, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionDisks) - /// * How-to Guides - /// * [Adding or Resizing Regional Persistent Disks](https://cloud.google.com/compute/docs/disks/regional-persistent-disk) - /// - /// > **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage /// ### Region Disk Basic /// diff --git a/sdk/dotnet/Compute/RegionDiskResourcePolicyAttachment.cs b/sdk/dotnet/Compute/RegionDiskResourcePolicyAttachment.cs index fa153a8439..e8b8f89042 100644 --- a/sdk/dotnet/Compute/RegionDiskResourcePolicyAttachment.cs +++ b/sdk/dotnet/Compute/RegionDiskResourcePolicyAttachment.cs @@ -10,11 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Adds existing resource policies to a disk. You can only add one policy - /// which will be applied to this disk for scheduling snapshot creation. - /// - /// > **Note:** This resource does not support zonal disks (`gcp.compute.Disk`). For zonal disks, please refer to the `gcp.compute.DiskResourcePolicyAttachment` resource. - /// /// ## Example Usage /// ### Region Disk Resource Policy Attachment Basic /// diff --git a/sdk/dotnet/Compute/RegionInstanceGroupManager.cs b/sdk/dotnet/Compute/RegionInstanceGroupManager.cs index bb54a39182..ad1f2a7864 100644 --- a/sdk/dotnet/Compute/RegionInstanceGroupManager.cs +++ b/sdk/dotnet/Compute/RegionInstanceGroupManager.cs @@ -298,9 +298,8 @@ public partial class RegionInstanceGroupManager : global::Pulumi.CustomResource public Output> Versions { get; private set; } = null!; /// - /// Whether to wait for all instances to be created/updated before - /// returning. Note that if this is set to true and the operation does not succeed, the provider will - /// continue trying until it times out. + /// Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + /// operation does not succeed, Terraform will continue trying until it times out. /// [Output("waitForInstances")] public Output WaitForInstances { get; private set; } = null!; @@ -538,9 +537,8 @@ public InputList Versions } /// - /// Whether to wait for all instances to be created/updated before - /// returning. Note that if this is set to true and the operation does not succeed, the provider will - /// continue trying until it times out. + /// Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + /// operation does not succeed, Terraform will continue trying until it times out. /// [Input("waitForInstances")] public Input? WaitForInstances { get; set; } @@ -770,9 +768,8 @@ public InputList Versions } /// - /// Whether to wait for all instances to be created/updated before - /// returning. Note that if this is set to true and the operation does not succeed, the provider will - /// continue trying until it times out. + /// Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + /// operation does not succeed, Terraform will continue trying until it times out. /// [Input("waitForInstances")] public Input? WaitForInstances { get; set; } diff --git a/sdk/dotnet/Compute/RegionNetworkEndpointGroup.cs b/sdk/dotnet/Compute/RegionNetworkEndpointGroup.cs index 95c83e3951..10a1164263 100644 --- a/sdk/dotnet/Compute/RegionNetworkEndpointGroup.cs +++ b/sdk/dotnet/Compute/RegionNetworkEndpointGroup.cs @@ -12,6 +12,10 @@ namespace Pulumi.Gcp.Compute /// /// A regional NEG that can support Serverless Products. /// + /// Recreating a region network endpoint group that's in use by another resource will give a + /// `resourceInUseByAnotherResource` error. Use `lifecycle.create_before_destroy` + /// to avoid this type of error. + /// /// To get more information about RegionNetworkEndpointGroup, see: /// /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/regionNetworkEndpointGroups) diff --git a/sdk/dotnet/Compute/RegionPerInstanceConfig.cs b/sdk/dotnet/Compute/RegionPerInstanceConfig.cs index 91c7139d92..5a3be5b842 100644 --- a/sdk/dotnet/Compute/RegionPerInstanceConfig.cs +++ b/sdk/dotnet/Compute/RegionPerInstanceConfig.cs @@ -21,112 +21,6 @@ namespace Pulumi.Gcp.Compute /// * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs) /// /// ## Example Usage - /// ### Stateful Rigm - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var myImage = Gcp.Compute.GetImage.Invoke(new() - /// { - /// Family = "debian-11", - /// Project = "debian-cloud", - /// }); - /// - /// var igm_basic = new Gcp.Compute.InstanceTemplate("igm-basic", new() - /// { - /// MachineType = "e2-medium", - /// CanIpForward = false, - /// Tags = new[] - /// { - /// "foo", - /// "bar", - /// }, - /// Disks = new[] - /// { - /// new Gcp.Compute.Inputs.InstanceTemplateDiskArgs - /// { - /// SourceImage = myImage.Apply(getImageResult => getImageResult.SelfLink), - /// AutoDelete = true, - /// Boot = true, - /// }, - /// }, - /// NetworkInterfaces = new[] - /// { - /// new Gcp.Compute.Inputs.InstanceTemplateNetworkInterfaceArgs - /// { - /// Network = "default", - /// }, - /// }, - /// ServiceAccount = new Gcp.Compute.Inputs.InstanceTemplateServiceAccountArgs - /// { - /// Scopes = new[] - /// { - /// "userinfo-email", - /// "compute-ro", - /// "storage-ro", - /// }, - /// }, - /// }); - /// - /// var rigm = new Gcp.Compute.RegionInstanceGroupManager("rigm", new() - /// { - /// Description = "Demo test instance group manager", - /// Versions = new[] - /// { - /// new Gcp.Compute.Inputs.RegionInstanceGroupManagerVersionArgs - /// { - /// Name = "prod", - /// InstanceTemplate = igm_basic.SelfLink, - /// }, - /// }, - /// UpdatePolicy = new Gcp.Compute.Inputs.RegionInstanceGroupManagerUpdatePolicyArgs - /// { - /// Type = "OPPORTUNISTIC", - /// InstanceRedistributionType = "NONE", - /// MinimalAction = "RESTART", - /// }, - /// BaseInstanceName = "rigm", - /// Region = "us-central1", - /// TargetSize = 2, - /// }); - /// - /// var @default = new Gcp.Compute.Disk("default", new() - /// { - /// Type = "pd-ssd", - /// Zone = "us-central1-a", - /// Image = "debian-11-bullseye-v20220719", - /// PhysicalBlockSizeBytes = 4096, - /// }); - /// - /// var withDisk = new Gcp.Compute.RegionPerInstanceConfig("withDisk", new() - /// { - /// Region = google_compute_region_instance_group_manager.Igm.Region, - /// RegionInstanceGroupManager = rigm.Name, - /// PreservedState = new Gcp.Compute.Inputs.RegionPerInstanceConfigPreservedStateArgs - /// { - /// Metadata = - /// { - /// { "foo", "bar" }, - /// { "instance_template", igm_basic.SelfLink }, - /// }, - /// Disks = new[] - /// { - /// new Gcp.Compute.Inputs.RegionPerInstanceConfigPreservedStateDiskArgs - /// { - /// DeviceName = "my-stateful-disk", - /// Source = @default.Id, - /// Mode = "READ_ONLY", - /// }, - /// }, - /// }, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Compute/RegionSslCertificate.cs b/sdk/dotnet/Compute/RegionSslCertificate.cs index cc9f037b84..dbbe2fa5c6 100644 --- a/sdk/dotnet/Compute/RegionSslCertificate.cs +++ b/sdk/dotnet/Compute/RegionSslCertificate.cs @@ -10,19 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// A RegionSslCertificate resource, used for HTTPS load balancing. This resource - /// provides a mechanism to upload an SSL key and certificate to - /// the load balancer to serve secure connections from the user. - /// - /// To get more information about RegionSslCertificate, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionSslCertificates) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates) - /// - /// > **Warning:** All arguments including `certificate` and `private_key` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage /// ### Region Ssl Certificate Basic /// diff --git a/sdk/dotnet/Compute/RouterNat.cs b/sdk/dotnet/Compute/RouterNat.cs index 530acbc9ce..f995f879ec 100644 --- a/sdk/dotnet/Compute/RouterNat.cs +++ b/sdk/dotnet/Compute/RouterNat.cs @@ -358,6 +358,13 @@ public partial class RouterNat : global::Pulumi.CustomResource [Output("tcpEstablishedIdleTimeoutSec")] public Output TcpEstablishedIdleTimeoutSec { get; private set; } = null!; + /// + /// Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + /// Defaults to 120s if not set. + /// + [Output("tcpTimeWaitTimeoutSec")] + public Output TcpTimeWaitTimeoutSec { get; private set; } = null!; + /// /// Timeout (in seconds) for TCP transitory connections. /// Defaults to 30s if not set. @@ -572,6 +579,13 @@ public InputList Subnetworks [Input("tcpEstablishedIdleTimeoutSec")] public Input? TcpEstablishedIdleTimeoutSec { get; set; } + /// + /// Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + /// Defaults to 120s if not set. + /// + [Input("tcpTimeWaitTimeoutSec")] + public Input? TcpTimeWaitTimeoutSec { get; set; } + /// /// Timeout (in seconds) for TCP transitory connections. /// Defaults to 30s if not set. @@ -748,6 +762,13 @@ public InputList Subnetworks [Input("tcpEstablishedIdleTimeoutSec")] public Input? TcpEstablishedIdleTimeoutSec { get; set; } + /// + /// Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + /// Defaults to 120s if not set. + /// + [Input("tcpTimeWaitTimeoutSec")] + public Input? TcpTimeWaitTimeoutSec { get; set; } + /// /// Timeout (in seconds) for TCP transitory connections. /// Defaults to 30s if not set. diff --git a/sdk/dotnet/Compute/SSLCertificate.cs b/sdk/dotnet/Compute/SSLCertificate.cs index 2bce4b3d54..f282ff953c 100644 --- a/sdk/dotnet/Compute/SSLCertificate.cs +++ b/sdk/dotnet/Compute/SSLCertificate.cs @@ -10,19 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// An SslCertificate resource, used for HTTPS load balancing. This resource - /// provides a mechanism to upload an SSL key and certificate to - /// the load balancer to serve secure connections from the user. - /// - /// To get more information about SslCertificate, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/sslCertificates) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates) - /// - /// > **Warning:** All arguments including `certificate` and `private_key` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage /// ### Ssl Certificate Basic /// diff --git a/sdk/dotnet/Compute/SecurityPolicy.cs b/sdk/dotnet/Compute/SecurityPolicy.cs index 9d8cb88ce3..a1b94474d1 100644 --- a/sdk/dotnet/Compute/SecurityPolicy.cs +++ b/sdk/dotnet/Compute/SecurityPolicy.cs @@ -10,12 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// A Security Policy defines an IP blacklist or whitelist that protects load balanced Google Cloud services by denying or permitting traffic from specified IP ranges. For more information - /// see the [official documentation](https://cloud.google.com/armor/docs/configure-security-policies) - /// and the [API](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies). - /// - /// Security Policy is used by google_compute_backend_service. - /// /// ## Example Usage /// /// ```csharp @@ -171,6 +165,22 @@ namespace Pulumi.Gcp.Compute /// /// }); /// ``` + /// + /// ## Import + /// + /// Security policies can be imported using any of the following formats + /// + /// ```sh + /// $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy projects/{{project}}/global/securityPolicies/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{project}}/{{name}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{name}} + /// ``` /// [GcpResourceType("gcp:compute/securityPolicy:SecurityPolicy")] public partial class SecurityPolicy : global::Pulumi.CustomResource @@ -228,7 +238,7 @@ public partial class SecurityPolicy : global::Pulumi.CustomResource public Output> Rules { get; private set; } = null!; /// - /// The URI of the created resourc + /// The URI of the created resource. /// [Output("selfLink")] public Output SelfLink { get; private set; } = null!; @@ -424,7 +434,7 @@ public InputList Rules } /// - /// The URI of the created resourc + /// The URI of the created resource. /// [Input("selfLink")] public Input? SelfLink { get; set; } diff --git a/sdk/dotnet/Compute/SecurityScanConfig.cs b/sdk/dotnet/Compute/SecurityScanConfig.cs index de84993a57..4b86b1bd2f 100644 --- a/sdk/dotnet/Compute/SecurityScanConfig.cs +++ b/sdk/dotnet/Compute/SecurityScanConfig.cs @@ -10,16 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// A ScanConfig resource contains the configurations to launch a scan. - /// - /// To get more information about ScanConfig, see: - /// - /// * [API documentation](https://cloud.google.com/security-scanner/docs/reference/rest/v1beta/projects.scanConfigs) - /// * How-to Guides - /// * [Using Cloud Security Scanner](https://cloud.google.com/security-scanner/docs/scanning) - /// - /// > **Warning:** All arguments including `authentication.google_account.password` and `authentication.custom_account.password` will be stored in the raw state as plain-text. - /// /// ## Example Usage /// ### Scan Config Basic /// @@ -39,7 +29,7 @@ namespace Pulumi.Gcp.Compute /// /// var scan_config = new Gcp.Compute.SecurityScanConfig("scan-config", new() /// { - /// DisplayName = "scan-config", + /// DisplayName = "terraform-scan-config", /// StartingUrls = new[] /// { /// scannerStaticIp.IPAddress.Apply(address => $"http://{address}"), diff --git a/sdk/dotnet/Compute/Snapshot.cs b/sdk/dotnet/Compute/Snapshot.cs index f16f3e52ae..802cab4a33 100644 --- a/sdk/dotnet/Compute/Snapshot.cs +++ b/sdk/dotnet/Compute/Snapshot.cs @@ -10,28 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// Represents a Persistent Disk Snapshot resource. - /// - /// Use snapshots to back up data from your persistent disks. Snapshots are - /// different from public images and custom images, which are used primarily - /// to create instances or configure instance templates. Snapshots are useful - /// for periodic backup of the data on your persistent disks. You can create - /// snapshots from persistent disks even while they are attached to running - /// instances. - /// - /// Snapshots are incremental, so you can create regular snapshots on a - /// persistent disk faster and at a much lower cost than if you regularly - /// created a full image of the disk. - /// - /// To get more information about Snapshot, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/snapshots) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/compute/docs/disks/create-snapshots) - /// - /// > **Warning:** All arguments including `snapshot_encryption_key.raw_key` and `source_disk_encryption_key.raw_key` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage /// ### Snapshot Basic /// diff --git a/sdk/dotnet/Compute/Subnetwork.cs b/sdk/dotnet/Compute/Subnetwork.cs index 37c0166795..96c6e7829e 100644 --- a/sdk/dotnet/Compute/Subnetwork.cs +++ b/sdk/dotnet/Compute/Subnetwork.cs @@ -339,11 +339,12 @@ public partial class Subnetwork : global::Pulumi.CustomResource public Output Role { get; private set; } = null!; /// - /// An array of configurations for secondary IP ranges for VM instances - /// contained in this subnetwork. The primary IP of such VM must belong - /// to the primary ipCidrRange of the subnetwork. The alias IPs may belong - /// to either primary or secondary ranges. - /// Structure is documented below. + /// An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + /// VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + /// ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + /// to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + /// syntax: 'example=[]' For more details about this behavior, see [this + /// section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). /// [Output("secondaryIpRanges")] public Output> SecondaryIpRanges { get; private set; } = null!; @@ -512,11 +513,12 @@ public sealed class SubnetworkArgs : global::Pulumi.ResourceArgs private InputList? _secondaryIpRanges; /// - /// An array of configurations for secondary IP ranges for VM instances - /// contained in this subnetwork. The primary IP of such VM must belong - /// to the primary ipCidrRange of the subnetwork. The alias IPs may belong - /// to either primary or secondary ranges. - /// Structure is documented below. + /// An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + /// VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + /// ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + /// to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + /// syntax: 'example=[]' For more details about this behavior, see [this + /// section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). /// public InputList SecondaryIpRanges { @@ -675,11 +677,12 @@ public sealed class SubnetworkState : global::Pulumi.ResourceArgs private InputList? _secondaryIpRanges; /// - /// An array of configurations for secondary IP ranges for VM instances - /// contained in this subnetwork. The primary IP of such VM must belong - /// to the primary ipCidrRange of the subnetwork. The alias IPs may belong - /// to either primary or secondary ranges. - /// Structure is documented below. + /// An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + /// VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + /// ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + /// to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + /// syntax: 'example=[]' For more details about this behavior, see [this + /// section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). /// public InputList SecondaryIpRanges { diff --git a/sdk/dotnet/Compute/TargetInstance.cs b/sdk/dotnet/Compute/TargetInstance.cs index d5979e8640..25a9a7e4a2 100644 --- a/sdk/dotnet/Compute/TargetInstance.cs +++ b/sdk/dotnet/Compute/TargetInstance.cs @@ -189,7 +189,8 @@ public partial class TargetInstance : global::Pulumi.CustomResource public Output NatPolicy { get; private set; } = null!; /// - /// The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + /// The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + /// the network that the default network interface belongs to. /// [Output("network")] public Output Network { get; private set; } = null!; @@ -298,7 +299,8 @@ public sealed class TargetInstanceArgs : global::Pulumi.ResourceArgs public Input? NatPolicy { get; set; } /// - /// The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + /// The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + /// the network that the default network interface belongs to. /// [Input("network")] public Input? Network { get; set; } @@ -369,7 +371,8 @@ public sealed class TargetInstanceState : global::Pulumi.ResourceArgs public Input? NatPolicy { get; set; } /// - /// The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + /// The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + /// the network that the default network interface belongs to. /// [Input("network")] public Input? Network { get; set; } diff --git a/sdk/dotnet/Compute/TargetPool.cs b/sdk/dotnet/Compute/TargetPool.cs index f9e6a1f0bd..7b4ecab0db 100644 --- a/sdk/dotnet/Compute/TargetPool.cs +++ b/sdk/dotnet/Compute/TargetPool.cs @@ -67,11 +67,9 @@ public partial class TargetPool : global::Pulumi.CustomResource public Output HealthChecks { get; private set; } = null!; /// - /// List of instances in the pool. They can be given as - /// URLs, or in the form of "zone/name". Note that the instances need not exist - /// at the time of target pool creation, so there is no need to use the - /// interpolation to create a dependency on the instances from the - /// target pool. + /// List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + /// not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + /// dependency on the instances from the target pool. /// [Output("instances")] public Output> Instances { get; private set; } = null!; @@ -188,11 +186,9 @@ public sealed class TargetPoolArgs : global::Pulumi.ResourceArgs private InputList? _instances; /// - /// List of instances in the pool. They can be given as - /// URLs, or in the form of "zone/name". Note that the instances need not exist - /// at the time of target pool creation, so there is no need to use the - /// interpolation to create a dependency on the instances from the - /// target pool. + /// List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + /// not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + /// dependency on the instances from the target pool. /// public InputList Instances { @@ -268,11 +264,9 @@ public sealed class TargetPoolState : global::Pulumi.ResourceArgs private InputList? _instances; /// - /// List of instances in the pool. They can be given as - /// URLs, or in the form of "zone/name". Note that the instances need not exist - /// at the time of target pool creation, so there is no need to use the - /// interpolation to create a dependency on the instances from the - /// target pool. + /// List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + /// not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + /// dependency on the instances from the target pool. /// public InputList Instances { diff --git a/sdk/dotnet/Compute/VPNTunnel.cs b/sdk/dotnet/Compute/VPNTunnel.cs index 5c1ba94c92..ca6fbe4f74 100644 --- a/sdk/dotnet/Compute/VPNTunnel.cs +++ b/sdk/dotnet/Compute/VPNTunnel.cs @@ -10,18 +10,6 @@ namespace Pulumi.Gcp.Compute { /// - /// VPN tunnel resource. - /// - /// To get more information about VpnTunnel, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/vpnTunnels) - /// * How-to Guides - /// * [Cloud VPN Overview](https://cloud.google.com/vpn/docs/concepts/overview) - /// * [Networks and Tunnel Routing](https://cloud.google.com/vpn/docs/concepts/choosing-networks-routing) - /// - /// > **Warning:** All arguments including `shared_secret` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage /// ### Vpn Tunnel Basic /// diff --git a/sdk/dotnet/Config/Config.cs b/sdk/dotnet/Config/Config.cs index 762fe086f1..c41fa8391d 100644 --- a/sdk/dotnet/Config/Config.cs +++ b/sdk/dotnet/Config/Config.cs @@ -291,6 +291,13 @@ public static string? CloudTasksCustomEndpoint set => _cloudTasksCustomEndpoint.Set(value); } + private static readonly __Value _cloudbuildv2CustomEndpoint = new __Value(() => __config.Get("cloudbuildv2CustomEndpoint")); + public static string? Cloudbuildv2CustomEndpoint + { + get => _cloudbuildv2CustomEndpoint.Get(); + set => _cloudbuildv2CustomEndpoint.Set(value); + } + private static readonly __Value _clouddeployCustomEndpoint = new __Value(() => __config.Get("clouddeployCustomEndpoint")); public static string? ClouddeployCustomEndpoint { @@ -452,13 +459,6 @@ public static string? DialogflowCxCustomEndpoint set => _dialogflowCxCustomEndpoint.Set(value); } - private static readonly __Value _disableGooglePartnerName = new __Value(() => __config.GetBoolean("disableGooglePartnerName")); - public static bool? DisableGooglePartnerName - { - get => _disableGooglePartnerName.Get(); - set => _disableGooglePartnerName.Set(value); - } - private static readonly __Value _dnsCustomEndpoint = new __Value(() => __config.Get("dnsCustomEndpoint")); public static string? DnsCustomEndpoint { @@ -564,13 +564,6 @@ public static string? GkehubFeatureCustomEndpoint set => _gkehubFeatureCustomEndpoint.Set(value); } - private static readonly __Value _googlePartnerName = new __Value(() => __config.Get("googlePartnerName")); - public static string? GooglePartnerName - { - get => _googlePartnerName.Get(); - set => _googlePartnerName.Set(value); - } - private static readonly __Value _healthcareCustomEndpoint = new __Value(() => __config.Get("healthcareCustomEndpoint")); public static string? HealthcareCustomEndpoint { @@ -914,6 +907,13 @@ public static string? TagsCustomEndpoint set => _tagsCustomEndpoint.Set(value); } + private static readonly __Value _tagsLocationCustomEndpoint = new __Value(() => __config.Get("tagsLocationCustomEndpoint")); + public static string? TagsLocationCustomEndpoint + { + get => _tagsLocationCustomEndpoint.Get(); + set => _tagsLocationCustomEndpoint.Set(value); + } + private static readonly __Value _tpuCustomEndpoint = new __Value(() => __config.Get("tpuCustomEndpoint")); public static string? TpuCustomEndpoint { @@ -949,6 +949,13 @@ public static string? WorkflowsCustomEndpoint set => _workflowsCustomEndpoint.Set(value); } + private static readonly __Value _workstationsCustomEndpoint = new __Value(() => __config.Get("workstationsCustomEndpoint")); + public static string? WorkstationsCustomEndpoint + { + get => _workstationsCustomEndpoint.Get(); + set => _workstationsCustomEndpoint.Set(value); + } + private static readonly __Value _zone = new __Value(() => __config.Get("zone") ?? Utilities.GetEnv("GOOGLE_ZONE", "GCLOUD_ZONE", "CLOUDSDK_COMPUTE_ZONE")); public static string? Zone { diff --git a/sdk/dotnet/Container/AttachedCluster.cs b/sdk/dotnet/Container/AttachedCluster.cs index bd856bb67d..f5e515aaa7 100644 --- a/sdk/dotnet/Container/AttachedCluster.cs +++ b/sdk/dotnet/Container/AttachedCluster.cs @@ -56,6 +56,43 @@ namespace Pulumi.Gcp.Container /// /// }); /// ``` + /// ### Container Attached Cluster Ignore Errors + /// + /// ```csharp + /// using System.Collections.Generic; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var project = Gcp.Organizations.GetProject.Invoke(); + /// + /// var versions = Gcp.Container.GetAttachedVersions.Invoke(new() + /// { + /// Location = "us-west1", + /// Project = project.Apply(getProjectResult => getProjectResult.ProjectId), + /// }); + /// + /// var primary = new Gcp.Container.AttachedCluster("primary", new() + /// { + /// Location = "us-west1", + /// Project = project.Apply(getProjectResult => getProjectResult.ProjectId), + /// Description = "Test cluster", + /// Distribution = "aks", + /// OidcConfig = new Gcp.Container.Inputs.AttachedClusterOidcConfigArgs + /// { + /// IssuerUrl = "https://oidc.issuer.url", + /// }, + /// PlatformVersion = versions.Apply(getAttachedVersionsResult => getAttachedVersionsResult.ValidVersions[0]), + /// Fleet = new Gcp.Container.Inputs.AttachedClusterFleetArgs + /// { + /// Project = $"projects/{project.Apply(getProjectResult => getProjectResult.Number)}", + /// }, + /// DeletionPolicy = "DELETE_IGNORE_ERRORS", + /// }); + /// + /// }); + /// ``` /// /// ## Import /// @@ -108,6 +145,12 @@ public partial class AttachedCluster : global::Pulumi.CustomResource [Output("createTime")] public Output CreateTime { get; private set; } = null!; + /// + /// Policy to determine what flags to send on delete. + /// + [Output("deletionPolicy")] + public Output DeletionPolicy { get; private set; } = null!; + /// /// A human readable description of this attached cluster. Cannot be longer /// than 255 UTF-8 encoded bytes. @@ -299,6 +342,12 @@ public InputMap Annotations [Input("authorization")] public Input? Authorization { get; set; } + /// + /// Policy to determine what flags to send on delete. + /// + [Input("deletionPolicy")] + public Input? DeletionPolicy { get; set; } + /// /// A human readable description of this attached cluster. Cannot be longer /// than 255 UTF-8 encoded bytes. @@ -420,6 +469,12 @@ public InputMap Annotations [Input("createTime")] public Input? CreateTime { get; set; } + /// + /// Policy to determine what flags to send on delete. + /// + [Input("deletionPolicy")] + public Input? DeletionPolicy { get; set; } + /// /// A human readable description of this attached cluster. Cannot be longer /// than 255 UTF-8 encoded bytes. diff --git a/sdk/dotnet/Container/Cluster.cs b/sdk/dotnet/Container/Cluster.cs index c997b128bd..f14575190a 100644 --- a/sdk/dotnet/Container/Cluster.cs +++ b/sdk/dotnet/Container/Cluster.cs @@ -10,14 +10,6 @@ namespace Pulumi.Gcp.Container { /// - /// Manages a Google Kubernetes Engine (GKE) cluster. For more information see - /// [the official documentation](https://cloud.google.com/container-engine/docs/clusters) - /// and [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters). - /// - /// > **Warning:** All arguments and attributes, including basic auth username and - /// passwords as well as certificate outputs will be stored in the raw state as - /// plaintext. [Read more about secrets in state](https://www.pulumi.com/docs/intro/concepts/programming-model/#secrets). - /// /// ## Example Usage /// ### With A Separately Managed Node Pool (Recommended) /// @@ -64,29 +56,6 @@ namespace Pulumi.Gcp.Container /// > **Note:** It is recommended that node pools be created and managed as separate resources as in the example above. /// This allows node pools to be added and removed without recreating the cluster. Node pools defined directly in the /// `gcp.container.Cluster` resource cannot be removed without re-creating the cluster. - /// ### Autopilot - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var @default = new Gcp.ServiceAccount.Account("default", new() - /// { - /// AccountId = "service-account-id", - /// DisplayName = "Service Account", - /// }); - /// - /// var primary = new Gcp.Container.Cluster("primary", new() - /// { - /// EnableAutopilot = true, - /// Location = "us-central1-a", - /// }); - /// - /// }); - /// ``` /// /// ## Import /// @@ -104,7 +73,7 @@ namespace Pulumi.Gcp.Container /// $ pulumi import gcp:container/cluster:Cluster mycluster us-east1-a/my-cluster /// ``` /// - /// For example, the following fields will show diffs if set in config* `min_master_version` * `remove_default_node_pool` + /// For example, the following fields will show diffs if set in config- `min_master_version` - `remove_default_node_pool` /// [GcpResourceType("gcp:container/cluster:Cluster")] public partial class Cluster : global::Pulumi.CustomResource @@ -151,7 +120,7 @@ public partial class Cluster : global::Pulumi.CustomResource public Output ClusterIpv4Cidr { get; private set; } = null!; /// - /// Configuration for + /// ) Configuration for /// [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, /// Structure is documented below. /// @@ -243,6 +212,7 @@ public partial class Cluster : global::Pulumi.CustomResource public Output EnableKubernetesAlpha { get; private set; } = null!; /// + /// ) /// Whether L4ILB Subsetting is enabled for this cluster. /// [Output("enableL4IlbSubsetting")] @@ -283,7 +253,7 @@ public partial class Cluster : global::Pulumi.CustomResource public Output GatewayApiConfig { get; private set; } = null!; /// - /// . Structure is documented below. + /// ). Structure is documented below. /// [Output("identityServiceConfig")] public Output IdentityServiceConfig { get; private set; } = null!; @@ -383,15 +353,9 @@ public partial class Cluster : global::Pulumi.CustomResource public Output MeshCertificates { get; private set; } = null!; /// - /// The minimum version of the master. GKE - /// will auto-update the master to new versions, so this does not guarantee the - /// current master version--use the read-only `master_version` field to obtain that. - /// If unset, the cluster's version will be set by GKE to the version of the most recent - /// official release (which is not necessarily the latest version). Most users will find - /// the `gcp.container.getEngineVersions` data source useful - it indicates which versions - /// are available. If you intend to specify versions manually, - /// [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - /// describe the various acceptable formats for this field. + /// The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + /// current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + /// set by GKE to the version of the most recent official release (which is not necessarily the latest version). /// [Output("minMasterVersion")] public Output MinMasterVersion { get; private set; } = null!; @@ -447,11 +411,7 @@ public partial class Cluster : global::Pulumi.CustomResource public Output NetworkingMode { get; private set; } = null!; /// - /// Parameters used in creating the default node pool. - /// Generally, this field should not be used at the same time as a - /// `gcp.container.NodePool` or a `node_pool` block; this configuration - /// manages the default node pool, which isn't recommended to be used. - /// Structure is documented below. + /// The configuration of the nodepool /// [Output("nodeConfig")] public Output NodeConfig { get; private set; } = null!; @@ -491,14 +451,12 @@ public partial class Cluster : global::Pulumi.CustomResource public Output> NodePools { get; private set; } = null!; /// - /// The Kubernetes version on the nodes. Must either be unset - /// or set to the same value as `min_master_version` on create. Defaults to the default - /// version set by GKE which is not necessarily the latest version. This only affects - /// nodes in the default node pool. While a fuzzy version can be specified, it's - /// recommended that you specify explicit versions as the provider will see spurious diffs - /// when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - /// `version_prefix` field to approximate fuzzy versions. - /// To update nodes in other node pools, use the `version` attribute on the node pool. + /// The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + /// Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + /// default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + /// Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + /// version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + /// use the version attribute on the node pool. /// [Output("nodeVersion")] public Output NodeVersion { get; private set; } = null!; @@ -541,15 +499,8 @@ public partial class Cluster : global::Pulumi.CustomResource public Output Project { get; private set; } = null!; /// - /// Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - /// feature, which provide more control over automatic upgrades of your GKE clusters. - /// When updating this field, GKE imposes specific version requirements. See - /// [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - /// for more details; the `gcp.container.getEngineVersions` datasource can provide - /// the default version for a channel. Note that removing the `release_channel` - /// field from your config will cause the provider to stop managing your cluster's - /// release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - /// channel. Structure is documented below. + /// Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + /// clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. /// [Output("releaseChannel")] public Output ReleaseChannel { get; private set; } = null!; @@ -722,7 +673,7 @@ public sealed class ClusterArgs : global::Pulumi.ResourceArgs public Input? ClusterIpv4Cidr { get; set; } /// - /// Configuration for + /// ) Configuration for /// [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, /// Structure is documented below. /// @@ -814,6 +765,7 @@ public sealed class ClusterArgs : global::Pulumi.ResourceArgs public Input? EnableKubernetesAlpha { get; set; } /// + /// ) /// Whether L4ILB Subsetting is enabled for this cluster. /// [Input("enableL4IlbSubsetting")] @@ -848,7 +800,7 @@ public sealed class ClusterArgs : global::Pulumi.ResourceArgs public Input? GatewayApiConfig { get; set; } /// - /// . Structure is documented below. + /// ). Structure is documented below. /// [Input("identityServiceConfig")] public Input? IdentityServiceConfig { get; set; } @@ -934,15 +886,9 @@ public sealed class ClusterArgs : global::Pulumi.ResourceArgs public Input? MeshCertificates { get; set; } /// - /// The minimum version of the master. GKE - /// will auto-update the master to new versions, so this does not guarantee the - /// current master version--use the read-only `master_version` field to obtain that. - /// If unset, the cluster's version will be set by GKE to the version of the most recent - /// official release (which is not necessarily the latest version). Most users will find - /// the `gcp.container.getEngineVersions` data source useful - it indicates which versions - /// are available. If you intend to specify versions manually, - /// [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - /// describe the various acceptable formats for this field. + /// The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + /// current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + /// set by GKE to the version of the most recent official release (which is not necessarily the latest version). /// [Input("minMasterVersion")] public Input? MinMasterVersion { get; set; } @@ -998,11 +944,7 @@ public sealed class ClusterArgs : global::Pulumi.ResourceArgs public Input? NetworkingMode { get; set; } /// - /// Parameters used in creating the default node pool. - /// Generally, this field should not be used at the same time as a - /// `gcp.container.NodePool` or a `node_pool` block; this configuration - /// manages the default node pool, which isn't recommended to be used. - /// Structure is documented below. + /// The configuration of the nodepool /// [Input("nodeConfig")] public Input? NodeConfig { get; set; } @@ -1054,14 +996,12 @@ public InputList NodePools } /// - /// The Kubernetes version on the nodes. Must either be unset - /// or set to the same value as `min_master_version` on create. Defaults to the default - /// version set by GKE which is not necessarily the latest version. This only affects - /// nodes in the default node pool. While a fuzzy version can be specified, it's - /// recommended that you specify explicit versions as the provider will see spurious diffs - /// when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - /// `version_prefix` field to approximate fuzzy versions. - /// To update nodes in other node pools, use the `version` attribute on the node pool. + /// The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + /// Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + /// default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + /// Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + /// version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + /// use the version attribute on the node pool. /// [Input("nodeVersion")] public Input? NodeVersion { get; set; } @@ -1101,15 +1041,8 @@ public InputList NodePools public Input? Project { get; set; } /// - /// Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - /// feature, which provide more control over automatic upgrades of your GKE clusters. - /// When updating this field, GKE imposes specific version requirements. See - /// [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - /// for more details; the `gcp.container.getEngineVersions` datasource can provide - /// the default version for a channel. Note that removing the `release_channel` - /// field from your config will cause the provider to stop managing your cluster's - /// release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - /// channel. Structure is documented below. + /// Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + /// clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. /// [Input("releaseChannel")] public Input? ReleaseChannel { get; set; } @@ -1227,7 +1160,7 @@ public sealed class ClusterState : global::Pulumi.ResourceArgs public Input? ClusterIpv4Cidr { get; set; } /// - /// Configuration for + /// ) Configuration for /// [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, /// Structure is documented below. /// @@ -1319,6 +1252,7 @@ public sealed class ClusterState : global::Pulumi.ResourceArgs public Input? EnableKubernetesAlpha { get; set; } /// + /// ) /// Whether L4ILB Subsetting is enabled for this cluster. /// [Input("enableL4IlbSubsetting")] @@ -1359,7 +1293,7 @@ public sealed class ClusterState : global::Pulumi.ResourceArgs public Input? GatewayApiConfig { get; set; } /// - /// . Structure is documented below. + /// ). Structure is documented below. /// [Input("identityServiceConfig")] public Input? IdentityServiceConfig { get; set; } @@ -1459,15 +1393,9 @@ public sealed class ClusterState : global::Pulumi.ResourceArgs public Input? MeshCertificates { get; set; } /// - /// The minimum version of the master. GKE - /// will auto-update the master to new versions, so this does not guarantee the - /// current master version--use the read-only `master_version` field to obtain that. - /// If unset, the cluster's version will be set by GKE to the version of the most recent - /// official release (which is not necessarily the latest version). Most users will find - /// the `gcp.container.getEngineVersions` data source useful - it indicates which versions - /// are available. If you intend to specify versions manually, - /// [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - /// describe the various acceptable formats for this field. + /// The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + /// current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + /// set by GKE to the version of the most recent official release (which is not necessarily the latest version). /// [Input("minMasterVersion")] public Input? MinMasterVersion { get; set; } @@ -1523,11 +1451,7 @@ public sealed class ClusterState : global::Pulumi.ResourceArgs public Input? NetworkingMode { get; set; } /// - /// Parameters used in creating the default node pool. - /// Generally, this field should not be used at the same time as a - /// `gcp.container.NodePool` or a `node_pool` block; this configuration - /// manages the default node pool, which isn't recommended to be used. - /// Structure is documented below. + /// The configuration of the nodepool /// [Input("nodeConfig")] public Input? NodeConfig { get; set; } @@ -1579,14 +1503,12 @@ public InputList NodePools } /// - /// The Kubernetes version on the nodes. Must either be unset - /// or set to the same value as `min_master_version` on create. Defaults to the default - /// version set by GKE which is not necessarily the latest version. This only affects - /// nodes in the default node pool. While a fuzzy version can be specified, it's - /// recommended that you specify explicit versions as the provider will see spurious diffs - /// when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - /// `version_prefix` field to approximate fuzzy versions. - /// To update nodes in other node pools, use the `version` attribute on the node pool. + /// The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + /// Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + /// default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + /// Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + /// version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + /// use the version attribute on the node pool. /// [Input("nodeVersion")] public Input? NodeVersion { get; set; } @@ -1629,15 +1551,8 @@ public InputList NodePools public Input? Project { get; set; } /// - /// Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - /// feature, which provide more control over automatic upgrades of your GKE clusters. - /// When updating this field, GKE imposes specific version requirements. See - /// [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - /// for more details; the `gcp.container.getEngineVersions` datasource can provide - /// the default version for a channel. Note that removing the `release_channel` - /// field from your config will cause the provider to stop managing your cluster's - /// release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - /// channel. Structure is documented below. + /// Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + /// clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. /// [Input("releaseChannel")] public Input? ReleaseChannel { get; set; } diff --git a/sdk/dotnet/Container/GetEngineVersions.cs b/sdk/dotnet/Container/GetEngineVersions.cs index 70d43eb8c4..956de9ddd0 100644 --- a/sdk/dotnet/Container/GetEngineVersions.cs +++ b/sdk/dotnet/Container/GetEngineVersions.cs @@ -123,14 +123,6 @@ public sealed class GetEngineVersionsArgs : global::Pulumi.InvokeArgs [Input("project")] public string? Project { get; set; } - /// - /// If provided, the provider will only return versions - /// that match the string prefix. For example, `1.11.` will match all `1.11` series - /// releases. Since this is just a string match, it's recommended that you append a - /// `.` after minor versions to ensure that prefixes such as `1.1` don't match - /// versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - /// for full details on how version strings are formatted. - /// [Input("versionPrefix")] public string? VersionPrefix { get; set; } @@ -158,14 +150,6 @@ public sealed class GetEngineVersionsInvokeArgs : global::Pulumi.InvokeArgs [Input("project")] public Input? Project { get; set; } - /// - /// If provided, the provider will only return versions - /// that match the string prefix. For example, `1.11.` will match all `1.11` series - /// releases. Since this is just a string match, it's recommended that you append a - /// `.` after minor versions to ensure that prefixes such as `1.1` don't match - /// versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - /// for full details on how version strings are formatted. - /// [Input("versionPrefix")] public Input? VersionPrefix { get; set; } diff --git a/sdk/dotnet/Container/Inputs/ClusterAddonsConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterAddonsConfigArgs.cs index c7e29d12ac..d070dc7d44 100644 --- a/sdk/dotnet/Container/Inputs/ClusterAddonsConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterAddonsConfigArgs.cs @@ -74,14 +74,14 @@ public sealed class ClusterAddonsConfigArgs : global::Pulumi.ResourceArgs public Input? HttpLoadBalancing { get; set; } /// - /// . + /// ). /// Structure is documented below. /// [Input("istioConfig")] public Input? IstioConfig { get; set; } /// - /// . + /// ). /// Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. /// [Input("kalmConfig")] diff --git a/sdk/dotnet/Container/Inputs/ClusterAddonsConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterAddonsConfigGetArgs.cs index 9ba6e43092..3fce20224d 100644 --- a/sdk/dotnet/Container/Inputs/ClusterAddonsConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterAddonsConfigGetArgs.cs @@ -74,14 +74,14 @@ public sealed class ClusterAddonsConfigGetArgs : global::Pulumi.ResourceArgs public Input? HttpLoadBalancing { get; set; } /// - /// . + /// ). /// Structure is documented below. /// [Input("istioConfig")] public Input? IstioConfig { get; set; } /// - /// . + /// ). /// Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. /// [Input("kalmConfig")] diff --git a/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsArgs.cs b/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsArgs.cs index c34618f6e1..7fe9a0e83e 100644 --- a/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsArgs.cs @@ -43,6 +43,7 @@ public sealed class ClusterClusterAutoscalingAutoProvisioningDefaultsArgs : glob public Input? Management { get; set; } /// + /// ) /// Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the /// specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such /// as "Intel Haswell" or "Intel Sandy Bridge". diff --git a/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsGetArgs.cs index 6a5f91e66d..2b6b182810 100644 --- a/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsGetArgs.cs @@ -43,6 +43,7 @@ public sealed class ClusterClusterAutoscalingAutoProvisioningDefaultsGetArgs : g public Input? Management { get; set; } /// + /// ) /// Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the /// specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such /// as "Intel Haswell" or "Intel Sandy Bridge". diff --git a/sdk/dotnet/Container/Inputs/ClusterNodeConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodeConfigArgs.cs index 12c55a409e..c9715431e7 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodeConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodeConfigArgs.cs @@ -13,7 +13,7 @@ namespace Pulumi.Gcp.Container.Inputs public sealed class ClusterNodeConfigArgs : global::Pulumi.ResourceArgs { /// - /// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + /// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption /// [Input("bootDiskKmsKey")] public Input? BootDiskKmsKey { get; set; } @@ -51,11 +51,6 @@ public sealed class ClusterNodeConfigArgs : global::Pulumi.ResourceArgs [Input("guestAccelerators")] private InputList? _guestAccelerators; - - /// - /// List of the type and count of accelerator cards attached to the instance. - /// Structure documented below. - /// public InputList GuestAccelerators { get => _guestAccelerators ?? (_guestAccelerators = new InputList()); @@ -130,14 +125,6 @@ public InputMap Labels [Input("metadata")] private InputMap? _metadata; - - /// - /// The metadata key/value pairs assigned to instances in - /// the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - /// `true` by the API; if `metadata` is set but that default value is not - /// included, the provider will attempt to unset the value. To avoid this, set the - /// value in your config. - /// public InputMap Metadata { get => _metadata ?? (_metadata = new InputMap()); @@ -201,6 +188,10 @@ public InputMap ResourceLabels set => _resourceLabels = value; } + /// + /// ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + /// Structure is documented below. + /// [Input("sandboxConfig")] public Input? SandboxConfig { get; set; } @@ -240,17 +231,6 @@ public InputList Tags [Input("taints")] private InputList? _taints; - - /// - /// A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - /// to apply to nodes. GKE's API can only set this field on cluster creation. - /// However, GKE will add taints to your nodes if you enable certain features such - /// as GPUs. If this field is set, any diffs on this field will cause the provider to - /// recreate the underlying resource. Taint values can be updated safely in - /// Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - /// this field to manage taints. If you do, `lifecycle.ignore_changes` is - /// recommended. Structure is documented below. - /// public InputList Taints { get => _taints ?? (_taints = new InputList()); diff --git a/sdk/dotnet/Container/Inputs/ClusterNodeConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodeConfigGetArgs.cs index 405800ca4e..90caf89ff1 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodeConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodeConfigGetArgs.cs @@ -13,7 +13,7 @@ namespace Pulumi.Gcp.Container.Inputs public sealed class ClusterNodeConfigGetArgs : global::Pulumi.ResourceArgs { /// - /// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + /// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption /// [Input("bootDiskKmsKey")] public Input? BootDiskKmsKey { get; set; } @@ -51,11 +51,6 @@ public sealed class ClusterNodeConfigGetArgs : global::Pulumi.ResourceArgs [Input("guestAccelerators")] private InputList? _guestAccelerators; - - /// - /// List of the type and count of accelerator cards attached to the instance. - /// Structure documented below. - /// public InputList GuestAccelerators { get => _guestAccelerators ?? (_guestAccelerators = new InputList()); @@ -130,14 +125,6 @@ public InputMap Labels [Input("metadata")] private InputMap? _metadata; - - /// - /// The metadata key/value pairs assigned to instances in - /// the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - /// `true` by the API; if `metadata` is set but that default value is not - /// included, the provider will attempt to unset the value. To avoid this, set the - /// value in your config. - /// public InputMap Metadata { get => _metadata ?? (_metadata = new InputMap()); @@ -201,6 +188,10 @@ public InputMap ResourceLabels set => _resourceLabels = value; } + /// + /// ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + /// Structure is documented below. + /// [Input("sandboxConfig")] public Input? SandboxConfig { get; set; } @@ -240,17 +231,6 @@ public InputList Tags [Input("taints")] private InputList? _taints; - - /// - /// A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - /// to apply to nodes. GKE's API can only set this field on cluster creation. - /// However, GKE will add taints to your nodes if you enable certain features such - /// as GPUs. If this field is set, any diffs on this field will cause the provider to - /// recreate the underlying resource. Taint values can be updated safely in - /// Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - /// this field to manage taints. If you do, `lifecycle.ignore_changes` is - /// recommended. Structure is documented below. - /// public InputList Taints { get => _taints ?? (_taints = new InputList()); diff --git a/sdk/dotnet/Container/Inputs/ClusterNodeConfigWorkloadMetadataConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodeConfigWorkloadMetadataConfigArgs.cs index 80c94e37b4..7d9d1920bd 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodeConfigWorkloadMetadataConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodeConfigWorkloadMetadataConfigArgs.cs @@ -15,7 +15,7 @@ public sealed class ClusterNodeConfigWorkloadMetadataConfigArgs : global::Pulumi /// /// How to expose the node metadata to the workload running on the node. /// Accepted values are: - /// * UNSPECIFIED: Not Set + /// * MODE_UNSPECIFIED: Not Set /// * GCE_METADATA: Expose all Compute Engine metadata to pods. /// * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. /// diff --git a/sdk/dotnet/Container/Inputs/ClusterNodeConfigWorkloadMetadataConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodeConfigWorkloadMetadataConfigGetArgs.cs index 634a633aa6..8e30365f37 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodeConfigWorkloadMetadataConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodeConfigWorkloadMetadataConfigGetArgs.cs @@ -15,7 +15,7 @@ public sealed class ClusterNodeConfigWorkloadMetadataConfigGetArgs : global::Pul /// /// How to expose the node metadata to the workload running on the node. /// Accepted values are: - /// * UNSPECIFIED: Not Set + /// * MODE_UNSPECIFIED: Not Set /// * GCE_METADATA: Expose all Compute Engine metadata to pods. /// * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. /// diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolArgs.cs index d938ad0567..99ae62ff79 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodePoolArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolArgs.cs @@ -61,20 +61,9 @@ public InputList ManagedInstanceGroupUrls [Input("namePrefix")] public Input? NamePrefix { get; set; } - /// - /// Configuration for - /// [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - /// [Input("networkConfig")] public Input? NetworkConfig { get; set; } - /// - /// Parameters used in creating the default node pool. - /// Generally, this field should not be used at the same time as a - /// `gcp.container.NodePool` or a `node_pool` block; this configuration - /// manages the default node pool, which isn't recommended to be used. - /// Structure is documented below. - /// [Input("nodeConfig")] public Input? NodeConfig { get; set; } diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolGetArgs.cs index 1e657011ea..ed4d7db763 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodePoolGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolGetArgs.cs @@ -61,20 +61,9 @@ public InputList ManagedInstanceGroupUrls [Input("namePrefix")] public Input? NamePrefix { get; set; } - /// - /// Configuration for - /// [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - /// [Input("networkConfig")] public Input? NetworkConfig { get; set; } - /// - /// Parameters used in creating the default node pool. - /// Generally, this field should not be used at the same time as a - /// `gcp.container.NodePool` or a `node_pool` block; this configuration - /// manages the default node pool, which isn't recommended to be used. - /// Structure is documented below. - /// [Input("nodeConfig")] public Input? NodeConfig { get; set; } diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNetworkConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNetworkConfigArgs.cs index 0ee7809d73..782d75d44a 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodePoolNetworkConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNetworkConfigArgs.cs @@ -12,9 +12,6 @@ namespace Pulumi.Gcp.Container.Inputs public sealed class ClusterNodePoolNetworkConfigArgs : global::Pulumi.ResourceArgs { - /// - /// Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. - /// [Input("createPodRange")] public Input? CreatePodRange { get; set; } @@ -27,15 +24,9 @@ public sealed class ClusterNodePoolNetworkConfigArgs : global::Pulumi.ResourceAr [Input("enablePrivateNodes")] public Input? EnablePrivateNodes { get; set; } - /// - /// The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - /// [Input("podIpv4CidrBlock")] public Input? PodIpv4CidrBlock { get; set; } - /// - /// The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. - /// [Input("podRange")] public Input? PodRange { get; set; } diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNetworkConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNetworkConfigGetArgs.cs index 9d72e6cd8d..7ffdc03f79 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodePoolNetworkConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNetworkConfigGetArgs.cs @@ -12,9 +12,6 @@ namespace Pulumi.Gcp.Container.Inputs public sealed class ClusterNodePoolNetworkConfigGetArgs : global::Pulumi.ResourceArgs { - /// - /// Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. - /// [Input("createPodRange")] public Input? CreatePodRange { get; set; } @@ -27,15 +24,9 @@ public sealed class ClusterNodePoolNetworkConfigGetArgs : global::Pulumi.Resourc [Input("enablePrivateNodes")] public Input? EnablePrivateNodes { get; set; } - /// - /// The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - /// [Input("podIpv4CidrBlock")] public Input? PodIpv4CidrBlock { get; set; } - /// - /// The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. - /// [Input("podRange")] public Input? PodRange { get; set; } diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigArgs.cs index 54a11a8e17..8ba8d46963 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigArgs.cs @@ -13,7 +13,7 @@ namespace Pulumi.Gcp.Container.Inputs public sealed class ClusterNodePoolNodeConfigArgs : global::Pulumi.ResourceArgs { /// - /// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + /// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption /// [Input("bootDiskKmsKey")] public Input? BootDiskKmsKey { get; set; } @@ -51,11 +51,6 @@ public sealed class ClusterNodePoolNodeConfigArgs : global::Pulumi.ResourceArgs [Input("guestAccelerators")] private InputList? _guestAccelerators; - - /// - /// List of the type and count of accelerator cards attached to the instance. - /// Structure documented below. - /// public InputList GuestAccelerators { get => _guestAccelerators ?? (_guestAccelerators = new InputList()); @@ -130,14 +125,6 @@ public InputMap Labels [Input("metadata")] private InputMap? _metadata; - - /// - /// The metadata key/value pairs assigned to instances in - /// the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - /// `true` by the API; if `metadata` is set but that default value is not - /// included, the provider will attempt to unset the value. To avoid this, set the - /// value in your config. - /// public InputMap Metadata { get => _metadata ?? (_metadata = new InputMap()); @@ -201,6 +188,10 @@ public InputMap ResourceLabels set => _resourceLabels = value; } + /// + /// ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + /// Structure is documented below. + /// [Input("sandboxConfig")] public Input? SandboxConfig { get; set; } @@ -240,17 +231,6 @@ public InputList Tags [Input("taints")] private InputList? _taints; - - /// - /// A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - /// to apply to nodes. GKE's API can only set this field on cluster creation. - /// However, GKE will add taints to your nodes if you enable certain features such - /// as GPUs. If this field is set, any diffs on this field will cause the provider to - /// recreate the underlying resource. Taint values can be updated safely in - /// Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - /// this field to manage taints. If you do, `lifecycle.ignore_changes` is - /// recommended. Structure is documented below. - /// public InputList Taints { get => _taints ?? (_taints = new InputList()); diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGetArgs.cs index 5fb65175b0..6324d1a7a5 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigGetArgs.cs @@ -13,7 +13,7 @@ namespace Pulumi.Gcp.Container.Inputs public sealed class ClusterNodePoolNodeConfigGetArgs : global::Pulumi.ResourceArgs { /// - /// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + /// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption /// [Input("bootDiskKmsKey")] public Input? BootDiskKmsKey { get; set; } @@ -51,11 +51,6 @@ public sealed class ClusterNodePoolNodeConfigGetArgs : global::Pulumi.ResourceAr [Input("guestAccelerators")] private InputList? _guestAccelerators; - - /// - /// List of the type and count of accelerator cards attached to the instance. - /// Structure documented below. - /// public InputList GuestAccelerators { get => _guestAccelerators ?? (_guestAccelerators = new InputList()); @@ -130,14 +125,6 @@ public InputMap Labels [Input("metadata")] private InputMap? _metadata; - - /// - /// The metadata key/value pairs assigned to instances in - /// the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - /// `true` by the API; if `metadata` is set but that default value is not - /// included, the provider will attempt to unset the value. To avoid this, set the - /// value in your config. - /// public InputMap Metadata { get => _metadata ?? (_metadata = new InputMap()); @@ -201,6 +188,10 @@ public InputMap ResourceLabels set => _resourceLabels = value; } + /// + /// ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + /// Structure is documented below. + /// [Input("sandboxConfig")] public Input? SandboxConfig { get; set; } @@ -240,17 +231,6 @@ public InputList Tags [Input("taints")] private InputList? _taints; - - /// - /// A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - /// to apply to nodes. GKE's API can only set this field on cluster creation. - /// However, GKE will add taints to your nodes if you enable certain features such - /// as GPUs. If this field is set, any diffs on this field will cause the provider to - /// recreate the underlying resource. Taint values can be updated safely in - /// Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - /// this field to manage taints. If you do, `lifecycle.ignore_changes` is - /// recommended. Structure is documented below. - /// public InputList Taints { get => _taints ?? (_taints = new InputList()); diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs.cs index 01c3f77661..7316a17163 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs.cs @@ -15,7 +15,7 @@ public sealed class ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs : global /// /// How to expose the node metadata to the workload running on the node. /// Accepted values are: - /// * UNSPECIFIED: Not Set + /// * MODE_UNSPECIFIED: Not Set /// * GCE_METADATA: Expose all Compute Engine metadata to pods. /// * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. /// diff --git a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigWorkloadMetadataConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigWorkloadMetadataConfigGetArgs.cs index f8ba8cb50d..835d0766a8 100644 --- a/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigWorkloadMetadataConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterNodePoolNodeConfigWorkloadMetadataConfigGetArgs.cs @@ -15,7 +15,7 @@ public sealed class ClusterNodePoolNodeConfigWorkloadMetadataConfigGetArgs : glo /// /// How to expose the node metadata to the workload running on the node. /// Accepted values are: - /// * UNSPECIFIED: Not Set + /// * MODE_UNSPECIFIED: Not Set /// * GCE_METADATA: Expose all Compute Engine metadata to pods. /// * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. /// diff --git a/sdk/dotnet/Container/Inputs/ClusterPrivateClusterConfigArgs.cs b/sdk/dotnet/Container/Inputs/ClusterPrivateClusterConfigArgs.cs index 44d5062b1d..a2e707e859 100644 --- a/sdk/dotnet/Container/Inputs/ClusterPrivateClusterConfigArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterPrivateClusterConfigArgs.cs @@ -30,11 +30,6 @@ public sealed class ClusterPrivateClusterConfigArgs : global::Pulumi.ResourceArg [Input("enablePrivateNodes")] public Input? EnablePrivateNodes { get; set; } - /// - /// Controls cluster master global - /// access settings. If unset, the provider will no longer manage this field and will - /// not modify the previously-set value. Structure is documented below. - /// [Input("masterGlobalAccessConfig")] public Input? MasterGlobalAccessConfig { get; set; } diff --git a/sdk/dotnet/Container/Inputs/ClusterPrivateClusterConfigGetArgs.cs b/sdk/dotnet/Container/Inputs/ClusterPrivateClusterConfigGetArgs.cs index 0fb13479ab..21eee5b6d1 100644 --- a/sdk/dotnet/Container/Inputs/ClusterPrivateClusterConfigGetArgs.cs +++ b/sdk/dotnet/Container/Inputs/ClusterPrivateClusterConfigGetArgs.cs @@ -30,11 +30,6 @@ public sealed class ClusterPrivateClusterConfigGetArgs : global::Pulumi.Resource [Input("enablePrivateNodes")] public Input? EnablePrivateNodes { get; set; } - /// - /// Controls cluster master global - /// access settings. If unset, the provider will no longer manage this field and will - /// not modify the previously-set value. Structure is documented below. - /// [Input("masterGlobalAccessConfig")] public Input? MasterGlobalAccessConfig { get; set; } diff --git a/sdk/dotnet/Container/NodePool.cs b/sdk/dotnet/Container/NodePool.cs index f94d1a2766..1fd32adbfe 100644 --- a/sdk/dotnet/Container/NodePool.cs +++ b/sdk/dotnet/Container/NodePool.cs @@ -10,52 +10,6 @@ namespace Pulumi.Gcp.Container { /// - /// Manages a node pool in a Google Kubernetes Engine (GKE) cluster separately from - /// the cluster control plane. For more information see [the official documentation](https://cloud.google.com/container-engine/docs/node-pools) - /// and [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters.nodePools). - /// - /// ## Example Usage - /// ### Using A Separately Managed Node Pool (Recommended) - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var @default = new Gcp.ServiceAccount.Account("default", new() - /// { - /// AccountId = "service-account-id", - /// DisplayName = "Service Account", - /// }); - /// - /// var primary = new Gcp.Container.Cluster("primary", new() - /// { - /// Location = "us-central1", - /// RemoveDefaultNodePool = true, - /// InitialNodeCount = 1, - /// }); - /// - /// var primaryPreemptibleNodes = new Gcp.Container.NodePool("primaryPreemptibleNodes", new() - /// { - /// Cluster = primary.Id, - /// NodeCount = 1, - /// NodeConfig = new Gcp.Container.Inputs.NodePoolNodeConfigArgs - /// { - /// Preemptible = true, - /// MachineType = "e2-medium", - /// ServiceAccount = @default.Email, - /// OauthScopes = new[] - /// { - /// "https://www.googleapis.com/auth/cloud-platform", - /// }, - /// }, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// Node pools can be imported using the `project`, `location`, `cluster` and `name`. If the project is omitted, the project value in the provider configuration will be used. Examples @@ -85,13 +39,8 @@ public partial class NodePool : global::Pulumi.CustomResource public Output Cluster { get; private set; } = null!; /// - /// The initial number of nodes for the pool. In - /// regional or multi-zonal clusters, this is the number of nodes per zone. Changing - /// this will force recreation of the resource. WARNING: Resizing your node pool manually - /// may change this value in your existing cluster, which will trigger destruction - /// and recreation on the next provider run (to rectify the discrepancy). If you don't - /// need this value, don't set it. If you do need it, you can use a lifecycle block to - /// ignore subsqeuent changes to this field. + /// The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + /// Changing this will force recreation of the resource. /// [Output("initialNodeCount")] public Output InitialNodeCount { get; private set; } = null!; @@ -132,8 +81,7 @@ public partial class NodePool : global::Pulumi.CustomResource public Output MaxPodsPerNode { get; private set; } = null!; /// - /// The name of the node pool. If left blank, the provider will - /// auto-generate a unique name. + /// The name of the node pool. If left blank, Terraform will auto-generate a unique name. /// [Output("name")] public Output Name { get; private set; } = null!; @@ -201,12 +149,11 @@ public partial class NodePool : global::Pulumi.CustomResource public Output UpgradeSettings { get; private set; } = null!; /// - /// The Kubernetes version for the nodes in this pool. Note that if this field - /// and `auto_upgrade` are both specified, they will fight each other for what the node version should - /// be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - /// recommended that you specify explicit versions as the provider will see spurious diffs - /// when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - /// `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + /// The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + /// will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + /// can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + /// versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + /// versions in a Terraform-compatible way. /// [Output("version")] public Output Version { get; private set; } = null!; @@ -271,13 +218,8 @@ public sealed class NodePoolArgs : global::Pulumi.ResourceArgs public Input Cluster { get; set; } = null!; /// - /// The initial number of nodes for the pool. In - /// regional or multi-zonal clusters, this is the number of nodes per zone. Changing - /// this will force recreation of the resource. WARNING: Resizing your node pool manually - /// may change this value in your existing cluster, which will trigger destruction - /// and recreation on the next provider run (to rectify the discrepancy). If you don't - /// need this value, don't set it. If you do need it, you can use a lifecycle block to - /// ignore subsqeuent changes to this field. + /// The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + /// Changing this will force recreation of the resource. /// [Input("initialNodeCount")] public Input? InitialNodeCount { get; set; } @@ -306,8 +248,7 @@ public sealed class NodePoolArgs : global::Pulumi.ResourceArgs public Input? MaxPodsPerNode { get; set; } /// - /// The name of the node pool. If left blank, the provider will - /// auto-generate a unique name. + /// The name of the node pool. If left blank, Terraform will auto-generate a unique name. /// [Input("name")] public Input? Name { get; set; } @@ -378,12 +319,11 @@ public InputList NodeLocations public Input? UpgradeSettings { get; set; } /// - /// The Kubernetes version for the nodes in this pool. Note that if this field - /// and `auto_upgrade` are both specified, they will fight each other for what the node version should - /// be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - /// recommended that you specify explicit versions as the provider will see spurious diffs - /// when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - /// `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + /// The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + /// will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + /// can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + /// versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + /// versions in a Terraform-compatible way. /// [Input("version")] public Input? Version { get; set; } @@ -410,13 +350,8 @@ public sealed class NodePoolState : global::Pulumi.ResourceArgs public Input? Cluster { get; set; } /// - /// The initial number of nodes for the pool. In - /// regional or multi-zonal clusters, this is the number of nodes per zone. Changing - /// this will force recreation of the resource. WARNING: Resizing your node pool manually - /// may change this value in your existing cluster, which will trigger destruction - /// and recreation on the next provider run (to rectify the discrepancy). If you don't - /// need this value, don't set it. If you do need it, you can use a lifecycle block to - /// ignore subsqeuent changes to this field. + /// The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + /// Changing this will force recreation of the resource. /// [Input("initialNodeCount")] public Input? InitialNodeCount { get; set; } @@ -469,8 +404,7 @@ public InputList ManagedInstanceGroupUrls public Input? MaxPodsPerNode { get; set; } /// - /// The name of the node pool. If left blank, the provider will - /// auto-generate a unique name. + /// The name of the node pool. If left blank, Terraform will auto-generate a unique name. /// [Input("name")] public Input? Name { get; set; } @@ -544,12 +478,11 @@ public InputList NodeLocations public Input? UpgradeSettings { get; set; } /// - /// The Kubernetes version for the nodes in this pool. Note that if this field - /// and `auto_upgrade` are both specified, they will fight each other for what the node version should - /// be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - /// recommended that you specify explicit versions as the provider will see spurious diffs - /// when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - /// `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + /// The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + /// will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + /// can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + /// versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + /// versions in a Terraform-compatible way. /// [Input("version")] public Input? Version { get; set; } diff --git a/sdk/dotnet/Container/Outputs/ClusterAddonsConfig.cs b/sdk/dotnet/Container/Outputs/ClusterAddonsConfig.cs index 13919450ac..bfa46be865 100644 --- a/sdk/dotnet/Container/Outputs/ClusterAddonsConfig.cs +++ b/sdk/dotnet/Container/Outputs/ClusterAddonsConfig.cs @@ -59,12 +59,12 @@ public sealed class ClusterAddonsConfig /// public readonly Outputs.ClusterAddonsConfigHttpLoadBalancing? HttpLoadBalancing; /// - /// . + /// ). /// Structure is documented below. /// public readonly Outputs.ClusterAddonsConfigIstioConfig? IstioConfig; /// - /// . + /// ). /// Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. /// public readonly Outputs.ClusterAddonsConfigKalmConfig? KalmConfig; diff --git a/sdk/dotnet/Container/Outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.cs b/sdk/dotnet/Container/Outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.cs index 33fb97672d..bda59768ad 100644 --- a/sdk/dotnet/Container/Outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.cs +++ b/sdk/dotnet/Container/Outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.cs @@ -34,6 +34,7 @@ public sealed class ClusterClusterAutoscalingAutoProvisioningDefaults /// public readonly Outputs.ClusterClusterAutoscalingAutoProvisioningDefaultsManagement? Management; /// + /// ) /// Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the /// specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such /// as "Intel Haswell" or "Intel Sandy Bridge". diff --git a/sdk/dotnet/Container/Outputs/ClusterNodeConfig.cs b/sdk/dotnet/Container/Outputs/ClusterNodeConfig.cs index 976c2c2efc..156c2d577c 100644 --- a/sdk/dotnet/Container/Outputs/ClusterNodeConfig.cs +++ b/sdk/dotnet/Container/Outputs/ClusterNodeConfig.cs @@ -14,7 +14,7 @@ namespace Pulumi.Gcp.Container.Outputs public sealed class ClusterNodeConfig { /// - /// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + /// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption /// public readonly string? BootDiskKmsKey; /// @@ -40,10 +40,6 @@ public sealed class ClusterNodeConfig /// Structure is documented below. /// public readonly Outputs.ClusterNodeConfigGcfsConfig? GcfsConfig; - /// - /// List of the type and count of accelerator cards attached to the instance. - /// Structure documented below. - /// public readonly ImmutableArray GuestAccelerators; /// /// Google Virtual NIC (gVNIC) is a virtual network interface. @@ -89,13 +85,6 @@ public sealed class ClusterNodeConfig /// [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). /// public readonly string? MachineType; - /// - /// The metadata key/value pairs assigned to instances in - /// the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - /// `true` by the API; if `metadata` is set but that default value is not - /// included, the provider will attempt to unset the value. To avoid this, set the - /// value in your config. - /// public readonly ImmutableDictionary? Metadata; /// /// Minimum CPU platform to be used by this instance. @@ -130,6 +119,10 @@ public sealed class ClusterNodeConfig /// for how these labels are applied to clusters, node pools and nodes. /// public readonly ImmutableDictionary? ResourceLabels; + /// + /// ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + /// Structure is documented below. + /// public readonly Outputs.ClusterNodeConfigSandboxConfig? SandboxConfig; /// /// The service account to be used by the Node VMs. @@ -151,16 +144,6 @@ public sealed class ClusterNodeConfig /// valid sources or targets for network firewalls. /// public readonly ImmutableArray Tags; - /// - /// A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - /// to apply to nodes. GKE's API can only set this field on cluster creation. - /// However, GKE will add taints to your nodes if you enable certain features such - /// as GPUs. If this field is set, any diffs on this field will cause the provider to - /// recreate the underlying resource. Taint values can be updated safely in - /// Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - /// this field to manage taints. If you do, `lifecycle.ignore_changes` is - /// recommended. Structure is documented below. - /// public readonly ImmutableArray Taints; /// /// Metadata configuration to expose to workloads on the node pool. diff --git a/sdk/dotnet/Container/Outputs/ClusterNodeConfigWorkloadMetadataConfig.cs b/sdk/dotnet/Container/Outputs/ClusterNodeConfigWorkloadMetadataConfig.cs index 83cd6f4b98..45252f8c5d 100644 --- a/sdk/dotnet/Container/Outputs/ClusterNodeConfigWorkloadMetadataConfig.cs +++ b/sdk/dotnet/Container/Outputs/ClusterNodeConfigWorkloadMetadataConfig.cs @@ -16,7 +16,7 @@ public sealed class ClusterNodeConfigWorkloadMetadataConfig /// /// How to expose the node metadata to the workload running on the node. /// Accepted values are: - /// * UNSPECIFIED: Not Set + /// * MODE_UNSPECIFIED: Not Set /// * GCE_METADATA: Expose all Compute Engine metadata to pods. /// * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. /// diff --git a/sdk/dotnet/Container/Outputs/ClusterNodePool.cs b/sdk/dotnet/Container/Outputs/ClusterNodePool.cs index 35d932d898..0f8c9700e7 100644 --- a/sdk/dotnet/Container/Outputs/ClusterNodePool.cs +++ b/sdk/dotnet/Container/Outputs/ClusterNodePool.cs @@ -36,18 +36,7 @@ public sealed class ClusterNodePool /// public readonly string? Name; public readonly string? NamePrefix; - /// - /// Configuration for - /// [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - /// public readonly Outputs.ClusterNodePoolNetworkConfig? NetworkConfig; - /// - /// Parameters used in creating the default node pool. - /// Generally, this field should not be used at the same time as a - /// `gcp.container.NodePool` or a `node_pool` block; this configuration - /// manages the default node pool, which isn't recommended to be used. - /// Structure is documented below. - /// public readonly Outputs.ClusterNodePoolNodeConfig? NodeConfig; public readonly int? NodeCount; /// diff --git a/sdk/dotnet/Container/Outputs/ClusterNodePoolNetworkConfig.cs b/sdk/dotnet/Container/Outputs/ClusterNodePoolNetworkConfig.cs index 1b600dc9e2..171084d232 100644 --- a/sdk/dotnet/Container/Outputs/ClusterNodePoolNetworkConfig.cs +++ b/sdk/dotnet/Container/Outputs/ClusterNodePoolNetworkConfig.cs @@ -13,9 +13,6 @@ namespace Pulumi.Gcp.Container.Outputs [OutputType] public sealed class ClusterNodePoolNetworkConfig { - /// - /// Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. - /// public readonly bool? CreatePodRange; /// /// Enables the private cluster feature, @@ -24,13 +21,7 @@ public sealed class ClusterNodePoolNetworkConfig /// endpoint via private networking. /// public readonly bool? EnablePrivateNodes; - /// - /// The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - /// public readonly string? PodIpv4CidrBlock; - /// - /// The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. - /// public readonly string? PodRange; [OutputConstructor] diff --git a/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfig.cs b/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfig.cs index 2ddd8a1736..ef897f659b 100644 --- a/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfig.cs +++ b/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfig.cs @@ -14,7 +14,7 @@ namespace Pulumi.Gcp.Container.Outputs public sealed class ClusterNodePoolNodeConfig { /// - /// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + /// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption /// public readonly string? BootDiskKmsKey; /// @@ -40,10 +40,6 @@ public sealed class ClusterNodePoolNodeConfig /// Structure is documented below. /// public readonly Outputs.ClusterNodePoolNodeConfigGcfsConfig? GcfsConfig; - /// - /// List of the type and count of accelerator cards attached to the instance. - /// Structure documented below. - /// public readonly ImmutableArray GuestAccelerators; /// /// Google Virtual NIC (gVNIC) is a virtual network interface. @@ -89,13 +85,6 @@ public sealed class ClusterNodePoolNodeConfig /// [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). /// public readonly string? MachineType; - /// - /// The metadata key/value pairs assigned to instances in - /// the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - /// `true` by the API; if `metadata` is set but that default value is not - /// included, the provider will attempt to unset the value. To avoid this, set the - /// value in your config. - /// public readonly ImmutableDictionary? Metadata; /// /// Minimum CPU platform to be used by this instance. @@ -130,6 +119,10 @@ public sealed class ClusterNodePoolNodeConfig /// for how these labels are applied to clusters, node pools and nodes. /// public readonly ImmutableDictionary? ResourceLabels; + /// + /// ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + /// Structure is documented below. + /// public readonly Outputs.ClusterNodePoolNodeConfigSandboxConfig? SandboxConfig; /// /// The service account to be used by the Node VMs. @@ -151,16 +144,6 @@ public sealed class ClusterNodePoolNodeConfig /// valid sources or targets for network firewalls. /// public readonly ImmutableArray Tags; - /// - /// A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - /// to apply to nodes. GKE's API can only set this field on cluster creation. - /// However, GKE will add taints to your nodes if you enable certain features such - /// as GPUs. If this field is set, any diffs on this field will cause the provider to - /// recreate the underlying resource. Taint values can be updated safely in - /// Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - /// this field to manage taints. If you do, `lifecycle.ignore_changes` is - /// recommended. Structure is documented below. - /// public readonly ImmutableArray Taints; /// /// Metadata configuration to expose to workloads on the node pool. diff --git a/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfigWorkloadMetadataConfig.cs b/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfigWorkloadMetadataConfig.cs index a9669fefdb..68c579269d 100644 --- a/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfigWorkloadMetadataConfig.cs +++ b/sdk/dotnet/Container/Outputs/ClusterNodePoolNodeConfigWorkloadMetadataConfig.cs @@ -16,7 +16,7 @@ public sealed class ClusterNodePoolNodeConfigWorkloadMetadataConfig /// /// How to expose the node metadata to the workload running on the node. /// Accepted values are: - /// * UNSPECIFIED: Not Set + /// * MODE_UNSPECIFIED: Not Set /// * GCE_METADATA: Expose all Compute Engine metadata to pods. /// * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. /// diff --git a/sdk/dotnet/Container/Outputs/ClusterPrivateClusterConfig.cs b/sdk/dotnet/Container/Outputs/ClusterPrivateClusterConfig.cs index f4618bf94c..f31394e5e2 100644 --- a/sdk/dotnet/Container/Outputs/ClusterPrivateClusterConfig.cs +++ b/sdk/dotnet/Container/Outputs/ClusterPrivateClusterConfig.cs @@ -27,11 +27,6 @@ public sealed class ClusterPrivateClusterConfig /// endpoint via private networking. /// public readonly bool? EnablePrivateNodes; - /// - /// Controls cluster master global - /// access settings. If unset, the provider will no longer manage this field and will - /// not modify the previously-set value. Structure is documented below. - /// public readonly Outputs.ClusterPrivateClusterConfigMasterGlobalAccessConfig? MasterGlobalAccessConfig; /// /// The IP range in CIDR notation to use for diff --git a/sdk/dotnet/DataCatalog/EntryGroup.cs b/sdk/dotnet/DataCatalog/EntryGroup.cs index b9184e07db..fba344f23f 100644 --- a/sdk/dotnet/DataCatalog/EntryGroup.cs +++ b/sdk/dotnet/DataCatalog/EntryGroup.cs @@ -46,8 +46,8 @@ namespace Pulumi.Gcp.DataCatalog /// { /// var basicEntryGroup = new Gcp.DataCatalog.EntryGroup("basicEntryGroup", new() /// { - /// Description = "example entry group", - /// DisplayName = "entry group", + /// Description = "entry group created by Terraform", + /// DisplayName = "terraform entry group", /// EntryGroupId = "my_group", /// }); /// diff --git a/sdk/dotnet/DataCatalog/PolicyTag.cs b/sdk/dotnet/DataCatalog/PolicyTag.cs index 132012aca7..b217195959 100644 --- a/sdk/dotnet/DataCatalog/PolicyTag.cs +++ b/sdk/dotnet/DataCatalog/PolicyTag.cs @@ -10,14 +10,6 @@ namespace Pulumi.Gcp.DataCatalog { /// - /// Denotes one policy tag in a taxonomy. - /// - /// To get more information about PolicyTag, see: - /// - /// * [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies.policyTags) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/data-catalog/docs) - /// /// ## Example Usage /// ### Data Catalog Taxonomies Policy Tag Basic /// diff --git a/sdk/dotnet/DataCatalog/PolicyTagIamBinding.cs b/sdk/dotnet/DataCatalog/PolicyTagIamBinding.cs index 797d159d95..8af64e2ea6 100644 --- a/sdk/dotnet/DataCatalog/PolicyTagIamBinding.cs +++ b/sdk/dotnet/DataCatalog/PolicyTagIamBinding.cs @@ -10,99 +10,6 @@ namespace Pulumi.Gcp.DataCatalog { /// - /// Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - /// - /// * `gcp.datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - /// * `gcp.datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - /// * `gcp.datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - /// - /// > **Note:** `gcp.datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.PolicyTagIamBinding` and `gcp.datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_data\_catalog\_policy\_tag\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.DataCatalog.PolicyTagIamPolicy("policy", new() - /// { - /// PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_data\_catalog\_policy\_tag\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.DataCatalog.PolicyTagIamBinding("binding", new() - /// { - /// PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name, - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_data\_catalog\_policy\_tag\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.DataCatalog.PolicyTagIamMember("member", new() - /// { - /// PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name, - /// Role = "roles/viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/DataCatalog/PolicyTagIamMember.cs b/sdk/dotnet/DataCatalog/PolicyTagIamMember.cs index 1be3b9b888..013ec54baf 100644 --- a/sdk/dotnet/DataCatalog/PolicyTagIamMember.cs +++ b/sdk/dotnet/DataCatalog/PolicyTagIamMember.cs @@ -10,99 +10,6 @@ namespace Pulumi.Gcp.DataCatalog { /// - /// Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - /// - /// * `gcp.datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - /// * `gcp.datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - /// * `gcp.datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - /// - /// > **Note:** `gcp.datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.PolicyTagIamBinding` and `gcp.datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_data\_catalog\_policy\_tag\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.DataCatalog.PolicyTagIamPolicy("policy", new() - /// { - /// PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_data\_catalog\_policy\_tag\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.DataCatalog.PolicyTagIamBinding("binding", new() - /// { - /// PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name, - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_data\_catalog\_policy\_tag\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.DataCatalog.PolicyTagIamMember("member", new() - /// { - /// PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name, - /// Role = "roles/viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/DataCatalog/PolicyTagIamPolicy.cs b/sdk/dotnet/DataCatalog/PolicyTagIamPolicy.cs index e53cddb1c4..5126517afa 100644 --- a/sdk/dotnet/DataCatalog/PolicyTagIamPolicy.cs +++ b/sdk/dotnet/DataCatalog/PolicyTagIamPolicy.cs @@ -10,99 +10,6 @@ namespace Pulumi.Gcp.DataCatalog { /// - /// Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - /// - /// * `gcp.datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - /// * `gcp.datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - /// * `gcp.datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - /// - /// > **Note:** `gcp.datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.PolicyTagIamBinding` and `gcp.datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_data\_catalog\_policy\_tag\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.DataCatalog.PolicyTagIamPolicy("policy", new() - /// { - /// PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_data\_catalog\_policy\_tag\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.DataCatalog.PolicyTagIamBinding("binding", new() - /// { - /// PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name, - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_data\_catalog\_policy\_tag\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.DataCatalog.PolicyTagIamMember("member", new() - /// { - /// PolicyTag = google_data_catalog_policy_tag.Basic_policy_tag.Name, - /// Role = "roles/viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/DataCatalog/Taxonomy.cs b/sdk/dotnet/DataCatalog/Taxonomy.cs index 96fab0bcd8..a68babed1e 100644 --- a/sdk/dotnet/DataCatalog/Taxonomy.cs +++ b/sdk/dotnet/DataCatalog/Taxonomy.cs @@ -10,14 +10,6 @@ namespace Pulumi.Gcp.DataCatalog { /// - /// A collection of policy tags that classify data along a common axis. - /// - /// To get more information about Taxonomy, see: - /// - /// * [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/data-catalog/docs) - /// /// ## Example Usage /// ### Data Catalog Taxonomy Basic /// diff --git a/sdk/dotnet/DataCatalog/TaxonomyIamBinding.cs b/sdk/dotnet/DataCatalog/TaxonomyIamBinding.cs index 56f24b1e67..9e050eb9d5 100644 --- a/sdk/dotnet/DataCatalog/TaxonomyIamBinding.cs +++ b/sdk/dotnet/DataCatalog/TaxonomyIamBinding.cs @@ -10,99 +10,6 @@ namespace Pulumi.Gcp.DataCatalog { /// - /// Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - /// - /// * `gcp.datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - /// * `gcp.datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - /// * `gcp.datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - /// - /// > **Note:** `gcp.datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.TaxonomyIamBinding` and `gcp.datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_data\_catalog\_taxonomy\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.DataCatalog.TaxonomyIamPolicy("policy", new() - /// { - /// Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_data\_catalog\_taxonomy\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.DataCatalog.TaxonomyIamBinding("binding", new() - /// { - /// Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name, - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_data\_catalog\_taxonomy\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.DataCatalog.TaxonomyIamMember("member", new() - /// { - /// Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name, - /// Role = "roles/viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/DataCatalog/TaxonomyIamMember.cs b/sdk/dotnet/DataCatalog/TaxonomyIamMember.cs index e98abfc79c..cb9a398b03 100644 --- a/sdk/dotnet/DataCatalog/TaxonomyIamMember.cs +++ b/sdk/dotnet/DataCatalog/TaxonomyIamMember.cs @@ -10,99 +10,6 @@ namespace Pulumi.Gcp.DataCatalog { /// - /// Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - /// - /// * `gcp.datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - /// * `gcp.datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - /// * `gcp.datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - /// - /// > **Note:** `gcp.datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.TaxonomyIamBinding` and `gcp.datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_data\_catalog\_taxonomy\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.DataCatalog.TaxonomyIamPolicy("policy", new() - /// { - /// Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_data\_catalog\_taxonomy\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.DataCatalog.TaxonomyIamBinding("binding", new() - /// { - /// Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name, - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_data\_catalog\_taxonomy\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.DataCatalog.TaxonomyIamMember("member", new() - /// { - /// Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name, - /// Role = "roles/viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/DataCatalog/TaxonomyIamPolicy.cs b/sdk/dotnet/DataCatalog/TaxonomyIamPolicy.cs index 4f13d5ab2b..45e8f5beac 100644 --- a/sdk/dotnet/DataCatalog/TaxonomyIamPolicy.cs +++ b/sdk/dotnet/DataCatalog/TaxonomyIamPolicy.cs @@ -10,99 +10,6 @@ namespace Pulumi.Gcp.DataCatalog { /// - /// Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - /// - /// * `gcp.datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - /// * `gcp.datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - /// * `gcp.datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - /// - /// > **Note:** `gcp.datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.TaxonomyIamBinding` and `gcp.datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_data\_catalog\_taxonomy\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.DataCatalog.TaxonomyIamPolicy("policy", new() - /// { - /// Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_data\_catalog\_taxonomy\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.DataCatalog.TaxonomyIamBinding("binding", new() - /// { - /// Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name, - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_data\_catalog\_taxonomy\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.DataCatalog.TaxonomyIamMember("member", new() - /// { - /// Taxonomy = google_data_catalog_taxonomy.Basic_taxonomy.Name, - /// Role = "roles/viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/DataFusion/Instance.cs b/sdk/dotnet/DataFusion/Instance.cs index 58f3c3da50..2bc509a5c2 100644 --- a/sdk/dotnet/DataFusion/Instance.cs +++ b/sdk/dotnet/DataFusion/Instance.cs @@ -16,7 +16,7 @@ namespace Pulumi.Gcp.DataFusion /// /// * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + /// * [Official Documentation](https://cloud.google.com/data-fusion/docs/) /// /// ## Example Usage /// ### Data Fusion Instance Basic @@ -367,12 +367,12 @@ public partial class Instance : global::Pulumi.CustomResource /// /// The current state of this Data Fusion instance. - /// * CREATING: Instance is being created - /// * RUNNING: Instance is running and ready for requests - /// * FAILED: Instance creation failed - /// * DELETING: Instance is being deleted - /// * UPGRADING: Instance is being upgraded - /// * RESTARTING: Instance is being restarted + /// - CREATING: Instance is being created + /// - RUNNING: Instance is running and ready for requests + /// - FAILED: Instance creation failed + /// - DELETING: Instance is being deleted + /// - UPGRADING: Instance is being upgraded + /// - RESTARTING: Instance is being restarted /// [Output("state")] public Output State { get; private set; } = null!; @@ -392,12 +392,12 @@ public partial class Instance : global::Pulumi.CustomResource /// /// Represents the type of Data Fusion instance. Each type is configured with /// the default settings for processing and memory. - /// * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + /// - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines /// using point and click UI. However, there are certain limitations, such as fewer number /// of concurrent pipelines, no support for streaming pipelines, etc. - /// * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + /// - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features /// available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - /// * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + /// - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but /// with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration /// pipelines at low cost. /// Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -581,12 +581,12 @@ public InputMap Options /// /// Represents the type of Data Fusion instance. Each type is configured with /// the default settings for processing and memory. - /// * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + /// - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines /// using point and click UI. However, there are certain limitations, such as fewer number /// of concurrent pipelines, no support for streaming pipelines, etc. - /// * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + /// - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features /// available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - /// * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + /// - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but /// with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration /// pipelines at low cost. /// Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -761,12 +761,12 @@ public InputMap Options /// /// The current state of this Data Fusion instance. - /// * CREATING: Instance is being created - /// * RUNNING: Instance is running and ready for requests - /// * FAILED: Instance creation failed - /// * DELETING: Instance is being deleted - /// * UPGRADING: Instance is being upgraded - /// * RESTARTING: Instance is being restarted + /// - CREATING: Instance is being created + /// - RUNNING: Instance is running and ready for requests + /// - FAILED: Instance creation failed + /// - DELETING: Instance is being deleted + /// - UPGRADING: Instance is being upgraded + /// - RESTARTING: Instance is being restarted /// [Input("state")] public Input? State { get; set; } @@ -786,12 +786,12 @@ public InputMap Options /// /// Represents the type of Data Fusion instance. Each type is configured with /// the default settings for processing and memory. - /// * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + /// - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines /// using point and click UI. However, there are certain limitations, such as fewer number /// of concurrent pipelines, no support for streaming pipelines, etc. - /// * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + /// - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features /// available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - /// * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + /// - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but /// with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration /// pipelines at low cost. /// Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionArgs.cs index 0540ed35a8..afe327b467 100644 --- a/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionArgs.cs +++ b/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionArgs.cs @@ -20,7 +20,19 @@ public sealed class PreventionJobTriggerInspectJobActionArgs : global::Pulumi.Re public Input? PubSub { get; set; } /// - /// Schedule for triggered jobs + /// Publish findings of a DlpJob to Data Catalog. + /// + [Input("publishFindingsToCloudDataCatalog")] + public Input? PublishFindingsToCloudDataCatalog { get; set; } + + /// + /// Publish the result summary of a DlpJob to the Cloud Security Command Center. + /// + [Input("publishSummaryToCscc")] + public Input? PublishSummaryToCscc { get; set; } + + /// + /// If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk /// Structure is documented below. /// [Input("saveFindings")] diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionGetArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionGetArgs.cs index 2fc3ca7b37..962fdf2d72 100644 --- a/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionGetArgs.cs +++ b/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionGetArgs.cs @@ -20,7 +20,19 @@ public sealed class PreventionJobTriggerInspectJobActionGetArgs : global::Pulumi public Input? PubSub { get; set; } /// - /// Schedule for triggered jobs + /// Publish findings of a DlpJob to Data Catalog. + /// + [Input("publishFindingsToCloudDataCatalog")] + public Input? PublishFindingsToCloudDataCatalog { get; set; } + + /// + /// Publish the result summary of a DlpJob to the Cloud Security Command Center. + /// + [Input("publishSummaryToCscc")] + public Input? PublishSummaryToCscc { get; set; } + + /// + /// If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk /// Structure is documented below. /// [Input("saveFindings")] diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs.cs new file mode 100644 index 0000000000..e71011aa44 --- /dev/null +++ b/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs.cs @@ -0,0 +1,20 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.DataLoss.Inputs +{ + + public sealed class PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs : global::Pulumi.ResourceArgs + { + public PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs() + { + } + public static new PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs Empty => new PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs(); + } +} diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogGetArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogGetArgs.cs new file mode 100644 index 0000000000..6dd591e96e --- /dev/null +++ b/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogGetArgs.cs @@ -0,0 +1,20 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.DataLoss.Inputs +{ + + public sealed class PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogGetArgs : global::Pulumi.ResourceArgs + { + public PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogGetArgs() + { + } + public static new PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogGetArgs Empty => new PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogGetArgs(); + } +} diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs.cs new file mode 100644 index 0000000000..eb19d471e0 --- /dev/null +++ b/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs.cs @@ -0,0 +1,20 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.DataLoss.Inputs +{ + + public sealed class PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs : global::Pulumi.ResourceArgs + { + public PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs() + { + } + public static new PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs Empty => new PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs(); + } +} diff --git a/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishSummaryToCsccGetArgs.cs b/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishSummaryToCsccGetArgs.cs new file mode 100644 index 0000000000..3ba626cabd --- /dev/null +++ b/sdk/dotnet/DataLoss/Inputs/PreventionJobTriggerInspectJobActionPublishSummaryToCsccGetArgs.cs @@ -0,0 +1,20 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.DataLoss.Inputs +{ + + public sealed class PreventionJobTriggerInspectJobActionPublishSummaryToCsccGetArgs : global::Pulumi.ResourceArgs + { + public PreventionJobTriggerInspectJobActionPublishSummaryToCsccGetArgs() + { + } + public static new PreventionJobTriggerInspectJobActionPublishSummaryToCsccGetArgs Empty => new PreventionJobTriggerInspectJobActionPublishSummaryToCsccGetArgs(); + } +} diff --git a/sdk/dotnet/DataLoss/Outputs/PreventionJobTriggerInspectJobAction.cs b/sdk/dotnet/DataLoss/Outputs/PreventionJobTriggerInspectJobAction.cs index 9ba03797ff..3da0ee1d41 100644 --- a/sdk/dotnet/DataLoss/Outputs/PreventionJobTriggerInspectJobAction.cs +++ b/sdk/dotnet/DataLoss/Outputs/PreventionJobTriggerInspectJobAction.cs @@ -19,7 +19,15 @@ public sealed class PreventionJobTriggerInspectJobAction /// public readonly Outputs.PreventionJobTriggerInspectJobActionPubSub? PubSub; /// - /// Schedule for triggered jobs + /// Publish findings of a DlpJob to Data Catalog. + /// + public readonly Outputs.PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog? PublishFindingsToCloudDataCatalog; + /// + /// Publish the result summary of a DlpJob to the Cloud Security Command Center. + /// + public readonly Outputs.PreventionJobTriggerInspectJobActionPublishSummaryToCscc? PublishSummaryToCscc; + /// + /// If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk /// Structure is documented below. /// public readonly Outputs.PreventionJobTriggerInspectJobActionSaveFindings? SaveFindings; @@ -28,9 +36,15 @@ public sealed class PreventionJobTriggerInspectJobAction private PreventionJobTriggerInspectJobAction( Outputs.PreventionJobTriggerInspectJobActionPubSub? pubSub, + Outputs.PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog? publishFindingsToCloudDataCatalog, + + Outputs.PreventionJobTriggerInspectJobActionPublishSummaryToCscc? publishSummaryToCscc, + Outputs.PreventionJobTriggerInspectJobActionSaveFindings? saveFindings) { PubSub = pubSub; + PublishFindingsToCloudDataCatalog = publishFindingsToCloudDataCatalog; + PublishSummaryToCscc = publishSummaryToCscc; SaveFindings = saveFindings; } } diff --git a/sdk/dotnet/DataLoss/Outputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog.cs b/sdk/dotnet/DataLoss/Outputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog.cs new file mode 100644 index 0000000000..c6c12fc98b --- /dev/null +++ b/sdk/dotnet/DataLoss/Outputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog.cs @@ -0,0 +1,21 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.DataLoss.Outputs +{ + + [OutputType] + public sealed class PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog + { + [OutputConstructor] + private PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog() + { + } + } +} diff --git a/sdk/dotnet/DataLoss/Outputs/PreventionJobTriggerInspectJobActionPublishSummaryToCscc.cs b/sdk/dotnet/DataLoss/Outputs/PreventionJobTriggerInspectJobActionPublishSummaryToCscc.cs new file mode 100644 index 0000000000..3e94a470fb --- /dev/null +++ b/sdk/dotnet/DataLoss/Outputs/PreventionJobTriggerInspectJobActionPublishSummaryToCscc.cs @@ -0,0 +1,21 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.DataLoss.Outputs +{ + + [OutputType] + public sealed class PreventionJobTriggerInspectJobActionPublishSummaryToCscc + { + [OutputConstructor] + private PreventionJobTriggerInspectJobActionPublishSummaryToCscc() + { + } + } +} diff --git a/sdk/dotnet/Dataflow/FlexTemplateJob.cs b/sdk/dotnet/Dataflow/FlexTemplateJob.cs index ce3d0fc991..4c2e915908 100644 --- a/sdk/dotnet/Dataflow/FlexTemplateJob.cs +++ b/sdk/dotnet/Dataflow/FlexTemplateJob.cs @@ -33,8 +33,7 @@ public partial class FlexTemplateJob : global::Pulumi.CustomResource /// /// User labels to be specified for the job. Keys and values /// should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - /// page. **Note**: This field is marked as deprecated as the API does not currently - /// support adding labels. + /// page. /// **NOTE**: Google-provided Dataflow templates often provide default labels /// that begin with `goog-dataflow-provided`. Unless explicitly set in config, these /// labels will be ignored to prevent diffs on re-apply. @@ -48,10 +47,6 @@ public partial class FlexTemplateJob : global::Pulumi.CustomResource [Output("name")] public Output Name { get; private set; } = null!; - /// - /// One of "drain" or "cancel". Specifies behavior of - /// deletion during `pulumi destroy`. See above note. - /// [Output("onDelete")] public Output OnDelete { get; private set; } = null!; @@ -149,8 +144,7 @@ public sealed class FlexTemplateJobArgs : global::Pulumi.ResourceArgs /// /// User labels to be specified for the job. Keys and values /// should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - /// page. **Note**: This field is marked as deprecated as the API does not currently - /// support adding labels. + /// page. /// **NOTE**: Google-provided Dataflow templates often provide default labels /// that begin with `goog-dataflow-provided`. Unless explicitly set in config, these /// labels will be ignored to prevent diffs on re-apply. @@ -167,10 +161,6 @@ public InputMap Labels [Input("name")] public Input? Name { get; set; } - /// - /// One of "drain" or "cancel". Specifies behavior of - /// deletion during `pulumi destroy`. See above note. - /// [Input("onDelete")] public Input? OnDelete { get; set; } @@ -236,8 +226,7 @@ public sealed class FlexTemplateJobState : global::Pulumi.ResourceArgs /// /// User labels to be specified for the job. Keys and values /// should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - /// page. **Note**: This field is marked as deprecated as the API does not currently - /// support adding labels. + /// page. /// **NOTE**: Google-provided Dataflow templates often provide default labels /// that begin with `goog-dataflow-provided`. Unless explicitly set in config, these /// labels will be ignored to prevent diffs on re-apply. @@ -254,10 +243,6 @@ public InputMap Labels [Input("name")] public Input? Name { get; set; } - /// - /// One of "drain" or "cancel". Specifies behavior of - /// deletion during `pulumi destroy`. See above note. - /// [Input("onDelete")] public Input? OnDelete { get; set; } diff --git a/sdk/dotnet/Dataflow/Job.cs b/sdk/dotnet/Dataflow/Job.cs index 7804395681..c67d079afe 100644 --- a/sdk/dotnet/Dataflow/Job.cs +++ b/sdk/dotnet/Dataflow/Job.cs @@ -85,7 +85,7 @@ public partial class Job : global::Pulumi.CustomResource public Output Network { get; private set; } = null!; /// - /// One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + /// One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. /// [Output("onDelete")] public Output OnDelete { get; private set; } = null!; @@ -115,7 +115,9 @@ public partial class Job : global::Pulumi.CustomResource public Output ServiceAccountEmail { get; private set; } = null!; /// - /// If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + /// If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + /// terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + /// different, e.g. by embedding a release ID or by using a random_id. /// [Output("skipWaitOnJobTermination")] public Output SkipWaitOnJobTermination { get; private set; } = null!; @@ -278,7 +280,7 @@ public InputMap Labels public Input? Network { get; set; } /// - /// One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + /// One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. /// [Input("onDelete")] public Input? OnDelete { get; set; } @@ -314,7 +316,9 @@ public InputMap Parameters public Input? ServiceAccountEmail { get; set; } /// - /// If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + /// If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + /// terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + /// different, e.g. by embedding a release ID or by using a random_id. /// [Input("skipWaitOnJobTermination")] public Input? SkipWaitOnJobTermination { get; set; } @@ -439,7 +443,7 @@ public InputMap Labels public Input? Network { get; set; } /// - /// One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + /// One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. /// [Input("onDelete")] public Input? OnDelete { get; set; } @@ -475,7 +479,9 @@ public InputMap Parameters public Input? ServiceAccountEmail { get; set; } /// - /// If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + /// If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + /// terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + /// different, e.g. by embedding a release ID or by using a random_id. /// [Input("skipWaitOnJobTermination")] public Input? SkipWaitOnJobTermination { get; set; } diff --git a/sdk/dotnet/Dataproc/ClusterIAMBinding.cs b/sdk/dotnet/Dataproc/ClusterIAMBinding.cs index 97840c08b0..1a23d5fe79 100644 --- a/sdk/dotnet/Dataproc/ClusterIAMBinding.cs +++ b/sdk/dotnet/Dataproc/ClusterIAMBinding.cs @@ -137,17 +137,9 @@ public partial class ClusterIAMBinding : global::Pulumi.CustomResource [Output("members")] public Output> Members { get; private set; } = null!; - /// - /// The project in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Output("project")] public Output Project { get; private set; } = null!; - /// - /// The region in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Output("region")] public Output Region { get; private set; } = null!; @@ -222,17 +214,9 @@ public InputList Members set => _members = value; } - /// - /// The project in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Input("project")] public Input? Project { get; set; } - /// - /// The region in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Input("region")] public Input? Region { get; set; } @@ -275,17 +259,9 @@ public InputList Members set => _members = value; } - /// - /// The project in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Input("project")] public Input? Project { get; set; } - /// - /// The region in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Input("region")] public Input? Region { get; set; } diff --git a/sdk/dotnet/Dataproc/ClusterIAMMember.cs b/sdk/dotnet/Dataproc/ClusterIAMMember.cs index 8d4641be9b..7ada637453 100644 --- a/sdk/dotnet/Dataproc/ClusterIAMMember.cs +++ b/sdk/dotnet/Dataproc/ClusterIAMMember.cs @@ -137,17 +137,9 @@ public partial class ClusterIAMMember : global::Pulumi.CustomResource [Output("member")] public Output Member { get; private set; } = null!; - /// - /// The project in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Output("project")] public Output Project { get; private set; } = null!; - /// - /// The region in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Output("region")] public Output Region { get; private set; } = null!; @@ -217,17 +209,9 @@ public sealed class ClusterIAMMemberArgs : global::Pulumi.ResourceArgs [Input("member", required: true)] public Input Member { get; set; } = null!; - /// - /// The project in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Input("project")] public Input? Project { get; set; } - /// - /// The region in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Input("region")] public Input? Region { get; set; } @@ -265,17 +249,9 @@ public sealed class ClusterIAMMemberState : global::Pulumi.ResourceArgs [Input("member")] public Input? Member { get; set; } - /// - /// The project in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Input("project")] public Input? Project { get; set; } - /// - /// The region in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Input("region")] public Input? Region { get; set; } diff --git a/sdk/dotnet/Dataproc/ClusterIAMPolicy.cs b/sdk/dotnet/Dataproc/ClusterIAMPolicy.cs index ce8acb6198..7f9f87fa46 100644 --- a/sdk/dotnet/Dataproc/ClusterIAMPolicy.cs +++ b/sdk/dotnet/Dataproc/ClusterIAMPolicy.cs @@ -137,17 +137,9 @@ public partial class ClusterIAMPolicy : global::Pulumi.CustomResource [Output("policyData")] public Output PolicyData { get; private set; } = null!; - /// - /// The project in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Output("project")] public Output Project { get; private set; } = null!; - /// - /// The region in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Output("region")] public Output Region { get; private set; } = null!; @@ -209,17 +201,9 @@ public sealed class ClusterIAMPolicyArgs : global::Pulumi.ResourceArgs [Input("policyData", required: true)] public Input PolicyData { get; set; } = null!; - /// - /// The project in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Input("project")] public Input? Project { get; set; } - /// - /// The region in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Input("region")] public Input? Region { get; set; } @@ -249,17 +233,9 @@ public sealed class ClusterIAMPolicyState : global::Pulumi.ResourceArgs [Input("policyData")] public Input? PolicyData { get; set; } - /// - /// The project in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Input("project")] public Input? Project { get; set; } - /// - /// The region in which the cluster belongs. If it - /// is not provided, the provider will use a default. - /// [Input("region")] public Input? Region { get; set; } diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigArgs.cs index 6e981de4c2..5117498af8 100644 --- a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigArgs.cs +++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigArgs.cs @@ -43,6 +43,18 @@ public InputMap Metadata [Input("network")] public Input? Network { get; set; } + /// + /// Node Group Affinity for sole-tenant clusters. + /// + [Input("nodeGroupAffinity")] + public Input? NodeGroupAffinity { get; set; } + + /// + /// Reservation Affinity for consuming zonal reservation. + /// + [Input("reservationAffinity")] + public Input? ReservationAffinity { get; set; } + /// /// The service account to be used by the Node VMs. /// If not specified, the "default" service account is used. diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigGetArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigGetArgs.cs index 1d9cce3f6e..e21c4174e5 100644 --- a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigGetArgs.cs +++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigGetArgs.cs @@ -43,6 +43,18 @@ public InputMap Metadata [Input("network")] public Input? Network { get; set; } + /// + /// Node Group Affinity for sole-tenant clusters. + /// + [Input("nodeGroupAffinity")] + public Input? NodeGroupAffinity { get; set; } + + /// + /// Reservation Affinity for consuming zonal reservation. + /// + [Input("reservationAffinity")] + public Input? ReservationAffinity { get; set; } + /// /// The service account to be used by the Node VMs. /// If not specified, the "default" service account is used. diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs.cs new file mode 100644 index 0000000000..0bb19f2a72 --- /dev/null +++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs.cs @@ -0,0 +1,26 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Dataproc.Inputs +{ + + public sealed class ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs : global::Pulumi.ResourceArgs + { + /// + /// The URI of a sole-tenant node group resource that the cluster will be created on. + /// + [Input("nodeGroupUri", required: true)] + public Input NodeGroupUri { get; set; } = null!; + + public ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs() + { + } + public static new ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs Empty => new ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs(); + } +} diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinityGetArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinityGetArgs.cs new file mode 100644 index 0000000000..4f49476dd4 --- /dev/null +++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinityGetArgs.cs @@ -0,0 +1,26 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Dataproc.Inputs +{ + + public sealed class ClusterClusterConfigGceClusterConfigNodeGroupAffinityGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The URI of a sole-tenant node group resource that the cluster will be created on. + /// + [Input("nodeGroupUri", required: true)] + public Input NodeGroupUri { get; set; } = null!; + + public ClusterClusterConfigGceClusterConfigNodeGroupAffinityGetArgs() + { + } + public static new ClusterClusterConfigGceClusterConfigNodeGroupAffinityGetArgs Empty => new ClusterClusterConfigGceClusterConfigNodeGroupAffinityGetArgs(); + } +} diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigReservationAffinityArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigReservationAffinityArgs.cs new file mode 100644 index 0000000000..31b679d646 --- /dev/null +++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigReservationAffinityArgs.cs @@ -0,0 +1,44 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Dataproc.Inputs +{ + + public sealed class ClusterClusterConfigGceClusterConfigReservationAffinityArgs : global::Pulumi.ResourceArgs + { + /// + /// Corresponds to the type of reservation consumption. + /// + [Input("consumeReservationType")] + public Input? ConsumeReservationType { get; set; } + + /// + /// Corresponds to the label key of reservation resource. + /// + [Input("key")] + public Input? Key { get; set; } + + [Input("values")] + private InputList? _values; + + /// + /// Corresponds to the label values of reservation resource. + /// + public InputList Values + { + get => _values ?? (_values = new InputList()); + set => _values = value; + } + + public ClusterClusterConfigGceClusterConfigReservationAffinityArgs() + { + } + public static new ClusterClusterConfigGceClusterConfigReservationAffinityArgs Empty => new ClusterClusterConfigGceClusterConfigReservationAffinityArgs(); + } +} diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigReservationAffinityGetArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigReservationAffinityGetArgs.cs new file mode 100644 index 0000000000..7fe7dd21b9 --- /dev/null +++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigGceClusterConfigReservationAffinityGetArgs.cs @@ -0,0 +1,44 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Dataproc.Inputs +{ + + public sealed class ClusterClusterConfigGceClusterConfigReservationAffinityGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Corresponds to the type of reservation consumption. + /// + [Input("consumeReservationType")] + public Input? ConsumeReservationType { get; set; } + + /// + /// Corresponds to the label key of reservation resource. + /// + [Input("key")] + public Input? Key { get; set; } + + [Input("values")] + private InputList? _values; + + /// + /// Corresponds to the label values of reservation resource. + /// + public InputList Values + { + get => _values ?? (_values = new InputList()); + set => _values = value; + } + + public ClusterClusterConfigGceClusterConfigReservationAffinityGetArgs() + { + } + public static new ClusterClusterConfigGceClusterConfigReservationAffinityGetArgs Empty => new ClusterClusterConfigGceClusterConfigReservationAffinityGetArgs(); + } +} diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigArgs.cs index b801585356..6bf1098aa1 100644 --- a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigArgs.cs +++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigArgs.cs @@ -39,6 +39,7 @@ public InputList InstanceNames /// * PREEMPTIBILITY_UNSPECIFIED /// * NON_PREEMPTIBLE /// * PREEMPTIBLE + /// * SPOT /// [Input("preemptibility")] public Input? Preemptibility { get; set; } diff --git a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigGetArgs.cs b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigGetArgs.cs index 63e84bd658..dbaa38da11 100644 --- a/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigGetArgs.cs +++ b/sdk/dotnet/Dataproc/Inputs/ClusterClusterConfigPreemptibleWorkerConfigGetArgs.cs @@ -39,6 +39,7 @@ public InputList InstanceNames /// * PREEMPTIBILITY_UNSPECIFIED /// * NON_PREEMPTIBLE /// * PREEMPTIBLE + /// * SPOT /// [Input("preemptibility")] public Input? Preemptibility { get; set; } diff --git a/sdk/dotnet/Dataproc/JobIAMBinding.cs b/sdk/dotnet/Dataproc/JobIAMBinding.cs index a7a953c001..8d4b5fcf6c 100644 --- a/sdk/dotnet/Dataproc/JobIAMBinding.cs +++ b/sdk/dotnet/Dataproc/JobIAMBinding.cs @@ -134,17 +134,9 @@ public partial class JobIAMBinding : global::Pulumi.CustomResource [Output("members")] public Output> Members { get; private set; } = null!; - /// - /// The project in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Output("project")] public Output Project { get; private set; } = null!; - /// - /// The region in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Output("region")] public Output Region { get; private set; } = null!; @@ -216,17 +208,9 @@ public InputList Members set => _members = value; } - /// - /// The project in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Input("project")] public Input? Project { get; set; } - /// - /// The region in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Input("region")] public Input? Region { get; set; } @@ -266,17 +250,9 @@ public InputList Members set => _members = value; } - /// - /// The project in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Input("project")] public Input? Project { get; set; } - /// - /// The region in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Input("region")] public Input? Region { get; set; } diff --git a/sdk/dotnet/Dataproc/JobIAMMember.cs b/sdk/dotnet/Dataproc/JobIAMMember.cs index 1c4212c38b..52dcbc2dd3 100644 --- a/sdk/dotnet/Dataproc/JobIAMMember.cs +++ b/sdk/dotnet/Dataproc/JobIAMMember.cs @@ -134,17 +134,9 @@ public partial class JobIAMMember : global::Pulumi.CustomResource [Output("member")] public Output Member { get; private set; } = null!; - /// - /// The project in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Output("project")] public Output Project { get; private set; } = null!; - /// - /// The region in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Output("region")] public Output Region { get; private set; } = null!; @@ -211,17 +203,9 @@ public sealed class JobIAMMemberArgs : global::Pulumi.ResourceArgs [Input("member", required: true)] public Input Member { get; set; } = null!; - /// - /// The project in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Input("project")] public Input? Project { get; set; } - /// - /// The region in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Input("region")] public Input? Region { get; set; } @@ -256,17 +240,9 @@ public sealed class JobIAMMemberState : global::Pulumi.ResourceArgs [Input("member")] public Input? Member { get; set; } - /// - /// The project in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Input("project")] public Input? Project { get; set; } - /// - /// The region in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Input("region")] public Input? Region { get; set; } diff --git a/sdk/dotnet/Dataproc/JobIAMPolicy.cs b/sdk/dotnet/Dataproc/JobIAMPolicy.cs index f8490ec099..14a889920e 100644 --- a/sdk/dotnet/Dataproc/JobIAMPolicy.cs +++ b/sdk/dotnet/Dataproc/JobIAMPolicy.cs @@ -134,17 +134,9 @@ public partial class JobIAMPolicy : global::Pulumi.CustomResource [Output("policyData")] public Output PolicyData { get; private set; } = null!; - /// - /// The project in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Output("project")] public Output Project { get; private set; } = null!; - /// - /// The region in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Output("region")] public Output Region { get; private set; } = null!; @@ -203,17 +195,9 @@ public sealed class JobIAMPolicyArgs : global::Pulumi.ResourceArgs [Input("policyData", required: true)] public Input PolicyData { get; set; } = null!; - /// - /// The project in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Input("project")] public Input? Project { get; set; } - /// - /// The region in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Input("region")] public Input? Region { get; set; } @@ -240,17 +224,9 @@ public sealed class JobIAMPolicyState : global::Pulumi.ResourceArgs [Input("policyData")] public Input? PolicyData { get; set; } - /// - /// The project in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Input("project")] public Input? Project { get; set; } - /// - /// The region in which the job belongs. If it - /// is not provided, the provider will use a default. - /// [Input("region")] public Input? Region { get; set; } diff --git a/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfig.cs b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfig.cs index 0750f9a9a9..a9a11c9b6b 100644 --- a/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfig.cs +++ b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfig.cs @@ -33,6 +33,14 @@ public sealed class ClusterClusterConfigGceClusterConfig /// public readonly string? Network; /// + /// Node Group Affinity for sole-tenant clusters. + /// + public readonly Outputs.ClusterClusterConfigGceClusterConfigNodeGroupAffinity? NodeGroupAffinity; + /// + /// Reservation Affinity for consuming zonal reservation. + /// + public readonly Outputs.ClusterClusterConfigGceClusterConfigReservationAffinity? ReservationAffinity; + /// /// The service account to be used by the Node VMs. /// If not specified, the "default" service account is used. /// @@ -78,6 +86,10 @@ private ClusterClusterConfigGceClusterConfig( string? network, + Outputs.ClusterClusterConfigGceClusterConfigNodeGroupAffinity? nodeGroupAffinity, + + Outputs.ClusterClusterConfigGceClusterConfigReservationAffinity? reservationAffinity, + string? serviceAccount, ImmutableArray serviceAccountScopes, @@ -93,6 +105,8 @@ private ClusterClusterConfigGceClusterConfig( InternalIpOnly = internalIpOnly; Metadata = metadata; Network = network; + NodeGroupAffinity = nodeGroupAffinity; + ReservationAffinity = reservationAffinity; ServiceAccount = serviceAccount; ServiceAccountScopes = serviceAccountScopes; ShieldedInstanceConfig = shieldedInstanceConfig; diff --git a/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinity.cs b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinity.cs new file mode 100644 index 0000000000..104fb2c235 --- /dev/null +++ b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinity.cs @@ -0,0 +1,27 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Dataproc.Outputs +{ + + [OutputType] + public sealed class ClusterClusterConfigGceClusterConfigNodeGroupAffinity + { + /// + /// The URI of a sole-tenant node group resource that the cluster will be created on. + /// + public readonly string NodeGroupUri; + + [OutputConstructor] + private ClusterClusterConfigGceClusterConfigNodeGroupAffinity(string nodeGroupUri) + { + NodeGroupUri = nodeGroupUri; + } + } +} diff --git a/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfigReservationAffinity.cs b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfigReservationAffinity.cs new file mode 100644 index 0000000000..772b7e74a9 --- /dev/null +++ b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigGceClusterConfigReservationAffinity.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.Dataproc.Outputs +{ + + [OutputType] + public sealed class ClusterClusterConfigGceClusterConfigReservationAffinity + { + /// + /// Corresponds to the type of reservation consumption. + /// + public readonly string? ConsumeReservationType; + /// + /// Corresponds to the label key of reservation resource. + /// + public readonly string? Key; + /// + /// Corresponds to the label values of reservation resource. + /// + public readonly ImmutableArray Values; + + [OutputConstructor] + private ClusterClusterConfigGceClusterConfigReservationAffinity( + string? consumeReservationType, + + string? key, + + ImmutableArray values) + { + ConsumeReservationType = consumeReservationType; + Key = key; + Values = values; + } + } +} diff --git a/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigPreemptibleWorkerConfig.cs b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigPreemptibleWorkerConfig.cs index 2bdfaaa917..2e14776001 100644 --- a/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigPreemptibleWorkerConfig.cs +++ b/sdk/dotnet/Dataproc/Outputs/ClusterClusterConfigPreemptibleWorkerConfig.cs @@ -29,6 +29,7 @@ public sealed class ClusterClusterConfigPreemptibleWorkerConfig /// * PREEMPTIBILITY_UNSPECIFIED /// * NON_PREEMPTIBLE /// * PREEMPTIBLE + /// * SPOT /// public readonly string? Preemptibility; diff --git a/sdk/dotnet/Datastream/Inputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs.cs b/sdk/dotnet/Datastream/Inputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs.cs index 8745febbd2..d73ed48727 100644 --- a/sdk/dotnet/Datastream/Inputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs.cs +++ b/sdk/dotnet/Datastream/Inputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs.cs @@ -19,6 +19,15 @@ public sealed class StreamDestinationConfigBigqueryDestinationConfigSourceHierar [Input("datasetIdPrefix")] public Input? DatasetIdPrefix { get; set; } + /// + /// Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + /// table. The BigQuery Service Account associated with your project requires access to this + /// encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + /// See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + /// + [Input("kmsKeyName")] + public Input? KmsKeyName { get; set; } + /// /// The geographic location where the dataset should reside. /// See https://cloud.google.com/bigquery/docs/locations for supported locations. diff --git a/sdk/dotnet/Datastream/Inputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateGetArgs.cs b/sdk/dotnet/Datastream/Inputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateGetArgs.cs index f1d8673963..a74f994faf 100644 --- a/sdk/dotnet/Datastream/Inputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateGetArgs.cs +++ b/sdk/dotnet/Datastream/Inputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateGetArgs.cs @@ -19,6 +19,15 @@ public sealed class StreamDestinationConfigBigqueryDestinationConfigSourceHierar [Input("datasetIdPrefix")] public Input? DatasetIdPrefix { get; set; } + /// + /// Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + /// table. The BigQuery Service Account associated with your project requires access to this + /// encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + /// See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + /// + [Input("kmsKeyName")] + public Input? KmsKeyName { get; set; } + /// /// The geographic location where the dataset should reside. /// See https://cloud.google.com/bigquery/docs/locations for supported locations. diff --git a/sdk/dotnet/Datastream/Outputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate.cs b/sdk/dotnet/Datastream/Outputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate.cs index ea4020abdd..69c99fa108 100644 --- a/sdk/dotnet/Datastream/Outputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate.cs +++ b/sdk/dotnet/Datastream/Outputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate.cs @@ -19,6 +19,13 @@ public sealed class StreamDestinationConfigBigqueryDestinationConfigSourceHierar /// public readonly string? DatasetIdPrefix; /// + /// Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + /// table. The BigQuery Service Account associated with your project requires access to this + /// encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + /// See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + /// + public readonly string? KmsKeyName; + /// /// The geographic location where the dataset should reside. /// See https://cloud.google.com/bigquery/docs/locations for supported locations. /// @@ -28,9 +35,12 @@ public sealed class StreamDestinationConfigBigqueryDestinationConfigSourceHierar private StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate( string? datasetIdPrefix, + string? kmsKeyName, + string location) { DatasetIdPrefix = datasetIdPrefix; + KmsKeyName = kmsKeyName; Location = location; } } diff --git a/sdk/dotnet/Datastream/Stream.cs b/sdk/dotnet/Datastream/Stream.cs index d1b0199448..0e97d8393b 100644 --- a/sdk/dotnet/Datastream/Stream.cs +++ b/sdk/dotnet/Datastream/Stream.cs @@ -131,6 +131,13 @@ namespace Pulumi.Gcp.Datastream /// Member = $"serviceAccount:service-{project.Apply(getProjectResult => getProjectResult.Number)}@gcp-sa-datastream.iam.gserviceaccount.com", /// }); /// + /// var keyUser = new Gcp.Kms.CryptoKeyIAMMember("keyUser", new() + /// { + /// CryptoKeyId = "kms-name", + /// Role = "roles/cloudkms.cryptoKeyEncrypterDecrypter", + /// Member = $"serviceAccount:service-{project.Apply(getProjectResult => getProjectResult.Number)}@gcp-sa-datastream.iam.gserviceaccount.com", + /// }); + /// /// var destinationConnectionProfile = new Gcp.Datastream.ConnectionProfile("destinationConnectionProfile", new() /// { /// DisplayName = "Connection profile", @@ -266,6 +273,151 @@ namespace Pulumi.Gcp.Datastream /// }, /// }, /// }, + /// CustomerManagedEncryptionKey = "kms-name", + /// }, new CustomResourceOptions + /// { + /// DependsOn = new[] + /// { + /// keyUser, + /// }, + /// }); + /// + /// }); + /// ``` + /// ### Datastream Stream Bigquery + /// + /// ```csharp + /// using System.Collections.Generic; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// using Random = Pulumi.Random; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var project = Gcp.Organizations.GetProject.Invoke(); + /// + /// var instance = new Gcp.Sql.DatabaseInstance("instance", new() + /// { + /// DatabaseVersion = "MYSQL_8_0", + /// Region = "us-central1", + /// Settings = new Gcp.Sql.Inputs.DatabaseInstanceSettingsArgs + /// { + /// Tier = "db-f1-micro", + /// BackupConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsBackupConfigurationArgs + /// { + /// Enabled = true, + /// BinaryLogEnabled = true, + /// }, + /// IpConfiguration = new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationArgs + /// { + /// AuthorizedNetworks = new[] + /// { + /// new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs + /// { + /// Value = "34.71.242.81", + /// }, + /// new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs + /// { + /// Value = "34.72.28.29", + /// }, + /// new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs + /// { + /// Value = "34.67.6.157", + /// }, + /// new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs + /// { + /// Value = "34.67.234.134", + /// }, + /// new Gcp.Sql.Inputs.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs + /// { + /// Value = "34.72.239.218", + /// }, + /// }, + /// }, + /// }, + /// DeletionProtection = true, + /// }); + /// + /// var db = new Gcp.Sql.Database("db", new() + /// { + /// Instance = instance.Name, + /// }); + /// + /// var pwd = new Random.RandomPassword("pwd", new() + /// { + /// Length = 16, + /// Special = false, + /// }); + /// + /// var user = new Gcp.Sql.User("user", new() + /// { + /// Instance = instance.Name, + /// Host = "%", + /// Password = pwd.Result, + /// }); + /// + /// var sourceConnectionProfile = new Gcp.Datastream.ConnectionProfile("sourceConnectionProfile", new() + /// { + /// DisplayName = "Source connection profile", + /// Location = "us-central1", + /// ConnectionProfileId = "source-profile", + /// MysqlProfile = new Gcp.Datastream.Inputs.ConnectionProfileMysqlProfileArgs + /// { + /// Hostname = instance.PublicIpAddress, + /// Username = user.Name, + /// Password = user.Password, + /// }, + /// }); + /// + /// var bqSa = Gcp.BigQuery.GetDefaultServiceAccount.Invoke(); + /// + /// var bigqueryKeyUser = new Gcp.Kms.CryptoKeyIAMMember("bigqueryKeyUser", new() + /// { + /// CryptoKeyId = "bigquery-kms-name", + /// Role = "roles/cloudkms.cryptoKeyEncrypterDecrypter", + /// Member = $"serviceAccount:{bqSa.Apply(getDefaultServiceAccountResult => getDefaultServiceAccountResult.Email)}", + /// }); + /// + /// var destinationConnectionProfile = new Gcp.Datastream.ConnectionProfile("destinationConnectionProfile", new() + /// { + /// DisplayName = "Connection profile", + /// Location = "us-central1", + /// ConnectionProfileId = "destination-profile", + /// BigqueryProfile = null, + /// }); + /// + /// var @default = new Gcp.Datastream.Stream("default", new() + /// { + /// StreamId = "my-stream", + /// Location = "us-central1", + /// DisplayName = "my stream", + /// SourceConfig = new Gcp.Datastream.Inputs.StreamSourceConfigArgs + /// { + /// SourceConnectionProfile = sourceConnectionProfile.Id, + /// MysqlSourceConfig = null, + /// }, + /// DestinationConfig = new Gcp.Datastream.Inputs.StreamDestinationConfigArgs + /// { + /// DestinationConnectionProfile = destinationConnectionProfile.Id, + /// BigqueryDestinationConfig = new Gcp.Datastream.Inputs.StreamDestinationConfigBigqueryDestinationConfigArgs + /// { + /// SourceHierarchyDatasets = new Gcp.Datastream.Inputs.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsArgs + /// { + /// DatasetTemplate = new Gcp.Datastream.Inputs.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs + /// { + /// Location = "us-central1", + /// KmsKeyName = "bigquery-kms-name", + /// }, + /// }, + /// }, + /// }, + /// BackfillNone = null, + /// }, new CustomResourceOptions + /// { + /// DependsOn = new[] + /// { + /// bigqueryKeyUser, + /// }, /// }); /// /// }); @@ -303,6 +455,13 @@ public partial class Stream : global::Pulumi.CustomResource [Output("backfillNone")] public Output BackfillNone { get; private set; } = null!; + /// + /// A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + /// will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + /// + [Output("customerManagedEncryptionKey")] + public Output CustomerManagedEncryptionKey { get; private set; } = null!; + /// /// Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. /// @@ -425,6 +584,13 @@ public sealed class StreamArgs : global::Pulumi.ResourceArgs [Input("backfillNone")] public Input? BackfillNone { get; set; } + /// + /// A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + /// will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + /// + [Input("customerManagedEncryptionKey")] + public Input? CustomerManagedEncryptionKey { get; set; } + /// /// Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. /// @@ -503,6 +669,13 @@ public sealed class StreamState : global::Pulumi.ResourceArgs [Input("backfillNone")] public Input? BackfillNone { get; set; } + /// + /// A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + /// will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + /// + [Input("customerManagedEncryptionKey")] + public Input? CustomerManagedEncryptionKey { get; set; } + /// /// Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. /// diff --git a/sdk/dotnet/DeploymentManager/Deployment.cs b/sdk/dotnet/DeploymentManager/Deployment.cs index a6833b7966..755b7f5856 100644 --- a/sdk/dotnet/DeploymentManager/Deployment.cs +++ b/sdk/dotnet/DeploymentManager/Deployment.cs @@ -10,20 +10,6 @@ namespace Pulumi.Gcp.DeploymentManager { /// - /// A collection of resources that are deployed and managed together using - /// a configuration file - /// - /// > **Warning:** This resource is intended only to manage a Deployment resource, - /// and attempts to manage the Deployment's resources in the provider as well - /// will likely result in errors or unexpected behavior as the two tools - /// fight over ownership. We strongly discourage doing so unless you are an - /// experienced user of both tools. - /// - /// In addition, due to limitations of the API, the provider will treat - /// deployments in preview as recreate-only for any update operation other - /// than actually deploying an in-preview deployment (i.e. `preview=true` to - /// `preview=false`). - /// /// ## Example Usage /// ### Deployment Manager Deployment Basic /// @@ -134,14 +120,10 @@ public partial class Deployment : global::Pulumi.CustomResource public Output Name { get; private set; } = null!; /// - /// If set to true, a deployment is created with "shell" resources - /// that are not actually instantiated. This allows you to preview a - /// deployment. It can be updated to false to actually deploy - /// with real resources. - /// ~>**NOTE:** Deployment Manager does not allow update - /// of a deployment in preview (unless updating to preview=false). Thus, - /// the provider will force-recreate deployments if either preview is updated - /// to true or if other fields are updated while preview is true. + /// If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + /// preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + /// does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + /// deployments if either preview is updated to true or if other fields are updated while preview is true. /// [Output("preview")] public Output Preview { get; private set; } = null!; @@ -264,14 +246,10 @@ public InputList Labels public Input? Name { get; set; } /// - /// If set to true, a deployment is created with "shell" resources - /// that are not actually instantiated. This allows you to preview a - /// deployment. It can be updated to false to actually deploy - /// with real resources. - /// ~>**NOTE:** Deployment Manager does not allow update - /// of a deployment in preview (unless updating to preview=false). Thus, - /// the provider will force-recreate deployments if either preview is updated - /// to true or if other fields are updated while preview is true. + /// If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + /// preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + /// does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + /// deployments if either preview is updated to true or if other fields are updated while preview is true. /// [Input("preview")] public Input? Preview { get; set; } @@ -363,14 +341,10 @@ public InputList Labels public Input? Name { get; set; } /// - /// If set to true, a deployment is created with "shell" resources - /// that are not actually instantiated. This allows you to preview a - /// deployment. It can be updated to false to actually deploy - /// with real resources. - /// ~>**NOTE:** Deployment Manager does not allow update - /// of a deployment in preview (unless updating to preview=false). Thus, - /// the provider will force-recreate deployments if either preview is updated - /// to true or if other fields are updated while preview is true. + /// If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + /// preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + /// does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + /// deployments if either preview is updated to true or if other fields are updated while preview is true. /// [Input("preview")] public Input? Preview { get; set; } diff --git a/sdk/dotnet/Diagflow/Agent.cs b/sdk/dotnet/Diagflow/Agent.cs index a5ebd202c7..1f8424be05 100644 --- a/sdk/dotnet/Diagflow/Agent.cs +++ b/sdk/dotnet/Diagflow/Agent.cs @@ -152,12 +152,11 @@ public partial class Agent : global::Pulumi.CustomResource public Output> SupportedLanguageCodes { get; private set; } = null!; /// - /// The agent tier. If not specified, TIER_STANDARD is assumed. - /// * TIER_STANDARD: Standard tier. - /// * TIER_ENTERPRISE: Enterprise tier (Essentials). - /// * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - /// NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - /// the the provider state and Dialogflow if the agent tier is changed outside of the provider. + /// The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + /// Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + /// provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + /// agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + /// "TIER_ENTERPRISE_PLUS"] /// [Output("tier")] public Output Tier { get; private set; } = null!; @@ -301,12 +300,11 @@ public InputList SupportedLanguageCodes } /// - /// The agent tier. If not specified, TIER_STANDARD is assumed. - /// * TIER_STANDARD: Standard tier. - /// * TIER_ENTERPRISE: Enterprise tier (Essentials). - /// * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - /// NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - /// the the provider state and Dialogflow if the agent tier is changed outside of the provider. + /// The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + /// Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + /// provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + /// agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + /// "TIER_ENTERPRISE_PLUS"] /// [Input("tier")] public Input? Tier { get; set; } @@ -419,12 +417,11 @@ public InputList SupportedLanguageCodes } /// - /// The agent tier. If not specified, TIER_STANDARD is assumed. - /// * TIER_STANDARD: Standard tier. - /// * TIER_ENTERPRISE: Enterprise tier (Essentials). - /// * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - /// NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - /// the the provider state and Dialogflow if the agent tier is changed outside of the provider. + /// The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + /// Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + /// provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + /// agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + /// "TIER_ENTERPRISE_PLUS"] /// [Input("tier")] public Input? Tier { get; set; } diff --git a/sdk/dotnet/Diagflow/Intent.cs b/sdk/dotnet/Diagflow/Intent.cs index 7b2299ea80..fd7d943786 100644 --- a/sdk/dotnet/Diagflow/Intent.cs +++ b/sdk/dotnet/Diagflow/Intent.cs @@ -49,81 +49,6 @@ namespace Pulumi.Gcp.Diagflow /// /// }); /// ``` - /// ### Dialogflow Intent Full - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var agentProjectProject = new Gcp.Organizations.Project("agentProjectProject", new() - /// { - /// ProjectId = "tf-test-dialogflow", - /// OrgId = "123456789", - /// }); - /// - /// var agentProjectService = new Gcp.Projects.Service("agentProjectService", new() - /// { - /// Project = agentProjectProject.ProjectId, - /// ServiceName = "dialogflow.googleapis.com", - /// DisableDependentServices = false, - /// }); - /// - /// var dialogflowServiceAccount = new Gcp.ServiceAccount.Account("dialogflowServiceAccount", new() - /// { - /// AccountId = "tf-test-dialogflow", - /// }); - /// - /// var agentCreate = new Gcp.Projects.IAMMember("agentCreate", new() - /// { - /// Project = agentProjectService.Project, - /// Role = "roles/dialogflow.admin", - /// Member = dialogflowServiceAccount.Email.Apply(email => $"serviceAccount:{email}"), - /// }); - /// - /// var basicAgent = new Gcp.Diagflow.Agent("basicAgent", new() - /// { - /// Project = agentProjectProject.ProjectId, - /// DisplayName = "example_agent", - /// DefaultLanguageCode = "en", - /// TimeZone = "America/New_York", - /// }); - /// - /// var fullIntent = new Gcp.Diagflow.Intent("fullIntent", new() - /// { - /// Project = agentProjectProject.ProjectId, - /// DisplayName = "full-intent", - /// WebhookState = "WEBHOOK_STATE_ENABLED", - /// Priority = 1, - /// IsFallback = false, - /// MlDisabled = true, - /// Action = "some_action", - /// ResetContexts = true, - /// InputContextNames = new[] - /// { - /// agentProjectProject.ProjectId.Apply(projectId => $"projects/{projectId}/agent/sessions/-/contexts/some_id"), - /// }, - /// Events = new[] - /// { - /// "some_event", - /// }, - /// DefaultResponsePlatforms = new[] - /// { - /// "FACEBOOK", - /// "SLACK", - /// }, - /// }, new CustomResourceOptions - /// { - /// DependsOn = new[] - /// { - /// basicAgent, - /// }, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Dns/GetManagedZone.cs b/sdk/dotnet/Dns/GetManagedZone.cs index 9ce9ff555a..d9de7d6113 100644 --- a/sdk/dotnet/Dns/GetManagedZone.cs +++ b/sdk/dotnet/Dns/GetManagedZone.cs @@ -135,9 +135,6 @@ public sealed class GetManagedZoneResult /// A textual description field. /// public readonly string Description; - /// - /// The fully qualified DNS name of this zone, e.g. `example.io.`. - /// public readonly string DnsName; /// /// The provider-assigned unique ID for this managed resource. diff --git a/sdk/dotnet/Dns/ManagedZone.cs b/sdk/dotnet/Dns/ManagedZone.cs index a84a367a0b..df91faacdd 100644 --- a/sdk/dotnet/Dns/ManagedZone.cs +++ b/sdk/dotnet/Dns/ManagedZone.cs @@ -18,7 +18,7 @@ namespace Pulumi.Gcp.Dns /// /// * [API documentation](https://cloud.google.com/dns/api/v1/managedZones) /// * How-to Guides - /// * [Managing Zones](https://cloud.google.com/dns/zones/) + /// * [Managing Zones](https://cloud.google.com/dns/zones/) /// /// ## Example Usage /// ### Dns Managed Zone Basic @@ -27,13 +27,19 @@ namespace Pulumi.Gcp.Dns /// using System.Collections.Generic; /// using Pulumi; /// using Gcp = Pulumi.Gcp; + /// using Random = Pulumi.Random; /// /// return await Deployment.RunAsync(() => /// { + /// var rnd = new Random.RandomId("rnd", new() + /// { + /// ByteLength = 4, + /// }); + /// /// var example_zone = new Gcp.Dns.ManagedZone("example-zone", new() /// { /// Description = "Example DNS zone", - /// DnsName = "my-domain.com.", + /// DnsName = rnd.Hex.Apply(hex => $"example-{hex}.com."), /// Labels = /// { /// { "foo", "bar" }, @@ -392,7 +398,7 @@ public partial class ManagedZone : global::Pulumi.CustomResource public Output CreationTime { get; private set; } = null!; /// - /// A textual description field. Defaults to 'Managed by Pulumi'. + /// A textual description field. Defaults to 'Managed by Terraform'. /// [Output("description")] public Output Description { get; private set; } = null!; @@ -475,16 +481,16 @@ public partial class ManagedZone : global::Pulumi.CustomResource public Output Project { get; private set; } = null!; /// - /// Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - /// lookup queries using automatically configured records for VPC resources. This only applies - /// to networks listed under `private_visibility_config`. + /// Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + /// automatically configured records for VPC resources. This only applies to networks listed under + /// 'private_visibility_config'. /// [Output("reverseLookup")] public Output ReverseLookup { get; private set; } = null!; /// - /// The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - /// Structure is documented below. + /// The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + /// information related to the namespace associated with the zone. /// [Output("serviceDirectoryConfig")] public Output ServiceDirectoryConfig { get; private set; } = null!; @@ -552,7 +558,7 @@ public sealed class ManagedZoneArgs : global::Pulumi.ResourceArgs public Input? CloudLoggingConfig { get; set; } /// - /// A textual description field. Defaults to 'Managed by Pulumi'. + /// A textual description field. Defaults to 'Managed by Terraform'. /// [Input("description")] public Input? Description { get; set; } @@ -628,16 +634,16 @@ public InputMap Labels public Input? Project { get; set; } /// - /// Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - /// lookup queries using automatically configured records for VPC resources. This only applies - /// to networks listed under `private_visibility_config`. + /// Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + /// automatically configured records for VPC resources. This only applies to networks listed under + /// 'private_visibility_config'. /// [Input("reverseLookup")] public Input? ReverseLookup { get; set; } /// - /// The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - /// Structure is documented below. + /// The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + /// information related to the namespace associated with the zone. /// [Input("serviceDirectoryConfig")] public Input? ServiceDirectoryConfig { get; set; } @@ -675,7 +681,7 @@ public sealed class ManagedZoneState : global::Pulumi.ResourceArgs public Input? CreationTime { get; set; } /// - /// A textual description field. Defaults to 'Managed by Pulumi'. + /// A textual description field. Defaults to 'Managed by Terraform'. /// [Input("description")] public Input? Description { get; set; } @@ -770,16 +776,16 @@ public InputList NameServers public Input? Project { get; set; } /// - /// Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - /// lookup queries using automatically configured records for VPC resources. This only applies - /// to networks listed under `private_visibility_config`. + /// Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + /// automatically configured records for VPC resources. This only applies to networks listed under + /// 'private_visibility_config'. /// [Input("reverseLookup")] public Input? ReverseLookup { get; set; } /// - /// The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - /// Structure is documented below. + /// The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + /// information related to the namespace associated with the zone. /// [Input("serviceDirectoryConfig")] public Input? ServiceDirectoryConfig { get; set; } diff --git a/sdk/dotnet/Dns/Policy.cs b/sdk/dotnet/Dns/Policy.cs index b2b2e4ad4d..46c3e05abb 100644 --- a/sdk/dotnet/Dns/Policy.cs +++ b/sdk/dotnet/Dns/Policy.cs @@ -103,7 +103,7 @@ public partial class Policy : global::Pulumi.CustomResource public Output AlternativeNameServerConfig { get; private set; } = null!; /// - /// A textual description field. Defaults to 'Managed by Pulumi'. + /// A textual description field. Defaults to 'Managed by Terraform'. /// [Output("description")] public Output Description { get; private set; } = null!; @@ -200,7 +200,7 @@ public sealed class PolicyArgs : global::Pulumi.ResourceArgs public Input? AlternativeNameServerConfig { get; set; } /// - /// A textual description field. Defaults to 'Managed by Pulumi'. + /// A textual description field. Defaults to 'Managed by Terraform'. /// [Input("description")] public Input? Description { get; set; } @@ -265,7 +265,7 @@ public sealed class PolicyState : global::Pulumi.ResourceArgs public Input? AlternativeNameServerConfig { get; set; } /// - /// A textual description field. Defaults to 'Managed by Pulumi'. + /// A textual description field. Defaults to 'Managed by Terraform'. /// [Input("description")] public Input? Description { get; set; } diff --git a/sdk/dotnet/Firebase/GetWebApp.cs b/sdk/dotnet/Firebase/GetWebApp.cs index 4717a4821c..f41a882e7c 100644 --- a/sdk/dotnet/Firebase/GetWebApp.cs +++ b/sdk/dotnet/Firebase/GetWebApp.cs @@ -11,15 +11,9 @@ namespace Pulumi.Gcp.Firebase { public static class GetWebApp { - /// - /// A Google Cloud Firebase web application instance - /// public static Task InvokeAsync(GetWebAppArgs args, InvokeOptions? options = null) => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:firebase/getWebApp:getWebApp", args ?? new GetWebAppArgs(), options.WithDefaults()); - /// - /// A Google Cloud Firebase web application instance - /// public static Output Invoke(GetWebAppInvokeArgs args, InvokeOptions? options = null) => global::Pulumi.Deployment.Instance.Invoke("gcp:firebase/getWebApp:getWebApp", args ?? new GetWebAppInvokeArgs(), options.WithDefaults()); } diff --git a/sdk/dotnet/Firebase/GetWebAppConfig.cs b/sdk/dotnet/Firebase/GetWebAppConfig.cs index 28dab2aefc..e85557a80d 100644 --- a/sdk/dotnet/Firebase/GetWebAppConfig.cs +++ b/sdk/dotnet/Firebase/GetWebAppConfig.cs @@ -11,27 +11,9 @@ namespace Pulumi.Gcp.Firebase { public static class GetWebAppConfig { - /// - /// A Google Cloud Firebase web application configuration - /// - /// To get more information about WebApp, see: - /// - /// * [API documentation](https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects.webApps) - /// * How-to Guides - /// * [Official Documentation](https://firebase.google.com/) - /// public static Task InvokeAsync(GetWebAppConfigArgs args, InvokeOptions? options = null) => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:firebase/getWebAppConfig:getWebAppConfig", args ?? new GetWebAppConfigArgs(), options.WithDefaults()); - /// - /// A Google Cloud Firebase web application configuration - /// - /// To get more information about WebApp, see: - /// - /// * [API documentation](https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects.webApps) - /// * How-to Guides - /// * [Official Documentation](https://firebase.google.com/) - /// public static Output Invoke(GetWebAppConfigInvokeArgs args, InvokeOptions? options = null) => global::Pulumi.Deployment.Instance.Invoke("gcp:firebase/getWebAppConfig:getWebAppConfig", args ?? new GetWebAppConfigInvokeArgs(), options.WithDefaults()); } diff --git a/sdk/dotnet/Firebase/Project.cs b/sdk/dotnet/Firebase/Project.cs index 7385c714e4..0be63ba290 100644 --- a/sdk/dotnet/Firebase/Project.cs +++ b/sdk/dotnet/Firebase/Project.cs @@ -10,46 +10,7 @@ namespace Pulumi.Gcp.Firebase { /// - /// A Google Cloud Firebase instance. This enables Firebase resources on a given google project. - /// Since a FirebaseProject is actually also a GCP Project, a FirebaseProject uses underlying GCP - /// identifiers (most importantly, the projectId) as its own for easy interop with GCP APIs. - /// Once Firebase has been added to a Google Project it cannot be removed. - /// - /// To get more information about Project, see: - /// - /// * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects) - /// * How-to Guides - /// * [Official Documentation](https://firebase.google.com/) - /// /// ## Example Usage - /// ### Firebase Project Basic - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var defaultProject = new Gcp.Organizations.Project("defaultProject", new() - /// { - /// ProjectId = "tf-test", - /// OrgId = "123456789", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// var defaultFirebase_projectProject = new Gcp.Firebase.Project("defaultFirebase/projectProject", new() - /// { - /// ProjectID = defaultProject.ProjectId, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Firebase/ProjectLocation.cs b/sdk/dotnet/Firebase/ProjectLocation.cs index d8720f10a4..5f16b51177 100644 --- a/sdk/dotnet/Firebase/ProjectLocation.cs +++ b/sdk/dotnet/Firebase/ProjectLocation.cs @@ -10,59 +10,7 @@ namespace Pulumi.Gcp.Firebase { /// - /// Sets the default Google Cloud Platform (GCP) resource location for the specified FirebaseProject. - /// This method creates an App Engine application with a default Cloud Storage bucket, located in the specified - /// locationId. This location must be one of the available GCP resource locations. - /// After the default GCP resource location is finalized, or if it was already set, it cannot be changed. - /// The default GCP resource location for the specified FirebaseProject might already be set because either the - /// GCP Project already has an App Engine application or defaultLocation.finalize was previously called with a - /// specified locationId. Any new calls to defaultLocation.finalize with a different specified locationId will - /// return a 409 error. - /// - /// To get more information about ProjectLocation, see: - /// - /// * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.defaultLocation/finalize) - /// * How-to Guides - /// * [Official Documentation](https://firebase.google.com/) - /// /// ## Example Usage - /// ### Firebase Project Location Basic - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var defaultProject = new Gcp.Organizations.Project("defaultProject", new() - /// { - /// ProjectId = "tf-test", - /// OrgId = "123456789", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// var defaultFirebase_projectProject = new Gcp.Firebase.Project("defaultFirebase/projectProject", new() - /// { - /// ProjectID = defaultProject.ProjectId, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// var basic = new Gcp.Firebase.ProjectLocation("basic", new() - /// { - /// Project = defaultFirebase / projectProject.Project, - /// LocationId = "us-central", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Firebase/WebApp.cs b/sdk/dotnet/Firebase/WebApp.cs index 0bef0a616d..97927e2d9d 100644 --- a/sdk/dotnet/Firebase/WebApp.cs +++ b/sdk/dotnet/Firebase/WebApp.cs @@ -10,99 +10,7 @@ namespace Pulumi.Gcp.Firebase { /// - /// A Google Cloud Firebase web application instance - /// - /// To get more information about WebApp, see: - /// - /// * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.webApps) - /// * How-to Guides - /// * [Official Documentation](https://firebase.google.com/) - /// /// ## Example Usage - /// ### Firebase Web App Basic - /// - /// ```csharp - /// using System.Collections.Generic; - /// using System.Text.Json; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var defaultProject = new Gcp.Organizations.Project("defaultProject", new() - /// { - /// ProjectId = "tf-test", - /// OrgId = "123456789", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// var defaultFirebase_projectProject = new Gcp.Firebase.Project("defaultFirebase/projectProject", new() - /// { - /// ProjectID = defaultProject.ProjectId, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// var basicWebApp = new Gcp.Firebase.WebApp("basicWebApp", new() - /// { - /// Project = defaultProject.ProjectId, - /// DisplayName = "Display Name Basic", - /// DeletionPolicy = "DELETE", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// DependsOn = new[] - /// { - /// defaultFirebase / projectProject, - /// }, - /// }); - /// - /// var basicWebAppConfig = Gcp.Firebase.GetWebAppConfig.Invoke(new() - /// { - /// WebAppId = basicWebApp.AppId, - /// }); - /// - /// var defaultBucket = new Gcp.Storage.Bucket("defaultBucket", new() - /// { - /// Location = "US", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// var defaultBucketObject = new Gcp.Storage.BucketObject("defaultBucketObject", new() - /// { - /// Bucket = defaultBucket.Name, - /// Content = Output.Tuple(basicWebApp.AppId, basicWebAppConfig, basicWebAppConfig, basicWebAppConfig["database_url"] ?? "", basicWebAppConfig["storage_bucket"] ?? "", basicWebAppConfig["messaging_sender_id"] ?? "", basicWebAppConfig["measurement_id"] ?? "").Apply(values => - /// { - /// var appId = values.Item1; - /// var basicWebAppConfig = values.Item2; - /// var basicWebAppConfig1 = values.Item3; - /// var s = values.Item4; - /// var s1 = values.Item5; - /// var s2 = values.Item6; - /// var s3 = values.Item7; - /// return JsonSerializer.Serialize(new Dictionary<string, object?> - /// { - /// ["appId"] = appId, - /// ["apiKey"] = basicWebAppConfig.Apply(getWebAppConfigResult => getWebAppConfigResult.ApiKey), - /// ["authDomain"] = basicWebAppConfig1.AuthDomain, - /// ["databaseURL"] = s, - /// ["storageBucket"] = s1, - /// ["messagingSenderId"] = s2, - /// ["measurementId"] = s3, - /// }); - /// }), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Firestore/Document.cs b/sdk/dotnet/Firestore/Document.cs index be45e9b4cc..12c9cca9b5 100644 --- a/sdk/dotnet/Firestore/Document.cs +++ b/sdk/dotnet/Firestore/Document.cs @@ -38,7 +38,7 @@ namespace Pulumi.Gcp.Firestore /// var mydoc = new Gcp.Firestore.Document("mydoc", new() /// { /// Collection = "somenewcollection", - /// DocumentId = "my-doc", + /// DocumentId = "my-doc-%{random_suffix}", /// Fields = "{\"something\":{\"mapValue\":{\"fields\":{\"akey\":{\"stringValue\":\"avalue\"}}}}}", /// Project = "my-project-name", /// }); @@ -57,7 +57,7 @@ namespace Pulumi.Gcp.Firestore /// var mydoc = new Gcp.Firestore.Document("mydoc", new() /// { /// Collection = "somenewcollection", - /// DocumentId = "my-doc", + /// DocumentId = "my-doc-%{random_suffix}", /// Fields = "{\"something\":{\"mapValue\":{\"fields\":{\"akey\":{\"stringValue\":\"avalue\"}}}}}", /// Project = "my-project-name", /// }); diff --git a/sdk/dotnet/Folder/IAMBinding.cs b/sdk/dotnet/Folder/IAMBinding.cs index af43f614de..83ef21638c 100644 --- a/sdk/dotnet/Folder/IAMBinding.cs +++ b/sdk/dotnet/Folder/IAMBinding.cs @@ -10,62 +10,53 @@ namespace Pulumi.Gcp.Folder { /// - /// Allows creation and management of a single binding within IAM policy for - /// an existing Google Cloud Platform folder. - /// - /// > **Note:** This resource _must not_ be used in conjunction with - /// `gcp.folder.IAMPolicy` or they will fight over what your policy - /// should be. + /// ## Import /// - /// > **Note:** On create, this resource will overwrite members of any existing roles. - /// Use `pulumi import` and inspect the output to ensure - /// your existing members are preserved. + /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. /// - /// ## Example Usage + /// This member resource can be imported using the `folder`, role, and member e.g. /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; + /// ```sh + /// $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder roles/viewer user:foo@example.com" + /// ``` /// - /// return await Deployment.RunAsync(() => - /// { - /// var department1 = new Gcp.Organizations.Folder("department1", new() - /// { - /// DisplayName = "Department 1", - /// Parent = "organizations/1234567", - /// }); + /// IAM binding imports use space-delimited identifiers; the resource in question and the role. /// - /// var admin = new Gcp.Folder.IAMBinding("admin", new() - /// { - /// Folder = department1.Name, - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:alice@gmail.com", - /// }, - /// }); + /// This binding resource can be imported using the `folder` and role, e.g. /// - /// }); + /// ```sh + /// $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder roles/viewer" /// ``` /// - /// ## Import + /// IAM policy imports use the identifier of the resource in question. /// - /// IAM binding imports use space-delimited identifiers; first the resource in question and then the role. + /// This policy resource can be imported using the `folder`. /// - /// These bindings can be imported using the `folder` and role, e.g. + /// ```sh + /// $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder folder + /// ``` + /// + /// IAM audit config imports use the identifier of the resource in question and the service, e.g. /// /// ```sh - /// $ pulumi import gcp:folder/iAMBinding:IAMBinding viewer "folder-name roles/viewer" + /// $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder foo.googleapis.com" /// ``` /// - /// -> **Custom Roles**If you're importing a IAM binding with a custom role, make sure to use the + /// -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the + /// + /// full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure /// - /// full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. + /// ```sh + /// $ pulumi import gcp:folder/iAMBinding:IAMBinding to include the title of condition, e.g. `google_folder_iam_binding.my_folder "folder roles/{{role_id}} condition-title"` + /// ``` /// [GcpResourceType("gcp:folder/iAMBinding:IAMBinding")] public partial class IAMBinding : global::Pulumi.CustomResource { + /// + /// An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + /// Structure is documented below. + /// [Output("condition")] public Output Condition { get; private set; } = null!; @@ -81,22 +72,13 @@ public partial class IAMBinding : global::Pulumi.CustomResource [Output("folder")] public Output Folder { get; private set; } = null!; - /// - /// An array of identities that will be granted the privilege in the `role`. - /// Each entry can have one of the following values: - /// * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - /// * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - /// * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - /// * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - /// * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - /// [Output("members")] public Output> Members { get; private set; } = null!; /// /// The role that should be applied. Only one /// `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - /// `[projects|organizations]/{parent-name}/roles/{role-name}`. + /// `organizations/{{org_id}}/roles/{{role_id}}`. /// [Output("role")] public Output Role { get; private set; } = null!; @@ -147,6 +129,10 @@ public static IAMBinding Get(string name, Input id, IAMBindingState? sta public sealed class IAMBindingArgs : global::Pulumi.ResourceArgs { + /// + /// An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + /// Structure is documented below. + /// [Input("condition")] public Input? Condition { get; set; } @@ -158,16 +144,6 @@ public sealed class IAMBindingArgs : global::Pulumi.ResourceArgs [Input("members", required: true)] private InputList? _members; - - /// - /// An array of identities that will be granted the privilege in the `role`. - /// Each entry can have one of the following values: - /// * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - /// * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - /// * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - /// * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - /// * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - /// public InputList Members { get => _members ?? (_members = new InputList()); @@ -177,7 +153,7 @@ public InputList Members /// /// The role that should be applied. Only one /// `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - /// `[projects|organizations]/{parent-name}/roles/{role-name}`. + /// `organizations/{{org_id}}/roles/{{role_id}}`. /// [Input("role", required: true)] public Input Role { get; set; } = null!; @@ -190,6 +166,10 @@ public IAMBindingArgs() public sealed class IAMBindingState : global::Pulumi.ResourceArgs { + /// + /// An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + /// Structure is documented below. + /// [Input("condition")] public Input? Condition { get; set; } @@ -207,16 +187,6 @@ public sealed class IAMBindingState : global::Pulumi.ResourceArgs [Input("members")] private InputList? _members; - - /// - /// An array of identities that will be granted the privilege in the `role`. - /// Each entry can have one of the following values: - /// * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - /// * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - /// * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - /// * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - /// * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - /// public InputList Members { get => _members ?? (_members = new InputList()); @@ -226,7 +196,7 @@ public InputList Members /// /// The role that should be applied. Only one /// `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - /// `[projects|organizations]/{parent-name}/roles/{role-name}`. + /// `organizations/{{org_id}}/roles/{{role_id}}`. /// [Input("role")] public Input? Role { get; set; } diff --git a/sdk/dotnet/Folder/IAMMember.cs b/sdk/dotnet/Folder/IAMMember.cs index 5e53d7d2f5..bcca160e03 100644 --- a/sdk/dotnet/Folder/IAMMember.cs +++ b/sdk/dotnet/Folder/IAMMember.cs @@ -10,227 +10,6 @@ namespace Pulumi.Gcp.Folder { /// - /// Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - /// - /// * `gcp.folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - /// * `gcp.folder.IAMBinding`: 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 folder are preserved. - /// * `gcp.folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - /// * `gcp.folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - /// - /// > **Note:** `gcp.folder.IAMPolicy` **cannot** be used in conjunction with `gcp.folder.IAMBinding`, `gcp.folder.IAMMember`, or `gcp.folder.IamAuditConfig` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.folder.IAMBinding` resources **can be** used in conjunction with `gcp.folder.IAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - /// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - /// - /// ## google\_folder\_iam\_policy - /// - /// !> **Be careful!** You can accidentally lock yourself out of your folder - /// using this resource. Deleting a `gcp.folder.IAMPolicy` removes access - /// from anyone without permissions on its parent folder/organization. Proceed with caution. - /// It's not recommended to use `gcp.folder.IAMPolicy` with your provider folder - /// to avoid locking yourself out, and it should generally only be used with folders - /// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - /// applying the change. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var folder = new Gcp.Folder.IAMPolicy("folder", new() - /// { - /// Folder = "folders/1234567", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/compute.admin", - /// }, - /// }, - /// }); - /// - /// var folder = new Gcp.Folder.IAMPolicy("folder", new() - /// { - /// Folder = "folders/1234567", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_folder\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IAMBinding("folder", new() - /// { - /// Folder = "folders/1234567", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IAMBinding("folder", new() - /// { - /// Condition = new Gcp.Folder.Inputs.IAMBindingConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Folder = "folders/1234567", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/container.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_folder\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IAMMember("folder", new() - /// { - /// Folder = "folders/1234567", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IAMMember("folder", new() - /// { - /// Condition = new Gcp.Folder.Inputs.IAMMemberConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Folder = "folders/1234567", - /// Member = "user:jane@example.com", - /// Role = "roles/firebase.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_folder\_iam\_audit\_config - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IamAuditConfig("folder", new() - /// { - /// AuditLogConfigs = new[] - /// { - /// new Gcp.Folder.Inputs.IamAuditConfigAuditLogConfigArgs - /// { - /// LogType = "ADMIN_READ", - /// }, - /// new Gcp.Folder.Inputs.IamAuditConfigAuditLogConfigArgs - /// { - /// ExemptedMembers = new[] - /// { - /// "user:joebloggs@hashicorp.com", - /// }, - /// LogType = "DATA_READ", - /// }, - /// }, - /// Folder = "folders/1234567", - /// Service = "allServices", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Folder/IAMPolicy.cs b/sdk/dotnet/Folder/IAMPolicy.cs index c64895e20e..5915383751 100644 --- a/sdk/dotnet/Folder/IAMPolicy.cs +++ b/sdk/dotnet/Folder/IAMPolicy.cs @@ -10,227 +10,6 @@ namespace Pulumi.Gcp.Folder { /// - /// Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - /// - /// * `gcp.folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - /// * `gcp.folder.IAMBinding`: 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 folder are preserved. - /// * `gcp.folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - /// * `gcp.folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - /// - /// > **Note:** `gcp.folder.IAMPolicy` **cannot** be used in conjunction with `gcp.folder.IAMBinding`, `gcp.folder.IAMMember`, or `gcp.folder.IamAuditConfig` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.folder.IAMBinding` resources **can be** used in conjunction with `gcp.folder.IAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - /// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - /// - /// ## google\_folder\_iam\_policy - /// - /// !> **Be careful!** You can accidentally lock yourself out of your folder - /// using this resource. Deleting a `gcp.folder.IAMPolicy` removes access - /// from anyone without permissions on its parent folder/organization. Proceed with caution. - /// It's not recommended to use `gcp.folder.IAMPolicy` with your provider folder - /// to avoid locking yourself out, and it should generally only be used with folders - /// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - /// applying the change. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var folder = new Gcp.Folder.IAMPolicy("folder", new() - /// { - /// Folder = "folders/1234567", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/compute.admin", - /// }, - /// }, - /// }); - /// - /// var folder = new Gcp.Folder.IAMPolicy("folder", new() - /// { - /// Folder = "folders/1234567", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_folder\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IAMBinding("folder", new() - /// { - /// Folder = "folders/1234567", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IAMBinding("folder", new() - /// { - /// Condition = new Gcp.Folder.Inputs.IAMBindingConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Folder = "folders/1234567", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/container.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_folder\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IAMMember("folder", new() - /// { - /// Folder = "folders/1234567", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IAMMember("folder", new() - /// { - /// Condition = new Gcp.Folder.Inputs.IAMMemberConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Folder = "folders/1234567", - /// Member = "user:jane@example.com", - /// Role = "roles/firebase.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_folder\_iam\_audit\_config - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IamAuditConfig("folder", new() - /// { - /// AuditLogConfigs = new[] - /// { - /// new Gcp.Folder.Inputs.IamAuditConfigAuditLogConfigArgs - /// { - /// LogType = "ADMIN_READ", - /// }, - /// new Gcp.Folder.Inputs.IamAuditConfigAuditLogConfigArgs - /// { - /// ExemptedMembers = new[] - /// { - /// "user:joebloggs@hashicorp.com", - /// }, - /// LogType = "DATA_READ", - /// }, - /// }, - /// Folder = "folders/1234567", - /// Service = "allServices", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Folder/IamAuditConfig.cs b/sdk/dotnet/Folder/IamAuditConfig.cs index f1a9cc6455..c667475baf 100644 --- a/sdk/dotnet/Folder/IamAuditConfig.cs +++ b/sdk/dotnet/Folder/IamAuditConfig.cs @@ -10,227 +10,6 @@ namespace Pulumi.Gcp.Folder { /// - /// Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - /// - /// * `gcp.folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - /// * `gcp.folder.IAMBinding`: 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 folder are preserved. - /// * `gcp.folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - /// * `gcp.folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - /// - /// > **Note:** `gcp.folder.IAMPolicy` **cannot** be used in conjunction with `gcp.folder.IAMBinding`, `gcp.folder.IAMMember`, or `gcp.folder.IamAuditConfig` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.folder.IAMBinding` resources **can be** used in conjunction with `gcp.folder.IAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - /// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - /// - /// ## google\_folder\_iam\_policy - /// - /// !> **Be careful!** You can accidentally lock yourself out of your folder - /// using this resource. Deleting a `gcp.folder.IAMPolicy` removes access - /// from anyone without permissions on its parent folder/organization. Proceed with caution. - /// It's not recommended to use `gcp.folder.IAMPolicy` with your provider folder - /// to avoid locking yourself out, and it should generally only be used with folders - /// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - /// applying the change. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var folder = new Gcp.Folder.IAMPolicy("folder", new() - /// { - /// Folder = "folders/1234567", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/compute.admin", - /// }, - /// }, - /// }); - /// - /// var folder = new Gcp.Folder.IAMPolicy("folder", new() - /// { - /// Folder = "folders/1234567", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_folder\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IAMBinding("folder", new() - /// { - /// Folder = "folders/1234567", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IAMBinding("folder", new() - /// { - /// Condition = new Gcp.Folder.Inputs.IAMBindingConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Folder = "folders/1234567", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/container.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_folder\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IAMMember("folder", new() - /// { - /// Folder = "folders/1234567", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IAMMember("folder", new() - /// { - /// Condition = new Gcp.Folder.Inputs.IAMMemberConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Folder = "folders/1234567", - /// Member = "user:jane@example.com", - /// Role = "roles/firebase.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_folder\_iam\_audit\_config - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var folder = new Gcp.Folder.IamAuditConfig("folder", new() - /// { - /// AuditLogConfigs = new[] - /// { - /// new Gcp.Folder.Inputs.IamAuditConfigAuditLogConfigArgs - /// { - /// LogType = "ADMIN_READ", - /// }, - /// new Gcp.Folder.Inputs.IamAuditConfigAuditLogConfigArgs - /// { - /// ExemptedMembers = new[] - /// { - /// "user:joebloggs@hashicorp.com", - /// }, - /// LogType = "DATA_READ", - /// }, - /// }, - /// Folder = "folders/1234567", - /// Service = "allServices", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Folder/Inputs/IAMBindingConditionArgs.cs b/sdk/dotnet/Folder/Inputs/IAMBindingConditionArgs.cs index 17f60ce993..bfd485af22 100644 --- a/sdk/dotnet/Folder/Inputs/IAMBindingConditionArgs.cs +++ b/sdk/dotnet/Folder/Inputs/IAMBindingConditionArgs.cs @@ -12,12 +12,21 @@ namespace Pulumi.Gcp.Folder.Inputs public sealed class IAMBindingConditionArgs : global::Pulumi.ResourceArgs { + /// + /// An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + /// [Input("description")] public Input? Description { get; set; } + /// + /// Textual representation of an expression in Common Expression Language syntax. + /// [Input("expression", required: true)] public Input Expression { get; set; } = null!; + /// + /// A title for the expression, i.e. a short string describing its purpose. + /// [Input("title", required: true)] public Input Title { get; set; } = null!; diff --git a/sdk/dotnet/Folder/Inputs/IAMBindingConditionGetArgs.cs b/sdk/dotnet/Folder/Inputs/IAMBindingConditionGetArgs.cs index a3c6472634..1e3ffb0aed 100644 --- a/sdk/dotnet/Folder/Inputs/IAMBindingConditionGetArgs.cs +++ b/sdk/dotnet/Folder/Inputs/IAMBindingConditionGetArgs.cs @@ -12,12 +12,21 @@ namespace Pulumi.Gcp.Folder.Inputs public sealed class IAMBindingConditionGetArgs : global::Pulumi.ResourceArgs { + /// + /// An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + /// [Input("description")] public Input? Description { get; set; } + /// + /// Textual representation of an expression in Common Expression Language syntax. + /// [Input("expression", required: true)] public Input Expression { get; set; } = null!; + /// + /// A title for the expression, i.e. a short string describing its purpose. + /// [Input("title", required: true)] public Input Title { get; set; } = null!; diff --git a/sdk/dotnet/Folder/Outputs/IAMBindingCondition.cs b/sdk/dotnet/Folder/Outputs/IAMBindingCondition.cs index d6b9d01a92..c80f13e11a 100644 --- a/sdk/dotnet/Folder/Outputs/IAMBindingCondition.cs +++ b/sdk/dotnet/Folder/Outputs/IAMBindingCondition.cs @@ -13,8 +13,17 @@ namespace Pulumi.Gcp.Folder.Outputs [OutputType] public sealed class IAMBindingCondition { + /// + /// An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + /// public readonly string? Description; + /// + /// Textual representation of an expression in Common Expression Language syntax. + /// public readonly string Expression; + /// + /// A title for the expression, i.e. a short string describing its purpose. + /// public readonly string Title; [OutputConstructor] diff --git a/sdk/dotnet/Healthcare/DatasetIamBinding.cs b/sdk/dotnet/Healthcare/DatasetIamBinding.cs index bbde14f2a1..3e6a5dcebb 100644 --- a/sdk/dotnet/Healthcare/DatasetIamBinding.cs +++ b/sdk/dotnet/Healthcare/DatasetIamBinding.cs @@ -10,90 +10,6 @@ namespace Pulumi.Gcp.Healthcare { /// - /// Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - /// - /// * `gcp.healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - /// * `gcp.healthcare.DatasetIamBinding`: 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 dataset are preserved. - /// * `gcp.healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - /// - /// > **Note:** `gcp.healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DatasetIamBinding` and `gcp.healthcare.DatasetIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.healthcare.DatasetIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_healthcare\_dataset\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var dataset = new Gcp.Healthcare.DatasetIamPolicy("dataset", new() - /// { - /// DatasetId = "your-dataset-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_dataset\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var dataset = new Gcp.Healthcare.DatasetIamBinding("dataset", new() - /// { - /// DatasetId = "your-dataset-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_dataset\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var dataset = new Gcp.Healthcare.DatasetIamMember("dataset", new() - /// { - /// DatasetId = "your-dataset-id", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Healthcare/DatasetIamMember.cs b/sdk/dotnet/Healthcare/DatasetIamMember.cs index 786f6ba761..1cc3ed94e5 100644 --- a/sdk/dotnet/Healthcare/DatasetIamMember.cs +++ b/sdk/dotnet/Healthcare/DatasetIamMember.cs @@ -10,90 +10,6 @@ namespace Pulumi.Gcp.Healthcare { /// - /// Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - /// - /// * `gcp.healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - /// * `gcp.healthcare.DatasetIamBinding`: 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 dataset are preserved. - /// * `gcp.healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - /// - /// > **Note:** `gcp.healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DatasetIamBinding` and `gcp.healthcare.DatasetIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.healthcare.DatasetIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_healthcare\_dataset\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var dataset = new Gcp.Healthcare.DatasetIamPolicy("dataset", new() - /// { - /// DatasetId = "your-dataset-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_dataset\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var dataset = new Gcp.Healthcare.DatasetIamBinding("dataset", new() - /// { - /// DatasetId = "your-dataset-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_dataset\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var dataset = new Gcp.Healthcare.DatasetIamMember("dataset", new() - /// { - /// DatasetId = "your-dataset-id", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Healthcare/DatasetIamPolicy.cs b/sdk/dotnet/Healthcare/DatasetIamPolicy.cs index 81280bf165..7a8edc55b2 100644 --- a/sdk/dotnet/Healthcare/DatasetIamPolicy.cs +++ b/sdk/dotnet/Healthcare/DatasetIamPolicy.cs @@ -10,90 +10,6 @@ namespace Pulumi.Gcp.Healthcare { /// - /// Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - /// - /// * `gcp.healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - /// * `gcp.healthcare.DatasetIamBinding`: 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 dataset are preserved. - /// * `gcp.healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - /// - /// > **Note:** `gcp.healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DatasetIamBinding` and `gcp.healthcare.DatasetIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.healthcare.DatasetIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_healthcare\_dataset\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var dataset = new Gcp.Healthcare.DatasetIamPolicy("dataset", new() - /// { - /// DatasetId = "your-dataset-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_dataset\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var dataset = new Gcp.Healthcare.DatasetIamBinding("dataset", new() - /// { - /// DatasetId = "your-dataset-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_dataset\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var dataset = new Gcp.Healthcare.DatasetIamMember("dataset", new() - /// { - /// DatasetId = "your-dataset-id", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Healthcare/DicomStore.cs b/sdk/dotnet/Healthcare/DicomStore.cs index c42e4af0e6..b67a584f45 100644 --- a/sdk/dotnet/Healthcare/DicomStore.cs +++ b/sdk/dotnet/Healthcare/DicomStore.cs @@ -188,9 +188,9 @@ public partial class DicomStore : global::Pulumi.CustomResource public Output SelfLink { get; private set; } = null!; /// - /// To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - /// streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - /// Structure is documented below. + /// To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + /// you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + /// tables in a BigQuery dataset. /// [Output("streamConfigs")] public Output> StreamConfigs { get; private set; } = null!; @@ -285,9 +285,9 @@ public InputMap Labels private InputList? _streamConfigs; /// - /// To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - /// streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - /// Structure is documented below. + /// To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + /// you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + /// tables in a BigQuery dataset. /// public InputList StreamConfigs { @@ -353,9 +353,9 @@ public InputMap Labels private InputList? _streamConfigs; /// - /// To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - /// streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - /// Structure is documented below. + /// To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + /// you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + /// tables in a BigQuery dataset. /// public InputList StreamConfigs { diff --git a/sdk/dotnet/Healthcare/DicomStoreIamBinding.cs b/sdk/dotnet/Healthcare/DicomStoreIamBinding.cs index ee55408013..fda56b2928 100644 --- a/sdk/dotnet/Healthcare/DicomStoreIamBinding.cs +++ b/sdk/dotnet/Healthcare/DicomStoreIamBinding.cs @@ -10,90 +10,6 @@ namespace Pulumi.Gcp.Healthcare { /// - /// Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - /// - /// * `gcp.healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - /// * `gcp.healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - /// * `gcp.healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - /// - /// > **Note:** `gcp.healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DicomStoreIamBinding` and `gcp.healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_healthcare\_dicom\_store\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var dicomStore = new Gcp.Healthcare.DicomStoreIamPolicy("dicomStore", new() - /// { - /// DicomStoreId = "your-dicom-store-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_dicom\_store\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var dicomStore = new Gcp.Healthcare.DicomStoreIamBinding("dicomStore", new() - /// { - /// DicomStoreId = "your-dicom-store-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_dicom\_store\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var dicomStore = new Gcp.Healthcare.DicomStoreIamMember("dicomStore", new() - /// { - /// DicomStoreId = "your-dicom-store-id", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Healthcare/DicomStoreIamMember.cs b/sdk/dotnet/Healthcare/DicomStoreIamMember.cs index 2e9a321650..fd733a03ed 100644 --- a/sdk/dotnet/Healthcare/DicomStoreIamMember.cs +++ b/sdk/dotnet/Healthcare/DicomStoreIamMember.cs @@ -10,90 +10,6 @@ namespace Pulumi.Gcp.Healthcare { /// - /// Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - /// - /// * `gcp.healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - /// * `gcp.healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - /// * `gcp.healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - /// - /// > **Note:** `gcp.healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DicomStoreIamBinding` and `gcp.healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_healthcare\_dicom\_store\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var dicomStore = new Gcp.Healthcare.DicomStoreIamPolicy("dicomStore", new() - /// { - /// DicomStoreId = "your-dicom-store-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_dicom\_store\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var dicomStore = new Gcp.Healthcare.DicomStoreIamBinding("dicomStore", new() - /// { - /// DicomStoreId = "your-dicom-store-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_dicom\_store\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var dicomStore = new Gcp.Healthcare.DicomStoreIamMember("dicomStore", new() - /// { - /// DicomStoreId = "your-dicom-store-id", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Healthcare/DicomStoreIamPolicy.cs b/sdk/dotnet/Healthcare/DicomStoreIamPolicy.cs index 3939fd8e18..4a7ff21b82 100644 --- a/sdk/dotnet/Healthcare/DicomStoreIamPolicy.cs +++ b/sdk/dotnet/Healthcare/DicomStoreIamPolicy.cs @@ -10,90 +10,6 @@ namespace Pulumi.Gcp.Healthcare { /// - /// Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - /// - /// * `gcp.healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - /// * `gcp.healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - /// * `gcp.healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - /// - /// > **Note:** `gcp.healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DicomStoreIamBinding` and `gcp.healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_healthcare\_dicom\_store\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var dicomStore = new Gcp.Healthcare.DicomStoreIamPolicy("dicomStore", new() - /// { - /// DicomStoreId = "your-dicom-store-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_dicom\_store\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var dicomStore = new Gcp.Healthcare.DicomStoreIamBinding("dicomStore", new() - /// { - /// DicomStoreId = "your-dicom-store-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_dicom\_store\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var dicomStore = new Gcp.Healthcare.DicomStoreIamMember("dicomStore", new() - /// { - /// DicomStoreId = "your-dicom-store-id", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Healthcare/FhirStore.cs b/sdk/dotnet/Healthcare/FhirStore.cs index 44444e9a2c..99f25d6dd5 100644 --- a/sdk/dotnet/Healthcare/FhirStore.cs +++ b/sdk/dotnet/Healthcare/FhirStore.cs @@ -65,6 +65,22 @@ namespace Pulumi.Gcp.Healthcare /// /// return await Deployment.RunAsync(() => /// { + /// var project = Gcp.Organizations.GetProject.Invoke(); + /// + /// var bigqueryEditor = new Gcp.Projects.IAMMember("bigqueryEditor", new() + /// { + /// Project = project.Apply(getProjectResult => getProjectResult.ProjectId), + /// Role = "roles/bigquery.dataEditor", + /// Member = $"serviceAccount:service-{project.Apply(getProjectResult => getProjectResult.Number)}@gcp-sa-healthcare.iam.gserviceaccount.com", + /// }); + /// + /// var bigqueryJobUser = new Gcp.Projects.IAMMember("bigqueryJobUser", new() + /// { + /// Project = project.Apply(getProjectResult => getProjectResult.ProjectId), + /// Role = "roles/bigquery.jobUser", + /// Member = $"serviceAccount:service-{project.Apply(getProjectResult => getProjectResult.Number)}@gcp-sa-healthcare.iam.gserviceaccount.com", + /// }); + /// /// var dataset = new Gcp.Healthcare.Dataset("dataset", new() /// { /// Location = "us-central1", @@ -114,6 +130,13 @@ namespace Pulumi.Gcp.Healthcare /// }, /// }, /// }, + /// }, new CustomResourceOptions + /// { + /// DependsOn = new[] + /// { + /// bigqueryEditor, + /// bigqueryJobUser, + /// }, /// }); /// /// var topic = new Gcp.PubSub.Topic("topic"); diff --git a/sdk/dotnet/Healthcare/FhirStoreIamBinding.cs b/sdk/dotnet/Healthcare/FhirStoreIamBinding.cs index 64ff373a4c..4a7ac2bd4e 100644 --- a/sdk/dotnet/Healthcare/FhirStoreIamBinding.cs +++ b/sdk/dotnet/Healthcare/FhirStoreIamBinding.cs @@ -10,90 +10,6 @@ namespace Pulumi.Gcp.Healthcare { /// - /// Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - /// - /// * `gcp.healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - /// * `gcp.healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - /// * `gcp.healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - /// - /// > **Note:** `gcp.healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.FhirStoreIamBinding` and `gcp.healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_healthcare\_fhir\_store\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var fhirStore = new Gcp.Healthcare.FhirStoreIamPolicy("fhirStore", new() - /// { - /// FhirStoreId = "your-fhir-store-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_fhir\_store\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var fhirStore = new Gcp.Healthcare.FhirStoreIamBinding("fhirStore", new() - /// { - /// FhirStoreId = "your-fhir-store-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_fhir\_store\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var fhirStore = new Gcp.Healthcare.FhirStoreIamMember("fhirStore", new() - /// { - /// FhirStoreId = "your-fhir-store-id", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Healthcare/FhirStoreIamMember.cs b/sdk/dotnet/Healthcare/FhirStoreIamMember.cs index 6820f2486c..afeae181b6 100644 --- a/sdk/dotnet/Healthcare/FhirStoreIamMember.cs +++ b/sdk/dotnet/Healthcare/FhirStoreIamMember.cs @@ -10,90 +10,6 @@ namespace Pulumi.Gcp.Healthcare { /// - /// Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - /// - /// * `gcp.healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - /// * `gcp.healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - /// * `gcp.healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - /// - /// > **Note:** `gcp.healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.FhirStoreIamBinding` and `gcp.healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_healthcare\_fhir\_store\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var fhirStore = new Gcp.Healthcare.FhirStoreIamPolicy("fhirStore", new() - /// { - /// FhirStoreId = "your-fhir-store-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_fhir\_store\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var fhirStore = new Gcp.Healthcare.FhirStoreIamBinding("fhirStore", new() - /// { - /// FhirStoreId = "your-fhir-store-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_fhir\_store\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var fhirStore = new Gcp.Healthcare.FhirStoreIamMember("fhirStore", new() - /// { - /// FhirStoreId = "your-fhir-store-id", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Healthcare/FhirStoreIamPolicy.cs b/sdk/dotnet/Healthcare/FhirStoreIamPolicy.cs index 73b322cfcb..f88fc5701a 100644 --- a/sdk/dotnet/Healthcare/FhirStoreIamPolicy.cs +++ b/sdk/dotnet/Healthcare/FhirStoreIamPolicy.cs @@ -10,90 +10,6 @@ namespace Pulumi.Gcp.Healthcare { /// - /// Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - /// - /// * `gcp.healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - /// * `gcp.healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - /// * `gcp.healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - /// - /// > **Note:** `gcp.healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.FhirStoreIamBinding` and `gcp.healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_healthcare\_fhir\_store\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var fhirStore = new Gcp.Healthcare.FhirStoreIamPolicy("fhirStore", new() - /// { - /// FhirStoreId = "your-fhir-store-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_fhir\_store\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var fhirStore = new Gcp.Healthcare.FhirStoreIamBinding("fhirStore", new() - /// { - /// FhirStoreId = "your-fhir-store-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_fhir\_store\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var fhirStore = new Gcp.Healthcare.FhirStoreIamMember("fhirStore", new() - /// { - /// FhirStoreId = "your-fhir-store-id", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Healthcare/Hl7StoreIamBinding.cs b/sdk/dotnet/Healthcare/Hl7StoreIamBinding.cs index a9af6385a0..e82519f168 100644 --- a/sdk/dotnet/Healthcare/Hl7StoreIamBinding.cs +++ b/sdk/dotnet/Healthcare/Hl7StoreIamBinding.cs @@ -10,90 +10,6 @@ namespace Pulumi.Gcp.Healthcare { /// - /// Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - /// - /// * `gcp.healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - /// * `gcp.healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - /// * `gcp.healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - /// - /// > **Note:** `gcp.healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.Hl7StoreIamBinding` and `gcp.healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_healthcare\_hl7\_v2\_store\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamPolicy("hl7V2Store", new() - /// { - /// Hl7V2StoreId = "your-hl7-v2-store-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_hl7\_v2\_store\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamBinding("hl7V2Store", new() - /// { - /// Hl7V2StoreId = "your-hl7-v2-store-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_hl7\_v2\_store\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamMember("hl7V2Store", new() - /// { - /// Hl7V2StoreId = "your-hl7-v2-store-id", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Healthcare/Hl7StoreIamMember.cs b/sdk/dotnet/Healthcare/Hl7StoreIamMember.cs index 61a644fab5..eb88eacf59 100644 --- a/sdk/dotnet/Healthcare/Hl7StoreIamMember.cs +++ b/sdk/dotnet/Healthcare/Hl7StoreIamMember.cs @@ -10,90 +10,6 @@ namespace Pulumi.Gcp.Healthcare { /// - /// Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - /// - /// * `gcp.healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - /// * `gcp.healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - /// * `gcp.healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - /// - /// > **Note:** `gcp.healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.Hl7StoreIamBinding` and `gcp.healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_healthcare\_hl7\_v2\_store\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamPolicy("hl7V2Store", new() - /// { - /// Hl7V2StoreId = "your-hl7-v2-store-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_hl7\_v2\_store\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamBinding("hl7V2Store", new() - /// { - /// Hl7V2StoreId = "your-hl7-v2-store-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_hl7\_v2\_store\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamMember("hl7V2Store", new() - /// { - /// Hl7V2StoreId = "your-hl7-v2-store-id", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Healthcare/Hl7StoreIamPolicy.cs b/sdk/dotnet/Healthcare/Hl7StoreIamPolicy.cs index e32e8239d3..7d862c0a2a 100644 --- a/sdk/dotnet/Healthcare/Hl7StoreIamPolicy.cs +++ b/sdk/dotnet/Healthcare/Hl7StoreIamPolicy.cs @@ -10,90 +10,6 @@ namespace Pulumi.Gcp.Healthcare { /// - /// Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - /// - /// * `gcp.healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - /// * `gcp.healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - /// * `gcp.healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - /// - /// > **Note:** `gcp.healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.Hl7StoreIamBinding` and `gcp.healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_healthcare\_hl7\_v2\_store\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamPolicy("hl7V2Store", new() - /// { - /// Hl7V2StoreId = "your-hl7-v2-store-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_hl7\_v2\_store\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamBinding("hl7V2Store", new() - /// { - /// Hl7V2StoreId = "your-hl7-v2-store-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_healthcare\_hl7\_v2\_store\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var hl7V2Store = new Gcp.Healthcare.Hl7StoreIamMember("hl7V2Store", new() - /// { - /// Hl7V2StoreId = "your-hl7-v2-store-id", - /// Member = "user:jane@example.com", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Iam/AccessBoundaryPolicy.cs b/sdk/dotnet/Iam/AccessBoundaryPolicy.cs new file mode 100644 index 0000000000..d1058a395b --- /dev/null +++ b/sdk/dotnet/Iam/AccessBoundaryPolicy.cs @@ -0,0 +1,188 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Iam +{ + /// + /// Represents a collection of access boundary policies to apply to a given resource. + /// **NOTE**: This is a private feature and users should contact GCP support + /// if they would like to test it. + /// + /// ## Example Usage + /// + /// ## Import + /// + /// AccessBoundaryPolicy can be imported using any of these accepted formats + /// + /// ```sh + /// $ pulumi import gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy default {{parent}}/{{name}} + /// ``` + /// + [GcpResourceType("gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy")] + public partial class AccessBoundaryPolicy : global::Pulumi.CustomResource + { + /// + /// The display name of the rule. + /// + [Output("displayName")] + public Output DisplayName { get; private set; } = null!; + + /// + /// The hash of the resource. Used internally during updates. + /// + [Output("etag")] + public Output Etag { get; private set; } = null!; + + /// + /// The name of the policy. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// The attachment point is identified by its URL-encoded full resource name. + /// + [Output("parent")] + public Output Parent { get; private set; } = null!; + + /// + /// Rules to be applied. + /// Structure is documented below. + /// + [Output("rules")] + public Output> Rules { get; private set; } = null!; + + + /// + /// Create a AccessBoundaryPolicy 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 AccessBoundaryPolicy(string name, AccessBoundaryPolicyArgs args, CustomResourceOptions? options = null) + : base("gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy", name, args ?? new AccessBoundaryPolicyArgs(), MakeResourceOptions(options, "")) + { + } + + private AccessBoundaryPolicy(string name, Input id, AccessBoundaryPolicyState? state = null, CustomResourceOptions? options = null) + : base("gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy", 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 AccessBoundaryPolicy 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 AccessBoundaryPolicy Get(string name, Input id, AccessBoundaryPolicyState? state = null, CustomResourceOptions? options = null) + { + return new AccessBoundaryPolicy(name, id, state, options); + } + } + + public sealed class AccessBoundaryPolicyArgs : global::Pulumi.ResourceArgs + { + /// + /// The display name of the rule. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + /// + /// The name of the policy. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The attachment point is identified by its URL-encoded full resource name. + /// + [Input("parent", required: true)] + public Input Parent { get; set; } = null!; + + [Input("rules", required: true)] + private InputList? _rules; + + /// + /// Rules to be applied. + /// Structure is documented below. + /// + public InputList Rules + { + get => _rules ?? (_rules = new InputList()); + set => _rules = value; + } + + public AccessBoundaryPolicyArgs() + { + } + public static new AccessBoundaryPolicyArgs Empty => new AccessBoundaryPolicyArgs(); + } + + public sealed class AccessBoundaryPolicyState : global::Pulumi.ResourceArgs + { + /// + /// The display name of the rule. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + /// + /// The hash of the resource. Used internally during updates. + /// + [Input("etag")] + public Input? Etag { get; set; } + + /// + /// The name of the policy. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The attachment point is identified by its URL-encoded full resource name. + /// + [Input("parent")] + public Input? Parent { get; set; } + + [Input("rules")] + private InputList? _rules; + + /// + /// Rules to be applied. + /// Structure is documented below. + /// + public InputList Rules + { + get => _rules ?? (_rules = new InputList()); + set => _rules = value; + } + + public AccessBoundaryPolicyState() + { + } + public static new AccessBoundaryPolicyState Empty => new AccessBoundaryPolicyState(); + } +} diff --git a/sdk/dotnet/Iam/GetWorkloadIdentityPool.cs b/sdk/dotnet/Iam/GetWorkloadIdentityPool.cs index 85bcccfa66..56bfb6ef84 100644 --- a/sdk/dotnet/Iam/GetWorkloadIdentityPool.cs +++ b/sdk/dotnet/Iam/GetWorkloadIdentityPool.cs @@ -12,8 +12,6 @@ namespace Pulumi.Gcp.Iam public static class GetWorkloadIdentityPool { /// - /// Get a IAM workload identity pool from Google Cloud by its id. - /// > **Note:** The following resource requires the Beta IAM role `roles/iam.workloadIdentityPoolAdmin` in order to succeed. `OWNER` and `EDITOR` roles do not include the necessary permissions. /// {{% examples %}} /// ## Example Usage /// {{% example %}} @@ -39,8 +37,6 @@ public static Task InvokeAsync(GetWorkloadIdentit => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:iam/getWorkloadIdentityPool:getWorkloadIdentityPool", args ?? new GetWorkloadIdentityPoolArgs(), options.WithDefaults()); /// - /// Get a IAM workload identity pool from Google Cloud by its id. - /// > **Note:** The following resource requires the Beta IAM role `roles/iam.workloadIdentityPoolAdmin` in order to succeed. `OWNER` and `EDITOR` roles do not include the necessary permissions. /// {{% examples %}} /// ## Example Usage /// {{% example %}} diff --git a/sdk/dotnet/Iam/GetWorkloadIdentityPoolProvider.cs b/sdk/dotnet/Iam/GetWorkloadIdentityPoolProvider.cs index 39514adb35..dbd71036ab 100644 --- a/sdk/dotnet/Iam/GetWorkloadIdentityPoolProvider.cs +++ b/sdk/dotnet/Iam/GetWorkloadIdentityPoolProvider.cs @@ -12,8 +12,6 @@ namespace Pulumi.Gcp.Iam public static class GetWorkloadIdentityPoolProvider { /// - /// Get a IAM workload identity provider from Google Cloud by its id. - /// /// {{% examples %}} /// ## Example Usage /// {{% example %}} @@ -40,8 +38,6 @@ public static Task InvokeAsync(GetWorkloa => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:iam/getWorkloadIdentityPoolProvider:getWorkloadIdentityPoolProvider", args ?? new GetWorkloadIdentityPoolProviderArgs(), options.WithDefaults()); /// - /// Get a IAM workload identity provider from Google Cloud by its id. - /// /// {{% examples %}} /// ## Example Usage /// {{% example %}} diff --git a/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleArgs.cs b/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleArgs.cs new file mode 100644 index 0000000000..47e2e7aab5 --- /dev/null +++ b/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleArgs.cs @@ -0,0 +1,45 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Iam.Inputs +{ + + public sealed class AccessBoundaryPolicyRuleAccessBoundaryRuleArgs : global::Pulumi.ResourceArgs + { + /// + /// The availability condition further constrains the access allowed by the access boundary rule. + /// Structure is documented below. + /// + [Input("availabilityCondition")] + public Input? AvailabilityCondition { get; set; } + + [Input("availablePermissions")] + private InputList? _availablePermissions; + + /// + /// A list of permissions that may be allowed for use on the specified resource. + /// + public InputList AvailablePermissions + { + get => _availablePermissions ?? (_availablePermissions = new InputList()); + set => _availablePermissions = value; + } + + /// + /// The full resource name of a Google Cloud resource entity. + /// + [Input("availableResource")] + public Input? AvailableResource { get; set; } + + public AccessBoundaryPolicyRuleAccessBoundaryRuleArgs() + { + } + public static new AccessBoundaryPolicyRuleAccessBoundaryRuleArgs Empty => new AccessBoundaryPolicyRuleAccessBoundaryRuleArgs(); + } +} diff --git a/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs.cs b/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs.cs new file mode 100644 index 0000000000..4452bc06c6 --- /dev/null +++ b/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs.cs @@ -0,0 +1,47 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Iam.Inputs +{ + + public sealed class AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs : global::Pulumi.ResourceArgs + { + /// + /// Description of the expression. This is a longer text which describes the expression, + /// e.g. when hovered over it in a UI. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Textual representation of an expression in Common Expression Language syntax. + /// + [Input("expression", required: true)] + public Input Expression { get; set; } = null!; + + /// + /// String indicating the location of the expression for error reporting, + /// e.g. a file name and a position in the file. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// Title for the expression, i.e. a short string describing its purpose. + /// This can be used e.g. in UIs which allow to enter the expression. + /// + [Input("title")] + public Input? Title { get; set; } + + public AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs() + { + } + public static new AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs Empty => new AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs(); + } +} diff --git a/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionGetArgs.cs b/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionGetArgs.cs new file mode 100644 index 0000000000..f691b67dd1 --- /dev/null +++ b/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionGetArgs.cs @@ -0,0 +1,47 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Iam.Inputs +{ + + public sealed class AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Description of the expression. This is a longer text which describes the expression, + /// e.g. when hovered over it in a UI. + /// + [Input("description")] + public Input? Description { get; set; } + + /// + /// Textual representation of an expression in Common Expression Language syntax. + /// + [Input("expression", required: true)] + public Input Expression { get; set; } = null!; + + /// + /// String indicating the location of the expression for error reporting, + /// e.g. a file name and a position in the file. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// Title for the expression, i.e. a short string describing its purpose. + /// This can be used e.g. in UIs which allow to enter the expression. + /// + [Input("title")] + public Input? Title { get; set; } + + public AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionGetArgs() + { + } + public static new AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionGetArgs Empty => new AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionGetArgs(); + } +} diff --git a/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleGetArgs.cs b/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleGetArgs.cs new file mode 100644 index 0000000000..b5229e6c80 --- /dev/null +++ b/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleGetArgs.cs @@ -0,0 +1,45 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Iam.Inputs +{ + + public sealed class AccessBoundaryPolicyRuleAccessBoundaryRuleGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The availability condition further constrains the access allowed by the access boundary rule. + /// Structure is documented below. + /// + [Input("availabilityCondition")] + public Input? AvailabilityCondition { get; set; } + + [Input("availablePermissions")] + private InputList? _availablePermissions; + + /// + /// A list of permissions that may be allowed for use on the specified resource. + /// + public InputList AvailablePermissions + { + get => _availablePermissions ?? (_availablePermissions = new InputList()); + set => _availablePermissions = value; + } + + /// + /// The full resource name of a Google Cloud resource entity. + /// + [Input("availableResource")] + public Input? AvailableResource { get; set; } + + public AccessBoundaryPolicyRuleAccessBoundaryRuleGetArgs() + { + } + public static new AccessBoundaryPolicyRuleAccessBoundaryRuleGetArgs Empty => new AccessBoundaryPolicyRuleAccessBoundaryRuleGetArgs(); + } +} diff --git a/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleArgs.cs b/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleArgs.cs new file mode 100644 index 0000000000..43e0b8271c --- /dev/null +++ b/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleArgs.cs @@ -0,0 +1,33 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Iam.Inputs +{ + + public sealed class AccessBoundaryPolicyRuleArgs : global::Pulumi.ResourceArgs + { + /// + /// An access boundary rule in an IAM policy. + /// Structure is documented below. + /// + [Input("accessBoundaryRule")] + public Input? AccessBoundaryRule { get; set; } + + /// + /// The description of the rule. + /// + [Input("description")] + public Input? Description { get; set; } + + public AccessBoundaryPolicyRuleArgs() + { + } + public static new AccessBoundaryPolicyRuleArgs Empty => new AccessBoundaryPolicyRuleArgs(); + } +} diff --git a/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleGetArgs.cs b/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleGetArgs.cs new file mode 100644 index 0000000000..c76b5dbbcf --- /dev/null +++ b/sdk/dotnet/Iam/Inputs/AccessBoundaryPolicyRuleGetArgs.cs @@ -0,0 +1,33 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Iam.Inputs +{ + + public sealed class AccessBoundaryPolicyRuleGetArgs : global::Pulumi.ResourceArgs + { + /// + /// An access boundary rule in an IAM policy. + /// Structure is documented below. + /// + [Input("accessBoundaryRule")] + public Input? AccessBoundaryRule { get; set; } + + /// + /// The description of the rule. + /// + [Input("description")] + public Input? Description { get; set; } + + public AccessBoundaryPolicyRuleGetArgs() + { + } + public static new AccessBoundaryPolicyRuleGetArgs Empty => new AccessBoundaryPolicyRuleGetArgs(); + } +} diff --git a/sdk/dotnet/Iam/Outputs/AccessBoundaryPolicyRule.cs b/sdk/dotnet/Iam/Outputs/AccessBoundaryPolicyRule.cs new file mode 100644 index 0000000000..351768b98e --- /dev/null +++ b/sdk/dotnet/Iam/Outputs/AccessBoundaryPolicyRule.cs @@ -0,0 +1,36 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Iam.Outputs +{ + + [OutputType] + public sealed class AccessBoundaryPolicyRule + { + /// + /// An access boundary rule in an IAM policy. + /// Structure is documented below. + /// + public readonly Outputs.AccessBoundaryPolicyRuleAccessBoundaryRule? AccessBoundaryRule; + /// + /// The description of the rule. + /// + public readonly string? Description; + + [OutputConstructor] + private AccessBoundaryPolicyRule( + Outputs.AccessBoundaryPolicyRuleAccessBoundaryRule? accessBoundaryRule, + + string? description) + { + AccessBoundaryRule = accessBoundaryRule; + Description = description; + } + } +} diff --git a/sdk/dotnet/Iam/Outputs/AccessBoundaryPolicyRuleAccessBoundaryRule.cs b/sdk/dotnet/Iam/Outputs/AccessBoundaryPolicyRuleAccessBoundaryRule.cs new file mode 100644 index 0000000000..a50b85c385 --- /dev/null +++ b/sdk/dotnet/Iam/Outputs/AccessBoundaryPolicyRuleAccessBoundaryRule.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.Iam.Outputs +{ + + [OutputType] + public sealed class AccessBoundaryPolicyRuleAccessBoundaryRule + { + /// + /// The availability condition further constrains the access allowed by the access boundary rule. + /// Structure is documented below. + /// + public readonly Outputs.AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition? AvailabilityCondition; + /// + /// A list of permissions that may be allowed for use on the specified resource. + /// + public readonly ImmutableArray AvailablePermissions; + /// + /// The full resource name of a Google Cloud resource entity. + /// + public readonly string? AvailableResource; + + [OutputConstructor] + private AccessBoundaryPolicyRuleAccessBoundaryRule( + Outputs.AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition? availabilityCondition, + + ImmutableArray availablePermissions, + + string? availableResource) + { + AvailabilityCondition = availabilityCondition; + AvailablePermissions = availablePermissions; + AvailableResource = availableResource; + } + } +} diff --git a/sdk/dotnet/Iam/Outputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition.cs b/sdk/dotnet/Iam/Outputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition.cs new file mode 100644 index 0000000000..6835875698 --- /dev/null +++ b/sdk/dotnet/Iam/Outputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition.cs @@ -0,0 +1,52 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Iam.Outputs +{ + + [OutputType] + public sealed class AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition + { + /// + /// Description of the expression. This is a longer text which describes the expression, + /// e.g. when hovered over it in a UI. + /// + public readonly string? Description; + /// + /// Textual representation of an expression in Common Expression Language syntax. + /// + public readonly string Expression; + /// + /// String indicating the location of the expression for error reporting, + /// e.g. a file name and a position in the file. + /// + public readonly string? Location; + /// + /// Title for the expression, i.e. a short string describing its purpose. + /// This can be used e.g. in UIs which allow to enter the expression. + /// + public readonly string? Title; + + [OutputConstructor] + private AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition( + string? description, + + string expression, + + string? location, + + string? title) + { + Description = description; + Expression = expression; + Location = location; + Title = title; + } + } +} diff --git a/sdk/dotnet/Iam/WorkforcePoolProvider.cs b/sdk/dotnet/Iam/WorkforcePoolProvider.cs index 332283b43d..d041b584e2 100644 --- a/sdk/dotnet/Iam/WorkforcePoolProvider.cs +++ b/sdk/dotnet/Iam/WorkforcePoolProvider.cs @@ -119,7 +119,7 @@ namespace Pulumi.Gcp.Iam /// }, /// Oidc = new Gcp.Iam.Inputs.WorkforcePoolProviderOidcArgs /// { - /// IssuerUri = "https://accounts.google.com", + /// IssuerUri = "https://accounts.thirdparty.com", /// ClientId = "client-id", /// }, /// }); @@ -153,7 +153,7 @@ namespace Pulumi.Gcp.Iam /// }, /// Oidc = new Gcp.Iam.Inputs.WorkforcePoolProviderOidcArgs /// { - /// IssuerUri = "https://accounts.google.com", + /// IssuerUri = "https://accounts.thirdparty.com", /// ClientId = "client-id", /// }, /// DisplayName = "Display name", diff --git a/sdk/dotnet/Iap/Brand.cs b/sdk/dotnet/Iap/Brand.cs index 88054b9555..bbebedb339 100644 --- a/sdk/dotnet/Iap/Brand.cs +++ b/sdk/dotnet/Iap/Brand.cs @@ -10,52 +10,7 @@ namespace Pulumi.Gcp.Iap { /// - /// OAuth brand data. Only "Organization Internal" brands can be created - /// programmatically via API. To convert it into an external brands - /// please use the GCP Console. - /// - /// > **Note:** Brands can only be created once for a Google Cloud - /// project and the underlying Google API doesn't not support DELETE or PATCH methods. - /// Destroying a provider-managed Brand will remove it from state - /// but *will not delete it from Google Cloud.* - /// - /// To get more information about Brand, see: - /// - /// * [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands) - /// * How-to Guides - /// * [Setting up IAP Brand](https://cloud.google.com/iap/docs/tutorial-gce#set_up_iap) - /// /// ## Example Usage - /// ### Iap Brand - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Organizations.Project("project", new() - /// { - /// ProjectId = "tf-test", - /// OrgId = "123456789", - /// }); - /// - /// var projectService = new Gcp.Projects.Service("projectService", new() - /// { - /// Project = project.ProjectId, - /// ServiceName = "iap.googleapis.com", - /// }); - /// - /// var projectBrand = new Gcp.Iap.Brand("projectBrand", new() - /// { - /// SupportEmail = "support@example.com", - /// ApplicationTitle = "Cloud IAP protected Application", - /// Project = projectService.Project, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Iap/Client.cs b/sdk/dotnet/Iap/Client.cs index 6ae7ea7ab8..eff9eee205 100644 --- a/sdk/dotnet/Iap/Client.cs +++ b/sdk/dotnet/Iap/Client.cs @@ -10,58 +10,7 @@ namespace Pulumi.Gcp.Iap { /// - /// Contains the data that describes an Identity Aware Proxy owned client. - /// - /// > **Note:** Only internal org clients can be created via declarative tools. External clients must be - /// manually created via the GCP console. This restriction is due to the existing APIs and not lack of support - /// in this tool. - /// - /// To get more information about Client, see: - /// - /// * [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands.identityAwareProxyClients) - /// * How-to Guides - /// * [Setting up IAP Client](https://cloud.google.com/iap/docs/authentication-howto) - /// - /// > **Warning:** All arguments including `secret` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage - /// ### Iap Client - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Organizations.Project("project", new() - /// { - /// ProjectId = "tf-test", - /// OrgId = "123456789", - /// }); - /// - /// var projectService = new Gcp.Projects.Service("projectService", new() - /// { - /// Project = project.ProjectId, - /// ServiceName = "iap.googleapis.com", - /// }); - /// - /// var projectBrand = new Gcp.Iap.Brand("projectBrand", new() - /// { - /// SupportEmail = "support@example.com", - /// ApplicationTitle = "Cloud IAP protected Application", - /// Project = projectService.Project, - /// }); - /// - /// var projectClient = new Gcp.Iap.Client("projectClient", new() - /// { - /// DisplayName = "Test Client", - /// Brand = projectBrand.Name, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Kms/CryptoKey.cs b/sdk/dotnet/Kms/CryptoKey.cs index 2f83c5d3b0..e1ecf289b8 100644 --- a/sdk/dotnet/Kms/CryptoKey.cs +++ b/sdk/dotnet/Kms/CryptoKey.cs @@ -10,22 +10,6 @@ namespace Pulumi.Gcp.Kms { /// - /// A `CryptoKey` represents a logical key that can be used for cryptographic operations. - /// - /// > **Note:** CryptoKeys cannot be deleted from Google Cloud Platform. - /// Destroying a provider-managed CryptoKey will remove it from state - /// and delete all CryptoKeyVersions, rendering the key unusable, but *will - /// not delete the resource from the project.* When the provider destroys these keys, - /// any data previously encrypted with these keys will be irrecoverable. - /// For this reason, it is strongly recommended that you add lifecycle hooks - /// to the resource to prevent accidental destruction. - /// - /// To get more information about CryptoKey, see: - /// - /// * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys) - /// * How-to Guides - /// * [Creating a key](https://cloud.google.com/kms/docs/creating-keys#create_a_key) - /// /// ## Example Usage /// ### Kms Crypto Key Basic /// diff --git a/sdk/dotnet/Kms/CryptoKeyIAMBinding.cs b/sdk/dotnet/Kms/CryptoKeyIAMBinding.cs index d0bbf90a0e..35af758470 100644 --- a/sdk/dotnet/Kms/CryptoKeyIAMBinding.cs +++ b/sdk/dotnet/Kms/CryptoKeyIAMBinding.cs @@ -10,181 +10,6 @@ namespace Pulumi.Gcp.Kms { /// - /// Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - /// - /// * `gcp.kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - /// * `gcp.kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - /// * `gcp.kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - /// - /// > **Note:** `gcp.kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `gcp.kms.CryptoKeyIAMBinding` and `gcp.kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `gcp.kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyring = new Gcp.Kms.KeyRing("keyring", new() - /// { - /// Location = "global", - /// }); - /// - /// var key = new Gcp.Kms.CryptoKey("key", new() - /// { - /// KeyRing = keyring.Id, - /// RotationPeriod = "100000s", - /// }); - /// - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMPolicy("cryptoKey", new() - /// { - /// CryptoKeyId = key.Id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// }, - /// }, - /// }); - /// - /// }); - /// ``` - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMBinding("cryptoKey", new() - /// { - /// CryptoKeyId = google_kms_crypto_key.Key.Id, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMBinding("cryptoKey", new() - /// { - /// CryptoKeyId = google_kms_crypto_key.Key.Id, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Condition = new Gcp.Kms.Inputs.CryptoKeyIAMBindingConditionArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }); - /// - /// }); - /// ``` - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember("cryptoKey", new() - /// { - /// CryptoKeyId = google_kms_crypto_key.Key.Id, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Member = "user:jane@example.com", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember("cryptoKey", new() - /// { - /// CryptoKeyId = google_kms_crypto_key.Key.Id, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Member = "user:jane@example.com", - /// Condition = new Gcp.Kms.Inputs.CryptoKeyIAMMemberConditionArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Kms/CryptoKeyIAMMember.cs b/sdk/dotnet/Kms/CryptoKeyIAMMember.cs index 1e38b4522d..ab0da21dc1 100644 --- a/sdk/dotnet/Kms/CryptoKeyIAMMember.cs +++ b/sdk/dotnet/Kms/CryptoKeyIAMMember.cs @@ -10,181 +10,6 @@ namespace Pulumi.Gcp.Kms { /// - /// Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - /// - /// * `gcp.kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - /// * `gcp.kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - /// * `gcp.kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - /// - /// > **Note:** `gcp.kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `gcp.kms.CryptoKeyIAMBinding` and `gcp.kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `gcp.kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyring = new Gcp.Kms.KeyRing("keyring", new() - /// { - /// Location = "global", - /// }); - /// - /// var key = new Gcp.Kms.CryptoKey("key", new() - /// { - /// KeyRing = keyring.Id, - /// RotationPeriod = "100000s", - /// }); - /// - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMPolicy("cryptoKey", new() - /// { - /// CryptoKeyId = key.Id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// }, - /// }, - /// }); - /// - /// }); - /// ``` - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMBinding("cryptoKey", new() - /// { - /// CryptoKeyId = google_kms_crypto_key.Key.Id, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMBinding("cryptoKey", new() - /// { - /// CryptoKeyId = google_kms_crypto_key.Key.Id, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Condition = new Gcp.Kms.Inputs.CryptoKeyIAMBindingConditionArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }); - /// - /// }); - /// ``` - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember("cryptoKey", new() - /// { - /// CryptoKeyId = google_kms_crypto_key.Key.Id, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Member = "user:jane@example.com", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember("cryptoKey", new() - /// { - /// CryptoKeyId = google_kms_crypto_key.Key.Id, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Member = "user:jane@example.com", - /// Condition = new Gcp.Kms.Inputs.CryptoKeyIAMMemberConditionArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Kms/CryptoKeyIAMPolicy.cs b/sdk/dotnet/Kms/CryptoKeyIAMPolicy.cs index 233d8716e8..0994dea57c 100644 --- a/sdk/dotnet/Kms/CryptoKeyIAMPolicy.cs +++ b/sdk/dotnet/Kms/CryptoKeyIAMPolicy.cs @@ -10,181 +10,6 @@ namespace Pulumi.Gcp.Kms { /// - /// Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - /// - /// * `gcp.kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - /// * `gcp.kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - /// * `gcp.kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - /// - /// > **Note:** `gcp.kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `gcp.kms.CryptoKeyIAMBinding` and `gcp.kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `gcp.kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyring = new Gcp.Kms.KeyRing("keyring", new() - /// { - /// Location = "global", - /// }); - /// - /// var key = new Gcp.Kms.CryptoKey("key", new() - /// { - /// KeyRing = keyring.Id, - /// RotationPeriod = "100000s", - /// }); - /// - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMPolicy("cryptoKey", new() - /// { - /// CryptoKeyId = key.Id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// }, - /// }, - /// }); - /// - /// }); - /// ``` - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMBinding("cryptoKey", new() - /// { - /// CryptoKeyId = google_kms_crypto_key.Key.Id, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMBinding("cryptoKey", new() - /// { - /// CryptoKeyId = google_kms_crypto_key.Key.Id, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Condition = new Gcp.Kms.Inputs.CryptoKeyIAMBindingConditionArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }); - /// - /// }); - /// ``` - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember("cryptoKey", new() - /// { - /// CryptoKeyId = google_kms_crypto_key.Key.Id, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Member = "user:jane@example.com", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var cryptoKey = new Gcp.Kms.CryptoKeyIAMMember("cryptoKey", new() - /// { - /// CryptoKeyId = google_kms_crypto_key.Key.Id, - /// Role = "roles/cloudkms.cryptoKeyEncrypter", - /// Member = "user:jane@example.com", - /// Condition = new Gcp.Kms.Inputs.CryptoKeyIAMMemberConditionArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Kms/KeyRing.cs b/sdk/dotnet/Kms/KeyRing.cs index c617aa8f5c..6dbd325852 100644 --- a/sdk/dotnet/Kms/KeyRing.cs +++ b/sdk/dotnet/Kms/KeyRing.cs @@ -10,18 +10,6 @@ namespace Pulumi.Gcp.Kms { /// - /// A `KeyRing` is a toplevel logical grouping of `CryptoKeys`. - /// - /// > **Note:** KeyRings cannot be deleted from Google Cloud Platform. - /// Destroying a provider-managed KeyRing will remove it from state but - /// *will not delete the resource from the project.* - /// - /// To get more information about KeyRing, see: - /// - /// * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings) - /// * How-to Guides - /// * [Creating a key ring](https://cloud.google.com/kms/docs/creating-keys#create_a_key_ring) - /// /// ## Example Usage /// ### Kms Key Ring Basic /// diff --git a/sdk/dotnet/Kms/KeyRingIAMBinding.cs b/sdk/dotnet/Kms/KeyRingIAMBinding.cs index 02d9426958..52337d328f 100644 --- a/sdk/dotnet/Kms/KeyRingIAMBinding.cs +++ b/sdk/dotnet/Kms/KeyRingIAMBinding.cs @@ -10,192 +10,6 @@ namespace Pulumi.Gcp.Kms { /// - /// Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - /// - /// * `gcp.kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - /// * `gcp.kms.KeyRingIAMBinding`: 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 key ring are preserved. - /// * `gcp.kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - /// - /// > **Note:** `gcp.kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `gcp.kms.KeyRingIAMBinding` and `gcp.kms.KeyRingIAMMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.kms.KeyRingIAMBinding` resources **can be** used in conjunction with `gcp.kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_kms\_key\_ring\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyring = new Gcp.Kms.KeyRing("keyring", new() - /// { - /// Location = "global", - /// }); - /// - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var keyRing = new Gcp.Kms.KeyRingIAMPolicy("keyRing", new() - /// { - /// KeyRingId = keyring.Id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyring = new Gcp.Kms.KeyRing("keyring", new() - /// { - /// Location = "global", - /// }); - /// - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }, - /// }, - /// }); - /// - /// var keyRing = new Gcp.Kms.KeyRingIAMPolicy("keyRing", new() - /// { - /// KeyRingId = keyring.Id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_kms\_key\_ring\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyRing = new Gcp.Kms.KeyRingIAMBinding("keyRing", new() - /// { - /// KeyRingId = "your-key-ring-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/cloudkms.admin", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyRing = new Gcp.Kms.KeyRingIAMBinding("keyRing", new() - /// { - /// Condition = new Gcp.Kms.Inputs.KeyRingIAMBindingConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// KeyRingId = "your-key-ring-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/cloudkms.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_kms\_key\_ring\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyRing = new Gcp.Kms.KeyRingIAMMember("keyRing", new() - /// { - /// KeyRingId = "your-key-ring-id", - /// Member = "user:jane@example.com", - /// Role = "roles/cloudkms.admin", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyRing = new Gcp.Kms.KeyRingIAMMember("keyRing", new() - /// { - /// Condition = new Gcp.Kms.Inputs.KeyRingIAMMemberConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// KeyRingId = "your-key-ring-id", - /// Member = "user:jane@example.com", - /// Role = "roles/cloudkms.admin", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Kms/KeyRingIAMMember.cs b/sdk/dotnet/Kms/KeyRingIAMMember.cs index 3114bdd952..0f1997d500 100644 --- a/sdk/dotnet/Kms/KeyRingIAMMember.cs +++ b/sdk/dotnet/Kms/KeyRingIAMMember.cs @@ -10,192 +10,6 @@ namespace Pulumi.Gcp.Kms { /// - /// Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - /// - /// * `gcp.kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - /// * `gcp.kms.KeyRingIAMBinding`: 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 key ring are preserved. - /// * `gcp.kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - /// - /// > **Note:** `gcp.kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `gcp.kms.KeyRingIAMBinding` and `gcp.kms.KeyRingIAMMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.kms.KeyRingIAMBinding` resources **can be** used in conjunction with `gcp.kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_kms\_key\_ring\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyring = new Gcp.Kms.KeyRing("keyring", new() - /// { - /// Location = "global", - /// }); - /// - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var keyRing = new Gcp.Kms.KeyRingIAMPolicy("keyRing", new() - /// { - /// KeyRingId = keyring.Id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyring = new Gcp.Kms.KeyRing("keyring", new() - /// { - /// Location = "global", - /// }); - /// - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }, - /// }, - /// }); - /// - /// var keyRing = new Gcp.Kms.KeyRingIAMPolicy("keyRing", new() - /// { - /// KeyRingId = keyring.Id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_kms\_key\_ring\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyRing = new Gcp.Kms.KeyRingIAMBinding("keyRing", new() - /// { - /// KeyRingId = "your-key-ring-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/cloudkms.admin", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyRing = new Gcp.Kms.KeyRingIAMBinding("keyRing", new() - /// { - /// Condition = new Gcp.Kms.Inputs.KeyRingIAMBindingConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// KeyRingId = "your-key-ring-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/cloudkms.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_kms\_key\_ring\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyRing = new Gcp.Kms.KeyRingIAMMember("keyRing", new() - /// { - /// KeyRingId = "your-key-ring-id", - /// Member = "user:jane@example.com", - /// Role = "roles/cloudkms.admin", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyRing = new Gcp.Kms.KeyRingIAMMember("keyRing", new() - /// { - /// Condition = new Gcp.Kms.Inputs.KeyRingIAMMemberConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// KeyRingId = "your-key-ring-id", - /// Member = "user:jane@example.com", - /// Role = "roles/cloudkms.admin", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Kms/KeyRingIAMPolicy.cs b/sdk/dotnet/Kms/KeyRingIAMPolicy.cs index 25bd77a571..d8c39c7d47 100644 --- a/sdk/dotnet/Kms/KeyRingIAMPolicy.cs +++ b/sdk/dotnet/Kms/KeyRingIAMPolicy.cs @@ -10,192 +10,6 @@ namespace Pulumi.Gcp.Kms { /// - /// Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - /// - /// * `gcp.kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - /// * `gcp.kms.KeyRingIAMBinding`: 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 key ring are preserved. - /// * `gcp.kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - /// - /// > **Note:** `gcp.kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `gcp.kms.KeyRingIAMBinding` and `gcp.kms.KeyRingIAMMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.kms.KeyRingIAMBinding` resources **can be** used in conjunction with `gcp.kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_kms\_key\_ring\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyring = new Gcp.Kms.KeyRing("keyring", new() - /// { - /// Location = "global", - /// }); - /// - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var keyRing = new Gcp.Kms.KeyRingIAMPolicy("keyRing", new() - /// { - /// KeyRingId = keyring.Id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyring = new Gcp.Kms.KeyRing("keyring", new() - /// { - /// Location = "global", - /// }); - /// - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Title = "expires_after_2019_12_31", - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// }, - /// }, - /// }, - /// }); - /// - /// var keyRing = new Gcp.Kms.KeyRingIAMPolicy("keyRing", new() - /// { - /// KeyRingId = keyring.Id, - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_kms\_key\_ring\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyRing = new Gcp.Kms.KeyRingIAMBinding("keyRing", new() - /// { - /// KeyRingId = "your-key-ring-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/cloudkms.admin", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyRing = new Gcp.Kms.KeyRingIAMBinding("keyRing", new() - /// { - /// Condition = new Gcp.Kms.Inputs.KeyRingIAMBindingConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// KeyRingId = "your-key-ring-id", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/cloudkms.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_kms\_key\_ring\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyRing = new Gcp.Kms.KeyRingIAMMember("keyRing", new() - /// { - /// KeyRingId = "your-key-ring-id", - /// Member = "user:jane@example.com", - /// Role = "roles/cloudkms.admin", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var keyRing = new Gcp.Kms.KeyRingIAMMember("keyRing", new() - /// { - /// Condition = new Gcp.Kms.Inputs.KeyRingIAMMemberConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// KeyRingId = "your-key-ring-id", - /// Member = "user:jane@example.com", - /// Role = "roles/cloudkms.admin", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Kms/KeyRingImportJob.cs b/sdk/dotnet/Kms/KeyRingImportJob.cs index 2e512e79cd..58fee5e41d 100644 --- a/sdk/dotnet/Kms/KeyRingImportJob.cs +++ b/sdk/dotnet/Kms/KeyRingImportJob.cs @@ -10,21 +10,6 @@ namespace Pulumi.Gcp.Kms { /// - /// A `KeyRingImportJob` can be used to create `CryptoKeys` and `CryptoKeyVersions` using pre-existing - /// key material, generated outside of Cloud KMS. A `KeyRingImportJob` expires 3 days after it is created. - /// Once expired, Cloud KMS will no longer be able to import or unwrap any key material that - /// was wrapped with the `KeyRingImportJob`'s public key. - /// - /// > **Note:** KeyRingImportJobs cannot be deleted from Google Cloud Platform. - /// Destroying a provider-managed KeyRingImportJob will remove it from state but - /// *will not delete the resource from the project.* - /// - /// To get more information about KeyRingImportJob, see: - /// - /// * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.importJobs) - /// * How-to Guides - /// * [Importing a key](https://cloud.google.com/kms/docs/importing-a-key) - /// /// ## Example Usage /// /// ## Import diff --git a/sdk/dotnet/Kms/SecretCiphertext.cs b/sdk/dotnet/Kms/SecretCiphertext.cs index 46a38f49d9..3544d56cdc 100644 --- a/sdk/dotnet/Kms/SecretCiphertext.cs +++ b/sdk/dotnet/Kms/SecretCiphertext.cs @@ -10,21 +10,6 @@ namespace Pulumi.Gcp.Kms { /// - /// Encrypts secret data with Google Cloud KMS and provides access to the ciphertext. - /// - /// > **NOTE:** Using this resource will allow you to conceal secret data within your - /// resource definitions, but it does not take care of protecting that data in the - /// logging output, plan output, or state output. Please take care to secure your secret - /// data outside of resource definitions. - /// - /// To get more information about SecretCiphertext, see: - /// - /// * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt) - /// * How-to Guides - /// * [Encrypting and decrypting data with a symmetric key](https://cloud.google.com/kms/docs/encrypt-decrypt) - /// - /// > **Warning:** All arguments including `plaintext` and `additional_authenticated_data` will be stored in the raw state as plain-text. - /// /// ## Example Usage /// ### Kms Secret Ciphertext Basic /// diff --git a/sdk/dotnet/Logging/BillingAccountBucketConfig.cs b/sdk/dotnet/Logging/BillingAccountBucketConfig.cs index af91f8a612..9edb0b438d 100644 --- a/sdk/dotnet/Logging/BillingAccountBucketConfig.cs +++ b/sdk/dotnet/Logging/BillingAccountBucketConfig.cs @@ -10,12 +10,6 @@ namespace Pulumi.Gcp.Logging { /// - /// Manages a billing account level logging bucket config. For more information see - /// [the official logging documentation](https://cloud.google.com/logging/docs/) and - /// [Storing Logs](https://cloud.google.com/logging/docs/storage). - /// - /// > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - /// /// ## Example Usage /// /// ```csharp diff --git a/sdk/dotnet/Logging/BillingAccountSink.cs b/sdk/dotnet/Logging/BillingAccountSink.cs index e781a7d1aa..6a0506fa16 100644 --- a/sdk/dotnet/Logging/BillingAccountSink.cs +++ b/sdk/dotnet/Logging/BillingAccountSink.cs @@ -10,15 +10,6 @@ namespace Pulumi.Gcp.Logging { /// - /// * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/billingAccounts.sinks) - /// * How-to Guides - /// * [Exporting Logs](https://cloud.google.com/logging/docs/export) - /// - /// > **Note** You must have the "Logs Configuration Writer" IAM role (`roles/logging.configWriter`) - /// [granted on the billing account](https://cloud.google.com/billing/reference/rest/v1/billingAccounts/getIamPolicy) to - /// the credentials used with this provider. [IAM roles granted on a billing account](https://cloud.google.com/billing/docs/how-to/billing-access) are separate from the - /// typical IAM roles granted on a project. - /// /// ## Example Usage /// /// ```csharp diff --git a/sdk/dotnet/Logging/FolderBucketConfig.cs b/sdk/dotnet/Logging/FolderBucketConfig.cs index 7b2deb7902..558894a247 100644 --- a/sdk/dotnet/Logging/FolderBucketConfig.cs +++ b/sdk/dotnet/Logging/FolderBucketConfig.cs @@ -10,12 +10,6 @@ namespace Pulumi.Gcp.Logging { /// - /// Manages a folder-level logging bucket config. For more information see - /// [the official logging documentation](https://cloud.google.com/logging/docs/) and - /// [Storing Logs](https://cloud.google.com/logging/docs/storage). - /// - /// > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - /// /// ## Example Usage /// /// ```csharp diff --git a/sdk/dotnet/Logging/FolderExclusion.cs b/sdk/dotnet/Logging/FolderExclusion.cs index 8cf9076261..a033c1c335 100644 --- a/sdk/dotnet/Logging/FolderExclusion.cs +++ b/sdk/dotnet/Logging/FolderExclusion.cs @@ -10,14 +10,6 @@ namespace Pulumi.Gcp.Logging { /// - /// Manages a folder-level logging exclusion. For more information see: - /// - /// * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/folders.exclusions) - /// * How-to Guides - /// * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - /// - /// > You can specify exclusions for log sinks created by the provider by using the exclusions field of `gcp.logging.FolderSink` - /// /// ## Example Usage /// /// ```csharp diff --git a/sdk/dotnet/Logging/OrganizationBucketConfig.cs b/sdk/dotnet/Logging/OrganizationBucketConfig.cs index 8bd5e99712..5449dc7af3 100644 --- a/sdk/dotnet/Logging/OrganizationBucketConfig.cs +++ b/sdk/dotnet/Logging/OrganizationBucketConfig.cs @@ -10,12 +10,6 @@ namespace Pulumi.Gcp.Logging { /// - /// Manages a organization-level logging bucket config. For more information see - /// [the official logging documentation](https://cloud.google.com/logging/docs/) and - /// [Storing Logs](https://cloud.google.com/logging/docs/storage). - /// - /// > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - /// /// ## Example Usage /// /// ```csharp diff --git a/sdk/dotnet/Logging/OrganizationExclusion.cs b/sdk/dotnet/Logging/OrganizationExclusion.cs index c080435fe2..c004b55b08 100644 --- a/sdk/dotnet/Logging/OrganizationExclusion.cs +++ b/sdk/dotnet/Logging/OrganizationExclusion.cs @@ -10,14 +10,6 @@ namespace Pulumi.Gcp.Logging { /// - /// Manages an organization-level logging exclusion. For more information see: - /// - /// * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/organizations.exclusions) - /// * How-to Guides - /// * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - /// - /// > You can specify exclusions for log sinks created by the provider by using the exclusions field of `gcp.logging.OrganizationSink` - /// /// ## Example Usage /// /// ```csharp diff --git a/sdk/dotnet/Logging/ProjectBucketConfig.cs b/sdk/dotnet/Logging/ProjectBucketConfig.cs index f5f3e58f8d..224ed56240 100644 --- a/sdk/dotnet/Logging/ProjectBucketConfig.cs +++ b/sdk/dotnet/Logging/ProjectBucketConfig.cs @@ -10,12 +10,6 @@ namespace Pulumi.Gcp.Logging { /// - /// Manages a project-level logging bucket config. For more information see - /// [the official logging documentation](https://cloud.google.com/logging/docs/) and - /// [Storing Logs](https://cloud.google.com/logging/docs/storage). - /// - /// > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - /// /// ## Example Usage /// /// ```csharp diff --git a/sdk/dotnet/Logging/ProjectExclusion.cs b/sdk/dotnet/Logging/ProjectExclusion.cs index ab0a885036..ea3bd9028a 100644 --- a/sdk/dotnet/Logging/ProjectExclusion.cs +++ b/sdk/dotnet/Logging/ProjectExclusion.cs @@ -10,14 +10,6 @@ namespace Pulumi.Gcp.Logging { /// - /// Manages a project-level logging exclusion. For more information see: - /// - /// * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.exclusions) - /// * How-to Guides - /// * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - /// - /// > You can specify exclusions for log sinks created by the provider by using the exclusions field of `gcp.logging.ProjectSink` - /// /// ## Example Usage /// /// ```csharp diff --git a/sdk/dotnet/Monitoring/NotificationChannel.cs b/sdk/dotnet/Monitoring/NotificationChannel.cs index 97f29c3c0e..fd044b968d 100644 --- a/sdk/dotnet/Monitoring/NotificationChannel.cs +++ b/sdk/dotnet/Monitoring/NotificationChannel.cs @@ -10,33 +10,6 @@ namespace Pulumi.Gcp.Monitoring { /// - /// A NotificationChannel is a medium through which an alert is delivered - /// when a policy violation is detected. Examples of channels include email, SMS, - /// and third-party messaging applications. Fields containing sensitive information - /// like authentication tokens or contact info are only partially populated on retrieval. - /// - /// Notification Channels are designed to be flexible and are made up of a supported `type` - /// and labels to configure that channel. Each `type` has specific labels that need to be - /// present for that channel to be correctly configured. The labels that are required to be - /// present for one channel `type` are often different than those required for another. - /// Due to these loose constraints it's often best to set up a channel through the UI - /// and import it to the provider when setting up a brand new channel type to determine which - /// labels are required. - /// - /// A list of supported channels per project the `list` endpoint can be - /// accessed programmatically or through the api explorer at https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannelDescriptors/list . - /// This provides the channel type and all of the required labels that must be passed. - /// - /// To get more information about NotificationChannel, see: - /// - /// * [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannels) - /// * How-to Guides - /// * [Notification Options](https://cloud.google.com/monitoring/support/notification-options) - /// * [Monitoring API Documentation](https://cloud.google.com/monitoring/api/v3/) - /// - /// > **Warning:** All arguments including `sensitive_labels.auth_token`, `sensitive_labels.password`, and `sensitive_labels.service_key` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage /// ### Notification Channel Basic /// @@ -126,12 +99,10 @@ public partial class NotificationChannel : global::Pulumi.CustomResource public Output ForceDelete { get; private set; } = null!; /// - /// Configuration fields that define the channel and its behavior. The - /// permissible and required labels are specified in the - /// NotificationChannelDescriptor corresponding to the type field. - /// Labels with sensitive data are obfuscated by the API and therefore the provider cannot - /// determine if there are upstream changes to these fields. They can also be configured via - /// the sensitive_labels block, but cannot be configured in both places. + /// Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + /// NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + /// therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + /// sensitive_labels block, but cannot be configured in both places. /// [Output("labels")] public Output?> Labels { get; private set; } = null!; @@ -259,12 +230,10 @@ public sealed class NotificationChannelArgs : global::Pulumi.ResourceArgs private InputMap? _labels; /// - /// Configuration fields that define the channel and its behavior. The - /// permissible and required labels are specified in the - /// NotificationChannelDescriptor corresponding to the type field. - /// Labels with sensitive data are obfuscated by the API and therefore the provider cannot - /// determine if there are upstream changes to these fields. They can also be configured via - /// the sensitive_labels block, but cannot be configured in both places. + /// Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + /// NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + /// therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + /// sensitive_labels block, but cannot be configured in both places. /// public InputMap Labels { @@ -349,12 +318,10 @@ public sealed class NotificationChannelState : global::Pulumi.ResourceArgs private InputMap? _labels; /// - /// Configuration fields that define the channel and its behavior. The - /// permissible and required labels are specified in the - /// NotificationChannelDescriptor corresponding to the type field. - /// Labels with sensitive data are obfuscated by the API and therefore the provider cannot - /// determine if there are upstream changes to these fields. They can also be configured via - /// the sensitive_labels block, but cannot be configured in both places. + /// Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + /// NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + /// therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + /// sensitive_labels block, but cannot be configured in both places. /// public InputMap Labels { diff --git a/sdk/dotnet/Monitoring/Slo.cs b/sdk/dotnet/Monitoring/Slo.cs index 98fee60d99..9e35ade60f 100644 --- a/sdk/dotnet/Monitoring/Slo.cs +++ b/sdk/dotnet/Monitoring/Slo.cs @@ -44,7 +44,7 @@ namespace Pulumi.Gcp.Monitoring /// { /// Service = @default.Apply(@default => @default.Apply(getAppEngineServiceResult => getAppEngineServiceResult.ServiceId)), /// SloId = "ae-slo", - /// DisplayName = "Test SLO for App Engine", + /// DisplayName = "Terraform Test SLO for App Engine", /// Goal = 0.9, /// CalendarPeriod = "DAY", /// BasicSli = new Gcp.Monitoring.Inputs.SloBasicSliArgs @@ -82,7 +82,7 @@ namespace Pulumi.Gcp.Monitoring /// { /// Service = customsrv.ServiceId, /// SloId = "consumed-api-slo", - /// DisplayName = "Test SLO with request based SLI (good total ratio)", + /// DisplayName = "Terraform Test SLO with request based SLI (good total ratio)", /// Goal = 0.9, /// RollingPeriodDays = 30, /// RequestBasedSli = new Gcp.Monitoring.Inputs.SloRequestBasedSliArgs diff --git a/sdk/dotnet/Monitoring/UptimeCheckConfig.cs b/sdk/dotnet/Monitoring/UptimeCheckConfig.cs index 24ec712734..ba864806aa 100644 --- a/sdk/dotnet/Monitoring/UptimeCheckConfig.cs +++ b/sdk/dotnet/Monitoring/UptimeCheckConfig.cs @@ -10,17 +10,6 @@ namespace Pulumi.Gcp.Monitoring { /// - /// This message configures which resources and services to monitor for availability. - /// - /// To get more information about UptimeCheckConfig, see: - /// - /// * [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.uptimeCheckConfigs) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/monitoring/uptime-checks/) - /// - /// > **Warning:** All arguments including `http_check.auth_info.password` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage /// ### Uptime Check Config Http /// diff --git a/sdk/dotnet/Notebooks/Instance.cs b/sdk/dotnet/Notebooks/Instance.cs index 5779d3564e..49958fbaab 100644 --- a/sdk/dotnet/Notebooks/Instance.cs +++ b/sdk/dotnet/Notebooks/Instance.cs @@ -66,6 +66,7 @@ namespace Pulumi.Gcp.Notebooks /// Metadata = /// { /// { "proxy-mode", "service_account" }, + /// { "terraform", "true" }, /// }, /// }); /// @@ -144,6 +145,10 @@ namespace Pulumi.Gcp.Notebooks /// { /// { "k", "val" }, /// }, + /// Metadata = + /// { + /// { "terraform", "true" }, + /// }, /// }); /// /// }); diff --git a/sdk/dotnet/Organizations/Folder.cs b/sdk/dotnet/Organizations/Folder.cs index 5e934b58ca..58de792a4b 100644 --- a/sdk/dotnet/Organizations/Folder.cs +++ b/sdk/dotnet/Organizations/Folder.cs @@ -10,20 +10,6 @@ namespace Pulumi.Gcp.Organizations { /// - /// Allows management of a Google Cloud Platform folder. For more information see - /// [the official documentation](https://cloud.google.com/resource-manager/docs/creating-managing-folders) - /// and - /// [API](https://cloud.google.com/resource-manager/reference/rest/v2/folders). - /// - /// A folder can contain projects, other folders, or a combination of both. You can use folders to group projects under an organization in a hierarchy. For example, your organization might contain multiple departments, each with its own set of Cloud Platform resources. Folders allows you to group these resources on a per-department basis. Folders are used to group resources that share common IAM policies. - /// - /// Folders created live inside an Organization. See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - /// - /// The service account used to run the provider when creating a `gcp.organizations.Folder` - /// resource must have `roles/resourcemanager.folderCreator`. See the - /// [Access Control for Folders Using IAM](https://cloud.google.com/resource-manager/docs/access-control-folders) - /// doc for more information. - /// /// ## Example Usage /// /// ```csharp diff --git a/sdk/dotnet/Organizations/IAMBinding.cs b/sdk/dotnet/Organizations/IAMBinding.cs index a2c5e75dc1..7a651e2353 100644 --- a/sdk/dotnet/Organizations/IAMBinding.cs +++ b/sdk/dotnet/Organizations/IAMBinding.cs @@ -10,56 +10,53 @@ namespace Pulumi.Gcp.Organizations { /// - /// Allows creation and management of a single binding within IAM policy for - /// an existing Google Cloud Platform Organization. + /// ## Import /// - /// > **Note:** This resource __must not__ be used in conjunction with - /// `gcp.organizations.IAMMember` for the __same role__ or they will fight over - /// what your policy should be. + /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. /// - /// > **Note:** On create, this resource will overwrite members of any existing roles. - /// Use `pulumi import` and inspect the `output to ensure - /// your existing members are preserved. + /// This member resource can be imported using the `org_id`, role, and member e.g. /// - /// ## Example Usage + /// ```sh + /// $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-orgid roles/viewer user:foo@example.com" + /// ``` /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; + /// IAM binding imports use space-delimited identifiers; the resource in question and the role. /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.Organizations.IAMBinding("binding", new() - /// { - /// Members = new[] - /// { - /// "user:alice@gmail.com", - /// }, - /// OrgId = "123456789", - /// Role = "roles/browser", - /// }); + /// This binding resource can be imported using the `org_id` and role, e.g. /// - /// }); + /// ```sh + /// $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-org-id roles/viewer" /// ``` /// - /// ## Import + /// IAM policy imports use the identifier of the resource in question. /// - /// IAM binding imports use space-delimited identifiers; first the resource in question and then the role. + /// This policy resource can be imported using the `org_id`. /// - /// These bindings can be imported using the `org_id` and role, e.g. + /// ```sh + /// $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization your-org-id + /// ``` + /// + /// IAM audit config imports use the identifier of the resource in question and the service, e.g. /// /// ```sh - /// $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_org "your-org-id roles/viewer" + /// $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-organization-id foo.googleapis.com" /// ``` /// /// -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the /// - /// full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. + /// full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure + /// + /// ```sh + /// $ pulumi import gcp:organizations/iAMBinding:IAMBinding to include the title of condition, e.g. `google_organization_iam_binding.my_organization "your-org-id roles/{{role_id}} condition-title"` + /// ``` /// [GcpResourceType("gcp:organizations/iAMBinding:IAMBinding")] public partial class IAMBinding : global::Pulumi.CustomResource { + /// + /// An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + /// Structure is documented below. + /// [Output("condition")] public Output Condition { get; private set; } = null!; @@ -69,14 +66,13 @@ public partial class IAMBinding : global::Pulumi.CustomResource [Output("etag")] public Output Etag { get; private set; } = null!; - /// - /// A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - /// [Output("members")] public Output> Members { get; private set; } = null!; /// - /// The numeric ID of the organization in which you want to create a custom role. + /// The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + /// Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + /// will not be inferred from the provider. /// [Output("orgId")] public Output OrgId { get; private set; } = null!; @@ -84,7 +80,7 @@ public partial class IAMBinding : global::Pulumi.CustomResource /// /// The role that should be applied. Only one /// `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - /// `[projects|organizations]/{parent-name}/roles/{role-name}`. + /// `organizations/{{org_id}}/roles/{{role_id}}`. /// [Output("role")] public Output Role { get; private set; } = null!; @@ -135,15 +131,15 @@ public static IAMBinding Get(string name, Input id, IAMBindingState? sta public sealed class IAMBindingArgs : global::Pulumi.ResourceArgs { + /// + /// An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + /// Structure is documented below. + /// [Input("condition")] public Input? Condition { get; set; } [Input("members", required: true)] private InputList? _members; - - /// - /// A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - /// public InputList Members { get => _members ?? (_members = new InputList()); @@ -151,7 +147,9 @@ public InputList Members } /// - /// The numeric ID of the organization in which you want to create a custom role. + /// The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + /// Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + /// will not be inferred from the provider. /// [Input("orgId", required: true)] public Input OrgId { get; set; } = null!; @@ -159,7 +157,7 @@ public InputList Members /// /// The role that should be applied. Only one /// `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - /// `[projects|organizations]/{parent-name}/roles/{role-name}`. + /// `organizations/{{org_id}}/roles/{{role_id}}`. /// [Input("role", required: true)] public Input Role { get; set; } = null!; @@ -172,6 +170,10 @@ public IAMBindingArgs() public sealed class IAMBindingState : global::Pulumi.ResourceArgs { + /// + /// An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + /// Structure is documented below. + /// [Input("condition")] public Input? Condition { get; set; } @@ -183,10 +185,6 @@ public sealed class IAMBindingState : global::Pulumi.ResourceArgs [Input("members")] private InputList? _members; - - /// - /// A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - /// public InputList Members { get => _members ?? (_members = new InputList()); @@ -194,7 +192,9 @@ public InputList Members } /// - /// The numeric ID of the organization in which you want to create a custom role. + /// The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + /// Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + /// will not be inferred from the provider. /// [Input("orgId")] public Input? OrgId { get; set; } @@ -202,7 +202,7 @@ public InputList Members /// /// The role that should be applied. Only one /// `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - /// `[projects|organizations]/{parent-name}/roles/{role-name}`. + /// `organizations/{{org_id}}/roles/{{role_id}}`. /// [Input("role")] public Input? Role { get; set; } diff --git a/sdk/dotnet/Organizations/IAMCustomRole.cs b/sdk/dotnet/Organizations/IAMCustomRole.cs index c193e33f69..43f9deda17 100644 --- a/sdk/dotnet/Organizations/IAMCustomRole.cs +++ b/sdk/dotnet/Organizations/IAMCustomRole.cs @@ -10,18 +10,6 @@ namespace Pulumi.Gcp.Organizations { /// - /// Allows management of a customized Cloud IAM organization role. For more information see - /// [the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles) - /// and - /// [API](https://cloud.google.com/iam/reference/rest/v1/organizations.roles). - /// - /// > **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise - /// from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the - /// same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted - /// after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is - /// made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all - /// by the provider, and new roles cannot share that name. - /// /// ## Example Usage /// /// This snippet creates a customized IAM organization role. diff --git a/sdk/dotnet/Organizations/IAMMember.cs b/sdk/dotnet/Organizations/IAMMember.cs index b95311daed..d48f25b4a3 100644 --- a/sdk/dotnet/Organizations/IAMMember.cs +++ b/sdk/dotnet/Organizations/IAMMember.cs @@ -10,230 +10,6 @@ namespace Pulumi.Gcp.Organizations { /// - /// Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case: - /// - /// * `gcp.organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached. - /// * `gcp.organizations.IAMBinding`: 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 organization are preserved. - /// * `gcp.organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved. - /// * `gcp.organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - /// - /// > **Note:** `gcp.organizations.IAMPolicy` **cannot** be used in conjunction with `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.organizations.IAMBinding` resources **can be** used in conjunction with `gcp.organizations.IAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_organization\_iam\_policy - /// - /// !> **Warning:** New organizations have several default policies which will, - /// without extreme caution, be **overwritten** by use of this resource. - /// The safest alternative is to use multiple `gcp.organizations.IAMBinding` - /// resources. This resource makes it easy to remove your own access to - /// an organization, which will require a call to Google Support to have - /// fixed, and can take multiple days to resolve. - /// - /// In general, this resource should only be used with organizations - /// fully managed by this provider.I f you do use this resource, - /// the best way to be sure that you are not making dangerous changes is to start - /// by **importing** your existing policy, and examining the diff very closely. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var organization = new Gcp.Organizations.IAMPolicy("organization", new() - /// { - /// OrgId = "your-organization-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }, - /// }, - /// }); - /// - /// var organization = new Gcp.Organizations.IAMPolicy("organization", new() - /// { - /// OrgId = "your-organization-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_organization\_iam\_binding - /// - /// > **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var organization = new Gcp.Organizations.IAMBinding("organization", new() - /// { - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// OrgId = "your-organization-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var organization = new Gcp.Organizations.IAMBinding("organization", new() - /// { - /// Condition = new Gcp.Organizations.Inputs.IAMBindingConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// OrgId = "your-organization-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_organization\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var organization = new Gcp.Organizations.IAMMember("organization", new() - /// { - /// Member = "user:jane@example.com", - /// OrgId = "your-organization-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var organization = new Gcp.Organizations.IAMMember("organization", new() - /// { - /// Condition = new Gcp.Organizations.Inputs.IAMMemberConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Member = "user:jane@example.com", - /// OrgId = "your-organization-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_organization\_iam\_audit\_config - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var organization = new Gcp.Organizations.IamAuditConfig("organization", new() - /// { - /// AuditLogConfigs = new[] - /// { - /// new Gcp.Organizations.Inputs.IamAuditConfigAuditLogConfigArgs - /// { - /// LogType = "ADMIN_READ", - /// }, - /// new Gcp.Organizations.Inputs.IamAuditConfigAuditLogConfigArgs - /// { - /// ExemptedMembers = new[] - /// { - /// "user:joebloggs@hashicorp.com", - /// }, - /// LogType = "DATA_READ", - /// }, - /// }, - /// OrgId = "your-organization-id", - /// Service = "allServices", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Organizations/IAMPolicy.cs b/sdk/dotnet/Organizations/IAMPolicy.cs index f89ad138ec..5183721289 100644 --- a/sdk/dotnet/Organizations/IAMPolicy.cs +++ b/sdk/dotnet/Organizations/IAMPolicy.cs @@ -10,230 +10,6 @@ namespace Pulumi.Gcp.Organizations { /// - /// Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case: - /// - /// * `gcp.organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached. - /// * `gcp.organizations.IAMBinding`: 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 organization are preserved. - /// * `gcp.organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved. - /// * `gcp.organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - /// - /// > **Note:** `gcp.organizations.IAMPolicy` **cannot** be used in conjunction with `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.organizations.IAMBinding` resources **can be** used in conjunction with `gcp.organizations.IAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_organization\_iam\_policy - /// - /// !> **Warning:** New organizations have several default policies which will, - /// without extreme caution, be **overwritten** by use of this resource. - /// The safest alternative is to use multiple `gcp.organizations.IAMBinding` - /// resources. This resource makes it easy to remove your own access to - /// an organization, which will require a call to Google Support to have - /// fixed, and can take multiple days to resolve. - /// - /// In general, this resource should only be used with organizations - /// fully managed by this provider.I f you do use this resource, - /// the best way to be sure that you are not making dangerous changes is to start - /// by **importing** your existing policy, and examining the diff very closely. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var organization = new Gcp.Organizations.IAMPolicy("organization", new() - /// { - /// OrgId = "your-organization-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/editor", - /// }, - /// }, - /// }); - /// - /// var organization = new Gcp.Organizations.IAMPolicy("organization", new() - /// { - /// OrgId = "your-organization-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_organization\_iam\_binding - /// - /// > **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var organization = new Gcp.Organizations.IAMBinding("organization", new() - /// { - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// OrgId = "your-organization-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var organization = new Gcp.Organizations.IAMBinding("organization", new() - /// { - /// Condition = new Gcp.Organizations.Inputs.IAMBindingConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// OrgId = "your-organization-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_organization\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var organization = new Gcp.Organizations.IAMMember("organization", new() - /// { - /// Member = "user:jane@example.com", - /// OrgId = "your-organization-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var organization = new Gcp.Organizations.IAMMember("organization", new() - /// { - /// Condition = new Gcp.Organizations.Inputs.IAMMemberConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Member = "user:jane@example.com", - /// OrgId = "your-organization-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_organization\_iam\_audit\_config - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var organization = new Gcp.Organizations.IamAuditConfig("organization", new() - /// { - /// AuditLogConfigs = new[] - /// { - /// new Gcp.Organizations.Inputs.IamAuditConfigAuditLogConfigArgs - /// { - /// LogType = "ADMIN_READ", - /// }, - /// new Gcp.Organizations.Inputs.IamAuditConfigAuditLogConfigArgs - /// { - /// ExemptedMembers = new[] - /// { - /// "user:joebloggs@hashicorp.com", - /// }, - /// LogType = "DATA_READ", - /// }, - /// }, - /// OrgId = "your-organization-id", - /// Service = "allServices", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Organizations/IamAuditConfig.cs b/sdk/dotnet/Organizations/IamAuditConfig.cs index a856dbed1b..66b1488caa 100644 --- a/sdk/dotnet/Organizations/IamAuditConfig.cs +++ b/sdk/dotnet/Organizations/IamAuditConfig.cs @@ -10,43 +10,44 @@ namespace Pulumi.Gcp.Organizations { /// - /// Allows management of audit logging config for a given service for a Google Cloud Platform Organization. + /// ## Import + /// + /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. /// - /// ## Example Usage + /// This member resource can be imported using the `org_id`, role, and member e.g. + /// + /// ```sh + /// $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-orgid roles/viewer user:foo@example.com" + /// ``` /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; + /// IAM binding imports use space-delimited identifiers; the resource in question and the role. /// - /// return await Deployment.RunAsync(() => - /// { - /// var config = new Gcp.Organizations.IamAuditConfig("config", new() - /// { - /// AuditLogConfigs = new[] - /// { - /// new Gcp.Organizations.Inputs.IamAuditConfigAuditLogConfigArgs - /// { - /// ExemptedMembers = new[] - /// { - /// "user:joebloggs@hashicorp.com", - /// }, - /// LogType = "DATA_READ", - /// }, - /// }, - /// OrgId = "your-organization-id", - /// Service = "allServices", - /// }); + /// This binding resource can be imported using the `org_id` and role, e.g. /// - /// }); + /// ```sh + /// $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-org-id roles/viewer" /// ``` /// - /// ## Import + /// IAM policy imports use the identifier of the resource in question. + /// + /// This policy resource can be imported using the `org_id`. + /// + /// ```sh + /// $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization your-org-id + /// ``` + /// + /// IAM audit config imports use the identifier of the resource in question and the service, e.g. + /// + /// ```sh + /// $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-organization-id foo.googleapis.com" + /// ``` + /// + /// -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the /// - /// IAM audit config imports use the identifier of the resource in question and the service, e.g. + /// full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure /// /// ```sh - /// $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig config "your-organization-id foo.googleapis.com" + /// $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig to include the title of condition, e.g. `google_organization_iam_binding.my_organization "your-org-id roles/{{role_id}} condition-title"` /// ``` /// [GcpResourceType("gcp:organizations/iamAuditConfig:IamAuditConfig")] @@ -59,13 +60,15 @@ public partial class IamAuditConfig : global::Pulumi.CustomResource public Output> AuditLogConfigs { get; private set; } = null!; /// - /// The etag of iam policy + /// (Computed) The etag of the organization's IAM policy. /// [Output("etag")] public Output Etag { get; private set; } = null!; /// - /// The numeric ID of the organization in which you want to manage the audit logging config. + /// The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + /// Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + /// will not be inferred from the provider. /// [Output("orgId")] public Output OrgId { get; private set; } = null!; @@ -135,7 +138,9 @@ public InputList AuditLogConfigs } /// - /// The numeric ID of the organization in which you want to manage the audit logging config. + /// The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + /// Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + /// will not be inferred from the provider. /// [Input("orgId", required: true)] public Input OrgId { get; set; } = null!; @@ -167,13 +172,15 @@ public InputList AuditLogConfigs } /// - /// The etag of iam policy + /// (Computed) The etag of the organization's IAM policy. /// [Input("etag")] public Input? Etag { get; set; } /// - /// The numeric ID of the organization in which you want to manage the audit logging config. + /// The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + /// Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + /// will not be inferred from the provider. /// [Input("orgId")] public Input? OrgId { get; set; } diff --git a/sdk/dotnet/Organizations/Inputs/IAMBindingConditionArgs.cs b/sdk/dotnet/Organizations/Inputs/IAMBindingConditionArgs.cs index 858ece0abf..707151c9a4 100644 --- a/sdk/dotnet/Organizations/Inputs/IAMBindingConditionArgs.cs +++ b/sdk/dotnet/Organizations/Inputs/IAMBindingConditionArgs.cs @@ -12,12 +12,21 @@ namespace Pulumi.Gcp.Organizations.Inputs public sealed class IAMBindingConditionArgs : global::Pulumi.ResourceArgs { + /// + /// An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + /// [Input("description")] public Input? Description { get; set; } + /// + /// Textual representation of an expression in Common Expression Language syntax. + /// [Input("expression", required: true)] public Input Expression { get; set; } = null!; + /// + /// A title for the expression, i.e. a short string describing its purpose. + /// [Input("title", required: true)] public Input Title { get; set; } = null!; diff --git a/sdk/dotnet/Organizations/Inputs/IAMBindingConditionGetArgs.cs b/sdk/dotnet/Organizations/Inputs/IAMBindingConditionGetArgs.cs index 54c1a9395c..b92565258c 100644 --- a/sdk/dotnet/Organizations/Inputs/IAMBindingConditionGetArgs.cs +++ b/sdk/dotnet/Organizations/Inputs/IAMBindingConditionGetArgs.cs @@ -12,12 +12,21 @@ namespace Pulumi.Gcp.Organizations.Inputs public sealed class IAMBindingConditionGetArgs : global::Pulumi.ResourceArgs { + /// + /// An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + /// [Input("description")] public Input? Description { get; set; } + /// + /// Textual representation of an expression in Common Expression Language syntax. + /// [Input("expression", required: true)] public Input Expression { get; set; } = null!; + /// + /// A title for the expression, i.e. a short string describing its purpose. + /// [Input("title", required: true)] public Input Title { get; set; } = null!; diff --git a/sdk/dotnet/Organizations/Inputs/IamAuditConfigAuditLogConfigArgs.cs b/sdk/dotnet/Organizations/Inputs/IamAuditConfigAuditLogConfigArgs.cs index 93302e7934..1f96fa9563 100644 --- a/sdk/dotnet/Organizations/Inputs/IamAuditConfigAuditLogConfigArgs.cs +++ b/sdk/dotnet/Organizations/Inputs/IamAuditConfigAuditLogConfigArgs.cs @@ -16,12 +16,7 @@ public sealed class IamAuditConfigAuditLogConfigArgs : global::Pulumi.ResourceAr private InputList? _exemptedMembers; /// - /// Identities that do not cause logging for this type of permission. - /// Each entry can have one of the following values: - /// * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - /// * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - /// * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - /// * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + /// Identities that do not cause logging for this type of permission. The format is the same as that for `members`. /// public InputList ExemptedMembers { diff --git a/sdk/dotnet/Organizations/Inputs/IamAuditConfigAuditLogConfigGetArgs.cs b/sdk/dotnet/Organizations/Inputs/IamAuditConfigAuditLogConfigGetArgs.cs index 68c6e720f8..bf3114e374 100644 --- a/sdk/dotnet/Organizations/Inputs/IamAuditConfigAuditLogConfigGetArgs.cs +++ b/sdk/dotnet/Organizations/Inputs/IamAuditConfigAuditLogConfigGetArgs.cs @@ -16,12 +16,7 @@ public sealed class IamAuditConfigAuditLogConfigGetArgs : global::Pulumi.Resourc private InputList? _exemptedMembers; /// - /// Identities that do not cause logging for this type of permission. - /// Each entry can have one of the following values: - /// * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - /// * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - /// * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - /// * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + /// Identities that do not cause logging for this type of permission. The format is the same as that for `members`. /// public InputList ExemptedMembers { diff --git a/sdk/dotnet/Organizations/Outputs/IAMBindingCondition.cs b/sdk/dotnet/Organizations/Outputs/IAMBindingCondition.cs index bf80b33e86..a0dc2dabd6 100644 --- a/sdk/dotnet/Organizations/Outputs/IAMBindingCondition.cs +++ b/sdk/dotnet/Organizations/Outputs/IAMBindingCondition.cs @@ -13,8 +13,17 @@ namespace Pulumi.Gcp.Organizations.Outputs [OutputType] public sealed class IAMBindingCondition { + /// + /// An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + /// public readonly string? Description; + /// + /// Textual representation of an expression in Common Expression Language syntax. + /// public readonly string Expression; + /// + /// A title for the expression, i.e. a short string describing its purpose. + /// public readonly string Title; [OutputConstructor] diff --git a/sdk/dotnet/Organizations/Outputs/IamAuditConfigAuditLogConfig.cs b/sdk/dotnet/Organizations/Outputs/IamAuditConfigAuditLogConfig.cs index 254aac687b..52f8f0b3f9 100644 --- a/sdk/dotnet/Organizations/Outputs/IamAuditConfigAuditLogConfig.cs +++ b/sdk/dotnet/Organizations/Outputs/IamAuditConfigAuditLogConfig.cs @@ -14,12 +14,7 @@ namespace Pulumi.Gcp.Organizations.Outputs public sealed class IamAuditConfigAuditLogConfig { /// - /// Identities that do not cause logging for this type of permission. - /// Each entry can have one of the following values: - /// * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - /// * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - /// * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - /// * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + /// Identities that do not cause logging for this type of permission. The format is the same as that for `members`. /// public readonly ImmutableArray ExemptedMembers; /// diff --git a/sdk/dotnet/Organizations/Project.cs b/sdk/dotnet/Organizations/Project.cs index 600802c426..052f1a9c2c 100644 --- a/sdk/dotnet/Organizations/Project.cs +++ b/sdk/dotnet/Organizations/Project.cs @@ -10,24 +10,6 @@ namespace Pulumi.Gcp.Organizations { /// - /// Allows creation and management of a Google Cloud Platform project. - /// - /// Projects created with this resource must be associated with an Organization. - /// See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - /// - /// The user or service account that is running this provider when creating a `gcp.organizations.Project` - /// resource must have `roles/resourcemanager.projectCreator` on the specified organization. See the - /// [Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org) - /// doc for more information. - /// - /// > This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account. - /// - /// To get more information about projects, see: - /// - /// * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects) - /// * How-to Guides - /// * [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects) - /// /// ## Example Usage /// /// ```csharp @@ -82,20 +64,17 @@ namespace Pulumi.Gcp.Organizations public partial class Project : global::Pulumi.CustomResource { /// - /// Create the 'default' network automatically. Default `true`. - /// If set to `false`, the default network will be deleted. Note that, for quota purposes, you - /// will still need to have 1 network slot available to create the project successfully, even if - /// you set `auto_create_network` to `false`, since the network will exist momentarily. + /// Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + /// that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + /// if you set auto_create_network to false, since the network will exist momentarily. /// [Output("autoCreateNetwork")] public Output AutoCreateNetwork { get; private set; } = null!; /// - /// The alphanumeric ID of the billing account this project - /// belongs to. The user or service account performing this operation with the provider - /// must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - /// See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - /// for more details. + /// The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + /// operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + /// See Google Cloud Billing API Access Control for more details. /// [Output("billingAccount")] public Output BillingAccount { get; private set; } = null!; @@ -146,8 +125,7 @@ public partial class Project : global::Pulumi.CustomResource public Output ProjectId { get; private set; } = null!; /// - /// If true, the resource can be deleted - /// without deleting the Project via the Google API. + /// If true, the Terraform resource can be deleted without deleting the Project via the Google API. /// [Output("skipDelete")] public Output SkipDelete { get; private set; } = null!; @@ -199,20 +177,17 @@ public static Project Get(string name, Input id, ProjectState? state = n public sealed class ProjectArgs : global::Pulumi.ResourceArgs { /// - /// Create the 'default' network automatically. Default `true`. - /// If set to `false`, the default network will be deleted. Note that, for quota purposes, you - /// will still need to have 1 network slot available to create the project successfully, even if - /// you set `auto_create_network` to `false`, since the network will exist momentarily. + /// Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + /// that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + /// if you set auto_create_network to false, since the network will exist momentarily. /// [Input("autoCreateNetwork")] public Input? AutoCreateNetwork { get; set; } /// - /// The alphanumeric ID of the billing account this project - /// belongs to. The user or service account performing this operation with the provider - /// must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - /// See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - /// for more details. + /// The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + /// operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + /// See Google Cloud Billing API Access Control for more details. /// [Input("billingAccount")] public Input? BillingAccount { get; set; } @@ -263,8 +238,7 @@ public InputMap Labels public Input ProjectId { get; set; } = null!; /// - /// If true, the resource can be deleted - /// without deleting the Project via the Google API. + /// If true, the Terraform resource can be deleted without deleting the Project via the Google API. /// [Input("skipDelete")] public Input? SkipDelete { get; set; } @@ -278,20 +252,17 @@ public ProjectArgs() public sealed class ProjectState : global::Pulumi.ResourceArgs { /// - /// Create the 'default' network automatically. Default `true`. - /// If set to `false`, the default network will be deleted. Note that, for quota purposes, you - /// will still need to have 1 network slot available to create the project successfully, even if - /// you set `auto_create_network` to `false`, since the network will exist momentarily. + /// Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + /// that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + /// if you set auto_create_network to false, since the network will exist momentarily. /// [Input("autoCreateNetwork")] public Input? AutoCreateNetwork { get; set; } /// - /// The alphanumeric ID of the billing account this project - /// belongs to. The user or service account performing this operation with the provider - /// must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - /// See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - /// for more details. + /// The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + /// operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + /// See Google Cloud Billing API Access Control for more details. /// [Input("billingAccount")] public Input? BillingAccount { get; set; } @@ -348,8 +319,7 @@ public InputMap Labels public Input? ProjectId { get; set; } /// - /// If true, the resource can be deleted - /// without deleting the Project via the Google API. + /// If true, the Terraform resource can be deleted without deleting the Project via the Google API. /// [Input("skipDelete")] public Input? SkipDelete { get; set; } diff --git a/sdk/dotnet/OsConfig/GuestPolicies.cs b/sdk/dotnet/OsConfig/GuestPolicies.cs index fed8ded768..580b2bd1be 100644 --- a/sdk/dotnet/OsConfig/GuestPolicies.cs +++ b/sdk/dotnet/OsConfig/GuestPolicies.cs @@ -10,16 +10,6 @@ namespace Pulumi.Gcp.OsConfig { /// - /// An OS Config resource representing a guest configuration policy. These policies represent - /// the desired state for VM instance guest environments including packages to install or remove, - /// package repository configurations, and software to install. - /// - /// To get more information about GuestPolicies, see: - /// - /// * [API documentation](https://cloud.google.com/compute/docs/osconfig/rest) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/compute/docs/os-config-management) - /// /// ## Example Usage /// ### Os Config Guest Policies Basic /// diff --git a/sdk/dotnet/Projects/IAMAuditConfig.cs b/sdk/dotnet/Projects/IAMAuditConfig.cs index 3962b62c37..ca8bc7d394 100644 --- a/sdk/dotnet/Projects/IAMAuditConfig.cs +++ b/sdk/dotnet/Projects/IAMAuditConfig.cs @@ -10,227 +10,6 @@ namespace Pulumi.Gcp.Projects { /// - /// Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - /// - /// * `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - /// * `gcp.projects.IAMBinding`: 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 project are preserved. - /// * `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - /// * `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - /// - /// > **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - /// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - /// - /// ## google\_project\_iam\_policy - /// - /// !> **Be careful!** You can accidentally lock yourself out of your project - /// using this resource. Deleting a `gcp.projects.IAMPolicy` removes access - /// from anyone without organization-level access to the project. Proceed with caution. - /// It's not recommended to use `gcp.projects.IAMPolicy` with your provider project - /// to avoid locking yourself out, and it should generally only be used with projects - /// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - /// applying the change. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var project = new Gcp.Projects.IAMPolicy("project", new() - /// { - /// Project = "your-project-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/compute.admin", - /// }, - /// }, - /// }); - /// - /// var project = new Gcp.Projects.IAMPolicy("project", new() - /// { - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// Project = "your-project-id", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_project\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMBinding("project", new() - /// { - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Project = "your-project-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMBinding("project", new() - /// { - /// Condition = new Gcp.Projects.Inputs.IAMBindingConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Project = "your-project-id", - /// Role = "roles/container.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_project\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMMember("project", new() - /// { - /// Member = "user:jane@example.com", - /// Project = "your-project-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMMember("project", new() - /// { - /// Condition = new Gcp.Projects.Inputs.IAMMemberConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Member = "user:jane@example.com", - /// Project = "your-project-id", - /// Role = "roles/firebase.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_project\_iam\_audit\_config - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMAuditConfig("project", new() - /// { - /// AuditLogConfigs = new[] - /// { - /// new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs - /// { - /// LogType = "ADMIN_READ", - /// }, - /// new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs - /// { - /// ExemptedMembers = new[] - /// { - /// "user:joebloggs@hashicorp.com", - /// }, - /// LogType = "DATA_READ", - /// }, - /// }, - /// Project = "your-project-id", - /// Service = "allServices", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Projects/IAMBinding.cs b/sdk/dotnet/Projects/IAMBinding.cs index cd5d227f2c..33b786ce54 100644 --- a/sdk/dotnet/Projects/IAMBinding.cs +++ b/sdk/dotnet/Projects/IAMBinding.cs @@ -10,227 +10,6 @@ namespace Pulumi.Gcp.Projects { /// - /// Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - /// - /// * `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - /// * `gcp.projects.IAMBinding`: 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 project are preserved. - /// * `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - /// * `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - /// - /// > **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - /// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - /// - /// ## google\_project\_iam\_policy - /// - /// !> **Be careful!** You can accidentally lock yourself out of your project - /// using this resource. Deleting a `gcp.projects.IAMPolicy` removes access - /// from anyone without organization-level access to the project. Proceed with caution. - /// It's not recommended to use `gcp.projects.IAMPolicy` with your provider project - /// to avoid locking yourself out, and it should generally only be used with projects - /// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - /// applying the change. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var project = new Gcp.Projects.IAMPolicy("project", new() - /// { - /// Project = "your-project-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/compute.admin", - /// }, - /// }, - /// }); - /// - /// var project = new Gcp.Projects.IAMPolicy("project", new() - /// { - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// Project = "your-project-id", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_project\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMBinding("project", new() - /// { - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Project = "your-project-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMBinding("project", new() - /// { - /// Condition = new Gcp.Projects.Inputs.IAMBindingConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Project = "your-project-id", - /// Role = "roles/container.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_project\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMMember("project", new() - /// { - /// Member = "user:jane@example.com", - /// Project = "your-project-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMMember("project", new() - /// { - /// Condition = new Gcp.Projects.Inputs.IAMMemberConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Member = "user:jane@example.com", - /// Project = "your-project-id", - /// Role = "roles/firebase.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_project\_iam\_audit\_config - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMAuditConfig("project", new() - /// { - /// AuditLogConfigs = new[] - /// { - /// new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs - /// { - /// LogType = "ADMIN_READ", - /// }, - /// new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs - /// { - /// ExemptedMembers = new[] - /// { - /// "user:joebloggs@hashicorp.com", - /// }, - /// LogType = "DATA_READ", - /// }, - /// }, - /// Project = "your-project-id", - /// Service = "allServices", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Projects/IAMCustomRole.cs b/sdk/dotnet/Projects/IAMCustomRole.cs index fa5583898e..97d55be24d 100644 --- a/sdk/dotnet/Projects/IAMCustomRole.cs +++ b/sdk/dotnet/Projects/IAMCustomRole.cs @@ -10,18 +10,6 @@ namespace Pulumi.Gcp.Projects { /// - /// Allows management of a customized Cloud IAM project role. For more information see - /// [the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles) - /// and - /// [API](https://cloud.google.com/iam/reference/rest/v1/projects.roles). - /// - /// > **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise - /// from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the - /// same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted - /// after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is - /// made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all - /// by the provider, and new roles cannot share that name. - /// /// ## Example Usage /// /// This snippet creates a customized IAM role. diff --git a/sdk/dotnet/Projects/IAMMember.cs b/sdk/dotnet/Projects/IAMMember.cs index 5fa60427a4..75b42380e7 100644 --- a/sdk/dotnet/Projects/IAMMember.cs +++ b/sdk/dotnet/Projects/IAMMember.cs @@ -10,227 +10,6 @@ namespace Pulumi.Gcp.Projects { /// - /// Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - /// - /// * `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - /// * `gcp.projects.IAMBinding`: 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 project are preserved. - /// * `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - /// * `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - /// - /// > **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - /// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - /// - /// ## google\_project\_iam\_policy - /// - /// !> **Be careful!** You can accidentally lock yourself out of your project - /// using this resource. Deleting a `gcp.projects.IAMPolicy` removes access - /// from anyone without organization-level access to the project. Proceed with caution. - /// It's not recommended to use `gcp.projects.IAMPolicy` with your provider project - /// to avoid locking yourself out, and it should generally only be used with projects - /// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - /// applying the change. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var project = new Gcp.Projects.IAMPolicy("project", new() - /// { - /// Project = "your-project-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/compute.admin", - /// }, - /// }, - /// }); - /// - /// var project = new Gcp.Projects.IAMPolicy("project", new() - /// { - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// Project = "your-project-id", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_project\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMBinding("project", new() - /// { - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Project = "your-project-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMBinding("project", new() - /// { - /// Condition = new Gcp.Projects.Inputs.IAMBindingConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Project = "your-project-id", - /// Role = "roles/container.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_project\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMMember("project", new() - /// { - /// Member = "user:jane@example.com", - /// Project = "your-project-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMMember("project", new() - /// { - /// Condition = new Gcp.Projects.Inputs.IAMMemberConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Member = "user:jane@example.com", - /// Project = "your-project-id", - /// Role = "roles/firebase.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_project\_iam\_audit\_config - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMAuditConfig("project", new() - /// { - /// AuditLogConfigs = new[] - /// { - /// new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs - /// { - /// LogType = "ADMIN_READ", - /// }, - /// new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs - /// { - /// ExemptedMembers = new[] - /// { - /// "user:joebloggs@hashicorp.com", - /// }, - /// LogType = "DATA_READ", - /// }, - /// }, - /// Project = "your-project-id", - /// Service = "allServices", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Projects/IAMPolicy.cs b/sdk/dotnet/Projects/IAMPolicy.cs index 752c7ec737..0cc44c1230 100644 --- a/sdk/dotnet/Projects/IAMPolicy.cs +++ b/sdk/dotnet/Projects/IAMPolicy.cs @@ -10,227 +10,6 @@ namespace Pulumi.Gcp.Projects { /// - /// Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - /// - /// * `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - /// * `gcp.projects.IAMBinding`: 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 project are preserved. - /// * `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - /// * `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - /// - /// > **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role. - /// - /// > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - /// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - /// - /// ## google\_project\_iam\_policy - /// - /// !> **Be careful!** You can accidentally lock yourself out of your project - /// using this resource. Deleting a `gcp.projects.IAMPolicy` removes access - /// from anyone without organization-level access to the project. Proceed with caution. - /// It's not recommended to use `gcp.projects.IAMPolicy` with your provider project - /// to avoid locking yourself out, and it should generally only be used with projects - /// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - /// applying the change. - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/editor", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var project = new Gcp.Projects.IAMPolicy("project", new() - /// { - /// Project = "your-project-id", - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Condition = new Gcp.Organizations.Inputs.GetIAMPolicyBindingConditionInputArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Role = "roles/compute.admin", - /// }, - /// }, - /// }); - /// - /// var project = new Gcp.Projects.IAMPolicy("project", new() - /// { - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// Project = "your-project-id", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_project\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMBinding("project", new() - /// { - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Project = "your-project-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMBinding("project", new() - /// { - /// Condition = new Gcp.Projects.Inputs.IAMBindingConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// Project = "your-project-id", - /// Role = "roles/container.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_project\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMMember("project", new() - /// { - /// Member = "user:jane@example.com", - /// Project = "your-project-id", - /// Role = "roles/editor", - /// }); - /// - /// }); - /// ``` - /// - /// With IAM Conditions: - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMMember("project", new() - /// { - /// Condition = new Gcp.Projects.Inputs.IAMMemberConditionArgs - /// { - /// Description = "Expiring at midnight of 2019-12-31", - /// Expression = "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - /// Title = "expires_after_2019_12_31", - /// }, - /// Member = "user:jane@example.com", - /// Project = "your-project-id", - /// Role = "roles/firebase.admin", - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_project\_iam\_audit\_config - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var project = new Gcp.Projects.IAMAuditConfig("project", new() - /// { - /// AuditLogConfigs = new[] - /// { - /// new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs - /// { - /// LogType = "ADMIN_READ", - /// }, - /// new Gcp.Projects.Inputs.IAMAuditConfigAuditLogConfigArgs - /// { - /// ExemptedMembers = new[] - /// { - /// "user:joebloggs@hashicorp.com", - /// }, - /// LogType = "DATA_READ", - /// }, - /// }, - /// Project = "your-project-id", - /// Service = "allServices", - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/dotnet/Projects/Service.cs b/sdk/dotnet/Projects/Service.cs index 7e58adb878..96a3f229b8 100644 --- a/sdk/dotnet/Projects/Service.cs +++ b/sdk/dotnet/Projects/Service.cs @@ -65,9 +65,6 @@ public partial class Service : global::Pulumi.CustomResource [Output("disableDependentServices")] public Output DisableDependentServices { get; private set; } = null!; - /// - /// If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - /// [Output("disableOnDestroy")] public Output DisableOnDestroy { get; private set; } = null!; @@ -139,9 +136,6 @@ public sealed class ServiceArgs : global::Pulumi.ResourceArgs [Input("disableDependentServices")] public Input? DisableDependentServices { get; set; } - /// - /// If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - /// [Input("disableOnDestroy")] public Input? DisableOnDestroy { get; set; } @@ -175,9 +169,6 @@ public sealed class ServiceState : global::Pulumi.ResourceArgs [Input("disableDependentServices")] public Input? DisableDependentServices { get; set; } - /// - /// If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - /// [Input("disableOnDestroy")] public Input? DisableOnDestroy { get; set; } diff --git a/sdk/dotnet/Projects/ServiceIdentity.cs b/sdk/dotnet/Projects/ServiceIdentity.cs index 13683116bd..050cd837d3 100644 --- a/sdk/dotnet/Projects/ServiceIdentity.cs +++ b/sdk/dotnet/Projects/ServiceIdentity.cs @@ -10,19 +10,6 @@ namespace Pulumi.Gcp.Projects { /// - /// Generate service identity for a service. - /// - /// > **Note:** Once created, this resource cannot be updated or destroyed. These - /// actions are a no-op. - /// - /// > **Note:** This resource can be used to retrieve the emails of the [Google-managed service accounts](https://cloud.google.com/iam/docs/service-agents) - /// of the APIs that Google has configured with a Service Identity. You can run `gcloud beta services identity create --service SERVICE_NAME.googleapis.com` to - /// verify if an API supports this. - /// - /// To get more information about Service Identity, see: - /// - /// * [API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services/generateServiceIdentity) - /// /// ## Example Usage /// ### Service Identity Basic /// diff --git a/sdk/dotnet/Projects/UsageExportBucket.cs b/sdk/dotnet/Projects/UsageExportBucket.cs index 7bee9f7bb9..89f5370df1 100644 --- a/sdk/dotnet/Projects/UsageExportBucket.cs +++ b/sdk/dotnet/Projects/UsageExportBucket.cs @@ -10,24 +10,6 @@ namespace Pulumi.Gcp.Projects { /// - /// Allows creation and management of a Google Cloud Platform project. - /// - /// Projects created with this resource must be associated with an Organization. - /// See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - /// - /// The user or service account that is running this provider when creating a `gcp.organizations.Project` - /// resource must have `roles/resourcemanager.projectCreator` on the specified organization. See the - /// [Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org) - /// doc for more information. - /// - /// > This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account. - /// - /// To get more information about projects, see: - /// - /// * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects) - /// * How-to Guides - /// * [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects) - /// /// ## Example Usage /// /// ```csharp diff --git a/sdk/dotnet/Provider.cs b/sdk/dotnet/Provider.cs index 0e8fb072b5..c3e2c4322f 100644 --- a/sdk/dotnet/Provider.cs +++ b/sdk/dotnet/Provider.cs @@ -126,6 +126,9 @@ public partial class Provider : global::Pulumi.ProviderResource [Output("cloudTasksCustomEndpoint")] public Output CloudTasksCustomEndpoint { get; private set; } = null!; + [Output("cloudbuildv2CustomEndpoint")] + public Output Cloudbuildv2CustomEndpoint { get; private set; } = null!; + [Output("clouddeployCustomEndpoint")] public Output ClouddeployCustomEndpoint { get; private set; } = null!; @@ -240,9 +243,6 @@ public partial class Provider : global::Pulumi.ProviderResource [Output("gkehubFeatureCustomEndpoint")] public Output GkehubFeatureCustomEndpoint { get; private set; } = null!; - [Output("googlePartnerName")] - public Output GooglePartnerName { get; private set; } = null!; - [Output("healthcareCustomEndpoint")] public Output HealthcareCustomEndpoint { get; private set; } = null!; @@ -384,6 +384,9 @@ public partial class Provider : global::Pulumi.ProviderResource [Output("tagsCustomEndpoint")] public Output TagsCustomEndpoint { get; private set; } = null!; + [Output("tagsLocationCustomEndpoint")] + public Output TagsLocationCustomEndpoint { get; private set; } = null!; + [Output("tpuCustomEndpoint")] public Output TpuCustomEndpoint { get; private set; } = null!; @@ -396,6 +399,9 @@ public partial class Provider : global::Pulumi.ProviderResource [Output("workflowsCustomEndpoint")] public Output WorkflowsCustomEndpoint { get; private set; } = null!; + [Output("workstationsCustomEndpoint")] + public Output WorkstationsCustomEndpoint { get; private set; } = null!; + [Output("zone")] public Output Zone { get; private set; } = null!; @@ -538,6 +544,9 @@ public sealed class ProviderArgs : global::Pulumi.ResourceArgs [Input("cloudTasksCustomEndpoint")] public Input? CloudTasksCustomEndpoint { get; set; } + [Input("cloudbuildv2CustomEndpoint")] + public Input? Cloudbuildv2CustomEndpoint { get; set; } + [Input("clouddeployCustomEndpoint")] public Input? ClouddeployCustomEndpoint { get; set; } @@ -607,9 +616,6 @@ public sealed class ProviderArgs : global::Pulumi.ResourceArgs [Input("dialogflowCxCustomEndpoint")] public Input? DialogflowCxCustomEndpoint { get; set; } - [Input("disableGooglePartnerName", json: true)] - public Input? DisableGooglePartnerName { get; set; } - [Input("dnsCustomEndpoint")] public Input? DnsCustomEndpoint { get; set; } @@ -655,9 +661,6 @@ public sealed class ProviderArgs : global::Pulumi.ResourceArgs [Input("gkehubFeatureCustomEndpoint")] public Input? GkehubFeatureCustomEndpoint { get; set; } - [Input("googlePartnerName")] - public Input? GooglePartnerName { get; set; } - [Input("healthcareCustomEndpoint")] public Input? HealthcareCustomEndpoint { get; set; } @@ -815,6 +818,9 @@ public InputList Scopes [Input("tagsCustomEndpoint")] public Input? TagsCustomEndpoint { get; set; } + [Input("tagsLocationCustomEndpoint")] + public Input? TagsLocationCustomEndpoint { get; set; } + [Input("tpuCustomEndpoint")] public Input? TpuCustomEndpoint { get; set; } @@ -830,6 +836,9 @@ public InputList Scopes [Input("workflowsCustomEndpoint")] public Input? WorkflowsCustomEndpoint { get; set; } + [Input("workstationsCustomEndpoint")] + public Input? WorkstationsCustomEndpoint { get; set; } + [Input("zone")] public Input? Zone { get; set; } diff --git a/sdk/dotnet/Redis/Inputs/InstancePersistenceConfigArgs.cs b/sdk/dotnet/Redis/Inputs/InstancePersistenceConfigArgs.cs index 3924104d7e..7b86d44a3d 100644 --- a/sdk/dotnet/Redis/Inputs/InstancePersistenceConfigArgs.cs +++ b/sdk/dotnet/Redis/Inputs/InstancePersistenceConfigArgs.cs @@ -35,7 +35,7 @@ public sealed class InstancePersistenceConfigArgs : global::Pulumi.ResourceArgs /// - ONE_HOUR: Snapshot every 1 hour. /// - SIX_HOURS: Snapshot every 6 hours. /// - TWELVE_HOURS: Snapshot every 12 hours. - /// - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + /// - TWENTY_FOUR_HOURS: Snapshot every 24 hours. /// Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. /// [Input("rdbSnapshotPeriod")] diff --git a/sdk/dotnet/Redis/Inputs/InstancePersistenceConfigGetArgs.cs b/sdk/dotnet/Redis/Inputs/InstancePersistenceConfigGetArgs.cs index 4d67197d14..295747ea2f 100644 --- a/sdk/dotnet/Redis/Inputs/InstancePersistenceConfigGetArgs.cs +++ b/sdk/dotnet/Redis/Inputs/InstancePersistenceConfigGetArgs.cs @@ -35,7 +35,7 @@ public sealed class InstancePersistenceConfigGetArgs : global::Pulumi.ResourceAr /// - ONE_HOUR: Snapshot every 1 hour. /// - SIX_HOURS: Snapshot every 6 hours. /// - TWELVE_HOURS: Snapshot every 12 hours. - /// - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + /// - TWENTY_FOUR_HOURS: Snapshot every 24 hours. /// Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. /// [Input("rdbSnapshotPeriod")] diff --git a/sdk/dotnet/Redis/Instance.cs b/sdk/dotnet/Redis/Instance.cs index b3a81f432a..6d79e8a050 100644 --- a/sdk/dotnet/Redis/Instance.cs +++ b/sdk/dotnet/Redis/Instance.cs @@ -57,7 +57,7 @@ namespace Pulumi.Gcp.Redis /// AlternativeLocationId = "us-central1-f", /// AuthorizedNetwork = redis_network.Apply(redis_network => redis_network.Apply(getNetworkResult => getNetworkResult.Id)), /// RedisVersion = "REDIS_4_0", - /// DisplayName = "Test Instance", + /// DisplayName = "Terraform Test Instance", /// ReservedIpRange = "192.168.0.0/29", /// Labels = /// { @@ -150,7 +150,7 @@ namespace Pulumi.Gcp.Redis /// AuthorizedNetwork = redis_network.Apply(redis_network => redis_network.Apply(getNetworkResult => getNetworkResult.Id)), /// ConnectMode = "PRIVATE_SERVICE_ACCESS", /// RedisVersion = "REDIS_4_0", - /// DisplayName = "Test Instance", + /// DisplayName = "Terraform Test Instance", /// }, new CustomResourceOptions /// { /// DependsOn = new[] diff --git a/sdk/dotnet/Redis/Outputs/InstancePersistenceConfig.cs b/sdk/dotnet/Redis/Outputs/InstancePersistenceConfig.cs index 41df146824..8b79576726 100644 --- a/sdk/dotnet/Redis/Outputs/InstancePersistenceConfig.cs +++ b/sdk/dotnet/Redis/Outputs/InstancePersistenceConfig.cs @@ -32,7 +32,7 @@ public sealed class InstancePersistenceConfig /// - ONE_HOUR: Snapshot every 1 hour. /// - SIX_HOURS: Snapshot every 6 hours. /// - TWELVE_HOURS: Snapshot every 12 hours. - /// - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + /// - TWENTY_FOUR_HOURS: Snapshot every 24 hours. /// Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. /// public readonly string? RdbSnapshotPeriod; diff --git a/sdk/dotnet/SecretManager/GetSecretVersionAccess.cs b/sdk/dotnet/SecretManager/GetSecretVersionAccess.cs new file mode 100644 index 0000000000..283974825a --- /dev/null +++ b/sdk/dotnet/SecretManager/GetSecretVersionAccess.cs @@ -0,0 +1,169 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.SecretManager +{ + public static class GetSecretVersionAccess + { + /// + /// Get a payload of Secret Manager secret's version. It only requires the [Secret Manager Secret Accessor](https://cloud.google.com/secret-manager/docs/access-control#secretmanager.secretAccessor) role. For more information see the [official documentation](https://cloud.google.com/secret-manager/docs/) and [API](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets.versions/access). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var basic = Gcp.SecretManager.GetSecretVersionAccess.Invoke(new() + /// { + /// Secret = "my-secret", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Task InvokeAsync(GetSecretVersionAccessArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:secretmanager/getSecretVersionAccess:getSecretVersionAccess", args ?? new GetSecretVersionAccessArgs(), options.WithDefaults()); + + /// + /// Get a payload of Secret Manager secret's version. It only requires the [Secret Manager Secret Accessor](https://cloud.google.com/secret-manager/docs/access-control#secretmanager.secretAccessor) role. For more information see the [official documentation](https://cloud.google.com/secret-manager/docs/) and [API](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets.versions/access). + /// + /// {{% examples %}} + /// ## Example Usage + /// {{% example %}} + /// + /// ```csharp + /// using System.Collections.Generic; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var basic = Gcp.SecretManager.GetSecretVersionAccess.Invoke(new() + /// { + /// Secret = "my-secret", + /// }); + /// + /// }); + /// ``` + /// {{% /example %}} + /// {{% /examples %}} + /// + public static Output Invoke(GetSecretVersionAccessInvokeArgs args, InvokeOptions? options = null) + => global::Pulumi.Deployment.Instance.Invoke("gcp:secretmanager/getSecretVersionAccess:getSecretVersionAccess", args ?? new GetSecretVersionAccessInvokeArgs(), options.WithDefaults()); + } + + + public sealed class GetSecretVersionAccessArgs : global::Pulumi.InvokeArgs + { + /// + /// The project to get the secret version for. If it + /// is not provided, the provider project is used. + /// + [Input("project")] + public string? Project { get; set; } + + /// + /// The secret to get the secret version for. + /// + [Input("secret", required: true)] + public string Secret { get; set; } = null!; + + /// + /// The version of the secret to get. If it + /// is not provided, the latest version is retrieved. + /// + [Input("version")] + public string? Version { get; set; } + + public GetSecretVersionAccessArgs() + { + } + public static new GetSecretVersionAccessArgs Empty => new GetSecretVersionAccessArgs(); + } + + public sealed class GetSecretVersionAccessInvokeArgs : global::Pulumi.InvokeArgs + { + /// + /// The project to get the secret version for. If it + /// is not provided, the provider project is used. + /// + [Input("project")] + public Input? Project { get; set; } + + /// + /// The secret to get the secret version for. + /// + [Input("secret", required: true)] + public Input Secret { get; set; } = null!; + + /// + /// The version of the secret to get. If it + /// is not provided, the latest version is retrieved. + /// + [Input("version")] + public Input? Version { get; set; } + + public GetSecretVersionAccessInvokeArgs() + { + } + public static new GetSecretVersionAccessInvokeArgs Empty => new GetSecretVersionAccessInvokeArgs(); + } + + + [OutputType] + public sealed class GetSecretVersionAccessResult + { + /// + /// The provider-assigned unique ID for this managed resource. + /// + public readonly string Id; + /// + /// The resource name of the SecretVersion. Format: + /// `projects/{{project}}/secrets/{{secret_id}}/versions/{{version}}` + /// + public readonly string Name; + public readonly string Project; + public readonly string Secret; + /// + /// The secret data. No larger than 64KiB. + /// + public readonly string SecretData; + public readonly string Version; + + [OutputConstructor] + private GetSecretVersionAccessResult( + string id, + + string name, + + string project, + + string secret, + + string secretData, + + string version) + { + Id = id; + Name = name; + Project = project; + Secret = secret; + SecretData = secretData; + Version = version; + } + } +} diff --git a/sdk/dotnet/SecretManager/SecretVersion.cs b/sdk/dotnet/SecretManager/SecretVersion.cs index 5d837c93bc..fde4c3e06b 100644 --- a/sdk/dotnet/SecretManager/SecretVersion.cs +++ b/sdk/dotnet/SecretManager/SecretVersion.cs @@ -10,11 +10,6 @@ namespace Pulumi.Gcp.SecretManager { /// - /// A secret version resource. - /// - /// > **Warning:** All arguments including `payload.secret_data` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage /// ### Secret Version Basic /// diff --git a/sdk/dotnet/SecurityCenter/InstanceIamBinding.cs b/sdk/dotnet/SecurityCenter/InstanceIamBinding.cs index eba4213fc7..7fd42dbb13 100644 --- a/sdk/dotnet/SecurityCenter/InstanceIamBinding.cs +++ b/sdk/dotnet/SecurityCenter/InstanceIamBinding.cs @@ -16,7 +16,7 @@ namespace Pulumi.Gcp.SecurityCenter /// /// * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + /// * [Official Documentation](https://cloud.google.com/data-fusion/docs/) /// /// ## Example Usage /// ### Data Fusion Instance Basic diff --git a/sdk/dotnet/SecurityCenter/InstanceIamMember.cs b/sdk/dotnet/SecurityCenter/InstanceIamMember.cs index 0e35051ac3..812d580926 100644 --- a/sdk/dotnet/SecurityCenter/InstanceIamMember.cs +++ b/sdk/dotnet/SecurityCenter/InstanceIamMember.cs @@ -16,7 +16,7 @@ namespace Pulumi.Gcp.SecurityCenter /// /// * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + /// * [Official Documentation](https://cloud.google.com/data-fusion/docs/) /// /// ## Example Usage /// ### Data Fusion Instance Basic diff --git a/sdk/dotnet/SecurityCenter/InstanceIamPolicy.cs b/sdk/dotnet/SecurityCenter/InstanceIamPolicy.cs index 67e4e1e967..6810c99db4 100644 --- a/sdk/dotnet/SecurityCenter/InstanceIamPolicy.cs +++ b/sdk/dotnet/SecurityCenter/InstanceIamPolicy.cs @@ -16,7 +16,7 @@ namespace Pulumi.Gcp.SecurityCenter /// /// * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + /// * [Official Documentation](https://cloud.google.com/data-fusion/docs/) /// /// ## Example Usage /// ### Data Fusion Instance Basic diff --git a/sdk/dotnet/ServiceAccount/Account.cs b/sdk/dotnet/ServiceAccount/Account.cs index 1a2ff4041d..e81357f00a 100644 --- a/sdk/dotnet/ServiceAccount/Account.cs +++ b/sdk/dotnet/ServiceAccount/Account.cs @@ -10,18 +10,6 @@ namespace Pulumi.Gcp.ServiceAccount { /// - /// Allows management of a Google Cloud service account. - /// - /// * [API documentation](https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/compute/docs/access/service-accounts) - /// - /// > **Warning:** If you delete and recreate a service account, you must reapply any IAM roles that it had before. - /// - /// > Creation of service accounts is eventually consistent, and that can lead to - /// errors when you try to apply ACLs to service accounts immediately after - /// creation. - /// /// ## Example Usage /// /// This snippet creates a service account in a project. diff --git a/sdk/dotnet/ServiceAccount/GetAccountIdToken.cs b/sdk/dotnet/ServiceAccount/GetAccountIdToken.cs index 3e0a12c174..d0da557aa4 100644 --- a/sdk/dotnet/ServiceAccount/GetAccountIdToken.cs +++ b/sdk/dotnet/ServiceAccount/GetAccountIdToken.cs @@ -11,121 +11,9 @@ namespace Pulumi.Gcp.ServiceAccount { public static class GetAccountIdToken { - /// - /// This data source provides a Google OpenID Connect (`oidc`) `id_token`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)). - /// - /// For more information see - /// [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken). - /// - /// {{% examples %}} - /// ## Example Usage - /// - /// ### ServiceAccount JSON Credential File. - /// `gcp.serviceAccount.getAccountIdToken` will use the configured provider credentials - /// - /// ```hcl - /// data "google_service_account_id_token" "oidc" { - /// target_audience = "https://foo.bar/" - /// } - /// - /// output "oidc_token" { - /// value = data.google_service_account_id_token.oidc.id_token - /// } - /// ``` - /// - /// ### Service Account Impersonation. - /// `gcp.serviceAccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceAccount.getAccountAccessToken`. - /// - /// Note: to use the following, you must grant `target_service_account` the - /// `roles/iam.serviceAccountTokenCreator` role on itself. - /// - /// ```hcl - /// data "google_service_account_access_token" "impersonated" { - /// provider = google - /// target_service_account = "impersonated-account@project.iam.gserviceaccount.com" - /// delegates = [] - /// scopes = ["userinfo-email", "cloud-platform"] - /// lifetime = "300s" - /// } - /// - /// provider "google" { - /// alias = "impersonated" - /// access_token = data.google_service_account_access_token.impersonated.access_token - /// } - /// - /// data "google_service_account_id_token" "oidc" { - /// provider = google.impersonated - /// target_service_account = "impersonated-account@project.iam.gserviceaccount.com" - /// delegates = [] - /// include_email = true - /// target_audience = "https://foo.bar/" - /// } - /// - /// output "oidc_token" { - /// value = data.google_service_account_id_token.oidc.id_token - /// } - /// ``` - /// {{% /examples %}} - /// public static Task InvokeAsync(GetAccountIdTokenArgs args, InvokeOptions? options = null) => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:serviceAccount/getAccountIdToken:getAccountIdToken", args ?? new GetAccountIdTokenArgs(), options.WithDefaults()); - /// - /// This data source provides a Google OpenID Connect (`oidc`) `id_token`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)). - /// - /// For more information see - /// [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken). - /// - /// {{% examples %}} - /// ## Example Usage - /// - /// ### ServiceAccount JSON Credential File. - /// `gcp.serviceAccount.getAccountIdToken` will use the configured provider credentials - /// - /// ```hcl - /// data "google_service_account_id_token" "oidc" { - /// target_audience = "https://foo.bar/" - /// } - /// - /// output "oidc_token" { - /// value = data.google_service_account_id_token.oidc.id_token - /// } - /// ``` - /// - /// ### Service Account Impersonation. - /// `gcp.serviceAccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceAccount.getAccountAccessToken`. - /// - /// Note: to use the following, you must grant `target_service_account` the - /// `roles/iam.serviceAccountTokenCreator` role on itself. - /// - /// ```hcl - /// data "google_service_account_access_token" "impersonated" { - /// provider = google - /// target_service_account = "impersonated-account@project.iam.gserviceaccount.com" - /// delegates = [] - /// scopes = ["userinfo-email", "cloud-platform"] - /// lifetime = "300s" - /// } - /// - /// provider "google" { - /// alias = "impersonated" - /// access_token = data.google_service_account_access_token.impersonated.access_token - /// } - /// - /// data "google_service_account_id_token" "oidc" { - /// provider = google.impersonated - /// target_service_account = "impersonated-account@project.iam.gserviceaccount.com" - /// delegates = [] - /// include_email = true - /// target_audience = "https://foo.bar/" - /// } - /// - /// output "oidc_token" { - /// value = data.google_service_account_id_token.oidc.id_token - /// } - /// ``` - /// {{% /examples %}} - /// public static Output Invoke(GetAccountIdTokenInvokeArgs args, InvokeOptions? options = null) => global::Pulumi.Deployment.Instance.Invoke("gcp:serviceAccount/getAccountIdToken:getAccountIdToken", args ?? new GetAccountIdTokenInvokeArgs(), options.WithDefaults()); } diff --git a/sdk/dotnet/ServiceAccount/IAMBinding.cs b/sdk/dotnet/ServiceAccount/IAMBinding.cs index 272a427568..1d58d54318 100644 --- a/sdk/dotnet/ServiceAccount/IAMBinding.cs +++ b/sdk/dotnet/ServiceAccount/IAMBinding.cs @@ -22,8 +22,7 @@ namespace Pulumi.Gcp.ServiceAccount /// /// > **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. /// - /// ## Example Usage - /// ### Service Account IAM Policy + /// ## google\_service\_account\_iam\_policy /// /// ```csharp /// using System.Collections.Generic; @@ -61,7 +60,8 @@ namespace Pulumi.Gcp.ServiceAccount /// /// }); /// ``` - /// ### Service Account IAM Binding + /// + /// ## google\_service\_account\_iam\_binding /// /// ```csharp /// using System.Collections.Generic; @@ -88,7 +88,8 @@ namespace Pulumi.Gcp.ServiceAccount /// /// }); /// ``` - /// ### Service Account IAM Binding With IAM Conditions: + /// + /// With IAM Conditions: /// /// ```csharp /// using System.Collections.Generic; @@ -121,7 +122,8 @@ namespace Pulumi.Gcp.ServiceAccount /// /// }); /// ``` - /// ### Service Account IAM Member + /// + /// ## google\_service\_account\_iam\_member /// /// ```csharp /// using System.Collections.Generic; @@ -155,7 +157,8 @@ namespace Pulumi.Gcp.ServiceAccount /// /// }); /// ``` - /// ### Service Account IAM Member With IAM Conditions: + /// + /// With IAM Conditions: /// /// ```csharp /// using System.Collections.Generic; diff --git a/sdk/dotnet/ServiceAccount/IAMMember.cs b/sdk/dotnet/ServiceAccount/IAMMember.cs index 9d43ed44b9..62c450df71 100644 --- a/sdk/dotnet/ServiceAccount/IAMMember.cs +++ b/sdk/dotnet/ServiceAccount/IAMMember.cs @@ -22,8 +22,7 @@ namespace Pulumi.Gcp.ServiceAccount /// /// > **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. /// - /// ## Example Usage - /// ### Service Account IAM Policy + /// ## google\_service\_account\_iam\_policy /// /// ```csharp /// using System.Collections.Generic; @@ -61,7 +60,8 @@ namespace Pulumi.Gcp.ServiceAccount /// /// }); /// ``` - /// ### Service Account IAM Binding + /// + /// ## google\_service\_account\_iam\_binding /// /// ```csharp /// using System.Collections.Generic; @@ -88,7 +88,8 @@ namespace Pulumi.Gcp.ServiceAccount /// /// }); /// ``` - /// ### Service Account IAM Binding With IAM Conditions: + /// + /// With IAM Conditions: /// /// ```csharp /// using System.Collections.Generic; @@ -121,7 +122,8 @@ namespace Pulumi.Gcp.ServiceAccount /// /// }); /// ``` - /// ### Service Account IAM Member + /// + /// ## google\_service\_account\_iam\_member /// /// ```csharp /// using System.Collections.Generic; @@ -155,7 +157,8 @@ namespace Pulumi.Gcp.ServiceAccount /// /// }); /// ``` - /// ### Service Account IAM Member With IAM Conditions: + /// + /// With IAM Conditions: /// /// ```csharp /// using System.Collections.Generic; diff --git a/sdk/dotnet/ServiceAccount/IAMPolicy.cs b/sdk/dotnet/ServiceAccount/IAMPolicy.cs index da476a1c10..6acc449a26 100644 --- a/sdk/dotnet/ServiceAccount/IAMPolicy.cs +++ b/sdk/dotnet/ServiceAccount/IAMPolicy.cs @@ -22,8 +22,7 @@ namespace Pulumi.Gcp.ServiceAccount /// /// > **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. /// - /// ## Example Usage - /// ### Service Account IAM Policy + /// ## google\_service\_account\_iam\_policy /// /// ```csharp /// using System.Collections.Generic; @@ -61,7 +60,8 @@ namespace Pulumi.Gcp.ServiceAccount /// /// }); /// ``` - /// ### Service Account IAM Binding + /// + /// ## google\_service\_account\_iam\_binding /// /// ```csharp /// using System.Collections.Generic; @@ -88,7 +88,8 @@ namespace Pulumi.Gcp.ServiceAccount /// /// }); /// ``` - /// ### Service Account IAM Binding With IAM Conditions: + /// + /// With IAM Conditions: /// /// ```csharp /// using System.Collections.Generic; @@ -121,7 +122,8 @@ namespace Pulumi.Gcp.ServiceAccount /// /// }); /// ``` - /// ### Service Account IAM Member + /// + /// ## google\_service\_account\_iam\_member /// /// ```csharp /// using System.Collections.Generic; @@ -155,7 +157,8 @@ namespace Pulumi.Gcp.ServiceAccount /// /// }); /// ``` - /// ### Service Account IAM Member With IAM Conditions: + /// + /// With IAM Conditions: /// /// ```csharp /// using System.Collections.Generic; diff --git a/sdk/dotnet/ServiceDirectory/Endpoint.cs b/sdk/dotnet/ServiceDirectory/Endpoint.cs index 5fcd3896b2..5ea2b65350 100644 --- a/sdk/dotnet/ServiceDirectory/Endpoint.cs +++ b/sdk/dotnet/ServiceDirectory/Endpoint.cs @@ -10,14 +10,6 @@ namespace Pulumi.Gcp.ServiceDirectory { /// - /// An individual endpoint that provides a service. - /// - /// To get more information about Endpoint, see: - /// - /// * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services.endpoints) - /// * How-to Guides - /// * [Configuring an endpoint](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_an_endpoint) - /// /// ## Example Usage /// ### Service Directory Endpoint Basic /// diff --git a/sdk/dotnet/ServiceDirectory/Namespace.cs b/sdk/dotnet/ServiceDirectory/Namespace.cs index b09fb0a32f..964bb68f38 100644 --- a/sdk/dotnet/ServiceDirectory/Namespace.cs +++ b/sdk/dotnet/ServiceDirectory/Namespace.cs @@ -10,15 +10,6 @@ namespace Pulumi.Gcp.ServiceDirectory { /// - /// A container for `services`. Namespaces allow administrators to group services - /// together and define permissions for a collection of services. - /// - /// To get more information about Namespace, see: - /// - /// * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces) - /// * How-to Guides - /// * [Configuring a namespace](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_namespace) - /// /// ## Example Usage /// ### Service Directory Namespace Basic /// diff --git a/sdk/dotnet/ServiceDirectory/NamespaceIamBinding.cs b/sdk/dotnet/ServiceDirectory/NamespaceIamBinding.cs index f487d4cbb2..81414b7161 100644 --- a/sdk/dotnet/ServiceDirectory/NamespaceIamBinding.cs +++ b/sdk/dotnet/ServiceDirectory/NamespaceIamBinding.cs @@ -10,96 +10,6 @@ namespace Pulumi.Gcp.ServiceDirectory { /// - /// Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - /// - /// * `gcp.servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - /// * `gcp.servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - /// * `gcp.servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - /// - /// > **Note:** `gcp.servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.NamespaceIamBinding` and `gcp.servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_service\_directory\_namespace\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ServiceDirectory.NamespaceIamPolicy("policy", new() - /// { - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_service\_directory\_namespace\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ServiceDirectory.NamespaceIamBinding("binding", new() - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_service\_directory\_namespace\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ServiceDirectory.NamespaceIamMember("member", new() - /// { - /// Role = "roles/viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ServiceDirectory/NamespaceIamMember.cs b/sdk/dotnet/ServiceDirectory/NamespaceIamMember.cs index 0615ab610b..bbe8ee19e7 100644 --- a/sdk/dotnet/ServiceDirectory/NamespaceIamMember.cs +++ b/sdk/dotnet/ServiceDirectory/NamespaceIamMember.cs @@ -10,96 +10,6 @@ namespace Pulumi.Gcp.ServiceDirectory { /// - /// Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - /// - /// * `gcp.servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - /// * `gcp.servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - /// * `gcp.servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - /// - /// > **Note:** `gcp.servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.NamespaceIamBinding` and `gcp.servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_service\_directory\_namespace\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ServiceDirectory.NamespaceIamPolicy("policy", new() - /// { - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_service\_directory\_namespace\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ServiceDirectory.NamespaceIamBinding("binding", new() - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_service\_directory\_namespace\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ServiceDirectory.NamespaceIamMember("member", new() - /// { - /// Role = "roles/viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ServiceDirectory/NamespaceIamPolicy.cs b/sdk/dotnet/ServiceDirectory/NamespaceIamPolicy.cs index 5425e2ad44..87e9bd6675 100644 --- a/sdk/dotnet/ServiceDirectory/NamespaceIamPolicy.cs +++ b/sdk/dotnet/ServiceDirectory/NamespaceIamPolicy.cs @@ -10,96 +10,6 @@ namespace Pulumi.Gcp.ServiceDirectory { /// - /// Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - /// - /// * `gcp.servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - /// * `gcp.servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - /// * `gcp.servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - /// - /// > **Note:** `gcp.servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.NamespaceIamBinding` and `gcp.servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_service\_directory\_namespace\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ServiceDirectory.NamespaceIamPolicy("policy", new() - /// { - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_service\_directory\_namespace\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ServiceDirectory.NamespaceIamBinding("binding", new() - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_service\_directory\_namespace\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ServiceDirectory.NamespaceIamMember("member", new() - /// { - /// Role = "roles/viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ServiceDirectory/Service.cs b/sdk/dotnet/ServiceDirectory/Service.cs index e5e24d4453..83833b2e1e 100644 --- a/sdk/dotnet/ServiceDirectory/Service.cs +++ b/sdk/dotnet/ServiceDirectory/Service.cs @@ -10,14 +10,6 @@ namespace Pulumi.Gcp.ServiceDirectory { /// - /// An individual service. A service contains a name and optional metadata. - /// - /// To get more information about Service, see: - /// - /// * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services) - /// * How-to Guides - /// * [Configuring a service](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_service) - /// /// ## Example Usage /// ### Service Directory Service Basic /// diff --git a/sdk/dotnet/ServiceDirectory/ServiceIamBinding.cs b/sdk/dotnet/ServiceDirectory/ServiceIamBinding.cs index ebc18f65ff..723567df20 100644 --- a/sdk/dotnet/ServiceDirectory/ServiceIamBinding.cs +++ b/sdk/dotnet/ServiceDirectory/ServiceIamBinding.cs @@ -10,96 +10,6 @@ namespace Pulumi.Gcp.ServiceDirectory { /// - /// Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - /// - /// * `gcp.servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - /// * `gcp.servicedirectory.ServiceIamBinding`: 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 service are preserved. - /// * `gcp.servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - /// - /// > **Note:** `gcp.servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.ServiceIamBinding` and `gcp.servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_service\_directory\_service\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ServiceDirectory.ServiceIamPolicy("policy", new() - /// { - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_service\_directory\_service\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ServiceDirectory.ServiceIamBinding("binding", new() - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_service\_directory\_service\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ServiceDirectory.ServiceIamMember("member", new() - /// { - /// Role = "roles/viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ServiceDirectory/ServiceIamMember.cs b/sdk/dotnet/ServiceDirectory/ServiceIamMember.cs index c3c8649f97..a3e517b165 100644 --- a/sdk/dotnet/ServiceDirectory/ServiceIamMember.cs +++ b/sdk/dotnet/ServiceDirectory/ServiceIamMember.cs @@ -10,96 +10,6 @@ namespace Pulumi.Gcp.ServiceDirectory { /// - /// Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - /// - /// * `gcp.servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - /// * `gcp.servicedirectory.ServiceIamBinding`: 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 service are preserved. - /// * `gcp.servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - /// - /// > **Note:** `gcp.servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.ServiceIamBinding` and `gcp.servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_service\_directory\_service\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ServiceDirectory.ServiceIamPolicy("policy", new() - /// { - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_service\_directory\_service\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ServiceDirectory.ServiceIamBinding("binding", new() - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_service\_directory\_service\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ServiceDirectory.ServiceIamMember("member", new() - /// { - /// Role = "roles/viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ServiceDirectory/ServiceIamPolicy.cs b/sdk/dotnet/ServiceDirectory/ServiceIamPolicy.cs index ef66ef3698..2db16c7788 100644 --- a/sdk/dotnet/ServiceDirectory/ServiceIamPolicy.cs +++ b/sdk/dotnet/ServiceDirectory/ServiceIamPolicy.cs @@ -10,96 +10,6 @@ namespace Pulumi.Gcp.ServiceDirectory { /// - /// Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - /// - /// * `gcp.servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - /// * `gcp.servicedirectory.ServiceIamBinding`: 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 service are preserved. - /// * `gcp.servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - /// - /// > **Note:** `gcp.servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.ServiceIamBinding` and `gcp.servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - /// - /// > **Note:** `gcp.servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - /// - /// ## google\_service\_directory\_service\_iam\_policy - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var admin = Gcp.Organizations.GetIAMPolicy.Invoke(new() - /// { - /// Bindings = new[] - /// { - /// new Gcp.Organizations.Inputs.GetIAMPolicyBindingInputArgs - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, - /// }, - /// }); - /// - /// var policy = new Gcp.ServiceDirectory.ServiceIamPolicy("policy", new() - /// { - /// PolicyData = admin.Apply(getIAMPolicyResult => getIAMPolicyResult.PolicyData), - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_service\_directory\_service\_iam\_binding - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var binding = new Gcp.ServiceDirectory.ServiceIamBinding("binding", new() - /// { - /// Role = "roles/viewer", - /// Members = new[] - /// { - /// "user:jane@example.com", - /// }, - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// - /// ## google\_service\_directory\_service\_iam\_member - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var member = new Gcp.ServiceDirectory.ServiceIamMember("member", new() - /// { - /// Role = "roles/viewer", - /// Member = "user:jane@example.com", - /// }, new CustomResourceOptions - /// { - /// Provider = google_beta, - /// }); - /// - /// }); - /// ``` - /// /// ## Import /// /// For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/dotnet/ServiceUsage/ConsumerQuotaOverride.cs b/sdk/dotnet/ServiceUsage/ConsumerQuotaOverride.cs index ed5eb4cbff..b66efdef52 100644 --- a/sdk/dotnet/ServiceUsage/ConsumerQuotaOverride.cs +++ b/sdk/dotnet/ServiceUsage/ConsumerQuotaOverride.cs @@ -10,16 +10,6 @@ namespace Pulumi.Gcp.ServiceUsage { /// - /// A consumer override is applied to the consumer on its own authority to limit its own quota usage. - /// Consumer overrides cannot be used to grant more quota than would be allowed by admin overrides, - /// producer overrides, or the default limit of the service. - /// - /// To get more information about ConsumerQuotaOverride, see: - /// - /// * How-to Guides - /// * [Getting Started](https://cloud.google.com/service-usage/docs/getting-started) - /// * [REST API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services.consumerQuotaMetrics.limits.consumerOverrides) - /// /// ## Example Usage /// /// ## Import diff --git a/sdk/dotnet/Spanner/Database.cs b/sdk/dotnet/Spanner/Database.cs index 80ef1d4d04..a13cbf6829 100644 --- a/sdk/dotnet/Spanner/Database.cs +++ b/sdk/dotnet/Spanner/Database.cs @@ -10,16 +10,6 @@ namespace Pulumi.Gcp.Spanner { /// - /// A Cloud Spanner Database which is hosted on a Spanner instance. - /// - /// To get more information about Database, see: - /// - /// * [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instances.databases) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/spanner/) - /// - /// > **Warning:** It is strongly recommended to set `lifecycle { prevent_destroy = true }` on databases in order to prevent accidental data loss. - /// /// ## Example Usage /// ### Spanner Database Basic /// @@ -93,8 +83,8 @@ public partial class Database : global::Pulumi.CustomResource public Output> Ddls { get; private set; } = null!; /// - /// Whether or not to allow the provider to destroy the instance. Unless this field is set to false - /// in state, a `destroy` or `update` that would delete the instance will fail. + /// Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + /// 'terraform destroy' or 'terraform apply' that would delete the instance will fail. /// [Output("deletionProtection")] public Output DeletionProtection { get; private set; } = null!; @@ -212,8 +202,8 @@ public InputList Ddls } /// - /// Whether or not to allow the provider to destroy the instance. Unless this field is set to false - /// in state, a `destroy` or `update` that would delete the instance will fail. + /// Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + /// 'terraform destroy' or 'terraform apply' that would delete the instance will fail. /// [Input("deletionProtection")] public Input? DeletionProtection { get; set; } @@ -287,8 +277,8 @@ public InputList Ddls } /// - /// Whether or not to allow the provider to destroy the instance. Unless this field is set to false - /// in state, a `destroy` or `update` that would delete the instance will fail. + /// Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + /// 'terraform destroy' or 'terraform apply' that would delete the instance will fail. /// [Input("deletionProtection")] public Input? DeletionProtection { get; set; } diff --git a/sdk/dotnet/Sql/DatabaseInstance.cs b/sdk/dotnet/Sql/DatabaseInstance.cs index beb2f2aa6f..27ed6586cf 100644 --- a/sdk/dotnet/Sql/DatabaseInstance.cs +++ b/sdk/dotnet/Sql/DatabaseInstance.cs @@ -10,18 +10,6 @@ namespace Pulumi.Gcp.Sql { /// - /// Creates a new Google SQL Database Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), - /// or the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/instances). - /// - /// > **NOTE on `gcp.sql.DatabaseInstance`:** - Second-generation instances include a - /// default 'root'@'%' user with no password. This user will be deleted by the provider on - /// instance creation. You should use `gcp.sql.User` to define a custom user with - /// a restricted host and strong password. - /// - /// > **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false` - /// (and run `pulumi update` to write the field to state) in order to destroy an instance. - /// It is recommended to not set this field (or set it to true) until you're ready to destroy the instance and its databases. - /// /// ## Example Usage /// ### SQL Second Generation Instance /// @@ -144,9 +132,7 @@ public partial class DatabaseInstance : global::Pulumi.CustomResource public Output> AvailableMaintenanceVersions { get; private set; } = null!; /// - /// The context needed to create this instance as a clone of another instance. When this field is set during - /// resource creation, this provider will attempt to clone another instance as indicated in the context. The - /// configuration is detailed below. + /// Configuration for creating a new instance as a clone of another instance. /// [Output("clone")] public Output Clone { get; private set; } = null!; @@ -173,27 +159,17 @@ public partial class DatabaseInstance : global::Pulumi.CustomResource public Output DatabaseVersion { get; private set; } = null!; /// - /// Whether or not to allow the provider to destroy the instance. Unless this field is set to false - /// in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + /// Used to block Terraform from deleting a SQL Instance. Defaults to true. /// [Output("deletionProtection")] public Output DeletionProtection { get; private set; } = null!; - /// - /// The full path to the encryption key used for the CMEK disk encryption. Setting - /// up disk encryption currently requires manual steps outside of this provider. - /// The provided key must be in the same region as the SQL instance. In order - /// to use this feature, a special kind of service account must be created and - /// granted permission on this key. This step can currently only be done - /// manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - /// That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - /// key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - /// [Output("encryptionKeyName")] public Output EncryptionKeyName { get; private set; } = null!; /// - /// The first IPv4 address of any type assigned. + /// The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + /// output when the resource is configured with a count. /// [Output("firstIpAddress")] public Output FirstIpAddress { get; private set; } = null!; @@ -222,16 +198,15 @@ public partial class DatabaseInstance : global::Pulumi.CustomResource public Output MasterInstanceName { get; private set; } = null!; /// - /// The name of the instance. If the name is left - /// blank, the provider will randomly generate one when the instance is first - /// created. This is done because after a name is used, it cannot be reused for - /// up to [one week](https://cloud.google.com/sql/docs/delete-instance). + /// The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + /// created. This is done because after a name is used, it cannot be reused for up to one week. /// [Output("name")] public Output Name { get; private set; } = null!; /// - /// The first private (`PRIVATE`) IPv4 address assigned. + /// IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + /// access an IP of a specific type without performing filtering in a Terraform config. /// [Output("privateIpAddress")] public Output PrivateIpAddress { get; private set; } = null!; @@ -244,7 +219,8 @@ public partial class DatabaseInstance : global::Pulumi.CustomResource public Output Project { get; private set; } = null!; /// - /// The first public (`PRIMARY`) IPv4 address assigned. + /// IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + /// access an IP of a specific type without performing filtering in a Terraform config. /// [Output("publicIpAddress")] public Output PublicIpAddress { get; private set; } = null!; @@ -263,17 +239,11 @@ public partial class DatabaseInstance : global::Pulumi.CustomResource [Output("replicaConfiguration")] public Output ReplicaConfiguration { 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. - /// **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this - /// block during resource creation/update will trigger the restore action after the resource is created/updated. - /// [Output("restoreBackupContext")] public Output RestoreBackupContext { get; private set; } = null!; /// - /// Initial root password. Required for MS SQL Server. + /// Initial root password. Can be updated. Required for MS SQL Server. /// [Output("rootPassword")] public Output RootPassword { get; private set; } = null!; @@ -352,9 +322,7 @@ public static DatabaseInstance Get(string name, Input id, DatabaseInstan public sealed class DatabaseInstanceArgs : global::Pulumi.ResourceArgs { /// - /// The context needed to create this instance as a clone of another instance. When this field is set during - /// resource creation, this provider will attempt to clone another instance as indicated in the context. The - /// configuration is detailed below. + /// Configuration for creating a new instance as a clone of another instance. /// [Input("clone")] public Input? Clone { get; set; } @@ -374,22 +342,11 @@ public sealed class DatabaseInstanceArgs : global::Pulumi.ResourceArgs public Input DatabaseVersion { get; set; } = null!; /// - /// Whether or not to allow the provider to destroy the instance. Unless this field is set to false - /// in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + /// Used to block Terraform from deleting a SQL Instance. Defaults to true. /// [Input("deletionProtection")] public Input? DeletionProtection { get; set; } - /// - /// The full path to the encryption key used for the CMEK disk encryption. Setting - /// up disk encryption currently requires manual steps outside of this provider. - /// The provided key must be in the same region as the SQL instance. In order - /// to use this feature, a special kind of service account must be created and - /// granted permission on this key. This step can currently only be done - /// manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - /// That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - /// key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - /// [Input("encryptionKeyName")] public Input? EncryptionKeyName { get; set; } @@ -408,10 +365,8 @@ public sealed class DatabaseInstanceArgs : global::Pulumi.ResourceArgs public Input? MasterInstanceName { get; set; } /// - /// The name of the instance. If the name is left - /// blank, the provider will randomly generate one when the instance is first - /// created. This is done because after a name is used, it cannot be reused for - /// up to [one week](https://cloud.google.com/sql/docs/delete-instance). + /// The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + /// created. This is done because after a name is used, it cannot be reused for up to one week. /// [Input("name")] public Input? Name { get; set; } @@ -437,12 +392,6 @@ public sealed class DatabaseInstanceArgs : global::Pulumi.ResourceArgs [Input("replicaConfiguration")] public Input? ReplicaConfiguration { 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. - /// **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this - /// block during resource creation/update will trigger the restore action after the resource is created/updated. - /// [Input("restoreBackupContext")] public Input? RestoreBackupContext { get; set; } @@ -450,7 +399,7 @@ public sealed class DatabaseInstanceArgs : global::Pulumi.ResourceArgs private Input? _rootPassword; /// - /// Initial root password. Required for MS SQL Server. + /// Initial root password. Can be updated. Required for MS SQL Server. /// public Input? RootPassword { @@ -490,9 +439,7 @@ public InputList AvailableMaintenanceVersions } /// - /// The context needed to create this instance as a clone of another instance. When this field is set during - /// resource creation, this provider will attempt to clone another instance as indicated in the context. The - /// configuration is detailed below. + /// Configuration for creating a new instance as a clone of another instance. /// [Input("clone")] public Input? Clone { get; set; } @@ -519,27 +466,17 @@ public InputList AvailableMaintenanceVersions public Input? DatabaseVersion { get; set; } /// - /// Whether or not to allow the provider to destroy the instance. Unless this field is set to false - /// in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + /// Used to block Terraform from deleting a SQL Instance. Defaults to true. /// [Input("deletionProtection")] public Input? DeletionProtection { get; set; } - /// - /// The full path to the encryption key used for the CMEK disk encryption. Setting - /// up disk encryption currently requires manual steps outside of this provider. - /// The provided key must be in the same region as the SQL instance. In order - /// to use this feature, a special kind of service account must be created and - /// granted permission on this key. This step can currently only be done - /// manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - /// That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - /// key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - /// [Input("encryptionKeyName")] public Input? EncryptionKeyName { get; set; } /// - /// The first IPv4 address of any type assigned. + /// The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + /// output when the resource is configured with a count. /// [Input("firstIpAddress")] public Input? FirstIpAddress { get; set; } @@ -573,16 +510,15 @@ public InputList IpAddresses public Input? MasterInstanceName { get; set; } /// - /// The name of the instance. If the name is left - /// blank, the provider will randomly generate one when the instance is first - /// created. This is done because after a name is used, it cannot be reused for - /// up to [one week](https://cloud.google.com/sql/docs/delete-instance). + /// The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + /// created. This is done because after a name is used, it cannot be reused for up to one week. /// [Input("name")] public Input? Name { get; set; } /// - /// The first private (`PRIVATE`) IPv4 address assigned. + /// IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + /// access an IP of a specific type without performing filtering in a Terraform config. /// [Input("privateIpAddress")] public Input? PrivateIpAddress { get; set; } @@ -595,7 +531,8 @@ public InputList IpAddresses public Input? Project { get; set; } /// - /// The first public (`PRIMARY`) IPv4 address assigned. + /// IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + /// access an IP of a specific type without performing filtering in a Terraform config. /// [Input("publicIpAddress")] public Input? PublicIpAddress { get; set; } @@ -614,12 +551,6 @@ public InputList IpAddresses [Input("replicaConfiguration")] public Input? ReplicaConfiguration { 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. - /// **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this - /// block during resource creation/update will trigger the restore action after the resource is created/updated. - /// [Input("restoreBackupContext")] public Input? RestoreBackupContext { get; set; } @@ -627,7 +558,7 @@ public InputList IpAddresses private Input? _rootPassword; /// - /// Initial root password. Required for MS SQL Server. + /// Initial root password. Can be updated. Required for MS SQL Server. /// public Input? RootPassword { diff --git a/sdk/dotnet/Sql/SourceRepresentationInstance.cs b/sdk/dotnet/Sql/SourceRepresentationInstance.cs index 690a70d769..ccab57cb76 100644 --- a/sdk/dotnet/Sql/SourceRepresentationInstance.cs +++ b/sdk/dotnet/Sql/SourceRepresentationInstance.cs @@ -10,12 +10,6 @@ namespace Pulumi.Gcp.Sql { /// - /// A source representation instance is a Cloud SQL instance that represents - /// the source database server to the Cloud SQL replica. It is visible in the - /// Cloud Console and appears the same as a regular Cloud SQL instance, but it - /// contains no data, requires no configuration or maintenance, and does not - /// affect billing. You cannot update the source representation instance. - /// /// ## Example Usage /// ### Sql Source Representation Instance Basic /// @@ -29,9 +23,12 @@ namespace Pulumi.Gcp.Sql /// var instance = new Gcp.Sql.SourceRepresentationInstance("instance", new() /// { /// DatabaseVersion = "MYSQL_8_0", + /// DumpFilePath = "gs://replica-bucket/source-database.sql.gz", /// Host = "10.20.30.40", + /// Password = "password-for-the-user", /// Port = 3306, /// Region = "us-central1", + /// Username = "some-user", /// }); /// /// }); @@ -101,6 +98,7 @@ public partial class SourceRepresentationInstance : global::Pulumi.CustomResourc /// /// The password for the replication user account. + /// **Note**: This property is sensitive and will not be displayed in the plan. /// [Output("password")] public Output Password { get; private set; } = null!; @@ -155,6 +153,10 @@ private static CustomResourceOptions MakeResourceOptions(CustomResourceOptions? var defaultOptions = new CustomResourceOptions { Version = Utilities.Version, + AdditionalSecretOutputs = + { + "password", + }, }; var merged = CustomResourceOptions.Merge(defaultOptions, options); // Override the ID if one was specified for consistency with other language SDKs. @@ -221,11 +223,22 @@ public sealed class SourceRepresentationInstanceArgs : global::Pulumi.ResourceAr [Input("name")] public Input? Name { get; set; } + [Input("password")] + private Input? _password; + /// /// The password for the replication user account. + /// **Note**: This property is sensitive and will not be displayed in the plan. /// - [Input("password")] - public Input? Password { get; set; } + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } /// /// The externally accessible port for the source database server. @@ -305,11 +318,22 @@ public sealed class SourceRepresentationInstanceState : global::Pulumi.ResourceA [Input("name")] public Input? Name { get; set; } + [Input("password")] + private Input? _password; + /// /// The password for the replication user account. + /// **Note**: This property is sensitive and will not be displayed in the plan. /// - [Input("password")] - public Input? Password { get; set; } + public Input? Password + { + get => _password; + set + { + var emptySecret = Output.CreateSecret(0); + _password = Output.Tuple?, int>(value, emptySecret).Apply(t => t.Item1); + } + } /// /// The externally accessible port for the source database server. diff --git a/sdk/dotnet/Sql/SslCert.cs b/sdk/dotnet/Sql/SslCert.cs index 76845194ee..b429904097 100644 --- a/sdk/dotnet/Sql/SslCert.cs +++ b/sdk/dotnet/Sql/SslCert.cs @@ -10,10 +10,6 @@ namespace Pulumi.Gcp.Sql { /// - /// Creates a new Google SQL SSL Cert on a Google SQL Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/sslCerts). - /// - /// > **Note:** All arguments including the private key will be stored in the raw state as plain-text - /// /// ## Example Usage /// /// Example creating a SQL Client Certificate. diff --git a/sdk/dotnet/Sql/User.cs b/sdk/dotnet/Sql/User.cs index a9158ece3d..bf4e368df5 100644 --- a/sdk/dotnet/Sql/User.cs +++ b/sdk/dotnet/Sql/User.cs @@ -10,10 +10,6 @@ namespace Pulumi.Gcp.Sql { /// - /// Creates a new Google SQL User on a Google SQL User Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/users). - /// - /// > **Note:** All arguments including the username and password will be stored in the raw state as plain-text. - /// /// ## Example Usage /// /// Example creating a SQL User. diff --git a/sdk/dotnet/Storage/Bucket.cs b/sdk/dotnet/Storage/Bucket.cs index 4a5ec8354b..f9c83a375f 100644 --- a/sdk/dotnet/Storage/Bucket.cs +++ b/sdk/dotnet/Storage/Bucket.cs @@ -179,9 +179,8 @@ public partial class Bucket : global::Pulumi.CustomResource public Output Encryption { get; private set; } = null!; /// - /// When deleting a bucket, this - /// boolean option will delete all contained objects. If you try to delete a - /// bucket that contains objects, the provider will fail that run. + /// When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + /// contains objects, Terraform will fail that run. /// [Output("forceDestroy")] public Output ForceDestroy { get; private set; } = null!; @@ -360,9 +359,8 @@ public InputList Cors public Input? Encryption { get; set; } /// - /// When deleting a bucket, this - /// boolean option will delete all contained objects. If you try to delete a - /// bucket that contains objects, the provider will fail that run. + /// When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + /// contains objects, Terraform will fail that run. /// [Input("forceDestroy")] public Input? ForceDestroy { get; set; } @@ -503,9 +501,8 @@ public InputList Cors public Input? Encryption { get; set; } /// - /// When deleting a bucket, this - /// boolean option will delete all contained objects. If you try to delete a - /// bucket that contains objects, the provider will fail that run. + /// When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + /// contains objects, Terraform will fail that run. /// [Input("forceDestroy")] public Input? ForceDestroy { get; set; } diff --git a/sdk/dotnet/Storage/BucketACL.cs b/sdk/dotnet/Storage/BucketACL.cs index 14e4b922e1..3625f7efbd 100644 --- a/sdk/dotnet/Storage/BucketACL.cs +++ b/sdk/dotnet/Storage/BucketACL.cs @@ -10,17 +10,6 @@ namespace Pulumi.Gcp.Storage { /// - /// Authoritatively manages a bucket's ACLs in Google cloud storage service (GCS). For more information see - /// [the official documentation](https://cloud.google.com/storage/docs/access-control/lists) - /// and - /// [API](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls). - /// - /// Bucket ACLs can be managed non authoritatively using the `storage_bucket_access_control` resource. Do not use these two resources in conjunction to manage the same bucket. - /// - /// Permissions can be granted either by ACLs or Cloud IAM policies. In general, permissions granted by Cloud IAM policies do not appear in ACLs, and permissions granted by ACLs do not appear in Cloud IAM policies. The only exception is for ACLs applied directly on a bucket and certain bucket-level Cloud IAM policies, as described in [Cloud IAM relation to ACLs](https://cloud.google.com/storage/docs/access-control/iam#acls). - /// - /// **NOTE** This resource will not remove the `project-owners-<project_id>` entity from the `OWNER` role. - /// /// ## Example Usage /// /// Example creating an ACL on a bucket with one owner, and one reader. diff --git a/sdk/dotnet/Storage/BucketAccessControl.cs b/sdk/dotnet/Storage/BucketAccessControl.cs index 7dc4dd909a..a068d26eed 100644 --- a/sdk/dotnet/Storage/BucketAccessControl.cs +++ b/sdk/dotnet/Storage/BucketAccessControl.cs @@ -10,29 +10,6 @@ namespace Pulumi.Gcp.Storage { /// - /// Bucket ACLs can be managed authoritatively using the - /// `storage_bucket_acl` resource. Do not use these two resources in conjunction to manage the same bucket. - /// - /// The BucketAccessControls resource manages the Access Control List - /// (ACLs) for a single entity/role pairing on a bucket. ACLs let you specify who - /// has access to your data and to what extent. - /// - /// There are three roles that can be assigned to an entity: - /// - /// READERs can get the bucket, though no acl property will be returned, and - /// list the bucket's objects. WRITERs are READERs, and they can insert - /// objects into the bucket and delete the bucket's objects. OWNERs are - /// WRITERs, and they can get the acl property of a bucket, update a bucket, - /// and call all BucketAccessControls methods on the bucket. For more - /// information, see Access Control, with the caveat that this API uses - /// READER, WRITER, and OWNER instead of READ, WRITE, and FULL_CONTROL. - /// - /// To get more information about BucketAccessControl, see: - /// - /// * [API documentation](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/storage/docs/access-control/lists) - /// /// ## Example Usage /// ### Storage Bucket Access Control Public Bucket /// diff --git a/sdk/dotnet/Storage/BucketObject.cs b/sdk/dotnet/Storage/BucketObject.cs index 9ae33b7478..ee02f59ce5 100644 --- a/sdk/dotnet/Storage/BucketObject.cs +++ b/sdk/dotnet/Storage/BucketObject.cs @@ -58,7 +58,7 @@ public partial class BucketObject : global::Pulumi.CustomResource public Output CacheControl { get; private set; } = null!; /// - /// Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + /// Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). /// [Output("content")] public Output Content { get; private set; } = null!; @@ -241,7 +241,7 @@ public sealed class BucketObjectArgs : global::Pulumi.ResourceArgs private Input? _content; /// - /// Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + /// Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). /// public Input? Content { @@ -373,7 +373,7 @@ public sealed class BucketObjectState : global::Pulumi.ResourceArgs private Input? _content; /// - /// Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + /// Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). /// public Input? Content { diff --git a/sdk/dotnet/Storage/GetProjectServiceAccount.cs b/sdk/dotnet/Storage/GetProjectServiceAccount.cs index cb4f6581e4..e25241bfbb 100644 --- a/sdk/dotnet/Storage/GetProjectServiceAccount.cs +++ b/sdk/dotnet/Storage/GetProjectServiceAccount.cs @@ -12,39 +12,6 @@ namespace Pulumi.Gcp.Storage public static class GetProjectServiceAccount { /// - /// Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts). - /// - /// For each Google Cloud project, Google maintains a unique service account which - /// is used as the identity for various Google Cloud Storage operations, including - /// operations involving - /// [customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys) - /// and those involving - /// [storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification). - /// This automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use - /// these customer-managed resources. - /// - /// The service account has a well-known, documented naming format which is parameterised on the numeric Google project ID. - /// However, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which - /// presuppose its existence. - /// These actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the - /// service account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys - /// on the bucket creation page. - /// - /// Use of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations - /// which demand its existence, such as specifying it in Cloud IAM policy. - /// Always prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause - /// provider update errors in cases where the service account does not yet exist. - /// - /// > When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources, - /// you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource. - /// Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a - /// bucket configuration, otherwise the API calls will fail. - /// You may need to use `depends_on` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it. - /// See the examples here and in the `gcp.storage.Notification` resource. - /// - /// For more information see - /// [the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount). - /// /// {{% examples %}} /// ## Example Usage /// {{% example %}} @@ -119,39 +86,6 @@ public static Task InvokeAsync(GetProjectService => global::Pulumi.Deployment.Instance.InvokeAsync("gcp:storage/getProjectServiceAccount:getProjectServiceAccount", args ?? new GetProjectServiceAccountArgs(), options.WithDefaults()); /// - /// Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts). - /// - /// For each Google Cloud project, Google maintains a unique service account which - /// is used as the identity for various Google Cloud Storage operations, including - /// operations involving - /// [customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys) - /// and those involving - /// [storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification). - /// This automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use - /// these customer-managed resources. - /// - /// The service account has a well-known, documented naming format which is parameterised on the numeric Google project ID. - /// However, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which - /// presuppose its existence. - /// These actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the - /// service account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys - /// on the bucket creation page. - /// - /// Use of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations - /// which demand its existence, such as specifying it in Cloud IAM policy. - /// Always prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause - /// provider update errors in cases where the service account does not yet exist. - /// - /// > When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources, - /// you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource. - /// Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a - /// bucket configuration, otherwise the API calls will fail. - /// You may need to use `depends_on` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it. - /// See the examples here and in the `gcp.storage.Notification` resource. - /// - /// For more information see - /// [the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount). - /// /// {{% examples %}} /// ## Example Usage /// {{% example %}} diff --git a/sdk/dotnet/Storage/HmacKey.cs b/sdk/dotnet/Storage/HmacKey.cs index b7ba8575a6..c90947d652 100644 --- a/sdk/dotnet/Storage/HmacKey.cs +++ b/sdk/dotnet/Storage/HmacKey.cs @@ -10,22 +10,6 @@ namespace Pulumi.Gcp.Storage { /// - /// The hmacKeys resource represents an HMAC key within Cloud Storage. The resource - /// consists of a secret and HMAC key metadata. HMAC keys can be used as credentials - /// for service accounts. - /// - /// To get more information about HmacKey, see: - /// - /// * [API documentation](https://cloud.google.com/storage/docs/json_api/v1/projects/hmacKeys) - /// * How-to Guides - /// * [Official Documentation](https://cloud.google.com/storage/docs/authentication/managing-hmackeys) - /// - /// > **Warning:** All arguments including the `secret` value will be stored in the raw - /// state as plain-text. On import, the `secret` value will not be retrieved. - /// - /// > **Warning:** All arguments including `secret` will be stored in the raw - /// state as plain-text. - /// /// ## Example Usage /// ### Storage Hmac Key /// @@ -42,7 +26,7 @@ namespace Pulumi.Gcp.Storage /// AccountId = "my-svc-acc", /// }); /// - /// //Create the HMAC key for the associated service account + /// //Create the HMAC key for the associated service account /// var key = new Gcp.Storage.HmacKey("key", new() /// { /// ServiceAccountEmail = serviceAccount.Email, diff --git a/sdk/dotnet/Tags/LocationTagBinding.cs b/sdk/dotnet/Tags/LocationTagBinding.cs new file mode 100644 index 0000000000..8548a9e11f --- /dev/null +++ b/sdk/dotnet/Tags/LocationTagBinding.cs @@ -0,0 +1,206 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Tags +{ + /// + /// ## subcategory: "Tags" + /// + /// page_title: "Google: gcp.tags.LocationTagBinding" + /// description: |- + /// A LocationTagBinding represents a connection between a TagValue and a Regional cloud resources. + /// --- + /// + /// # google\_tags\_location\_tag\_binding + /// + /// A TagBinding represents a connection between a TagValue and a Regional cloud resource (currently project, folder, or organization). Once a TagBinding is created, the TagValue is applied to all the descendants of the cloud resource. + /// + /// To get more information about TagBinding, see: + /// + /// * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v3/tagBindings) + /// * How-to Guides + /// * [Official Documentation](https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing) + /// + /// ## Example Usage + /// ### Location Tag Binding Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var project = new Gcp.Organizations.Project("project", new() + /// { + /// OrgId = "123456789", + /// ProjectId = "project_id", + /// }); + /// + /// var key = new Gcp.Tags.TagKey("key", new() + /// { + /// Description = "For keyname resources.", + /// Parent = "organizations/123456789", + /// ShortName = "keyname", + /// }); + /// + /// var @value = new Gcp.Tags.TagValue("value", new() + /// { + /// Description = "For valuename resources.", + /// Parent = key.Name.Apply(name => $"tagKeys/{name}"), + /// ShortName = "valuename", + /// }); + /// + /// var binding = new Gcp.Tags.LocationTagBinding("binding", new() + /// { + /// Location = "us-central1", + /// Parent = project.Number.Apply(number => $"//run.googleapis.com/projects/{number}/locations/{google_cloud_run_service.Default.Location}/services/{google_cloud_run_service.Default.Name}"), + /// TagValue = @value.Name.Apply(name => $"tagValues/{name}"), + /// }); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// TagBinding can be imported using any of these accepted formats + /// + /// ```sh + /// $ pulumi import gcp:tags/locationTagBinding:LocationTagBinding default {{location}}/{{name}} + /// ``` + /// + [GcpResourceType("gcp:tags/locationTagBinding:LocationTagBinding")] + public partial class LocationTagBinding : global::Pulumi.CustomResource + { + /// + /// Location of the resource. + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + /// + [Output("parent")] + public Output Parent { get; private set; } = null!; + + /// + /// The TagValue of the TagBinding. Must be of the form tagValues/456. + /// + [Output("tagValue")] + public Output TagValue { get; private set; } = null!; + + + /// + /// Create a LocationTagBinding 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 LocationTagBinding(string name, LocationTagBindingArgs args, CustomResourceOptions? options = null) + : base("gcp:tags/locationTagBinding:LocationTagBinding", name, args ?? new LocationTagBindingArgs(), MakeResourceOptions(options, "")) + { + } + + private LocationTagBinding(string name, Input id, LocationTagBindingState? state = null, CustomResourceOptions? options = null) + : base("gcp:tags/locationTagBinding:LocationTagBinding", 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 LocationTagBinding 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 LocationTagBinding Get(string name, Input id, LocationTagBindingState? state = null, CustomResourceOptions? options = null) + { + return new LocationTagBinding(name, id, state, options); + } + } + + public sealed class LocationTagBindingArgs : global::Pulumi.ResourceArgs + { + /// + /// Location of the resource. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + /// + [Input("parent", required: true)] + public Input Parent { get; set; } = null!; + + /// + /// The TagValue of the TagBinding. Must be of the form tagValues/456. + /// + [Input("tagValue", required: true)] + public Input TagValue { get; set; } = null!; + + public LocationTagBindingArgs() + { + } + public static new LocationTagBindingArgs Empty => new LocationTagBindingArgs(); + } + + public sealed class LocationTagBindingState : global::Pulumi.ResourceArgs + { + /// + /// Location of the resource. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + /// + [Input("parent")] + public Input? Parent { get; set; } + + /// + /// The TagValue of the TagBinding. Must be of the form tagValues/456. + /// + [Input("tagValue")] + public Input? TagValue { get; set; } + + public LocationTagBindingState() + { + } + public static new LocationTagBindingState Empty => new LocationTagBindingState(); + } +} diff --git a/sdk/dotnet/Tpu/Node.cs b/sdk/dotnet/Tpu/Node.cs index 26ea8fdb0c..987e6d2671 100644 --- a/sdk/dotnet/Tpu/Node.cs +++ b/sdk/dotnet/Tpu/Node.cs @@ -40,60 +40,6 @@ namespace Pulumi.Gcp.Tpu /// /// }); /// ``` - /// ### TPU Node Full - /// - /// ```csharp - /// using System.Collections.Generic; - /// using Pulumi; - /// using Gcp = Pulumi.Gcp; - /// - /// return await Deployment.RunAsync(() => - /// { - /// var available = Gcp.Tpu.GetTensorflowVersions.Invoke(); - /// - /// var network = Gcp.Compute.GetNetwork.Invoke(new() - /// { - /// Name = "default", - /// }); - /// - /// var serviceRange = new Gcp.Compute.GlobalAddress("serviceRange", new() - /// { - /// Purpose = "VPC_PEERING", - /// AddressType = "INTERNAL", - /// PrefixLength = 16, - /// Network = network.Apply(getNetworkResult => getNetworkResult.Id), - /// }); - /// - /// var privateServiceConnection = new Gcp.ServiceNetworking.Connection("privateServiceConnection", new() - /// { - /// Network = network.Apply(getNetworkResult => getNetworkResult.Id), - /// Service = "servicenetworking.googleapis.com", - /// ReservedPeeringRanges = new[] - /// { - /// serviceRange.Name, - /// }, - /// }); - /// - /// var tpu = new Gcp.Tpu.Node("tpu", new() - /// { - /// Zone = "us-central1-b", - /// AcceleratorType = "v3-8", - /// TensorflowVersion = available.Apply(getTensorflowVersionsResult => getTensorflowVersionsResult.Versions[0]), - /// Description = "Google Provider test TPU", - /// UseServiceNetworking = true, - /// Network = privateServiceConnection.Network, - /// Labels = - /// { - /// { "foo", "bar" }, - /// }, - /// SchedulingConfig = new Gcp.Tpu.Inputs.NodeSchedulingConfigArgs - /// { - /// Preemptible = true, - /// }, - /// }); - /// - /// }); - /// ``` /// /// ## Import /// diff --git a/sdk/dotnet/Workstations/Inputs/WorkstationClusterConditionArgs.cs b/sdk/dotnet/Workstations/Inputs/WorkstationClusterConditionArgs.cs new file mode 100644 index 0000000000..cba57e57b9 --- /dev/null +++ b/sdk/dotnet/Workstations/Inputs/WorkstationClusterConditionArgs.cs @@ -0,0 +1,44 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Workstations.Inputs +{ + + public sealed class WorkstationClusterConditionArgs : global::Pulumi.ResourceArgs + { + /// + /// The status code, which should be an enum value of google.rpc.Code. + /// + [Input("code")] + public Input? Code { get; set; } + + [Input("details")] + private InputList>? _details; + + /// + /// A list of messages that carry the error details. + /// + public InputList> Details + { + get => _details ?? (_details = new InputList>()); + set => _details = value; + } + + /// + /// Human readable message indicating details about the current status. + /// + [Input("message")] + public Input? Message { get; set; } + + public WorkstationClusterConditionArgs() + { + } + public static new WorkstationClusterConditionArgs Empty => new WorkstationClusterConditionArgs(); + } +} diff --git a/sdk/dotnet/Workstations/Inputs/WorkstationClusterConditionGetArgs.cs b/sdk/dotnet/Workstations/Inputs/WorkstationClusterConditionGetArgs.cs new file mode 100644 index 0000000000..5107686e24 --- /dev/null +++ b/sdk/dotnet/Workstations/Inputs/WorkstationClusterConditionGetArgs.cs @@ -0,0 +1,44 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Workstations.Inputs +{ + + public sealed class WorkstationClusterConditionGetArgs : global::Pulumi.ResourceArgs + { + /// + /// The status code, which should be an enum value of google.rpc.Code. + /// + [Input("code")] + public Input? Code { get; set; } + + [Input("details")] + private InputList>? _details; + + /// + /// A list of messages that carry the error details. + /// + public InputList> Details + { + get => _details ?? (_details = new InputList>()); + set => _details = value; + } + + /// + /// Human readable message indicating details about the current status. + /// + [Input("message")] + public Input? Message { get; set; } + + public WorkstationClusterConditionGetArgs() + { + } + public static new WorkstationClusterConditionGetArgs Empty => new WorkstationClusterConditionGetArgs(); + } +} diff --git a/sdk/dotnet/Workstations/Inputs/WorkstationClusterPrivateClusterConfigArgs.cs b/sdk/dotnet/Workstations/Inputs/WorkstationClusterPrivateClusterConfigArgs.cs new file mode 100644 index 0000000000..747695686e --- /dev/null +++ b/sdk/dotnet/Workstations/Inputs/WorkstationClusterPrivateClusterConfigArgs.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.Workstations.Inputs +{ + + public sealed class WorkstationClusterPrivateClusterConfigArgs : global::Pulumi.ResourceArgs + { + /// + /// Hostname for the workstation cluster. + /// This field will be populated only when private endpoint is enabled. + /// To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + /// + [Input("clusterHostname")] + public Input? ClusterHostname { get; set; } + + /// + /// Whether Workstations endpoint is private. + /// + [Input("enablePrivateEndpoint", required: true)] + public Input EnablePrivateEndpoint { get; set; } = null!; + + /// + /// Service attachment URI for the workstation cluster. + /// The service attachemnt is created when private endpoint is enabled. + /// To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + /// + [Input("serviceAttachmentUri")] + public Input? ServiceAttachmentUri { get; set; } + + public WorkstationClusterPrivateClusterConfigArgs() + { + } + public static new WorkstationClusterPrivateClusterConfigArgs Empty => new WorkstationClusterPrivateClusterConfigArgs(); + } +} diff --git a/sdk/dotnet/Workstations/Inputs/WorkstationClusterPrivateClusterConfigGetArgs.cs b/sdk/dotnet/Workstations/Inputs/WorkstationClusterPrivateClusterConfigGetArgs.cs new file mode 100644 index 0000000000..698ba16492 --- /dev/null +++ b/sdk/dotnet/Workstations/Inputs/WorkstationClusterPrivateClusterConfigGetArgs.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.Workstations.Inputs +{ + + public sealed class WorkstationClusterPrivateClusterConfigGetArgs : global::Pulumi.ResourceArgs + { + /// + /// Hostname for the workstation cluster. + /// This field will be populated only when private endpoint is enabled. + /// To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + /// + [Input("clusterHostname")] + public Input? ClusterHostname { get; set; } + + /// + /// Whether Workstations endpoint is private. + /// + [Input("enablePrivateEndpoint", required: true)] + public Input EnablePrivateEndpoint { get; set; } = null!; + + /// + /// Service attachment URI for the workstation cluster. + /// The service attachemnt is created when private endpoint is enabled. + /// To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + /// + [Input("serviceAttachmentUri")] + public Input? ServiceAttachmentUri { get; set; } + + public WorkstationClusterPrivateClusterConfigGetArgs() + { + } + public static new WorkstationClusterPrivateClusterConfigGetArgs Empty => new WorkstationClusterPrivateClusterConfigGetArgs(); + } +} diff --git a/sdk/dotnet/Workstations/Outputs/WorkstationClusterCondition.cs b/sdk/dotnet/Workstations/Outputs/WorkstationClusterCondition.cs new file mode 100644 index 0000000000..601ae4ef11 --- /dev/null +++ b/sdk/dotnet/Workstations/Outputs/WorkstationClusterCondition.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.Workstations.Outputs +{ + + [OutputType] + public sealed class WorkstationClusterCondition + { + /// + /// The status code, which should be an enum value of google.rpc.Code. + /// + public readonly int? Code; + /// + /// A list of messages that carry the error details. + /// + public readonly ImmutableArray> Details; + /// + /// Human readable message indicating details about the current status. + /// + public readonly string? Message; + + [OutputConstructor] + private WorkstationClusterCondition( + int? code, + + ImmutableArray> details, + + string? message) + { + Code = code; + Details = details; + Message = message; + } + } +} diff --git a/sdk/dotnet/Workstations/Outputs/WorkstationClusterPrivateClusterConfig.cs b/sdk/dotnet/Workstations/Outputs/WorkstationClusterPrivateClusterConfig.cs new file mode 100644 index 0000000000..257e0419b4 --- /dev/null +++ b/sdk/dotnet/Workstations/Outputs/WorkstationClusterPrivateClusterConfig.cs @@ -0,0 +1,46 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Workstations.Outputs +{ + + [OutputType] + public sealed class WorkstationClusterPrivateClusterConfig + { + /// + /// Hostname for the workstation cluster. + /// This field will be populated only when private endpoint is enabled. + /// To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + /// + public readonly string? ClusterHostname; + /// + /// Whether Workstations endpoint is private. + /// + public readonly bool EnablePrivateEndpoint; + /// + /// Service attachment URI for the workstation cluster. + /// The service attachemnt is created when private endpoint is enabled. + /// To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + /// + public readonly string? ServiceAttachmentUri; + + [OutputConstructor] + private WorkstationClusterPrivateClusterConfig( + string? clusterHostname, + + bool enablePrivateEndpoint, + + string? serviceAttachmentUri) + { + ClusterHostname = clusterHostname; + EnablePrivateEndpoint = enablePrivateEndpoint; + ServiceAttachmentUri = serviceAttachmentUri; + } + } +} diff --git a/sdk/dotnet/Workstations/README.md b/sdk/dotnet/Workstations/README.md new file mode 100644 index 0000000000..061b113996 --- /dev/null +++ b/sdk/dotnet/Workstations/README.md @@ -0,0 +1 @@ +A Pulumi package for creating and managing Google Cloud Platform resources. diff --git a/sdk/dotnet/Workstations/WorkstationCluster.cs b/sdk/dotnet/Workstations/WorkstationCluster.cs new file mode 100644 index 0000000000..381b3ad5e6 --- /dev/null +++ b/sdk/dotnet/Workstations/WorkstationCluster.cs @@ -0,0 +1,483 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +using System; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.Threading.Tasks; +using Pulumi.Serialization; + +namespace Pulumi.Gcp.Workstations +{ + /// + /// ## Example Usage + /// ### Workstation Cluster Basic + /// + /// ```csharp + /// using System.Collections.Generic; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var defaultNetwork = new Gcp.Compute.Network("defaultNetwork", new() + /// { + /// AutoCreateSubnetworks = false, + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var defaultSubnetwork = new Gcp.Compute.Subnetwork("defaultSubnetwork", new() + /// { + /// IpCidrRange = "10.0.0.0/24", + /// Region = "us-central1", + /// Network = defaultNetwork.Name, + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster("defaultWorkstationCluster", new() + /// { + /// WorkstationClusterId = "workstation-cluster", + /// Network = defaultNetwork.Id, + /// Subnetwork = defaultSubnetwork.Id, + /// Location = "us-central1", + /// Labels = + /// { + /// { "label", "key" }, + /// }, + /// Annotations = + /// { + /// { "label-one", "value-one" }, + /// }, + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var project = Gcp.Organizations.GetProject.Invoke(); + /// + /// }); + /// ``` + /// ### Workstation Cluster Private + /// + /// ```csharp + /// using System.Collections.Generic; + /// using Pulumi; + /// using Gcp = Pulumi.Gcp; + /// + /// return await Deployment.RunAsync(() => + /// { + /// var defaultNetwork = new Gcp.Compute.Network("defaultNetwork", new() + /// { + /// AutoCreateSubnetworks = false, + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var defaultSubnetwork = new Gcp.Compute.Subnetwork("defaultSubnetwork", new() + /// { + /// IpCidrRange = "10.0.0.0/24", + /// Region = "us-central1", + /// Network = defaultNetwork.Name, + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var defaultWorkstationCluster = new Gcp.Workstations.WorkstationCluster("defaultWorkstationCluster", new() + /// { + /// WorkstationClusterId = "workstation-cluster-private", + /// Network = defaultNetwork.Id, + /// Subnetwork = defaultSubnetwork.Id, + /// Location = "us-central1", + /// PrivateClusterConfig = new Gcp.Workstations.Inputs.WorkstationClusterPrivateClusterConfigArgs + /// { + /// EnablePrivateEndpoint = true, + /// }, + /// Labels = + /// { + /// { "label", "key" }, + /// }, + /// Annotations = + /// { + /// { "label-one", "value-one" }, + /// }, + /// }, new CustomResourceOptions + /// { + /// Provider = google_beta, + /// }); + /// + /// var project = Gcp.Organizations.GetProject.Invoke(); + /// + /// }); + /// ``` + /// + /// ## Import + /// + /// WorkstationCluster can be imported using any of these accepted formats + /// + /// ```sh + /// $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{project}}/{{location}}/{{workstation_cluster_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{location}}/{{workstation_cluster_id}} + /// ``` + /// + /// ```sh + /// $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{workstation_cluster_id}} + /// ``` + /// + [GcpResourceType("gcp:workstations/workstationCluster:WorkstationCluster")] + public partial class WorkstationCluster : global::Pulumi.CustomResource + { + /// + /// Client-specified annotations. This is distinct from labels. + /// + [Output("annotations")] + public Output?> Annotations { get; private set; } = null!; + + /// + /// Status conditions describing the current resource state. + /// Structure is documented below. + /// + [Output("conditions")] + public Output> Conditions { get; private set; } = null!; + + /// + /// Time the Instance was created in UTC. + /// + [Output("createTime")] + public Output CreateTime { get; private set; } = null!; + + /// + /// Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + /// Details can be found in the conditions field. + /// + [Output("degraded")] + public Output Degraded { get; private set; } = null!; + + /// + /// Human-readable name for this resource. + /// + [Output("displayName")] + public Output DisplayName { get; private set; } = null!; + + /// + /// Checksum computed by the server. + /// May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + /// + [Output("etag")] + public Output Etag { get; private set; } = null!; + + /// + /// Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + /// + [Output("labels")] + public Output?> Labels { get; private set; } = null!; + + /// + /// The location where the workstation cluster should reside. + /// + [Output("location")] + public Output Location { get; private set; } = null!; + + /// + /// The name of the cluster resource. + /// + [Output("name")] + public Output Name { get; private set; } = null!; + + /// + /// The relative resource name of the VPC network on which the instance can be accessed. + /// It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + /// + [Output("network")] + public Output Network { get; private set; } = null!; + + /// + /// Configuration for private cluster. + /// Structure is documented below. + /// + [Output("privateClusterConfig")] + public Output PrivateClusterConfig { 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!; + + /// + /// Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + /// Must be part of the subnetwork specified for this cluster. + /// + [Output("subnetwork")] + public Output Subnetwork { get; private set; } = null!; + + /// + /// The system-generated UID of the resource. + /// + [Output("uid")] + public Output Uid { get; private set; } = null!; + + /// + /// The ID of the workstation cluster. + /// + [Output("workstationClusterId")] + public Output WorkstationClusterId { get; private set; } = null!; + + + /// + /// Create a WorkstationCluster 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 WorkstationCluster(string name, WorkstationClusterArgs args, CustomResourceOptions? options = null) + : base("gcp:workstations/workstationCluster:WorkstationCluster", name, args ?? new WorkstationClusterArgs(), MakeResourceOptions(options, "")) + { + } + + private WorkstationCluster(string name, Input id, WorkstationClusterState? state = null, CustomResourceOptions? options = null) + : base("gcp:workstations/workstationCluster:WorkstationCluster", 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 WorkstationCluster 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 WorkstationCluster Get(string name, Input id, WorkstationClusterState? state = null, CustomResourceOptions? options = null) + { + return new WorkstationCluster(name, id, state, options); + } + } + + public sealed class WorkstationClusterArgs : global::Pulumi.ResourceArgs + { + [Input("annotations")] + private InputMap? _annotations; + + /// + /// Client-specified annotations. This is distinct from labels. + /// + public InputMap Annotations + { + get => _annotations ?? (_annotations = new InputMap()); + set => _annotations = value; + } + + /// + /// Human-readable name for this resource. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + [Input("labels")] + private InputMap? _labels; + + /// + /// Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// The location where the workstation cluster should reside. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// The relative resource name of the VPC network on which the instance can be accessed. + /// It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + /// + [Input("network", required: true)] + public Input Network { get; set; } = null!; + + /// + /// Configuration for private cluster. + /// Structure is documented below. + /// + [Input("privateClusterConfig")] + public Input? PrivateClusterConfig { 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; } + + /// + /// Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + /// Must be part of the subnetwork specified for this cluster. + /// + [Input("subnetwork", required: true)] + public Input Subnetwork { get; set; } = null!; + + /// + /// The ID of the workstation cluster. + /// + [Input("workstationClusterId", required: true)] + public Input WorkstationClusterId { get; set; } = null!; + + public WorkstationClusterArgs() + { + } + public static new WorkstationClusterArgs Empty => new WorkstationClusterArgs(); + } + + public sealed class WorkstationClusterState : global::Pulumi.ResourceArgs + { + [Input("annotations")] + private InputMap? _annotations; + + /// + /// Client-specified annotations. This is distinct from labels. + /// + public InputMap Annotations + { + get => _annotations ?? (_annotations = new InputMap()); + set => _annotations = value; + } + + [Input("conditions")] + private InputList? _conditions; + + /// + /// Status conditions describing the current resource state. + /// Structure is documented below. + /// + public InputList Conditions + { + get => _conditions ?? (_conditions = new InputList()); + set => _conditions = value; + } + + /// + /// Time the Instance was created in UTC. + /// + [Input("createTime")] + public Input? CreateTime { get; set; } + + /// + /// Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + /// Details can be found in the conditions field. + /// + [Input("degraded")] + public Input? Degraded { get; set; } + + /// + /// Human-readable name for this resource. + /// + [Input("displayName")] + public Input? DisplayName { get; set; } + + /// + /// Checksum computed by the server. + /// May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + /// + [Input("etag")] + public Input? Etag { get; set; } + + [Input("labels")] + private InputMap? _labels; + + /// + /// Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + /// + public InputMap Labels + { + get => _labels ?? (_labels = new InputMap()); + set => _labels = value; + } + + /// + /// The location where the workstation cluster should reside. + /// + [Input("location")] + public Input? Location { get; set; } + + /// + /// The name of the cluster resource. + /// + [Input("name")] + public Input? Name { get; set; } + + /// + /// The relative resource name of the VPC network on which the instance can be accessed. + /// It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + /// + [Input("network")] + public Input? Network { get; set; } + + /// + /// Configuration for private cluster. + /// Structure is documented below. + /// + [Input("privateClusterConfig")] + public Input? PrivateClusterConfig { 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; } + + /// + /// Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + /// Must be part of the subnetwork specified for this cluster. + /// + [Input("subnetwork")] + public Input? Subnetwork { get; set; } + + /// + /// The system-generated UID of the resource. + /// + [Input("uid")] + public Input? Uid { get; set; } + + /// + /// The ID of the workstation cluster. + /// + [Input("workstationClusterId")] + public Input? WorkstationClusterId { get; set; } + + public WorkstationClusterState() + { + } + public static new WorkstationClusterState Empty => new WorkstationClusterState(); + } +} diff --git a/sdk/go/gcp/accesscontextmanager/accessLevelCondition.go b/sdk/go/gcp/accesscontextmanager/accessLevelCondition.go index 994347e4a9..a8cd6d7ad3 100644 --- a/sdk/go/gcp/accesscontextmanager/accessLevelCondition.go +++ b/sdk/go/gcp/accesscontextmanager/accessLevelCondition.go @@ -33,100 +33,6 @@ import ( // `billingProject` you defined. // // ## Example Usage -// ### Access Context Manager Access Level Condition Basic -// -// ```go -// package main -// -// import ( -// -// "fmt" -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/accesscontextmanager" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := accesscontextmanager.NewAccessPolicy(ctx, "access-policy", &accesscontextmanager.AccessPolicyArgs{ -// Parent: pulumi.String("organizations/123456789"), -// Title: pulumi.String("my policy"), -// }) -// if err != nil { -// return err -// } -// _, err = accesscontextmanager.NewAccessLevel(ctx, "access-level-service-account", &accesscontextmanager.AccessLevelArgs{ -// Parent: access_policy.Name.ApplyT(func(name string) (string, error) { -// return fmt.Sprintf("accessPolicies/%v", name), nil -// }).(pulumi.StringOutput), -// Title: pulumi.String("tf_test_chromeos_no_lock"), -// Basic: &accesscontextmanager.AccessLevelBasicArgs{ -// Conditions: accesscontextmanager.AccessLevelBasicConditionArray{ -// &accesscontextmanager.AccessLevelBasicConditionArgs{ -// DevicePolicy: &accesscontextmanager.AccessLevelBasicConditionDevicePolicyArgs{ -// RequireScreenLock: pulumi.Bool(true), -// OsConstraints: accesscontextmanager.AccessLevelBasicConditionDevicePolicyOsConstraintArray{ -// &accesscontextmanager.AccessLevelBasicConditionDevicePolicyOsConstraintArgs{ -// OsType: pulumi.String("DESKTOP_CHROME_OS"), -// }, -// }, -// }, -// Regions: pulumi.StringArray{ -// pulumi.String("CH"), -// pulumi.String("IT"), -// pulumi.String("US"), -// }, -// }, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// _, err = serviceAccount.NewAccount(ctx, "created-later", &serviceAccount.AccountArgs{ -// AccountId: pulumi.String("tf-test"), -// }) -// if err != nil { -// return err -// } -// _, err = accesscontextmanager.NewAccessLevelCondition(ctx, "access-level-conditions", &accesscontextmanager.AccessLevelConditionArgs{ -// AccessLevel: access_level_service_account.Name, -// IpSubnetworks: pulumi.StringArray{ -// pulumi.String("192.0.4.0/24"), -// }, -// Members: pulumi.StringArray{ -// pulumi.String("user:test@google.com"), -// pulumi.String("user:test2@google.com"), -// created_later.Email.ApplyT(func(email string) (string, error) { -// return fmt.Sprintf("serviceAccount:%v", email), nil -// }).(pulumi.StringOutput), -// }, -// Negate: pulumi.Bool(false), -// DevicePolicy: &accesscontextmanager.AccessLevelConditionDevicePolicyArgs{ -// RequireScreenLock: pulumi.Bool(false), -// RequireAdminApproval: pulumi.Bool(false), -// RequireCorpOwned: pulumi.Bool(true), -// OsConstraints: accesscontextmanager.AccessLevelConditionDevicePolicyOsConstraintArray{ -// &accesscontextmanager.AccessLevelConditionDevicePolicyOsConstraintArgs{ -// OsType: pulumi.String("DESKTOP_CHROME_OS"), -// }, -// }, -// }, -// Regions: pulumi.StringArray{ -// pulumi.String("IT"), -// pulumi.String("US"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/apigateway/api.go b/sdk/go/gcp/apigateway/api.go index 7b2ad9dc74..413552a4c1 100644 --- a/sdk/go/gcp/apigateway/api.go +++ b/sdk/go/gcp/apigateway/api.go @@ -11,14 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A consumable API that can be used by multiple Gateways. -// -// To get more information about Api, see: -// -// * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart) -// // ## Example Usage // ### Apigateway Api Basic // diff --git a/sdk/go/gcp/apigateway/apiConfig.go b/sdk/go/gcp/apigateway/apiConfig.go index 250b5267e2..a2a61af045 100644 --- a/sdk/go/gcp/apigateway/apiConfig.go +++ b/sdk/go/gcp/apigateway/apiConfig.go @@ -11,14 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// An API Configuration is an association of an API Controller Config and a Gateway Config -// -// To get more information about ApiConfig, see: -// -// * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis.configs) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/api-gateway/docs/creating-api-config) -// // ## Example Usage // ### Apigateway Api Config Basic // diff --git a/sdk/go/gcp/apigateway/apiConfigIamBinding.go b/sdk/go/gcp/apigateway/apiConfigIamBinding.go index bd888492b1..3d90daff74 100644 --- a/sdk/go/gcp/apigateway/apiConfigIamBinding.go +++ b/sdk/go/gcp/apigateway/apiConfigIamBinding.go @@ -11,118 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: -// -// * `apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. -// * `apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. -// * `apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. -// -// > **Note:** `apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `apigateway.ApiConfigIamBinding` and `apigateway.ApiConfigIamMember` or they will fight over what your policy should be. -// -// > **Note:** `apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_api\_gateway\_api\_config\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/apigateway.viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = apigateway.NewApiConfigIamPolicy(ctx, "policy", &apigateway.ApiConfigIamPolicyArgs{ -// Api: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api), -// ApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_api\_config\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewApiConfigIamBinding(ctx, "binding", &apigateway.ApiConfigIamBindingArgs{ -// Api: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api), -// ApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_api\_config\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewApiConfigIamMember(ctx, "member", &apigateway.ApiConfigIamMemberArgs{ -// Api: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api), -// ApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/apigateway/apiConfigIamMember.go b/sdk/go/gcp/apigateway/apiConfigIamMember.go index d871283894..4fa4c66fc8 100644 --- a/sdk/go/gcp/apigateway/apiConfigIamMember.go +++ b/sdk/go/gcp/apigateway/apiConfigIamMember.go @@ -11,118 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: -// -// * `apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. -// * `apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. -// * `apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. -// -// > **Note:** `apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `apigateway.ApiConfigIamBinding` and `apigateway.ApiConfigIamMember` or they will fight over what your policy should be. -// -// > **Note:** `apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_api\_gateway\_api\_config\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/apigateway.viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = apigateway.NewApiConfigIamPolicy(ctx, "policy", &apigateway.ApiConfigIamPolicyArgs{ -// Api: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api), -// ApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_api\_config\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewApiConfigIamBinding(ctx, "binding", &apigateway.ApiConfigIamBindingArgs{ -// Api: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api), -// ApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_api\_config\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewApiConfigIamMember(ctx, "member", &apigateway.ApiConfigIamMemberArgs{ -// Api: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api), -// ApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/apigateway/apiConfigIamPolicy.go b/sdk/go/gcp/apigateway/apiConfigIamPolicy.go index 199fc5f511..bb65c4abb4 100644 --- a/sdk/go/gcp/apigateway/apiConfigIamPolicy.go +++ b/sdk/go/gcp/apigateway/apiConfigIamPolicy.go @@ -11,118 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: -// -// * `apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. -// * `apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. -// * `apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. -// -// > **Note:** `apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `apigateway.ApiConfigIamBinding` and `apigateway.ApiConfigIamMember` or they will fight over what your policy should be. -// -// > **Note:** `apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_api\_gateway\_api\_config\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/apigateway.viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = apigateway.NewApiConfigIamPolicy(ctx, "policy", &apigateway.ApiConfigIamPolicyArgs{ -// Api: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api), -// ApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_api\_config\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewApiConfigIamBinding(ctx, "binding", &apigateway.ApiConfigIamBindingArgs{ -// Api: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api), -// ApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_api\_config\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewApiConfigIamMember(ctx, "member", &apigateway.ApiConfigIamMemberArgs{ -// Api: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api), -// ApiConfig: pulumi.Any(google_api_gateway_api_config.Api_cfg.Api_config_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/apigateway/apiIamBinding.go b/sdk/go/gcp/apigateway/apiIamBinding.go index 6e46a0cab1..318902421b 100644 --- a/sdk/go/gcp/apigateway/apiIamBinding.go +++ b/sdk/go/gcp/apigateway/apiIamBinding.go @@ -11,118 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: -// -// * `apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. -// * `apigateway.ApiIamBinding`: 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 api are preserved. -// * `apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. -// -// > **Note:** `apigateway.ApiIamPolicy` **cannot** be used in conjunction with `apigateway.ApiIamBinding` and `apigateway.ApiIamMember` or they will fight over what your policy should be. -// -// > **Note:** `apigateway.ApiIamBinding` resources **can be** used in conjunction with `apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_api\_gateway\_api\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/apigateway.viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = apigateway.NewApiIamPolicy(ctx, "policy", &apigateway.ApiIamPolicyArgs{ -// Project: pulumi.Any(google_api_gateway_api.Api.Project), -// Api: pulumi.Any(google_api_gateway_api.Api.Api_id), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_api\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewApiIamBinding(ctx, "binding", &apigateway.ApiIamBindingArgs{ -// Project: pulumi.Any(google_api_gateway_api.Api.Project), -// Api: pulumi.Any(google_api_gateway_api.Api.Api_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_api\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewApiIamMember(ctx, "member", &apigateway.ApiIamMemberArgs{ -// Project: pulumi.Any(google_api_gateway_api.Api.Project), -// Api: pulumi.Any(google_api_gateway_api.Api.Api_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/apigateway/apiIamMember.go b/sdk/go/gcp/apigateway/apiIamMember.go index 3bfd15ed35..8f076d775b 100644 --- a/sdk/go/gcp/apigateway/apiIamMember.go +++ b/sdk/go/gcp/apigateway/apiIamMember.go @@ -11,118 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: -// -// * `apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. -// * `apigateway.ApiIamBinding`: 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 api are preserved. -// * `apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. -// -// > **Note:** `apigateway.ApiIamPolicy` **cannot** be used in conjunction with `apigateway.ApiIamBinding` and `apigateway.ApiIamMember` or they will fight over what your policy should be. -// -// > **Note:** `apigateway.ApiIamBinding` resources **can be** used in conjunction with `apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_api\_gateway\_api\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/apigateway.viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = apigateway.NewApiIamPolicy(ctx, "policy", &apigateway.ApiIamPolicyArgs{ -// Project: pulumi.Any(google_api_gateway_api.Api.Project), -// Api: pulumi.Any(google_api_gateway_api.Api.Api_id), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_api\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewApiIamBinding(ctx, "binding", &apigateway.ApiIamBindingArgs{ -// Project: pulumi.Any(google_api_gateway_api.Api.Project), -// Api: pulumi.Any(google_api_gateway_api.Api.Api_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_api\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewApiIamMember(ctx, "member", &apigateway.ApiIamMemberArgs{ -// Project: pulumi.Any(google_api_gateway_api.Api.Project), -// Api: pulumi.Any(google_api_gateway_api.Api.Api_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/apigateway/apiIamPolicy.go b/sdk/go/gcp/apigateway/apiIamPolicy.go index 73b5084056..ebf67b0917 100644 --- a/sdk/go/gcp/apigateway/apiIamPolicy.go +++ b/sdk/go/gcp/apigateway/apiIamPolicy.go @@ -11,118 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: -// -// * `apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. -// * `apigateway.ApiIamBinding`: 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 api are preserved. -// * `apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. -// -// > **Note:** `apigateway.ApiIamPolicy` **cannot** be used in conjunction with `apigateway.ApiIamBinding` and `apigateway.ApiIamMember` or they will fight over what your policy should be. -// -// > **Note:** `apigateway.ApiIamBinding` resources **can be** used in conjunction with `apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_api\_gateway\_api\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/apigateway.viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = apigateway.NewApiIamPolicy(ctx, "policy", &apigateway.ApiIamPolicyArgs{ -// Project: pulumi.Any(google_api_gateway_api.Api.Project), -// Api: pulumi.Any(google_api_gateway_api.Api.Api_id), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_api\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewApiIamBinding(ctx, "binding", &apigateway.ApiIamBindingArgs{ -// Project: pulumi.Any(google_api_gateway_api.Api.Project), -// Api: pulumi.Any(google_api_gateway_api.Api.Api_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_api\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewApiIamMember(ctx, "member", &apigateway.ApiIamMemberArgs{ -// Project: pulumi.Any(google_api_gateway_api.Api.Project), -// Api: pulumi.Any(google_api_gateway_api.Api.Api_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/apigateway/gateway.go b/sdk/go/gcp/apigateway/gateway.go index 4101ee573b..ee17e22b12 100644 --- a/sdk/go/gcp/apigateway/gateway.go +++ b/sdk/go/gcp/apigateway/gateway.go @@ -11,14 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A consumable API that can be used by multiple Gateways. -// -// To get more information about Gateway, see: -// -// * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart) -// // ## Example Usage // ### Apigateway Gateway Basic // diff --git a/sdk/go/gcp/apigateway/gatewayIamBinding.go b/sdk/go/gcp/apigateway/gatewayIamBinding.go index 96c21ab2b5..1f3d895f7f 100644 --- a/sdk/go/gcp/apigateway/gatewayIamBinding.go +++ b/sdk/go/gcp/apigateway/gatewayIamBinding.go @@ -11,121 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: -// -// * `apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. -// * `apigateway.GatewayIamBinding`: 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 gateway are preserved. -// * `apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. -// -// > **Note:** `apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `apigateway.GatewayIamBinding` and `apigateway.GatewayIamMember` or they will fight over what your policy should be. -// -// > **Note:** `apigateway.GatewayIamBinding` resources **can be** used in conjunction with `apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_api\_gateway\_gateway\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/apigateway.viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = apigateway.NewGatewayIamPolicy(ctx, "policy", &apigateway.GatewayIamPolicyArgs{ -// Project: pulumi.Any(google_api_gateway_gateway.Api_gw.Project), -// Region: pulumi.Any(google_api_gateway_gateway.Api_gw.Region), -// Gateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_gateway\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewGatewayIamBinding(ctx, "binding", &apigateway.GatewayIamBindingArgs{ -// Project: pulumi.Any(google_api_gateway_gateway.Api_gw.Project), -// Region: pulumi.Any(google_api_gateway_gateway.Api_gw.Region), -// Gateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_gateway\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewGatewayIamMember(ctx, "member", &apigateway.GatewayIamMemberArgs{ -// Project: pulumi.Any(google_api_gateway_gateway.Api_gw.Project), -// Region: pulumi.Any(google_api_gateway_gateway.Api_gw.Region), -// Gateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/apigateway/gatewayIamMember.go b/sdk/go/gcp/apigateway/gatewayIamMember.go index b8c6cd3835..4b7b6a2013 100644 --- a/sdk/go/gcp/apigateway/gatewayIamMember.go +++ b/sdk/go/gcp/apigateway/gatewayIamMember.go @@ -11,121 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: -// -// * `apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. -// * `apigateway.GatewayIamBinding`: 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 gateway are preserved. -// * `apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. -// -// > **Note:** `apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `apigateway.GatewayIamBinding` and `apigateway.GatewayIamMember` or they will fight over what your policy should be. -// -// > **Note:** `apigateway.GatewayIamBinding` resources **can be** used in conjunction with `apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_api\_gateway\_gateway\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/apigateway.viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = apigateway.NewGatewayIamPolicy(ctx, "policy", &apigateway.GatewayIamPolicyArgs{ -// Project: pulumi.Any(google_api_gateway_gateway.Api_gw.Project), -// Region: pulumi.Any(google_api_gateway_gateway.Api_gw.Region), -// Gateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_gateway\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewGatewayIamBinding(ctx, "binding", &apigateway.GatewayIamBindingArgs{ -// Project: pulumi.Any(google_api_gateway_gateway.Api_gw.Project), -// Region: pulumi.Any(google_api_gateway_gateway.Api_gw.Region), -// Gateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_gateway\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewGatewayIamMember(ctx, "member", &apigateway.GatewayIamMemberArgs{ -// Project: pulumi.Any(google_api_gateway_gateway.Api_gw.Project), -// Region: pulumi.Any(google_api_gateway_gateway.Api_gw.Region), -// Gateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/apigateway/gatewayIamPolicy.go b/sdk/go/gcp/apigateway/gatewayIamPolicy.go index 8ddf0760f8..2c6fd78406 100644 --- a/sdk/go/gcp/apigateway/gatewayIamPolicy.go +++ b/sdk/go/gcp/apigateway/gatewayIamPolicy.go @@ -11,121 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: -// -// * `apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. -// * `apigateway.GatewayIamBinding`: 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 gateway are preserved. -// * `apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. -// -// > **Note:** `apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `apigateway.GatewayIamBinding` and `apigateway.GatewayIamMember` or they will fight over what your policy should be. -// -// > **Note:** `apigateway.GatewayIamBinding` resources **can be** used in conjunction with `apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_api\_gateway\_gateway\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/apigateway.viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = apigateway.NewGatewayIamPolicy(ctx, "policy", &apigateway.GatewayIamPolicyArgs{ -// Project: pulumi.Any(google_api_gateway_gateway.Api_gw.Project), -// Region: pulumi.Any(google_api_gateway_gateway.Api_gw.Region), -// Gateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_gateway\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewGatewayIamBinding(ctx, "binding", &apigateway.GatewayIamBindingArgs{ -// Project: pulumi.Any(google_api_gateway_gateway.Api_gw.Project), -// Region: pulumi.Any(google_api_gateway_gateway.Api_gw.Region), -// Gateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_api\_gateway\_gateway\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigateway" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := apigateway.NewGatewayIamMember(ctx, "member", &apigateway.GatewayIamMemberArgs{ -// Project: pulumi.Any(google_api_gateway_gateway.Api_gw.Project), -// Region: pulumi.Any(google_api_gateway_gateway.Api_gw.Region), -// Gateway: pulumi.Any(google_api_gateway_gateway.Api_gw.Gateway_id), -// Role: pulumi.String("roles/apigateway.viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/apigee/envGroup.go b/sdk/go/gcp/apigee/envGroup.go index fe285a906b..c85284d286 100644 --- a/sdk/go/gcp/apigee/envGroup.go +++ b/sdk/go/gcp/apigee/envGroup.go @@ -20,74 +20,6 @@ import ( // - [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) // // ## Example Usage -// ### Apigee Environment Group Basic -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicenetworking" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// current, err := organizations.GetClientConfig(ctx, nil, nil) -// if err != nil { -// return err -// } -// apigeeNetwork, err := compute.NewNetwork(ctx, "apigeeNetwork", nil) -// if err != nil { -// return err -// } -// apigeeRange, err := compute.NewGlobalAddress(ctx, "apigeeRange", &compute.GlobalAddressArgs{ -// Purpose: pulumi.String("VPC_PEERING"), -// AddressType: pulumi.String("INTERNAL"), -// PrefixLength: pulumi.Int(16), -// Network: apigeeNetwork.ID(), -// }) -// if err != nil { -// return err -// } -// apigeeVpcConnection, err := servicenetworking.NewConnection(ctx, "apigeeVpcConnection", &servicenetworking.ConnectionArgs{ -// Network: apigeeNetwork.ID(), -// Service: pulumi.String("servicenetworking.googleapis.com"), -// ReservedPeeringRanges: pulumi.StringArray{ -// apigeeRange.Name, -// }, -// }) -// if err != nil { -// return err -// } -// apigeeOrg, err := apigee.NewOrganization(ctx, "apigeeOrg", &apigee.OrganizationArgs{ -// AnalyticsRegion: pulumi.String("us-central1"), -// ProjectId: *pulumi.String(current.Project), -// AuthorizedNetwork: apigeeNetwork.ID(), -// }, pulumi.DependsOn([]pulumi.Resource{ -// apigeeVpcConnection, -// })) -// if err != nil { -// return err -// } -// _, err = apigee.NewEnvGroup(ctx, "envGrp", &apigee.EnvGroupArgs{ -// Hostnames: pulumi.StringArray{ -// pulumi.String("abc.foo.com"), -// }, -// OrgId: apigeeOrg.ID(), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/apigee/envGroupAttachment.go b/sdk/go/gcp/apigee/envGroupAttachment.go index 2eeb797240..d66dc007ce 100644 --- a/sdk/go/gcp/apigee/envGroupAttachment.go +++ b/sdk/go/gcp/apigee/envGroupAttachment.go @@ -20,123 +20,6 @@ import ( // - [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) // // ## Example Usage -// ### Apigee Environment Group Attachment Basic -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicenetworking" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// project, err := organizations.NewProject(ctx, "project", &organizations.ProjectArgs{ -// ProjectId: pulumi.String("tf-test"), -// OrgId: pulumi.String(""), -// BillingAccount: pulumi.String(""), -// }) -// if err != nil { -// return err -// } -// apigee, err := projects.NewService(ctx, "apigee", &projects.ServiceArgs{ -// Project: project.ProjectId, -// Service: pulumi.String("apigee.googleapis.com"), -// }) -// if err != nil { -// return err -// } -// compute, err := projects.NewService(ctx, "compute", &projects.ServiceArgs{ -// Project: project.ProjectId, -// Service: pulumi.String("compute.googleapis.com"), -// }) -// if err != nil { -// return err -// } -// servicenetworking, err := projects.NewService(ctx, "servicenetworking", &projects.ServiceArgs{ -// Project: project.ProjectId, -// Service: pulumi.String("servicenetworking.googleapis.com"), -// }) -// if err != nil { -// return err -// } -// apigeeNetwork, err := compute.NewNetwork(ctx, "apigeeNetwork", &compute.NetworkArgs{ -// Project: project.ProjectId, -// }, pulumi.DependsOn([]pulumi.Resource{ -// compute, -// })) -// if err != nil { -// return err -// } -// apigeeRange, err := compute.NewGlobalAddress(ctx, "apigeeRange", &compute.GlobalAddressArgs{ -// Purpose: pulumi.String("VPC_PEERING"), -// AddressType: pulumi.String("INTERNAL"), -// PrefixLength: pulumi.Int(16), -// Network: apigeeNetwork.ID(), -// Project: project.ProjectId, -// }) -// if err != nil { -// return err -// } -// apigeeVpcConnection, err := servicenetworking.NewConnection(ctx, "apigeeVpcConnection", &servicenetworking.ConnectionArgs{ -// Network: apigeeNetwork.ID(), -// Service: pulumi.String("servicenetworking.googleapis.com"), -// ReservedPeeringRanges: pulumi.StringArray{ -// apigeeRange.Name, -// }, -// }, pulumi.DependsOn([]pulumi.Resource{ -// servicenetworking, -// })) -// if err != nil { -// return err -// } -// apigeeOrg, err := apigee.NewOrganization(ctx, "apigeeOrg", &apigee.OrganizationArgs{ -// AnalyticsRegion: pulumi.String("us-central1"), -// ProjectId: project.ProjectId, -// AuthorizedNetwork: apigeeNetwork.ID(), -// }, pulumi.DependsOn([]pulumi.Resource{ -// apigeeVpcConnection, -// apigee, -// })) -// if err != nil { -// return err -// } -// apigeeEnvgroup, err := apigee.NewEnvGroup(ctx, "apigeeEnvgroup", &apigee.EnvGroupArgs{ -// OrgId: apigeeOrg.ID(), -// Hostnames: pulumi.StringArray{ -// pulumi.String("abc.foo.com"), -// }, -// }) -// if err != nil { -// return err -// } -// apigeeEnv, err := apigee.NewEnvironment(ctx, "apigeeEnv", &apigee.EnvironmentArgs{ -// OrgId: apigeeOrg.ID(), -// Description: pulumi.String("Apigee Environment"), -// DisplayName: pulumi.String("tf-test"), -// }) -// if err != nil { -// return err -// } -// _, err = apigee.NewEnvGroupAttachment(ctx, "envGroupAttachment", &apigee.EnvGroupAttachmentArgs{ -// EnvgroupId: apigeeEnvgroup.ID(), -// Environment: apigeeEnv.Name, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/apigee/environment.go b/sdk/go/gcp/apigee/environment.go index cfdf83b009..ba7b8d663e 100644 --- a/sdk/go/gcp/apigee/environment.go +++ b/sdk/go/gcp/apigee/environment.go @@ -20,73 +20,6 @@ import ( // - [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) // // ## Example Usage -// ### Apigee Environment Basic -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicenetworking" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// current, err := organizations.GetClientConfig(ctx, nil, nil) -// if err != nil { -// return err -// } -// apigeeNetwork, err := compute.NewNetwork(ctx, "apigeeNetwork", nil) -// if err != nil { -// return err -// } -// apigeeRange, err := compute.NewGlobalAddress(ctx, "apigeeRange", &compute.GlobalAddressArgs{ -// Purpose: pulumi.String("VPC_PEERING"), -// AddressType: pulumi.String("INTERNAL"), -// PrefixLength: pulumi.Int(16), -// Network: apigeeNetwork.ID(), -// }) -// if err != nil { -// return err -// } -// apigeeVpcConnection, err := servicenetworking.NewConnection(ctx, "apigeeVpcConnection", &servicenetworking.ConnectionArgs{ -// Network: apigeeNetwork.ID(), -// Service: pulumi.String("servicenetworking.googleapis.com"), -// ReservedPeeringRanges: pulumi.StringArray{ -// apigeeRange.Name, -// }, -// }) -// if err != nil { -// return err -// } -// apigeeOrg, err := apigee.NewOrganization(ctx, "apigeeOrg", &apigee.OrganizationArgs{ -// AnalyticsRegion: pulumi.String("us-central1"), -// ProjectId: *pulumi.String(current.Project), -// AuthorizedNetwork: apigeeNetwork.ID(), -// }, pulumi.DependsOn([]pulumi.Resource{ -// apigeeVpcConnection, -// })) -// if err != nil { -// return err -// } -// _, err = apigee.NewEnvironment(ctx, "env", &apigee.EnvironmentArgs{ -// Description: pulumi.String("Apigee Environment"), -// DisplayName: pulumi.String("environment-1"), -// OrgId: apigeeOrg.ID(), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/apigee/instance.go b/sdk/go/gcp/apigee/instance.go index 4c8f3931a6..47222de79d 100644 --- a/sdk/go/gcp/apigee/instance.go +++ b/sdk/go/gcp/apigee/instance.go @@ -20,314 +20,6 @@ import ( // - [Creating a runtime instance](https://cloud.google.com/apigee/docs/api-platform/get-started/create-instance) // // ## Example Usage -// ### Apigee Instance Basic -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicenetworking" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// current, err := organizations.GetClientConfig(ctx, nil, nil) -// if err != nil { -// return err -// } -// apigeeNetwork, err := compute.NewNetwork(ctx, "apigeeNetwork", nil) -// if err != nil { -// return err -// } -// apigeeRange, err := compute.NewGlobalAddress(ctx, "apigeeRange", &compute.GlobalAddressArgs{ -// Purpose: pulumi.String("VPC_PEERING"), -// AddressType: pulumi.String("INTERNAL"), -// PrefixLength: pulumi.Int(16), -// Network: apigeeNetwork.ID(), -// }) -// if err != nil { -// return err -// } -// apigeeVpcConnection, err := servicenetworking.NewConnection(ctx, "apigeeVpcConnection", &servicenetworking.ConnectionArgs{ -// Network: apigeeNetwork.ID(), -// Service: pulumi.String("servicenetworking.googleapis.com"), -// ReservedPeeringRanges: pulumi.StringArray{ -// apigeeRange.Name, -// }, -// }) -// if err != nil { -// return err -// } -// apigeeOrg, err := apigee.NewOrganization(ctx, "apigeeOrg", &apigee.OrganizationArgs{ -// AnalyticsRegion: pulumi.String("us-central1"), -// ProjectId: *pulumi.String(current.Project), -// AuthorizedNetwork: apigeeNetwork.ID(), -// }, pulumi.DependsOn([]pulumi.Resource{ -// apigeeVpcConnection, -// })) -// if err != nil { -// return err -// } -// _, err = apigee.NewInstance(ctx, "apigeeInstance", &apigee.InstanceArgs{ -// Location: pulumi.String("us-central1"), -// OrgId: apigeeOrg.ID(), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ### Apigee Instance Cidr Range -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicenetworking" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// current, err := organizations.GetClientConfig(ctx, nil, nil) -// if err != nil { -// return err -// } -// apigeeNetwork, err := compute.NewNetwork(ctx, "apigeeNetwork", nil) -// if err != nil { -// return err -// } -// apigeeRange, err := compute.NewGlobalAddress(ctx, "apigeeRange", &compute.GlobalAddressArgs{ -// Purpose: pulumi.String("VPC_PEERING"), -// AddressType: pulumi.String("INTERNAL"), -// PrefixLength: pulumi.Int(22), -// Network: apigeeNetwork.ID(), -// }) -// if err != nil { -// return err -// } -// apigeeVpcConnection, err := servicenetworking.NewConnection(ctx, "apigeeVpcConnection", &servicenetworking.ConnectionArgs{ -// Network: apigeeNetwork.ID(), -// Service: pulumi.String("servicenetworking.googleapis.com"), -// ReservedPeeringRanges: pulumi.StringArray{ -// apigeeRange.Name, -// }, -// }) -// if err != nil { -// return err -// } -// apigeeOrg, err := apigee.NewOrganization(ctx, "apigeeOrg", &apigee.OrganizationArgs{ -// AnalyticsRegion: pulumi.String("us-central1"), -// ProjectId: *pulumi.String(current.Project), -// AuthorizedNetwork: apigeeNetwork.ID(), -// }, pulumi.DependsOn([]pulumi.Resource{ -// apigeeVpcConnection, -// })) -// if err != nil { -// return err -// } -// _, err = apigee.NewInstance(ctx, "apigeeInstance", &apigee.InstanceArgs{ -// Location: pulumi.String("us-central1"), -// OrgId: apigeeOrg.ID(), -// PeeringCidrRange: pulumi.String("SLASH_22"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ### Apigee Instance Ip Range -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicenetworking" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// current, err := organizations.GetClientConfig(ctx, nil, nil) -// if err != nil { -// return err -// } -// apigeeNetwork, err := compute.NewNetwork(ctx, "apigeeNetwork", nil) -// if err != nil { -// return err -// } -// apigeeRange, err := compute.NewGlobalAddress(ctx, "apigeeRange", &compute.GlobalAddressArgs{ -// Purpose: pulumi.String("VPC_PEERING"), -// AddressType: pulumi.String("INTERNAL"), -// PrefixLength: pulumi.Int(22), -// Network: apigeeNetwork.ID(), -// }) -// if err != nil { -// return err -// } -// apigeeVpcConnection, err := servicenetworking.NewConnection(ctx, "apigeeVpcConnection", &servicenetworking.ConnectionArgs{ -// Network: apigeeNetwork.ID(), -// Service: pulumi.String("servicenetworking.googleapis.com"), -// ReservedPeeringRanges: pulumi.StringArray{ -// apigeeRange.Name, -// }, -// }) -// if err != nil { -// return err -// } -// apigeeOrg, err := apigee.NewOrganization(ctx, "apigeeOrg", &apigee.OrganizationArgs{ -// AnalyticsRegion: pulumi.String("us-central1"), -// ProjectId: *pulumi.String(current.Project), -// AuthorizedNetwork: apigeeNetwork.ID(), -// }, pulumi.DependsOn([]pulumi.Resource{ -// apigeeVpcConnection, -// })) -// if err != nil { -// return err -// } -// _, err = apigee.NewInstance(ctx, "apigeeInstance", &apigee.InstanceArgs{ -// Location: pulumi.String("us-central1"), -// OrgId: apigeeOrg.ID(), -// IpRange: pulumi.String("10.87.8.0/22"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ### Apigee Instance Full -// -// ```go -// package main -// -// import ( -// -// "fmt" -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicenetworking" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// current, err := organizations.GetClientConfig(ctx, nil, nil) -// if err != nil { -// return err -// } -// apigeeNetwork, err := compute.NewNetwork(ctx, "apigeeNetwork", nil) -// if err != nil { -// return err -// } -// apigeeRange, err := compute.NewGlobalAddress(ctx, "apigeeRange", &compute.GlobalAddressArgs{ -// Purpose: pulumi.String("VPC_PEERING"), -// AddressType: pulumi.String("INTERNAL"), -// PrefixLength: pulumi.Int(16), -// Network: apigeeNetwork.ID(), -// }) -// if err != nil { -// return err -// } -// apigeeVpcConnection, err := servicenetworking.NewConnection(ctx, "apigeeVpcConnection", &servicenetworking.ConnectionArgs{ -// Network: apigeeNetwork.ID(), -// Service: pulumi.String("servicenetworking.googleapis.com"), -// ReservedPeeringRanges: pulumi.StringArray{ -// apigeeRange.Name, -// }, -// }) -// if err != nil { -// return err -// } -// apigeeKeyring, err := kms.NewKeyRing(ctx, "apigeeKeyring", &kms.KeyRingArgs{ -// Location: pulumi.String("us-central1"), -// }) -// if err != nil { -// return err -// } -// apigeeKey, err := kms.NewCryptoKey(ctx, "apigeeKey", &kms.CryptoKeyArgs{ -// KeyRing: apigeeKeyring.ID(), -// }) -// if err != nil { -// return err -// } -// apigeeSa, err := projects.NewServiceIdentity(ctx, "apigeeSa", &projects.ServiceIdentityArgs{ -// Project: pulumi.Any(google_project.Project.Project_id), -// Service: pulumi.Any(google_project_service.Apigee.Service), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// apigeeSaKeyuser, err := kms.NewCryptoKeyIAMBinding(ctx, "apigeeSaKeyuser", &kms.CryptoKeyIAMBindingArgs{ -// CryptoKeyId: apigeeKey.ID(), -// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypterDecrypter"), -// Members: pulumi.StringArray{ -// apigeeSa.Email.ApplyT(func(email string) (string, error) { -// return fmt.Sprintf("serviceAccount:%v", email), nil -// }).(pulumi.StringOutput), -// }, -// }) -// if err != nil { -// return err -// } -// apigeeOrg, err := apigee.NewOrganization(ctx, "apigeeOrg", &apigee.OrganizationArgs{ -// AnalyticsRegion: pulumi.String("us-central1"), -// DisplayName: pulumi.String("apigee-org"), -// Description: pulumi.String("Auto-provisioned Apigee Org."), -// ProjectId: *pulumi.String(current.Project), -// AuthorizedNetwork: apigeeNetwork.ID(), -// RuntimeDatabaseEncryptionKeyName: apigeeKey.ID(), -// }, pulumi.DependsOn([]pulumi.Resource{ -// apigeeVpcConnection, -// apigeeSaKeyuser, -// })) -// if err != nil { -// return err -// } -// _, err = apigee.NewInstance(ctx, "apigeeInstance", &apigee.InstanceArgs{ -// Location: pulumi.String("us-central1"), -// Description: pulumi.String("Auto-managed Apigee Runtime Instance"), -// DisplayName: pulumi.String("tf-test"), -// OrgId: apigeeOrg.ID(), -// DiskEncryptionKeyName: apigeeKey.ID(), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/apigee/instanceAttachment.go b/sdk/go/gcp/apigee/instanceAttachment.go index 1d84b13b98..8eb4a530cb 100644 --- a/sdk/go/gcp/apigee/instanceAttachment.go +++ b/sdk/go/gcp/apigee/instanceAttachment.go @@ -20,121 +20,6 @@ import ( // - [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) // // ## Example Usage -// ### Apigee Instance Attachment Basic -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/apigee" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicenetworking" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// project, err := organizations.NewProject(ctx, "project", &organizations.ProjectArgs{ -// ProjectId: pulumi.String("tf-test"), -// OrgId: pulumi.String(""), -// BillingAccount: pulumi.String(""), -// }) -// if err != nil { -// return err -// } -// apigee, err := projects.NewService(ctx, "apigee", &projects.ServiceArgs{ -// Project: project.ProjectId, -// Service: pulumi.String("apigee.googleapis.com"), -// }) -// if err != nil { -// return err -// } -// compute, err := projects.NewService(ctx, "compute", &projects.ServiceArgs{ -// Project: project.ProjectId, -// Service: pulumi.String("compute.googleapis.com"), -// }) -// if err != nil { -// return err -// } -// servicenetworking, err := projects.NewService(ctx, "servicenetworking", &projects.ServiceArgs{ -// Project: project.ProjectId, -// Service: pulumi.String("servicenetworking.googleapis.com"), -// }) -// if err != nil { -// return err -// } -// apigeeNetwork, err := compute.NewNetwork(ctx, "apigeeNetwork", &compute.NetworkArgs{ -// Project: project.ProjectId, -// }, pulumi.DependsOn([]pulumi.Resource{ -// compute, -// })) -// if err != nil { -// return err -// } -// apigeeRange, err := compute.NewGlobalAddress(ctx, "apigeeRange", &compute.GlobalAddressArgs{ -// Purpose: pulumi.String("VPC_PEERING"), -// AddressType: pulumi.String("INTERNAL"), -// PrefixLength: pulumi.Int(16), -// Network: apigeeNetwork.ID(), -// Project: project.ProjectId, -// }) -// if err != nil { -// return err -// } -// apigeeVpcConnection, err := servicenetworking.NewConnection(ctx, "apigeeVpcConnection", &servicenetworking.ConnectionArgs{ -// Network: apigeeNetwork.ID(), -// Service: pulumi.String("servicenetworking.googleapis.com"), -// ReservedPeeringRanges: pulumi.StringArray{ -// apigeeRange.Name, -// }, -// }, pulumi.DependsOn([]pulumi.Resource{ -// servicenetworking, -// })) -// if err != nil { -// return err -// } -// apigeeOrg, err := apigee.NewOrganization(ctx, "apigeeOrg", &apigee.OrganizationArgs{ -// AnalyticsRegion: pulumi.String("us-central1"), -// ProjectId: project.ProjectId, -// AuthorizedNetwork: apigeeNetwork.ID(), -// }, pulumi.DependsOn([]pulumi.Resource{ -// apigeeVpcConnection, -// apigee, -// })) -// if err != nil { -// return err -// } -// _, err = apigee.NewInstance(ctx, "apigeeIns", &apigee.InstanceArgs{ -// Location: pulumi.String("us-central1"), -// OrgId: apigeeOrg.ID(), -// }) -// if err != nil { -// return err -// } -// apigeeEnv, err := apigee.NewEnvironment(ctx, "apigeeEnv", &apigee.EnvironmentArgs{ -// OrgId: apigeeOrg.ID(), -// Description: pulumi.String("Apigee Environment"), -// DisplayName: pulumi.String("environment-1"), -// }) -// if err != nil { -// return err -// } -// _, err = apigee.NewInstanceAttachment(ctx, "instanceAttachment", &apigee.InstanceAttachmentArgs{ -// InstanceId: pulumi.Any(google_apigee_instance.Apigee_instance.Id), -// Environment: apigeeEnv.Name, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/apigee/organization.go b/sdk/go/gcp/apigee/organization.go index 994a5ede36..de98e8fc15 100644 --- a/sdk/go/gcp/apigee/organization.go +++ b/sdk/go/gcp/apigee/organization.go @@ -161,7 +161,7 @@ import ( // _, err = apigee.NewOrganization(ctx, "org", &apigee.OrganizationArgs{ // AnalyticsRegion: pulumi.String("us-central1"), // DisplayName: pulumi.String("apigee-org"), -// Description: pulumi.String("Auto-provisioned Apigee Org."), +// Description: pulumi.String("Terraform-provisioned Apigee Org."), // ProjectId: *pulumi.String(current.Project), // AuthorizedNetwork: apigeeNetwork.ID(), // RuntimeDatabaseEncryptionKeyName: apigeeKey.ID(), diff --git a/sdk/go/gcp/appengine/flexibleAppVersion.go b/sdk/go/gcp/appengine/flexibleAppVersion.go index a95f7d7f6f..5abe389c35 100644 --- a/sdk/go/gcp/appengine/flexibleAppVersion.go +++ b/sdk/go/gcp/appengine/flexibleAppVersion.go @@ -223,7 +223,8 @@ type FlexibleAppVersion struct { // The entrypoint for the application. // Structure is documented below. Entrypoint FlexibleAppVersionEntrypointPtrOutput `pulumi:"entrypoint"` - // Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + // Environment variables available to the application. As these are not returned in the API request, Terraform will not + // detect any changes made outside of the Terraform config. EnvVariables pulumi.StringMapOutput `pulumi:"envVariables"` // An ordered list of URL-matching patterns that should be applied to incoming requests. // The first matching URL handles the request and other request handlers are not attempted. @@ -358,7 +359,8 @@ type flexibleAppVersionState struct { // The entrypoint for the application. // Structure is documented below. Entrypoint *FlexibleAppVersionEntrypoint `pulumi:"entrypoint"` - // Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + // Environment variables available to the application. As these are not returned in the API request, Terraform will not + // detect any changes made outside of the Terraform config. EnvVariables map[string]string `pulumi:"envVariables"` // An ordered list of URL-matching patterns that should be applied to incoming requests. // The first matching URL handles the request and other request handlers are not attempted. @@ -453,7 +455,8 @@ type FlexibleAppVersionState struct { // The entrypoint for the application. // Structure is documented below. Entrypoint FlexibleAppVersionEntrypointPtrInput - // Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + // Environment variables available to the application. As these are not returned in the API request, Terraform will not + // detect any changes made outside of the Terraform config. EnvVariables pulumi.StringMapInput // An ordered list of URL-matching patterns that should be applied to incoming requests. // The first matching URL handles the request and other request handlers are not attempted. @@ -552,7 +555,8 @@ type flexibleAppVersionArgs struct { // The entrypoint for the application. // Structure is documented below. Entrypoint *FlexibleAppVersionEntrypoint `pulumi:"entrypoint"` - // Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + // Environment variables available to the application. As these are not returned in the API request, Terraform will not + // detect any changes made outside of the Terraform config. EnvVariables map[string]string `pulumi:"envVariables"` // An ordered list of URL-matching patterns that should be applied to incoming requests. // The first matching URL handles the request and other request handlers are not attempted. @@ -639,7 +643,8 @@ type FlexibleAppVersionArgs struct { // The entrypoint for the application. // Structure is documented below. Entrypoint FlexibleAppVersionEntrypointPtrInput - // Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + // Environment variables available to the application. As these are not returned in the API request, Terraform will not + // detect any changes made outside of the Terraform config. EnvVariables pulumi.StringMapInput // An ordered list of URL-matching patterns that should be applied to incoming requests. // The first matching URL handles the request and other request handlers are not attempted. @@ -837,7 +842,8 @@ func (o FlexibleAppVersionOutput) Entrypoint() FlexibleAppVersionEntrypointPtrOu return o.ApplyT(func(v *FlexibleAppVersion) FlexibleAppVersionEntrypointPtrOutput { return v.Entrypoint }).(FlexibleAppVersionEntrypointPtrOutput) } -// Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. +// Environment variables available to the application. As these are not returned in the API request, Terraform will not +// detect any changes made outside of the Terraform config. func (o FlexibleAppVersionOutput) EnvVariables() pulumi.StringMapOutput { return o.ApplyT(func(v *FlexibleAppVersion) pulumi.StringMapOutput { return v.EnvVariables }).(pulumi.StringMapOutput) } diff --git a/sdk/go/gcp/bigquery/connection.go b/sdk/go/gcp/bigquery/connection.go index dec4d8403e..9e4eca72a4 100644 --- a/sdk/go/gcp/bigquery/connection.go +++ b/sdk/go/gcp/bigquery/connection.go @@ -228,7 +228,8 @@ import ( // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := bigquery.NewConnection(ctx, "connection", &bigquery.ConnectionArgs{ // Azure: &bigquery.ConnectionAzureArgs{ -// CustomerTenantId: pulumi.String("customer-tenant-id"), +// CustomerTenantId: pulumi.String("customer-tenant-id"), +// FederatedApplicationClientId: pulumi.String("b43eeeee-eeee-eeee-eeee-a480155501ce"), // }, // ConnectionId: pulumi.String("my-connection"), // Description: pulumi.String("a riveting description"), @@ -311,7 +312,7 @@ type Connection struct { // Connection properties specific to Cloud Spanner // Structure is documented below. CloudSpanner ConnectionCloudSpannerPtrOutput `pulumi:"cloudSpanner"` - // A nested object resource + // Connection properties specific to the Cloud SQL. // Structure is documented below. CloudSql ConnectionCloudSqlPtrOutput `pulumi:"cloudSql"` // Optional connection id that should be assigned to the created connection. @@ -379,7 +380,7 @@ type connectionState struct { // Connection properties specific to Cloud Spanner // Structure is documented below. CloudSpanner *ConnectionCloudSpanner `pulumi:"cloudSpanner"` - // A nested object resource + // Connection properties specific to the Cloud SQL. // Structure is documented below. CloudSql *ConnectionCloudSql `pulumi:"cloudSql"` // Optional connection id that should be assigned to the created connection. @@ -419,7 +420,7 @@ type ConnectionState struct { // Connection properties specific to Cloud Spanner // Structure is documented below. CloudSpanner ConnectionCloudSpannerPtrInput - // A nested object resource + // Connection properties specific to the Cloud SQL. // Structure is documented below. CloudSql ConnectionCloudSqlPtrInput // Optional connection id that should be assigned to the created connection. @@ -463,7 +464,7 @@ type connectionArgs struct { // Connection properties specific to Cloud Spanner // Structure is documented below. CloudSpanner *ConnectionCloudSpanner `pulumi:"cloudSpanner"` - // A nested object resource + // Connection properties specific to the Cloud SQL. // Structure is documented below. CloudSql *ConnectionCloudSql `pulumi:"cloudSql"` // Optional connection id that should be assigned to the created connection. @@ -499,7 +500,7 @@ type ConnectionArgs struct { // Connection properties specific to Cloud Spanner // Structure is documented below. CloudSpanner ConnectionCloudSpannerPtrInput - // A nested object resource + // Connection properties specific to the Cloud SQL. // Structure is documented below. CloudSql ConnectionCloudSqlPtrInput // Optional connection id that should be assigned to the created connection. @@ -632,7 +633,7 @@ func (o ConnectionOutput) CloudSpanner() ConnectionCloudSpannerPtrOutput { return o.ApplyT(func(v *Connection) ConnectionCloudSpannerPtrOutput { return v.CloudSpanner }).(ConnectionCloudSpannerPtrOutput) } -// A nested object resource +// Connection properties specific to the Cloud SQL. // Structure is documented below. func (o ConnectionOutput) CloudSql() ConnectionCloudSqlPtrOutput { return o.ApplyT(func(v *Connection) ConnectionCloudSqlPtrOutput { return v.CloudSql }).(ConnectionCloudSqlPtrOutput) diff --git a/sdk/go/gcp/bigquery/pulumiTypes.go b/sdk/go/gcp/bigquery/pulumiTypes.go index 90b3472250..6990a9ae08 100644 --- a/sdk/go/gcp/bigquery/pulumiTypes.go +++ b/sdk/go/gcp/bigquery/pulumiTypes.go @@ -474,6 +474,10 @@ type ConnectionAzure struct { ClientId *string `pulumi:"clientId"` // The id of customer's directory that host the data. CustomerTenantId string `pulumi:"customerTenantId"` + // The Azure Application (client) ID where the federated credentials will be hosted. + FederatedApplicationClientId *string `pulumi:"federatedApplicationClientId"` + // A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + Identity *string `pulumi:"identity"` // The object id of the Azure Active Directory Application. ObjectId *string `pulumi:"objectId"` // The URL user will be redirected to after granting consent during connection setup. @@ -498,6 +502,10 @@ type ConnectionAzureArgs struct { ClientId pulumi.StringPtrInput `pulumi:"clientId"` // The id of customer's directory that host the data. CustomerTenantId pulumi.StringInput `pulumi:"customerTenantId"` + // The Azure Application (client) ID where the federated credentials will be hosted. + FederatedApplicationClientId pulumi.StringPtrInput `pulumi:"federatedApplicationClientId"` + // A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + Identity pulumi.StringPtrInput `pulumi:"identity"` // The object id of the Azure Active Directory Application. ObjectId pulumi.StringPtrInput `pulumi:"objectId"` // The URL user will be redirected to after granting consent during connection setup. @@ -596,6 +604,16 @@ func (o ConnectionAzureOutput) CustomerTenantId() pulumi.StringOutput { return o.ApplyT(func(v ConnectionAzure) string { return v.CustomerTenantId }).(pulumi.StringOutput) } +// The Azure Application (client) ID where the federated credentials will be hosted. +func (o ConnectionAzureOutput) FederatedApplicationClientId() pulumi.StringPtrOutput { + return o.ApplyT(func(v ConnectionAzure) *string { return v.FederatedApplicationClientId }).(pulumi.StringPtrOutput) +} + +// A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. +func (o ConnectionAzureOutput) Identity() pulumi.StringPtrOutput { + return o.ApplyT(func(v ConnectionAzure) *string { return v.Identity }).(pulumi.StringPtrOutput) +} + // The object id of the Azure Active Directory Application. func (o ConnectionAzureOutput) ObjectId() pulumi.StringPtrOutput { return o.ApplyT(func(v ConnectionAzure) *string { return v.ObjectId }).(pulumi.StringPtrOutput) @@ -660,6 +678,26 @@ func (o ConnectionAzurePtrOutput) CustomerTenantId() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } +// The Azure Application (client) ID where the federated credentials will be hosted. +func (o ConnectionAzurePtrOutput) FederatedApplicationClientId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ConnectionAzure) *string { + if v == nil { + return nil + } + return v.FederatedApplicationClientId + }).(pulumi.StringPtrOutput) +} + +// A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. +func (o ConnectionAzurePtrOutput) Identity() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ConnectionAzure) *string { + if v == nil { + return nil + } + return v.Identity + }).(pulumi.StringPtrOutput) +} + // The object id of the Azure Active Directory Application. func (o ConnectionAzurePtrOutput) ObjectId() pulumi.StringPtrOutput { return o.ApplyT(func(v *ConnectionAzure) *string { @@ -822,6 +860,8 @@ type ConnectionCloudSpanner struct { Database string `pulumi:"database"` // If parallelism should be used when reading from Cloud Spanner UseParallelism *bool `pulumi:"useParallelism"` + // If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + UseServerlessAnalytics *bool `pulumi:"useServerlessAnalytics"` } // ConnectionCloudSpannerInput is an input type that accepts ConnectionCloudSpannerArgs and ConnectionCloudSpannerOutput values. @@ -840,6 +880,8 @@ type ConnectionCloudSpannerArgs struct { Database pulumi.StringInput `pulumi:"database"` // If parallelism should be used when reading from Cloud Spanner UseParallelism pulumi.BoolPtrInput `pulumi:"useParallelism"` + // If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + UseServerlessAnalytics pulumi.BoolPtrInput `pulumi:"useServerlessAnalytics"` } func (ConnectionCloudSpannerArgs) ElementType() reflect.Type { @@ -929,6 +971,11 @@ func (o ConnectionCloudSpannerOutput) UseParallelism() pulumi.BoolPtrOutput { return o.ApplyT(func(v ConnectionCloudSpanner) *bool { return v.UseParallelism }).(pulumi.BoolPtrOutput) } +// If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics +func (o ConnectionCloudSpannerOutput) UseServerlessAnalytics() pulumi.BoolPtrOutput { + return o.ApplyT(func(v ConnectionCloudSpanner) *bool { return v.UseServerlessAnalytics }).(pulumi.BoolPtrOutput) +} + type ConnectionCloudSpannerPtrOutput struct{ *pulumi.OutputState } func (ConnectionCloudSpannerPtrOutput) ElementType() reflect.Type { @@ -973,6 +1020,16 @@ func (o ConnectionCloudSpannerPtrOutput) UseParallelism() pulumi.BoolPtrOutput { }).(pulumi.BoolPtrOutput) } +// If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics +func (o ConnectionCloudSpannerPtrOutput) UseServerlessAnalytics() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *ConnectionCloudSpanner) *bool { + if v == nil { + return nil + } + return v.UseServerlessAnalytics + }).(pulumi.BoolPtrOutput) +} + type ConnectionCloudSql struct { // Cloud SQL properties. // Structure is documented below. @@ -981,6 +1038,8 @@ type ConnectionCloudSql struct { Database string `pulumi:"database"` // Cloud SQL instance ID in the form project:location:instance. InstanceId string `pulumi:"instanceId"` + // When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + ServiceAccountId *string `pulumi:"serviceAccountId"` // Type of the Cloud SQL database. // Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. Type string `pulumi:"type"` @@ -1005,6 +1064,8 @@ type ConnectionCloudSqlArgs struct { Database pulumi.StringInput `pulumi:"database"` // Cloud SQL instance ID in the form project:location:instance. InstanceId pulumi.StringInput `pulumi:"instanceId"` + // When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + ServiceAccountId pulumi.StringPtrInput `pulumi:"serviceAccountId"` // Type of the Cloud SQL database. // Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. Type pulumi.StringInput `pulumi:"type"` @@ -1103,6 +1164,11 @@ func (o ConnectionCloudSqlOutput) InstanceId() pulumi.StringOutput { return o.ApplyT(func(v ConnectionCloudSql) string { return v.InstanceId }).(pulumi.StringOutput) } +// When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. +func (o ConnectionCloudSqlOutput) ServiceAccountId() pulumi.StringPtrOutput { + return o.ApplyT(func(v ConnectionCloudSql) *string { return v.ServiceAccountId }).(pulumi.StringPtrOutput) +} + // Type of the Cloud SQL database. // Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. func (o ConnectionCloudSqlOutput) Type() pulumi.StringOutput { @@ -1164,6 +1230,16 @@ func (o ConnectionCloudSqlPtrOutput) InstanceId() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } +// When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. +func (o ConnectionCloudSqlPtrOutput) ServiceAccountId() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ConnectionCloudSql) *string { + if v == nil { + return nil + } + return v.ServiceAccountId + }).(pulumi.StringPtrOutput) +} + // Type of the Cloud SQL database. // Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. func (o ConnectionCloudSqlPtrOutput) Type() pulumi.StringPtrOutput { @@ -5623,8 +5699,8 @@ type JobLoad struct { // The maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, // an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. MaxBadRecords *int `pulumi:"maxBadRecords"` - // Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - // property to a custom value, BigQuery throws an error if an + // Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value + // when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an // empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as // an empty value. NullMarker *string `pulumi:"nullMarker"` @@ -5737,8 +5813,8 @@ type JobLoadArgs struct { // The maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, // an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. MaxBadRecords pulumi.IntPtrInput `pulumi:"maxBadRecords"` - // Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - // property to a custom value, BigQuery throws an error if an + // Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value + // when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an // empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as // an empty value. NullMarker pulumi.StringPtrInput `pulumi:"nullMarker"` @@ -5951,8 +6027,8 @@ func (o JobLoadOutput) MaxBadRecords() pulumi.IntPtrOutput { return o.ApplyT(func(v JobLoad) *int { return v.MaxBadRecords }).(pulumi.IntPtrOutput) } -// Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this -// property to a custom value, BigQuery throws an error if an +// Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value +// when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an // empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as // an empty value. func (o JobLoadOutput) NullMarker() pulumi.StringPtrOutput { @@ -6190,8 +6266,8 @@ func (o JobLoadPtrOutput) MaxBadRecords() pulumi.IntPtrOutput { }).(pulumi.IntPtrOutput) } -// Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this -// property to a custom value, BigQuery throws an error if an +// Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value +// when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an // empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as // an empty value. func (o JobLoadPtrOutput) NullMarker() pulumi.StringPtrOutput { @@ -9565,14 +9641,7 @@ type TableExternalDataConfigurationCsvOptions struct { Encoding *string `pulumi:"encoding"` // The separator for fields in a CSV file. FieldDelimiter *string `pulumi:"fieldDelimiter"` - // The value that is used to quote data sections in a - // CSV file. If your data does not contain quoted sections, set the - // property value to an empty string. If your data contains quoted newline - // characters, you must also set the `allowQuotedNewlines` property to true. - // The API-side default is `"`, specified in the provider escaped as `\"`. Due to - // limitations with default values, this value is required to be - // explicitly set. - Quote string `pulumi:"quote"` + Quote string `pulumi:"quote"` // The number of rows at the top of a CSV // file that BigQuery will skip when reading the data. SkipLeadingRows *int `pulumi:"skipLeadingRows"` @@ -9602,14 +9671,7 @@ type TableExternalDataConfigurationCsvOptionsArgs struct { Encoding pulumi.StringPtrInput `pulumi:"encoding"` // The separator for fields in a CSV file. FieldDelimiter pulumi.StringPtrInput `pulumi:"fieldDelimiter"` - // The value that is used to quote data sections in a - // CSV file. If your data does not contain quoted sections, set the - // property value to an empty string. If your data contains quoted newline - // characters, you must also set the `allowQuotedNewlines` property to true. - // The API-side default is `"`, specified in the provider escaped as `\"`. Due to - // limitations with default values, this value is required to be - // explicitly set. - Quote pulumi.StringInput `pulumi:"quote"` + Quote pulumi.StringInput `pulumi:"quote"` // The number of rows at the top of a CSV // file that BigQuery will skip when reading the data. SkipLeadingRows pulumi.IntPtrInput `pulumi:"skipLeadingRows"` @@ -9716,13 +9778,6 @@ func (o TableExternalDataConfigurationCsvOptionsOutput) FieldDelimiter() pulumi. return o.ApplyT(func(v TableExternalDataConfigurationCsvOptions) *string { return v.FieldDelimiter }).(pulumi.StringPtrOutput) } -// The value that is used to quote data sections in a -// CSV file. If your data does not contain quoted sections, set the -// property value to an empty string. If your data contains quoted newline -// characters, you must also set the `allowQuotedNewlines` property to true. -// The API-side default is `"`, specified in the provider escaped as `\"`. Due to -// limitations with default values, this value is required to be -// explicitly set. func (o TableExternalDataConfigurationCsvOptionsOutput) Quote() pulumi.StringOutput { return o.ApplyT(func(v TableExternalDataConfigurationCsvOptions) string { return v.Quote }).(pulumi.StringOutput) } @@ -9801,13 +9856,6 @@ func (o TableExternalDataConfigurationCsvOptionsPtrOutput) FieldDelimiter() pulu }).(pulumi.StringPtrOutput) } -// The value that is used to quote data sections in a -// CSV file. If your data does not contain quoted sections, set the -// property value to an empty string. If your data contains quoted newline -// characters, you must also set the `allowQuotedNewlines` property to true. -// The API-side default is `"`, specified in the provider escaped as `\"`. Due to -// limitations with default values, this value is required to be -// explicitly set. func (o TableExternalDataConfigurationCsvOptionsPtrOutput) Quote() pulumi.StringPtrOutput { return o.ApplyT(func(v *TableExternalDataConfigurationCsvOptions) *string { if v == nil { diff --git a/sdk/go/gcp/bigquery/reservationAssignment.go b/sdk/go/gcp/bigquery/reservationAssignment.go index f15b92d658..539ad1d745 100644 --- a/sdk/go/gcp/bigquery/reservationAssignment.go +++ b/sdk/go/gcp/bigquery/reservationAssignment.go @@ -14,41 +14,6 @@ import ( // The BigqueryReservation Assignment resource // // ## Example Usage -// ### Basic -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigquery" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// basic, err := bigquery.NewReservation(ctx, "basic", &bigquery.ReservationArgs{ -// Project: pulumi.String("my-project-name"), -// Location: pulumi.String("us-central1"), -// SlotCapacity: pulumi.Int(0), -// IgnoreIdleSlots: pulumi.Bool(false), -// }) -// if err != nil { -// return err -// } -// _, err = bigquery.NewReservationAssignment(ctx, "primary", &bigquery.ReservationAssignmentArgs{ -// Assignee: pulumi.String("projects/my-project-name"), -// JobType: pulumi.String("PIPELINE"), -// Reservation: basic.ID(), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/bigquery/routine.go b/sdk/go/gcp/bigquery/routine.go index 5e29486349..83ea0324e3 100644 --- a/sdk/go/gcp/bigquery/routine.go +++ b/sdk/go/gcp/bigquery/routine.go @@ -55,118 +55,6 @@ import ( // } // // ``` -// ### Big Query Routine Json -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigquery" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// test, err := bigquery.NewDataset(ctx, "test", &bigquery.DatasetArgs{ -// DatasetId: pulumi.String("dataset_id"), -// }) -// if err != nil { -// return err -// } -// _, err = bigquery.NewRoutine(ctx, "sproc", &bigquery.RoutineArgs{ -// DatasetId: test.DatasetId, -// RoutineId: pulumi.String("tf_test_routine_id"), -// RoutineType: pulumi.String("SCALAR_FUNCTION"), -// Language: pulumi.String("JAVASCRIPT"), -// DefinitionBody: pulumi.String("CREATE FUNCTION multiplyInputs return x*y;"), -// Arguments: bigquery.RoutineArgumentArray{ -// &bigquery.RoutineArgumentArgs{ -// Name: pulumi.String("x"), -// DataType: pulumi.String("{\"typeKind\" : \"FLOAT64\"}"), -// }, -// &bigquery.RoutineArgumentArgs{ -// Name: pulumi.String("y"), -// DataType: pulumi.String("{\"typeKind\" : \"FLOAT64\"}"), -// }, -// }, -// ReturnType: pulumi.String("{\"typeKind\" : \"FLOAT64\"}"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ### Big Query Routine Tvf -// -// ```go -// package main -// -// import ( -// -// "encoding/json" -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigquery" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// test, err := bigquery.NewDataset(ctx, "test", &bigquery.DatasetArgs{ -// DatasetId: pulumi.String("dataset_id"), -// }) -// if err != nil { -// return err -// } -// tmpJSON0, err := json.Marshal(map[string]interface{}{ -// "typeKind": "INT64", -// }) -// if err != nil { -// return err -// } -// json0 := string(tmpJSON0) -// tmpJSON1, err := json.Marshal(map[string]interface{}{ -// "columns": []map[string]interface{}{ -// map[string]interface{}{ -// "name": "value", -// "type": map[string]interface{}{ -// "typeKind": "INT64", -// }, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// json1 := string(tmpJSON1) -// _, err = bigquery.NewRoutine(ctx, "sproc", &bigquery.RoutineArgs{ -// DatasetId: test.DatasetId, -// RoutineId: pulumi.String("tf_test_routine_id"), -// RoutineType: pulumi.String("TABLE_VALUED_FUNCTION"), -// Language: pulumi.String("SQL"), -// DefinitionBody: pulumi.String("SELECT 1 + value AS value\n"), -// Arguments: bigquery.RoutineArgumentArray{ -// &bigquery.RoutineArgumentArgs{ -// Name: pulumi.String("value"), -// ArgumentKind: pulumi.String("FIXED_TYPE"), -// DataType: pulumi.String(json0), -// }, -// }, -// ReturnTableType: pulumi.String(json1), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/bigquery/table.go b/sdk/go/gcp/bigquery/table.go index 4e181b7609..519b0cb4cf 100644 --- a/sdk/go/gcp/bigquery/table.go +++ b/sdk/go/gcp/bigquery/table.go @@ -11,14 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Creates a table resource in a dataset for Google BigQuery. For more information see -// [the official documentation](https://cloud.google.com/bigquery/docs/) and -// [API](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables). -// -// > **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false` -// (and run `pulumi update` to write the field to state) in order to destroy an instance. -// It is recommended to not set this field (or set it to true) until you're ready to destroy. -// // ## Example Usage // // ```go @@ -134,8 +126,8 @@ type Table struct { // The dataset ID to create the table in. // Changing this forces a new resource to be created. DatasetId pulumi.StringOutput `pulumi:"datasetId"` - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `=destroy` or `=update` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // terraform destroy or terraform apply that would delete the instance will fail. DeletionProtection pulumi.BoolPtrOutput `pulumi:"deletionProtection"` // The field description. Description pulumi.StringPtrOutput `pulumi:"description"` @@ -240,8 +232,8 @@ type tableState struct { // The dataset ID to create the table in. // Changing this forces a new resource to be created. DatasetId *string `pulumi:"datasetId"` - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `=destroy` or `=update` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // terraform destroy or terraform apply that would delete the instance will fail. DeletionProtection *bool `pulumi:"deletionProtection"` // The field description. Description *string `pulumi:"description"` @@ -312,8 +304,8 @@ type TableState struct { // The dataset ID to create the table in. // Changing this forces a new resource to be created. DatasetId pulumi.StringPtrInput - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `=destroy` or `=update` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // terraform destroy or terraform apply that would delete the instance will fail. DeletionProtection pulumi.BoolPtrInput // The field description. Description pulumi.StringPtrInput @@ -386,8 +378,8 @@ type tableArgs struct { // The dataset ID to create the table in. // Changing this forces a new resource to be created. DatasetId string `pulumi:"datasetId"` - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `=destroy` or `=update` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // terraform destroy or terraform apply that would delete the instance will fail. DeletionProtection *bool `pulumi:"deletionProtection"` // The field description. Description *string `pulumi:"description"` @@ -440,8 +432,8 @@ type TableArgs struct { // The dataset ID to create the table in. // Changing this forces a new resource to be created. DatasetId pulumi.StringInput - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `=destroy` or `=update` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // terraform destroy or terraform apply that would delete the instance will fail. DeletionProtection pulumi.BoolPtrInput // The field description. Description pulumi.StringPtrInput @@ -590,8 +582,8 @@ func (o TableOutput) DatasetId() pulumi.StringOutput { return o.ApplyT(func(v *Table) pulumi.StringOutput { return v.DatasetId }).(pulumi.StringOutput) } -// Whether or not to allow the provider to destroy the instance. Unless this field is set to false -// in state, a `=destroy` or `=update` that would delete the instance will fail. +// Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a +// terraform destroy or terraform apply that would delete the instance will fail. func (o TableOutput) DeletionProtection() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Table) pulumi.BoolPtrOutput { return v.DeletionProtection }).(pulumi.BoolPtrOutput) } diff --git a/sdk/go/gcp/bigtable/instance.go b/sdk/go/gcp/bigtable/instance.go index 2c3d030628..27facb3095 100644 --- a/sdk/go/gcp/bigtable/instance.go +++ b/sdk/go/gcp/bigtable/instance.go @@ -10,24 +10,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// ## +--- -// -// subcategory: "Cloud Bigtable" -// page_title: "Google: bigtable.Instance" -// description: |- -// -// Creates a Google Bigtable instance. -// -// --- -// -// # bigtable.Instance -// -// Creates a Google Bigtable instance. For more information see: -// -// * [API documentation](https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/bigtable/docs) -// // ## Example Usage // ### Simple Instance // @@ -137,8 +119,8 @@ type Instance struct { // to as many as possible within 8 cloud regions. Removing the field entirely from the config will cause the provider // to default to the backend value. See structure below. Clusters InstanceClusterArrayOutput `pulumi:"clusters"` - // Whether or not to allow this provider to destroy the instance. Unless this field is set to false - // in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // terraform destroy or terraform apply that would delete the instance will fail. DeletionProtection pulumi.BoolPtrOutput `pulumi:"deletionProtection"` // The human-readable display name of the Bigtable instance. Defaults to the instance `name`. DisplayName pulumi.StringOutput `pulumi:"displayName"` @@ -192,8 +174,8 @@ type instanceState struct { // to as many as possible within 8 cloud regions. Removing the field entirely from the config will cause the provider // to default to the backend value. See structure below. Clusters []InstanceCluster `pulumi:"clusters"` - // Whether or not to allow this provider to destroy the instance. Unless this field is set to false - // in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // terraform destroy or terraform apply that would delete the instance will fail. DeletionProtection *bool `pulumi:"deletionProtection"` // The human-readable display name of the Bigtable instance. Defaults to the instance `name`. DisplayName *string `pulumi:"displayName"` @@ -219,8 +201,8 @@ type InstanceState struct { // to as many as possible within 8 cloud regions. Removing the field entirely from the config will cause the provider // to default to the backend value. See structure below. Clusters InstanceClusterArrayInput - // Whether or not to allow this provider to destroy the instance. Unless this field is set to false - // in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // terraform destroy or terraform apply that would delete the instance will fail. DeletionProtection pulumi.BoolPtrInput // The human-readable display name of the Bigtable instance. Defaults to the instance `name`. DisplayName pulumi.StringPtrInput @@ -250,8 +232,8 @@ type instanceArgs struct { // to as many as possible within 8 cloud regions. Removing the field entirely from the config will cause the provider // to default to the backend value. See structure below. Clusters []InstanceCluster `pulumi:"clusters"` - // Whether or not to allow this provider to destroy the instance. Unless this field is set to false - // in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // terraform destroy or terraform apply that would delete the instance will fail. DeletionProtection *bool `pulumi:"deletionProtection"` // The human-readable display name of the Bigtable instance. Defaults to the instance `name`. DisplayName *string `pulumi:"displayName"` @@ -278,8 +260,8 @@ type InstanceArgs struct { // to as many as possible within 8 cloud regions. Removing the field entirely from the config will cause the provider // to default to the backend value. See structure below. Clusters InstanceClusterArrayInput - // Whether or not to allow this provider to destroy the instance. Unless this field is set to false - // in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // terraform destroy or terraform apply that would delete the instance will fail. DeletionProtection pulumi.BoolPtrInput // The human-readable display name of the Bigtable instance. Defaults to the instance `name`. DisplayName pulumi.StringPtrInput @@ -394,8 +376,8 @@ func (o InstanceOutput) Clusters() InstanceClusterArrayOutput { return o.ApplyT(func(v *Instance) InstanceClusterArrayOutput { return v.Clusters }).(InstanceClusterArrayOutput) } -// Whether or not to allow this provider to destroy the instance. Unless this field is set to false -// in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. +// Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a +// terraform destroy or terraform apply that would delete the instance will fail. func (o InstanceOutput) DeletionProtection() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Instance) pulumi.BoolPtrOutput { return v.DeletionProtection }).(pulumi.BoolPtrOutput) } diff --git a/sdk/go/gcp/bigtable/instanceIamBinding.go b/sdk/go/gcp/bigtable/instanceIamBinding.go index 5128041d48..9f31370c7e 100644 --- a/sdk/go/gcp/bigtable/instanceIamBinding.go +++ b/sdk/go/gcp/bigtable/instanceIamBinding.go @@ -155,9 +155,7 @@ type InstanceIamBinding struct { // The name or relative resource id of the instance to manage IAM policies for. Instance pulumi.StringOutput `pulumi:"instance"` Members pulumi.StringArrayOutput `pulumi:"members"` - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project pulumi.StringOutput `pulumi:"project"` + Project pulumi.StringOutput `pulumi:"project"` // The role that should be applied. Only one // `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -208,9 +206,7 @@ type instanceIamBindingState struct { // The name or relative resource id of the instance to manage IAM policies for. Instance *string `pulumi:"instance"` Members []string `pulumi:"members"` - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project *string `pulumi:"project"` + Project *string `pulumi:"project"` // The role that should be applied. Only one // `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -224,9 +220,7 @@ type InstanceIamBindingState struct { // The name or relative resource id of the instance to manage IAM policies for. Instance pulumi.StringPtrInput Members pulumi.StringArrayInput - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project pulumi.StringPtrInput + Project pulumi.StringPtrInput // The role that should be applied. Only one // `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -242,9 +236,7 @@ type instanceIamBindingArgs struct { // The name or relative resource id of the instance to manage IAM policies for. Instance string `pulumi:"instance"` Members []string `pulumi:"members"` - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project *string `pulumi:"project"` + Project *string `pulumi:"project"` // The role that should be applied. Only one // `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -257,9 +249,7 @@ type InstanceIamBindingArgs struct { // The name or relative resource id of the instance to manage IAM policies for. Instance pulumi.StringInput Members pulumi.StringArrayInput - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project pulumi.StringPtrInput + Project pulumi.StringPtrInput // The role that should be applied. Only one // `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -371,8 +361,6 @@ func (o InstanceIamBindingOutput) Members() pulumi.StringArrayOutput { return o.ApplyT(func(v *InstanceIamBinding) pulumi.StringArrayOutput { return v.Members }).(pulumi.StringArrayOutput) } -// The project in which the instance belongs. If it -// is not provided, a default will be supplied. func (o InstanceIamBindingOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *InstanceIamBinding) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/bigtable/instanceIamMember.go b/sdk/go/gcp/bigtable/instanceIamMember.go index f5895d1921..6aaadd2956 100644 --- a/sdk/go/gcp/bigtable/instanceIamMember.go +++ b/sdk/go/gcp/bigtable/instanceIamMember.go @@ -155,9 +155,7 @@ type InstanceIamMember struct { // The name or relative resource id of the instance to manage IAM policies for. Instance pulumi.StringOutput `pulumi:"instance"` Member pulumi.StringOutput `pulumi:"member"` - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project pulumi.StringOutput `pulumi:"project"` + Project pulumi.StringOutput `pulumi:"project"` // The role that should be applied. Only one // `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -208,9 +206,7 @@ type instanceIamMemberState struct { // The name or relative resource id of the instance to manage IAM policies for. Instance *string `pulumi:"instance"` Member *string `pulumi:"member"` - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project *string `pulumi:"project"` + Project *string `pulumi:"project"` // The role that should be applied. Only one // `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -224,9 +220,7 @@ type InstanceIamMemberState struct { // The name or relative resource id of the instance to manage IAM policies for. Instance pulumi.StringPtrInput Member pulumi.StringPtrInput - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project pulumi.StringPtrInput + Project pulumi.StringPtrInput // The role that should be applied. Only one // `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -240,11 +234,9 @@ func (InstanceIamMemberState) ElementType() reflect.Type { type instanceIamMemberArgs struct { Condition *InstanceIamMemberCondition `pulumi:"condition"` // The name or relative resource id of the instance to manage IAM policies for. - Instance string `pulumi:"instance"` - Member string `pulumi:"member"` - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project *string `pulumi:"project"` + Instance string `pulumi:"instance"` + Member string `pulumi:"member"` + Project *string `pulumi:"project"` // The role that should be applied. Only one // `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -257,9 +249,7 @@ type InstanceIamMemberArgs struct { // The name or relative resource id of the instance to manage IAM policies for. Instance pulumi.StringInput Member pulumi.StringInput - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project pulumi.StringPtrInput + Project pulumi.StringPtrInput // The role that should be applied. Only one // `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -371,8 +361,6 @@ func (o InstanceIamMemberOutput) Member() pulumi.StringOutput { return o.ApplyT(func(v *InstanceIamMember) pulumi.StringOutput { return v.Member }).(pulumi.StringOutput) } -// The project in which the instance belongs. If it -// is not provided, a default will be supplied. func (o InstanceIamMemberOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *InstanceIamMember) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/bigtable/instanceIamPolicy.go b/sdk/go/gcp/bigtable/instanceIamPolicy.go index 71d60a5996..cf0d0f1a2f 100644 --- a/sdk/go/gcp/bigtable/instanceIamPolicy.go +++ b/sdk/go/gcp/bigtable/instanceIamPolicy.go @@ -155,9 +155,7 @@ type InstanceIamPolicy struct { Instance pulumi.StringOutput `pulumi:"instance"` // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData pulumi.StringOutput `pulumi:"policyData"` - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project pulumi.StringOutput `pulumi:"project"` + Project pulumi.StringOutput `pulumi:"project"` } // NewInstanceIamPolicy registers a new resource with the given unique name, arguments, and options. @@ -201,9 +199,7 @@ type instanceIamPolicyState struct { Instance *string `pulumi:"instance"` // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData *string `pulumi:"policyData"` - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project *string `pulumi:"project"` + Project *string `pulumi:"project"` } type InstanceIamPolicyState struct { @@ -213,9 +209,7 @@ type InstanceIamPolicyState struct { Instance pulumi.StringPtrInput // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData pulumi.StringPtrInput - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project pulumi.StringPtrInput + Project pulumi.StringPtrInput } func (InstanceIamPolicyState) ElementType() reflect.Type { @@ -226,10 +220,8 @@ type instanceIamPolicyArgs struct { // The name or relative resource id of the instance to manage IAM policies for. Instance string `pulumi:"instance"` // The policy data generated by a `organizations.getIAMPolicy` data source. - PolicyData string `pulumi:"policyData"` - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project *string `pulumi:"project"` + PolicyData string `pulumi:"policyData"` + Project *string `pulumi:"project"` } // The set of arguments for constructing a InstanceIamPolicy resource. @@ -238,9 +230,7 @@ type InstanceIamPolicyArgs struct { Instance pulumi.StringInput // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData pulumi.StringInput - // The project in which the instance belongs. If it - // is not provided, a default will be supplied. - Project pulumi.StringPtrInput + Project pulumi.StringPtrInput } func (InstanceIamPolicyArgs) ElementType() reflect.Type { @@ -345,8 +335,6 @@ func (o InstanceIamPolicyOutput) PolicyData() pulumi.StringOutput { return o.ApplyT(func(v *InstanceIamPolicy) pulumi.StringOutput { return v.PolicyData }).(pulumi.StringOutput) } -// The project in which the instance belongs. If it -// is not provided, a default will be supplied. func (o InstanceIamPolicyOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *InstanceIamPolicy) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/bigtable/table.go b/sdk/go/gcp/bigtable/table.go index ef5a2ab88a..42e1eb7621 100644 --- a/sdk/go/gcp/bigtable/table.go +++ b/sdk/go/gcp/bigtable/table.go @@ -11,10 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Creates a Google Cloud Bigtable table inside an instance. For more information see -// [the official documentation](https://cloud.google.com/bigtable/) and -// [API](https://cloud.google.com/bigtable/docs/go/reference). -// // ## Example Usage // // ```go @@ -104,9 +100,8 @@ type Table struct { // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project pulumi.StringOutput `pulumi:"project"` - // A list of predefined keys to split the table on. - // !> **Warning:** Modifying the `splitKeys` of an existing table will cause the provider - // to delete/recreate the entire `bigtable.Table` resource. + // A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + // Terraform to delete/recreate the entire google_bigtable_table resource. SplitKeys pulumi.StringArrayOutput `pulumi:"splitKeys"` } @@ -153,9 +148,8 @@ type tableState struct { // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project *string `pulumi:"project"` - // A list of predefined keys to split the table on. - // !> **Warning:** Modifying the `splitKeys` of an existing table will cause the provider - // to delete/recreate the entire `bigtable.Table` resource. + // A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + // Terraform to delete/recreate the entire google_bigtable_table resource. SplitKeys []string `pulumi:"splitKeys"` } @@ -171,9 +165,8 @@ type TableState struct { // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project pulumi.StringPtrInput - // A list of predefined keys to split the table on. - // !> **Warning:** Modifying the `splitKeys` of an existing table will cause the provider - // to delete/recreate the entire `bigtable.Table` resource. + // A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + // Terraform to delete/recreate the entire google_bigtable_table resource. SplitKeys pulumi.StringArrayInput } @@ -193,9 +186,8 @@ type tableArgs struct { // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project *string `pulumi:"project"` - // A list of predefined keys to split the table on. - // !> **Warning:** Modifying the `splitKeys` of an existing table will cause the provider - // to delete/recreate the entire `bigtable.Table` resource. + // A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + // Terraform to delete/recreate the entire google_bigtable_table resource. SplitKeys []string `pulumi:"splitKeys"` } @@ -212,9 +204,8 @@ type TableArgs struct { // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project pulumi.StringPtrInput - // A list of predefined keys to split the table on. - // !> **Warning:** Modifying the `splitKeys` of an existing table will cause the provider - // to delete/recreate the entire `bigtable.Table` resource. + // A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + // Terraform to delete/recreate the entire google_bigtable_table resource. SplitKeys pulumi.StringArrayInput } @@ -331,9 +322,8 @@ func (o TableOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *Table) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } -// A list of predefined keys to split the table on. -// !> **Warning:** Modifying the `splitKeys` of an existing table will cause the provider -// to delete/recreate the entire `bigtable.Table` resource. +// A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause +// Terraform to delete/recreate the entire google_bigtable_table resource. func (o TableOutput) SplitKeys() pulumi.StringArrayOutput { return o.ApplyT(func(v *Table) pulumi.StringArrayOutput { return v.SplitKeys }).(pulumi.StringArrayOutput) } diff --git a/sdk/go/gcp/bigtable/tableIamBinding.go b/sdk/go/gcp/bigtable/tableIamBinding.go index b814506959..b26d218a96 100644 --- a/sdk/go/gcp/bigtable/tableIamBinding.go +++ b/sdk/go/gcp/bigtable/tableIamBinding.go @@ -158,9 +158,7 @@ type TableIamBinding struct { // The name or relative resource id of the instance that owns the table. Instance pulumi.StringOutput `pulumi:"instance"` Members pulumi.StringArrayOutput `pulumi:"members"` - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project pulumi.StringOutput `pulumi:"project"` + Project pulumi.StringOutput `pulumi:"project"` // The role that should be applied. Only one // `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -216,9 +214,7 @@ type tableIamBindingState struct { // The name or relative resource id of the instance that owns the table. Instance *string `pulumi:"instance"` Members []string `pulumi:"members"` - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project *string `pulumi:"project"` + Project *string `pulumi:"project"` // The role that should be applied. Only one // `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -234,9 +230,7 @@ type TableIamBindingState struct { // The name or relative resource id of the instance that owns the table. Instance pulumi.StringPtrInput Members pulumi.StringArrayInput - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project pulumi.StringPtrInput + Project pulumi.StringPtrInput // The role that should be applied. Only one // `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -254,9 +248,7 @@ type tableIamBindingArgs struct { // The name or relative resource id of the instance that owns the table. Instance string `pulumi:"instance"` Members []string `pulumi:"members"` - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project *string `pulumi:"project"` + Project *string `pulumi:"project"` // The role that should be applied. Only one // `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -271,9 +263,7 @@ type TableIamBindingArgs struct { // The name or relative resource id of the instance that owns the table. Instance pulumi.StringInput Members pulumi.StringArrayInput - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project pulumi.StringPtrInput + Project pulumi.StringPtrInput // The role that should be applied. Only one // `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -387,8 +377,6 @@ func (o TableIamBindingOutput) Members() pulumi.StringArrayOutput { return o.ApplyT(func(v *TableIamBinding) pulumi.StringArrayOutput { return v.Members }).(pulumi.StringArrayOutput) } -// The project in which the table belongs. If it -// is not provided, this provider will use the provider default. func (o TableIamBindingOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *TableIamBinding) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/bigtable/tableIamMember.go b/sdk/go/gcp/bigtable/tableIamMember.go index be303ea621..564fd10258 100644 --- a/sdk/go/gcp/bigtable/tableIamMember.go +++ b/sdk/go/gcp/bigtable/tableIamMember.go @@ -158,9 +158,7 @@ type TableIamMember struct { // The name or relative resource id of the instance that owns the table. Instance pulumi.StringOutput `pulumi:"instance"` Member pulumi.StringOutput `pulumi:"member"` - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project pulumi.StringOutput `pulumi:"project"` + Project pulumi.StringOutput `pulumi:"project"` // The role that should be applied. Only one // `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -216,9 +214,7 @@ type tableIamMemberState struct { // The name or relative resource id of the instance that owns the table. Instance *string `pulumi:"instance"` Member *string `pulumi:"member"` - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project *string `pulumi:"project"` + Project *string `pulumi:"project"` // The role that should be applied. Only one // `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -234,9 +230,7 @@ type TableIamMemberState struct { // The name or relative resource id of the instance that owns the table. Instance pulumi.StringPtrInput Member pulumi.StringPtrInput - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project pulumi.StringPtrInput + Project pulumi.StringPtrInput // The role that should be applied. Only one // `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -252,11 +246,9 @@ func (TableIamMemberState) ElementType() reflect.Type { type tableIamMemberArgs struct { Condition *TableIamMemberCondition `pulumi:"condition"` // The name or relative resource id of the instance that owns the table. - Instance string `pulumi:"instance"` - Member string `pulumi:"member"` - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project *string `pulumi:"project"` + Instance string `pulumi:"instance"` + Member string `pulumi:"member"` + Project *string `pulumi:"project"` // The role that should be applied. Only one // `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -271,9 +263,7 @@ type TableIamMemberArgs struct { // The name or relative resource id of the instance that owns the table. Instance pulumi.StringInput Member pulumi.StringInput - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project pulumi.StringPtrInput + Project pulumi.StringPtrInput // The role that should be applied. Only one // `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -387,8 +377,6 @@ func (o TableIamMemberOutput) Member() pulumi.StringOutput { return o.ApplyT(func(v *TableIamMember) pulumi.StringOutput { return v.Member }).(pulumi.StringOutput) } -// The project in which the table belongs. If it -// is not provided, this provider will use the provider default. func (o TableIamMemberOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *TableIamMember) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/bigtable/tableIamPolicy.go b/sdk/go/gcp/bigtable/tableIamPolicy.go index 01f38136bd..85fa6ab199 100644 --- a/sdk/go/gcp/bigtable/tableIamPolicy.go +++ b/sdk/go/gcp/bigtable/tableIamPolicy.go @@ -158,9 +158,7 @@ type TableIamPolicy struct { Instance pulumi.StringOutput `pulumi:"instance"` // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData pulumi.StringOutput `pulumi:"policyData"` - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project pulumi.StringOutput `pulumi:"project"` + Project pulumi.StringOutput `pulumi:"project"` // The name or relative resource id of the table to manage IAM policies for. Table pulumi.StringOutput `pulumi:"table"` } @@ -209,9 +207,7 @@ type tableIamPolicyState struct { Instance *string `pulumi:"instance"` // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData *string `pulumi:"policyData"` - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project *string `pulumi:"project"` + Project *string `pulumi:"project"` // The name or relative resource id of the table to manage IAM policies for. Table *string `pulumi:"table"` } @@ -223,9 +219,7 @@ type TableIamPolicyState struct { Instance pulumi.StringPtrInput // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData pulumi.StringPtrInput - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project pulumi.StringPtrInput + Project pulumi.StringPtrInput // The name or relative resource id of the table to manage IAM policies for. Table pulumi.StringPtrInput } @@ -238,10 +232,8 @@ type tableIamPolicyArgs struct { // The name or relative resource id of the instance that owns the table. Instance string `pulumi:"instance"` // The policy data generated by a `organizations.getIAMPolicy` data source. - PolicyData string `pulumi:"policyData"` - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project *string `pulumi:"project"` + PolicyData string `pulumi:"policyData"` + Project *string `pulumi:"project"` // The name or relative resource id of the table to manage IAM policies for. Table string `pulumi:"table"` } @@ -252,9 +244,7 @@ type TableIamPolicyArgs struct { Instance pulumi.StringInput // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData pulumi.StringInput - // The project in which the table belongs. If it - // is not provided, this provider will use the provider default. - Project pulumi.StringPtrInput + Project pulumi.StringPtrInput // The name or relative resource id of the table to manage IAM policies for. Table pulumi.StringInput } @@ -361,8 +351,6 @@ func (o TableIamPolicyOutput) PolicyData() pulumi.StringOutput { return o.ApplyT(func(v *TableIamPolicy) pulumi.StringOutput { return v.PolicyData }).(pulumi.StringOutput) } -// The project in which the table belongs. If it -// is not provided, this provider will use the provider default. func (o TableIamPolicyOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *TableIamPolicy) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/billing/subAccount.go b/sdk/go/gcp/billing/subAccount.go index 20b885f759..b9c8696944 100644 --- a/sdk/go/gcp/billing/subAccount.go +++ b/sdk/go/gcp/billing/subAccount.go @@ -11,35 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Allows creation and management of a Google Cloud Billing Subaccount. -// -// !> **WARNING:** Deleting this resource will not delete or close the billing subaccount. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/billing" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := billing.NewSubAccount(ctx, "subaccount", &billing.SubAccountArgs{ -// DisplayName: pulumi.String("My Billing Account"), -// MasterBillingAccount: pulumi.String("012345-567890-ABCDEF"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // # Billing Subaccounts can be imported using any of these accepted formats @@ -53,11 +24,8 @@ type SubAccount struct { pulumi.CustomResourceState // The billing account id. - BillingAccountId pulumi.StringOutput `pulumi:"billingAccountId"` - // If set to "RENAME_ON_DESTROY" the billing account displayName - // will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - // Default is "". - DeletionPolicy pulumi.StringPtrOutput `pulumi:"deletionPolicy"` + BillingAccountId pulumi.StringOutput `pulumi:"billingAccountId"` + DeletionPolicy pulumi.StringPtrOutput `pulumi:"deletionPolicy"` // The display name of the billing account. DisplayName pulumi.StringOutput `pulumi:"displayName"` // The name of the master billing account that the subaccount @@ -106,10 +74,7 @@ func GetSubAccount(ctx *pulumi.Context, type subAccountState struct { // The billing account id. BillingAccountId *string `pulumi:"billingAccountId"` - // If set to "RENAME_ON_DESTROY" the billing account displayName - // will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - // Default is "". - DeletionPolicy *string `pulumi:"deletionPolicy"` + DeletionPolicy *string `pulumi:"deletionPolicy"` // The display name of the billing account. DisplayName *string `pulumi:"displayName"` // The name of the master billing account that the subaccount @@ -124,10 +89,7 @@ type subAccountState struct { type SubAccountState struct { // The billing account id. BillingAccountId pulumi.StringPtrInput - // If set to "RENAME_ON_DESTROY" the billing account displayName - // will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - // Default is "". - DeletionPolicy pulumi.StringPtrInput + DeletionPolicy pulumi.StringPtrInput // The display name of the billing account. DisplayName pulumi.StringPtrInput // The name of the master billing account that the subaccount @@ -144,9 +106,6 @@ func (SubAccountState) ElementType() reflect.Type { } type subAccountArgs struct { - // If set to "RENAME_ON_DESTROY" the billing account displayName - // will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - // Default is "". DeletionPolicy *string `pulumi:"deletionPolicy"` // The display name of the billing account. DisplayName string `pulumi:"displayName"` @@ -157,9 +116,6 @@ type subAccountArgs struct { // The set of arguments for constructing a SubAccount resource. type SubAccountArgs struct { - // If set to "RENAME_ON_DESTROY" the billing account displayName - // will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - // Default is "". DeletionPolicy pulumi.StringPtrInput // The display name of the billing account. DisplayName pulumi.StringInput @@ -260,9 +216,6 @@ func (o SubAccountOutput) BillingAccountId() pulumi.StringOutput { return o.ApplyT(func(v *SubAccount) pulumi.StringOutput { return v.BillingAccountId }).(pulumi.StringOutput) } -// If set to "RENAME_ON_DESTROY" the billing account displayName -// will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. -// Default is "". func (o SubAccountOutput) DeletionPolicy() pulumi.StringPtrOutput { return o.ApplyT(func(v *SubAccount) pulumi.StringPtrOutput { return v.DeletionPolicy }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/certificatemanager/certificate.go b/sdk/go/gcp/certificatemanager/certificate.go index 76408fad4e..78ad5ab231 100644 --- a/sdk/go/gcp/certificatemanager/certificate.go +++ b/sdk/go/gcp/certificatemanager/certificate.go @@ -11,46 +11,36 @@ import ( ) // ## Example Usage -// ### Certificate Manager Certificate Basic +// ### Certificate Manager Self Managed Certificate // // ```go // package main // // import ( // +// "os" +// // "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/certificatemanager" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // // ) // +// func readFileOrPanic(path string) pulumi.StringPtrInput { +// data, err := os.ReadFile(path) +// if err != nil { +// panic(err.Error()) +// } +// return pulumi.String(string(data)) +// } +// // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { -// instance, err := certificatemanager.NewDnsAuthorization(ctx, "instance", &certificatemanager.DnsAuthorizationArgs{ -// Description: pulumi.String("The default dnss"), -// Domain: pulumi.String("subdomain.hashicorptest.com"), -// }) -// if err != nil { -// return err -// } -// instance2, err := certificatemanager.NewDnsAuthorization(ctx, "instance2", &certificatemanager.DnsAuthorizationArgs{ -// Description: pulumi.String("The default dnss"), -// Domain: pulumi.String("subdomain2.hashicorptest.com"), -// }) -// if err != nil { -// return err -// } -// _, err = certificatemanager.NewCertificate(ctx, "default", &certificatemanager.CertificateArgs{ +// _, err := certificatemanager.NewCertificate(ctx, "default", &certificatemanager.CertificateArgs{ // Description: pulumi.String("The default cert"), // Scope: pulumi.String("EDGE_CACHE"), -// Managed: &certificatemanager.CertificateManagedArgs{ -// Domains: pulumi.StringArray{ -// instance.Domain, -// instance2.Domain, -// }, -// DnsAuthorizations: pulumi.StringArray{ -// instance.ID(), -// instance2.ID(), -// }, +// SelfManaged: &certificatemanager.CertificateSelfManagedArgs{ +// PemCertificate: readFileOrPanic("test-fixtures/certificatemanager/cert.pem"), +// PemPrivateKey: readFileOrPanic("test-fixtures/certificatemanager/private-key.pem"), // }, // }) // if err != nil { diff --git a/sdk/go/gcp/certificatemanager/pulumiTypes.go b/sdk/go/gcp/certificatemanager/pulumiTypes.go index 1eebbf7a52..2cbd6a11eb 100644 --- a/sdk/go/gcp/certificatemanager/pulumiTypes.go +++ b/sdk/go/gcp/certificatemanager/pulumiTypes.go @@ -750,7 +750,6 @@ type CertificateSelfManaged struct { CertificatePem *string `pulumi:"certificatePem"` // The certificate chain in PEM-encoded form. // Leaf certificate comes first, followed by intermediate ones if any. - // **Note**: This property is sensitive and will not be displayed in the plan. PemCertificate *string `pulumi:"pemCertificate"` // The private key of the leaf certificate in PEM-encoded form. // **Note**: This property is sensitive and will not be displayed in the plan. @@ -784,7 +783,6 @@ type CertificateSelfManagedArgs struct { CertificatePem pulumi.StringPtrInput `pulumi:"certificatePem"` // The certificate chain in PEM-encoded form. // Leaf certificate comes first, followed by intermediate ones if any. - // **Note**: This property is sensitive and will not be displayed in the plan. PemCertificate pulumi.StringPtrInput `pulumi:"pemCertificate"` // The private key of the leaf certificate in PEM-encoded form. // **Note**: This property is sensitive and will not be displayed in the plan. @@ -886,7 +884,6 @@ func (o CertificateSelfManagedOutput) CertificatePem() pulumi.StringPtrOutput { // The certificate chain in PEM-encoded form. // Leaf certificate comes first, followed by intermediate ones if any. -// **Note**: This property is sensitive and will not be displayed in the plan. func (o CertificateSelfManagedOutput) PemCertificate() pulumi.StringPtrOutput { return o.ApplyT(func(v CertificateSelfManaged) *string { return v.PemCertificate }).(pulumi.StringPtrOutput) } @@ -947,7 +944,6 @@ func (o CertificateSelfManagedPtrOutput) CertificatePem() pulumi.StringPtrOutput // The certificate chain in PEM-encoded form. // Leaf certificate comes first, followed by intermediate ones if any. -// **Note**: This property is sensitive and will not be displayed in the plan. func (o CertificateSelfManagedPtrOutput) PemCertificate() pulumi.StringPtrOutput { return o.ApplyT(func(v *CertificateSelfManaged) *string { if v == nil { diff --git a/sdk/go/gcp/cloudbuild/getTrigger.go b/sdk/go/gcp/cloudbuild/getTrigger.go index 74b37b65a9..db866fead9 100644 --- a/sdk/go/gcp/cloudbuild/getTrigger.go +++ b/sdk/go/gcp/cloudbuild/getTrigger.go @@ -74,21 +74,22 @@ type LookupTriggerResult struct { GitFileSources []GetTriggerGitFileSource `pulumi:"gitFileSources"` Githubs []GetTriggerGithub `pulumi:"githubs"` // The provider-assigned unique ID for this managed resource. - Id string `pulumi:"id"` - IgnoredFiles []string `pulumi:"ignoredFiles"` - IncludeBuildLogs string `pulumi:"includeBuildLogs"` - IncludedFiles []string `pulumi:"includedFiles"` - Location string `pulumi:"location"` - Name string `pulumi:"name"` - Project *string `pulumi:"project"` - PubsubConfigs []GetTriggerPubsubConfig `pulumi:"pubsubConfigs"` - ServiceAccount string `pulumi:"serviceAccount"` - SourceToBuilds []GetTriggerSourceToBuild `pulumi:"sourceToBuilds"` - Substitutions map[string]string `pulumi:"substitutions"` - Tags []string `pulumi:"tags"` - TriggerId string `pulumi:"triggerId"` - TriggerTemplates []GetTriggerTriggerTemplate `pulumi:"triggerTemplates"` - WebhookConfigs []GetTriggerWebhookConfig `pulumi:"webhookConfigs"` + Id string `pulumi:"id"` + IgnoredFiles []string `pulumi:"ignoredFiles"` + IncludeBuildLogs string `pulumi:"includeBuildLogs"` + IncludedFiles []string `pulumi:"includedFiles"` + Location string `pulumi:"location"` + Name string `pulumi:"name"` + Project *string `pulumi:"project"` + PubsubConfigs []GetTriggerPubsubConfig `pulumi:"pubsubConfigs"` + RepositoryEventConfigs []GetTriggerRepositoryEventConfig `pulumi:"repositoryEventConfigs"` + ServiceAccount string `pulumi:"serviceAccount"` + SourceToBuilds []GetTriggerSourceToBuild `pulumi:"sourceToBuilds"` + Substitutions map[string]string `pulumi:"substitutions"` + Tags []string `pulumi:"tags"` + TriggerId string `pulumi:"triggerId"` + TriggerTemplates []GetTriggerTriggerTemplate `pulumi:"triggerTemplates"` + WebhookConfigs []GetTriggerWebhookConfig `pulumi:"webhookConfigs"` } func LookupTriggerOutput(ctx *pulumi.Context, args LookupTriggerOutputArgs, opts ...pulumi.InvokeOption) LookupTriggerResultOutput { @@ -202,6 +203,10 @@ func (o LookupTriggerResultOutput) PubsubConfigs() GetTriggerPubsubConfigArrayOu return o.ApplyT(func(v LookupTriggerResult) []GetTriggerPubsubConfig { return v.PubsubConfigs }).(GetTriggerPubsubConfigArrayOutput) } +func (o LookupTriggerResultOutput) RepositoryEventConfigs() GetTriggerRepositoryEventConfigArrayOutput { + return o.ApplyT(func(v LookupTriggerResult) []GetTriggerRepositoryEventConfig { return v.RepositoryEventConfigs }).(GetTriggerRepositoryEventConfigArrayOutput) +} + func (o LookupTriggerResultOutput) ServiceAccount() pulumi.StringOutput { return o.ApplyT(func(v LookupTriggerResult) string { return v.ServiceAccount }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/cloudbuild/pulumiTypes.go b/sdk/go/gcp/cloudbuild/pulumiTypes.go index d8f968cc5c..0516586ba7 100644 --- a/sdk/go/gcp/cloudbuild/pulumiTypes.go +++ b/sdk/go/gcp/cloudbuild/pulumiTypes.go @@ -3100,6 +3100,9 @@ func (o TriggerBuildStepVolumeArrayOutput) Index(i pulumi.IntInput) TriggerBuild } type TriggerGitFileSource struct { + // The full resource name of the github enterprise config. + // Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + GithubEnterpriseConfig *string `pulumi:"githubEnterpriseConfig"` // The path of the file, with the repo root as the root of the path. Path string `pulumi:"path"` // The type of the repo, since it may not be explicit from the repo field (e.g from a URL). @@ -3127,6 +3130,9 @@ type TriggerGitFileSourceInput interface { } type TriggerGitFileSourceArgs struct { + // The full resource name of the github enterprise config. + // Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + GithubEnterpriseConfig pulumi.StringPtrInput `pulumi:"githubEnterpriseConfig"` // The path of the file, with the repo root as the root of the path. Path pulumi.StringInput `pulumi:"path"` // The type of the repo, since it may not be explicit from the repo field (e.g from a URL). @@ -3219,6 +3225,12 @@ func (o TriggerGitFileSourceOutput) ToTriggerGitFileSourcePtrOutputWithContext(c }).(TriggerGitFileSourcePtrOutput) } +// The full resource name of the github enterprise config. +// Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. +func (o TriggerGitFileSourceOutput) GithubEnterpriseConfig() pulumi.StringPtrOutput { + return o.ApplyT(func(v TriggerGitFileSource) *string { return v.GithubEnterpriseConfig }).(pulumi.StringPtrOutput) +} + // The path of the file, with the repo root as the root of the path. func (o TriggerGitFileSourceOutput) Path() pulumi.StringOutput { return o.ApplyT(func(v TriggerGitFileSource) string { return v.Path }).(pulumi.StringOutput) @@ -3268,6 +3280,17 @@ func (o TriggerGitFileSourcePtrOutput) Elem() TriggerGitFileSourceOutput { }).(TriggerGitFileSourceOutput) } +// The full resource name of the github enterprise config. +// Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. +func (o TriggerGitFileSourcePtrOutput) GithubEnterpriseConfig() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TriggerGitFileSource) *string { + if v == nil { + return nil + } + return v.GithubEnterpriseConfig + }).(pulumi.StringPtrOutput) +} + // The path of the file, with the repo root as the root of the path. func (o TriggerGitFileSourcePtrOutput) Path() pulumi.StringPtrOutput { return o.ApplyT(func(v *TriggerGitFileSource) *string { @@ -3965,117 +3988,657 @@ func (i *triggerPubsubConfigPtrType) ToTriggerPubsubConfigPtrOutputWithContext(c return pulumi.ToOutputWithContext(ctx, i).(TriggerPubsubConfigPtrOutput) } -type TriggerPubsubConfigOutput struct{ *pulumi.OutputState } +type TriggerPubsubConfigOutput struct{ *pulumi.OutputState } + +func (TriggerPubsubConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*TriggerPubsubConfig)(nil)).Elem() +} + +func (o TriggerPubsubConfigOutput) ToTriggerPubsubConfigOutput() TriggerPubsubConfigOutput { + return o +} + +func (o TriggerPubsubConfigOutput) ToTriggerPubsubConfigOutputWithContext(ctx context.Context) TriggerPubsubConfigOutput { + return o +} + +func (o TriggerPubsubConfigOutput) ToTriggerPubsubConfigPtrOutput() TriggerPubsubConfigPtrOutput { + return o.ToTriggerPubsubConfigPtrOutputWithContext(context.Background()) +} + +func (o TriggerPubsubConfigOutput) ToTriggerPubsubConfigPtrOutputWithContext(ctx context.Context) TriggerPubsubConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v TriggerPubsubConfig) *TriggerPubsubConfig { + return &v + }).(TriggerPubsubConfigPtrOutput) +} + +// Service account that will make the push request. +func (o TriggerPubsubConfigOutput) ServiceAccountEmail() pulumi.StringPtrOutput { + return o.ApplyT(func(v TriggerPubsubConfig) *string { return v.ServiceAccountEmail }).(pulumi.StringPtrOutput) +} + +// Potential issues with the underlying Pub/Sub subscription configuration. +// Only populated on get requests. +func (o TriggerPubsubConfigOutput) State() pulumi.StringPtrOutput { + return o.ApplyT(func(v TriggerPubsubConfig) *string { return v.State }).(pulumi.StringPtrOutput) +} + +// Output only. Name of the subscription. +func (o TriggerPubsubConfigOutput) Subscription() pulumi.StringPtrOutput { + return o.ApplyT(func(v TriggerPubsubConfig) *string { return v.Subscription }).(pulumi.StringPtrOutput) +} + +// The name of the topic from which this subscription is receiving messages. +func (o TriggerPubsubConfigOutput) Topic() pulumi.StringOutput { + return o.ApplyT(func(v TriggerPubsubConfig) string { return v.Topic }).(pulumi.StringOutput) +} + +type TriggerPubsubConfigPtrOutput struct{ *pulumi.OutputState } + +func (TriggerPubsubConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TriggerPubsubConfig)(nil)).Elem() +} + +func (o TriggerPubsubConfigPtrOutput) ToTriggerPubsubConfigPtrOutput() TriggerPubsubConfigPtrOutput { + return o +} + +func (o TriggerPubsubConfigPtrOutput) ToTriggerPubsubConfigPtrOutputWithContext(ctx context.Context) TriggerPubsubConfigPtrOutput { + return o +} + +func (o TriggerPubsubConfigPtrOutput) Elem() TriggerPubsubConfigOutput { + return o.ApplyT(func(v *TriggerPubsubConfig) TriggerPubsubConfig { + if v != nil { + return *v + } + var ret TriggerPubsubConfig + return ret + }).(TriggerPubsubConfigOutput) +} + +// Service account that will make the push request. +func (o TriggerPubsubConfigPtrOutput) ServiceAccountEmail() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TriggerPubsubConfig) *string { + if v == nil { + return nil + } + return v.ServiceAccountEmail + }).(pulumi.StringPtrOutput) +} + +// Potential issues with the underlying Pub/Sub subscription configuration. +// Only populated on get requests. +func (o TriggerPubsubConfigPtrOutput) State() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TriggerPubsubConfig) *string { + if v == nil { + return nil + } + return v.State + }).(pulumi.StringPtrOutput) +} + +// Output only. Name of the subscription. +func (o TriggerPubsubConfigPtrOutput) Subscription() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TriggerPubsubConfig) *string { + if v == nil { + return nil + } + return v.Subscription + }).(pulumi.StringPtrOutput) +} + +// The name of the topic from which this subscription is receiving messages. +func (o TriggerPubsubConfigPtrOutput) Topic() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TriggerPubsubConfig) *string { + if v == nil { + return nil + } + return &v.Topic + }).(pulumi.StringPtrOutput) +} + +type TriggerRepositoryEventConfig struct { + // Contains filter properties for matching Pull Requests. + // Structure is documented below. + PullRequest *TriggerRepositoryEventConfigPullRequest `pulumi:"pullRequest"` + // Contains filter properties for matching git pushes. + // Structure is documented below. + Push *TriggerRepositoryEventConfigPush `pulumi:"push"` + // The resource name of the Repo API resource. + Repository *string `pulumi:"repository"` +} + +// TriggerRepositoryEventConfigInput is an input type that accepts TriggerRepositoryEventConfigArgs and TriggerRepositoryEventConfigOutput values. +// You can construct a concrete instance of `TriggerRepositoryEventConfigInput` via: +// +// TriggerRepositoryEventConfigArgs{...} +type TriggerRepositoryEventConfigInput interface { + pulumi.Input + + ToTriggerRepositoryEventConfigOutput() TriggerRepositoryEventConfigOutput + ToTriggerRepositoryEventConfigOutputWithContext(context.Context) TriggerRepositoryEventConfigOutput +} + +type TriggerRepositoryEventConfigArgs struct { + // Contains filter properties for matching Pull Requests. + // Structure is documented below. + PullRequest TriggerRepositoryEventConfigPullRequestPtrInput `pulumi:"pullRequest"` + // Contains filter properties for matching git pushes. + // Structure is documented below. + Push TriggerRepositoryEventConfigPushPtrInput `pulumi:"push"` + // The resource name of the Repo API resource. + Repository pulumi.StringPtrInput `pulumi:"repository"` +} + +func (TriggerRepositoryEventConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*TriggerRepositoryEventConfig)(nil)).Elem() +} + +func (i TriggerRepositoryEventConfigArgs) ToTriggerRepositoryEventConfigOutput() TriggerRepositoryEventConfigOutput { + return i.ToTriggerRepositoryEventConfigOutputWithContext(context.Background()) +} + +func (i TriggerRepositoryEventConfigArgs) ToTriggerRepositoryEventConfigOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(TriggerRepositoryEventConfigOutput) +} + +func (i TriggerRepositoryEventConfigArgs) ToTriggerRepositoryEventConfigPtrOutput() TriggerRepositoryEventConfigPtrOutput { + return i.ToTriggerRepositoryEventConfigPtrOutputWithContext(context.Background()) +} + +func (i TriggerRepositoryEventConfigArgs) ToTriggerRepositoryEventConfigPtrOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TriggerRepositoryEventConfigOutput).ToTriggerRepositoryEventConfigPtrOutputWithContext(ctx) +} + +// TriggerRepositoryEventConfigPtrInput is an input type that accepts TriggerRepositoryEventConfigArgs, TriggerRepositoryEventConfigPtr and TriggerRepositoryEventConfigPtrOutput values. +// You can construct a concrete instance of `TriggerRepositoryEventConfigPtrInput` via: +// +// TriggerRepositoryEventConfigArgs{...} +// +// or: +// +// nil +type TriggerRepositoryEventConfigPtrInput interface { + pulumi.Input + + ToTriggerRepositoryEventConfigPtrOutput() TriggerRepositoryEventConfigPtrOutput + ToTriggerRepositoryEventConfigPtrOutputWithContext(context.Context) TriggerRepositoryEventConfigPtrOutput +} + +type triggerRepositoryEventConfigPtrType TriggerRepositoryEventConfigArgs + +func TriggerRepositoryEventConfigPtr(v *TriggerRepositoryEventConfigArgs) TriggerRepositoryEventConfigPtrInput { + return (*triggerRepositoryEventConfigPtrType)(v) +} + +func (*triggerRepositoryEventConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**TriggerRepositoryEventConfig)(nil)).Elem() +} + +func (i *triggerRepositoryEventConfigPtrType) ToTriggerRepositoryEventConfigPtrOutput() TriggerRepositoryEventConfigPtrOutput { + return i.ToTriggerRepositoryEventConfigPtrOutputWithContext(context.Background()) +} + +func (i *triggerRepositoryEventConfigPtrType) ToTriggerRepositoryEventConfigPtrOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TriggerRepositoryEventConfigPtrOutput) +} + +type TriggerRepositoryEventConfigOutput struct{ *pulumi.OutputState } + +func (TriggerRepositoryEventConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*TriggerRepositoryEventConfig)(nil)).Elem() +} + +func (o TriggerRepositoryEventConfigOutput) ToTriggerRepositoryEventConfigOutput() TriggerRepositoryEventConfigOutput { + return o +} + +func (o TriggerRepositoryEventConfigOutput) ToTriggerRepositoryEventConfigOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigOutput { + return o +} + +func (o TriggerRepositoryEventConfigOutput) ToTriggerRepositoryEventConfigPtrOutput() TriggerRepositoryEventConfigPtrOutput { + return o.ToTriggerRepositoryEventConfigPtrOutputWithContext(context.Background()) +} + +func (o TriggerRepositoryEventConfigOutput) ToTriggerRepositoryEventConfigPtrOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v TriggerRepositoryEventConfig) *TriggerRepositoryEventConfig { + return &v + }).(TriggerRepositoryEventConfigPtrOutput) +} + +// Contains filter properties for matching Pull Requests. +// Structure is documented below. +func (o TriggerRepositoryEventConfigOutput) PullRequest() TriggerRepositoryEventConfigPullRequestPtrOutput { + return o.ApplyT(func(v TriggerRepositoryEventConfig) *TriggerRepositoryEventConfigPullRequest { return v.PullRequest }).(TriggerRepositoryEventConfigPullRequestPtrOutput) +} + +// Contains filter properties for matching git pushes. +// Structure is documented below. +func (o TriggerRepositoryEventConfigOutput) Push() TriggerRepositoryEventConfigPushPtrOutput { + return o.ApplyT(func(v TriggerRepositoryEventConfig) *TriggerRepositoryEventConfigPush { return v.Push }).(TriggerRepositoryEventConfigPushPtrOutput) +} + +// The resource name of the Repo API resource. +func (o TriggerRepositoryEventConfigOutput) Repository() pulumi.StringPtrOutput { + return o.ApplyT(func(v TriggerRepositoryEventConfig) *string { return v.Repository }).(pulumi.StringPtrOutput) +} + +type TriggerRepositoryEventConfigPtrOutput struct{ *pulumi.OutputState } + +func (TriggerRepositoryEventConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TriggerRepositoryEventConfig)(nil)).Elem() +} + +func (o TriggerRepositoryEventConfigPtrOutput) ToTriggerRepositoryEventConfigPtrOutput() TriggerRepositoryEventConfigPtrOutput { + return o +} + +func (o TriggerRepositoryEventConfigPtrOutput) ToTriggerRepositoryEventConfigPtrOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPtrOutput { + return o +} + +func (o TriggerRepositoryEventConfigPtrOutput) Elem() TriggerRepositoryEventConfigOutput { + return o.ApplyT(func(v *TriggerRepositoryEventConfig) TriggerRepositoryEventConfig { + if v != nil { + return *v + } + var ret TriggerRepositoryEventConfig + return ret + }).(TriggerRepositoryEventConfigOutput) +} + +// Contains filter properties for matching Pull Requests. +// Structure is documented below. +func (o TriggerRepositoryEventConfigPtrOutput) PullRequest() TriggerRepositoryEventConfigPullRequestPtrOutput { + return o.ApplyT(func(v *TriggerRepositoryEventConfig) *TriggerRepositoryEventConfigPullRequest { + if v == nil { + return nil + } + return v.PullRequest + }).(TriggerRepositoryEventConfigPullRequestPtrOutput) +} + +// Contains filter properties for matching git pushes. +// Structure is documented below. +func (o TriggerRepositoryEventConfigPtrOutput) Push() TriggerRepositoryEventConfigPushPtrOutput { + return o.ApplyT(func(v *TriggerRepositoryEventConfig) *TriggerRepositoryEventConfigPush { + if v == nil { + return nil + } + return v.Push + }).(TriggerRepositoryEventConfigPushPtrOutput) +} + +// The resource name of the Repo API resource. +func (o TriggerRepositoryEventConfigPtrOutput) Repository() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TriggerRepositoryEventConfig) *string { + if v == nil { + return nil + } + return v.Repository + }).(pulumi.StringPtrOutput) +} + +type TriggerRepositoryEventConfigPullRequest struct { + // Regex of branches to match. + Branch *string `pulumi:"branch"` + // Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + // Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + CommentControl *string `pulumi:"commentControl"` + // If true, branches that do NOT match the gitRef will trigger a build. + InvertRegex *bool `pulumi:"invertRegex"` +} + +// TriggerRepositoryEventConfigPullRequestInput is an input type that accepts TriggerRepositoryEventConfigPullRequestArgs and TriggerRepositoryEventConfigPullRequestOutput values. +// You can construct a concrete instance of `TriggerRepositoryEventConfigPullRequestInput` via: +// +// TriggerRepositoryEventConfigPullRequestArgs{...} +type TriggerRepositoryEventConfigPullRequestInput interface { + pulumi.Input + + ToTriggerRepositoryEventConfigPullRequestOutput() TriggerRepositoryEventConfigPullRequestOutput + ToTriggerRepositoryEventConfigPullRequestOutputWithContext(context.Context) TriggerRepositoryEventConfigPullRequestOutput +} + +type TriggerRepositoryEventConfigPullRequestArgs struct { + // Regex of branches to match. + Branch pulumi.StringPtrInput `pulumi:"branch"` + // Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + // Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + CommentControl pulumi.StringPtrInput `pulumi:"commentControl"` + // If true, branches that do NOT match the gitRef will trigger a build. + InvertRegex pulumi.BoolPtrInput `pulumi:"invertRegex"` +} + +func (TriggerRepositoryEventConfigPullRequestArgs) ElementType() reflect.Type { + return reflect.TypeOf((*TriggerRepositoryEventConfigPullRequest)(nil)).Elem() +} + +func (i TriggerRepositoryEventConfigPullRequestArgs) ToTriggerRepositoryEventConfigPullRequestOutput() TriggerRepositoryEventConfigPullRequestOutput { + return i.ToTriggerRepositoryEventConfigPullRequestOutputWithContext(context.Background()) +} + +func (i TriggerRepositoryEventConfigPullRequestArgs) ToTriggerRepositoryEventConfigPullRequestOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPullRequestOutput { + return pulumi.ToOutputWithContext(ctx, i).(TriggerRepositoryEventConfigPullRequestOutput) +} + +func (i TriggerRepositoryEventConfigPullRequestArgs) ToTriggerRepositoryEventConfigPullRequestPtrOutput() TriggerRepositoryEventConfigPullRequestPtrOutput { + return i.ToTriggerRepositoryEventConfigPullRequestPtrOutputWithContext(context.Background()) +} + +func (i TriggerRepositoryEventConfigPullRequestArgs) ToTriggerRepositoryEventConfigPullRequestPtrOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPullRequestPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TriggerRepositoryEventConfigPullRequestOutput).ToTriggerRepositoryEventConfigPullRequestPtrOutputWithContext(ctx) +} + +// TriggerRepositoryEventConfigPullRequestPtrInput is an input type that accepts TriggerRepositoryEventConfigPullRequestArgs, TriggerRepositoryEventConfigPullRequestPtr and TriggerRepositoryEventConfigPullRequestPtrOutput values. +// You can construct a concrete instance of `TriggerRepositoryEventConfigPullRequestPtrInput` via: +// +// TriggerRepositoryEventConfigPullRequestArgs{...} +// +// or: +// +// nil +type TriggerRepositoryEventConfigPullRequestPtrInput interface { + pulumi.Input + + ToTriggerRepositoryEventConfigPullRequestPtrOutput() TriggerRepositoryEventConfigPullRequestPtrOutput + ToTriggerRepositoryEventConfigPullRequestPtrOutputWithContext(context.Context) TriggerRepositoryEventConfigPullRequestPtrOutput +} + +type triggerRepositoryEventConfigPullRequestPtrType TriggerRepositoryEventConfigPullRequestArgs + +func TriggerRepositoryEventConfigPullRequestPtr(v *TriggerRepositoryEventConfigPullRequestArgs) TriggerRepositoryEventConfigPullRequestPtrInput { + return (*triggerRepositoryEventConfigPullRequestPtrType)(v) +} + +func (*triggerRepositoryEventConfigPullRequestPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**TriggerRepositoryEventConfigPullRequest)(nil)).Elem() +} + +func (i *triggerRepositoryEventConfigPullRequestPtrType) ToTriggerRepositoryEventConfigPullRequestPtrOutput() TriggerRepositoryEventConfigPullRequestPtrOutput { + return i.ToTriggerRepositoryEventConfigPullRequestPtrOutputWithContext(context.Background()) +} + +func (i *triggerRepositoryEventConfigPullRequestPtrType) ToTriggerRepositoryEventConfigPullRequestPtrOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPullRequestPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TriggerRepositoryEventConfigPullRequestPtrOutput) +} + +type TriggerRepositoryEventConfigPullRequestOutput struct{ *pulumi.OutputState } + +func (TriggerRepositoryEventConfigPullRequestOutput) ElementType() reflect.Type { + return reflect.TypeOf((*TriggerRepositoryEventConfigPullRequest)(nil)).Elem() +} + +func (o TriggerRepositoryEventConfigPullRequestOutput) ToTriggerRepositoryEventConfigPullRequestOutput() TriggerRepositoryEventConfigPullRequestOutput { + return o +} + +func (o TriggerRepositoryEventConfigPullRequestOutput) ToTriggerRepositoryEventConfigPullRequestOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPullRequestOutput { + return o +} + +func (o TriggerRepositoryEventConfigPullRequestOutput) ToTriggerRepositoryEventConfigPullRequestPtrOutput() TriggerRepositoryEventConfigPullRequestPtrOutput { + return o.ToTriggerRepositoryEventConfigPullRequestPtrOutputWithContext(context.Background()) +} + +func (o TriggerRepositoryEventConfigPullRequestOutput) ToTriggerRepositoryEventConfigPullRequestPtrOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPullRequestPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v TriggerRepositoryEventConfigPullRequest) *TriggerRepositoryEventConfigPullRequest { + return &v + }).(TriggerRepositoryEventConfigPullRequestPtrOutput) +} + +// Regex of branches to match. +func (o TriggerRepositoryEventConfigPullRequestOutput) Branch() pulumi.StringPtrOutput { + return o.ApplyT(func(v TriggerRepositoryEventConfigPullRequest) *string { return v.Branch }).(pulumi.StringPtrOutput) +} + +// Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. +// Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. +func (o TriggerRepositoryEventConfigPullRequestOutput) CommentControl() pulumi.StringPtrOutput { + return o.ApplyT(func(v TriggerRepositoryEventConfigPullRequest) *string { return v.CommentControl }).(pulumi.StringPtrOutput) +} + +// If true, branches that do NOT match the gitRef will trigger a build. +func (o TriggerRepositoryEventConfigPullRequestOutput) InvertRegex() pulumi.BoolPtrOutput { + return o.ApplyT(func(v TriggerRepositoryEventConfigPullRequest) *bool { return v.InvertRegex }).(pulumi.BoolPtrOutput) +} + +type TriggerRepositoryEventConfigPullRequestPtrOutput struct{ *pulumi.OutputState } + +func (TriggerRepositoryEventConfigPullRequestPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TriggerRepositoryEventConfigPullRequest)(nil)).Elem() +} + +func (o TriggerRepositoryEventConfigPullRequestPtrOutput) ToTriggerRepositoryEventConfigPullRequestPtrOutput() TriggerRepositoryEventConfigPullRequestPtrOutput { + return o +} + +func (o TriggerRepositoryEventConfigPullRequestPtrOutput) ToTriggerRepositoryEventConfigPullRequestPtrOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPullRequestPtrOutput { + return o +} + +func (o TriggerRepositoryEventConfigPullRequestPtrOutput) Elem() TriggerRepositoryEventConfigPullRequestOutput { + return o.ApplyT(func(v *TriggerRepositoryEventConfigPullRequest) TriggerRepositoryEventConfigPullRequest { + if v != nil { + return *v + } + var ret TriggerRepositoryEventConfigPullRequest + return ret + }).(TriggerRepositoryEventConfigPullRequestOutput) +} + +// Regex of branches to match. +func (o TriggerRepositoryEventConfigPullRequestPtrOutput) Branch() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TriggerRepositoryEventConfigPullRequest) *string { + if v == nil { + return nil + } + return v.Branch + }).(pulumi.StringPtrOutput) +} + +// Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. +// Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. +func (o TriggerRepositoryEventConfigPullRequestPtrOutput) CommentControl() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TriggerRepositoryEventConfigPullRequest) *string { + if v == nil { + return nil + } + return v.CommentControl + }).(pulumi.StringPtrOutput) +} + +// If true, branches that do NOT match the gitRef will trigger a build. +func (o TriggerRepositoryEventConfigPullRequestPtrOutput) InvertRegex() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *TriggerRepositoryEventConfigPullRequest) *bool { + if v == nil { + return nil + } + return v.InvertRegex + }).(pulumi.BoolPtrOutput) +} + +type TriggerRepositoryEventConfigPush struct { + // Regex of branches to match. Specify only one of branch or tag. + Branch *string `pulumi:"branch"` + // When true, only trigger a build if the revision regex does NOT match the gitRef regex. + InvertRegex *bool `pulumi:"invertRegex"` + // Regex of tags to match. Specify only one of branch or tag. + Tag *string `pulumi:"tag"` +} + +// TriggerRepositoryEventConfigPushInput is an input type that accepts TriggerRepositoryEventConfigPushArgs and TriggerRepositoryEventConfigPushOutput values. +// You can construct a concrete instance of `TriggerRepositoryEventConfigPushInput` via: +// +// TriggerRepositoryEventConfigPushArgs{...} +type TriggerRepositoryEventConfigPushInput interface { + pulumi.Input + + ToTriggerRepositoryEventConfigPushOutput() TriggerRepositoryEventConfigPushOutput + ToTriggerRepositoryEventConfigPushOutputWithContext(context.Context) TriggerRepositoryEventConfigPushOutput +} + +type TriggerRepositoryEventConfigPushArgs struct { + // Regex of branches to match. Specify only one of branch or tag. + Branch pulumi.StringPtrInput `pulumi:"branch"` + // When true, only trigger a build if the revision regex does NOT match the gitRef regex. + InvertRegex pulumi.BoolPtrInput `pulumi:"invertRegex"` + // Regex of tags to match. Specify only one of branch or tag. + Tag pulumi.StringPtrInput `pulumi:"tag"` +} + +func (TriggerRepositoryEventConfigPushArgs) ElementType() reflect.Type { + return reflect.TypeOf((*TriggerRepositoryEventConfigPush)(nil)).Elem() +} + +func (i TriggerRepositoryEventConfigPushArgs) ToTriggerRepositoryEventConfigPushOutput() TriggerRepositoryEventConfigPushOutput { + return i.ToTriggerRepositoryEventConfigPushOutputWithContext(context.Background()) +} + +func (i TriggerRepositoryEventConfigPushArgs) ToTriggerRepositoryEventConfigPushOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPushOutput { + return pulumi.ToOutputWithContext(ctx, i).(TriggerRepositoryEventConfigPushOutput) +} + +func (i TriggerRepositoryEventConfigPushArgs) ToTriggerRepositoryEventConfigPushPtrOutput() TriggerRepositoryEventConfigPushPtrOutput { + return i.ToTriggerRepositoryEventConfigPushPtrOutputWithContext(context.Background()) +} + +func (i TriggerRepositoryEventConfigPushArgs) ToTriggerRepositoryEventConfigPushPtrOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPushPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TriggerRepositoryEventConfigPushOutput).ToTriggerRepositoryEventConfigPushPtrOutputWithContext(ctx) +} + +// TriggerRepositoryEventConfigPushPtrInput is an input type that accepts TriggerRepositoryEventConfigPushArgs, TriggerRepositoryEventConfigPushPtr and TriggerRepositoryEventConfigPushPtrOutput values. +// You can construct a concrete instance of `TriggerRepositoryEventConfigPushPtrInput` via: +// +// TriggerRepositoryEventConfigPushArgs{...} +// +// or: +// +// nil +type TriggerRepositoryEventConfigPushPtrInput interface { + pulumi.Input + + ToTriggerRepositoryEventConfigPushPtrOutput() TriggerRepositoryEventConfigPushPtrOutput + ToTriggerRepositoryEventConfigPushPtrOutputWithContext(context.Context) TriggerRepositoryEventConfigPushPtrOutput +} + +type triggerRepositoryEventConfigPushPtrType TriggerRepositoryEventConfigPushArgs + +func TriggerRepositoryEventConfigPushPtr(v *TriggerRepositoryEventConfigPushArgs) TriggerRepositoryEventConfigPushPtrInput { + return (*triggerRepositoryEventConfigPushPtrType)(v) +} + +func (*triggerRepositoryEventConfigPushPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**TriggerRepositoryEventConfigPush)(nil)).Elem() +} + +func (i *triggerRepositoryEventConfigPushPtrType) ToTriggerRepositoryEventConfigPushPtrOutput() TriggerRepositoryEventConfigPushPtrOutput { + return i.ToTriggerRepositoryEventConfigPushPtrOutputWithContext(context.Background()) +} + +func (i *triggerRepositoryEventConfigPushPtrType) ToTriggerRepositoryEventConfigPushPtrOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPushPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(TriggerRepositoryEventConfigPushPtrOutput) +} + +type TriggerRepositoryEventConfigPushOutput struct{ *pulumi.OutputState } -func (TriggerPubsubConfigOutput) ElementType() reflect.Type { - return reflect.TypeOf((*TriggerPubsubConfig)(nil)).Elem() +func (TriggerRepositoryEventConfigPushOutput) ElementType() reflect.Type { + return reflect.TypeOf((*TriggerRepositoryEventConfigPush)(nil)).Elem() } -func (o TriggerPubsubConfigOutput) ToTriggerPubsubConfigOutput() TriggerPubsubConfigOutput { +func (o TriggerRepositoryEventConfigPushOutput) ToTriggerRepositoryEventConfigPushOutput() TriggerRepositoryEventConfigPushOutput { return o } -func (o TriggerPubsubConfigOutput) ToTriggerPubsubConfigOutputWithContext(ctx context.Context) TriggerPubsubConfigOutput { +func (o TriggerRepositoryEventConfigPushOutput) ToTriggerRepositoryEventConfigPushOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPushOutput { return o } -func (o TriggerPubsubConfigOutput) ToTriggerPubsubConfigPtrOutput() TriggerPubsubConfigPtrOutput { - return o.ToTriggerPubsubConfigPtrOutputWithContext(context.Background()) +func (o TriggerRepositoryEventConfigPushOutput) ToTriggerRepositoryEventConfigPushPtrOutput() TriggerRepositoryEventConfigPushPtrOutput { + return o.ToTriggerRepositoryEventConfigPushPtrOutputWithContext(context.Background()) } -func (o TriggerPubsubConfigOutput) ToTriggerPubsubConfigPtrOutputWithContext(ctx context.Context) TriggerPubsubConfigPtrOutput { - return o.ApplyTWithContext(ctx, func(_ context.Context, v TriggerPubsubConfig) *TriggerPubsubConfig { +func (o TriggerRepositoryEventConfigPushOutput) ToTriggerRepositoryEventConfigPushPtrOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPushPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v TriggerRepositoryEventConfigPush) *TriggerRepositoryEventConfigPush { return &v - }).(TriggerPubsubConfigPtrOutput) -} - -// Service account that will make the push request. -func (o TriggerPubsubConfigOutput) ServiceAccountEmail() pulumi.StringPtrOutput { - return o.ApplyT(func(v TriggerPubsubConfig) *string { return v.ServiceAccountEmail }).(pulumi.StringPtrOutput) + }).(TriggerRepositoryEventConfigPushPtrOutput) } -// Potential issues with the underlying Pub/Sub subscription configuration. -// Only populated on get requests. -func (o TriggerPubsubConfigOutput) State() pulumi.StringPtrOutput { - return o.ApplyT(func(v TriggerPubsubConfig) *string { return v.State }).(pulumi.StringPtrOutput) +// Regex of branches to match. Specify only one of branch or tag. +func (o TriggerRepositoryEventConfigPushOutput) Branch() pulumi.StringPtrOutput { + return o.ApplyT(func(v TriggerRepositoryEventConfigPush) *string { return v.Branch }).(pulumi.StringPtrOutput) } -// Output only. Name of the subscription. -func (o TriggerPubsubConfigOutput) Subscription() pulumi.StringPtrOutput { - return o.ApplyT(func(v TriggerPubsubConfig) *string { return v.Subscription }).(pulumi.StringPtrOutput) +// When true, only trigger a build if the revision regex does NOT match the gitRef regex. +func (o TriggerRepositoryEventConfigPushOutput) InvertRegex() pulumi.BoolPtrOutput { + return o.ApplyT(func(v TriggerRepositoryEventConfigPush) *bool { return v.InvertRegex }).(pulumi.BoolPtrOutput) } -// The name of the topic from which this subscription is receiving messages. -func (o TriggerPubsubConfigOutput) Topic() pulumi.StringOutput { - return o.ApplyT(func(v TriggerPubsubConfig) string { return v.Topic }).(pulumi.StringOutput) +// Regex of tags to match. Specify only one of branch or tag. +func (o TriggerRepositoryEventConfigPushOutput) Tag() pulumi.StringPtrOutput { + return o.ApplyT(func(v TriggerRepositoryEventConfigPush) *string { return v.Tag }).(pulumi.StringPtrOutput) } -type TriggerPubsubConfigPtrOutput struct{ *pulumi.OutputState } +type TriggerRepositoryEventConfigPushPtrOutput struct{ *pulumi.OutputState } -func (TriggerPubsubConfigPtrOutput) ElementType() reflect.Type { - return reflect.TypeOf((**TriggerPubsubConfig)(nil)).Elem() +func (TriggerRepositoryEventConfigPushPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**TriggerRepositoryEventConfigPush)(nil)).Elem() } -func (o TriggerPubsubConfigPtrOutput) ToTriggerPubsubConfigPtrOutput() TriggerPubsubConfigPtrOutput { +func (o TriggerRepositoryEventConfigPushPtrOutput) ToTriggerRepositoryEventConfigPushPtrOutput() TriggerRepositoryEventConfigPushPtrOutput { return o } -func (o TriggerPubsubConfigPtrOutput) ToTriggerPubsubConfigPtrOutputWithContext(ctx context.Context) TriggerPubsubConfigPtrOutput { +func (o TriggerRepositoryEventConfigPushPtrOutput) ToTriggerRepositoryEventConfigPushPtrOutputWithContext(ctx context.Context) TriggerRepositoryEventConfigPushPtrOutput { return o } -func (o TriggerPubsubConfigPtrOutput) Elem() TriggerPubsubConfigOutput { - return o.ApplyT(func(v *TriggerPubsubConfig) TriggerPubsubConfig { +func (o TriggerRepositoryEventConfigPushPtrOutput) Elem() TriggerRepositoryEventConfigPushOutput { + return o.ApplyT(func(v *TriggerRepositoryEventConfigPush) TriggerRepositoryEventConfigPush { if v != nil { return *v } - var ret TriggerPubsubConfig + var ret TriggerRepositoryEventConfigPush return ret - }).(TriggerPubsubConfigOutput) -} - -// Service account that will make the push request. -func (o TriggerPubsubConfigPtrOutput) ServiceAccountEmail() pulumi.StringPtrOutput { - return o.ApplyT(func(v *TriggerPubsubConfig) *string { - if v == nil { - return nil - } - return v.ServiceAccountEmail - }).(pulumi.StringPtrOutput) + }).(TriggerRepositoryEventConfigPushOutput) } -// Potential issues with the underlying Pub/Sub subscription configuration. -// Only populated on get requests. -func (o TriggerPubsubConfigPtrOutput) State() pulumi.StringPtrOutput { - return o.ApplyT(func(v *TriggerPubsubConfig) *string { +// Regex of branches to match. Specify only one of branch or tag. +func (o TriggerRepositoryEventConfigPushPtrOutput) Branch() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TriggerRepositoryEventConfigPush) *string { if v == nil { return nil } - return v.State + return v.Branch }).(pulumi.StringPtrOutput) } -// Output only. Name of the subscription. -func (o TriggerPubsubConfigPtrOutput) Subscription() pulumi.StringPtrOutput { - return o.ApplyT(func(v *TriggerPubsubConfig) *string { +// When true, only trigger a build if the revision regex does NOT match the gitRef regex. +func (o TriggerRepositoryEventConfigPushPtrOutput) InvertRegex() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *TriggerRepositoryEventConfigPush) *bool { if v == nil { return nil } - return v.Subscription - }).(pulumi.StringPtrOutput) + return v.InvertRegex + }).(pulumi.BoolPtrOutput) } -// The name of the topic from which this subscription is receiving messages. -func (o TriggerPubsubConfigPtrOutput) Topic() pulumi.StringPtrOutput { - return o.ApplyT(func(v *TriggerPubsubConfig) *string { +// Regex of tags to match. Specify only one of branch or tag. +func (o TriggerRepositoryEventConfigPushPtrOutput) Tag() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TriggerRepositoryEventConfigPush) *string { if v == nil { return nil } - return &v.Topic + return v.Tag }).(pulumi.StringPtrOutput) } type TriggerSourceToBuild struct { + // The full resource name of the github enterprise config. + // Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + GithubEnterpriseConfig *string `pulumi:"githubEnterpriseConfig"` // The branch or tag to use. Must start with "refs/" (required). Ref string `pulumi:"ref"` // The type of the repo, since it may not be explicit from the repo field (e.g from a URL). @@ -4098,6 +4661,9 @@ type TriggerSourceToBuildInput interface { } type TriggerSourceToBuildArgs struct { + // The full resource name of the github enterprise config. + // Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + GithubEnterpriseConfig pulumi.StringPtrInput `pulumi:"githubEnterpriseConfig"` // The branch or tag to use. Must start with "refs/" (required). Ref pulumi.StringInput `pulumi:"ref"` // The type of the repo, since it may not be explicit from the repo field (e.g from a URL). @@ -4185,6 +4751,12 @@ func (o TriggerSourceToBuildOutput) ToTriggerSourceToBuildPtrOutputWithContext(c }).(TriggerSourceToBuildPtrOutput) } +// The full resource name of the github enterprise config. +// Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. +func (o TriggerSourceToBuildOutput) GithubEnterpriseConfig() pulumi.StringPtrOutput { + return o.ApplyT(func(v TriggerSourceToBuild) *string { return v.GithubEnterpriseConfig }).(pulumi.StringPtrOutput) +} + // The branch or tag to use. Must start with "refs/" (required). func (o TriggerSourceToBuildOutput) Ref() pulumi.StringOutput { return o.ApplyT(func(v TriggerSourceToBuild) string { return v.Ref }).(pulumi.StringOutput) @@ -4226,6 +4798,17 @@ func (o TriggerSourceToBuildPtrOutput) Elem() TriggerSourceToBuildOutput { }).(TriggerSourceToBuildOutput) } +// The full resource name of the github enterprise config. +// Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. +func (o TriggerSourceToBuildPtrOutput) GithubEnterpriseConfig() pulumi.StringPtrOutput { + return o.ApplyT(func(v *TriggerSourceToBuild) *string { + if v == nil { + return nil + } + return v.GithubEnterpriseConfig + }).(pulumi.StringPtrOutput) +} + // The branch or tag to use. Must start with "refs/" (required). func (o TriggerSourceToBuildPtrOutput) Ref() pulumi.StringPtrOutput { return o.ApplyT(func(v *TriggerSourceToBuild) *string { @@ -6727,10 +7310,11 @@ func (o GetTriggerBuildStepVolumeArrayOutput) Index(i pulumi.IntInput) GetTrigge } type GetTriggerGitFileSource struct { - Path string `pulumi:"path"` - RepoType string `pulumi:"repoType"` - Revision string `pulumi:"revision"` - Uri string `pulumi:"uri"` + GithubEnterpriseConfig string `pulumi:"githubEnterpriseConfig"` + Path string `pulumi:"path"` + RepoType string `pulumi:"repoType"` + Revision string `pulumi:"revision"` + Uri string `pulumi:"uri"` } // GetTriggerGitFileSourceInput is an input type that accepts GetTriggerGitFileSourceArgs and GetTriggerGitFileSourceOutput values. @@ -6745,10 +7329,11 @@ type GetTriggerGitFileSourceInput interface { } type GetTriggerGitFileSourceArgs struct { - Path pulumi.StringInput `pulumi:"path"` - RepoType pulumi.StringInput `pulumi:"repoType"` - Revision pulumi.StringInput `pulumi:"revision"` - Uri pulumi.StringInput `pulumi:"uri"` + GithubEnterpriseConfig pulumi.StringInput `pulumi:"githubEnterpriseConfig"` + Path pulumi.StringInput `pulumi:"path"` + RepoType pulumi.StringInput `pulumi:"repoType"` + Revision pulumi.StringInput `pulumi:"revision"` + Uri pulumi.StringInput `pulumi:"uri"` } func (GetTriggerGitFileSourceArgs) ElementType() reflect.Type { @@ -6802,6 +7387,10 @@ func (o GetTriggerGitFileSourceOutput) ToGetTriggerGitFileSourceOutputWithContex return o } +func (o GetTriggerGitFileSourceOutput) GithubEnterpriseConfig() pulumi.StringOutput { + return o.ApplyT(func(v GetTriggerGitFileSource) string { return v.GithubEnterpriseConfig }).(pulumi.StringOutput) +} + func (o GetTriggerGitFileSourceOutput) Path() pulumi.StringOutput { return o.ApplyT(func(v GetTriggerGitFileSource) string { return v.Path }).(pulumi.StringOutput) } @@ -7274,10 +7863,331 @@ func (o GetTriggerPubsubConfigArrayOutput) Index(i pulumi.IntInput) GetTriggerPu }).(GetTriggerPubsubConfigOutput) } +type GetTriggerRepositoryEventConfig struct { + PullRequests []GetTriggerRepositoryEventConfigPullRequest `pulumi:"pullRequests"` + Pushes []GetTriggerRepositoryEventConfigPush `pulumi:"pushes"` + Repository string `pulumi:"repository"` +} + +// GetTriggerRepositoryEventConfigInput is an input type that accepts GetTriggerRepositoryEventConfigArgs and GetTriggerRepositoryEventConfigOutput values. +// You can construct a concrete instance of `GetTriggerRepositoryEventConfigInput` via: +// +// GetTriggerRepositoryEventConfigArgs{...} +type GetTriggerRepositoryEventConfigInput interface { + pulumi.Input + + ToGetTriggerRepositoryEventConfigOutput() GetTriggerRepositoryEventConfigOutput + ToGetTriggerRepositoryEventConfigOutputWithContext(context.Context) GetTriggerRepositoryEventConfigOutput +} + +type GetTriggerRepositoryEventConfigArgs struct { + PullRequests GetTriggerRepositoryEventConfigPullRequestArrayInput `pulumi:"pullRequests"` + Pushes GetTriggerRepositoryEventConfigPushArrayInput `pulumi:"pushes"` + Repository pulumi.StringInput `pulumi:"repository"` +} + +func (GetTriggerRepositoryEventConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTriggerRepositoryEventConfig)(nil)).Elem() +} + +func (i GetTriggerRepositoryEventConfigArgs) ToGetTriggerRepositoryEventConfigOutput() GetTriggerRepositoryEventConfigOutput { + return i.ToGetTriggerRepositoryEventConfigOutputWithContext(context.Background()) +} + +func (i GetTriggerRepositoryEventConfigArgs) ToGetTriggerRepositoryEventConfigOutputWithContext(ctx context.Context) GetTriggerRepositoryEventConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTriggerRepositoryEventConfigOutput) +} + +// GetTriggerRepositoryEventConfigArrayInput is an input type that accepts GetTriggerRepositoryEventConfigArray and GetTriggerRepositoryEventConfigArrayOutput values. +// You can construct a concrete instance of `GetTriggerRepositoryEventConfigArrayInput` via: +// +// GetTriggerRepositoryEventConfigArray{ GetTriggerRepositoryEventConfigArgs{...} } +type GetTriggerRepositoryEventConfigArrayInput interface { + pulumi.Input + + ToGetTriggerRepositoryEventConfigArrayOutput() GetTriggerRepositoryEventConfigArrayOutput + ToGetTriggerRepositoryEventConfigArrayOutputWithContext(context.Context) GetTriggerRepositoryEventConfigArrayOutput +} + +type GetTriggerRepositoryEventConfigArray []GetTriggerRepositoryEventConfigInput + +func (GetTriggerRepositoryEventConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTriggerRepositoryEventConfig)(nil)).Elem() +} + +func (i GetTriggerRepositoryEventConfigArray) ToGetTriggerRepositoryEventConfigArrayOutput() GetTriggerRepositoryEventConfigArrayOutput { + return i.ToGetTriggerRepositoryEventConfigArrayOutputWithContext(context.Background()) +} + +func (i GetTriggerRepositoryEventConfigArray) ToGetTriggerRepositoryEventConfigArrayOutputWithContext(ctx context.Context) GetTriggerRepositoryEventConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTriggerRepositoryEventConfigArrayOutput) +} + +type GetTriggerRepositoryEventConfigOutput struct{ *pulumi.OutputState } + +func (GetTriggerRepositoryEventConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTriggerRepositoryEventConfig)(nil)).Elem() +} + +func (o GetTriggerRepositoryEventConfigOutput) ToGetTriggerRepositoryEventConfigOutput() GetTriggerRepositoryEventConfigOutput { + return o +} + +func (o GetTriggerRepositoryEventConfigOutput) ToGetTriggerRepositoryEventConfigOutputWithContext(ctx context.Context) GetTriggerRepositoryEventConfigOutput { + return o +} + +func (o GetTriggerRepositoryEventConfigOutput) PullRequests() GetTriggerRepositoryEventConfigPullRequestArrayOutput { + return o.ApplyT(func(v GetTriggerRepositoryEventConfig) []GetTriggerRepositoryEventConfigPullRequest { + return v.PullRequests + }).(GetTriggerRepositoryEventConfigPullRequestArrayOutput) +} + +func (o GetTriggerRepositoryEventConfigOutput) Pushes() GetTriggerRepositoryEventConfigPushArrayOutput { + return o.ApplyT(func(v GetTriggerRepositoryEventConfig) []GetTriggerRepositoryEventConfigPush { return v.Pushes }).(GetTriggerRepositoryEventConfigPushArrayOutput) +} + +func (o GetTriggerRepositoryEventConfigOutput) Repository() pulumi.StringOutput { + return o.ApplyT(func(v GetTriggerRepositoryEventConfig) string { return v.Repository }).(pulumi.StringOutput) +} + +type GetTriggerRepositoryEventConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetTriggerRepositoryEventConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTriggerRepositoryEventConfig)(nil)).Elem() +} + +func (o GetTriggerRepositoryEventConfigArrayOutput) ToGetTriggerRepositoryEventConfigArrayOutput() GetTriggerRepositoryEventConfigArrayOutput { + return o +} + +func (o GetTriggerRepositoryEventConfigArrayOutput) ToGetTriggerRepositoryEventConfigArrayOutputWithContext(ctx context.Context) GetTriggerRepositoryEventConfigArrayOutput { + return o +} + +func (o GetTriggerRepositoryEventConfigArrayOutput) Index(i pulumi.IntInput) GetTriggerRepositoryEventConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTriggerRepositoryEventConfig { + return vs[0].([]GetTriggerRepositoryEventConfig)[vs[1].(int)] + }).(GetTriggerRepositoryEventConfigOutput) +} + +type GetTriggerRepositoryEventConfigPullRequest struct { + Branch string `pulumi:"branch"` + CommentControl string `pulumi:"commentControl"` + InvertRegex bool `pulumi:"invertRegex"` +} + +// GetTriggerRepositoryEventConfigPullRequestInput is an input type that accepts GetTriggerRepositoryEventConfigPullRequestArgs and GetTriggerRepositoryEventConfigPullRequestOutput values. +// You can construct a concrete instance of `GetTriggerRepositoryEventConfigPullRequestInput` via: +// +// GetTriggerRepositoryEventConfigPullRequestArgs{...} +type GetTriggerRepositoryEventConfigPullRequestInput interface { + pulumi.Input + + ToGetTriggerRepositoryEventConfigPullRequestOutput() GetTriggerRepositoryEventConfigPullRequestOutput + ToGetTriggerRepositoryEventConfigPullRequestOutputWithContext(context.Context) GetTriggerRepositoryEventConfigPullRequestOutput +} + +type GetTriggerRepositoryEventConfigPullRequestArgs struct { + Branch pulumi.StringInput `pulumi:"branch"` + CommentControl pulumi.StringInput `pulumi:"commentControl"` + InvertRegex pulumi.BoolInput `pulumi:"invertRegex"` +} + +func (GetTriggerRepositoryEventConfigPullRequestArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTriggerRepositoryEventConfigPullRequest)(nil)).Elem() +} + +func (i GetTriggerRepositoryEventConfigPullRequestArgs) ToGetTriggerRepositoryEventConfigPullRequestOutput() GetTriggerRepositoryEventConfigPullRequestOutput { + return i.ToGetTriggerRepositoryEventConfigPullRequestOutputWithContext(context.Background()) +} + +func (i GetTriggerRepositoryEventConfigPullRequestArgs) ToGetTriggerRepositoryEventConfigPullRequestOutputWithContext(ctx context.Context) GetTriggerRepositoryEventConfigPullRequestOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTriggerRepositoryEventConfigPullRequestOutput) +} + +// GetTriggerRepositoryEventConfigPullRequestArrayInput is an input type that accepts GetTriggerRepositoryEventConfigPullRequestArray and GetTriggerRepositoryEventConfigPullRequestArrayOutput values. +// You can construct a concrete instance of `GetTriggerRepositoryEventConfigPullRequestArrayInput` via: +// +// GetTriggerRepositoryEventConfigPullRequestArray{ GetTriggerRepositoryEventConfigPullRequestArgs{...} } +type GetTriggerRepositoryEventConfigPullRequestArrayInput interface { + pulumi.Input + + ToGetTriggerRepositoryEventConfigPullRequestArrayOutput() GetTriggerRepositoryEventConfigPullRequestArrayOutput + ToGetTriggerRepositoryEventConfigPullRequestArrayOutputWithContext(context.Context) GetTriggerRepositoryEventConfigPullRequestArrayOutput +} + +type GetTriggerRepositoryEventConfigPullRequestArray []GetTriggerRepositoryEventConfigPullRequestInput + +func (GetTriggerRepositoryEventConfigPullRequestArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTriggerRepositoryEventConfigPullRequest)(nil)).Elem() +} + +func (i GetTriggerRepositoryEventConfigPullRequestArray) ToGetTriggerRepositoryEventConfigPullRequestArrayOutput() GetTriggerRepositoryEventConfigPullRequestArrayOutput { + return i.ToGetTriggerRepositoryEventConfigPullRequestArrayOutputWithContext(context.Background()) +} + +func (i GetTriggerRepositoryEventConfigPullRequestArray) ToGetTriggerRepositoryEventConfigPullRequestArrayOutputWithContext(ctx context.Context) GetTriggerRepositoryEventConfigPullRequestArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTriggerRepositoryEventConfigPullRequestArrayOutput) +} + +type GetTriggerRepositoryEventConfigPullRequestOutput struct{ *pulumi.OutputState } + +func (GetTriggerRepositoryEventConfigPullRequestOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTriggerRepositoryEventConfigPullRequest)(nil)).Elem() +} + +func (o GetTriggerRepositoryEventConfigPullRequestOutput) ToGetTriggerRepositoryEventConfigPullRequestOutput() GetTriggerRepositoryEventConfigPullRequestOutput { + return o +} + +func (o GetTriggerRepositoryEventConfigPullRequestOutput) ToGetTriggerRepositoryEventConfigPullRequestOutputWithContext(ctx context.Context) GetTriggerRepositoryEventConfigPullRequestOutput { + return o +} + +func (o GetTriggerRepositoryEventConfigPullRequestOutput) Branch() pulumi.StringOutput { + return o.ApplyT(func(v GetTriggerRepositoryEventConfigPullRequest) string { return v.Branch }).(pulumi.StringOutput) +} + +func (o GetTriggerRepositoryEventConfigPullRequestOutput) CommentControl() pulumi.StringOutput { + return o.ApplyT(func(v GetTriggerRepositoryEventConfigPullRequest) string { return v.CommentControl }).(pulumi.StringOutput) +} + +func (o GetTriggerRepositoryEventConfigPullRequestOutput) InvertRegex() pulumi.BoolOutput { + return o.ApplyT(func(v GetTriggerRepositoryEventConfigPullRequest) bool { return v.InvertRegex }).(pulumi.BoolOutput) +} + +type GetTriggerRepositoryEventConfigPullRequestArrayOutput struct{ *pulumi.OutputState } + +func (GetTriggerRepositoryEventConfigPullRequestArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTriggerRepositoryEventConfigPullRequest)(nil)).Elem() +} + +func (o GetTriggerRepositoryEventConfigPullRequestArrayOutput) ToGetTriggerRepositoryEventConfigPullRequestArrayOutput() GetTriggerRepositoryEventConfigPullRequestArrayOutput { + return o +} + +func (o GetTriggerRepositoryEventConfigPullRequestArrayOutput) ToGetTriggerRepositoryEventConfigPullRequestArrayOutputWithContext(ctx context.Context) GetTriggerRepositoryEventConfigPullRequestArrayOutput { + return o +} + +func (o GetTriggerRepositoryEventConfigPullRequestArrayOutput) Index(i pulumi.IntInput) GetTriggerRepositoryEventConfigPullRequestOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTriggerRepositoryEventConfigPullRequest { + return vs[0].([]GetTriggerRepositoryEventConfigPullRequest)[vs[1].(int)] + }).(GetTriggerRepositoryEventConfigPullRequestOutput) +} + +type GetTriggerRepositoryEventConfigPush struct { + Branch string `pulumi:"branch"` + InvertRegex bool `pulumi:"invertRegex"` + Tag string `pulumi:"tag"` +} + +// GetTriggerRepositoryEventConfigPushInput is an input type that accepts GetTriggerRepositoryEventConfigPushArgs and GetTriggerRepositoryEventConfigPushOutput values. +// You can construct a concrete instance of `GetTriggerRepositoryEventConfigPushInput` via: +// +// GetTriggerRepositoryEventConfigPushArgs{...} +type GetTriggerRepositoryEventConfigPushInput interface { + pulumi.Input + + ToGetTriggerRepositoryEventConfigPushOutput() GetTriggerRepositoryEventConfigPushOutput + ToGetTriggerRepositoryEventConfigPushOutputWithContext(context.Context) GetTriggerRepositoryEventConfigPushOutput +} + +type GetTriggerRepositoryEventConfigPushArgs struct { + Branch pulumi.StringInput `pulumi:"branch"` + InvertRegex pulumi.BoolInput `pulumi:"invertRegex"` + Tag pulumi.StringInput `pulumi:"tag"` +} + +func (GetTriggerRepositoryEventConfigPushArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetTriggerRepositoryEventConfigPush)(nil)).Elem() +} + +func (i GetTriggerRepositoryEventConfigPushArgs) ToGetTriggerRepositoryEventConfigPushOutput() GetTriggerRepositoryEventConfigPushOutput { + return i.ToGetTriggerRepositoryEventConfigPushOutputWithContext(context.Background()) +} + +func (i GetTriggerRepositoryEventConfigPushArgs) ToGetTriggerRepositoryEventConfigPushOutputWithContext(ctx context.Context) GetTriggerRepositoryEventConfigPushOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTriggerRepositoryEventConfigPushOutput) +} + +// GetTriggerRepositoryEventConfigPushArrayInput is an input type that accepts GetTriggerRepositoryEventConfigPushArray and GetTriggerRepositoryEventConfigPushArrayOutput values. +// You can construct a concrete instance of `GetTriggerRepositoryEventConfigPushArrayInput` via: +// +// GetTriggerRepositoryEventConfigPushArray{ GetTriggerRepositoryEventConfigPushArgs{...} } +type GetTriggerRepositoryEventConfigPushArrayInput interface { + pulumi.Input + + ToGetTriggerRepositoryEventConfigPushArrayOutput() GetTriggerRepositoryEventConfigPushArrayOutput + ToGetTriggerRepositoryEventConfigPushArrayOutputWithContext(context.Context) GetTriggerRepositoryEventConfigPushArrayOutput +} + +type GetTriggerRepositoryEventConfigPushArray []GetTriggerRepositoryEventConfigPushInput + +func (GetTriggerRepositoryEventConfigPushArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTriggerRepositoryEventConfigPush)(nil)).Elem() +} + +func (i GetTriggerRepositoryEventConfigPushArray) ToGetTriggerRepositoryEventConfigPushArrayOutput() GetTriggerRepositoryEventConfigPushArrayOutput { + return i.ToGetTriggerRepositoryEventConfigPushArrayOutputWithContext(context.Background()) +} + +func (i GetTriggerRepositoryEventConfigPushArray) ToGetTriggerRepositoryEventConfigPushArrayOutputWithContext(ctx context.Context) GetTriggerRepositoryEventConfigPushArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetTriggerRepositoryEventConfigPushArrayOutput) +} + +type GetTriggerRepositoryEventConfigPushOutput struct{ *pulumi.OutputState } + +func (GetTriggerRepositoryEventConfigPushOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetTriggerRepositoryEventConfigPush)(nil)).Elem() +} + +func (o GetTriggerRepositoryEventConfigPushOutput) ToGetTriggerRepositoryEventConfigPushOutput() GetTriggerRepositoryEventConfigPushOutput { + return o +} + +func (o GetTriggerRepositoryEventConfigPushOutput) ToGetTriggerRepositoryEventConfigPushOutputWithContext(ctx context.Context) GetTriggerRepositoryEventConfigPushOutput { + return o +} + +func (o GetTriggerRepositoryEventConfigPushOutput) Branch() pulumi.StringOutput { + return o.ApplyT(func(v GetTriggerRepositoryEventConfigPush) string { return v.Branch }).(pulumi.StringOutput) +} + +func (o GetTriggerRepositoryEventConfigPushOutput) InvertRegex() pulumi.BoolOutput { + return o.ApplyT(func(v GetTriggerRepositoryEventConfigPush) bool { return v.InvertRegex }).(pulumi.BoolOutput) +} + +func (o GetTriggerRepositoryEventConfigPushOutput) Tag() pulumi.StringOutput { + return o.ApplyT(func(v GetTriggerRepositoryEventConfigPush) string { return v.Tag }).(pulumi.StringOutput) +} + +type GetTriggerRepositoryEventConfigPushArrayOutput struct{ *pulumi.OutputState } + +func (GetTriggerRepositoryEventConfigPushArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetTriggerRepositoryEventConfigPush)(nil)).Elem() +} + +func (o GetTriggerRepositoryEventConfigPushArrayOutput) ToGetTriggerRepositoryEventConfigPushArrayOutput() GetTriggerRepositoryEventConfigPushArrayOutput { + return o +} + +func (o GetTriggerRepositoryEventConfigPushArrayOutput) ToGetTriggerRepositoryEventConfigPushArrayOutputWithContext(ctx context.Context) GetTriggerRepositoryEventConfigPushArrayOutput { + return o +} + +func (o GetTriggerRepositoryEventConfigPushArrayOutput) Index(i pulumi.IntInput) GetTriggerRepositoryEventConfigPushOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetTriggerRepositoryEventConfigPush { + return vs[0].([]GetTriggerRepositoryEventConfigPush)[vs[1].(int)] + }).(GetTriggerRepositoryEventConfigPushOutput) +} + type GetTriggerSourceToBuild struct { - Ref string `pulumi:"ref"` - RepoType string `pulumi:"repoType"` - Uri string `pulumi:"uri"` + GithubEnterpriseConfig string `pulumi:"githubEnterpriseConfig"` + Ref string `pulumi:"ref"` + RepoType string `pulumi:"repoType"` + Uri string `pulumi:"uri"` } // GetTriggerSourceToBuildInput is an input type that accepts GetTriggerSourceToBuildArgs and GetTriggerSourceToBuildOutput values. @@ -7292,9 +8202,10 @@ type GetTriggerSourceToBuildInput interface { } type GetTriggerSourceToBuildArgs struct { - Ref pulumi.StringInput `pulumi:"ref"` - RepoType pulumi.StringInput `pulumi:"repoType"` - Uri pulumi.StringInput `pulumi:"uri"` + GithubEnterpriseConfig pulumi.StringInput `pulumi:"githubEnterpriseConfig"` + Ref pulumi.StringInput `pulumi:"ref"` + RepoType pulumi.StringInput `pulumi:"repoType"` + Uri pulumi.StringInput `pulumi:"uri"` } func (GetTriggerSourceToBuildArgs) ElementType() reflect.Type { @@ -7348,6 +8259,10 @@ func (o GetTriggerSourceToBuildOutput) ToGetTriggerSourceToBuildOutputWithContex return o } +func (o GetTriggerSourceToBuildOutput) GithubEnterpriseConfig() pulumi.StringOutput { + return o.ApplyT(func(v GetTriggerSourceToBuild) string { return v.GithubEnterpriseConfig }).(pulumi.StringOutput) +} + func (o GetTriggerSourceToBuildOutput) Ref() pulumi.StringOutput { return o.ApplyT(func(v GetTriggerSourceToBuild) string { return v.Ref }).(pulumi.StringOutput) } @@ -7651,6 +8566,12 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*TriggerGithubPushPtrInput)(nil)).Elem(), TriggerGithubPushArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*TriggerPubsubConfigInput)(nil)).Elem(), TriggerPubsubConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*TriggerPubsubConfigPtrInput)(nil)).Elem(), TriggerPubsubConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TriggerRepositoryEventConfigInput)(nil)).Elem(), TriggerRepositoryEventConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TriggerRepositoryEventConfigPtrInput)(nil)).Elem(), TriggerRepositoryEventConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TriggerRepositoryEventConfigPullRequestInput)(nil)).Elem(), TriggerRepositoryEventConfigPullRequestArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TriggerRepositoryEventConfigPullRequestPtrInput)(nil)).Elem(), TriggerRepositoryEventConfigPullRequestArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TriggerRepositoryEventConfigPushInput)(nil)).Elem(), TriggerRepositoryEventConfigPushArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*TriggerRepositoryEventConfigPushPtrInput)(nil)).Elem(), TriggerRepositoryEventConfigPushArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*TriggerSourceToBuildInput)(nil)).Elem(), TriggerSourceToBuildArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*TriggerSourceToBuildPtrInput)(nil)).Elem(), TriggerSourceToBuildArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*TriggerTriggerTemplateInput)(nil)).Elem(), TriggerTriggerTemplateArgs{}) @@ -7701,6 +8622,12 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetTriggerGithubPushArrayInput)(nil)).Elem(), GetTriggerGithubPushArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetTriggerPubsubConfigInput)(nil)).Elem(), GetTriggerPubsubConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetTriggerPubsubConfigArrayInput)(nil)).Elem(), GetTriggerPubsubConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTriggerRepositoryEventConfigInput)(nil)).Elem(), GetTriggerRepositoryEventConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTriggerRepositoryEventConfigArrayInput)(nil)).Elem(), GetTriggerRepositoryEventConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTriggerRepositoryEventConfigPullRequestInput)(nil)).Elem(), GetTriggerRepositoryEventConfigPullRequestArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTriggerRepositoryEventConfigPullRequestArrayInput)(nil)).Elem(), GetTriggerRepositoryEventConfigPullRequestArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTriggerRepositoryEventConfigPushInput)(nil)).Elem(), GetTriggerRepositoryEventConfigPushArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetTriggerRepositoryEventConfigPushArrayInput)(nil)).Elem(), GetTriggerRepositoryEventConfigPushArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetTriggerSourceToBuildInput)(nil)).Elem(), GetTriggerSourceToBuildArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetTriggerSourceToBuildArrayInput)(nil)).Elem(), GetTriggerSourceToBuildArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetTriggerTriggerTemplateInput)(nil)).Elem(), GetTriggerTriggerTemplateArgs{}) @@ -7747,6 +8674,12 @@ func init() { pulumi.RegisterOutputType(TriggerGithubPushPtrOutput{}) pulumi.RegisterOutputType(TriggerPubsubConfigOutput{}) pulumi.RegisterOutputType(TriggerPubsubConfigPtrOutput{}) + pulumi.RegisterOutputType(TriggerRepositoryEventConfigOutput{}) + pulumi.RegisterOutputType(TriggerRepositoryEventConfigPtrOutput{}) + pulumi.RegisterOutputType(TriggerRepositoryEventConfigPullRequestOutput{}) + pulumi.RegisterOutputType(TriggerRepositoryEventConfigPullRequestPtrOutput{}) + pulumi.RegisterOutputType(TriggerRepositoryEventConfigPushOutput{}) + pulumi.RegisterOutputType(TriggerRepositoryEventConfigPushPtrOutput{}) pulumi.RegisterOutputType(TriggerSourceToBuildOutput{}) pulumi.RegisterOutputType(TriggerSourceToBuildPtrOutput{}) pulumi.RegisterOutputType(TriggerTriggerTemplateOutput{}) @@ -7797,6 +8730,12 @@ func init() { pulumi.RegisterOutputType(GetTriggerGithubPushArrayOutput{}) pulumi.RegisterOutputType(GetTriggerPubsubConfigOutput{}) pulumi.RegisterOutputType(GetTriggerPubsubConfigArrayOutput{}) + pulumi.RegisterOutputType(GetTriggerRepositoryEventConfigOutput{}) + pulumi.RegisterOutputType(GetTriggerRepositoryEventConfigArrayOutput{}) + pulumi.RegisterOutputType(GetTriggerRepositoryEventConfigPullRequestOutput{}) + pulumi.RegisterOutputType(GetTriggerRepositoryEventConfigPullRequestArrayOutput{}) + pulumi.RegisterOutputType(GetTriggerRepositoryEventConfigPushOutput{}) + pulumi.RegisterOutputType(GetTriggerRepositoryEventConfigPushArrayOutput{}) pulumi.RegisterOutputType(GetTriggerSourceToBuildOutput{}) pulumi.RegisterOutputType(GetTriggerSourceToBuildArrayOutput{}) pulumi.RegisterOutputType(GetTriggerTriggerTemplateOutput{}) diff --git a/sdk/go/gcp/cloudbuild/trigger.go b/sdk/go/gcp/cloudbuild/trigger.go index f76d0c3b90..700a56f644 100644 --- a/sdk/go/gcp/cloudbuild/trigger.go +++ b/sdk/go/gcp/cloudbuild/trigger.go @@ -338,6 +338,95 @@ import ( // } // // ``` +// ### Cloudbuild Trigger Manual Github Enterprise +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := cloudbuild.NewTrigger(ctx, "manual-ghe-trigger", &cloudbuild.TriggerArgs{ +// GitFileSource: &cloudbuild.TriggerGitFileSourceArgs{ +// GithubEnterpriseConfig: pulumi.String("projects/myProject/locations/global/githubEnterpriseConfigs/configID"), +// Path: pulumi.String("cloudbuild.yaml"), +// RepoType: pulumi.String("GITHUB"), +// Revision: pulumi.String("refs/heads/main"), +// Uri: pulumi.String("https://hashicorp/terraform-provider-google-beta"), +// }, +// SourceToBuild: &cloudbuild.TriggerSourceToBuildArgs{ +// GithubEnterpriseConfig: pulumi.String("projects/myProject/locations/global/githubEnterpriseConfigs/configID"), +// Ref: pulumi.String("refs/heads/main"), +// RepoType: pulumi.String("GITHUB"), +// Uri: pulumi.String("https://hashicorp/terraform-provider-google-beta"), +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Cloudbuild Trigger Repo +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuild" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuildv2" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := cloudbuildv2.NewConnection(ctx, "my-connection", &cloudbuildv2.ConnectionArgs{ +// Location: pulumi.String("us-central1"), +// GithubConfig: &cloudbuildv2.ConnectionGithubConfigArgs{ +// AppInstallationId: pulumi.Int(123123), +// AuthorizerCredential: &cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs{ +// OauthTokenSecretVersion: pulumi.String("projects/my-project/secrets/github-pat-secret/versions/latest"), +// }, +// }, +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// _, err = cloudbuildv2.NewRepository(ctx, "my-repository", &cloudbuildv2.RepositoryArgs{ +// ParentConnection: my_connection.ID(), +// RemoteUri: pulumi.String("https://github.com/myuser/my-repo.git"), +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// _, err = cloudbuild.NewTrigger(ctx, "repo-trigger", &cloudbuild.TriggerArgs{ +// Location: pulumi.String("us-central1"), +// RepositoryEventConfig: &cloudbuild.TriggerRepositoryEventConfigArgs{ +// Repository: my_repository.ID(), +// Push: &cloudbuild.TriggerRepositoryEventConfigPushArgs{ +// Branch: pulumi.String("feature-.*"), +// }, +// }, +// Filename: pulumi.String("cloudbuild.yaml"), +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // // ## Import // @@ -432,6 +521,8 @@ type Trigger struct { // One of `triggerTemplate`, `github`, `pubsubConfig` `webhookConfig` or `sourceToBuild` must be provided. // Structure is documented below. PubsubConfig TriggerPubsubConfigPtrOutput `pulumi:"pubsubConfig"` + // The configuration of a trigger that creates a build whenever an event from Repo API is received. + RepositoryEventConfig TriggerRepositoryEventConfigPtrOutput `pulumi:"repositoryEventConfig"` // The service account used for all user-controlled operations including // triggers.patch, triggers.run, builds.create, and builds.cancel. // If no service account is set, then the standard Cloud Build service account @@ -557,6 +648,8 @@ type triggerState struct { // One of `triggerTemplate`, `github`, `pubsubConfig` `webhookConfig` or `sourceToBuild` must be provided. // Structure is documented below. PubsubConfig *TriggerPubsubConfig `pulumi:"pubsubConfig"` + // The configuration of a trigger that creates a build whenever an event from Repo API is received. + RepositoryEventConfig *TriggerRepositoryEventConfig `pulumi:"repositoryEventConfig"` // The service account used for all user-controlled operations including // triggers.patch, triggers.run, builds.create, and builds.cancel. // If no service account is set, then the standard Cloud Build service account @@ -654,6 +747,8 @@ type TriggerState struct { // One of `triggerTemplate`, `github`, `pubsubConfig` `webhookConfig` or `sourceToBuild` must be provided. // Structure is documented below. PubsubConfig TriggerPubsubConfigPtrInput + // The configuration of a trigger that creates a build whenever an event from Repo API is received. + RepositoryEventConfig TriggerRepositoryEventConfigPtrInput // The service account used for all user-controlled operations including // triggers.patch, triggers.run, builds.create, and builds.cancel. // If no service account is set, then the standard Cloud Build service account @@ -753,6 +848,8 @@ type triggerArgs struct { // One of `triggerTemplate`, `github`, `pubsubConfig` `webhookConfig` or `sourceToBuild` must be provided. // Structure is documented below. PubsubConfig *TriggerPubsubConfig `pulumi:"pubsubConfig"` + // The configuration of a trigger that creates a build whenever an event from Repo API is received. + RepositoryEventConfig *TriggerRepositoryEventConfig `pulumi:"repositoryEventConfig"` // The service account used for all user-controlled operations including // triggers.patch, triggers.run, builds.create, and builds.cancel. // If no service account is set, then the standard Cloud Build service account @@ -847,6 +944,8 @@ type TriggerArgs struct { // One of `triggerTemplate`, `github`, `pubsubConfig` `webhookConfig` or `sourceToBuild` must be provided. // Structure is documented below. PubsubConfig TriggerPubsubConfigPtrInput + // The configuration of a trigger that creates a build whenever an event from Repo API is received. + RepositoryEventConfig TriggerRepositoryEventConfigPtrInput // The service account used for all user-controlled operations including // triggers.patch, triggers.run, builds.create, and builds.cancel. // If no service account is set, then the standard Cloud Build service account @@ -1076,6 +1175,11 @@ func (o TriggerOutput) PubsubConfig() TriggerPubsubConfigPtrOutput { return o.ApplyT(func(v *Trigger) TriggerPubsubConfigPtrOutput { return v.PubsubConfig }).(TriggerPubsubConfigPtrOutput) } +// The configuration of a trigger that creates a build whenever an event from Repo API is received. +func (o TriggerOutput) RepositoryEventConfig() TriggerRepositoryEventConfigPtrOutput { + return o.ApplyT(func(v *Trigger) TriggerRepositoryEventConfigPtrOutput { return v.RepositoryEventConfig }).(TriggerRepositoryEventConfigPtrOutput) +} + // The service account used for all user-controlled operations including // triggers.patch, triggers.run, builds.create, and builds.cancel. // If no service account is set, then the standard Cloud Build service account diff --git a/sdk/go/gcp/cloudbuildv2/connection.go b/sdk/go/gcp/cloudbuildv2/connection.go new file mode 100644 index 0000000000..f2b75689cb --- /dev/null +++ b/sdk/go/gcp/cloudbuildv2/connection.go @@ -0,0 +1,465 @@ +// 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 cloudbuildv2 + +import ( + "context" + "reflect" + + "github.com/pkg/errors" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Beta only: The Cloudbuildv2 Connection resource +// +// ## Example Usage +// ### GitHub Connection +// Creates a Connection to github.com +// ```go +// package main +// +// import ( +// +// "os" +// +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuildv2" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func readFileOrPanic(path string) pulumi.StringPtrInput { +// data, err := os.ReadFile(path) +// if err != nil { +// panic(err.Error()) +// } +// return pulumi.String(string(data)) +// } +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecret(ctx, "github-token-secret", &secretmanager.SecretArgs{ +// SecretId: pulumi.String("github-token-secret"), +// Replication: &secretmanager.SecretReplicationArgs{ +// Automatic: pulumi.Bool(true), +// }, +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// _, err = secretmanager.NewSecretVersion(ctx, "github-token-secret-version", &secretmanager.SecretVersionArgs{ +// Secret: github_token_secret.ID(), +// SecretData: readFileOrPanic("my-github-token.txt"), +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// p4sa_secretAccessor, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ +// Bindings: []organizations.GetIAMPolicyBinding{ +// { +// Role: "roles/secretmanager.secretAccessor", +// Members: []string{ +// "serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com", +// }, +// }, +// }, +// }, nil) +// if err != nil { +// return err +// } +// _, err = secretmanager.NewSecretIamPolicy(ctx, "policy", &secretmanager.SecretIamPolicyArgs{ +// SecretId: github_token_secret.SecretId, +// PolicyData: *pulumi.String(p4sa_secretAccessor.PolicyData), +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// _, err = cloudbuildv2.NewConnection(ctx, "my-connection", &cloudbuildv2.ConnectionArgs{ +// Location: pulumi.String("us-west1"), +// GithubConfig: &cloudbuildv2.ConnectionGithubConfigArgs{ +// AppInstallationId: pulumi.Int(123123), +// AuthorizerCredential: &cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs{ +// OauthTokenSecretVersion: github_token_secret_version.ID(), +// }, +// }, +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// # Connection can be imported using any of these accepted formats +// +// ```sh +// +// $ pulumi import gcp:cloudbuildv2/connection:Connection default projects/{{project}}/locations/{{location}}/connections/{{name}} +// +// ``` +// +// ```sh +// +// $ pulumi import gcp:cloudbuildv2/connection:Connection default {{project}}/{{location}}/{{name}} +// +// ``` +// +// ```sh +// +// $ pulumi import gcp:cloudbuildv2/connection:Connection default {{location}}/{{name}} +// +// ``` +type Connection struct { + pulumi.CustomResourceState + + // Allows clients to store small amounts of arbitrary data. + Annotations pulumi.StringMapOutput `pulumi:"annotations"` + // Output only. Server assigned timestamp for when the connection was created. + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + Disabled pulumi.BoolPtrOutput `pulumi:"disabled"` + // This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + Etag pulumi.StringOutput `pulumi:"etag"` + // Configuration for connections to github.com. + GithubConfig ConnectionGithubConfigPtrOutput `pulumi:"githubConfig"` + // Configuration for connections to an instance of GitHub Enterprise. + GithubEnterpriseConfig ConnectionGithubEnterpriseConfigPtrOutput `pulumi:"githubEnterpriseConfig"` + // Output only. Installation state of the Connection. + InstallationStates ConnectionInstallationStateArrayOutput `pulumi:"installationStates"` + // The location for the resource + Location pulumi.StringOutput `pulumi:"location"` + // Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + Name pulumi.StringOutput `pulumi:"name"` + // The project for the resource + Project pulumi.StringOutput `pulumi:"project"` + // Output only. Set to true when the connection is being set up or updated in the background. + Reconciling pulumi.BoolOutput `pulumi:"reconciling"` + // Output only. Server assigned timestamp for when the connection was updated. + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewConnection registers a new resource with the given unique name, arguments, and options. +func NewConnection(ctx *pulumi.Context, + name string, args *ConnectionArgs, opts ...pulumi.ResourceOption) (*Connection, 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'") + } + var resource Connection + err := ctx.RegisterResource("gcp:cloudbuildv2/connection:Connection", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetConnection gets an existing Connection 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 GetConnection(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *ConnectionState, opts ...pulumi.ResourceOption) (*Connection, error) { + var resource Connection + err := ctx.ReadResource("gcp:cloudbuildv2/connection:Connection", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Connection resources. +type connectionState struct { + // Allows clients to store small amounts of arbitrary data. + Annotations map[string]string `pulumi:"annotations"` + // Output only. Server assigned timestamp for when the connection was created. + CreateTime *string `pulumi:"createTime"` + // If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + Disabled *bool `pulumi:"disabled"` + // This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + Etag *string `pulumi:"etag"` + // Configuration for connections to github.com. + GithubConfig *ConnectionGithubConfig `pulumi:"githubConfig"` + // Configuration for connections to an instance of GitHub Enterprise. + GithubEnterpriseConfig *ConnectionGithubEnterpriseConfig `pulumi:"githubEnterpriseConfig"` + // Output only. Installation state of the Connection. + InstallationStates []ConnectionInstallationState `pulumi:"installationStates"` + // The location for the resource + Location *string `pulumi:"location"` + // Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + Name *string `pulumi:"name"` + // The project for the resource + Project *string `pulumi:"project"` + // Output only. Set to true when the connection is being set up or updated in the background. + Reconciling *bool `pulumi:"reconciling"` + // Output only. Server assigned timestamp for when the connection was updated. + UpdateTime *string `pulumi:"updateTime"` +} + +type ConnectionState struct { + // Allows clients to store small amounts of arbitrary data. + Annotations pulumi.StringMapInput + // Output only. Server assigned timestamp for when the connection was created. + CreateTime pulumi.StringPtrInput + // If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + Disabled pulumi.BoolPtrInput + // This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + Etag pulumi.StringPtrInput + // Configuration for connections to github.com. + GithubConfig ConnectionGithubConfigPtrInput + // Configuration for connections to an instance of GitHub Enterprise. + GithubEnterpriseConfig ConnectionGithubEnterpriseConfigPtrInput + // Output only. Installation state of the Connection. + InstallationStates ConnectionInstallationStateArrayInput + // The location for the resource + Location pulumi.StringPtrInput + // Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + Name pulumi.StringPtrInput + // The project for the resource + Project pulumi.StringPtrInput + // Output only. Set to true when the connection is being set up or updated in the background. + Reconciling pulumi.BoolPtrInput + // Output only. Server assigned timestamp for when the connection was updated. + UpdateTime pulumi.StringPtrInput +} + +func (ConnectionState) ElementType() reflect.Type { + return reflect.TypeOf((*connectionState)(nil)).Elem() +} + +type connectionArgs struct { + // Allows clients to store small amounts of arbitrary data. + Annotations map[string]string `pulumi:"annotations"` + // If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + Disabled *bool `pulumi:"disabled"` + // Configuration for connections to github.com. + GithubConfig *ConnectionGithubConfig `pulumi:"githubConfig"` + // Configuration for connections to an instance of GitHub Enterprise. + GithubEnterpriseConfig *ConnectionGithubEnterpriseConfig `pulumi:"githubEnterpriseConfig"` + // The location for the resource + Location string `pulumi:"location"` + // Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + Name *string `pulumi:"name"` + // The project for the resource + Project *string `pulumi:"project"` +} + +// The set of arguments for constructing a Connection resource. +type ConnectionArgs struct { + // Allows clients to store small amounts of arbitrary data. + Annotations pulumi.StringMapInput + // If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + Disabled pulumi.BoolPtrInput + // Configuration for connections to github.com. + GithubConfig ConnectionGithubConfigPtrInput + // Configuration for connections to an instance of GitHub Enterprise. + GithubEnterpriseConfig ConnectionGithubEnterpriseConfigPtrInput + // The location for the resource + Location pulumi.StringInput + // Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + Name pulumi.StringPtrInput + // The project for the resource + Project pulumi.StringPtrInput +} + +func (ConnectionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*connectionArgs)(nil)).Elem() +} + +type ConnectionInput interface { + pulumi.Input + + ToConnectionOutput() ConnectionOutput + ToConnectionOutputWithContext(ctx context.Context) ConnectionOutput +} + +func (*Connection) ElementType() reflect.Type { + return reflect.TypeOf((**Connection)(nil)).Elem() +} + +func (i *Connection) ToConnectionOutput() ConnectionOutput { + return i.ToConnectionOutputWithContext(context.Background()) +} + +func (i *Connection) ToConnectionOutputWithContext(ctx context.Context) ConnectionOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionOutput) +} + +// ConnectionArrayInput is an input type that accepts ConnectionArray and ConnectionArrayOutput values. +// You can construct a concrete instance of `ConnectionArrayInput` via: +// +// ConnectionArray{ ConnectionArgs{...} } +type ConnectionArrayInput interface { + pulumi.Input + + ToConnectionArrayOutput() ConnectionArrayOutput + ToConnectionArrayOutputWithContext(context.Context) ConnectionArrayOutput +} + +type ConnectionArray []ConnectionInput + +func (ConnectionArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Connection)(nil)).Elem() +} + +func (i ConnectionArray) ToConnectionArrayOutput() ConnectionArrayOutput { + return i.ToConnectionArrayOutputWithContext(context.Background()) +} + +func (i ConnectionArray) ToConnectionArrayOutputWithContext(ctx context.Context) ConnectionArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionArrayOutput) +} + +// ConnectionMapInput is an input type that accepts ConnectionMap and ConnectionMapOutput values. +// You can construct a concrete instance of `ConnectionMapInput` via: +// +// ConnectionMap{ "key": ConnectionArgs{...} } +type ConnectionMapInput interface { + pulumi.Input + + ToConnectionMapOutput() ConnectionMapOutput + ToConnectionMapOutputWithContext(context.Context) ConnectionMapOutput +} + +type ConnectionMap map[string]ConnectionInput + +func (ConnectionMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Connection)(nil)).Elem() +} + +func (i ConnectionMap) ToConnectionMapOutput() ConnectionMapOutput { + return i.ToConnectionMapOutputWithContext(context.Background()) +} + +func (i ConnectionMap) ToConnectionMapOutputWithContext(ctx context.Context) ConnectionMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionMapOutput) +} + +type ConnectionOutput struct{ *pulumi.OutputState } + +func (ConnectionOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Connection)(nil)).Elem() +} + +func (o ConnectionOutput) ToConnectionOutput() ConnectionOutput { + return o +} + +func (o ConnectionOutput) ToConnectionOutputWithContext(ctx context.Context) ConnectionOutput { + return o +} + +// Allows clients to store small amounts of arbitrary data. +func (o ConnectionOutput) Annotations() pulumi.StringMapOutput { + return o.ApplyT(func(v *Connection) pulumi.StringMapOutput { return v.Annotations }).(pulumi.StringMapOutput) +} + +// Output only. Server assigned timestamp for when the connection was created. +func (o ConnectionOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *Connection) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. +func (o ConnectionOutput) Disabled() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *Connection) pulumi.BoolPtrOutput { return v.Disabled }).(pulumi.BoolPtrOutput) +} + +// This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. +func (o ConnectionOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v *Connection) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) +} + +// Configuration for connections to github.com. +func (o ConnectionOutput) GithubConfig() ConnectionGithubConfigPtrOutput { + return o.ApplyT(func(v *Connection) ConnectionGithubConfigPtrOutput { return v.GithubConfig }).(ConnectionGithubConfigPtrOutput) +} + +// Configuration for connections to an instance of GitHub Enterprise. +func (o ConnectionOutput) GithubEnterpriseConfig() ConnectionGithubEnterpriseConfigPtrOutput { + return o.ApplyT(func(v *Connection) ConnectionGithubEnterpriseConfigPtrOutput { return v.GithubEnterpriseConfig }).(ConnectionGithubEnterpriseConfigPtrOutput) +} + +// Output only. Installation state of the Connection. +func (o ConnectionOutput) InstallationStates() ConnectionInstallationStateArrayOutput { + return o.ApplyT(func(v *Connection) ConnectionInstallationStateArrayOutput { return v.InstallationStates }).(ConnectionInstallationStateArrayOutput) +} + +// The location for the resource +func (o ConnectionOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *Connection) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. +func (o ConnectionOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Connection) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The project for the resource +func (o ConnectionOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *Connection) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// Output only. Set to true when the connection is being set up or updated in the background. +func (o ConnectionOutput) Reconciling() pulumi.BoolOutput { + return o.ApplyT(func(v *Connection) pulumi.BoolOutput { return v.Reconciling }).(pulumi.BoolOutput) +} + +// Output only. Server assigned timestamp for when the connection was updated. +func (o ConnectionOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *Connection) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type ConnectionArrayOutput struct{ *pulumi.OutputState } + +func (ConnectionArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Connection)(nil)).Elem() +} + +func (o ConnectionArrayOutput) ToConnectionArrayOutput() ConnectionArrayOutput { + return o +} + +func (o ConnectionArrayOutput) ToConnectionArrayOutputWithContext(ctx context.Context) ConnectionArrayOutput { + return o +} + +func (o ConnectionArrayOutput) Index(i pulumi.IntInput) ConnectionOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Connection { + return vs[0].([]*Connection)[vs[1].(int)] + }).(ConnectionOutput) +} + +type ConnectionMapOutput struct{ *pulumi.OutputState } + +func (ConnectionMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Connection)(nil)).Elem() +} + +func (o ConnectionMapOutput) ToConnectionMapOutput() ConnectionMapOutput { + return o +} + +func (o ConnectionMapOutput) ToConnectionMapOutputWithContext(ctx context.Context) ConnectionMapOutput { + return o +} + +func (o ConnectionMapOutput) MapIndex(k pulumi.StringInput) ConnectionOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Connection { + return vs[0].(map[string]*Connection)[vs[1].(string)] + }).(ConnectionOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ConnectionInput)(nil)).Elem(), &Connection{}) + pulumi.RegisterInputType(reflect.TypeOf((*ConnectionArrayInput)(nil)).Elem(), ConnectionArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*ConnectionMapInput)(nil)).Elem(), ConnectionMap{}) + pulumi.RegisterOutputType(ConnectionOutput{}) + pulumi.RegisterOutputType(ConnectionArrayOutput{}) + pulumi.RegisterOutputType(ConnectionMapOutput{}) +} diff --git a/sdk/go/gcp/cloudbuildv2/init.go b/sdk/go/gcp/cloudbuildv2/init.go new file mode 100644 index 0000000000..bf05bc30d9 --- /dev/null +++ b/sdk/go/gcp/cloudbuildv2/init.go @@ -0,0 +1,51 @@ +// 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 cloudbuildv2 + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp" + "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:cloudbuildv2/connection:Connection": + r = &Connection{} + case "gcp:cloudbuildv2/repository:Repository": + r = &Repository{} + 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 := gcp.PkgVersion() + if err != nil { + version = semver.Version{Major: 1} + } + pulumi.RegisterResourceModule( + "gcp", + "cloudbuildv2/connection", + &module{version}, + ) + pulumi.RegisterResourceModule( + "gcp", + "cloudbuildv2/repository", + &module{version}, + ) +} diff --git a/sdk/go/gcp/cloudbuildv2/pulumiTypes.go b/sdk/go/gcp/cloudbuildv2/pulumiTypes.go new file mode 100644 index 0000000000..d5d781e71a --- /dev/null +++ b/sdk/go/gcp/cloudbuildv2/pulumiTypes.go @@ -0,0 +1,863 @@ +// 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 cloudbuildv2 + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type ConnectionGithubConfig struct { + // GitHub App installation id. + AppInstallationId *int `pulumi:"appInstallationId"` + // OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + AuthorizerCredential *ConnectionGithubConfigAuthorizerCredential `pulumi:"authorizerCredential"` +} + +// ConnectionGithubConfigInput is an input type that accepts ConnectionGithubConfigArgs and ConnectionGithubConfigOutput values. +// You can construct a concrete instance of `ConnectionGithubConfigInput` via: +// +// ConnectionGithubConfigArgs{...} +type ConnectionGithubConfigInput interface { + pulumi.Input + + ToConnectionGithubConfigOutput() ConnectionGithubConfigOutput + ToConnectionGithubConfigOutputWithContext(context.Context) ConnectionGithubConfigOutput +} + +type ConnectionGithubConfigArgs struct { + // GitHub App installation id. + AppInstallationId pulumi.IntPtrInput `pulumi:"appInstallationId"` + // OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + AuthorizerCredential ConnectionGithubConfigAuthorizerCredentialPtrInput `pulumi:"authorizerCredential"` +} + +func (ConnectionGithubConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ConnectionGithubConfig)(nil)).Elem() +} + +func (i ConnectionGithubConfigArgs) ToConnectionGithubConfigOutput() ConnectionGithubConfigOutput { + return i.ToConnectionGithubConfigOutputWithContext(context.Background()) +} + +func (i ConnectionGithubConfigArgs) ToConnectionGithubConfigOutputWithContext(ctx context.Context) ConnectionGithubConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionGithubConfigOutput) +} + +func (i ConnectionGithubConfigArgs) ToConnectionGithubConfigPtrOutput() ConnectionGithubConfigPtrOutput { + return i.ToConnectionGithubConfigPtrOutputWithContext(context.Background()) +} + +func (i ConnectionGithubConfigArgs) ToConnectionGithubConfigPtrOutputWithContext(ctx context.Context) ConnectionGithubConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionGithubConfigOutput).ToConnectionGithubConfigPtrOutputWithContext(ctx) +} + +// ConnectionGithubConfigPtrInput is an input type that accepts ConnectionGithubConfigArgs, ConnectionGithubConfigPtr and ConnectionGithubConfigPtrOutput values. +// You can construct a concrete instance of `ConnectionGithubConfigPtrInput` via: +// +// ConnectionGithubConfigArgs{...} +// +// or: +// +// nil +type ConnectionGithubConfigPtrInput interface { + pulumi.Input + + ToConnectionGithubConfigPtrOutput() ConnectionGithubConfigPtrOutput + ToConnectionGithubConfigPtrOutputWithContext(context.Context) ConnectionGithubConfigPtrOutput +} + +type connectionGithubConfigPtrType ConnectionGithubConfigArgs + +func ConnectionGithubConfigPtr(v *ConnectionGithubConfigArgs) ConnectionGithubConfigPtrInput { + return (*connectionGithubConfigPtrType)(v) +} + +func (*connectionGithubConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ConnectionGithubConfig)(nil)).Elem() +} + +func (i *connectionGithubConfigPtrType) ToConnectionGithubConfigPtrOutput() ConnectionGithubConfigPtrOutput { + return i.ToConnectionGithubConfigPtrOutputWithContext(context.Background()) +} + +func (i *connectionGithubConfigPtrType) ToConnectionGithubConfigPtrOutputWithContext(ctx context.Context) ConnectionGithubConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionGithubConfigPtrOutput) +} + +type ConnectionGithubConfigOutput struct{ *pulumi.OutputState } + +func (ConnectionGithubConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ConnectionGithubConfig)(nil)).Elem() +} + +func (o ConnectionGithubConfigOutput) ToConnectionGithubConfigOutput() ConnectionGithubConfigOutput { + return o +} + +func (o ConnectionGithubConfigOutput) ToConnectionGithubConfigOutputWithContext(ctx context.Context) ConnectionGithubConfigOutput { + return o +} + +func (o ConnectionGithubConfigOutput) ToConnectionGithubConfigPtrOutput() ConnectionGithubConfigPtrOutput { + return o.ToConnectionGithubConfigPtrOutputWithContext(context.Background()) +} + +func (o ConnectionGithubConfigOutput) ToConnectionGithubConfigPtrOutputWithContext(ctx context.Context) ConnectionGithubConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ConnectionGithubConfig) *ConnectionGithubConfig { + return &v + }).(ConnectionGithubConfigPtrOutput) +} + +// GitHub App installation id. +func (o ConnectionGithubConfigOutput) AppInstallationId() pulumi.IntPtrOutput { + return o.ApplyT(func(v ConnectionGithubConfig) *int { return v.AppInstallationId }).(pulumi.IntPtrOutput) +} + +// OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. +func (o ConnectionGithubConfigOutput) AuthorizerCredential() ConnectionGithubConfigAuthorizerCredentialPtrOutput { + return o.ApplyT(func(v ConnectionGithubConfig) *ConnectionGithubConfigAuthorizerCredential { + return v.AuthorizerCredential + }).(ConnectionGithubConfigAuthorizerCredentialPtrOutput) +} + +type ConnectionGithubConfigPtrOutput struct{ *pulumi.OutputState } + +func (ConnectionGithubConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ConnectionGithubConfig)(nil)).Elem() +} + +func (o ConnectionGithubConfigPtrOutput) ToConnectionGithubConfigPtrOutput() ConnectionGithubConfigPtrOutput { + return o +} + +func (o ConnectionGithubConfigPtrOutput) ToConnectionGithubConfigPtrOutputWithContext(ctx context.Context) ConnectionGithubConfigPtrOutput { + return o +} + +func (o ConnectionGithubConfigPtrOutput) Elem() ConnectionGithubConfigOutput { + return o.ApplyT(func(v *ConnectionGithubConfig) ConnectionGithubConfig { + if v != nil { + return *v + } + var ret ConnectionGithubConfig + return ret + }).(ConnectionGithubConfigOutput) +} + +// GitHub App installation id. +func (o ConnectionGithubConfigPtrOutput) AppInstallationId() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ConnectionGithubConfig) *int { + if v == nil { + return nil + } + return v.AppInstallationId + }).(pulumi.IntPtrOutput) +} + +// OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. +func (o ConnectionGithubConfigPtrOutput) AuthorizerCredential() ConnectionGithubConfigAuthorizerCredentialPtrOutput { + return o.ApplyT(func(v *ConnectionGithubConfig) *ConnectionGithubConfigAuthorizerCredential { + if v == nil { + return nil + } + return v.AuthorizerCredential + }).(ConnectionGithubConfigAuthorizerCredentialPtrOutput) +} + +type ConnectionGithubConfigAuthorizerCredential struct { + // A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`. + OauthTokenSecretVersion *string `pulumi:"oauthTokenSecretVersion"` + // The username associated to this token. + Username *string `pulumi:"username"` +} + +// ConnectionGithubConfigAuthorizerCredentialInput is an input type that accepts ConnectionGithubConfigAuthorizerCredentialArgs and ConnectionGithubConfigAuthorizerCredentialOutput values. +// You can construct a concrete instance of `ConnectionGithubConfigAuthorizerCredentialInput` via: +// +// ConnectionGithubConfigAuthorizerCredentialArgs{...} +type ConnectionGithubConfigAuthorizerCredentialInput interface { + pulumi.Input + + ToConnectionGithubConfigAuthorizerCredentialOutput() ConnectionGithubConfigAuthorizerCredentialOutput + ToConnectionGithubConfigAuthorizerCredentialOutputWithContext(context.Context) ConnectionGithubConfigAuthorizerCredentialOutput +} + +type ConnectionGithubConfigAuthorizerCredentialArgs struct { + // A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`. + OauthTokenSecretVersion pulumi.StringPtrInput `pulumi:"oauthTokenSecretVersion"` + // The username associated to this token. + Username pulumi.StringPtrInput `pulumi:"username"` +} + +func (ConnectionGithubConfigAuthorizerCredentialArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ConnectionGithubConfigAuthorizerCredential)(nil)).Elem() +} + +func (i ConnectionGithubConfigAuthorizerCredentialArgs) ToConnectionGithubConfigAuthorizerCredentialOutput() ConnectionGithubConfigAuthorizerCredentialOutput { + return i.ToConnectionGithubConfigAuthorizerCredentialOutputWithContext(context.Background()) +} + +func (i ConnectionGithubConfigAuthorizerCredentialArgs) ToConnectionGithubConfigAuthorizerCredentialOutputWithContext(ctx context.Context) ConnectionGithubConfigAuthorizerCredentialOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionGithubConfigAuthorizerCredentialOutput) +} + +func (i ConnectionGithubConfigAuthorizerCredentialArgs) ToConnectionGithubConfigAuthorizerCredentialPtrOutput() ConnectionGithubConfigAuthorizerCredentialPtrOutput { + return i.ToConnectionGithubConfigAuthorizerCredentialPtrOutputWithContext(context.Background()) +} + +func (i ConnectionGithubConfigAuthorizerCredentialArgs) ToConnectionGithubConfigAuthorizerCredentialPtrOutputWithContext(ctx context.Context) ConnectionGithubConfigAuthorizerCredentialPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionGithubConfigAuthorizerCredentialOutput).ToConnectionGithubConfigAuthorizerCredentialPtrOutputWithContext(ctx) +} + +// ConnectionGithubConfigAuthorizerCredentialPtrInput is an input type that accepts ConnectionGithubConfigAuthorizerCredentialArgs, ConnectionGithubConfigAuthorizerCredentialPtr and ConnectionGithubConfigAuthorizerCredentialPtrOutput values. +// You can construct a concrete instance of `ConnectionGithubConfigAuthorizerCredentialPtrInput` via: +// +// ConnectionGithubConfigAuthorizerCredentialArgs{...} +// +// or: +// +// nil +type ConnectionGithubConfigAuthorizerCredentialPtrInput interface { + pulumi.Input + + ToConnectionGithubConfigAuthorizerCredentialPtrOutput() ConnectionGithubConfigAuthorizerCredentialPtrOutput + ToConnectionGithubConfigAuthorizerCredentialPtrOutputWithContext(context.Context) ConnectionGithubConfigAuthorizerCredentialPtrOutput +} + +type connectionGithubConfigAuthorizerCredentialPtrType ConnectionGithubConfigAuthorizerCredentialArgs + +func ConnectionGithubConfigAuthorizerCredentialPtr(v *ConnectionGithubConfigAuthorizerCredentialArgs) ConnectionGithubConfigAuthorizerCredentialPtrInput { + return (*connectionGithubConfigAuthorizerCredentialPtrType)(v) +} + +func (*connectionGithubConfigAuthorizerCredentialPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ConnectionGithubConfigAuthorizerCredential)(nil)).Elem() +} + +func (i *connectionGithubConfigAuthorizerCredentialPtrType) ToConnectionGithubConfigAuthorizerCredentialPtrOutput() ConnectionGithubConfigAuthorizerCredentialPtrOutput { + return i.ToConnectionGithubConfigAuthorizerCredentialPtrOutputWithContext(context.Background()) +} + +func (i *connectionGithubConfigAuthorizerCredentialPtrType) ToConnectionGithubConfigAuthorizerCredentialPtrOutputWithContext(ctx context.Context) ConnectionGithubConfigAuthorizerCredentialPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionGithubConfigAuthorizerCredentialPtrOutput) +} + +type ConnectionGithubConfigAuthorizerCredentialOutput struct{ *pulumi.OutputState } + +func (ConnectionGithubConfigAuthorizerCredentialOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ConnectionGithubConfigAuthorizerCredential)(nil)).Elem() +} + +func (o ConnectionGithubConfigAuthorizerCredentialOutput) ToConnectionGithubConfigAuthorizerCredentialOutput() ConnectionGithubConfigAuthorizerCredentialOutput { + return o +} + +func (o ConnectionGithubConfigAuthorizerCredentialOutput) ToConnectionGithubConfigAuthorizerCredentialOutputWithContext(ctx context.Context) ConnectionGithubConfigAuthorizerCredentialOutput { + return o +} + +func (o ConnectionGithubConfigAuthorizerCredentialOutput) ToConnectionGithubConfigAuthorizerCredentialPtrOutput() ConnectionGithubConfigAuthorizerCredentialPtrOutput { + return o.ToConnectionGithubConfigAuthorizerCredentialPtrOutputWithContext(context.Background()) +} + +func (o ConnectionGithubConfigAuthorizerCredentialOutput) ToConnectionGithubConfigAuthorizerCredentialPtrOutputWithContext(ctx context.Context) ConnectionGithubConfigAuthorizerCredentialPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ConnectionGithubConfigAuthorizerCredential) *ConnectionGithubConfigAuthorizerCredential { + return &v + }).(ConnectionGithubConfigAuthorizerCredentialPtrOutput) +} + +// A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`. +func (o ConnectionGithubConfigAuthorizerCredentialOutput) OauthTokenSecretVersion() pulumi.StringPtrOutput { + return o.ApplyT(func(v ConnectionGithubConfigAuthorizerCredential) *string { return v.OauthTokenSecretVersion }).(pulumi.StringPtrOutput) +} + +// The username associated to this token. +func (o ConnectionGithubConfigAuthorizerCredentialOutput) Username() pulumi.StringPtrOutput { + return o.ApplyT(func(v ConnectionGithubConfigAuthorizerCredential) *string { return v.Username }).(pulumi.StringPtrOutput) +} + +type ConnectionGithubConfigAuthorizerCredentialPtrOutput struct{ *pulumi.OutputState } + +func (ConnectionGithubConfigAuthorizerCredentialPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ConnectionGithubConfigAuthorizerCredential)(nil)).Elem() +} + +func (o ConnectionGithubConfigAuthorizerCredentialPtrOutput) ToConnectionGithubConfigAuthorizerCredentialPtrOutput() ConnectionGithubConfigAuthorizerCredentialPtrOutput { + return o +} + +func (o ConnectionGithubConfigAuthorizerCredentialPtrOutput) ToConnectionGithubConfigAuthorizerCredentialPtrOutputWithContext(ctx context.Context) ConnectionGithubConfigAuthorizerCredentialPtrOutput { + return o +} + +func (o ConnectionGithubConfigAuthorizerCredentialPtrOutput) Elem() ConnectionGithubConfigAuthorizerCredentialOutput { + return o.ApplyT(func(v *ConnectionGithubConfigAuthorizerCredential) ConnectionGithubConfigAuthorizerCredential { + if v != nil { + return *v + } + var ret ConnectionGithubConfigAuthorizerCredential + return ret + }).(ConnectionGithubConfigAuthorizerCredentialOutput) +} + +// A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`. +func (o ConnectionGithubConfigAuthorizerCredentialPtrOutput) OauthTokenSecretVersion() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ConnectionGithubConfigAuthorizerCredential) *string { + if v == nil { + return nil + } + return v.OauthTokenSecretVersion + }).(pulumi.StringPtrOutput) +} + +// The username associated to this token. +func (o ConnectionGithubConfigAuthorizerCredentialPtrOutput) Username() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ConnectionGithubConfigAuthorizerCredential) *string { + if v == nil { + return nil + } + return v.Username + }).(pulumi.StringPtrOutput) +} + +type ConnectionGithubEnterpriseConfig struct { + // Id of the GitHub App created from the manifest. + AppId *int `pulumi:"appId"` + // ID of the installation of the GitHub App. + AppInstallationId *int `pulumi:"appInstallationId"` + // The URL-friendly name of the GitHub App. + AppSlug *string `pulumi:"appSlug"` + // Required. The URI of the GitHub Enterprise host this connection is for. + HostUri string `pulumi:"hostUri"` + // SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + PrivateKeySecretVersion *string `pulumi:"privateKeySecretVersion"` + // Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + ServiceDirectoryConfig *ConnectionGithubEnterpriseConfigServiceDirectoryConfig `pulumi:"serviceDirectoryConfig"` + // SSL certificate to use for requests to GitHub Enterprise. + SslCa *string `pulumi:"sslCa"` + // SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + WebhookSecretSecretVersion *string `pulumi:"webhookSecretSecretVersion"` +} + +// ConnectionGithubEnterpriseConfigInput is an input type that accepts ConnectionGithubEnterpriseConfigArgs and ConnectionGithubEnterpriseConfigOutput values. +// You can construct a concrete instance of `ConnectionGithubEnterpriseConfigInput` via: +// +// ConnectionGithubEnterpriseConfigArgs{...} +type ConnectionGithubEnterpriseConfigInput interface { + pulumi.Input + + ToConnectionGithubEnterpriseConfigOutput() ConnectionGithubEnterpriseConfigOutput + ToConnectionGithubEnterpriseConfigOutputWithContext(context.Context) ConnectionGithubEnterpriseConfigOutput +} + +type ConnectionGithubEnterpriseConfigArgs struct { + // Id of the GitHub App created from the manifest. + AppId pulumi.IntPtrInput `pulumi:"appId"` + // ID of the installation of the GitHub App. + AppInstallationId pulumi.IntPtrInput `pulumi:"appInstallationId"` + // The URL-friendly name of the GitHub App. + AppSlug pulumi.StringPtrInput `pulumi:"appSlug"` + // Required. The URI of the GitHub Enterprise host this connection is for. + HostUri pulumi.StringInput `pulumi:"hostUri"` + // SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + PrivateKeySecretVersion pulumi.StringPtrInput `pulumi:"privateKeySecretVersion"` + // Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + ServiceDirectoryConfig ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrInput `pulumi:"serviceDirectoryConfig"` + // SSL certificate to use for requests to GitHub Enterprise. + SslCa pulumi.StringPtrInput `pulumi:"sslCa"` + // SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + WebhookSecretSecretVersion pulumi.StringPtrInput `pulumi:"webhookSecretSecretVersion"` +} + +func (ConnectionGithubEnterpriseConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ConnectionGithubEnterpriseConfig)(nil)).Elem() +} + +func (i ConnectionGithubEnterpriseConfigArgs) ToConnectionGithubEnterpriseConfigOutput() ConnectionGithubEnterpriseConfigOutput { + return i.ToConnectionGithubEnterpriseConfigOutputWithContext(context.Background()) +} + +func (i ConnectionGithubEnterpriseConfigArgs) ToConnectionGithubEnterpriseConfigOutputWithContext(ctx context.Context) ConnectionGithubEnterpriseConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionGithubEnterpriseConfigOutput) +} + +func (i ConnectionGithubEnterpriseConfigArgs) ToConnectionGithubEnterpriseConfigPtrOutput() ConnectionGithubEnterpriseConfigPtrOutput { + return i.ToConnectionGithubEnterpriseConfigPtrOutputWithContext(context.Background()) +} + +func (i ConnectionGithubEnterpriseConfigArgs) ToConnectionGithubEnterpriseConfigPtrOutputWithContext(ctx context.Context) ConnectionGithubEnterpriseConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionGithubEnterpriseConfigOutput).ToConnectionGithubEnterpriseConfigPtrOutputWithContext(ctx) +} + +// ConnectionGithubEnterpriseConfigPtrInput is an input type that accepts ConnectionGithubEnterpriseConfigArgs, ConnectionGithubEnterpriseConfigPtr and ConnectionGithubEnterpriseConfigPtrOutput values. +// You can construct a concrete instance of `ConnectionGithubEnterpriseConfigPtrInput` via: +// +// ConnectionGithubEnterpriseConfigArgs{...} +// +// or: +// +// nil +type ConnectionGithubEnterpriseConfigPtrInput interface { + pulumi.Input + + ToConnectionGithubEnterpriseConfigPtrOutput() ConnectionGithubEnterpriseConfigPtrOutput + ToConnectionGithubEnterpriseConfigPtrOutputWithContext(context.Context) ConnectionGithubEnterpriseConfigPtrOutput +} + +type connectionGithubEnterpriseConfigPtrType ConnectionGithubEnterpriseConfigArgs + +func ConnectionGithubEnterpriseConfigPtr(v *ConnectionGithubEnterpriseConfigArgs) ConnectionGithubEnterpriseConfigPtrInput { + return (*connectionGithubEnterpriseConfigPtrType)(v) +} + +func (*connectionGithubEnterpriseConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ConnectionGithubEnterpriseConfig)(nil)).Elem() +} + +func (i *connectionGithubEnterpriseConfigPtrType) ToConnectionGithubEnterpriseConfigPtrOutput() ConnectionGithubEnterpriseConfigPtrOutput { + return i.ToConnectionGithubEnterpriseConfigPtrOutputWithContext(context.Background()) +} + +func (i *connectionGithubEnterpriseConfigPtrType) ToConnectionGithubEnterpriseConfigPtrOutputWithContext(ctx context.Context) ConnectionGithubEnterpriseConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionGithubEnterpriseConfigPtrOutput) +} + +type ConnectionGithubEnterpriseConfigOutput struct{ *pulumi.OutputState } + +func (ConnectionGithubEnterpriseConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ConnectionGithubEnterpriseConfig)(nil)).Elem() +} + +func (o ConnectionGithubEnterpriseConfigOutput) ToConnectionGithubEnterpriseConfigOutput() ConnectionGithubEnterpriseConfigOutput { + return o +} + +func (o ConnectionGithubEnterpriseConfigOutput) ToConnectionGithubEnterpriseConfigOutputWithContext(ctx context.Context) ConnectionGithubEnterpriseConfigOutput { + return o +} + +func (o ConnectionGithubEnterpriseConfigOutput) ToConnectionGithubEnterpriseConfigPtrOutput() ConnectionGithubEnterpriseConfigPtrOutput { + return o.ToConnectionGithubEnterpriseConfigPtrOutputWithContext(context.Background()) +} + +func (o ConnectionGithubEnterpriseConfigOutput) ToConnectionGithubEnterpriseConfigPtrOutputWithContext(ctx context.Context) ConnectionGithubEnterpriseConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ConnectionGithubEnterpriseConfig) *ConnectionGithubEnterpriseConfig { + return &v + }).(ConnectionGithubEnterpriseConfigPtrOutput) +} + +// Id of the GitHub App created from the manifest. +func (o ConnectionGithubEnterpriseConfigOutput) AppId() pulumi.IntPtrOutput { + return o.ApplyT(func(v ConnectionGithubEnterpriseConfig) *int { return v.AppId }).(pulumi.IntPtrOutput) +} + +// ID of the installation of the GitHub App. +func (o ConnectionGithubEnterpriseConfigOutput) AppInstallationId() pulumi.IntPtrOutput { + return o.ApplyT(func(v ConnectionGithubEnterpriseConfig) *int { return v.AppInstallationId }).(pulumi.IntPtrOutput) +} + +// The URL-friendly name of the GitHub App. +func (o ConnectionGithubEnterpriseConfigOutput) AppSlug() pulumi.StringPtrOutput { + return o.ApplyT(func(v ConnectionGithubEnterpriseConfig) *string { return v.AppSlug }).(pulumi.StringPtrOutput) +} + +// Required. The URI of the GitHub Enterprise host this connection is for. +func (o ConnectionGithubEnterpriseConfigOutput) HostUri() pulumi.StringOutput { + return o.ApplyT(func(v ConnectionGithubEnterpriseConfig) string { return v.HostUri }).(pulumi.StringOutput) +} + +// SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. +func (o ConnectionGithubEnterpriseConfigOutput) PrivateKeySecretVersion() pulumi.StringPtrOutput { + return o.ApplyT(func(v ConnectionGithubEnterpriseConfig) *string { return v.PrivateKeySecretVersion }).(pulumi.StringPtrOutput) +} + +// Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. +func (o ConnectionGithubEnterpriseConfigOutput) ServiceDirectoryConfig() ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput { + return o.ApplyT(func(v ConnectionGithubEnterpriseConfig) *ConnectionGithubEnterpriseConfigServiceDirectoryConfig { + return v.ServiceDirectoryConfig + }).(ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput) +} + +// SSL certificate to use for requests to GitHub Enterprise. +func (o ConnectionGithubEnterpriseConfigOutput) SslCa() pulumi.StringPtrOutput { + return o.ApplyT(func(v ConnectionGithubEnterpriseConfig) *string { return v.SslCa }).(pulumi.StringPtrOutput) +} + +// SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. +func (o ConnectionGithubEnterpriseConfigOutput) WebhookSecretSecretVersion() pulumi.StringPtrOutput { + return o.ApplyT(func(v ConnectionGithubEnterpriseConfig) *string { return v.WebhookSecretSecretVersion }).(pulumi.StringPtrOutput) +} + +type ConnectionGithubEnterpriseConfigPtrOutput struct{ *pulumi.OutputState } + +func (ConnectionGithubEnterpriseConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ConnectionGithubEnterpriseConfig)(nil)).Elem() +} + +func (o ConnectionGithubEnterpriseConfigPtrOutput) ToConnectionGithubEnterpriseConfigPtrOutput() ConnectionGithubEnterpriseConfigPtrOutput { + return o +} + +func (o ConnectionGithubEnterpriseConfigPtrOutput) ToConnectionGithubEnterpriseConfigPtrOutputWithContext(ctx context.Context) ConnectionGithubEnterpriseConfigPtrOutput { + return o +} + +func (o ConnectionGithubEnterpriseConfigPtrOutput) Elem() ConnectionGithubEnterpriseConfigOutput { + return o.ApplyT(func(v *ConnectionGithubEnterpriseConfig) ConnectionGithubEnterpriseConfig { + if v != nil { + return *v + } + var ret ConnectionGithubEnterpriseConfig + return ret + }).(ConnectionGithubEnterpriseConfigOutput) +} + +// Id of the GitHub App created from the manifest. +func (o ConnectionGithubEnterpriseConfigPtrOutput) AppId() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ConnectionGithubEnterpriseConfig) *int { + if v == nil { + return nil + } + return v.AppId + }).(pulumi.IntPtrOutput) +} + +// ID of the installation of the GitHub App. +func (o ConnectionGithubEnterpriseConfigPtrOutput) AppInstallationId() pulumi.IntPtrOutput { + return o.ApplyT(func(v *ConnectionGithubEnterpriseConfig) *int { + if v == nil { + return nil + } + return v.AppInstallationId + }).(pulumi.IntPtrOutput) +} + +// The URL-friendly name of the GitHub App. +func (o ConnectionGithubEnterpriseConfigPtrOutput) AppSlug() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ConnectionGithubEnterpriseConfig) *string { + if v == nil { + return nil + } + return v.AppSlug + }).(pulumi.StringPtrOutput) +} + +// Required. The URI of the GitHub Enterprise host this connection is for. +func (o ConnectionGithubEnterpriseConfigPtrOutput) HostUri() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ConnectionGithubEnterpriseConfig) *string { + if v == nil { + return nil + } + return &v.HostUri + }).(pulumi.StringPtrOutput) +} + +// SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. +func (o ConnectionGithubEnterpriseConfigPtrOutput) PrivateKeySecretVersion() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ConnectionGithubEnterpriseConfig) *string { + if v == nil { + return nil + } + return v.PrivateKeySecretVersion + }).(pulumi.StringPtrOutput) +} + +// Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. +func (o ConnectionGithubEnterpriseConfigPtrOutput) ServiceDirectoryConfig() ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput { + return o.ApplyT(func(v *ConnectionGithubEnterpriseConfig) *ConnectionGithubEnterpriseConfigServiceDirectoryConfig { + if v == nil { + return nil + } + return v.ServiceDirectoryConfig + }).(ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput) +} + +// SSL certificate to use for requests to GitHub Enterprise. +func (o ConnectionGithubEnterpriseConfigPtrOutput) SslCa() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ConnectionGithubEnterpriseConfig) *string { + if v == nil { + return nil + } + return v.SslCa + }).(pulumi.StringPtrOutput) +} + +// SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. +func (o ConnectionGithubEnterpriseConfigPtrOutput) WebhookSecretSecretVersion() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ConnectionGithubEnterpriseConfig) *string { + if v == nil { + return nil + } + return v.WebhookSecretSecretVersion + }).(pulumi.StringPtrOutput) +} + +type ConnectionGithubEnterpriseConfigServiceDirectoryConfig struct { + // Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + Service string `pulumi:"service"` +} + +// ConnectionGithubEnterpriseConfigServiceDirectoryConfigInput is an input type that accepts ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs and ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput values. +// You can construct a concrete instance of `ConnectionGithubEnterpriseConfigServiceDirectoryConfigInput` via: +// +// ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs{...} +type ConnectionGithubEnterpriseConfigServiceDirectoryConfigInput interface { + pulumi.Input + + ToConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput() ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput + ToConnectionGithubEnterpriseConfigServiceDirectoryConfigOutputWithContext(context.Context) ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput +} + +type ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs struct { + // Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + Service pulumi.StringInput `pulumi:"service"` +} + +func (ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ConnectionGithubEnterpriseConfigServiceDirectoryConfig)(nil)).Elem() +} + +func (i ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs) ToConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput() ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput { + return i.ToConnectionGithubEnterpriseConfigServiceDirectoryConfigOutputWithContext(context.Background()) +} + +func (i ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs) ToConnectionGithubEnterpriseConfigServiceDirectoryConfigOutputWithContext(ctx context.Context) ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput) +} + +func (i ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs) ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput() ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput { + return i.ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutputWithContext(context.Background()) +} + +func (i ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs) ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutputWithContext(ctx context.Context) ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput).ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutputWithContext(ctx) +} + +// ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrInput is an input type that accepts ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs, ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtr and ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput values. +// You can construct a concrete instance of `ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrInput` via: +// +// ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs{...} +// +// or: +// +// nil +type ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrInput interface { + pulumi.Input + + ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput() ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput + ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutputWithContext(context.Context) ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput +} + +type connectionGithubEnterpriseConfigServiceDirectoryConfigPtrType ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs + +func ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtr(v *ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs) ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrInput { + return (*connectionGithubEnterpriseConfigServiceDirectoryConfigPtrType)(v) +} + +func (*connectionGithubEnterpriseConfigServiceDirectoryConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ConnectionGithubEnterpriseConfigServiceDirectoryConfig)(nil)).Elem() +} + +func (i *connectionGithubEnterpriseConfigServiceDirectoryConfigPtrType) ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput() ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput { + return i.ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutputWithContext(context.Background()) +} + +func (i *connectionGithubEnterpriseConfigServiceDirectoryConfigPtrType) ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutputWithContext(ctx context.Context) ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput) +} + +type ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput struct{ *pulumi.OutputState } + +func (ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ConnectionGithubEnterpriseConfigServiceDirectoryConfig)(nil)).Elem() +} + +func (o ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput) ToConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput() ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput { + return o +} + +func (o ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput) ToConnectionGithubEnterpriseConfigServiceDirectoryConfigOutputWithContext(ctx context.Context) ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput { + return o +} + +func (o ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput) ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput() ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput { + return o.ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutputWithContext(context.Background()) +} + +func (o ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput) ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutputWithContext(ctx context.Context) ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ConnectionGithubEnterpriseConfigServiceDirectoryConfig) *ConnectionGithubEnterpriseConfigServiceDirectoryConfig { + return &v + }).(ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput) +} + +// Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. +func (o ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput) Service() pulumi.StringOutput { + return o.ApplyT(func(v ConnectionGithubEnterpriseConfigServiceDirectoryConfig) string { return v.Service }).(pulumi.StringOutput) +} + +type ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput struct{ *pulumi.OutputState } + +func (ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ConnectionGithubEnterpriseConfigServiceDirectoryConfig)(nil)).Elem() +} + +func (o ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput) ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput() ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput { + return o +} + +func (o ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput) ToConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutputWithContext(ctx context.Context) ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput { + return o +} + +func (o ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput) Elem() ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput { + return o.ApplyT(func(v *ConnectionGithubEnterpriseConfigServiceDirectoryConfig) ConnectionGithubEnterpriseConfigServiceDirectoryConfig { + if v != nil { + return *v + } + var ret ConnectionGithubEnterpriseConfigServiceDirectoryConfig + return ret + }).(ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput) +} + +// Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. +func (o ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput) Service() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ConnectionGithubEnterpriseConfigServiceDirectoryConfig) *string { + if v == nil { + return nil + } + return &v.Service + }).(pulumi.StringPtrOutput) +} + +type ConnectionInstallationState struct { + ActionUri *string `pulumi:"actionUri"` + Message *string `pulumi:"message"` + Stage *string `pulumi:"stage"` +} + +// ConnectionInstallationStateInput is an input type that accepts ConnectionInstallationStateArgs and ConnectionInstallationStateOutput values. +// You can construct a concrete instance of `ConnectionInstallationStateInput` via: +// +// ConnectionInstallationStateArgs{...} +type ConnectionInstallationStateInput interface { + pulumi.Input + + ToConnectionInstallationStateOutput() ConnectionInstallationStateOutput + ToConnectionInstallationStateOutputWithContext(context.Context) ConnectionInstallationStateOutput +} + +type ConnectionInstallationStateArgs struct { + ActionUri pulumi.StringPtrInput `pulumi:"actionUri"` + Message pulumi.StringPtrInput `pulumi:"message"` + Stage pulumi.StringPtrInput `pulumi:"stage"` +} + +func (ConnectionInstallationStateArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ConnectionInstallationState)(nil)).Elem() +} + +func (i ConnectionInstallationStateArgs) ToConnectionInstallationStateOutput() ConnectionInstallationStateOutput { + return i.ToConnectionInstallationStateOutputWithContext(context.Background()) +} + +func (i ConnectionInstallationStateArgs) ToConnectionInstallationStateOutputWithContext(ctx context.Context) ConnectionInstallationStateOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionInstallationStateOutput) +} + +// ConnectionInstallationStateArrayInput is an input type that accepts ConnectionInstallationStateArray and ConnectionInstallationStateArrayOutput values. +// You can construct a concrete instance of `ConnectionInstallationStateArrayInput` via: +// +// ConnectionInstallationStateArray{ ConnectionInstallationStateArgs{...} } +type ConnectionInstallationStateArrayInput interface { + pulumi.Input + + ToConnectionInstallationStateArrayOutput() ConnectionInstallationStateArrayOutput + ToConnectionInstallationStateArrayOutputWithContext(context.Context) ConnectionInstallationStateArrayOutput +} + +type ConnectionInstallationStateArray []ConnectionInstallationStateInput + +func (ConnectionInstallationStateArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]ConnectionInstallationState)(nil)).Elem() +} + +func (i ConnectionInstallationStateArray) ToConnectionInstallationStateArrayOutput() ConnectionInstallationStateArrayOutput { + return i.ToConnectionInstallationStateArrayOutputWithContext(context.Background()) +} + +func (i ConnectionInstallationStateArray) ToConnectionInstallationStateArrayOutputWithContext(ctx context.Context) ConnectionInstallationStateArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(ConnectionInstallationStateArrayOutput) +} + +type ConnectionInstallationStateOutput struct{ *pulumi.OutputState } + +func (ConnectionInstallationStateOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ConnectionInstallationState)(nil)).Elem() +} + +func (o ConnectionInstallationStateOutput) ToConnectionInstallationStateOutput() ConnectionInstallationStateOutput { + return o +} + +func (o ConnectionInstallationStateOutput) ToConnectionInstallationStateOutputWithContext(ctx context.Context) ConnectionInstallationStateOutput { + return o +} + +func (o ConnectionInstallationStateOutput) ActionUri() pulumi.StringPtrOutput { + return o.ApplyT(func(v ConnectionInstallationState) *string { return v.ActionUri }).(pulumi.StringPtrOutput) +} + +func (o ConnectionInstallationStateOutput) Message() pulumi.StringPtrOutput { + return o.ApplyT(func(v ConnectionInstallationState) *string { return v.Message }).(pulumi.StringPtrOutput) +} + +func (o ConnectionInstallationStateOutput) Stage() pulumi.StringPtrOutput { + return o.ApplyT(func(v ConnectionInstallationState) *string { return v.Stage }).(pulumi.StringPtrOutput) +} + +type ConnectionInstallationStateArrayOutput struct{ *pulumi.OutputState } + +func (ConnectionInstallationStateArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]ConnectionInstallationState)(nil)).Elem() +} + +func (o ConnectionInstallationStateArrayOutput) ToConnectionInstallationStateArrayOutput() ConnectionInstallationStateArrayOutput { + return o +} + +func (o ConnectionInstallationStateArrayOutput) ToConnectionInstallationStateArrayOutputWithContext(ctx context.Context) ConnectionInstallationStateArrayOutput { + return o +} + +func (o ConnectionInstallationStateArrayOutput) Index(i pulumi.IntInput) ConnectionInstallationStateOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) ConnectionInstallationState { + return vs[0].([]ConnectionInstallationState)[vs[1].(int)] + }).(ConnectionInstallationStateOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*ConnectionGithubConfigInput)(nil)).Elem(), ConnectionGithubConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ConnectionGithubConfigPtrInput)(nil)).Elem(), ConnectionGithubConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ConnectionGithubConfigAuthorizerCredentialInput)(nil)).Elem(), ConnectionGithubConfigAuthorizerCredentialArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ConnectionGithubConfigAuthorizerCredentialPtrInput)(nil)).Elem(), ConnectionGithubConfigAuthorizerCredentialArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ConnectionGithubEnterpriseConfigInput)(nil)).Elem(), ConnectionGithubEnterpriseConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ConnectionGithubEnterpriseConfigPtrInput)(nil)).Elem(), ConnectionGithubEnterpriseConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ConnectionGithubEnterpriseConfigServiceDirectoryConfigInput)(nil)).Elem(), ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrInput)(nil)).Elem(), ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ConnectionInstallationStateInput)(nil)).Elem(), ConnectionInstallationStateArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ConnectionInstallationStateArrayInput)(nil)).Elem(), ConnectionInstallationStateArray{}) + pulumi.RegisterOutputType(ConnectionGithubConfigOutput{}) + pulumi.RegisterOutputType(ConnectionGithubConfigPtrOutput{}) + pulumi.RegisterOutputType(ConnectionGithubConfigAuthorizerCredentialOutput{}) + pulumi.RegisterOutputType(ConnectionGithubConfigAuthorizerCredentialPtrOutput{}) + pulumi.RegisterOutputType(ConnectionGithubEnterpriseConfigOutput{}) + pulumi.RegisterOutputType(ConnectionGithubEnterpriseConfigPtrOutput{}) + pulumi.RegisterOutputType(ConnectionGithubEnterpriseConfigServiceDirectoryConfigOutput{}) + pulumi.RegisterOutputType(ConnectionGithubEnterpriseConfigServiceDirectoryConfigPtrOutput{}) + pulumi.RegisterOutputType(ConnectionInstallationStateOutput{}) + pulumi.RegisterOutputType(ConnectionInstallationStateArrayOutput{}) +} diff --git a/sdk/go/gcp/cloudbuildv2/repository.go b/sdk/go/gcp/cloudbuildv2/repository.go new file mode 100644 index 0000000000..e75dfc31fe --- /dev/null +++ b/sdk/go/gcp/cloudbuildv2/repository.go @@ -0,0 +1,439 @@ +// 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 cloudbuildv2 + +import ( + "context" + "reflect" + + "github.com/pkg/errors" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Beta only: The Cloudbuildv2 Repository resource +// +// ## Example Usage +// ### Repository In GitHub Connection +// Creates a Repository resource inside a Connection to github.com +// ```go +// package main +// +// import ( +// +// "os" +// +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudbuildv2" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func readFileOrPanic(path string) pulumi.StringPtrInput { +// data, err := os.ReadFile(path) +// if err != nil { +// panic(err.Error()) +// } +// return pulumi.String(string(data)) +// } +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.NewSecret(ctx, "github-token-secret", &secretmanager.SecretArgs{ +// SecretId: pulumi.String("github-token-secret"), +// Replication: &secretmanager.SecretReplicationArgs{ +// Automatic: pulumi.Bool(true), +// }, +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// _, err = secretmanager.NewSecretVersion(ctx, "github-token-secret-version", &secretmanager.SecretVersionArgs{ +// Secret: github_token_secret.ID(), +// SecretData: readFileOrPanic("my-github-token.txt"), +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// p4sa_secretAccessor, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ +// Bindings: []organizations.GetIAMPolicyBinding{ +// { +// Role: "roles/secretmanager.secretAccessor", +// Members: []string{ +// "serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com", +// }, +// }, +// }, +// }, nil) +// if err != nil { +// return err +// } +// _, err = secretmanager.NewSecretIamPolicy(ctx, "policy", &secretmanager.SecretIamPolicyArgs{ +// SecretId: github_token_secret.SecretId, +// PolicyData: *pulumi.String(p4sa_secretAccessor.PolicyData), +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// _, err = cloudbuildv2.NewConnection(ctx, "my-connection", &cloudbuildv2.ConnectionArgs{ +// Location: pulumi.String("us-west1"), +// GithubConfig: &cloudbuildv2.ConnectionGithubConfigArgs{ +// AppInstallationId: pulumi.Int(123123), +// AuthorizerCredential: &cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs{ +// OauthTokenSecretVersion: github_token_secret_version.ID(), +// }, +// }, +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// _, err = cloudbuildv2.NewRepository(ctx, "my-repository", &cloudbuildv2.RepositoryArgs{ +// Location: pulumi.String("us-west1"), +// ParentConnection: my_connection.Name, +// RemoteUri: pulumi.String("https://github.com/myuser/myrepo.git"), +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// # Repository can be imported using any of these accepted formats +// +// ```sh +// +// $ pulumi import gcp:cloudbuildv2/repository:Repository default projects/{{project}}/locations/{{location}}/connections/{{parent_connection}}/repositories/{{name}} +// +// ``` +// +// ```sh +// +// $ pulumi import gcp:cloudbuildv2/repository:Repository default {{project}}/{{location}}/{{parent_connection}}/{{name}} +// +// ``` +// +// ```sh +// +// $ pulumi import gcp:cloudbuildv2/repository:Repository default {{location}}/{{parent_connection}}/{{name}} +// +// ``` +type Repository struct { + pulumi.CustomResourceState + + // Allows clients to store small amounts of arbitrary data. + Annotations pulumi.StringMapOutput `pulumi:"annotations"` + // Output only. Server assigned timestamp for when the connection was created. + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + Etag pulumi.StringOutput `pulumi:"etag"` + // The location for the resource + Location pulumi.StringOutput `pulumi:"location"` + // Name of the repository. + Name pulumi.StringOutput `pulumi:"name"` + // The connection for the resource + ParentConnection pulumi.StringOutput `pulumi:"parentConnection"` + // The project for the resource + Project pulumi.StringOutput `pulumi:"project"` + // Required. Git Clone HTTPS URI. + RemoteUri pulumi.StringOutput `pulumi:"remoteUri"` + // Output only. Server assigned timestamp for when the connection was updated. + UpdateTime pulumi.StringOutput `pulumi:"updateTime"` +} + +// NewRepository registers a new resource with the given unique name, arguments, and options. +func NewRepository(ctx *pulumi.Context, + name string, args *RepositoryArgs, opts ...pulumi.ResourceOption) (*Repository, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.ParentConnection == nil { + return nil, errors.New("invalid value for required argument 'ParentConnection'") + } + if args.RemoteUri == nil { + return nil, errors.New("invalid value for required argument 'RemoteUri'") + } + var resource Repository + err := ctx.RegisterResource("gcp:cloudbuildv2/repository:Repository", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetRepository gets an existing Repository 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 GetRepository(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *RepositoryState, opts ...pulumi.ResourceOption) (*Repository, error) { + var resource Repository + err := ctx.ReadResource("gcp:cloudbuildv2/repository:Repository", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering Repository resources. +type repositoryState struct { + // Allows clients to store small amounts of arbitrary data. + Annotations map[string]string `pulumi:"annotations"` + // Output only. Server assigned timestamp for when the connection was created. + CreateTime *string `pulumi:"createTime"` + // This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + Etag *string `pulumi:"etag"` + // The location for the resource + Location *string `pulumi:"location"` + // Name of the repository. + Name *string `pulumi:"name"` + // The connection for the resource + ParentConnection *string `pulumi:"parentConnection"` + // The project for the resource + Project *string `pulumi:"project"` + // Required. Git Clone HTTPS URI. + RemoteUri *string `pulumi:"remoteUri"` + // Output only. Server assigned timestamp for when the connection was updated. + UpdateTime *string `pulumi:"updateTime"` +} + +type RepositoryState struct { + // Allows clients to store small amounts of arbitrary data. + Annotations pulumi.StringMapInput + // Output only. Server assigned timestamp for when the connection was created. + CreateTime pulumi.StringPtrInput + // This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + Etag pulumi.StringPtrInput + // The location for the resource + Location pulumi.StringPtrInput + // Name of the repository. + Name pulumi.StringPtrInput + // The connection for the resource + ParentConnection pulumi.StringPtrInput + // The project for the resource + Project pulumi.StringPtrInput + // Required. Git Clone HTTPS URI. + RemoteUri pulumi.StringPtrInput + // Output only. Server assigned timestamp for when the connection was updated. + UpdateTime pulumi.StringPtrInput +} + +func (RepositoryState) ElementType() reflect.Type { + return reflect.TypeOf((*repositoryState)(nil)).Elem() +} + +type repositoryArgs struct { + // Allows clients to store small amounts of arbitrary data. + Annotations map[string]string `pulumi:"annotations"` + // The location for the resource + Location *string `pulumi:"location"` + // Name of the repository. + Name *string `pulumi:"name"` + // The connection for the resource + ParentConnection string `pulumi:"parentConnection"` + // The project for the resource + Project *string `pulumi:"project"` + // Required. Git Clone HTTPS URI. + RemoteUri string `pulumi:"remoteUri"` +} + +// The set of arguments for constructing a Repository resource. +type RepositoryArgs struct { + // Allows clients to store small amounts of arbitrary data. + Annotations pulumi.StringMapInput + // The location for the resource + Location pulumi.StringPtrInput + // Name of the repository. + Name pulumi.StringPtrInput + // The connection for the resource + ParentConnection pulumi.StringInput + // The project for the resource + Project pulumi.StringPtrInput + // Required. Git Clone HTTPS URI. + RemoteUri pulumi.StringInput +} + +func (RepositoryArgs) ElementType() reflect.Type { + return reflect.TypeOf((*repositoryArgs)(nil)).Elem() +} + +type RepositoryInput interface { + pulumi.Input + + ToRepositoryOutput() RepositoryOutput + ToRepositoryOutputWithContext(ctx context.Context) RepositoryOutput +} + +func (*Repository) ElementType() reflect.Type { + return reflect.TypeOf((**Repository)(nil)).Elem() +} + +func (i *Repository) ToRepositoryOutput() RepositoryOutput { + return i.ToRepositoryOutputWithContext(context.Background()) +} + +func (i *Repository) ToRepositoryOutputWithContext(ctx context.Context) RepositoryOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryOutput) +} + +// RepositoryArrayInput is an input type that accepts RepositoryArray and RepositoryArrayOutput values. +// You can construct a concrete instance of `RepositoryArrayInput` via: +// +// RepositoryArray{ RepositoryArgs{...} } +type RepositoryArrayInput interface { + pulumi.Input + + ToRepositoryArrayOutput() RepositoryArrayOutput + ToRepositoryArrayOutputWithContext(context.Context) RepositoryArrayOutput +} + +type RepositoryArray []RepositoryInput + +func (RepositoryArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Repository)(nil)).Elem() +} + +func (i RepositoryArray) ToRepositoryArrayOutput() RepositoryArrayOutput { + return i.ToRepositoryArrayOutputWithContext(context.Background()) +} + +func (i RepositoryArray) ToRepositoryArrayOutputWithContext(ctx context.Context) RepositoryArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryArrayOutput) +} + +// RepositoryMapInput is an input type that accepts RepositoryMap and RepositoryMapOutput values. +// You can construct a concrete instance of `RepositoryMapInput` via: +// +// RepositoryMap{ "key": RepositoryArgs{...} } +type RepositoryMapInput interface { + pulumi.Input + + ToRepositoryMapOutput() RepositoryMapOutput + ToRepositoryMapOutputWithContext(context.Context) RepositoryMapOutput +} + +type RepositoryMap map[string]RepositoryInput + +func (RepositoryMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Repository)(nil)).Elem() +} + +func (i RepositoryMap) ToRepositoryMapOutput() RepositoryMapOutput { + return i.ToRepositoryMapOutputWithContext(context.Background()) +} + +func (i RepositoryMap) ToRepositoryMapOutputWithContext(ctx context.Context) RepositoryMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(RepositoryMapOutput) +} + +type RepositoryOutput struct{ *pulumi.OutputState } + +func (RepositoryOutput) ElementType() reflect.Type { + return reflect.TypeOf((**Repository)(nil)).Elem() +} + +func (o RepositoryOutput) ToRepositoryOutput() RepositoryOutput { + return o +} + +func (o RepositoryOutput) ToRepositoryOutputWithContext(ctx context.Context) RepositoryOutput { + return o +} + +// Allows clients to store small amounts of arbitrary data. +func (o RepositoryOutput) Annotations() pulumi.StringMapOutput { + return o.ApplyT(func(v *Repository) pulumi.StringMapOutput { return v.Annotations }).(pulumi.StringMapOutput) +} + +// Output only. Server assigned timestamp for when the connection was created. +func (o RepositoryOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *Repository) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. +func (o RepositoryOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v *Repository) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) +} + +// The location for the resource +func (o RepositoryOutput) Location() pulumi.StringOutput { + return o.ApplyT(func(v *Repository) pulumi.StringOutput { return v.Location }).(pulumi.StringOutput) +} + +// Name of the repository. +func (o RepositoryOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *Repository) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The connection for the resource +func (o RepositoryOutput) ParentConnection() pulumi.StringOutput { + return o.ApplyT(func(v *Repository) pulumi.StringOutput { return v.ParentConnection }).(pulumi.StringOutput) +} + +// The project for the resource +func (o RepositoryOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *Repository) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// Required. Git Clone HTTPS URI. +func (o RepositoryOutput) RemoteUri() pulumi.StringOutput { + return o.ApplyT(func(v *Repository) pulumi.StringOutput { return v.RemoteUri }).(pulumi.StringOutput) +} + +// Output only. Server assigned timestamp for when the connection was updated. +func (o RepositoryOutput) UpdateTime() pulumi.StringOutput { + return o.ApplyT(func(v *Repository) pulumi.StringOutput { return v.UpdateTime }).(pulumi.StringOutput) +} + +type RepositoryArrayOutput struct{ *pulumi.OutputState } + +func (RepositoryArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*Repository)(nil)).Elem() +} + +func (o RepositoryArrayOutput) ToRepositoryArrayOutput() RepositoryArrayOutput { + return o +} + +func (o RepositoryArrayOutput) ToRepositoryArrayOutputWithContext(ctx context.Context) RepositoryArrayOutput { + return o +} + +func (o RepositoryArrayOutput) Index(i pulumi.IntInput) RepositoryOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *Repository { + return vs[0].([]*Repository)[vs[1].(int)] + }).(RepositoryOutput) +} + +type RepositoryMapOutput struct{ *pulumi.OutputState } + +func (RepositoryMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*Repository)(nil)).Elem() +} + +func (o RepositoryMapOutput) ToRepositoryMapOutput() RepositoryMapOutput { + return o +} + +func (o RepositoryMapOutput) ToRepositoryMapOutputWithContext(ctx context.Context) RepositoryMapOutput { + return o +} + +func (o RepositoryMapOutput) MapIndex(k pulumi.StringInput) RepositoryOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *Repository { + return vs[0].(map[string]*Repository)[vs[1].(string)] + }).(RepositoryOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryInput)(nil)).Elem(), &Repository{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryArrayInput)(nil)).Elem(), RepositoryArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*RepositoryMapInput)(nil)).Elem(), RepositoryMap{}) + pulumi.RegisterOutputType(RepositoryOutput{}) + pulumi.RegisterOutputType(RepositoryArrayOutput{}) + pulumi.RegisterOutputType(RepositoryMapOutput{}) +} diff --git a/sdk/go/gcp/cloudfunctions/function.go b/sdk/go/gcp/cloudfunctions/function.go index 4d1263f33d..6ac386f77a 100644 --- a/sdk/go/gcp/cloudfunctions/function.go +++ b/sdk/go/gcp/cloudfunctions/function.go @@ -191,7 +191,7 @@ type Function struct { // A set of key/value label pairs to assign to the function. Label keys must follow the requirements at https://cloud.google.com/resource-manager/docs/creating-managing-labels#requirements. Labels pulumi.MapOutput `pulumi:"labels"` // The limit on the maximum number of function instances that may coexist at a given time. - MaxInstances pulumi.IntPtrOutput `pulumi:"maxInstances"` + MaxInstances pulumi.IntOutput `pulumi:"maxInstances"` // The limit on the minimum number of function instances that may coexist at a given time. MinInstances pulumi.IntPtrOutput `pulumi:"minInstances"` // A user-defined name of the function. Function names must be unique globally. @@ -685,8 +685,8 @@ func (o FunctionOutput) Labels() pulumi.MapOutput { } // The limit on the maximum number of function instances that may coexist at a given time. -func (o FunctionOutput) MaxInstances() pulumi.IntPtrOutput { - return o.ApplyT(func(v *Function) pulumi.IntPtrOutput { return v.MaxInstances }).(pulumi.IntPtrOutput) +func (o FunctionOutput) MaxInstances() pulumi.IntOutput { + return o.ApplyT(func(v *Function) pulumi.IntOutput { return v.MaxInstances }).(pulumi.IntOutput) } // The limit on the minimum number of function instances that may coexist at a given time. diff --git a/sdk/go/gcp/cloudfunctions/getFunction.go b/sdk/go/gcp/cloudfunctions/getFunction.go index 880d9e3961..fac9c9acea 100644 --- a/sdk/go/gcp/cloudfunctions/getFunction.go +++ b/sdk/go/gcp/cloudfunctions/getFunction.go @@ -85,7 +85,7 @@ type LookupFunctionResult struct { KmsKeyName string `pulumi:"kmsKeyName"` // A map of labels applied to this function. Labels map[string]interface{} `pulumi:"labels"` - // The limit on the maximum number of function instances that may coexist at a given time. + // The limit on the maximum number of function instances that may coexist at a given time. If unset or set to `0`, the API default will be used. MaxInstances int `pulumi:"maxInstances"` MinInstances int `pulumi:"minInstances"` // The name of the Cloud Function. @@ -226,7 +226,7 @@ func (o LookupFunctionResultOutput) Labels() pulumi.MapOutput { return o.ApplyT(func(v LookupFunctionResult) map[string]interface{} { return v.Labels }).(pulumi.MapOutput) } -// The limit on the maximum number of function instances that may coexist at a given time. +// The limit on the maximum number of function instances that may coexist at a given time. If unset or set to `0`, the API default will be used. func (o LookupFunctionResultOutput) MaxInstances() pulumi.IntOutput { return o.ApplyT(func(v LookupFunctionResult) int { return v.MaxInstances }).(pulumi.IntOutput) } diff --git a/sdk/go/gcp/cloudidentity/groupMembership.go b/sdk/go/gcp/cloudidentity/groupMembership.go index 1d65af82c9..004711deb0 100644 --- a/sdk/go/gcp/cloudidentity/groupMembership.go +++ b/sdk/go/gcp/cloudidentity/groupMembership.go @@ -154,7 +154,6 @@ type GroupMembership struct { // The name of the Group to create this membership in. Group pulumi.StringOutput `pulumi:"group"` // EntityKey of the member. - // Structure is documented below. MemberKey GroupMembershipMemberKeyOutput `pulumi:"memberKey"` // The name of the MembershipRole. Must be one of OWNER, MANAGER, MEMBER. // Possible values are `OWNER`, `MANAGER`, and `MEMBER`. @@ -212,7 +211,6 @@ type groupMembershipState struct { // The name of the Group to create this membership in. Group *string `pulumi:"group"` // EntityKey of the member. - // Structure is documented below. MemberKey *GroupMembershipMemberKey `pulumi:"memberKey"` // The name of the MembershipRole. Must be one of OWNER, MANAGER, MEMBER. // Possible values are `OWNER`, `MANAGER`, and `MEMBER`. @@ -236,7 +234,6 @@ type GroupMembershipState struct { // The name of the Group to create this membership in. Group pulumi.StringPtrInput // EntityKey of the member. - // Structure is documented below. MemberKey GroupMembershipMemberKeyPtrInput // The name of the MembershipRole. Must be one of OWNER, MANAGER, MEMBER. // Possible values are `OWNER`, `MANAGER`, and `MEMBER`. @@ -262,7 +259,6 @@ type groupMembershipArgs struct { // The name of the Group to create this membership in. Group string `pulumi:"group"` // EntityKey of the member. - // Structure is documented below. MemberKey *GroupMembershipMemberKey `pulumi:"memberKey"` // EntityKey of the member. // Structure is documented below. @@ -278,7 +274,6 @@ type GroupMembershipArgs struct { // The name of the Group to create this membership in. Group pulumi.StringInput // EntityKey of the member. - // Structure is documented below. MemberKey GroupMembershipMemberKeyPtrInput // EntityKey of the member. // Structure is documented below. @@ -387,7 +382,6 @@ func (o GroupMembershipOutput) Group() pulumi.StringOutput { } // EntityKey of the member. -// Structure is documented below. func (o GroupMembershipOutput) MemberKey() GroupMembershipMemberKeyOutput { return o.ApplyT(func(v *GroupMembership) GroupMembershipMemberKeyOutput { return v.MemberKey }).(GroupMembershipMemberKeyOutput) } diff --git a/sdk/go/gcp/cloudrun/pulumiTypes.go b/sdk/go/gcp/cloudrun/pulumiTypes.go index 1f5a32a428..bd938df9ee 100644 --- a/sdk/go/gcp/cloudrun/pulumiTypes.go +++ b/sdk/go/gcp/cloudrun/pulumiTypes.go @@ -11,12 +11,6 @@ import ( ) type DomainMappingMetadata struct { - // Annotations is a key value map stored with a resource that - // may be set by external tools to store and retrieve arbitrary metadata. More - // info: http://kubernetes.io/docs/user-guide/annotations - // **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - // If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - // or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. Annotations map[string]string `pulumi:"annotations"` // A sequence number representing a specific generation of the desired state. Generation *int `pulumi:"generation"` @@ -56,12 +50,6 @@ type DomainMappingMetadataInput interface { } type DomainMappingMetadataArgs struct { - // Annotations is a key value map stored with a resource that - // may be set by external tools to store and retrieve arbitrary metadata. More - // info: http://kubernetes.io/docs/user-guide/annotations - // **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - // If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - // or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. Annotations pulumi.StringMapInput `pulumi:"annotations"` // A sequence number representing a specific generation of the desired state. Generation pulumi.IntPtrInput `pulumi:"generation"` @@ -166,12 +154,6 @@ func (o DomainMappingMetadataOutput) ToDomainMappingMetadataPtrOutputWithContext }).(DomainMappingMetadataPtrOutput) } -// Annotations is a key value map stored with a resource that -// may be set by external tools to store and retrieve arbitrary metadata. More -// info: http://kubernetes.io/docs/user-guide/annotations -// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. -// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config -// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. func (o DomainMappingMetadataOutput) Annotations() pulumi.StringMapOutput { return o.ApplyT(func(v DomainMappingMetadata) map[string]string { return v.Annotations }).(pulumi.StringMapOutput) } @@ -242,12 +224,6 @@ func (o DomainMappingMetadataPtrOutput) Elem() DomainMappingMetadataOutput { }).(DomainMappingMetadataOutput) } -// Annotations is a key value map stored with a resource that -// may be set by external tools to store and retrieve arbitrary metadata. More -// info: http://kubernetes.io/docs/user-guide/annotations -// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. -// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config -// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. func (o DomainMappingMetadataPtrOutput) Annotations() pulumi.StringMapOutput { return o.ApplyT(func(v *DomainMappingMetadata) map[string]string { if v == nil { @@ -1245,15 +1221,6 @@ func (o IamMemberConditionPtrOutput) Title() pulumi.StringPtrOutput { } type ServiceMetadata struct { - // Annotations is a key value map stored with a resource that - // may be set by external tools to store and retrieve arbitrary metadata. More - // info: http://kubernetes.io/docs/user-guide/annotations - // **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - // If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - // or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - // Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - // - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - // for the Service. For example, `"run.googleapis.com/ingress" = "all"`. Annotations map[string]string `pulumi:"annotations"` // A sequence number representing a specific generation of the desired state. Generation *int `pulumi:"generation"` @@ -1293,15 +1260,6 @@ type ServiceMetadataInput interface { } type ServiceMetadataArgs struct { - // Annotations is a key value map stored with a resource that - // may be set by external tools to store and retrieve arbitrary metadata. More - // info: http://kubernetes.io/docs/user-guide/annotations - // **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - // If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - // or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - // Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - // - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - // for the Service. For example, `"run.googleapis.com/ingress" = "all"`. Annotations pulumi.StringMapInput `pulumi:"annotations"` // A sequence number representing a specific generation of the desired state. Generation pulumi.IntPtrInput `pulumi:"generation"` @@ -1406,15 +1364,6 @@ func (o ServiceMetadataOutput) ToServiceMetadataPtrOutputWithContext(ctx context }).(ServiceMetadataPtrOutput) } -// Annotations is a key value map stored with a resource that -// may be set by external tools to store and retrieve arbitrary metadata. More -// info: http://kubernetes.io/docs/user-guide/annotations -// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. -// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config -// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. -// Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: -// - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) -// for the Service. For example, `"run.googleapis.com/ingress" = "all"`. func (o ServiceMetadataOutput) Annotations() pulumi.StringMapOutput { return o.ApplyT(func(v ServiceMetadata) map[string]string { return v.Annotations }).(pulumi.StringMapOutput) } @@ -1485,15 +1434,6 @@ func (o ServiceMetadataPtrOutput) Elem() ServiceMetadataOutput { }).(ServiceMetadataOutput) } -// Annotations is a key value map stored with a resource that -// may be set by external tools to store and retrieve arbitrary metadata. More -// info: http://kubernetes.io/docs/user-guide/annotations -// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. -// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config -// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. -// Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: -// - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) -// for the Service. For example, `"run.googleapis.com/ingress" = "all"`. func (o ServiceMetadataPtrOutput) Annotations() pulumi.StringMapOutput { return o.ApplyT(func(v *ServiceMetadata) map[string]string { if v == nil { @@ -2051,15 +1991,6 @@ func (o ServiceTemplatePtrOutput) Spec() ServiceTemplateSpecPtrOutput { } type ServiceTemplateMetadata struct { - // Annotations is a key value map stored with a resource that - // may be set by external tools to store and retrieve arbitrary metadata. More - // info: http://kubernetes.io/docs/user-guide/annotations - // **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - // If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - // or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - // Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - // - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - // for the Service. For example, `"run.googleapis.com/ingress" = "all"`. Annotations map[string]string `pulumi:"annotations"` // A sequence number representing a specific generation of the desired state. Generation *int `pulumi:"generation"` @@ -2104,15 +2035,6 @@ type ServiceTemplateMetadataInput interface { } type ServiceTemplateMetadataArgs struct { - // Annotations is a key value map stored with a resource that - // may be set by external tools to store and retrieve arbitrary metadata. More - // info: http://kubernetes.io/docs/user-guide/annotations - // **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - // If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - // or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - // Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - // - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - // for the Service. For example, `"run.googleapis.com/ingress" = "all"`. Annotations pulumi.StringMapInput `pulumi:"annotations"` // A sequence number representing a specific generation of the desired state. Generation pulumi.IntPtrInput `pulumi:"generation"` @@ -2222,15 +2144,6 @@ func (o ServiceTemplateMetadataOutput) ToServiceTemplateMetadataPtrOutputWithCon }).(ServiceTemplateMetadataPtrOutput) } -// Annotations is a key value map stored with a resource that -// may be set by external tools to store and retrieve arbitrary metadata. More -// info: http://kubernetes.io/docs/user-guide/annotations -// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. -// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config -// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. -// Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: -// - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) -// for the Service. For example, `"run.googleapis.com/ingress" = "all"`. func (o ServiceTemplateMetadataOutput) Annotations() pulumi.StringMapOutput { return o.ApplyT(func(v ServiceTemplateMetadata) map[string]string { return v.Annotations }).(pulumi.StringMapOutput) } @@ -2309,15 +2222,6 @@ func (o ServiceTemplateMetadataPtrOutput) Elem() ServiceTemplateMetadataOutput { }).(ServiceTemplateMetadataOutput) } -// Annotations is a key value map stored with a resource that -// may be set by external tools to store and retrieve arbitrary metadata. More -// info: http://kubernetes.io/docs/user-guide/annotations -// **Note**: The Cloud Run API may add additional annotations that were not provided in your config. -// If the provider plan shows a diff where a server-side annotation is added, you can add it to your config -// or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. -// Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: -// - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) -// for the Service. For example, `"run.googleapis.com/ingress" = "all"`. func (o ServiceTemplateMetadataPtrOutput) Annotations() pulumi.StringMapOutput { return o.ApplyT(func(v *ServiceTemplateMetadata) map[string]string { if v == nil { @@ -2745,10 +2649,7 @@ type ServiceTemplateSpecContainer struct { // Docker image name. This is most often a reference to a container located // in the container registry, such as gcr.io/cloudrun/hello // More info: https://kubernetes.io/docs/concepts/containers/images - Image string `pulumi:"image"` - // Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - // https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - // Structure is documented below. + Image string `pulumi:"image"` LivenessProbe *ServiceTemplateSpecContainerLivenessProbe `pulumi:"livenessProbe"` // List of open ports in the container. // More Info: @@ -2822,10 +2723,7 @@ type ServiceTemplateSpecContainerArgs struct { // Docker image name. This is most often a reference to a container located // in the container registry, such as gcr.io/cloudrun/hello // More info: https://kubernetes.io/docs/concepts/containers/images - Image pulumi.StringInput `pulumi:"image"` - // Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - // https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - // Structure is documented below. + Image pulumi.StringInput `pulumi:"image"` LivenessProbe ServiceTemplateSpecContainerLivenessProbePtrInput `pulumi:"livenessProbe"` // List of open ports in the container. // More Info: @@ -2954,9 +2852,6 @@ func (o ServiceTemplateSpecContainerOutput) Image() pulumi.StringOutput { return o.ApplyT(func(v ServiceTemplateSpecContainer) string { return v.Image }).(pulumi.StringOutput) } -// Periodic probe of container liveness. Container will be restarted if the probe fails. More info: -// https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes -// Structure is documented below. func (o ServiceTemplateSpecContainerOutput) LivenessProbe() ServiceTemplateSpecContainerLivenessProbePtrOutput { return o.ApplyT(func(v ServiceTemplateSpecContainer) *ServiceTemplateSpecContainerLivenessProbe { return v.LivenessProbe diff --git a/sdk/go/gcp/cloudrun/service.go b/sdk/go/gcp/cloudrun/service.go index cec11b99e4..719b26be40 100644 --- a/sdk/go/gcp/cloudrun/service.go +++ b/sdk/go/gcp/cloudrun/service.go @@ -36,103 +36,6 @@ import ( // Have a look at the Cloud Run Anthos example below. // // ## Example Usage -// ### Cloud Run Service Pubsub -// -// ```go -// package main -// -// import ( -// -// "fmt" -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrun" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/pubsub" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := cloudrun.NewService(ctx, "default", &cloudrun.ServiceArgs{ -// Location: pulumi.String("us-central1"), -// Template: &cloudrun.ServiceTemplateArgs{ -// Spec: &cloudrun.ServiceTemplateSpecArgs{ -// Containers: cloudrun.ServiceTemplateSpecContainerArray{ -// &cloudrun.ServiceTemplateSpecContainerArgs{ -// Image: pulumi.String("gcr.io/cloudrun/hello"), -// }, -// }, -// }, -// }, -// Traffics: cloudrun.ServiceTrafficArray{ -// &cloudrun.ServiceTrafficArgs{ -// Percent: pulumi.Int(100), -// LatestRevision: pulumi.Bool(true), -// }, -// }, -// }) -// if err != nil { -// return err -// } -// sa, err := serviceAccount.NewAccount(ctx, "sa", &serviceAccount.AccountArgs{ -// AccountId: pulumi.String("cloud-run-pubsub-invoker"), -// DisplayName: pulumi.String("Cloud Run Pub/Sub Invoker"), -// }) -// if err != nil { -// return err -// } -// _, err = cloudrun.NewIamBinding(ctx, "binding", &cloudrun.IamBindingArgs{ -// Location: _default.Location, -// Service: _default.Name, -// Role: pulumi.String("roles/run.invoker"), -// Members: pulumi.StringArray{ -// sa.Email.ApplyT(func(email string) (string, error) { -// return fmt.Sprintf("serviceAccount:%v", email), nil -// }).(pulumi.StringOutput), -// }, -// }) -// if err != nil { -// return err -// } -// _, err = projects.NewIAMBinding(ctx, "project", &projects.IAMBindingArgs{ -// Role: pulumi.String("roles/iam.serviceAccountTokenCreator"), -// Members: pulumi.StringArray{ -// sa.Email.ApplyT(func(email string) (string, error) { -// return fmt.Sprintf("serviceAccount:%v", email), nil -// }).(pulumi.StringOutput), -// }, -// }) -// if err != nil { -// return err -// } -// topic, err := pubsub.NewTopic(ctx, "topic", nil) -// if err != nil { -// return err -// } -// _, err = pubsub.NewSubscription(ctx, "subscription", &pubsub.SubscriptionArgs{ -// Topic: topic.Name, -// PushConfig: &pubsub.SubscriptionPushConfigArgs{ -// PushEndpoint: _default.Statuses.ApplyT(func(statuses []cloudrun.ServiceStatus) (*string, error) { -// return &statuses[0].Url, nil -// }).(pulumi.StringPtrOutput), -// OidcToken: &pubsub.SubscriptionPushConfigOidcTokenArgs{ -// ServiceAccountEmail: sa.Email, -// }, -// Attributes: pulumi.StringMap{ -// "x-goog-version": pulumi.String("v1"), -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // ### Cloud Run Service Basic // // ```go @@ -213,7 +116,7 @@ import ( // Annotations: pulumi.StringMap{ // "autoscaling.knative.dev/maxScale": pulumi.String("1000"), // "run.googleapis.com/cloudsql-instances": instance.ConnectionName, -// "run.googleapis.com/client-name": pulumi.String("demo"), +// "run.googleapis.com/client-name": pulumi.String("terraform"), // }, // }, // }, diff --git a/sdk/go/gcp/cloudrunv2/job.go b/sdk/go/gcp/cloudrunv2/job.go index d298f6d0d3..f274740627 100644 --- a/sdk/go/gcp/cloudrunv2/job.go +++ b/sdk/go/gcp/cloudrunv2/job.go @@ -234,55 +234,6 @@ import ( // } // // ``` -// ### Cloudrunv2 Job Probes -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/cloudrunv2" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := cloudrunv2.NewJob(ctx, "default", &cloudrunv2.JobArgs{ -// LaunchStage: pulumi.String("BETA"), -// Location: pulumi.String("us-central1"), -// Template: &cloudrunv2.JobTemplateArgs{ -// Template: &cloudrunv2.JobTemplateTemplateArgs{ -// Containers: cloudrunv2.JobTemplateTemplateContainerArray{ -// &cloudrunv2.JobTemplateTemplateContainerArgs{ -// Image: pulumi.String("us-docker.pkg.dev/cloudrun/container/hello"), -// LivenessProbe: &cloudrunv2.JobTemplateTemplateContainerLivenessProbeArgs{ -// HttpGet: &cloudrunv2.JobTemplateTemplateContainerLivenessProbeHttpGetArgs{ -// Path: pulumi.String("/"), -// }, -// }, -// StartupProbe: &cloudrunv2.JobTemplateTemplateContainerStartupProbeArgs{ -// FailureThreshold: pulumi.Int(1), -// InitialDelaySeconds: pulumi.Int(0), -// PeriodSeconds: pulumi.Int(3), -// TcpSocket: &cloudrunv2.JobTemplateTemplateContainerStartupProbeTcpSocketArgs{ -// Port: pulumi.Int(8080), -// }, -// TimeoutSeconds: pulumi.Int(1), -// }, -// }, -// }, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // ### Cloudrunv2 Job Secret // // ```go diff --git a/sdk/go/gcp/cloudrunv2/pulumiTypes.go b/sdk/go/gcp/cloudrunv2/pulumiTypes.go index 0361c80f65..16134ec487 100644 --- a/sdk/go/gcp/cloudrunv2/pulumiTypes.go +++ b/sdk/go/gcp/cloudrunv2/pulumiTypes.go @@ -1274,8 +1274,12 @@ type JobTemplateTemplateContainer struct { Envs []JobTemplateTemplateContainerEnv `pulumi:"envs"` // URL of the Container image in Google Container Registry or Google Artifact Registry. More info: https://kubernetes.io/docs/concepts/containers/images Image string `pulumi:"image"` + // (Optional, Deprecated) // Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + // This field is not supported in Cloud Run Job currently. // Structure is documented below. + // + // Deprecated: Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. LivenessProbe *JobTemplateTemplateContainerLivenessProbe `pulumi:"livenessProbe"` // Name of the container specified as a DNS_LABEL. Name *string `pulumi:"name"` @@ -1286,8 +1290,12 @@ type JobTemplateTemplateContainer struct { // Compute Resource requirements by this container. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources // Structure is documented below. Resources *JobTemplateTemplateContainerResources `pulumi:"resources"` + // (Optional, Deprecated) // Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + // This field is not supported in Cloud Run Job currently. // Structure is documented below. + // + // Deprecated: Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. StartupProbe *JobTemplateTemplateContainerStartupProbe `pulumi:"startupProbe"` // Volume to mount into the container's filesystem. // Structure is documented below. @@ -1317,8 +1325,12 @@ type JobTemplateTemplateContainerArgs struct { Envs JobTemplateTemplateContainerEnvArrayInput `pulumi:"envs"` // URL of the Container image in Google Container Registry or Google Artifact Registry. More info: https://kubernetes.io/docs/concepts/containers/images Image pulumi.StringInput `pulumi:"image"` + // (Optional, Deprecated) // Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + // This field is not supported in Cloud Run Job currently. // Structure is documented below. + // + // Deprecated: Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. LivenessProbe JobTemplateTemplateContainerLivenessProbePtrInput `pulumi:"livenessProbe"` // Name of the container specified as a DNS_LABEL. Name pulumi.StringPtrInput `pulumi:"name"` @@ -1329,8 +1341,12 @@ type JobTemplateTemplateContainerArgs struct { // Compute Resource requirements by this container. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources // Structure is documented below. Resources JobTemplateTemplateContainerResourcesPtrInput `pulumi:"resources"` + // (Optional, Deprecated) // Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + // This field is not supported in Cloud Run Job currently. // Structure is documented below. + // + // Deprecated: Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. StartupProbe JobTemplateTemplateContainerStartupProbePtrInput `pulumi:"startupProbe"` // Volume to mount into the container's filesystem. // Structure is documented below. @@ -1411,8 +1427,12 @@ func (o JobTemplateTemplateContainerOutput) Image() pulumi.StringOutput { return o.ApplyT(func(v JobTemplateTemplateContainer) string { return v.Image }).(pulumi.StringOutput) } +// (Optional, Deprecated) // Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes +// This field is not supported in Cloud Run Job currently. // Structure is documented below. +// +// Deprecated: Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. func (o JobTemplateTemplateContainerOutput) LivenessProbe() JobTemplateTemplateContainerLivenessProbePtrOutput { return o.ApplyT(func(v JobTemplateTemplateContainer) *JobTemplateTemplateContainerLivenessProbe { return v.LivenessProbe @@ -1437,8 +1457,12 @@ func (o JobTemplateTemplateContainerOutput) Resources() JobTemplateTemplateConta return o.ApplyT(func(v JobTemplateTemplateContainer) *JobTemplateTemplateContainerResources { return v.Resources }).(JobTemplateTemplateContainerResourcesPtrOutput) } +// (Optional, Deprecated) // Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes +// This field is not supported in Cloud Run Job currently. // Structure is documented below. +// +// Deprecated: Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. func (o JobTemplateTemplateContainerOutput) StartupProbe() JobTemplateTemplateContainerStartupProbePtrOutput { return o.ApplyT(func(v JobTemplateTemplateContainer) *JobTemplateTemplateContainerStartupProbe { return v.StartupProbe }).(JobTemplateTemplateContainerStartupProbePtrOutput) } @@ -6063,15 +6087,18 @@ func (o ServiceTemplateContainerEnvValueSourceSecretKeyRefPtrOutput) Version() p type ServiceTemplateContainerLivenessProbe struct { // Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. FailureThreshold *int `pulumi:"failureThreshold"` - // HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + // HTTPGet specifies the http request to perform. // Structure is documented below. HttpGet *ServiceTemplateContainerLivenessProbeHttpGet `pulumi:"httpGet"` // Number of seconds after the container has started before the probe is initiated. Defaults to 0 seconds. Minimum value is 0. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes InitialDelaySeconds *int `pulumi:"initialDelaySeconds"` // How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240. Must be greater or equal than timeoutSeconds PeriodSeconds *int `pulumi:"periodSeconds"` - // TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + // (Optional, Deprecated) + // TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. // Structure is documented below. + // + // Deprecated: Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. TcpSocket *ServiceTemplateContainerLivenessProbeTcpSocket `pulumi:"tcpSocket"` // Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. Maximum value is 3600. Must be smaller than periodSeconds. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes TimeoutSeconds *int `pulumi:"timeoutSeconds"` @@ -6091,15 +6118,18 @@ type ServiceTemplateContainerLivenessProbeInput interface { type ServiceTemplateContainerLivenessProbeArgs struct { // Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. FailureThreshold pulumi.IntPtrInput `pulumi:"failureThreshold"` - // HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + // HTTPGet specifies the http request to perform. // Structure is documented below. HttpGet ServiceTemplateContainerLivenessProbeHttpGetPtrInput `pulumi:"httpGet"` // Number of seconds after the container has started before the probe is initiated. Defaults to 0 seconds. Minimum value is 0. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes InitialDelaySeconds pulumi.IntPtrInput `pulumi:"initialDelaySeconds"` // How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240. Must be greater or equal than timeoutSeconds PeriodSeconds pulumi.IntPtrInput `pulumi:"periodSeconds"` - // TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + // (Optional, Deprecated) + // TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. // Structure is documented below. + // + // Deprecated: Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. TcpSocket ServiceTemplateContainerLivenessProbeTcpSocketPtrInput `pulumi:"tcpSocket"` // Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. Maximum value is 3600. Must be smaller than periodSeconds. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes TimeoutSeconds pulumi.IntPtrInput `pulumi:"timeoutSeconds"` @@ -6187,7 +6217,7 @@ func (o ServiceTemplateContainerLivenessProbeOutput) FailureThreshold() pulumi.I return o.ApplyT(func(v ServiceTemplateContainerLivenessProbe) *int { return v.FailureThreshold }).(pulumi.IntPtrOutput) } -// HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. +// HTTPGet specifies the http request to perform. // Structure is documented below. func (o ServiceTemplateContainerLivenessProbeOutput) HttpGet() ServiceTemplateContainerLivenessProbeHttpGetPtrOutput { return o.ApplyT(func(v ServiceTemplateContainerLivenessProbe) *ServiceTemplateContainerLivenessProbeHttpGet { @@ -6205,8 +6235,11 @@ func (o ServiceTemplateContainerLivenessProbeOutput) PeriodSeconds() pulumi.IntP return o.ApplyT(func(v ServiceTemplateContainerLivenessProbe) *int { return v.PeriodSeconds }).(pulumi.IntPtrOutput) } -// TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. +// (Optional, Deprecated) +// TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. // Structure is documented below. +// +// Deprecated: Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. func (o ServiceTemplateContainerLivenessProbeOutput) TcpSocket() ServiceTemplateContainerLivenessProbeTcpSocketPtrOutput { return o.ApplyT(func(v ServiceTemplateContainerLivenessProbe) *ServiceTemplateContainerLivenessProbeTcpSocket { return v.TcpSocket @@ -6252,7 +6285,7 @@ func (o ServiceTemplateContainerLivenessProbePtrOutput) FailureThreshold() pulum }).(pulumi.IntPtrOutput) } -// HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. +// HTTPGet specifies the http request to perform. // Structure is documented below. func (o ServiceTemplateContainerLivenessProbePtrOutput) HttpGet() ServiceTemplateContainerLivenessProbeHttpGetPtrOutput { return o.ApplyT(func(v *ServiceTemplateContainerLivenessProbe) *ServiceTemplateContainerLivenessProbeHttpGet { @@ -6283,8 +6316,11 @@ func (o ServiceTemplateContainerLivenessProbePtrOutput) PeriodSeconds() pulumi.I }).(pulumi.IntPtrOutput) } -// TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. +// (Optional, Deprecated) +// TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. // Structure is documented below. +// +// Deprecated: Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. func (o ServiceTemplateContainerLivenessProbePtrOutput) TcpSocket() ServiceTemplateContainerLivenessProbeTcpSocketPtrOutput { return o.ApplyT(func(v *ServiceTemplateContainerLivenessProbe) *ServiceTemplateContainerLivenessProbeTcpSocket { if v == nil { diff --git a/sdk/go/gcp/cloudscheduler/job.go b/sdk/go/gcp/cloudscheduler/job.go index d6978c9b04..7766e50384 100644 --- a/sdk/go/gcp/cloudscheduler/job.go +++ b/sdk/go/gcp/cloudscheduler/job.go @@ -208,7 +208,7 @@ type Job struct { // a message to the provided topic // Structure is documented below. PubsubTarget JobPubsubTargetPtrOutput `pulumi:"pubsubTarget"` - // Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + // Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. Region pulumi.StringOutput `pulumi:"region"` // By default, if a job does not complete successfully, // meaning that an acknowledgement is not received from the handler, @@ -287,7 +287,7 @@ type jobState struct { // a message to the provided topic // Structure is documented below. PubsubTarget *JobPubsubTarget `pulumi:"pubsubTarget"` - // Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + // Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. Region *string `pulumi:"region"` // By default, if a job does not complete successfully, // meaning that an acknowledgement is not received from the handler, @@ -338,7 +338,7 @@ type JobState struct { // a message to the provided topic // Structure is documented below. PubsubTarget JobPubsubTargetPtrInput - // Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + // Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. Region pulumi.StringPtrInput // By default, if a job does not complete successfully, // meaning that an acknowledgement is not received from the handler, @@ -393,7 +393,7 @@ type jobArgs struct { // a message to the provided topic // Structure is documented below. PubsubTarget *JobPubsubTarget `pulumi:"pubsubTarget"` - // Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + // Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. Region *string `pulumi:"region"` // By default, if a job does not complete successfully, // meaning that an acknowledgement is not received from the handler, @@ -443,7 +443,7 @@ type JobArgs struct { // a message to the provided topic // Structure is documented below. PubsubTarget JobPubsubTargetPtrInput - // Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + // Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. Region pulumi.StringPtrInput // By default, if a job does not complete successfully, // meaning that an acknowledgement is not received from the handler, @@ -602,7 +602,7 @@ func (o JobOutput) PubsubTarget() JobPubsubTargetPtrOutput { return o.ApplyT(func(v *Job) JobPubsubTargetPtrOutput { return v.PubsubTarget }).(JobPubsubTargetPtrOutput) } -// Region where the scheduler job resides. If it is not provided, this provider will use the provider default. +// Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. func (o JobOutput) Region() pulumi.StringOutput { return o.ApplyT(func(v *Job) pulumi.StringOutput { return v.Region }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/composer/getEnvironment.go b/sdk/go/gcp/composer/getEnvironment.go index 1d99525c4e..02b39b2db8 100644 --- a/sdk/go/gcp/composer/getEnvironment.go +++ b/sdk/go/gcp/composer/getEnvironment.go @@ -33,7 +33,6 @@ type LookupEnvironmentArgs struct { // A collection of values returned by getEnvironment. type LookupEnvironmentResult struct { - // Configuration parameters for the environment. Configs []GetEnvironmentConfig `pulumi:"configs"` // The provider-assigned unique ID for this managed resource. Id string `pulumi:"id"` @@ -86,7 +85,6 @@ func (o LookupEnvironmentResultOutput) ToLookupEnvironmentResultOutputWithContex return o } -// Configuration parameters for the environment. func (o LookupEnvironmentResultOutput) Configs() GetEnvironmentConfigArrayOutput { return o.ApplyT(func(v LookupEnvironmentResult) []GetEnvironmentConfig { return v.Configs }).(GetEnvironmentConfigArrayOutput) } diff --git a/sdk/go/gcp/composer/pulumiTypes.go b/sdk/go/gcp/composer/pulumiTypes.go index 4312c99fb7..841fd8a417 100644 --- a/sdk/go/gcp/composer/pulumiTypes.go +++ b/sdk/go/gcp/composer/pulumiTypes.go @@ -2070,12 +2070,13 @@ func (o EnvironmentConfigRecoveryConfigScheduledSnapshotsConfigPtrOutput) TimeZo } type EnvironmentConfigSoftwareConfig struct { - AirflowConfigOverrides map[string]string `pulumi:"airflowConfigOverrides"` - EnvVariables map[string]string `pulumi:"envVariables"` - ImageVersion *string `pulumi:"imageVersion"` - PypiPackages map[string]string `pulumi:"pypiPackages"` - PythonVersion *string `pulumi:"pythonVersion"` - SchedulerCount *int `pulumi:"schedulerCount"` + AirflowConfigOverrides map[string]string `pulumi:"airflowConfigOverrides"` + CloudDataLineageIntegration *EnvironmentConfigSoftwareConfigCloudDataLineageIntegration `pulumi:"cloudDataLineageIntegration"` + EnvVariables map[string]string `pulumi:"envVariables"` + ImageVersion *string `pulumi:"imageVersion"` + PypiPackages map[string]string `pulumi:"pypiPackages"` + PythonVersion *string `pulumi:"pythonVersion"` + SchedulerCount *int `pulumi:"schedulerCount"` } // EnvironmentConfigSoftwareConfigInput is an input type that accepts EnvironmentConfigSoftwareConfigArgs and EnvironmentConfigSoftwareConfigOutput values. @@ -2090,12 +2091,13 @@ type EnvironmentConfigSoftwareConfigInput interface { } type EnvironmentConfigSoftwareConfigArgs struct { - AirflowConfigOverrides pulumi.StringMapInput `pulumi:"airflowConfigOverrides"` - EnvVariables pulumi.StringMapInput `pulumi:"envVariables"` - ImageVersion pulumi.StringPtrInput `pulumi:"imageVersion"` - PypiPackages pulumi.StringMapInput `pulumi:"pypiPackages"` - PythonVersion pulumi.StringPtrInput `pulumi:"pythonVersion"` - SchedulerCount pulumi.IntPtrInput `pulumi:"schedulerCount"` + AirflowConfigOverrides pulumi.StringMapInput `pulumi:"airflowConfigOverrides"` + CloudDataLineageIntegration EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrInput `pulumi:"cloudDataLineageIntegration"` + EnvVariables pulumi.StringMapInput `pulumi:"envVariables"` + ImageVersion pulumi.StringPtrInput `pulumi:"imageVersion"` + PypiPackages pulumi.StringMapInput `pulumi:"pypiPackages"` + PythonVersion pulumi.StringPtrInput `pulumi:"pythonVersion"` + SchedulerCount pulumi.IntPtrInput `pulumi:"schedulerCount"` } func (EnvironmentConfigSoftwareConfigArgs) ElementType() reflect.Type { @@ -2179,6 +2181,12 @@ func (o EnvironmentConfigSoftwareConfigOutput) AirflowConfigOverrides() pulumi.S return o.ApplyT(func(v EnvironmentConfigSoftwareConfig) map[string]string { return v.AirflowConfigOverrides }).(pulumi.StringMapOutput) } +func (o EnvironmentConfigSoftwareConfigOutput) CloudDataLineageIntegration() EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput { + return o.ApplyT(func(v EnvironmentConfigSoftwareConfig) *EnvironmentConfigSoftwareConfigCloudDataLineageIntegration { + return v.CloudDataLineageIntegration + }).(EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput) +} + func (o EnvironmentConfigSoftwareConfigOutput) EnvVariables() pulumi.StringMapOutput { return o.ApplyT(func(v EnvironmentConfigSoftwareConfig) map[string]string { return v.EnvVariables }).(pulumi.StringMapOutput) } @@ -2232,6 +2240,15 @@ func (o EnvironmentConfigSoftwareConfigPtrOutput) AirflowConfigOverrides() pulum }).(pulumi.StringMapOutput) } +func (o EnvironmentConfigSoftwareConfigPtrOutput) CloudDataLineageIntegration() EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput { + return o.ApplyT(func(v *EnvironmentConfigSoftwareConfig) *EnvironmentConfigSoftwareConfigCloudDataLineageIntegration { + if v == nil { + return nil + } + return v.CloudDataLineageIntegration + }).(EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput) +} + func (o EnvironmentConfigSoftwareConfigPtrOutput) EnvVariables() pulumi.StringMapOutput { return o.ApplyT(func(v *EnvironmentConfigSoftwareConfig) map[string]string { if v == nil { @@ -2277,6 +2294,139 @@ func (o EnvironmentConfigSoftwareConfigPtrOutput) SchedulerCount() pulumi.IntPtr }).(pulumi.IntPtrOutput) } +type EnvironmentConfigSoftwareConfigCloudDataLineageIntegration struct { + Enabled bool `pulumi:"enabled"` +} + +// EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationInput is an input type that accepts EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs and EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput values. +// You can construct a concrete instance of `EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationInput` via: +// +// EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs{...} +type EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationInput interface { + pulumi.Input + + ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput() EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput + ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutputWithContext(context.Context) EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput +} + +type EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs struct { + Enabled pulumi.BoolInput `pulumi:"enabled"` +} + +func (EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs) ElementType() reflect.Type { + return reflect.TypeOf((*EnvironmentConfigSoftwareConfigCloudDataLineageIntegration)(nil)).Elem() +} + +func (i EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs) ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput() EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput { + return i.ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutputWithContext(context.Background()) +} + +func (i EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs) ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutputWithContext(ctx context.Context) EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput { + return pulumi.ToOutputWithContext(ctx, i).(EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) +} + +func (i EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs) ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput() EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput { + return i.ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutputWithContext(context.Background()) +} + +func (i EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs) ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutputWithContext(ctx context.Context) EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput).ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutputWithContext(ctx) +} + +// EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrInput is an input type that accepts EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs, EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtr and EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput values. +// You can construct a concrete instance of `EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrInput` via: +// +// EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs{...} +// +// or: +// +// nil +type EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrInput interface { + pulumi.Input + + ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput() EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput + ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutputWithContext(context.Context) EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput +} + +type environmentConfigSoftwareConfigCloudDataLineageIntegrationPtrType EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs + +func EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtr(v *EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs) EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrInput { + return (*environmentConfigSoftwareConfigCloudDataLineageIntegrationPtrType)(v) +} + +func (*environmentConfigSoftwareConfigCloudDataLineageIntegrationPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**EnvironmentConfigSoftwareConfigCloudDataLineageIntegration)(nil)).Elem() +} + +func (i *environmentConfigSoftwareConfigCloudDataLineageIntegrationPtrType) ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput() EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput { + return i.ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutputWithContext(context.Background()) +} + +func (i *environmentConfigSoftwareConfigCloudDataLineageIntegrationPtrType) ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutputWithContext(ctx context.Context) EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput) +} + +type EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput struct{ *pulumi.OutputState } + +func (EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) ElementType() reflect.Type { + return reflect.TypeOf((*EnvironmentConfigSoftwareConfigCloudDataLineageIntegration)(nil)).Elem() +} + +func (o EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput() EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput { + return o +} + +func (o EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutputWithContext(ctx context.Context) EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput { + return o +} + +func (o EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput() EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput { + return o.ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutputWithContext(context.Background()) +} + +func (o EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutputWithContext(ctx context.Context) EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v EnvironmentConfigSoftwareConfigCloudDataLineageIntegration) *EnvironmentConfigSoftwareConfigCloudDataLineageIntegration { + return &v + }).(EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput) +} + +func (o EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) Enabled() pulumi.BoolOutput { + return o.ApplyT(func(v EnvironmentConfigSoftwareConfigCloudDataLineageIntegration) bool { return v.Enabled }).(pulumi.BoolOutput) +} + +type EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput struct{ *pulumi.OutputState } + +func (EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**EnvironmentConfigSoftwareConfigCloudDataLineageIntegration)(nil)).Elem() +} + +func (o EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput) ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput() EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput { + return o +} + +func (o EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput) ToEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutputWithContext(ctx context.Context) EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput { + return o +} + +func (o EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput) Elem() EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput { + return o.ApplyT(func(v *EnvironmentConfigSoftwareConfigCloudDataLineageIntegration) EnvironmentConfigSoftwareConfigCloudDataLineageIntegration { + if v != nil { + return *v + } + var ret EnvironmentConfigSoftwareConfigCloudDataLineageIntegration + return ret + }).(EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) +} + +func (o EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput) Enabled() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *EnvironmentConfigSoftwareConfigCloudDataLineageIntegration) *bool { + if v == nil { + return nil + } + return &v.Enabled + }).(pulumi.BoolPtrOutput) +} + type EnvironmentConfigWebServerConfig struct { MachineType string `pulumi:"machineType"` } @@ -4831,12 +4981,13 @@ func (o GetEnvironmentConfigRecoveryConfigScheduledSnapshotsConfigArrayOutput) I } type GetEnvironmentConfigSoftwareConfig struct { - AirflowConfigOverrides map[string]string `pulumi:"airflowConfigOverrides"` - EnvVariables map[string]string `pulumi:"envVariables"` - ImageVersion string `pulumi:"imageVersion"` - PypiPackages map[string]string `pulumi:"pypiPackages"` - PythonVersion string `pulumi:"pythonVersion"` - SchedulerCount int `pulumi:"schedulerCount"` + AirflowConfigOverrides map[string]string `pulumi:"airflowConfigOverrides"` + CloudDataLineageIntegrations []GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration `pulumi:"cloudDataLineageIntegrations"` + EnvVariables map[string]string `pulumi:"envVariables"` + ImageVersion string `pulumi:"imageVersion"` + PypiPackages map[string]string `pulumi:"pypiPackages"` + PythonVersion string `pulumi:"pythonVersion"` + SchedulerCount int `pulumi:"schedulerCount"` } // GetEnvironmentConfigSoftwareConfigInput is an input type that accepts GetEnvironmentConfigSoftwareConfigArgs and GetEnvironmentConfigSoftwareConfigOutput values. @@ -4851,12 +5002,13 @@ type GetEnvironmentConfigSoftwareConfigInput interface { } type GetEnvironmentConfigSoftwareConfigArgs struct { - AirflowConfigOverrides pulumi.StringMapInput `pulumi:"airflowConfigOverrides"` - EnvVariables pulumi.StringMapInput `pulumi:"envVariables"` - ImageVersion pulumi.StringInput `pulumi:"imageVersion"` - PypiPackages pulumi.StringMapInput `pulumi:"pypiPackages"` - PythonVersion pulumi.StringInput `pulumi:"pythonVersion"` - SchedulerCount pulumi.IntInput `pulumi:"schedulerCount"` + AirflowConfigOverrides pulumi.StringMapInput `pulumi:"airflowConfigOverrides"` + CloudDataLineageIntegrations GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayInput `pulumi:"cloudDataLineageIntegrations"` + EnvVariables pulumi.StringMapInput `pulumi:"envVariables"` + ImageVersion pulumi.StringInput `pulumi:"imageVersion"` + PypiPackages pulumi.StringMapInput `pulumi:"pypiPackages"` + PythonVersion pulumi.StringInput `pulumi:"pythonVersion"` + SchedulerCount pulumi.IntInput `pulumi:"schedulerCount"` } func (GetEnvironmentConfigSoftwareConfigArgs) ElementType() reflect.Type { @@ -4914,6 +5066,12 @@ func (o GetEnvironmentConfigSoftwareConfigOutput) AirflowConfigOverrides() pulum return o.ApplyT(func(v GetEnvironmentConfigSoftwareConfig) map[string]string { return v.AirflowConfigOverrides }).(pulumi.StringMapOutput) } +func (o GetEnvironmentConfigSoftwareConfigOutput) CloudDataLineageIntegrations() GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput { + return o.ApplyT(func(v GetEnvironmentConfigSoftwareConfig) []GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration { + return v.CloudDataLineageIntegrations + }).(GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput) +} + func (o GetEnvironmentConfigSoftwareConfigOutput) EnvVariables() pulumi.StringMapOutput { return o.ApplyT(func(v GetEnvironmentConfigSoftwareConfig) map[string]string { return v.EnvVariables }).(pulumi.StringMapOutput) } @@ -4954,6 +5112,100 @@ func (o GetEnvironmentConfigSoftwareConfigArrayOutput) Index(i pulumi.IntInput) }).(GetEnvironmentConfigSoftwareConfigOutput) } +type GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration struct { + Enabled bool `pulumi:"enabled"` +} + +// GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationInput is an input type that accepts GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs and GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput values. +// You can construct a concrete instance of `GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationInput` via: +// +// GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs{...} +type GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationInput interface { + pulumi.Input + + ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput() GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput + ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutputWithContext(context.Context) GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput +} + +type GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs struct { + Enabled pulumi.BoolInput `pulumi:"enabled"` +} + +func (GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration)(nil)).Elem() +} + +func (i GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs) ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput() GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput { + return i.ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutputWithContext(context.Background()) +} + +func (i GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs) ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutputWithContext(ctx context.Context) GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) +} + +// GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayInput is an input type that accepts GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArray and GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput values. +// You can construct a concrete instance of `GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayInput` via: +// +// GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArray{ GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs{...} } +type GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayInput interface { + pulumi.Input + + ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput() GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput + ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutputWithContext(context.Context) GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput +} + +type GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArray []GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationInput + +func (GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration)(nil)).Elem() +} + +func (i GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArray) ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput() GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput { + return i.ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutputWithContext(context.Background()) +} + +func (i GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArray) ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutputWithContext(ctx context.Context) GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput) +} + +type GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput struct{ *pulumi.OutputState } + +func (GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration)(nil)).Elem() +} + +func (o GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput() GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput { + return o +} + +func (o GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutputWithContext(ctx context.Context) GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput { + return o +} + +func (o GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) Enabled() pulumi.BoolOutput { + return o.ApplyT(func(v GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration) bool { return v.Enabled }).(pulumi.BoolOutput) +} + +type GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput struct{ *pulumi.OutputState } + +func (GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration)(nil)).Elem() +} + +func (o GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput) ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput() GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput { + return o +} + +func (o GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput) ToGetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutputWithContext(ctx context.Context) GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput { + return o +} + +func (o GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput) Index(i pulumi.IntInput) GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration { + return vs[0].([]GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration)[vs[1].(int)] + }).(GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput) +} + type GetEnvironmentConfigWebServerConfig struct { MachineType string `pulumi:"machineType"` } @@ -5937,6 +6189,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentConfigRecoveryConfigScheduledSnapshotsConfigPtrInput)(nil)).Elem(), EnvironmentConfigRecoveryConfigScheduledSnapshotsConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentConfigSoftwareConfigInput)(nil)).Elem(), EnvironmentConfigSoftwareConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentConfigSoftwareConfigPtrInput)(nil)).Elem(), EnvironmentConfigSoftwareConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationInput)(nil)).Elem(), EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrInput)(nil)).Elem(), EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentConfigWebServerConfigInput)(nil)).Elem(), EnvironmentConfigWebServerConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentConfigWebServerConfigPtrInput)(nil)).Elem(), EnvironmentConfigWebServerConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*EnvironmentConfigWebServerNetworkAccessControlInput)(nil)).Elem(), EnvironmentConfigWebServerNetworkAccessControlArgs{}) @@ -5977,6 +6231,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetEnvironmentConfigRecoveryConfigScheduledSnapshotsConfigArrayInput)(nil)).Elem(), GetEnvironmentConfigRecoveryConfigScheduledSnapshotsConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetEnvironmentConfigSoftwareConfigInput)(nil)).Elem(), GetEnvironmentConfigSoftwareConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetEnvironmentConfigSoftwareConfigArrayInput)(nil)).Elem(), GetEnvironmentConfigSoftwareConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationInput)(nil)).Elem(), GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayInput)(nil)).Elem(), GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetEnvironmentConfigWebServerConfigInput)(nil)).Elem(), GetEnvironmentConfigWebServerConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetEnvironmentConfigWebServerConfigArrayInput)(nil)).Elem(), GetEnvironmentConfigWebServerConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetEnvironmentConfigWebServerNetworkAccessControlInput)(nil)).Elem(), GetEnvironmentConfigWebServerNetworkAccessControlArgs{}) @@ -6019,6 +6275,8 @@ func init() { pulumi.RegisterOutputType(EnvironmentConfigRecoveryConfigScheduledSnapshotsConfigPtrOutput{}) pulumi.RegisterOutputType(EnvironmentConfigSoftwareConfigOutput{}) pulumi.RegisterOutputType(EnvironmentConfigSoftwareConfigPtrOutput{}) + pulumi.RegisterOutputType(EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput{}) + pulumi.RegisterOutputType(EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationPtrOutput{}) pulumi.RegisterOutputType(EnvironmentConfigWebServerConfigOutput{}) pulumi.RegisterOutputType(EnvironmentConfigWebServerConfigPtrOutput{}) pulumi.RegisterOutputType(EnvironmentConfigWebServerNetworkAccessControlOutput{}) @@ -6059,6 +6317,8 @@ func init() { pulumi.RegisterOutputType(GetEnvironmentConfigRecoveryConfigScheduledSnapshotsConfigArrayOutput{}) pulumi.RegisterOutputType(GetEnvironmentConfigSoftwareConfigOutput{}) pulumi.RegisterOutputType(GetEnvironmentConfigSoftwareConfigArrayOutput{}) + pulumi.RegisterOutputType(GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationOutput{}) + pulumi.RegisterOutputType(GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArrayOutput{}) pulumi.RegisterOutputType(GetEnvironmentConfigWebServerConfigOutput{}) pulumi.RegisterOutputType(GetEnvironmentConfigWebServerConfigArrayOutput{}) pulumi.RegisterOutputType(GetEnvironmentConfigWebServerNetworkAccessControlOutput{}) diff --git a/sdk/go/gcp/compute/address.go b/sdk/go/gcp/compute/address.go index 28abd05a31..7f26ed2d0f 100644 --- a/sdk/go/gcp/compute/address.go +++ b/sdk/go/gcp/compute/address.go @@ -254,7 +254,7 @@ type Address struct { Description pulumi.StringPtrOutput `pulumi:"description"` // The fingerprint used for optimistic locking of this resource. Used internally during updates. LabelFingerprint pulumi.StringOutput `pulumi:"labelFingerprint"` - // Labels to apply to this address. A list of key->value pairs. + // Labels to apply to this address. A list of key->value pairs. Labels pulumi.StringMapOutput `pulumi:"labels"` // Name of the resource. The name must be 1-63 characters long, and // comply with RFC1035. Specifically, the name must be 1-63 characters @@ -348,7 +348,7 @@ type addressState struct { Description *string `pulumi:"description"` // The fingerprint used for optimistic locking of this resource. Used internally during updates. LabelFingerprint *string `pulumi:"labelFingerprint"` - // Labels to apply to this address. A list of key->value pairs. + // Labels to apply to this address. A list of key->value pairs. Labels map[string]string `pulumi:"labels"` // Name of the resource. The name must be 1-63 characters long, and // comply with RFC1035. Specifically, the name must be 1-63 characters @@ -414,7 +414,7 @@ type AddressState struct { Description pulumi.StringPtrInput // The fingerprint used for optimistic locking of this resource. Used internally during updates. LabelFingerprint pulumi.StringPtrInput - // Labels to apply to this address. A list of key->value pairs. + // Labels to apply to this address. A list of key->value pairs. Labels pulumi.StringMapInput // Name of the resource. The name must be 1-63 characters long, and // comply with RFC1035. Specifically, the name must be 1-63 characters @@ -480,7 +480,7 @@ type addressArgs struct { AddressType *string `pulumi:"addressType"` // An optional description of this resource. Description *string `pulumi:"description"` - // Labels to apply to this address. A list of key->value pairs. + // Labels to apply to this address. A list of key->value pairs. Labels map[string]string `pulumi:"labels"` // Name of the resource. The name must be 1-63 characters long, and // comply with RFC1035. Specifically, the name must be 1-63 characters @@ -539,7 +539,7 @@ type AddressArgs struct { AddressType pulumi.StringPtrInput // An optional description of this resource. Description pulumi.StringPtrInput - // Labels to apply to this address. A list of key->value pairs. + // Labels to apply to this address. A list of key->value pairs. Labels pulumi.StringMapInput // Name of the resource. The name must be 1-63 characters long, and // comply with RFC1035. Specifically, the name must be 1-63 characters @@ -702,7 +702,7 @@ func (o AddressOutput) LabelFingerprint() pulumi.StringOutput { return o.ApplyT(func(v *Address) pulumi.StringOutput { return v.LabelFingerprint }).(pulumi.StringOutput) } -// Labels to apply to this address. A list of key->value pairs. +// Labels to apply to this address. A list of key->value pairs. func (o AddressOutput) Labels() pulumi.StringMapOutput { return o.ApplyT(func(v *Address) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) } diff --git a/sdk/go/gcp/compute/attachedDisk.go b/sdk/go/gcp/compute/attachedDisk.go index 2a3bd93cba..235ebfb4a2 100644 --- a/sdk/go/gcp/compute/attachedDisk.go +++ b/sdk/go/gcp/compute/attachedDisk.go @@ -11,20 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Persistent disks can be attached to a compute instance using the `attachedDisk` -// section within the compute instance configuration. -// However there may be situations where managing the attached disks via the compute -// instance config isn't preferable or possible, such as attaching dynamic -// numbers of disks using the `count` variable. -// -// To get more information about attaching disks, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/instances/attachDisk) -// * How-to Guides -// - [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk) -// -// **Note:** When using `compute.AttachedDisk` you **must** use `lifecycle.ignore_changes = ["attachedDisk"]` on the `compute.Instance` resource that has the disks attached. Otherwise the two resources will fight for control of the attached disk block. -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/compute/backendBucketSignedUrlKey.go b/sdk/go/gcp/compute/backendBucketSignedUrlKey.go index 81aab7abdc..f7a249dfe5 100644 --- a/sdk/go/gcp/compute/backendBucketSignedUrlKey.go +++ b/sdk/go/gcp/compute/backendBucketSignedUrlKey.go @@ -11,17 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A key for signing Cloud CDN signed URLs for BackendBuckets. -// -// To get more information about BackendBucketSignedUrlKey, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendBuckets) -// * How-to Guides -// - [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/) -// -// > **Warning:** All arguments including `keyValue` will be stored in the raw -// state as plain-text. -// // ## Example Usage // ### Backend Bucket Signed Url Key // diff --git a/sdk/go/gcp/compute/backendService.go b/sdk/go/gcp/compute/backendService.go index 082893b6f4..d961cf162f 100644 --- a/sdk/go/gcp/compute/backendService.go +++ b/sdk/go/gcp/compute/backendService.go @@ -10,22 +10,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A Backend Service defines a group of virtual machines that will serve -// traffic for load balancing. This resource is a global backend service, -// appropriate for external load balancing or self-managed internal load balancing. -// For managed internal load balancing, use a regional backend service instead. -// -// Currently self-managed internal load balancing is only available in beta. -// -// To get more information about BackendService, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/v1/backendServices) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/compute/docs/load-balancing/http/backend-service) -// -// > **Warning:** All arguments including `iap.oauth2_client_secret` and `iap.oauth2_client_secret_sha256` will be stored in the raw -// state as plain-text. -// // ## Example Usage // ### Backend Service Cache Include Http Headers // @@ -253,6 +237,14 @@ type BackendService struct { // Default value is `EXTERNAL`. // Possible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`. LoadBalancingScheme pulumi.StringPtrOutput `pulumi:"loadBalancingScheme"` + // A list of locality load balancing policies to be used in order of + // preference. Either the policy or the customPolicy field should be set. + // Overrides any value set in the localityLbPolicy field. + // localityLbPolicies is only supported when the BackendService is referenced + // by a URL Map that is referenced by a target gRPC proxy that has the + // validateForProxyless field set to true. + // Structure is documented below. + LocalityLbPolicies BackendServiceLocalityLbPolicyArrayOutput `pulumi:"localityLbPolicies"` // The load balancing algorithm used within the scope of the locality. // The possible values are: LocalityLbPolicy pulumi.StringPtrOutput `pulumi:"localityLbPolicy"` @@ -401,6 +393,14 @@ type backendServiceState struct { // Default value is `EXTERNAL`. // Possible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`. LoadBalancingScheme *string `pulumi:"loadBalancingScheme"` + // A list of locality load balancing policies to be used in order of + // preference. Either the policy or the customPolicy field should be set. + // Overrides any value set in the localityLbPolicy field. + // localityLbPolicies is only supported when the BackendService is referenced + // by a URL Map that is referenced by a target gRPC proxy that has the + // validateForProxyless field set to true. + // Structure is documented below. + LocalityLbPolicies []BackendServiceLocalityLbPolicy `pulumi:"localityLbPolicies"` // The load balancing algorithm used within the scope of the locality. // The possible values are: LocalityLbPolicy *string `pulumi:"localityLbPolicy"` @@ -521,6 +521,14 @@ type BackendServiceState struct { // Default value is `EXTERNAL`. // Possible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`. LoadBalancingScheme pulumi.StringPtrInput + // A list of locality load balancing policies to be used in order of + // preference. Either the policy or the customPolicy field should be set. + // Overrides any value set in the localityLbPolicy field. + // localityLbPolicies is only supported when the BackendService is referenced + // by a URL Map that is referenced by a target gRPC proxy that has the + // validateForProxyless field set to true. + // Structure is documented below. + LocalityLbPolicies BackendServiceLocalityLbPolicyArrayInput // The load balancing algorithm used within the scope of the locality. // The possible values are: LocalityLbPolicy pulumi.StringPtrInput @@ -638,6 +646,14 @@ type backendServiceArgs struct { // Default value is `EXTERNAL`. // Possible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`. LoadBalancingScheme *string `pulumi:"loadBalancingScheme"` + // A list of locality load balancing policies to be used in order of + // preference. Either the policy or the customPolicy field should be set. + // Overrides any value set in the localityLbPolicy field. + // localityLbPolicies is only supported when the BackendService is referenced + // by a URL Map that is referenced by a target gRPC proxy that has the + // validateForProxyless field set to true. + // Structure is documented below. + LocalityLbPolicies []BackendServiceLocalityLbPolicy `pulumi:"localityLbPolicies"` // The load balancing algorithm used within the scope of the locality. // The possible values are: LocalityLbPolicy *string `pulumi:"localityLbPolicy"` @@ -750,6 +766,14 @@ type BackendServiceArgs struct { // Default value is `EXTERNAL`. // Possible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`. LoadBalancingScheme pulumi.StringPtrInput + // A list of locality load balancing policies to be used in order of + // preference. Either the policy or the customPolicy field should be set. + // Overrides any value set in the localityLbPolicy field. + // localityLbPolicies is only supported when the BackendService is referenced + // by a URL Map that is referenced by a target gRPC proxy that has the + // validateForProxyless field set to true. + // Structure is documented below. + LocalityLbPolicies BackendServiceLocalityLbPolicyArrayInput // The load balancing algorithm used within the scope of the locality. // The possible values are: LocalityLbPolicy pulumi.StringPtrInput @@ -1008,6 +1032,17 @@ func (o BackendServiceOutput) LoadBalancingScheme() pulumi.StringPtrOutput { return o.ApplyT(func(v *BackendService) pulumi.StringPtrOutput { return v.LoadBalancingScheme }).(pulumi.StringPtrOutput) } +// A list of locality load balancing policies to be used in order of +// preference. Either the policy or the customPolicy field should be set. +// Overrides any value set in the localityLbPolicy field. +// localityLbPolicies is only supported when the BackendService is referenced +// by a URL Map that is referenced by a target gRPC proxy that has the +// validateForProxyless field set to true. +// Structure is documented below. +func (o BackendServiceOutput) LocalityLbPolicies() BackendServiceLocalityLbPolicyArrayOutput { + return o.ApplyT(func(v *BackendService) BackendServiceLocalityLbPolicyArrayOutput { return v.LocalityLbPolicies }).(BackendServiceLocalityLbPolicyArrayOutput) +} + // The load balancing algorithm used within the scope of the locality. // The possible values are: func (o BackendServiceOutput) LocalityLbPolicy() pulumi.StringPtrOutput { diff --git a/sdk/go/gcp/compute/backendServiceSignedUrlKey.go b/sdk/go/gcp/compute/backendServiceSignedUrlKey.go index 86432fb0d2..579bb49a73 100644 --- a/sdk/go/gcp/compute/backendServiceSignedUrlKey.go +++ b/sdk/go/gcp/compute/backendServiceSignedUrlKey.go @@ -11,17 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A key for signing Cloud CDN signed URLs for Backend Services. -// -// To get more information about BackendServiceSignedUrlKey, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendServices) -// * How-to Guides -// - [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/) -// -// > **Warning:** All arguments including `keyValue` will be stored in the raw -// state as plain-text. -// // ## Example Usage // // ## Import diff --git a/sdk/go/gcp/compute/disk.go b/sdk/go/gcp/compute/disk.go index 1d75035356..2ae018c304 100644 --- a/sdk/go/gcp/compute/disk.go +++ b/sdk/go/gcp/compute/disk.go @@ -10,31 +10,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Persistent disks are durable storage devices that function similarly to -// the physical disks in a desktop or a server. Compute Engine manages the -// hardware behind these devices to ensure data redundancy and optimize -// performance for you. Persistent disks are available as either standard -// hard disk drives (HDD) or solid-state drives (SSD). -// -// Persistent disks are located independently from your virtual machine -// instances, so you can detach or move persistent disks to keep your data -// even after you delete your instances. Persistent disk performance scales -// automatically with size, so you can resize your existing persistent disks -// or add more persistent disks to an instance to meet your performance and -// storage space requirements. -// -// Add a persistent disk to your instance when you need reliable and -// affordable storage with consistent performance characteristics. -// -// To get more information about Disk, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/v1/disks) -// * How-to Guides -// - [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk) -// -// > **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw -// state as plain-text. -// // ## Example Usage // ### Disk Basic // @@ -158,26 +133,18 @@ type Disk struct { Project pulumi.StringOutput `pulumi:"project"` // Indicates how many IOPS must be provisioned for the disk. ProvisionedIops pulumi.IntOutput `pulumi:"provisionedIops"` - // Resource policies applied to this disk for automatic snapshot creations. - // ~>**NOTE** This value does not support updating the - // resource policy, as resource policies can not be updated more than - // one at a time. Use - // `compute.DiskResourcePolicyAttachment` + // Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + // the resource policy, as resource policies can not be updated more than one at a time. Use + // ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) // to allow for updating the resource policy attached to the disk. ResourcePolicies pulumi.StringArrayOutput `pulumi:"resourcePolicies"` // The URI of the created resource. SelfLink pulumi.StringOutput `pulumi:"selfLink"` - // Size of the persistent disk, specified in GB. You can specify this - // field when creating a persistent disk using the `image` or - // `snapshot` parameter, or specify it alone to create an empty - // persistent disk. - // If you specify this field along with `image` or `snapshot`, - // the value must not be less than the size of the image - // or the size of the snapshot. - // ~>**NOTE** If you change the size, the provider updates the disk size - // if upsizing is detected but recreates the disk if downsizing is requested. - // You can add `lifecycle.prevent_destroy` in the config to prevent destroying - // and recreating. + // Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + // 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + // with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + // ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + // downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. Size pulumi.IntOutput `pulumi:"size"` // The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. If the // snapshot is in another project than this disk, you must supply a full URL. For example, the following are valid values: @@ -318,26 +285,18 @@ type diskState struct { Project *string `pulumi:"project"` // Indicates how many IOPS must be provisioned for the disk. ProvisionedIops *int `pulumi:"provisionedIops"` - // Resource policies applied to this disk for automatic snapshot creations. - // ~>**NOTE** This value does not support updating the - // resource policy, as resource policies can not be updated more than - // one at a time. Use - // `compute.DiskResourcePolicyAttachment` + // Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + // the resource policy, as resource policies can not be updated more than one at a time. Use + // ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) // to allow for updating the resource policy attached to the disk. ResourcePolicies []string `pulumi:"resourcePolicies"` // The URI of the created resource. SelfLink *string `pulumi:"selfLink"` - // Size of the persistent disk, specified in GB. You can specify this - // field when creating a persistent disk using the `image` or - // `snapshot` parameter, or specify it alone to create an empty - // persistent disk. - // If you specify this field along with `image` or `snapshot`, - // the value must not be less than the size of the image - // or the size of the snapshot. - // ~>**NOTE** If you change the size, the provider updates the disk size - // if upsizing is detected but recreates the disk if downsizing is requested. - // You can add `lifecycle.prevent_destroy` in the config to prevent destroying - // and recreating. + // Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + // 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + // with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + // ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + // downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. Size *int `pulumi:"size"` // The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. If the // snapshot is in another project than this disk, you must supply a full URL. For example, the following are valid values: @@ -450,26 +409,18 @@ type DiskState struct { Project pulumi.StringPtrInput // Indicates how many IOPS must be provisioned for the disk. ProvisionedIops pulumi.IntPtrInput - // Resource policies applied to this disk for automatic snapshot creations. - // ~>**NOTE** This value does not support updating the - // resource policy, as resource policies can not be updated more than - // one at a time. Use - // `compute.DiskResourcePolicyAttachment` + // Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + // the resource policy, as resource policies can not be updated more than one at a time. Use + // ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) // to allow for updating the resource policy attached to the disk. ResourcePolicies pulumi.StringArrayInput // The URI of the created resource. SelfLink pulumi.StringPtrInput - // Size of the persistent disk, specified in GB. You can specify this - // field when creating a persistent disk using the `image` or - // `snapshot` parameter, or specify it alone to create an empty - // persistent disk. - // If you specify this field along with `image` or `snapshot`, - // the value must not be less than the size of the image - // or the size of the snapshot. - // ~>**NOTE** If you change the size, the provider updates the disk size - // if upsizing is detected but recreates the disk if downsizing is requested. - // You can add `lifecycle.prevent_destroy` in the config to prevent destroying - // and recreating. + // Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + // 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + // with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + // ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + // downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. Size pulumi.IntPtrInput // The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. If the // snapshot is in another project than this disk, you must supply a full URL. For example, the following are valid values: @@ -577,24 +528,16 @@ type diskArgs struct { Project *string `pulumi:"project"` // Indicates how many IOPS must be provisioned for the disk. ProvisionedIops *int `pulumi:"provisionedIops"` - // Resource policies applied to this disk for automatic snapshot creations. - // ~>**NOTE** This value does not support updating the - // resource policy, as resource policies can not be updated more than - // one at a time. Use - // `compute.DiskResourcePolicyAttachment` + // Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + // the resource policy, as resource policies can not be updated more than one at a time. Use + // ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) // to allow for updating the resource policy attached to the disk. ResourcePolicies []string `pulumi:"resourcePolicies"` - // Size of the persistent disk, specified in GB. You can specify this - // field when creating a persistent disk using the `image` or - // `snapshot` parameter, or specify it alone to create an empty - // persistent disk. - // If you specify this field along with `image` or `snapshot`, - // the value must not be less than the size of the image - // or the size of the snapshot. - // ~>**NOTE** If you change the size, the provider updates the disk size - // if upsizing is detected but recreates the disk if downsizing is requested. - // You can add `lifecycle.prevent_destroy` in the config to prevent destroying - // and recreating. + // Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + // 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + // with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + // ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + // downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. Size *int `pulumi:"size"` // The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. If the // snapshot is in another project than this disk, you must supply a full URL. For example, the following are valid values: @@ -679,24 +622,16 @@ type DiskArgs struct { Project pulumi.StringPtrInput // Indicates how many IOPS must be provisioned for the disk. ProvisionedIops pulumi.IntPtrInput - // Resource policies applied to this disk for automatic snapshot creations. - // ~>**NOTE** This value does not support updating the - // resource policy, as resource policies can not be updated more than - // one at a time. Use - // `compute.DiskResourcePolicyAttachment` + // Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + // the resource policy, as resource policies can not be updated more than one at a time. Use + // ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) // to allow for updating the resource policy attached to the disk. ResourcePolicies pulumi.StringArrayInput - // Size of the persistent disk, specified in GB. You can specify this - // field when creating a persistent disk using the `image` or - // `snapshot` parameter, or specify it alone to create an empty - // persistent disk. - // If you specify this field along with `image` or `snapshot`, - // the value must not be less than the size of the image - // or the size of the snapshot. - // ~>**NOTE** If you change the size, the provider updates the disk size - // if upsizing is detected but recreates the disk if downsizing is requested. - // You can add `lifecycle.prevent_destroy` in the config to prevent destroying - // and recreating. + // Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + // 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + // with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + // ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + // downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. Size pulumi.IntPtrInput // The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. If the // snapshot is in another project than this disk, you must supply a full URL. For example, the following are valid values: @@ -917,11 +852,9 @@ func (o DiskOutput) ProvisionedIops() pulumi.IntOutput { return o.ApplyT(func(v *Disk) pulumi.IntOutput { return v.ProvisionedIops }).(pulumi.IntOutput) } -// Resource policies applied to this disk for automatic snapshot creations. -// ~>**NOTE** This value does not support updating the -// resource policy, as resource policies can not be updated more than -// one at a time. Use -// `compute.DiskResourcePolicyAttachment` +// Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating +// the resource policy, as resource policies can not be updated more than one at a time. Use +// ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) // to allow for updating the resource policy attached to the disk. func (o DiskOutput) ResourcePolicies() pulumi.StringArrayOutput { return o.ApplyT(func(v *Disk) pulumi.StringArrayOutput { return v.ResourcePolicies }).(pulumi.StringArrayOutput) @@ -932,17 +865,11 @@ func (o DiskOutput) SelfLink() pulumi.StringOutput { return o.ApplyT(func(v *Disk) pulumi.StringOutput { return v.SelfLink }).(pulumi.StringOutput) } -// Size of the persistent disk, specified in GB. You can specify this -// field when creating a persistent disk using the `image` or -// `snapshot` parameter, or specify it alone to create an empty -// persistent disk. -// If you specify this field along with `image` or `snapshot`, -// the value must not be less than the size of the image -// or the size of the snapshot. -// ~>**NOTE** If you change the size, the provider updates the disk size -// if upsizing is detected but recreates the disk if downsizing is requested. -// You can add `lifecycle.prevent_destroy` in the config to prevent destroying -// and recreating. +// Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the +// 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along +// with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. +// ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if +// downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. func (o DiskOutput) Size() pulumi.IntOutput { return o.ApplyT(func(v *Disk) pulumi.IntOutput { return v.Size }).(pulumi.IntOutput) } diff --git a/sdk/go/gcp/compute/diskResourcePolicyAttachment.go b/sdk/go/gcp/compute/diskResourcePolicyAttachment.go index f5cb09c999..f7fbe2a6bf 100644 --- a/sdk/go/gcp/compute/diskResourcePolicyAttachment.go +++ b/sdk/go/gcp/compute/diskResourcePolicyAttachment.go @@ -11,11 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Adds existing resource policies to a disk. You can only add one policy -// which will be applied to this disk for scheduling snapshot creation. -// -// > **Note:** This resource does not support regional disks (`compute.RegionDisk`). For regional disks, please refer to the `compute.RegionDiskResourcePolicyAttachment` resource. -// // ## Example Usage // ### Disk Resource Policy Attachment Basic // diff --git a/sdk/go/gcp/compute/forwardingRule.go b/sdk/go/gcp/compute/forwardingRule.go index d87c9dc6bf..d12b6289c2 100644 --- a/sdk/go/gcp/compute/forwardingRule.go +++ b/sdk/go/gcp/compute/forwardingRule.go @@ -129,7 +129,7 @@ type ForwardingRule struct { IsMirroringCollector pulumi.BoolPtrOutput `pulumi:"isMirroringCollector"` // Used internally during label updates. LabelFingerprint pulumi.StringOutput `pulumi:"labelFingerprint"` - // Labels to apply to this forwarding rule. A list of key->value pairs. + // Labels to apply to this rule. Labels pulumi.StringMapOutput `pulumi:"labels"` // Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs // from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * @@ -302,7 +302,7 @@ type forwardingRuleState struct { IsMirroringCollector *bool `pulumi:"isMirroringCollector"` // Used internally during label updates. LabelFingerprint *string `pulumi:"labelFingerprint"` - // Labels to apply to this forwarding rule. A list of key->value pairs. + // Labels to apply to this rule. Labels map[string]string `pulumi:"labels"` // Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs // from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * @@ -447,7 +447,7 @@ type ForwardingRuleState struct { IsMirroringCollector pulumi.BoolPtrInput // Used internally during label updates. LabelFingerprint pulumi.StringPtrInput - // Labels to apply to this forwarding rule. A list of key->value pairs. + // Labels to apply to this rule. Labels pulumi.StringMapInput // Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs // from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * @@ -592,7 +592,7 @@ type forwardingRuleArgs struct { // can only be set to true for load balancers that have their // loadBalancingScheme set to INTERNAL. IsMirroringCollector *bool `pulumi:"isMirroringCollector"` - // Labels to apply to this forwarding rule. A list of key->value pairs. + // Labels to apply to this rule. Labels map[string]string `pulumi:"labels"` // Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs // from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * @@ -725,7 +725,7 @@ type ForwardingRuleArgs struct { // can only be set to true for load balancers that have their // loadBalancingScheme set to INTERNAL. IsMirroringCollector pulumi.BoolPtrInput - // Labels to apply to this forwarding rule. A list of key->value pairs. + // Labels to apply to this rule. Labels pulumi.StringMapInput // Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs // from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * @@ -974,7 +974,7 @@ func (o ForwardingRuleOutput) LabelFingerprint() pulumi.StringOutput { return o.ApplyT(func(v *ForwardingRule) pulumi.StringOutput { return v.LabelFingerprint }).(pulumi.StringOutput) } -// Labels to apply to this forwarding rule. A list of key->value pairs. +// Labels to apply to this rule. func (o ForwardingRuleOutput) Labels() pulumi.StringMapOutput { return o.ApplyT(func(v *ForwardingRule) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) } diff --git a/sdk/go/gcp/compute/getBackendService.go b/sdk/go/gcp/compute/getBackendService.go index 77db385f30..fad38f42e1 100644 --- a/sdk/go/gcp/compute/getBackendService.go +++ b/sdk/go/gcp/compute/getBackendService.go @@ -59,6 +59,7 @@ type LookupBackendServiceResult struct { // The provider-assigned unique ID for this managed resource. Id string `pulumi:"id"` LoadBalancingScheme string `pulumi:"loadBalancingScheme"` + LocalityLbPolicies []GetBackendServiceLocalityLbPolicy `pulumi:"localityLbPolicies"` LocalityLbPolicy string `pulumi:"localityLbPolicy"` LogConfigs []GetBackendServiceLogConfig `pulumi:"logConfigs"` Name string `pulumi:"name"` @@ -202,6 +203,10 @@ func (o LookupBackendServiceResultOutput) LoadBalancingScheme() pulumi.StringOut return o.ApplyT(func(v LookupBackendServiceResult) string { return v.LoadBalancingScheme }).(pulumi.StringOutput) } +func (o LookupBackendServiceResultOutput) LocalityLbPolicies() GetBackendServiceLocalityLbPolicyArrayOutput { + return o.ApplyT(func(v LookupBackendServiceResult) []GetBackendServiceLocalityLbPolicy { return v.LocalityLbPolicies }).(GetBackendServiceLocalityLbPolicyArrayOutput) +} + func (o LookupBackendServiceResultOutput) LocalityLbPolicy() pulumi.StringOutput { return o.ApplyT(func(v LookupBackendServiceResult) string { return v.LocalityLbPolicy }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/compute/getInstanceTemplate.go b/sdk/go/gcp/compute/getInstanceTemplate.go index 3ae97df938..1cc6a2a65e 100644 --- a/sdk/go/gcp/compute/getInstanceTemplate.go +++ b/sdk/go/gcp/compute/getInstanceTemplate.go @@ -113,11 +113,9 @@ type LookupInstanceTemplateResult struct { MetadataStartupScript string `pulumi:"metadataStartupScript"` // Specifies a minimum CPU platform. Applicable values are the friendly names of CPU platforms, such as // `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). - MinCpuPlatform string `pulumi:"minCpuPlatform"` - MostRecent *bool `pulumi:"mostRecent"` - // The name of the instance template. If you leave - // this blank, the provider will auto-generate a unique name. - Name *string `pulumi:"name"` + MinCpuPlatform string `pulumi:"minCpuPlatform"` + MostRecent *bool `pulumi:"mostRecent"` + Name *string `pulumi:"name"` // Creates a unique name beginning with the specified // prefix. Conflicts with `name`. NamePrefix string `pulumi:"namePrefix"` @@ -299,8 +297,6 @@ func (o LookupInstanceTemplateResultOutput) MostRecent() pulumi.BoolPtrOutput { return o.ApplyT(func(v LookupInstanceTemplateResult) *bool { return v.MostRecent }).(pulumi.BoolPtrOutput) } -// The name of the instance template. If you leave -// this blank, the provider will auto-generate a unique name. func (o LookupInstanceTemplateResultOutput) Name() pulumi.StringPtrOutput { return o.ApplyT(func(v LookupInstanceTemplateResult) *string { return v.Name }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/compute/getResourcePolicy.go b/sdk/go/gcp/compute/getResourcePolicy.go index 145371b098..69fc9e63fd 100644 --- a/sdk/go/gcp/compute/getResourcePolicy.go +++ b/sdk/go/gcp/compute/getResourcePolicy.go @@ -10,32 +10,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Provide access to a Resource Policy's attributes. For more information see [the official documentation](https://cloud.google.com/compute/docs/disks/scheduled-snapshots) or the [API](https://cloud.google.com/compute/docs/reference/rest/beta/resourcePolicies). -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.LookupResourcePolicy(ctx, &compute.LookupResourcePolicyArgs{ -// Name: "daily", -// Region: pulumi.StringRef("us-central1"), -// }, nil) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` func LookupResourcePolicy(ctx *pulumi.Context, args *LookupResourcePolicyArgs, opts ...pulumi.InvokeOption) (*LookupResourcePolicyResult, error) { var rv LookupResourcePolicyResult err := ctx.Invoke("gcp:compute/getResourcePolicy:getResourcePolicy", args, &rv, opts...) diff --git a/sdk/go/gcp/compute/getRouterNat.go b/sdk/go/gcp/compute/getRouterNat.go index 44ebc496ec..ad20ceccf9 100644 --- a/sdk/go/gcp/compute/getRouterNat.go +++ b/sdk/go/gcp/compute/getRouterNat.go @@ -86,6 +86,7 @@ type LookupRouterNatResult struct { SourceSubnetworkIpRangesToNat string `pulumi:"sourceSubnetworkIpRangesToNat"` Subnetworks []GetRouterNatSubnetwork `pulumi:"subnetworks"` TcpEstablishedIdleTimeoutSec int `pulumi:"tcpEstablishedIdleTimeoutSec"` + TcpTimeWaitTimeoutSec int `pulumi:"tcpTimeWaitTimeoutSec"` TcpTransitoryIdleTimeoutSec int `pulumi:"tcpTransitoryIdleTimeoutSec"` UdpIdleTimeoutSec int `pulumi:"udpIdleTimeoutSec"` } @@ -209,6 +210,10 @@ func (o LookupRouterNatResultOutput) TcpEstablishedIdleTimeoutSec() pulumi.IntOu return o.ApplyT(func(v LookupRouterNatResult) int { return v.TcpEstablishedIdleTimeoutSec }).(pulumi.IntOutput) } +func (o LookupRouterNatResultOutput) TcpTimeWaitTimeoutSec() pulumi.IntOutput { + return o.ApplyT(func(v LookupRouterNatResult) int { return v.TcpTimeWaitTimeoutSec }).(pulumi.IntOutput) +} + func (o LookupRouterNatResultOutput) TcpTransitoryIdleTimeoutSec() pulumi.IntOutput { return o.ApplyT(func(v LookupRouterNatResult) int { return v.TcpTransitoryIdleTimeoutSec }).(pulumi.IntOutput) } diff --git a/sdk/go/gcp/compute/globalAddress.go b/sdk/go/gcp/compute/globalAddress.go index f9121628e8..79714b2cdc 100644 --- a/sdk/go/gcp/compute/globalAddress.go +++ b/sdk/go/gcp/compute/globalAddress.go @@ -43,40 +43,6 @@ import ( // } // // ``` -// ### Global Address Private Services Connect -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// network, err := compute.NewNetwork(ctx, "network", &compute.NetworkArgs{ -// AutoCreateSubnetworks: pulumi.Bool(false), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// _, err = compute.NewGlobalAddress(ctx, "default", &compute.GlobalAddressArgs{ -// AddressType: pulumi.String("INTERNAL"), -// Purpose: pulumi.String("PRIVATE_SERVICE_CONNECT"), -// Network: network.ID(), -// Address: pulumi.String("100.100.100.105"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // @@ -121,7 +87,7 @@ type GlobalAddress struct { IpVersion pulumi.StringPtrOutput `pulumi:"ipVersion"` // The fingerprint used for optimistic locking of this resource. Used internally during updates. LabelFingerprint pulumi.StringOutput `pulumi:"labelFingerprint"` - // Labels to apply to this address. A list of key->value pairs. + // Labels to apply to this address. A list of key->value pairs. Labels pulumi.StringMapOutput `pulumi:"labels"` // Name of the resource. Provided by the client when the resource is // created. The name must be 1-63 characters long, and comply with @@ -144,9 +110,8 @@ type GlobalAddress struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringOutput `pulumi:"project"` - // The purpose of the resource. Possible values include: - // * VPC_PEERING - for peer networks - // * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + // The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + // ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks Purpose pulumi.StringPtrOutput `pulumi:"purpose"` // The URI of the created resource. SelfLink pulumi.StringOutput `pulumi:"selfLink"` @@ -200,7 +165,7 @@ type globalAddressState struct { IpVersion *string `pulumi:"ipVersion"` // The fingerprint used for optimistic locking of this resource. Used internally during updates. LabelFingerprint *string `pulumi:"labelFingerprint"` - // Labels to apply to this address. A list of key->value pairs. + // Labels to apply to this address. A list of key->value pairs. Labels map[string]string `pulumi:"labels"` // Name of the resource. Provided by the client when the resource is // created. The name must be 1-63 characters long, and comply with @@ -223,9 +188,8 @@ type globalAddressState struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project *string `pulumi:"project"` - // The purpose of the resource. Possible values include: - // * VPC_PEERING - for peer networks - // * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + // The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + // ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks Purpose *string `pulumi:"purpose"` // The URI of the created resource. SelfLink *string `pulumi:"selfLink"` @@ -251,7 +215,7 @@ type GlobalAddressState struct { IpVersion pulumi.StringPtrInput // The fingerprint used for optimistic locking of this resource. Used internally during updates. LabelFingerprint pulumi.StringPtrInput - // Labels to apply to this address. A list of key->value pairs. + // Labels to apply to this address. A list of key->value pairs. Labels pulumi.StringMapInput // Name of the resource. Provided by the client when the resource is // created. The name must be 1-63 characters long, and comply with @@ -274,9 +238,8 @@ type GlobalAddressState struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringPtrInput - // The purpose of the resource. Possible values include: - // * VPC_PEERING - for peer networks - // * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + // The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + // ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks Purpose pulumi.StringPtrInput // The URI of the created resource. SelfLink pulumi.StringPtrInput @@ -302,7 +265,7 @@ type globalAddressArgs struct { // The IP Version that will be used by this address. The default value is `IPV4`. // Possible values are `IPV4` and `IPV6`. IpVersion *string `pulumi:"ipVersion"` - // Labels to apply to this address. A list of key->value pairs. + // Labels to apply to this address. A list of key->value pairs. Labels map[string]string `pulumi:"labels"` // Name of the resource. Provided by the client when the resource is // created. The name must be 1-63 characters long, and comply with @@ -325,9 +288,8 @@ type globalAddressArgs struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project *string `pulumi:"project"` - // The purpose of the resource. Possible values include: - // * VPC_PEERING - for peer networks - // * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + // The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + // ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks Purpose *string `pulumi:"purpose"` } @@ -348,7 +310,7 @@ type GlobalAddressArgs struct { // The IP Version that will be used by this address. The default value is `IPV4`. // Possible values are `IPV4` and `IPV6`. IpVersion pulumi.StringPtrInput - // Labels to apply to this address. A list of key->value pairs. + // Labels to apply to this address. A list of key->value pairs. Labels pulumi.StringMapInput // Name of the resource. Provided by the client when the resource is // created. The name must be 1-63 characters long, and comply with @@ -371,9 +333,8 @@ type GlobalAddressArgs struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringPtrInput - // The purpose of the resource. Possible values include: - // * VPC_PEERING - for peer networks - // * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + // The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + // ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks Purpose pulumi.StringPtrInput } @@ -501,7 +462,7 @@ func (o GlobalAddressOutput) LabelFingerprint() pulumi.StringOutput { return o.ApplyT(func(v *GlobalAddress) pulumi.StringOutput { return v.LabelFingerprint }).(pulumi.StringOutput) } -// Labels to apply to this address. A list of key->value pairs. +// Labels to apply to this address. A list of key->value pairs. func (o GlobalAddressOutput) Labels() pulumi.StringMapOutput { return o.ApplyT(func(v *GlobalAddress) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) } @@ -539,9 +500,8 @@ func (o GlobalAddressOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *GlobalAddress) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } -// The purpose of the resource. Possible values include: -// * VPC_PEERING - for peer networks -// * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks +// The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for +// ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks func (o GlobalAddressOutput) Purpose() pulumi.StringPtrOutput { return o.ApplyT(func(v *GlobalAddress) pulumi.StringPtrOutput { return v.Purpose }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/compute/globalForwardingRule.go b/sdk/go/gcp/compute/globalForwardingRule.go index b288c36449..d027bb2ef4 100644 --- a/sdk/go/gcp/compute/globalForwardingRule.go +++ b/sdk/go/gcp/compute/globalForwardingRule.go @@ -17,7 +17,7 @@ import ( // balancing. // // For more information, see -// +// https://cloud.google.com/compute/docs/load-balancing/http/ // // ## Example Usage // ### Global Forwarding Rule External Managed @@ -93,7 +93,6 @@ import ( // // ``` // ### Private Service Connect Google Apis -// ### Private Service Connect Google Apis // // ```go // package main @@ -202,20 +201,15 @@ type GlobalForwardingRule struct { IpVersion pulumi.StringPtrOutput `pulumi:"ipVersion"` // Used internally during label updates. LabelFingerprint pulumi.StringOutput `pulumi:"labelFingerprint"` - // Labels to apply to this forwarding rule. A list of key->value pairs. + // Labels to apply to this rule. Labels pulumi.StringMapOutput `pulumi:"labels"` - // This signifies what the GlobalForwardingRule will be used for. - // The value of INTERNAL_SELF_MANAGED means that this will be used for - // Internal Global HTTP(S) LB. The value of EXTERNAL means that this - // will be used for External Global Load Balancing (HTTP(S) LB, - // External TCP/UDP LB, SSL Proxy) - // Note: This field must be set "" if the global address is - // External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - // that this will be used for Global external HTTP(S) load balancers. - // Note: This field must be set "" if the global address is - // configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - // Default value is `EXTERNAL`. - // Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + // Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + // from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + // `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + // `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + // Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + // forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + // INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED LoadBalancingScheme pulumi.StringPtrOutput `pulumi:"loadBalancingScheme"` // Opaque filter criteria used by Loadbalancer to restrict routing // configuration to a limited set xDS compliant clients. In their xDS @@ -241,11 +235,9 @@ type GlobalForwardingRule struct { // characters must be a dash, lowercase letter, or digit, except the last // character, which cannot be a dash. Name pulumi.StringOutput `pulumi:"name"` - // This field is not used for external load balancing. - // For INTERNAL_SELF_MANAGED load balancing, this field - // identifies the network that the load balanced IP should belong to - // for this global forwarding rule. If this field is not specified, - // the default network will be used. + // This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + // field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + // specified, the default network will be used. Network pulumi.StringOutput `pulumi:"network"` // This field is used along with the target field for TargetHttpProxy, // TargetHttpsProxy, TargetSslProxy, TargetTcpProxy, TargetVpnGateway, @@ -274,12 +266,10 @@ type GlobalForwardingRule struct { PscConnectionStatus pulumi.StringOutput `pulumi:"pscConnectionStatus"` // The URI of the created resource. SelfLink pulumi.StringOutput `pulumi:"selfLink"` - // The URL of the target resource to receive the matched traffic. - // The forwarded traffic must be of a type appropriate to the target object. - // For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - // are valid. - // For global address with a purpose of PRIVATE_SERVICE_CONNECT and - // addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + // The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + // the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + // resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + // balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. Target pulumi.StringOutput `pulumi:"target"` } @@ -343,20 +333,15 @@ type globalForwardingRuleState struct { IpVersion *string `pulumi:"ipVersion"` // Used internally during label updates. LabelFingerprint *string `pulumi:"labelFingerprint"` - // Labels to apply to this forwarding rule. A list of key->value pairs. + // Labels to apply to this rule. Labels map[string]string `pulumi:"labels"` - // This signifies what the GlobalForwardingRule will be used for. - // The value of INTERNAL_SELF_MANAGED means that this will be used for - // Internal Global HTTP(S) LB. The value of EXTERNAL means that this - // will be used for External Global Load Balancing (HTTP(S) LB, - // External TCP/UDP LB, SSL Proxy) - // Note: This field must be set "" if the global address is - // External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - // that this will be used for Global external HTTP(S) load balancers. - // Note: This field must be set "" if the global address is - // configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - // Default value is `EXTERNAL`. - // Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + // Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + // from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + // `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + // `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + // Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + // forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + // INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED LoadBalancingScheme *string `pulumi:"loadBalancingScheme"` // Opaque filter criteria used by Loadbalancer to restrict routing // configuration to a limited set xDS compliant clients. In their xDS @@ -382,11 +367,9 @@ type globalForwardingRuleState struct { // characters must be a dash, lowercase letter, or digit, except the last // character, which cannot be a dash. Name *string `pulumi:"name"` - // This field is not used for external load balancing. - // For INTERNAL_SELF_MANAGED load balancing, this field - // identifies the network that the load balanced IP should belong to - // for this global forwarding rule. If this field is not specified, - // the default network will be used. + // This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + // field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + // specified, the default network will be used. Network *string `pulumi:"network"` // This field is used along with the target field for TargetHttpProxy, // TargetHttpsProxy, TargetSslProxy, TargetTcpProxy, TargetVpnGateway, @@ -415,12 +398,10 @@ type globalForwardingRuleState struct { PscConnectionStatus *string `pulumi:"pscConnectionStatus"` // The URI of the created resource. SelfLink *string `pulumi:"selfLink"` - // The URL of the target resource to receive the matched traffic. - // The forwarded traffic must be of a type appropriate to the target object. - // For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - // are valid. - // For global address with a purpose of PRIVATE_SERVICE_CONNECT and - // addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + // The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + // the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + // resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + // balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. Target *string `pulumi:"target"` } @@ -453,20 +434,15 @@ type GlobalForwardingRuleState struct { IpVersion pulumi.StringPtrInput // Used internally during label updates. LabelFingerprint pulumi.StringPtrInput - // Labels to apply to this forwarding rule. A list of key->value pairs. + // Labels to apply to this rule. Labels pulumi.StringMapInput - // This signifies what the GlobalForwardingRule will be used for. - // The value of INTERNAL_SELF_MANAGED means that this will be used for - // Internal Global HTTP(S) LB. The value of EXTERNAL means that this - // will be used for External Global Load Balancing (HTTP(S) LB, - // External TCP/UDP LB, SSL Proxy) - // Note: This field must be set "" if the global address is - // External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - // that this will be used for Global external HTTP(S) load balancers. - // Note: This field must be set "" if the global address is - // configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - // Default value is `EXTERNAL`. - // Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + // Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + // from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + // `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + // `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + // Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + // forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + // INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED LoadBalancingScheme pulumi.StringPtrInput // Opaque filter criteria used by Loadbalancer to restrict routing // configuration to a limited set xDS compliant clients. In their xDS @@ -492,11 +468,9 @@ type GlobalForwardingRuleState struct { // characters must be a dash, lowercase letter, or digit, except the last // character, which cannot be a dash. Name pulumi.StringPtrInput - // This field is not used for external load balancing. - // For INTERNAL_SELF_MANAGED load balancing, this field - // identifies the network that the load balanced IP should belong to - // for this global forwarding rule. If this field is not specified, - // the default network will be used. + // This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + // field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + // specified, the default network will be used. Network pulumi.StringPtrInput // This field is used along with the target field for TargetHttpProxy, // TargetHttpsProxy, TargetSslProxy, TargetTcpProxy, TargetVpnGateway, @@ -525,12 +499,10 @@ type GlobalForwardingRuleState struct { PscConnectionStatus pulumi.StringPtrInput // The URI of the created resource. SelfLink pulumi.StringPtrInput - // The URL of the target resource to receive the matched traffic. - // The forwarded traffic must be of a type appropriate to the target object. - // For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - // are valid. - // For global address with a purpose of PRIVATE_SERVICE_CONNECT and - // addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + // The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + // the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + // resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + // balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. Target pulumi.StringPtrInput } @@ -565,20 +537,15 @@ type globalForwardingRuleArgs struct { // The IP Version that will be used by this global forwarding rule. // Possible values are `IPV4` and `IPV6`. IpVersion *string `pulumi:"ipVersion"` - // Labels to apply to this forwarding rule. A list of key->value pairs. + // Labels to apply to this rule. Labels map[string]string `pulumi:"labels"` - // This signifies what the GlobalForwardingRule will be used for. - // The value of INTERNAL_SELF_MANAGED means that this will be used for - // Internal Global HTTP(S) LB. The value of EXTERNAL means that this - // will be used for External Global Load Balancing (HTTP(S) LB, - // External TCP/UDP LB, SSL Proxy) - // Note: This field must be set "" if the global address is - // External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - // that this will be used for Global external HTTP(S) load balancers. - // Note: This field must be set "" if the global address is - // configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - // Default value is `EXTERNAL`. - // Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + // Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + // from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + // `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + // `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + // Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + // forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + // INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED LoadBalancingScheme *string `pulumi:"loadBalancingScheme"` // Opaque filter criteria used by Loadbalancer to restrict routing // configuration to a limited set xDS compliant clients. In their xDS @@ -604,11 +571,9 @@ type globalForwardingRuleArgs struct { // characters must be a dash, lowercase letter, or digit, except the last // character, which cannot be a dash. Name *string `pulumi:"name"` - // This field is not used for external load balancing. - // For INTERNAL_SELF_MANAGED load balancing, this field - // identifies the network that the load balanced IP should belong to - // for this global forwarding rule. If this field is not specified, - // the default network will be used. + // This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + // field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + // specified, the default network will be used. Network *string `pulumi:"network"` // This field is used along with the target field for TargetHttpProxy, // TargetHttpsProxy, TargetSslProxy, TargetTcpProxy, TargetVpnGateway, @@ -630,12 +595,10 @@ type globalForwardingRuleArgs struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project *string `pulumi:"project"` - // The URL of the target resource to receive the matched traffic. - // The forwarded traffic must be of a type appropriate to the target object. - // For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - // are valid. - // For global address with a purpose of PRIVATE_SERVICE_CONNECT and - // addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + // The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + // the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + // resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + // balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. Target string `pulumi:"target"` } @@ -667,20 +630,15 @@ type GlobalForwardingRuleArgs struct { // The IP Version that will be used by this global forwarding rule. // Possible values are `IPV4` and `IPV6`. IpVersion pulumi.StringPtrInput - // Labels to apply to this forwarding rule. A list of key->value pairs. + // Labels to apply to this rule. Labels pulumi.StringMapInput - // This signifies what the GlobalForwardingRule will be used for. - // The value of INTERNAL_SELF_MANAGED means that this will be used for - // Internal Global HTTP(S) LB. The value of EXTERNAL means that this - // will be used for External Global Load Balancing (HTTP(S) LB, - // External TCP/UDP LB, SSL Proxy) - // Note: This field must be set "" if the global address is - // External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - // that this will be used for Global external HTTP(S) load balancers. - // Note: This field must be set "" if the global address is - // configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - // Default value is `EXTERNAL`. - // Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + // Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + // from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + // `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + // `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + // Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + // forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + // INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED LoadBalancingScheme pulumi.StringPtrInput // Opaque filter criteria used by Loadbalancer to restrict routing // configuration to a limited set xDS compliant clients. In their xDS @@ -706,11 +664,9 @@ type GlobalForwardingRuleArgs struct { // characters must be a dash, lowercase letter, or digit, except the last // character, which cannot be a dash. Name pulumi.StringPtrInput - // This field is not used for external load balancing. - // For INTERNAL_SELF_MANAGED load balancing, this field - // identifies the network that the load balanced IP should belong to - // for this global forwarding rule. If this field is not specified, - // the default network will be used. + // This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + // field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + // specified, the default network will be used. Network pulumi.StringPtrInput // This field is used along with the target field for TargetHttpProxy, // TargetHttpsProxy, TargetSslProxy, TargetTcpProxy, TargetVpnGateway, @@ -732,12 +688,10 @@ type GlobalForwardingRuleArgs struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringPtrInput - // The URL of the target resource to receive the matched traffic. - // The forwarded traffic must be of a type appropriate to the target object. - // For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - // are valid. - // For global address with a purpose of PRIVATE_SERVICE_CONNECT and - // addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + // The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + // the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + // resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + // balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. Target pulumi.StringInput } @@ -871,23 +825,18 @@ func (o GlobalForwardingRuleOutput) LabelFingerprint() pulumi.StringOutput { return o.ApplyT(func(v *GlobalForwardingRule) pulumi.StringOutput { return v.LabelFingerprint }).(pulumi.StringOutput) } -// Labels to apply to this forwarding rule. A list of key->value pairs. +// Labels to apply to this rule. func (o GlobalForwardingRuleOutput) Labels() pulumi.StringMapOutput { return o.ApplyT(func(v *GlobalForwardingRule) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) } -// This signifies what the GlobalForwardingRule will be used for. -// The value of INTERNAL_SELF_MANAGED means that this will be used for -// Internal Global HTTP(S) LB. The value of EXTERNAL means that this -// will be used for External Global Load Balancing (HTTP(S) LB, -// External TCP/UDP LB, SSL Proxy) -// Note: This field must be set "" if the global address is -// External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means -// that this will be used for Global external HTTP(S) load balancers. -// Note: This field must be set "" if the global address is -// configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. -// Default value is `EXTERNAL`. -// Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. +// Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs +// from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * +// `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * +// `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic +// Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about +// forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: +// INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED func (o GlobalForwardingRuleOutput) LoadBalancingScheme() pulumi.StringPtrOutput { return o.ApplyT(func(v *GlobalForwardingRule) pulumi.StringPtrOutput { return v.LoadBalancingScheme }).(pulumi.StringPtrOutput) } @@ -922,11 +871,9 @@ func (o GlobalForwardingRuleOutput) Name() pulumi.StringOutput { return o.ApplyT(func(v *GlobalForwardingRule) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) } -// This field is not used for external load balancing. -// For INTERNAL_SELF_MANAGED load balancing, this field -// identifies the network that the load balanced IP should belong to -// for this global forwarding rule. If this field is not specified, -// the default network will be used. +// This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this +// field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not +// specified, the default network will be used. func (o GlobalForwardingRuleOutput) Network() pulumi.StringOutput { return o.ApplyT(func(v *GlobalForwardingRule) pulumi.StringOutput { return v.Network }).(pulumi.StringOutput) } @@ -973,12 +920,10 @@ func (o GlobalForwardingRuleOutput) SelfLink() pulumi.StringOutput { return o.ApplyT(func(v *GlobalForwardingRule) pulumi.StringOutput { return v.SelfLink }).(pulumi.StringOutput) } -// The URL of the target resource to receive the matched traffic. -// The forwarded traffic must be of a type appropriate to the target object. -// For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets -// are valid. -// For global address with a purpose of PRIVATE_SERVICE_CONNECT and -// addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. +// The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in +// the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing +// resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load +// balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. func (o GlobalForwardingRuleOutput) Target() pulumi.StringOutput { return o.ApplyT(func(v *GlobalForwardingRule) pulumi.StringOutput { return v.Target }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/compute/instance.go b/sdk/go/gcp/compute/instance.go index 1f03488c23..fb0f9c4584 100644 --- a/sdk/go/gcp/compute/instance.go +++ b/sdk/go/gcp/compute/instance.go @@ -114,8 +114,8 @@ type Instance struct { // Configure Nested Virtualisation and Simultaneous Hyper Threading on this VM. Structure is documented below AdvancedMachineFeatures InstanceAdvancedMachineFeaturesPtrOutput `pulumi:"advancedMachineFeatures"` - // If true, allows this prvider to stop the instance to update its properties. - // If you try to update a property that requires stopping the instance without setting this field, the update will fail. + // If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + // stopping the instance without setting this field, the update will fail. AllowStoppingForUpdate pulumi.BoolPtrOutput `pulumi:"allowStoppingForUpdate"` // Additional disks to attach to the instance. Can be repeated multiple times for multiple disks. Structure is documented below. AttachedDisks InstanceAttachedDiskArrayOutput `pulumi:"attachedDisks"` @@ -132,8 +132,7 @@ type Instance struct { CpuPlatform pulumi.StringOutput `pulumi:"cpuPlatform"` // Current status of the instance. CurrentStatus pulumi.StringOutput `pulumi:"currentStatus"` - // Enable deletion protection on this instance. Defaults to false. - // **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + // Whether deletion protection is enabled on this instance. DeletionProtection pulumi.BoolPtrOutput `pulumi:"deletionProtection"` // A brief description of this resource. Description pulumi.StringPtrOutput `pulumi:"description"` @@ -143,8 +142,7 @@ type Instance struct { // Enable [Virtual Displays](https://cloud.google.com/compute/docs/instances/enable-instance-virtual-display#verify_display_driver) on this instance. // **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field. EnableDisplay pulumi.BoolPtrOutput `pulumi:"enableDisplay"` - // List of the type and count of accelerator cards attached to the instance. Structure documented below. - // **Note:** GPU accelerators can only be used with `onHostMaintenance` option set to TERMINATE. + // List of the type and count of accelerator cards attached to the instance. GuestAccelerators InstanceGuestAcceleratorArrayOutput `pulumi:"guestAccelerators"` // A custom hostname for the instance. Must be a fully qualified DNS name and RFC-1035-valid. // Valid format is a series of labels 1-63 characters long matching the regular expression `a-z`, concatenated with periods. @@ -165,16 +163,7 @@ type Instance struct { Metadata pulumi.StringMapOutput `pulumi:"metadata"` // The unique fingerprint of the metadata. MetadataFingerprint pulumi.StringOutput `pulumi:"metadataFingerprint"` - // An alternative to using the - // startup-script metadata key, except this one forces the instance to be recreated - // (thus re-running the script) if it is changed. This replaces the startup-script - // metadata key on the created instance and thus the two mechanisms are not - // allowed to be used simultaneously. Users are free to use either mechanism - the - // only distinction is that this separate attribute will cause a recreate on - // modification. On import, `metadataStartupScript` will not be set - if you - // choose to specify it you will see a diff immediately after import causing a - // destroy/recreate operation. If importing an instance and specifying this value - // is desired, you will need to modify your state file. + // Metadata startup scripts made available within the instance. MetadataStartupScript pulumi.StringPtrOutput `pulumi:"metadataStartupScript"` // Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as // `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). @@ -264,8 +253,8 @@ func GetInstance(ctx *pulumi.Context, type instanceState struct { // Configure Nested Virtualisation and Simultaneous Hyper Threading on this VM. Structure is documented below AdvancedMachineFeatures *InstanceAdvancedMachineFeatures `pulumi:"advancedMachineFeatures"` - // If true, allows this prvider to stop the instance to update its properties. - // If you try to update a property that requires stopping the instance without setting this field, the update will fail. + // If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + // stopping the instance without setting this field, the update will fail. AllowStoppingForUpdate *bool `pulumi:"allowStoppingForUpdate"` // Additional disks to attach to the instance. Can be repeated multiple times for multiple disks. Structure is documented below. AttachedDisks []InstanceAttachedDisk `pulumi:"attachedDisks"` @@ -282,8 +271,7 @@ type instanceState struct { CpuPlatform *string `pulumi:"cpuPlatform"` // Current status of the instance. CurrentStatus *string `pulumi:"currentStatus"` - // Enable deletion protection on this instance. Defaults to false. - // **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + // Whether deletion protection is enabled on this instance. DeletionProtection *bool `pulumi:"deletionProtection"` // A brief description of this resource. Description *string `pulumi:"description"` @@ -293,8 +281,7 @@ type instanceState struct { // Enable [Virtual Displays](https://cloud.google.com/compute/docs/instances/enable-instance-virtual-display#verify_display_driver) on this instance. // **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field. EnableDisplay *bool `pulumi:"enableDisplay"` - // List of the type and count of accelerator cards attached to the instance. Structure documented below. - // **Note:** GPU accelerators can only be used with `onHostMaintenance` option set to TERMINATE. + // List of the type and count of accelerator cards attached to the instance. GuestAccelerators []InstanceGuestAccelerator `pulumi:"guestAccelerators"` // A custom hostname for the instance. Must be a fully qualified DNS name and RFC-1035-valid. // Valid format is a series of labels 1-63 characters long matching the regular expression `a-z`, concatenated with periods. @@ -315,16 +302,7 @@ type instanceState struct { Metadata map[string]string `pulumi:"metadata"` // The unique fingerprint of the metadata. MetadataFingerprint *string `pulumi:"metadataFingerprint"` - // An alternative to using the - // startup-script metadata key, except this one forces the instance to be recreated - // (thus re-running the script) if it is changed. This replaces the startup-script - // metadata key on the created instance and thus the two mechanisms are not - // allowed to be used simultaneously. Users are free to use either mechanism - the - // only distinction is that this separate attribute will cause a recreate on - // modification. On import, `metadataStartupScript` will not be set - if you - // choose to specify it you will see a diff immediately after import causing a - // destroy/recreate operation. If importing an instance and specifying this value - // is desired, you will need to modify your state file. + // Metadata startup scripts made available within the instance. MetadataStartupScript *string `pulumi:"metadataStartupScript"` // Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as // `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). @@ -377,8 +355,8 @@ type instanceState struct { type InstanceState struct { // Configure Nested Virtualisation and Simultaneous Hyper Threading on this VM. Structure is documented below AdvancedMachineFeatures InstanceAdvancedMachineFeaturesPtrInput - // If true, allows this prvider to stop the instance to update its properties. - // If you try to update a property that requires stopping the instance without setting this field, the update will fail. + // If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + // stopping the instance without setting this field, the update will fail. AllowStoppingForUpdate pulumi.BoolPtrInput // Additional disks to attach to the instance. Can be repeated multiple times for multiple disks. Structure is documented below. AttachedDisks InstanceAttachedDiskArrayInput @@ -395,8 +373,7 @@ type InstanceState struct { CpuPlatform pulumi.StringPtrInput // Current status of the instance. CurrentStatus pulumi.StringPtrInput - // Enable deletion protection on this instance. Defaults to false. - // **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + // Whether deletion protection is enabled on this instance. DeletionProtection pulumi.BoolPtrInput // A brief description of this resource. Description pulumi.StringPtrInput @@ -406,8 +383,7 @@ type InstanceState struct { // Enable [Virtual Displays](https://cloud.google.com/compute/docs/instances/enable-instance-virtual-display#verify_display_driver) on this instance. // **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field. EnableDisplay pulumi.BoolPtrInput - // List of the type and count of accelerator cards attached to the instance. Structure documented below. - // **Note:** GPU accelerators can only be used with `onHostMaintenance` option set to TERMINATE. + // List of the type and count of accelerator cards attached to the instance. GuestAccelerators InstanceGuestAcceleratorArrayInput // A custom hostname for the instance. Must be a fully qualified DNS name and RFC-1035-valid. // Valid format is a series of labels 1-63 characters long matching the regular expression `a-z`, concatenated with periods. @@ -428,16 +404,7 @@ type InstanceState struct { Metadata pulumi.StringMapInput // The unique fingerprint of the metadata. MetadataFingerprint pulumi.StringPtrInput - // An alternative to using the - // startup-script metadata key, except this one forces the instance to be recreated - // (thus re-running the script) if it is changed. This replaces the startup-script - // metadata key on the created instance and thus the two mechanisms are not - // allowed to be used simultaneously. Users are free to use either mechanism - the - // only distinction is that this separate attribute will cause a recreate on - // modification. On import, `metadataStartupScript` will not be set - if you - // choose to specify it you will see a diff immediately after import causing a - // destroy/recreate operation. If importing an instance and specifying this value - // is desired, you will need to modify your state file. + // Metadata startup scripts made available within the instance. MetadataStartupScript pulumi.StringPtrInput // Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as // `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). @@ -494,8 +461,8 @@ func (InstanceState) ElementType() reflect.Type { type instanceArgs struct { // Configure Nested Virtualisation and Simultaneous Hyper Threading on this VM. Structure is documented below AdvancedMachineFeatures *InstanceAdvancedMachineFeatures `pulumi:"advancedMachineFeatures"` - // If true, allows this prvider to stop the instance to update its properties. - // If you try to update a property that requires stopping the instance without setting this field, the update will fail. + // If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + // stopping the instance without setting this field, the update will fail. AllowStoppingForUpdate *bool `pulumi:"allowStoppingForUpdate"` // Additional disks to attach to the instance. Can be repeated multiple times for multiple disks. Structure is documented below. AttachedDisks []InstanceAttachedDisk `pulumi:"attachedDisks"` @@ -508,8 +475,7 @@ type instanceArgs struct { CanIpForward *bool `pulumi:"canIpForward"` // Enable [Confidential Mode](https://cloud.google.com/compute/confidential-vm/docs/about-cvm) on this VM. Structure is documented below ConfidentialInstanceConfig *InstanceConfidentialInstanceConfig `pulumi:"confidentialInstanceConfig"` - // Enable deletion protection on this instance. Defaults to false. - // **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + // Whether deletion protection is enabled on this instance. DeletionProtection *bool `pulumi:"deletionProtection"` // A brief description of this resource. Description *string `pulumi:"description"` @@ -519,8 +485,7 @@ type instanceArgs struct { // Enable [Virtual Displays](https://cloud.google.com/compute/docs/instances/enable-instance-virtual-display#verify_display_driver) on this instance. // **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field. EnableDisplay *bool `pulumi:"enableDisplay"` - // List of the type and count of accelerator cards attached to the instance. Structure documented below. - // **Note:** GPU accelerators can only be used with `onHostMaintenance` option set to TERMINATE. + // List of the type and count of accelerator cards attached to the instance. GuestAccelerators []InstanceGuestAccelerator `pulumi:"guestAccelerators"` // A custom hostname for the instance. Must be a fully qualified DNS name and RFC-1035-valid. // Valid format is a series of labels 1-63 characters long matching the regular expression `a-z`, concatenated with periods. @@ -535,16 +500,7 @@ type instanceArgs struct { // Add them to your config in order to keep them attached to your instance. A // list of default metadata values (e.g. ssh-keys) can be found [here](https://cloud.google.com/compute/docs/metadata/default-metadata-values) Metadata map[string]string `pulumi:"metadata"` - // An alternative to using the - // startup-script metadata key, except this one forces the instance to be recreated - // (thus re-running the script) if it is changed. This replaces the startup-script - // metadata key on the created instance and thus the two mechanisms are not - // allowed to be used simultaneously. Users are free to use either mechanism - the - // only distinction is that this separate attribute will cause a recreate on - // modification. On import, `metadataStartupScript` will not be set - if you - // choose to specify it you will see a diff immediately after import causing a - // destroy/recreate operation. If importing an instance and specifying this value - // is desired, you will need to modify your state file. + // Metadata startup scripts made available within the instance. MetadataStartupScript *string `pulumi:"metadataStartupScript"` // Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as // `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). @@ -594,8 +550,8 @@ type instanceArgs struct { type InstanceArgs struct { // Configure Nested Virtualisation and Simultaneous Hyper Threading on this VM. Structure is documented below AdvancedMachineFeatures InstanceAdvancedMachineFeaturesPtrInput - // If true, allows this prvider to stop the instance to update its properties. - // If you try to update a property that requires stopping the instance without setting this field, the update will fail. + // If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + // stopping the instance without setting this field, the update will fail. AllowStoppingForUpdate pulumi.BoolPtrInput // Additional disks to attach to the instance. Can be repeated multiple times for multiple disks. Structure is documented below. AttachedDisks InstanceAttachedDiskArrayInput @@ -608,8 +564,7 @@ type InstanceArgs struct { CanIpForward pulumi.BoolPtrInput // Enable [Confidential Mode](https://cloud.google.com/compute/confidential-vm/docs/about-cvm) on this VM. Structure is documented below ConfidentialInstanceConfig InstanceConfidentialInstanceConfigPtrInput - // Enable deletion protection on this instance. Defaults to false. - // **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + // Whether deletion protection is enabled on this instance. DeletionProtection pulumi.BoolPtrInput // A brief description of this resource. Description pulumi.StringPtrInput @@ -619,8 +574,7 @@ type InstanceArgs struct { // Enable [Virtual Displays](https://cloud.google.com/compute/docs/instances/enable-instance-virtual-display#verify_display_driver) on this instance. // **Note**: `allowStoppingForUpdate` must be set to true or your instance must have a `desiredStatus` of `TERMINATED` in order to update this field. EnableDisplay pulumi.BoolPtrInput - // List of the type and count of accelerator cards attached to the instance. Structure documented below. - // **Note:** GPU accelerators can only be used with `onHostMaintenance` option set to TERMINATE. + // List of the type and count of accelerator cards attached to the instance. GuestAccelerators InstanceGuestAcceleratorArrayInput // A custom hostname for the instance. Must be a fully qualified DNS name and RFC-1035-valid. // Valid format is a series of labels 1-63 characters long matching the regular expression `a-z`, concatenated with periods. @@ -635,16 +589,7 @@ type InstanceArgs struct { // Add them to your config in order to keep them attached to your instance. A // list of default metadata values (e.g. ssh-keys) can be found [here](https://cloud.google.com/compute/docs/metadata/default-metadata-values) Metadata pulumi.StringMapInput - // An alternative to using the - // startup-script metadata key, except this one forces the instance to be recreated - // (thus re-running the script) if it is changed. This replaces the startup-script - // metadata key on the created instance and thus the two mechanisms are not - // allowed to be used simultaneously. Users are free to use either mechanism - the - // only distinction is that this separate attribute will cause a recreate on - // modification. On import, `metadataStartupScript` will not be set - if you - // choose to specify it you will see a diff immediately after import causing a - // destroy/recreate operation. If importing an instance and specifying this value - // is desired, you will need to modify your state file. + // Metadata startup scripts made available within the instance. MetadataStartupScript pulumi.StringPtrInput // Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as // `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). @@ -782,8 +727,8 @@ func (o InstanceOutput) AdvancedMachineFeatures() InstanceAdvancedMachineFeature return o.ApplyT(func(v *Instance) InstanceAdvancedMachineFeaturesPtrOutput { return v.AdvancedMachineFeatures }).(InstanceAdvancedMachineFeaturesPtrOutput) } -// If true, allows this prvider to stop the instance to update its properties. -// If you try to update a property that requires stopping the instance without setting this field, the update will fail. +// If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires +// stopping the instance without setting this field, the update will fail. func (o InstanceOutput) AllowStoppingForUpdate() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Instance) pulumi.BoolPtrOutput { return v.AllowStoppingForUpdate }).(pulumi.BoolPtrOutput) } @@ -821,8 +766,7 @@ func (o InstanceOutput) CurrentStatus() pulumi.StringOutput { return o.ApplyT(func(v *Instance) pulumi.StringOutput { return v.CurrentStatus }).(pulumi.StringOutput) } -// Enable deletion protection on this instance. Defaults to false. -// **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. +// Whether deletion protection is enabled on this instance. func (o InstanceOutput) DeletionProtection() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Instance) pulumi.BoolPtrOutput { return v.DeletionProtection }).(pulumi.BoolPtrOutput) } @@ -844,8 +788,7 @@ func (o InstanceOutput) EnableDisplay() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Instance) pulumi.BoolPtrOutput { return v.EnableDisplay }).(pulumi.BoolPtrOutput) } -// List of the type and count of accelerator cards attached to the instance. Structure documented below. -// **Note:** GPU accelerators can only be used with `onHostMaintenance` option set to TERMINATE. +// List of the type and count of accelerator cards attached to the instance. func (o InstanceOutput) GuestAccelerators() InstanceGuestAcceleratorArrayOutput { return o.ApplyT(func(v *Instance) InstanceGuestAcceleratorArrayOutput { return v.GuestAccelerators }).(InstanceGuestAcceleratorArrayOutput) } @@ -890,16 +833,7 @@ func (o InstanceOutput) MetadataFingerprint() pulumi.StringOutput { return o.ApplyT(func(v *Instance) pulumi.StringOutput { return v.MetadataFingerprint }).(pulumi.StringOutput) } -// An alternative to using the -// startup-script metadata key, except this one forces the instance to be recreated -// (thus re-running the script) if it is changed. This replaces the startup-script -// metadata key on the created instance and thus the two mechanisms are not -// allowed to be used simultaneously. Users are free to use either mechanism - the -// only distinction is that this separate attribute will cause a recreate on -// modification. On import, `metadataStartupScript` will not be set - if you -// choose to specify it you will see a diff immediately after import causing a -// destroy/recreate operation. If importing an instance and specifying this value -// is desired, you will need to modify your state file. +// Metadata startup scripts made available within the instance. func (o InstanceOutput) MetadataStartupScript() pulumi.StringPtrOutput { return o.ApplyT(func(v *Instance) pulumi.StringPtrOutput { return v.MetadataStartupScript }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/compute/instanceFromMachineImage.go b/sdk/go/gcp/compute/instanceFromMachineImage.go index 08d1981f39..55660b3102 100644 --- a/sdk/go/gcp/compute/instanceFromMachineImage.go +++ b/sdk/go/gcp/compute/instanceFromMachineImage.go @@ -11,15 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Manages a VM instance resource within GCE. For more information see -// [the official documentation](https://cloud.google.com/compute/docs/instances) -// and -// [API](https://cloud.google.com/compute/docs/reference/latest/instances). -// -// This resource is specifically to create a compute instance from a given -// `sourceMachineImage`. To create an instance without a machine image, use the -// `compute.Instance` resource. -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/compute/instanceFromTemplate.go b/sdk/go/gcp/compute/instanceFromTemplate.go index 0768c5e570..dc15e1c58f 100644 --- a/sdk/go/gcp/compute/instanceFromTemplate.go +++ b/sdk/go/gcp/compute/instanceFromTemplate.go @@ -145,7 +145,8 @@ type InstanceFromTemplate struct { ResourcePolicies pulumi.StringOutput `pulumi:"resourcePolicies"` // The scheduling strategy being used by the instance. Scheduling InstanceFromTemplateSchedulingOutput `pulumi:"scheduling"` - // The scratch disks attached to the instance. + // * `network_interface.alias_ip_range` + // * `network_interface.access_config` ScratchDisks InstanceFromTemplateScratchDiskArrayOutput `pulumi:"scratchDisks"` // The URI of the created resource. SelfLink pulumi.StringOutput `pulumi:"selfLink"` @@ -262,7 +263,8 @@ type instanceFromTemplateState struct { ResourcePolicies *string `pulumi:"resourcePolicies"` // The scheduling strategy being used by the instance. Scheduling *InstanceFromTemplateScheduling `pulumi:"scheduling"` - // The scratch disks attached to the instance. + // * `network_interface.alias_ip_range` + // * `network_interface.access_config` ScratchDisks []InstanceFromTemplateScratchDisk `pulumi:"scratchDisks"` // The URI of the created resource. SelfLink *string `pulumi:"selfLink"` @@ -348,7 +350,8 @@ type InstanceFromTemplateState struct { ResourcePolicies pulumi.StringPtrInput // The scheduling strategy being used by the instance. Scheduling InstanceFromTemplateSchedulingPtrInput - // The scratch disks attached to the instance. + // * `network_interface.alias_ip_range` + // * `network_interface.access_config` ScratchDisks InstanceFromTemplateScratchDiskArrayInput // The URI of the created resource. SelfLink pulumi.StringPtrInput @@ -428,7 +431,8 @@ type instanceFromTemplateArgs struct { ResourcePolicies *string `pulumi:"resourcePolicies"` // The scheduling strategy being used by the instance. Scheduling *InstanceFromTemplateScheduling `pulumi:"scheduling"` - // The scratch disks attached to the instance. + // * `network_interface.alias_ip_range` + // * `network_interface.access_config` ScratchDisks []InstanceFromTemplateScratchDisk `pulumi:"scratchDisks"` // The service account to attach to the instance. ServiceAccount *InstanceFromTemplateServiceAccount `pulumi:"serviceAccount"` @@ -501,7 +505,8 @@ type InstanceFromTemplateArgs struct { ResourcePolicies pulumi.StringPtrInput // The scheduling strategy being used by the instance. Scheduling InstanceFromTemplateSchedulingPtrInput - // The scratch disks attached to the instance. + // * `network_interface.alias_ip_range` + // * `network_interface.access_config` ScratchDisks InstanceFromTemplateScratchDiskArrayInput // The service account to attach to the instance. ServiceAccount InstanceFromTemplateServiceAccountPtrInput @@ -768,7 +773,8 @@ func (o InstanceFromTemplateOutput) Scheduling() InstanceFromTemplateSchedulingO return o.ApplyT(func(v *InstanceFromTemplate) InstanceFromTemplateSchedulingOutput { return v.Scheduling }).(InstanceFromTemplateSchedulingOutput) } -// The scratch disks attached to the instance. +// * `network_interface.alias_ip_range` +// * `network_interface.access_config` func (o InstanceFromTemplateOutput) ScratchDisks() InstanceFromTemplateScratchDiskArrayOutput { return o.ApplyT(func(v *InstanceFromTemplate) InstanceFromTemplateScratchDiskArrayOutput { return v.ScratchDisks }).(InstanceFromTemplateScratchDiskArrayOutput) } diff --git a/sdk/go/gcp/compute/instanceGroup.go b/sdk/go/gcp/compute/instanceGroup.go index e0b7fbd448..5c0c7ba2fd 100644 --- a/sdk/go/gcp/compute/instanceGroup.go +++ b/sdk/go/gcp/compute/instanceGroup.go @@ -10,79 +10,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Creates a group of dissimilar Compute Engine virtual machine instances. -// For more information, see [the official documentation](https://cloud.google.com/compute/docs/instance-groups/#unmanaged_instance_groups) -// and [API](https://cloud.google.com/compute/docs/reference/latest/instanceGroups) -// -// ## Example Usage -// ### Empty Instance Group -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewInstanceGroup(ctx, "test", &compute.InstanceGroupArgs{ -// Description: pulumi.String("Test instance group"), -// Zone: pulumi.String("us-central1-a"), -// Network: pulumi.Any(google_compute_network.Default.Id), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ### Example Usage - With instances and named ports -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewInstanceGroup(ctx, "webservers", &compute.InstanceGroupArgs{ -// Description: pulumi.String("Test instance group"), -// Instances: pulumi.StringArray{ -// google_compute_instance.Test.Id, -// google_compute_instance.Test2.Id, -// }, -// NamedPorts: compute.InstanceGroupNamedPortTypeArray{ -// &compute.InstanceGroupNamedPortTypeArgs{ -// Name: pulumi.String("http"), -// Port: pulumi.Int(8080), -// }, -// &compute.InstanceGroupNamedPortTypeArgs{ -// Name: pulumi.String("https"), -// Port: pulumi.Int(8443), -// }, -// }, -// Zone: pulumi.String("us-central1-a"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // Instance group can be imported using the `zone` and `name` with an optional `project`, e.g. diff --git a/sdk/go/gcp/compute/instanceGroupManager.go b/sdk/go/gcp/compute/instanceGroupManager.go index c1ae9c1cec..1966b916d5 100644 --- a/sdk/go/gcp/compute/instanceGroupManager.go +++ b/sdk/go/gcp/compute/instanceGroupManager.go @@ -220,9 +220,8 @@ type InstanceGroupManager struct { // version deals with a specific instance template, allowing canary release scenarios. // Structure is documented below. Versions InstanceGroupManagerVersionArrayOutput `pulumi:"versions"` - // Whether to wait for all instances to be created/updated before - // returning. Note that if this is set to true and the operation does not succeed, this provider will - // continue trying until it times out. + // Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + // operation does not succeed, Terraform will continue trying until it times out. WaitForInstances pulumi.BoolPtrOutput `pulumi:"waitForInstances"` // When used with `waitForInstances` it specifies the status to wait for. // When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is @@ -334,9 +333,8 @@ type instanceGroupManagerState struct { // version deals with a specific instance template, allowing canary release scenarios. // Structure is documented below. Versions []InstanceGroupManagerVersion `pulumi:"versions"` - // Whether to wait for all instances to be created/updated before - // returning. Note that if this is set to true and the operation does not succeed, this provider will - // continue trying until it times out. + // Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + // operation does not succeed, Terraform will continue trying until it times out. WaitForInstances *bool `pulumi:"waitForInstances"` // When used with `waitForInstances` it specifies the status to wait for. // When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is @@ -414,9 +412,8 @@ type InstanceGroupManagerState struct { // version deals with a specific instance template, allowing canary release scenarios. // Structure is documented below. Versions InstanceGroupManagerVersionArrayInput - // Whether to wait for all instances to be created/updated before - // returning. Note that if this is set to true and the operation does not succeed, this provider will - // continue trying until it times out. + // Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + // operation does not succeed, Terraform will continue trying until it times out. WaitForInstances pulumi.BoolPtrInput // When used with `waitForInstances` it specifies the status to wait for. // When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is @@ -489,9 +486,8 @@ type instanceGroupManagerArgs struct { // version deals with a specific instance template, allowing canary release scenarios. // Structure is documented below. Versions []InstanceGroupManagerVersion `pulumi:"versions"` - // Whether to wait for all instances to be created/updated before - // returning. Note that if this is set to true and the operation does not succeed, this provider will - // continue trying until it times out. + // Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + // operation does not succeed, Terraform will continue trying until it times out. WaitForInstances *bool `pulumi:"waitForInstances"` // When used with `waitForInstances` it specifies the status to wait for. // When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is @@ -561,9 +557,8 @@ type InstanceGroupManagerArgs struct { // version deals with a specific instance template, allowing canary release scenarios. // Structure is documented below. Versions InstanceGroupManagerVersionArrayInput - // Whether to wait for all instances to be created/updated before - // returning. Note that if this is set to true and the operation does not succeed, this provider will - // continue trying until it times out. + // Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + // operation does not succeed, Terraform will continue trying until it times out. WaitForInstances pulumi.BoolPtrInput // When used with `waitForInstances` it specifies the status to wait for. // When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is @@ -795,9 +790,8 @@ func (o InstanceGroupManagerOutput) Versions() InstanceGroupManagerVersionArrayO return o.ApplyT(func(v *InstanceGroupManager) InstanceGroupManagerVersionArrayOutput { return v.Versions }).(InstanceGroupManagerVersionArrayOutput) } -// Whether to wait for all instances to be created/updated before -// returning. Note that if this is set to true and the operation does not succeed, this provider will -// continue trying until it times out. +// Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the +// operation does not succeed, Terraform will continue trying until it times out. func (o InstanceGroupManagerOutput) WaitForInstances() pulumi.BoolPtrOutput { return o.ApplyT(func(v *InstanceGroupManager) pulumi.BoolPtrOutput { return v.WaitForInstances }).(pulumi.BoolPtrOutput) } diff --git a/sdk/go/gcp/compute/instanceTemplate.go b/sdk/go/gcp/compute/instanceTemplate.go index a7abfee0ad..33ea5592c1 100644 --- a/sdk/go/gcp/compute/instanceTemplate.go +++ b/sdk/go/gcp/compute/instanceTemplate.go @@ -11,207 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Manages a VM instance template resource within GCE. For more information see -// [the official documentation](https://cloud.google.com/compute/docs/instance-templates) -// and -// [API](https://cloud.google.com/compute/docs/reference/latest/instanceTemplates). -// -// ## Example Usage -// ### Automatic Envoy Deployment -// -// ```go -// package main -// -// import ( -// -// "fmt" -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _default, err := compute.GetDefaultServiceAccount(ctx, nil, nil) -// if err != nil { -// return err -// } -// myImage, err := compute.LookupImage(ctx, &compute.LookupImageArgs{ -// Family: pulumi.StringRef("debian-11"), -// Project: pulumi.StringRef("debian-cloud"), -// }, nil) -// if err != nil { -// return err -// } -// _, err = compute.NewInstanceTemplate(ctx, "foobar", &compute.InstanceTemplateArgs{ -// MachineType: pulumi.String("e2-medium"), -// CanIpForward: pulumi.Bool(false), -// Tags: pulumi.StringArray{ -// pulumi.String("foo"), -// pulumi.String("bar"), -// }, -// Disks: compute.InstanceTemplateDiskArray{ -// &compute.InstanceTemplateDiskArgs{ -// SourceImage: *pulumi.String(myImage.SelfLink), -// AutoDelete: pulumi.Bool(true), -// Boot: pulumi.Bool(true), -// }, -// }, -// NetworkInterfaces: compute.InstanceTemplateNetworkInterfaceArray{ -// &compute.InstanceTemplateNetworkInterfaceArgs{ -// Network: pulumi.String("default"), -// }, -// }, -// Scheduling: &compute.InstanceTemplateSchedulingArgs{ -// Preemptible: pulumi.Bool(false), -// AutomaticRestart: pulumi.Bool(true), -// }, -// Metadata: pulumi.AnyMap{ -// "gce-software-declaration": pulumi.Any(fmt.Sprintf(`{ -// "softwareRecipes": [{ -// "name": "install-gce-service-proxy-agent", -// "desired_state": "INSTALLED", -// "installSteps": [{ -// "scriptRun": { -// "script": "#! /bin/bash\nZONE=$(curl --silent http://metadata.google.internal/computeMetadata/v1/instance/zone -H Metadata-Flavor:Google | cut -d/ -f4 )\nexport SERVICE_PROXY_AGENT_DIRECTORY=$(mktemp -d)\nsudo gsutil cp gs://gce-service-proxy-"$ZONE"/service-proxy-agent/releases/service-proxy-agent-0.2.tgz "$SERVICE_PROXY_AGENT_DIRECTORY" || sudo gsutil cp gs://gce-service-proxy/service-proxy-agent/releases/service-proxy-agent-0.2.tgz "$SERVICE_PROXY_AGENT_DIRECTORY"\nsudo tar -xzf "$SERVICE_PROXY_AGENT_DIRECTORY"/service-proxy-agent-0.2.tgz -C "$SERVICE_PROXY_AGENT_DIRECTORY"\n"$SERVICE_PROXY_AGENT_DIRECTORY"/service-proxy-agent/service-proxy-agent-bootstrap.sh" -// } -// }] -// }] -// } -// -// `)), -// -// "gce-service-proxy": pulumi.Any(fmt.Sprintf(`{ -// "api-version": "0.2", -// "proxy-spec": { -// "proxy-port": 15001, -// "network": "my-network", -// "tracing": "ON", -// "access-log": "/var/log/envoy/access.log" -// } -// "service": { -// "serving-ports": [80, 81] -// }, -// "labels": { -// "app_name": "bookserver_app", -// "app_version": "STABLE" -// } -// } -// -// `)), -// -// "enable-guest-attributes": pulumi.Any("true"), -// "enable-osconfig": pulumi.Any("true"), -// }, -// ServiceAccount: &compute.InstanceTemplateServiceAccountArgs{ -// Email: *pulumi.String(_default.Email), -// Scopes: pulumi.StringArray{ -// pulumi.String("cloud-platform"), -// }, -// }, -// Labels: pulumi.StringMap{ -// "gce-service-proxy": pulumi.String("on"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ## Deploying the Latest Image -// -// A common way to use instance templates and managed instance groups is to deploy the -// latest image in a family, usually the latest build of your application. There are two -// ways to do this in the provider, and they have their pros and cons. The difference ends -// up being in how "latest" is interpreted. You can either deploy the latest image available -// when the provider runs, or you can have each instance check what the latest image is when -// it's being created, either as part of a scaling event or being rebuilt by the instance -// group manager. -// -// If you're not sure, we recommend deploying the latest image available when the provider runs, -// because this means all the instances in your group will be based on the same image, always, -// and means that no upgrades or changes to your instances happen outside of a `pulumi up`. -// You can achieve this by using the `compute.Image` -// data source, which will retrieve the latest image on every `pulumi apply`, and will update -// the template to use that specific image: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// myImage, err := compute.LookupImage(ctx, &compute.LookupImageArgs{ -// Family: pulumi.StringRef("debian-11"), -// Project: pulumi.StringRef("debian-cloud"), -// }, nil) -// if err != nil { -// return err -// } -// _, err = compute.NewInstanceTemplate(ctx, "instanceTemplate", &compute.InstanceTemplateArgs{ -// NamePrefix: pulumi.String("instance-template-"), -// MachineType: pulumi.String("e2-medium"), -// Region: pulumi.String("us-central1"), -// Disks: compute.InstanceTemplateDiskArray{ -// &compute.InstanceTemplateDiskArgs{ -// SourceImage: *pulumi.String(myImage.SelfLink), -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// To have instances update to the latest on every scaling event or instance re-creation, -// use the family as the image for the disk, and it will use GCP's default behavior, setting -// the image for the template to the family: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewInstanceTemplate(ctx, "instanceTemplate", &compute.InstanceTemplateArgs{ -// Disks: compute.InstanceTemplateDiskArray{ -// &compute.InstanceTemplateDiskArgs{ -// SourceImage: pulumi.String("debian-cloud/debian-11"), -// }, -// }, -// MachineType: pulumi.String("e2-medium"), -// NamePrefix: pulumi.String("instance-template-"), -// Region: pulumi.String("us-central1"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // # Instance templates can be imported using any of these accepted formats @@ -277,8 +76,7 @@ type InstanceTemplate struct { // Specifies a minimum CPU platform. Applicable values are the friendly names of CPU platforms, such as // `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). MinCpuPlatform pulumi.StringPtrOutput `pulumi:"minCpuPlatform"` - // The name of the instance template. If you leave - // this blank, the provider will auto-generate a unique name. + // The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. Name pulumi.StringOutput `pulumi:"name"` // Creates a unique name beginning with the specified // prefix. Conflicts with `name`. @@ -397,8 +195,7 @@ type instanceTemplateState struct { // Specifies a minimum CPU platform. Applicable values are the friendly names of CPU platforms, such as // `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). MinCpuPlatform *string `pulumi:"minCpuPlatform"` - // The name of the instance template. If you leave - // this blank, the provider will auto-generate a unique name. + // The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. Name *string `pulumi:"name"` // Creates a unique name beginning with the specified // prefix. Conflicts with `name`. @@ -483,8 +280,7 @@ type InstanceTemplateState struct { // Specifies a minimum CPU platform. Applicable values are the friendly names of CPU platforms, such as // `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). MinCpuPlatform pulumi.StringPtrInput - // The name of the instance template. If you leave - // this blank, the provider will auto-generate a unique name. + // The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. Name pulumi.StringPtrInput // Creates a unique name beginning with the specified // prefix. Conflicts with `name`. @@ -571,8 +367,7 @@ type instanceTemplateArgs struct { // Specifies a minimum CPU platform. Applicable values are the friendly names of CPU platforms, such as // `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). MinCpuPlatform *string `pulumi:"minCpuPlatform"` - // The name of the instance template. If you leave - // this blank, the provider will auto-generate a unique name. + // The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. Name *string `pulumi:"name"` // Creates a unique name beginning with the specified // prefix. Conflicts with `name`. @@ -652,8 +447,7 @@ type InstanceTemplateArgs struct { // Specifies a minimum CPU platform. Applicable values are the friendly names of CPU platforms, such as // `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). MinCpuPlatform pulumi.StringPtrInput - // The name of the instance template. If you leave - // this blank, the provider will auto-generate a unique name. + // The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. Name pulumi.StringPtrInput // Creates a unique name beginning with the specified // prefix. Conflicts with `name`. @@ -866,8 +660,7 @@ func (o InstanceTemplateOutput) MinCpuPlatform() pulumi.StringPtrOutput { return o.ApplyT(func(v *InstanceTemplate) pulumi.StringPtrOutput { return v.MinCpuPlatform }).(pulumi.StringPtrOutput) } -// The name of the instance template. If you leave -// this blank, the provider will auto-generate a unique name. +// The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. func (o InstanceTemplateOutput) Name() pulumi.StringOutput { return o.ApplyT(func(v *InstanceTemplate) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/compute/machineImage.go b/sdk/go/gcp/compute/machineImage.go index fb02f91df0..7f465dd426 100644 --- a/sdk/go/gcp/compute/machineImage.go +++ b/sdk/go/gcp/compute/machineImage.go @@ -11,16 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Represents a Machine Image resource. Machine images store all the configuration, -// metadata, permissions, and data from one or more disks required to create a -// Virtual machine (VM) instance. -// -// To get more information about MachineImage, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/machineImages) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/compute/docs/machine-images) -// // ## Example Usage // ### Machine Image Basic // diff --git a/sdk/go/gcp/compute/machineImageIamBinding.go b/sdk/go/gcp/compute/machineImageIamBinding.go index 978fce6f2f..df4e26c127 100644 --- a/sdk/go/gcp/compute/machineImageIamBinding.go +++ b/sdk/go/gcp/compute/machineImageIamBinding.go @@ -11,234 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: -// -// * `compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. -// * `compute.MachineImageIamBinding`: 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 machineimage are preserved. -// * `compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. -// -// > **Note:** `compute.MachineImageIamPolicy` **cannot** be used in conjunction with `compute.MachineImageIamBinding` and `compute.MachineImageIamMember` or they will fight over what your policy should be. -// -// > **Note:** `compute.MachineImageIamBinding` resources **can be** used in conjunction with `compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. -// -// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. -// ## google\_compute\_machine\_image\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/compute.admin", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = compute.NewMachineImageIamPolicy(ctx, "policy", &compute.MachineImageIamPolicyArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/compute.admin", -// Members: []string{ -// "user:jane@example.com", -// }, -// Condition: { -// Title: "expires_after_2019_12_31", -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = compute.NewMachineImageIamPolicy(ctx, "policy", &compute.MachineImageIamPolicyArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ## google\_compute\_machine\_image\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewMachineImageIamBinding(ctx, "binding", &compute.MachineImageIamBindingArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// Role: pulumi.String("roles/compute.admin"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewMachineImageIamBinding(ctx, "binding", &compute.MachineImageIamBindingArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// Role: pulumi.String("roles/compute.admin"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Condition: &compute.MachineImageIamBindingConditionArgs{ -// Title: pulumi.String("expires_after_2019_12_31"), -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ## google\_compute\_machine\_image\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewMachineImageIamMember(ctx, "member", &compute.MachineImageIamMemberArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// Role: pulumi.String("roles/compute.admin"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewMachineImageIamMember(ctx, "member", &compute.MachineImageIamMemberArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// Role: pulumi.String("roles/compute.admin"), -// Member: pulumi.String("user:jane@example.com"), -// Condition: &compute.MachineImageIamMemberConditionArgs{ -// Title: pulumi.String("expires_after_2019_12_31"), -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/compute/machineImageIamMember.go b/sdk/go/gcp/compute/machineImageIamMember.go index 9a46517e03..9e09994670 100644 --- a/sdk/go/gcp/compute/machineImageIamMember.go +++ b/sdk/go/gcp/compute/machineImageIamMember.go @@ -11,234 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: -// -// * `compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. -// * `compute.MachineImageIamBinding`: 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 machineimage are preserved. -// * `compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. -// -// > **Note:** `compute.MachineImageIamPolicy` **cannot** be used in conjunction with `compute.MachineImageIamBinding` and `compute.MachineImageIamMember` or they will fight over what your policy should be. -// -// > **Note:** `compute.MachineImageIamBinding` resources **can be** used in conjunction with `compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. -// -// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. -// ## google\_compute\_machine\_image\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/compute.admin", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = compute.NewMachineImageIamPolicy(ctx, "policy", &compute.MachineImageIamPolicyArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/compute.admin", -// Members: []string{ -// "user:jane@example.com", -// }, -// Condition: { -// Title: "expires_after_2019_12_31", -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = compute.NewMachineImageIamPolicy(ctx, "policy", &compute.MachineImageIamPolicyArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ## google\_compute\_machine\_image\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewMachineImageIamBinding(ctx, "binding", &compute.MachineImageIamBindingArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// Role: pulumi.String("roles/compute.admin"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewMachineImageIamBinding(ctx, "binding", &compute.MachineImageIamBindingArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// Role: pulumi.String("roles/compute.admin"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Condition: &compute.MachineImageIamBindingConditionArgs{ -// Title: pulumi.String("expires_after_2019_12_31"), -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ## google\_compute\_machine\_image\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewMachineImageIamMember(ctx, "member", &compute.MachineImageIamMemberArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// Role: pulumi.String("roles/compute.admin"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewMachineImageIamMember(ctx, "member", &compute.MachineImageIamMemberArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// Role: pulumi.String("roles/compute.admin"), -// Member: pulumi.String("user:jane@example.com"), -// Condition: &compute.MachineImageIamMemberConditionArgs{ -// Title: pulumi.String("expires_after_2019_12_31"), -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/compute/machineImageIamPolicy.go b/sdk/go/gcp/compute/machineImageIamPolicy.go index 4537c878bc..e8da440251 100644 --- a/sdk/go/gcp/compute/machineImageIamPolicy.go +++ b/sdk/go/gcp/compute/machineImageIamPolicy.go @@ -11,234 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: -// -// * `compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. -// * `compute.MachineImageIamBinding`: 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 machineimage are preserved. -// * `compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. -// -// > **Note:** `compute.MachineImageIamPolicy` **cannot** be used in conjunction with `compute.MachineImageIamBinding` and `compute.MachineImageIamMember` or they will fight over what your policy should be. -// -// > **Note:** `compute.MachineImageIamBinding` resources **can be** used in conjunction with `compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. -// -// > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. -// ## google\_compute\_machine\_image\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/compute.admin", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = compute.NewMachineImageIamPolicy(ctx, "policy", &compute.MachineImageIamPolicyArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/compute.admin", -// Members: []string{ -// "user:jane@example.com", -// }, -// Condition: { -// Title: "expires_after_2019_12_31", -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = compute.NewMachineImageIamPolicy(ctx, "policy", &compute.MachineImageIamPolicyArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ## google\_compute\_machine\_image\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewMachineImageIamBinding(ctx, "binding", &compute.MachineImageIamBindingArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// Role: pulumi.String("roles/compute.admin"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewMachineImageIamBinding(ctx, "binding", &compute.MachineImageIamBindingArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// Role: pulumi.String("roles/compute.admin"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Condition: &compute.MachineImageIamBindingConditionArgs{ -// Title: pulumi.String("expires_after_2019_12_31"), -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// ## google\_compute\_machine\_image\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewMachineImageIamMember(ctx, "member", &compute.MachineImageIamMemberArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// Role: pulumi.String("roles/compute.admin"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewMachineImageIamMember(ctx, "member", &compute.MachineImageIamMemberArgs{ -// Project: pulumi.Any(google_compute_machine_image.Image.Project), -// MachineImage: pulumi.Any(google_compute_machine_image.Image.Name), -// Role: pulumi.String("roles/compute.admin"), -// Member: pulumi.String("user:jane@example.com"), -// Condition: &compute.MachineImageIamMemberConditionArgs{ -// Title: pulumi.String("expires_after_2019_12_31"), -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/compute/nodeGroup.go b/sdk/go/gcp/compute/nodeGroup.go index cf4a55bf57..7720949c87 100644 --- a/sdk/go/gcp/compute/nodeGroup.go +++ b/sdk/go/gcp/compute/nodeGroup.go @@ -11,19 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Represents a NodeGroup resource to manage a group of sole-tenant nodes. -// -// To get more information about NodeGroup, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups) -// * How-to Guides -// - [Sole-Tenant Nodes](https://cloud.google.com/compute/docs/nodes/) -// -// > **Warning:** Due to limitations of the API, this provider cannot update the -// number of nodes in a node group and changes to node group size either -// through provider config or through external changes will cause -// the provider to delete and recreate the node group. -// // ## Example Usage // ### Node Group Basic // @@ -47,8 +34,8 @@ import ( // return err // } // _, err = compute.NewNodeGroup(ctx, "nodes", &compute.NodeGroupArgs{ -// Zone: pulumi.String("us-central1-a"), -// Description: pulumi.String("example google_compute_node_group for the Google Provider"), +// Zone: pulumi.String("us-central1-f"), +// Description: pulumi.String("example google_compute_node_group for Terraform Google Provider"), // Size: pulumi.Int(1), // NodeTemplate: soletenant_tmpl.ID(), // }) @@ -82,8 +69,8 @@ import ( // return err // } // _, err = compute.NewNodeGroup(ctx, "nodes", &compute.NodeGroupArgs{ -// Zone: pulumi.String("us-central1-a"), -// Description: pulumi.String("example google_compute_node_group for Google Provider"), +// Zone: pulumi.String("us-central1-f"), +// Description: pulumi.String("example google_compute_node_group for Terraform Google Provider"), // MaintenancePolicy: pulumi.String("RESTART_IN_PLACE"), // MaintenanceWindow: &compute.NodeGroupMaintenanceWindowArgs{ // StartTime: pulumi.String("08:00"), @@ -104,6 +91,58 @@ import ( // } // // ``` +// ### Node Group Share Settings +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// guestProject, err := organizations.NewProject(ctx, "guestProject", &organizations.ProjectArgs{ +// ProjectId: pulumi.String("project-id"), +// OrgId: pulumi.String("123456789"), +// }) +// if err != nil { +// return err +// } +// _, err = compute.NewNodeTemplate(ctx, "soletenant-tmpl", &compute.NodeTemplateArgs{ +// Region: pulumi.String("us-central1"), +// NodeType: pulumi.String("n1-node-96-624"), +// }) +// if err != nil { +// return err +// } +// _, err = compute.NewNodeGroup(ctx, "nodes", &compute.NodeGroupArgs{ +// Zone: pulumi.String("us-central1-f"), +// Description: pulumi.String("example google_compute_node_group for Terraform Google Provider"), +// Size: pulumi.Int(1), +// NodeTemplate: soletenant_tmpl.ID(), +// ShareSettings: &compute.NodeGroupShareSettingsArgs{ +// ShareType: pulumi.String("SPECIFIC_PROJECTS"), +// ProjectMaps: compute.NodeGroupShareSettingsProjectMapArray{ +// &compute.NodeGroupShareSettingsProjectMapArgs{ +// Id: guestProject.ProjectId, +// ProjectId: guestProject.ProjectId, +// }, +// }, +// }, +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // // ## Import // @@ -159,6 +198,9 @@ type NodeGroup struct { Project pulumi.StringOutput `pulumi:"project"` // The URI of the created resource. SelfLink pulumi.StringOutput `pulumi:"selfLink"` + // Share settings for the node group. + // Structure is documented below. + ShareSettings NodeGroupShareSettingsOutput `pulumi:"shareSettings"` // The total number of nodes in the node group. One of `initialSize` or `size` must be specified. Size pulumi.IntOutput `pulumi:"size"` // Zone where this node group is located @@ -221,6 +263,9 @@ type nodeGroupState struct { Project *string `pulumi:"project"` // The URI of the created resource. SelfLink *string `pulumi:"selfLink"` + // Share settings for the node group. + // Structure is documented below. + ShareSettings *NodeGroupShareSettings `pulumi:"shareSettings"` // The total number of nodes in the node group. One of `initialSize` or `size` must be specified. Size *int `pulumi:"size"` // Zone where this node group is located @@ -252,6 +297,9 @@ type NodeGroupState struct { Project pulumi.StringPtrInput // The URI of the created resource. SelfLink pulumi.StringPtrInput + // Share settings for the node group. + // Structure is documented below. + ShareSettings NodeGroupShareSettingsPtrInput // The total number of nodes in the node group. One of `initialSize` or `size` must be specified. Size pulumi.IntPtrInput // Zone where this node group is located @@ -283,6 +331,9 @@ type nodeGroupArgs struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project *string `pulumi:"project"` + // Share settings for the node group. + // Structure is documented below. + ShareSettings *NodeGroupShareSettings `pulumi:"shareSettings"` // The total number of nodes in the node group. One of `initialSize` or `size` must be specified. Size *int `pulumi:"size"` // Zone where this node group is located @@ -311,6 +362,9 @@ type NodeGroupArgs struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringPtrInput + // Share settings for the node group. + // Structure is documented below. + ShareSettings NodeGroupShareSettingsPtrInput // The total number of nodes in the node group. One of `initialSize` or `size` must be specified. Size pulumi.IntPtrInput // Zone where this node group is located @@ -458,6 +512,12 @@ func (o NodeGroupOutput) SelfLink() pulumi.StringOutput { return o.ApplyT(func(v *NodeGroup) pulumi.StringOutput { return v.SelfLink }).(pulumi.StringOutput) } +// Share settings for the node group. +// Structure is documented below. +func (o NodeGroupOutput) ShareSettings() NodeGroupShareSettingsOutput { + return o.ApplyT(func(v *NodeGroup) NodeGroupShareSettingsOutput { return v.ShareSettings }).(NodeGroupShareSettingsOutput) +} + // The total number of nodes in the node group. One of `initialSize` or `size` must be specified. func (o NodeGroupOutput) Size() pulumi.IntOutput { return o.ApplyT(func(v *NodeGroup) pulumi.IntOutput { return v.Size }).(pulumi.IntOutput) diff --git a/sdk/go/gcp/compute/organizationSecurityPolicy.go b/sdk/go/gcp/compute/organizationSecurityPolicy.go index 8afa0cadbf..4ea63459b7 100644 --- a/sdk/go/gcp/compute/organizationSecurityPolicy.go +++ b/sdk/go/gcp/compute/organizationSecurityPolicy.go @@ -11,41 +11,7 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Organization security policies are used to control incoming/outgoing traffic. -// -// To get more information about OrganizationSecurityPolicy, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies) -// * How-to Guides -// - [Creating a firewall policy](https://cloud.google.com/vpc/docs/using-firewall-policies#create-policy) -// // ## Example Usage -// ### Organization Security Policy Basic -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := compute.NewOrganizationSecurityPolicy(ctx, "policy", &compute.OrganizationSecurityPolicyArgs{ -// DisplayName: pulumi.String("tf-test"), -// Parent: pulumi.String("organizations/123456789"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/compute/organizationSecurityPolicyAssociation.go b/sdk/go/gcp/compute/organizationSecurityPolicyAssociation.go index d561fa9ed6..3483a447c5 100644 --- a/sdk/go/gcp/compute/organizationSecurityPolicyAssociation.go +++ b/sdk/go/gcp/compute/organizationSecurityPolicyAssociation.go @@ -11,85 +11,7 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// An association for the OrganizationSecurityPolicy. -// -// To get more information about OrganizationSecurityPolicyAssociation, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addAssociation) -// * How-to Guides -// - [Associating a policy with the organization or folder](https://cloud.google.com/vpc/docs/using-firewall-policies#associate) -// // ## Example Usage -// ### Organization Security Policy Association Basic -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// securityPolicyTarget, err := organizations.NewFolder(ctx, "securityPolicyTarget", &organizations.FolderArgs{ -// DisplayName: pulumi.String("tf-test-secpol"), -// Parent: pulumi.String("organizations/123456789"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// policyOrganizationSecurityPolicy, err := compute.NewOrganizationSecurityPolicy(ctx, "policyOrganizationSecurityPolicy", &compute.OrganizationSecurityPolicyArgs{ -// DisplayName: pulumi.String("tf-test"), -// Parent: securityPolicyTarget.Name, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// _, err = compute.NewOrganizationSecurityPolicyRule(ctx, "policyOrganizationSecurityPolicyRule", &compute.OrganizationSecurityPolicyRuleArgs{ -// PolicyId: policyOrganizationSecurityPolicy.ID(), -// Action: pulumi.String("allow"), -// Direction: pulumi.String("INGRESS"), -// EnableLogging: pulumi.Bool(true), -// Match: &compute.OrganizationSecurityPolicyRuleMatchArgs{ -// Config: &compute.OrganizationSecurityPolicyRuleMatchConfigArgs{ -// SrcIpRanges: pulumi.StringArray{ -// pulumi.String("192.168.0.0/16"), -// pulumi.String("10.0.0.0/8"), -// }, -// Layer4Configs: compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArray{ -// &compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs{ -// IpProtocol: pulumi.String("tcp"), -// Ports: pulumi.StringArray{ -// pulumi.String("22"), -// }, -// }, -// &compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs{ -// IpProtocol: pulumi.String("icmp"), -// }, -// }, -// }, -// }, -// Priority: pulumi.Int(100), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// _, err = compute.NewOrganizationSecurityPolicyAssociation(ctx, "policyOrganizationSecurityPolicyAssociation", &compute.OrganizationSecurityPolicyAssociationArgs{ -// AttachmentId: policyOrganizationSecurityPolicy.Parent, -// PolicyId: policyOrganizationSecurityPolicy.ID(), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/compute/organizationSecurityPolicyRule.go b/sdk/go/gcp/compute/organizationSecurityPolicyRule.go index ae609b7d40..9853653f71 100644 --- a/sdk/go/gcp/compute/organizationSecurityPolicyRule.go +++ b/sdk/go/gcp/compute/organizationSecurityPolicyRule.go @@ -11,70 +11,7 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A rule for the OrganizationSecurityPolicy. -// -// To get more information about OrganizationSecurityPolicyRule, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addRule) -// * How-to Guides -// - [Creating firewall rules](https://cloud.google.com/vpc/docs/using-firewall-policies#create-rules) -// // ## Example Usage -// ### Organization Security Policy Rule Basic -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// policyOrganizationSecurityPolicy, err := compute.NewOrganizationSecurityPolicy(ctx, "policyOrganizationSecurityPolicy", &compute.OrganizationSecurityPolicyArgs{ -// DisplayName: pulumi.String("tf-test"), -// Parent: pulumi.String("organizations/123456789"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// _, err = compute.NewOrganizationSecurityPolicyRule(ctx, "policyOrganizationSecurityPolicyRule", &compute.OrganizationSecurityPolicyRuleArgs{ -// PolicyId: policyOrganizationSecurityPolicy.ID(), -// Action: pulumi.String("allow"), -// Direction: pulumi.String("INGRESS"), -// EnableLogging: pulumi.Bool(true), -// Match: &compute.OrganizationSecurityPolicyRuleMatchArgs{ -// Config: &compute.OrganizationSecurityPolicyRuleMatchConfigArgs{ -// SrcIpRanges: pulumi.StringArray{ -// pulumi.String("192.168.0.0/16"), -// pulumi.String("10.0.0.0/8"), -// }, -// Layer4Configs: compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArray{ -// &compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs{ -// IpProtocol: pulumi.String("tcp"), -// Ports: pulumi.StringArray{ -// pulumi.String("22"), -// }, -// }, -// &compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs{ -// IpProtocol: pulumi.String("icmp"), -// }, -// }, -// }, -// }, -// Priority: pulumi.Int(100), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/compute/perInstanceConfig.go b/sdk/go/gcp/compute/perInstanceConfig.go index 63531cffce..353e8333b8 100644 --- a/sdk/go/gcp/compute/perInstanceConfig.go +++ b/sdk/go/gcp/compute/perInstanceConfig.go @@ -21,106 +21,6 @@ import ( // - [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs) // // ## Example Usage -// ### Stateful Igm -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// myImage, err := compute.LookupImage(ctx, &compute.LookupImageArgs{ -// Family: pulumi.StringRef("debian-11"), -// Project: pulumi.StringRef("debian-cloud"), -// }, nil) -// if err != nil { -// return err -// } -// _, err = compute.NewInstanceTemplate(ctx, "igm-basic", &compute.InstanceTemplateArgs{ -// MachineType: pulumi.String("e2-medium"), -// CanIpForward: pulumi.Bool(false), -// Tags: pulumi.StringArray{ -// pulumi.String("foo"), -// pulumi.String("bar"), -// }, -// Disks: compute.InstanceTemplateDiskArray{ -// &compute.InstanceTemplateDiskArgs{ -// SourceImage: *pulumi.String(myImage.SelfLink), -// AutoDelete: pulumi.Bool(true), -// Boot: pulumi.Bool(true), -// }, -// }, -// NetworkInterfaces: compute.InstanceTemplateNetworkInterfaceArray{ -// &compute.InstanceTemplateNetworkInterfaceArgs{ -// Network: pulumi.String("default"), -// }, -// }, -// ServiceAccount: &compute.InstanceTemplateServiceAccountArgs{ -// Scopes: pulumi.StringArray{ -// pulumi.String("userinfo-email"), -// pulumi.String("compute-ro"), -// pulumi.String("storage-ro"), -// }, -// }, -// }) -// if err != nil { -// return err -// } -// _, err = compute.NewInstanceGroupManager(ctx, "igm-no-tp", &compute.InstanceGroupManagerArgs{ -// Description: pulumi.String("Test instance group manager"), -// Versions: compute.InstanceGroupManagerVersionArray{ -// &compute.InstanceGroupManagerVersionArgs{ -// Name: pulumi.String("prod"), -// InstanceTemplate: igm_basic.SelfLink, -// }, -// }, -// BaseInstanceName: pulumi.String("igm-no-tp"), -// Zone: pulumi.String("us-central1-c"), -// TargetSize: pulumi.Int(2), -// }) -// if err != nil { -// return err -// } -// _, err = compute.NewDisk(ctx, "default", &compute.DiskArgs{ -// Type: pulumi.String("pd-ssd"), -// Zone: pulumi.Any(google_compute_instance_group_manager.Igm.Zone), -// Image: pulumi.String("debian-11-bullseye-v20220719"), -// PhysicalBlockSizeBytes: pulumi.Int(4096), -// }) -// if err != nil { -// return err -// } -// _, err = compute.NewPerInstanceConfig(ctx, "withDisk", &compute.PerInstanceConfigArgs{ -// Zone: pulumi.Any(google_compute_instance_group_manager.Igm.Zone), -// InstanceGroupManager: pulumi.Any(google_compute_instance_group_manager.Igm.Name), -// PreservedState: &compute.PerInstanceConfigPreservedStateArgs{ -// Metadata: pulumi.StringMap{ -// "foo": pulumi.String("bar"), -// "instance_template": igm_basic.SelfLink, -// }, -// Disks: compute.PerInstanceConfigPreservedStateDiskArray{ -// &compute.PerInstanceConfigPreservedStateDiskArgs{ -// DeviceName: pulumi.String("my-stateful-disk"), -// Source: _default.ID(), -// Mode: pulumi.String("READ_ONLY"), -// }, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/compute/projectMetadataItem.go b/sdk/go/gcp/compute/projectMetadataItem.go index 65ec31bdbc..4dcf5dbd41 100644 --- a/sdk/go/gcp/compute/projectMetadataItem.go +++ b/sdk/go/gcp/compute/projectMetadataItem.go @@ -11,11 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Manages a single key/value pair on metadata common to all instances for -// a project in GCE. Using `compute.ProjectMetadataItem` lets you -// manage a single key/value setting in the provider rather than the entire -// project metadata map. -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/compute/pulumiTypes.go b/sdk/go/gcp/compute/pulumiTypes.go index cd6d442a45..c4c5755007 100644 --- a/sdk/go/gcp/compute/pulumiTypes.go +++ b/sdk/go/gcp/compute/pulumiTypes.go @@ -45,10 +45,7 @@ type AutoscalarAutoscalingPolicy struct { // Defines operating mode for this policy. // Default value is `ON`. // Possible values are `OFF`, `ONLY_UP`, and `ON`. - Mode *string `pulumi:"mode"` - // Defines scale down controls to reduce the risk of response latency - // and outages due to abrupt scale-in events - // Structure is documented below. + Mode *string `pulumi:"mode"` ScaleDownControl *AutoscalarAutoscalingPolicyScaleDownControl `pulumi:"scaleDownControl"` // Defines scale in controls to reduce the risk of response latency // and outages due to abrupt scale-in events @@ -105,10 +102,7 @@ type AutoscalarAutoscalingPolicyArgs struct { // Defines operating mode for this policy. // Default value is `ON`. // Possible values are `OFF`, `ONLY_UP`, and `ON`. - Mode pulumi.StringPtrInput `pulumi:"mode"` - // Defines scale down controls to reduce the risk of response latency - // and outages due to abrupt scale-in events - // Structure is documented below. + Mode pulumi.StringPtrInput `pulumi:"mode"` ScaleDownControl AutoscalarAutoscalingPolicyScaleDownControlPtrInput `pulumi:"scaleDownControl"` // Defines scale in controls to reduce the risk of response latency // and outages due to abrupt scale-in events @@ -256,9 +250,6 @@ func (o AutoscalarAutoscalingPolicyOutput) Mode() pulumi.StringPtrOutput { return o.ApplyT(func(v AutoscalarAutoscalingPolicy) *string { return v.Mode }).(pulumi.StringPtrOutput) } -// Defines scale down controls to reduce the risk of response latency -// and outages due to abrupt scale-in events -// Structure is documented below. func (o AutoscalarAutoscalingPolicyOutput) ScaleDownControl() AutoscalarAutoscalingPolicyScaleDownControlPtrOutput { return o.ApplyT(func(v AutoscalarAutoscalingPolicy) *AutoscalarAutoscalingPolicyScaleDownControl { return v.ScaleDownControl @@ -397,9 +388,6 @@ func (o AutoscalarAutoscalingPolicyPtrOutput) Mode() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } -// Defines scale down controls to reduce the risk of response latency -// and outages due to abrupt scale-in events -// Structure is documented below. func (o AutoscalarAutoscalingPolicyPtrOutput) ScaleDownControl() AutoscalarAutoscalingPolicyScaleDownControlPtrOutput { return o.ApplyT(func(v *AutoscalarAutoscalingPolicy) *AutoscalarAutoscalingPolicyScaleDownControl { if v == nil { @@ -782,52 +770,11 @@ func (o AutoscalarAutoscalingPolicyLoadBalancingUtilizationPtrOutput) Target() p } type AutoscalarAutoscalingPolicyMetric struct { - // A filter string to be used as the filter string for - // a Stackdriver Monitoring TimeSeries.list API call. - // This filter is used to select a specific TimeSeries for - // the purpose of autoscaling and to determine whether the metric - // is exporting per-instance or per-group data. - // You can only use the AND operator for joining selectors. - // You can only use direct equality comparison operator (=) without - // any functions for each selector. - // You can specify the metric in both the filter string and in the - // metric field. However, if specified in both places, the metric must - // be identical. - // The monitored resource type determines what kind of values are - // expected for the metric. If it is a gce_instance, the autoscaler - // expects the metric to include a separate TimeSeries for each - // instance in a group. In such a case, you cannot filter on resource - // labels. - // If the resource type is any other value, the autoscaler expects - // this metric to contain values that apply to the entire autoscaled - // instance group and resource label filtering can be performed to - // point autoscaler at the correct TimeSeries to scale upon. - // This is called a per-group metric for the purpose of autoscaling. - // If not specified, the type defaults to gce_instance. - // You should provide a filter that is selective enough to pick just - // one TimeSeries for the autoscaled group or for each of the instances - // (if you are using gceInstance resource type). If multiple - // TimeSeries are returned upon the query execution, the autoscaler - // will sum their respective values to obtain its scaling value. Filter *string `pulumi:"filter"` // The identifier (type) of the Stackdriver Monitoring metric. // The metric cannot have negative values. // The metric must have a value type of INT64 or DOUBLE. - Name string `pulumi:"name"` - // If scaling is based on a per-group metric value that represents the - // total amount of work to be done or resource usage, set this value to - // an amount assigned for a single instance of the scaled group. - // The autoscaler will keep the number of instances proportional to the - // value of this metric, the metric itself should not change value due - // to group resizing. - // For example, a good metric to use with the target is - // `pubsub.googleapis.com/subscription/num_undelivered_messages` - // or a custom metric exporting the total number of requests coming to - // your instances. - // A bad example would be a metric exporting an average or median - // latency, since this value can't include a chunk assignable to a - // single instance, it could be better used with utilizationTarget - // instead. + Name string `pulumi:"name"` SingleInstanceAssignment *float64 `pulumi:"singleInstanceAssignment"` // The target value of the metric that autoscaler should // maintain. This must be a positive value. A utilization @@ -856,52 +803,11 @@ type AutoscalarAutoscalingPolicyMetricInput interface { } type AutoscalarAutoscalingPolicyMetricArgs struct { - // A filter string to be used as the filter string for - // a Stackdriver Monitoring TimeSeries.list API call. - // This filter is used to select a specific TimeSeries for - // the purpose of autoscaling and to determine whether the metric - // is exporting per-instance or per-group data. - // You can only use the AND operator for joining selectors. - // You can only use direct equality comparison operator (=) without - // any functions for each selector. - // You can specify the metric in both the filter string and in the - // metric field. However, if specified in both places, the metric must - // be identical. - // The monitored resource type determines what kind of values are - // expected for the metric. If it is a gce_instance, the autoscaler - // expects the metric to include a separate TimeSeries for each - // instance in a group. In such a case, you cannot filter on resource - // labels. - // If the resource type is any other value, the autoscaler expects - // this metric to contain values that apply to the entire autoscaled - // instance group and resource label filtering can be performed to - // point autoscaler at the correct TimeSeries to scale upon. - // This is called a per-group metric for the purpose of autoscaling. - // If not specified, the type defaults to gce_instance. - // You should provide a filter that is selective enough to pick just - // one TimeSeries for the autoscaled group or for each of the instances - // (if you are using gceInstance resource type). If multiple - // TimeSeries are returned upon the query execution, the autoscaler - // will sum their respective values to obtain its scaling value. Filter pulumi.StringPtrInput `pulumi:"filter"` // The identifier (type) of the Stackdriver Monitoring metric. // The metric cannot have negative values. // The metric must have a value type of INT64 or DOUBLE. - Name pulumi.StringInput `pulumi:"name"` - // If scaling is based on a per-group metric value that represents the - // total amount of work to be done or resource usage, set this value to - // an amount assigned for a single instance of the scaled group. - // The autoscaler will keep the number of instances proportional to the - // value of this metric, the metric itself should not change value due - // to group resizing. - // For example, a good metric to use with the target is - // `pubsub.googleapis.com/subscription/num_undelivered_messages` - // or a custom metric exporting the total number of requests coming to - // your instances. - // A bad example would be a metric exporting an average or median - // latency, since this value can't include a chunk assignable to a - // single instance, it could be better used with utilizationTarget - // instead. + Name pulumi.StringInput `pulumi:"name"` SingleInstanceAssignment pulumi.Float64PtrInput `pulumi:"singleInstanceAssignment"` // The target value of the metric that autoscaler should // maintain. This must be a positive value. A utilization @@ -969,33 +875,6 @@ func (o AutoscalarAutoscalingPolicyMetricOutput) ToAutoscalarAutoscalingPolicyMe return o } -// A filter string to be used as the filter string for -// a Stackdriver Monitoring TimeSeries.list API call. -// This filter is used to select a specific TimeSeries for -// the purpose of autoscaling and to determine whether the metric -// is exporting per-instance or per-group data. -// You can only use the AND operator for joining selectors. -// You can only use direct equality comparison operator (=) without -// any functions for each selector. -// You can specify the metric in both the filter string and in the -// metric field. However, if specified in both places, the metric must -// be identical. -// The monitored resource type determines what kind of values are -// expected for the metric. If it is a gce_instance, the autoscaler -// expects the metric to include a separate TimeSeries for each -// instance in a group. In such a case, you cannot filter on resource -// labels. -// If the resource type is any other value, the autoscaler expects -// this metric to contain values that apply to the entire autoscaled -// instance group and resource label filtering can be performed to -// point autoscaler at the correct TimeSeries to scale upon. -// This is called a per-group metric for the purpose of autoscaling. -// If not specified, the type defaults to gce_instance. -// You should provide a filter that is selective enough to pick just -// one TimeSeries for the autoscaled group or for each of the instances -// (if you are using gceInstance resource type). If multiple -// TimeSeries are returned upon the query execution, the autoscaler -// will sum their respective values to obtain its scaling value. func (o AutoscalarAutoscalingPolicyMetricOutput) Filter() pulumi.StringPtrOutput { return o.ApplyT(func(v AutoscalarAutoscalingPolicyMetric) *string { return v.Filter }).(pulumi.StringPtrOutput) } @@ -1007,20 +886,6 @@ func (o AutoscalarAutoscalingPolicyMetricOutput) Name() pulumi.StringOutput { return o.ApplyT(func(v AutoscalarAutoscalingPolicyMetric) string { return v.Name }).(pulumi.StringOutput) } -// If scaling is based on a per-group metric value that represents the -// total amount of work to be done or resource usage, set this value to -// an amount assigned for a single instance of the scaled group. -// The autoscaler will keep the number of instances proportional to the -// value of this metric, the metric itself should not change value due -// to group resizing. -// For example, a good metric to use with the target is -// `pubsub.googleapis.com/subscription/num_undelivered_messages` -// or a custom metric exporting the total number of requests coming to -// your instances. -// A bad example would be a metric exporting an average or median -// latency, since this value can't include a chunk assignable to a -// single instance, it could be better used with utilizationTarget -// instead. func (o AutoscalarAutoscalingPolicyMetricOutput) SingleInstanceAssignment() pulumi.Float64PtrOutput { return o.ApplyT(func(v AutoscalarAutoscalingPolicyMetric) *float64 { return v.SingleInstanceAssignment }).(pulumi.Float64PtrOutput) } @@ -1910,10 +1775,7 @@ type AutoscalerAutoscalingPolicy struct { // Defines operating mode for this policy. // Default value is `ON`. // Possible values are `OFF`, `ONLY_UP`, and `ON`. - Mode *string `pulumi:"mode"` - // Defines scale down controls to reduce the risk of response latency - // and outages due to abrupt scale-in events - // Structure is documented below. + Mode *string `pulumi:"mode"` ScaleDownControl *AutoscalerAutoscalingPolicyScaleDownControl `pulumi:"scaleDownControl"` // Defines scale in controls to reduce the risk of response latency // and outages due to abrupt scale-in events @@ -1970,10 +1832,7 @@ type AutoscalerAutoscalingPolicyArgs struct { // Defines operating mode for this policy. // Default value is `ON`. // Possible values are `OFF`, `ONLY_UP`, and `ON`. - Mode pulumi.StringPtrInput `pulumi:"mode"` - // Defines scale down controls to reduce the risk of response latency - // and outages due to abrupt scale-in events - // Structure is documented below. + Mode pulumi.StringPtrInput `pulumi:"mode"` ScaleDownControl AutoscalerAutoscalingPolicyScaleDownControlPtrInput `pulumi:"scaleDownControl"` // Defines scale in controls to reduce the risk of response latency // and outages due to abrupt scale-in events @@ -2121,9 +1980,6 @@ func (o AutoscalerAutoscalingPolicyOutput) Mode() pulumi.StringPtrOutput { return o.ApplyT(func(v AutoscalerAutoscalingPolicy) *string { return v.Mode }).(pulumi.StringPtrOutput) } -// Defines scale down controls to reduce the risk of response latency -// and outages due to abrupt scale-in events -// Structure is documented below. func (o AutoscalerAutoscalingPolicyOutput) ScaleDownControl() AutoscalerAutoscalingPolicyScaleDownControlPtrOutput { return o.ApplyT(func(v AutoscalerAutoscalingPolicy) *AutoscalerAutoscalingPolicyScaleDownControl { return v.ScaleDownControl @@ -2262,9 +2118,6 @@ func (o AutoscalerAutoscalingPolicyPtrOutput) Mode() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } -// Defines scale down controls to reduce the risk of response latency -// and outages due to abrupt scale-in events -// Structure is documented below. func (o AutoscalerAutoscalingPolicyPtrOutput) ScaleDownControl() AutoscalerAutoscalingPolicyScaleDownControlPtrOutput { return o.ApplyT(func(v *AutoscalerAutoscalingPolicy) *AutoscalerAutoscalingPolicyScaleDownControl { if v == nil { @@ -2647,52 +2500,11 @@ func (o AutoscalerAutoscalingPolicyLoadBalancingUtilizationPtrOutput) Target() p } type AutoscalerAutoscalingPolicyMetric struct { - // A filter string to be used as the filter string for - // a Stackdriver Monitoring TimeSeries.list API call. - // This filter is used to select a specific TimeSeries for - // the purpose of autoscaling and to determine whether the metric - // is exporting per-instance or per-group data. - // You can only use the AND operator for joining selectors. - // You can only use direct equality comparison operator (=) without - // any functions for each selector. - // You can specify the metric in both the filter string and in the - // metric field. However, if specified in both places, the metric must - // be identical. - // The monitored resource type determines what kind of values are - // expected for the metric. If it is a gce_instance, the autoscaler - // expects the metric to include a separate TimeSeries for each - // instance in a group. In such a case, you cannot filter on resource - // labels. - // If the resource type is any other value, the autoscaler expects - // this metric to contain values that apply to the entire autoscaled - // instance group and resource label filtering can be performed to - // point autoscaler at the correct TimeSeries to scale upon. - // This is called a per-group metric for the purpose of autoscaling. - // If not specified, the type defaults to gce_instance. - // You should provide a filter that is selective enough to pick just - // one TimeSeries for the autoscaled group or for each of the instances - // (if you are using gceInstance resource type). If multiple - // TimeSeries are returned upon the query execution, the autoscaler - // will sum their respective values to obtain its scaling value. Filter *string `pulumi:"filter"` // The identifier (type) of the Stackdriver Monitoring metric. // The metric cannot have negative values. // The metric must have a value type of INT64 or DOUBLE. - Name string `pulumi:"name"` - // If scaling is based on a per-group metric value that represents the - // total amount of work to be done or resource usage, set this value to - // an amount assigned for a single instance of the scaled group. - // The autoscaler will keep the number of instances proportional to the - // value of this metric, the metric itself should not change value due - // to group resizing. - // For example, a good metric to use with the target is - // `pubsub.googleapis.com/subscription/num_undelivered_messages` - // or a custom metric exporting the total number of requests coming to - // your instances. - // A bad example would be a metric exporting an average or median - // latency, since this value can't include a chunk assignable to a - // single instance, it could be better used with utilizationTarget - // instead. + Name string `pulumi:"name"` SingleInstanceAssignment *float64 `pulumi:"singleInstanceAssignment"` // The target value of the metric that autoscaler should // maintain. This must be a positive value. A utilization @@ -2721,52 +2533,11 @@ type AutoscalerAutoscalingPolicyMetricInput interface { } type AutoscalerAutoscalingPolicyMetricArgs struct { - // A filter string to be used as the filter string for - // a Stackdriver Monitoring TimeSeries.list API call. - // This filter is used to select a specific TimeSeries for - // the purpose of autoscaling and to determine whether the metric - // is exporting per-instance or per-group data. - // You can only use the AND operator for joining selectors. - // You can only use direct equality comparison operator (=) without - // any functions for each selector. - // You can specify the metric in both the filter string and in the - // metric field. However, if specified in both places, the metric must - // be identical. - // The monitored resource type determines what kind of values are - // expected for the metric. If it is a gce_instance, the autoscaler - // expects the metric to include a separate TimeSeries for each - // instance in a group. In such a case, you cannot filter on resource - // labels. - // If the resource type is any other value, the autoscaler expects - // this metric to contain values that apply to the entire autoscaled - // instance group and resource label filtering can be performed to - // point autoscaler at the correct TimeSeries to scale upon. - // This is called a per-group metric for the purpose of autoscaling. - // If not specified, the type defaults to gce_instance. - // You should provide a filter that is selective enough to pick just - // one TimeSeries for the autoscaled group or for each of the instances - // (if you are using gceInstance resource type). If multiple - // TimeSeries are returned upon the query execution, the autoscaler - // will sum their respective values to obtain its scaling value. Filter pulumi.StringPtrInput `pulumi:"filter"` // The identifier (type) of the Stackdriver Monitoring metric. // The metric cannot have negative values. // The metric must have a value type of INT64 or DOUBLE. - Name pulumi.StringInput `pulumi:"name"` - // If scaling is based on a per-group metric value that represents the - // total amount of work to be done or resource usage, set this value to - // an amount assigned for a single instance of the scaled group. - // The autoscaler will keep the number of instances proportional to the - // value of this metric, the metric itself should not change value due - // to group resizing. - // For example, a good metric to use with the target is - // `pubsub.googleapis.com/subscription/num_undelivered_messages` - // or a custom metric exporting the total number of requests coming to - // your instances. - // A bad example would be a metric exporting an average or median - // latency, since this value can't include a chunk assignable to a - // single instance, it could be better used with utilizationTarget - // instead. + Name pulumi.StringInput `pulumi:"name"` SingleInstanceAssignment pulumi.Float64PtrInput `pulumi:"singleInstanceAssignment"` // The target value of the metric that autoscaler should // maintain. This must be a positive value. A utilization @@ -2834,33 +2605,6 @@ func (o AutoscalerAutoscalingPolicyMetricOutput) ToAutoscalerAutoscalingPolicyMe return o } -// A filter string to be used as the filter string for -// a Stackdriver Monitoring TimeSeries.list API call. -// This filter is used to select a specific TimeSeries for -// the purpose of autoscaling and to determine whether the metric -// is exporting per-instance or per-group data. -// You can only use the AND operator for joining selectors. -// You can only use direct equality comparison operator (=) without -// any functions for each selector. -// You can specify the metric in both the filter string and in the -// metric field. However, if specified in both places, the metric must -// be identical. -// The monitored resource type determines what kind of values are -// expected for the metric. If it is a gce_instance, the autoscaler -// expects the metric to include a separate TimeSeries for each -// instance in a group. In such a case, you cannot filter on resource -// labels. -// If the resource type is any other value, the autoscaler expects -// this metric to contain values that apply to the entire autoscaled -// instance group and resource label filtering can be performed to -// point autoscaler at the correct TimeSeries to scale upon. -// This is called a per-group metric for the purpose of autoscaling. -// If not specified, the type defaults to gce_instance. -// You should provide a filter that is selective enough to pick just -// one TimeSeries for the autoscaled group or for each of the instances -// (if you are using gceInstance resource type). If multiple -// TimeSeries are returned upon the query execution, the autoscaler -// will sum their respective values to obtain its scaling value. func (o AutoscalerAutoscalingPolicyMetricOutput) Filter() pulumi.StringPtrOutput { return o.ApplyT(func(v AutoscalerAutoscalingPolicyMetric) *string { return v.Filter }).(pulumi.StringPtrOutput) } @@ -2872,20 +2616,6 @@ func (o AutoscalerAutoscalingPolicyMetricOutput) Name() pulumi.StringOutput { return o.ApplyT(func(v AutoscalerAutoscalingPolicyMetric) string { return v.Name }).(pulumi.StringOutput) } -// If scaling is based on a per-group metric value that represents the -// total amount of work to be done or resource usage, set this value to -// an amount assigned for a single instance of the scaled group. -// The autoscaler will keep the number of instances proportional to the -// value of this metric, the metric itself should not change value due -// to group resizing. -// For example, a good metric to use with the target is -// `pubsub.googleapis.com/subscription/num_undelivered_messages` -// or a custom metric exporting the total number of requests coming to -// your instances. -// A bad example would be a metric exporting an average or median -// latency, since this value can't include a chunk assignable to a -// single instance, it could be better used with utilizationTarget -// instead. func (o AutoscalerAutoscalingPolicyMetricOutput) SingleInstanceAssignment() pulumi.Float64PtrOutput { return o.ApplyT(func(v AutoscalerAutoscalingPolicyMetric) *float64 { return v.SingleInstanceAssignment }).(pulumi.Float64PtrOutput) } @@ -5937,8 +5667,6 @@ func (o BackendServiceCdnPolicyNegativeCachingPolicyArrayOutput) Index(i pulumi. } type BackendServiceCircuitBreakers struct { - // The timeout for new network connections to hosts. - // Structure is documented below. ConnectTimeout *BackendServiceCircuitBreakersConnectTimeout `pulumi:"connectTimeout"` // The maximum number of connections to the backend cluster. // Defaults to 1024. @@ -5971,8 +5699,6 @@ type BackendServiceCircuitBreakersInput interface { } type BackendServiceCircuitBreakersArgs struct { - // The timeout for new network connections to hosts. - // Structure is documented below. ConnectTimeout BackendServiceCircuitBreakersConnectTimeoutPtrInput `pulumi:"connectTimeout"` // The maximum number of connections to the backend cluster. // Defaults to 1024. @@ -6070,8 +5796,6 @@ func (o BackendServiceCircuitBreakersOutput) ToBackendServiceCircuitBreakersPtrO }).(BackendServiceCircuitBreakersPtrOutput) } -// The timeout for new network connections to hosts. -// Structure is documented below. func (o BackendServiceCircuitBreakersOutput) ConnectTimeout() BackendServiceCircuitBreakersConnectTimeoutPtrOutput { return o.ApplyT(func(v BackendServiceCircuitBreakers) *BackendServiceCircuitBreakersConnectTimeout { return v.ConnectTimeout @@ -6134,8 +5858,6 @@ func (o BackendServiceCircuitBreakersPtrOutput) Elem() BackendServiceCircuitBrea }).(BackendServiceCircuitBreakersOutput) } -// The timeout for new network connections to hosts. -// Structure is documented below. func (o BackendServiceCircuitBreakersPtrOutput) ConnectTimeout() BackendServiceCircuitBreakersConnectTimeoutPtrOutput { return o.ApplyT(func(v *BackendServiceCircuitBreakers) *BackendServiceCircuitBreakersConnectTimeout { if v == nil { @@ -7475,6 +7197,472 @@ func (o BackendServiceIapPtrOutput) Oauth2ClientSecretSha256() pulumi.StringPtrO }).(pulumi.StringPtrOutput) } +type BackendServiceLocalityLbPolicy struct { + // The configuration for a custom policy implemented by the user and + // deployed with the client. + // Structure is documented below. + CustomPolicy *BackendServiceLocalityLbPolicyCustomPolicy `pulumi:"customPolicy"` + // The configuration for a built-in load balancing policy. + // Structure is documented below. + Policy *BackendServiceLocalityLbPolicyPolicy `pulumi:"policy"` +} + +// BackendServiceLocalityLbPolicyInput is an input type that accepts BackendServiceLocalityLbPolicyArgs and BackendServiceLocalityLbPolicyOutput values. +// You can construct a concrete instance of `BackendServiceLocalityLbPolicyInput` via: +// +// BackendServiceLocalityLbPolicyArgs{...} +type BackendServiceLocalityLbPolicyInput interface { + pulumi.Input + + ToBackendServiceLocalityLbPolicyOutput() BackendServiceLocalityLbPolicyOutput + ToBackendServiceLocalityLbPolicyOutputWithContext(context.Context) BackendServiceLocalityLbPolicyOutput +} + +type BackendServiceLocalityLbPolicyArgs struct { + // The configuration for a custom policy implemented by the user and + // deployed with the client. + // Structure is documented below. + CustomPolicy BackendServiceLocalityLbPolicyCustomPolicyPtrInput `pulumi:"customPolicy"` + // The configuration for a built-in load balancing policy. + // Structure is documented below. + Policy BackendServiceLocalityLbPolicyPolicyPtrInput `pulumi:"policy"` +} + +func (BackendServiceLocalityLbPolicyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*BackendServiceLocalityLbPolicy)(nil)).Elem() +} + +func (i BackendServiceLocalityLbPolicyArgs) ToBackendServiceLocalityLbPolicyOutput() BackendServiceLocalityLbPolicyOutput { + return i.ToBackendServiceLocalityLbPolicyOutputWithContext(context.Background()) +} + +func (i BackendServiceLocalityLbPolicyArgs) ToBackendServiceLocalityLbPolicyOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyOutput { + return pulumi.ToOutputWithContext(ctx, i).(BackendServiceLocalityLbPolicyOutput) +} + +// BackendServiceLocalityLbPolicyArrayInput is an input type that accepts BackendServiceLocalityLbPolicyArray and BackendServiceLocalityLbPolicyArrayOutput values. +// You can construct a concrete instance of `BackendServiceLocalityLbPolicyArrayInput` via: +// +// BackendServiceLocalityLbPolicyArray{ BackendServiceLocalityLbPolicyArgs{...} } +type BackendServiceLocalityLbPolicyArrayInput interface { + pulumi.Input + + ToBackendServiceLocalityLbPolicyArrayOutput() BackendServiceLocalityLbPolicyArrayOutput + ToBackendServiceLocalityLbPolicyArrayOutputWithContext(context.Context) BackendServiceLocalityLbPolicyArrayOutput +} + +type BackendServiceLocalityLbPolicyArray []BackendServiceLocalityLbPolicyInput + +func (BackendServiceLocalityLbPolicyArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]BackendServiceLocalityLbPolicy)(nil)).Elem() +} + +func (i BackendServiceLocalityLbPolicyArray) ToBackendServiceLocalityLbPolicyArrayOutput() BackendServiceLocalityLbPolicyArrayOutput { + return i.ToBackendServiceLocalityLbPolicyArrayOutputWithContext(context.Background()) +} + +func (i BackendServiceLocalityLbPolicyArray) ToBackendServiceLocalityLbPolicyArrayOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(BackendServiceLocalityLbPolicyArrayOutput) +} + +type BackendServiceLocalityLbPolicyOutput struct{ *pulumi.OutputState } + +func (BackendServiceLocalityLbPolicyOutput) ElementType() reflect.Type { + return reflect.TypeOf((*BackendServiceLocalityLbPolicy)(nil)).Elem() +} + +func (o BackendServiceLocalityLbPolicyOutput) ToBackendServiceLocalityLbPolicyOutput() BackendServiceLocalityLbPolicyOutput { + return o +} + +func (o BackendServiceLocalityLbPolicyOutput) ToBackendServiceLocalityLbPolicyOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyOutput { + return o +} + +// The configuration for a custom policy implemented by the user and +// deployed with the client. +// Structure is documented below. +func (o BackendServiceLocalityLbPolicyOutput) CustomPolicy() BackendServiceLocalityLbPolicyCustomPolicyPtrOutput { + return o.ApplyT(func(v BackendServiceLocalityLbPolicy) *BackendServiceLocalityLbPolicyCustomPolicy { + return v.CustomPolicy + }).(BackendServiceLocalityLbPolicyCustomPolicyPtrOutput) +} + +// The configuration for a built-in load balancing policy. +// Structure is documented below. +func (o BackendServiceLocalityLbPolicyOutput) Policy() BackendServiceLocalityLbPolicyPolicyPtrOutput { + return o.ApplyT(func(v BackendServiceLocalityLbPolicy) *BackendServiceLocalityLbPolicyPolicy { return v.Policy }).(BackendServiceLocalityLbPolicyPolicyPtrOutput) +} + +type BackendServiceLocalityLbPolicyArrayOutput struct{ *pulumi.OutputState } + +func (BackendServiceLocalityLbPolicyArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]BackendServiceLocalityLbPolicy)(nil)).Elem() +} + +func (o BackendServiceLocalityLbPolicyArrayOutput) ToBackendServiceLocalityLbPolicyArrayOutput() BackendServiceLocalityLbPolicyArrayOutput { + return o +} + +func (o BackendServiceLocalityLbPolicyArrayOutput) ToBackendServiceLocalityLbPolicyArrayOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyArrayOutput { + return o +} + +func (o BackendServiceLocalityLbPolicyArrayOutput) Index(i pulumi.IntInput) BackendServiceLocalityLbPolicyOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) BackendServiceLocalityLbPolicy { + return vs[0].([]BackendServiceLocalityLbPolicy)[vs[1].(int)] + }).(BackendServiceLocalityLbPolicyOutput) +} + +type BackendServiceLocalityLbPolicyCustomPolicy struct { + // An optional, arbitrary JSON object with configuration data, understood + // by a locally installed custom policy implementation. + Data *string `pulumi:"data"` + // Identifies the custom policy. + // The value should match the type the custom implementation is registered + // with on the gRPC clients. It should follow protocol buffer + // message naming conventions and include the full path (e.g. + // myorg.CustomLbPolicy). The maximum length is 256 characters. + // Note that specifying the same custom policy more than once for a + // backend is not a valid configuration and will be rejected. + Name string `pulumi:"name"` +} + +// BackendServiceLocalityLbPolicyCustomPolicyInput is an input type that accepts BackendServiceLocalityLbPolicyCustomPolicyArgs and BackendServiceLocalityLbPolicyCustomPolicyOutput values. +// You can construct a concrete instance of `BackendServiceLocalityLbPolicyCustomPolicyInput` via: +// +// BackendServiceLocalityLbPolicyCustomPolicyArgs{...} +type BackendServiceLocalityLbPolicyCustomPolicyInput interface { + pulumi.Input + + ToBackendServiceLocalityLbPolicyCustomPolicyOutput() BackendServiceLocalityLbPolicyCustomPolicyOutput + ToBackendServiceLocalityLbPolicyCustomPolicyOutputWithContext(context.Context) BackendServiceLocalityLbPolicyCustomPolicyOutput +} + +type BackendServiceLocalityLbPolicyCustomPolicyArgs struct { + // An optional, arbitrary JSON object with configuration data, understood + // by a locally installed custom policy implementation. + Data pulumi.StringPtrInput `pulumi:"data"` + // Identifies the custom policy. + // The value should match the type the custom implementation is registered + // with on the gRPC clients. It should follow protocol buffer + // message naming conventions and include the full path (e.g. + // myorg.CustomLbPolicy). The maximum length is 256 characters. + // Note that specifying the same custom policy more than once for a + // backend is not a valid configuration and will be rejected. + Name pulumi.StringInput `pulumi:"name"` +} + +func (BackendServiceLocalityLbPolicyCustomPolicyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*BackendServiceLocalityLbPolicyCustomPolicy)(nil)).Elem() +} + +func (i BackendServiceLocalityLbPolicyCustomPolicyArgs) ToBackendServiceLocalityLbPolicyCustomPolicyOutput() BackendServiceLocalityLbPolicyCustomPolicyOutput { + return i.ToBackendServiceLocalityLbPolicyCustomPolicyOutputWithContext(context.Background()) +} + +func (i BackendServiceLocalityLbPolicyCustomPolicyArgs) ToBackendServiceLocalityLbPolicyCustomPolicyOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyCustomPolicyOutput { + return pulumi.ToOutputWithContext(ctx, i).(BackendServiceLocalityLbPolicyCustomPolicyOutput) +} + +func (i BackendServiceLocalityLbPolicyCustomPolicyArgs) ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutput() BackendServiceLocalityLbPolicyCustomPolicyPtrOutput { + return i.ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutputWithContext(context.Background()) +} + +func (i BackendServiceLocalityLbPolicyCustomPolicyArgs) ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyCustomPolicyPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(BackendServiceLocalityLbPolicyCustomPolicyOutput).ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutputWithContext(ctx) +} + +// BackendServiceLocalityLbPolicyCustomPolicyPtrInput is an input type that accepts BackendServiceLocalityLbPolicyCustomPolicyArgs, BackendServiceLocalityLbPolicyCustomPolicyPtr and BackendServiceLocalityLbPolicyCustomPolicyPtrOutput values. +// You can construct a concrete instance of `BackendServiceLocalityLbPolicyCustomPolicyPtrInput` via: +// +// BackendServiceLocalityLbPolicyCustomPolicyArgs{...} +// +// or: +// +// nil +type BackendServiceLocalityLbPolicyCustomPolicyPtrInput interface { + pulumi.Input + + ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutput() BackendServiceLocalityLbPolicyCustomPolicyPtrOutput + ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutputWithContext(context.Context) BackendServiceLocalityLbPolicyCustomPolicyPtrOutput +} + +type backendServiceLocalityLbPolicyCustomPolicyPtrType BackendServiceLocalityLbPolicyCustomPolicyArgs + +func BackendServiceLocalityLbPolicyCustomPolicyPtr(v *BackendServiceLocalityLbPolicyCustomPolicyArgs) BackendServiceLocalityLbPolicyCustomPolicyPtrInput { + return (*backendServiceLocalityLbPolicyCustomPolicyPtrType)(v) +} + +func (*backendServiceLocalityLbPolicyCustomPolicyPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**BackendServiceLocalityLbPolicyCustomPolicy)(nil)).Elem() +} + +func (i *backendServiceLocalityLbPolicyCustomPolicyPtrType) ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutput() BackendServiceLocalityLbPolicyCustomPolicyPtrOutput { + return i.ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutputWithContext(context.Background()) +} + +func (i *backendServiceLocalityLbPolicyCustomPolicyPtrType) ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyCustomPolicyPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(BackendServiceLocalityLbPolicyCustomPolicyPtrOutput) +} + +type BackendServiceLocalityLbPolicyCustomPolicyOutput struct{ *pulumi.OutputState } + +func (BackendServiceLocalityLbPolicyCustomPolicyOutput) ElementType() reflect.Type { + return reflect.TypeOf((*BackendServiceLocalityLbPolicyCustomPolicy)(nil)).Elem() +} + +func (o BackendServiceLocalityLbPolicyCustomPolicyOutput) ToBackendServiceLocalityLbPolicyCustomPolicyOutput() BackendServiceLocalityLbPolicyCustomPolicyOutput { + return o +} + +func (o BackendServiceLocalityLbPolicyCustomPolicyOutput) ToBackendServiceLocalityLbPolicyCustomPolicyOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyCustomPolicyOutput { + return o +} + +func (o BackendServiceLocalityLbPolicyCustomPolicyOutput) ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutput() BackendServiceLocalityLbPolicyCustomPolicyPtrOutput { + return o.ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutputWithContext(context.Background()) +} + +func (o BackendServiceLocalityLbPolicyCustomPolicyOutput) ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyCustomPolicyPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v BackendServiceLocalityLbPolicyCustomPolicy) *BackendServiceLocalityLbPolicyCustomPolicy { + return &v + }).(BackendServiceLocalityLbPolicyCustomPolicyPtrOutput) +} + +// An optional, arbitrary JSON object with configuration data, understood +// by a locally installed custom policy implementation. +func (o BackendServiceLocalityLbPolicyCustomPolicyOutput) Data() pulumi.StringPtrOutput { + return o.ApplyT(func(v BackendServiceLocalityLbPolicyCustomPolicy) *string { return v.Data }).(pulumi.StringPtrOutput) +} + +// Identifies the custom policy. +// The value should match the type the custom implementation is registered +// with on the gRPC clients. It should follow protocol buffer +// message naming conventions and include the full path (e.g. +// myorg.CustomLbPolicy). The maximum length is 256 characters. +// Note that specifying the same custom policy more than once for a +// backend is not a valid configuration and will be rejected. +func (o BackendServiceLocalityLbPolicyCustomPolicyOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v BackendServiceLocalityLbPolicyCustomPolicy) string { return v.Name }).(pulumi.StringOutput) +} + +type BackendServiceLocalityLbPolicyCustomPolicyPtrOutput struct{ *pulumi.OutputState } + +func (BackendServiceLocalityLbPolicyCustomPolicyPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**BackendServiceLocalityLbPolicyCustomPolicy)(nil)).Elem() +} + +func (o BackendServiceLocalityLbPolicyCustomPolicyPtrOutput) ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutput() BackendServiceLocalityLbPolicyCustomPolicyPtrOutput { + return o +} + +func (o BackendServiceLocalityLbPolicyCustomPolicyPtrOutput) ToBackendServiceLocalityLbPolicyCustomPolicyPtrOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyCustomPolicyPtrOutput { + return o +} + +func (o BackendServiceLocalityLbPolicyCustomPolicyPtrOutput) Elem() BackendServiceLocalityLbPolicyCustomPolicyOutput { + return o.ApplyT(func(v *BackendServiceLocalityLbPolicyCustomPolicy) BackendServiceLocalityLbPolicyCustomPolicy { + if v != nil { + return *v + } + var ret BackendServiceLocalityLbPolicyCustomPolicy + return ret + }).(BackendServiceLocalityLbPolicyCustomPolicyOutput) +} + +// An optional, arbitrary JSON object with configuration data, understood +// by a locally installed custom policy implementation. +func (o BackendServiceLocalityLbPolicyCustomPolicyPtrOutput) Data() pulumi.StringPtrOutput { + return o.ApplyT(func(v *BackendServiceLocalityLbPolicyCustomPolicy) *string { + if v == nil { + return nil + } + return v.Data + }).(pulumi.StringPtrOutput) +} + +// Identifies the custom policy. +// The value should match the type the custom implementation is registered +// with on the gRPC clients. It should follow protocol buffer +// message naming conventions and include the full path (e.g. +// myorg.CustomLbPolicy). The maximum length is 256 characters. +// Note that specifying the same custom policy more than once for a +// backend is not a valid configuration and will be rejected. +func (o BackendServiceLocalityLbPolicyCustomPolicyPtrOutput) Name() pulumi.StringPtrOutput { + return o.ApplyT(func(v *BackendServiceLocalityLbPolicyCustomPolicy) *string { + if v == nil { + return nil + } + return &v.Name + }).(pulumi.StringPtrOutput) +} + +type BackendServiceLocalityLbPolicyPolicy struct { + // The name of a locality load balancer policy to be used. The value + // should be one of the predefined ones as supported by localityLbPolicy, + // although at the moment only ROUND_ROBIN is supported. + // This field should only be populated when the customPolicy field is not + // used. + // Note that specifying the same policy more than once for a backend is + // not a valid configuration and will be rejected. + // The possible values are: + Name string `pulumi:"name"` +} + +// BackendServiceLocalityLbPolicyPolicyInput is an input type that accepts BackendServiceLocalityLbPolicyPolicyArgs and BackendServiceLocalityLbPolicyPolicyOutput values. +// You can construct a concrete instance of `BackendServiceLocalityLbPolicyPolicyInput` via: +// +// BackendServiceLocalityLbPolicyPolicyArgs{...} +type BackendServiceLocalityLbPolicyPolicyInput interface { + pulumi.Input + + ToBackendServiceLocalityLbPolicyPolicyOutput() BackendServiceLocalityLbPolicyPolicyOutput + ToBackendServiceLocalityLbPolicyPolicyOutputWithContext(context.Context) BackendServiceLocalityLbPolicyPolicyOutput +} + +type BackendServiceLocalityLbPolicyPolicyArgs struct { + // The name of a locality load balancer policy to be used. The value + // should be one of the predefined ones as supported by localityLbPolicy, + // although at the moment only ROUND_ROBIN is supported. + // This field should only be populated when the customPolicy field is not + // used. + // Note that specifying the same policy more than once for a backend is + // not a valid configuration and will be rejected. + // The possible values are: + Name pulumi.StringInput `pulumi:"name"` +} + +func (BackendServiceLocalityLbPolicyPolicyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*BackendServiceLocalityLbPolicyPolicy)(nil)).Elem() +} + +func (i BackendServiceLocalityLbPolicyPolicyArgs) ToBackendServiceLocalityLbPolicyPolicyOutput() BackendServiceLocalityLbPolicyPolicyOutput { + return i.ToBackendServiceLocalityLbPolicyPolicyOutputWithContext(context.Background()) +} + +func (i BackendServiceLocalityLbPolicyPolicyArgs) ToBackendServiceLocalityLbPolicyPolicyOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyPolicyOutput { + return pulumi.ToOutputWithContext(ctx, i).(BackendServiceLocalityLbPolicyPolicyOutput) +} + +func (i BackendServiceLocalityLbPolicyPolicyArgs) ToBackendServiceLocalityLbPolicyPolicyPtrOutput() BackendServiceLocalityLbPolicyPolicyPtrOutput { + return i.ToBackendServiceLocalityLbPolicyPolicyPtrOutputWithContext(context.Background()) +} + +func (i BackendServiceLocalityLbPolicyPolicyArgs) ToBackendServiceLocalityLbPolicyPolicyPtrOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyPolicyPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(BackendServiceLocalityLbPolicyPolicyOutput).ToBackendServiceLocalityLbPolicyPolicyPtrOutputWithContext(ctx) +} + +// BackendServiceLocalityLbPolicyPolicyPtrInput is an input type that accepts BackendServiceLocalityLbPolicyPolicyArgs, BackendServiceLocalityLbPolicyPolicyPtr and BackendServiceLocalityLbPolicyPolicyPtrOutput values. +// You can construct a concrete instance of `BackendServiceLocalityLbPolicyPolicyPtrInput` via: +// +// BackendServiceLocalityLbPolicyPolicyArgs{...} +// +// or: +// +// nil +type BackendServiceLocalityLbPolicyPolicyPtrInput interface { + pulumi.Input + + ToBackendServiceLocalityLbPolicyPolicyPtrOutput() BackendServiceLocalityLbPolicyPolicyPtrOutput + ToBackendServiceLocalityLbPolicyPolicyPtrOutputWithContext(context.Context) BackendServiceLocalityLbPolicyPolicyPtrOutput +} + +type backendServiceLocalityLbPolicyPolicyPtrType BackendServiceLocalityLbPolicyPolicyArgs + +func BackendServiceLocalityLbPolicyPolicyPtr(v *BackendServiceLocalityLbPolicyPolicyArgs) BackendServiceLocalityLbPolicyPolicyPtrInput { + return (*backendServiceLocalityLbPolicyPolicyPtrType)(v) +} + +func (*backendServiceLocalityLbPolicyPolicyPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**BackendServiceLocalityLbPolicyPolicy)(nil)).Elem() +} + +func (i *backendServiceLocalityLbPolicyPolicyPtrType) ToBackendServiceLocalityLbPolicyPolicyPtrOutput() BackendServiceLocalityLbPolicyPolicyPtrOutput { + return i.ToBackendServiceLocalityLbPolicyPolicyPtrOutputWithContext(context.Background()) +} + +func (i *backendServiceLocalityLbPolicyPolicyPtrType) ToBackendServiceLocalityLbPolicyPolicyPtrOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyPolicyPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(BackendServiceLocalityLbPolicyPolicyPtrOutput) +} + +type BackendServiceLocalityLbPolicyPolicyOutput struct{ *pulumi.OutputState } + +func (BackendServiceLocalityLbPolicyPolicyOutput) ElementType() reflect.Type { + return reflect.TypeOf((*BackendServiceLocalityLbPolicyPolicy)(nil)).Elem() +} + +func (o BackendServiceLocalityLbPolicyPolicyOutput) ToBackendServiceLocalityLbPolicyPolicyOutput() BackendServiceLocalityLbPolicyPolicyOutput { + return o +} + +func (o BackendServiceLocalityLbPolicyPolicyOutput) ToBackendServiceLocalityLbPolicyPolicyOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyPolicyOutput { + return o +} + +func (o BackendServiceLocalityLbPolicyPolicyOutput) ToBackendServiceLocalityLbPolicyPolicyPtrOutput() BackendServiceLocalityLbPolicyPolicyPtrOutput { + return o.ToBackendServiceLocalityLbPolicyPolicyPtrOutputWithContext(context.Background()) +} + +func (o BackendServiceLocalityLbPolicyPolicyOutput) ToBackendServiceLocalityLbPolicyPolicyPtrOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyPolicyPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v BackendServiceLocalityLbPolicyPolicy) *BackendServiceLocalityLbPolicyPolicy { + return &v + }).(BackendServiceLocalityLbPolicyPolicyPtrOutput) +} + +// The name of a locality load balancer policy to be used. The value +// should be one of the predefined ones as supported by localityLbPolicy, +// although at the moment only ROUND_ROBIN is supported. +// This field should only be populated when the customPolicy field is not +// used. +// Note that specifying the same policy more than once for a backend is +// not a valid configuration and will be rejected. +// The possible values are: +func (o BackendServiceLocalityLbPolicyPolicyOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v BackendServiceLocalityLbPolicyPolicy) string { return v.Name }).(pulumi.StringOutput) +} + +type BackendServiceLocalityLbPolicyPolicyPtrOutput struct{ *pulumi.OutputState } + +func (BackendServiceLocalityLbPolicyPolicyPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**BackendServiceLocalityLbPolicyPolicy)(nil)).Elem() +} + +func (o BackendServiceLocalityLbPolicyPolicyPtrOutput) ToBackendServiceLocalityLbPolicyPolicyPtrOutput() BackendServiceLocalityLbPolicyPolicyPtrOutput { + return o +} + +func (o BackendServiceLocalityLbPolicyPolicyPtrOutput) ToBackendServiceLocalityLbPolicyPolicyPtrOutputWithContext(ctx context.Context) BackendServiceLocalityLbPolicyPolicyPtrOutput { + return o +} + +func (o BackendServiceLocalityLbPolicyPolicyPtrOutput) Elem() BackendServiceLocalityLbPolicyPolicyOutput { + return o.ApplyT(func(v *BackendServiceLocalityLbPolicyPolicy) BackendServiceLocalityLbPolicyPolicy { + if v != nil { + return *v + } + var ret BackendServiceLocalityLbPolicyPolicy + return ret + }).(BackendServiceLocalityLbPolicyPolicyOutput) +} + +// The name of a locality load balancer policy to be used. The value +// should be one of the predefined ones as supported by localityLbPolicy, +// although at the moment only ROUND_ROBIN is supported. +// This field should only be populated when the customPolicy field is not +// used. +// Note that specifying the same policy more than once for a backend is +// not a valid configuration and will be rejected. +// The possible values are: +func (o BackendServiceLocalityLbPolicyPolicyPtrOutput) Name() pulumi.StringPtrOutput { + return o.ApplyT(func(v *BackendServiceLocalityLbPolicyPolicy) *string { + if v == nil { + return nil + } + return &v.Name + }).(pulumi.StringPtrOutput) +} + type BackendServiceLogConfig struct { // Whether to enable logging for the load balancer traffic served by this backend service. Enable *bool `pulumi:"enable"` @@ -14073,7 +14261,7 @@ type InstanceAttachedDisk struct { // under `/dev/disk/by-id/google-*` DeviceName *string `pulumi:"deviceName"` // A 256-bit [customer-supplied encryption key] - // (), + // (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), // encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) // to encrypt this disk. Only one of `kmsKeySelfLink` and `diskEncryptionKeyRaw` may be set. DiskEncryptionKeyRaw *string `pulumi:"diskEncryptionKeyRaw"` @@ -14107,7 +14295,7 @@ type InstanceAttachedDiskArgs struct { // under `/dev/disk/by-id/google-*` DeviceName pulumi.StringPtrInput `pulumi:"deviceName"` // A 256-bit [customer-supplied encryption key] - // (), + // (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), // encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) // to encrypt this disk. Only one of `kmsKeySelfLink` and `diskEncryptionKeyRaw` may be set. DiskEncryptionKeyRaw pulumi.StringPtrInput `pulumi:"diskEncryptionKeyRaw"` @@ -14183,7 +14371,7 @@ func (o InstanceAttachedDiskOutput) DeviceName() pulumi.StringPtrOutput { } // A 256-bit [customer-supplied encryption key] -// (), +// (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), // encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) // to encrypt this disk. Only one of `kmsKeySelfLink` and `diskEncryptionKeyRaw` may be set. func (o InstanceAttachedDiskOutput) DiskEncryptionKeyRaw() pulumi.StringPtrOutput { @@ -14242,7 +14430,7 @@ type InstanceBootDisk struct { // On the instance, this device will be `/dev/disk/by-id/google-{{device_name}}`. DeviceName *string `pulumi:"deviceName"` // A 256-bit [customer-supplied encryption key] - // (), + // (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), // encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) // to encrypt this disk. Only one of `kmsKeySelfLink` and `diskEncryptionKeyRaw` // may be set. @@ -14284,7 +14472,7 @@ type InstanceBootDiskArgs struct { // On the instance, this device will be `/dev/disk/by-id/google-{{device_name}}`. DeviceName pulumi.StringPtrInput `pulumi:"deviceName"` // A 256-bit [customer-supplied encryption key] - // (), + // (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), // encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) // to encrypt this disk. Only one of `kmsKeySelfLink` and `diskEncryptionKeyRaw` // may be set. @@ -14397,7 +14585,7 @@ func (o InstanceBootDiskOutput) DeviceName() pulumi.StringPtrOutput { } // A 256-bit [customer-supplied encryption key] -// (), +// (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), // encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) // to encrypt this disk. Only one of `kmsKeySelfLink` and `diskEncryptionKeyRaw` // may be set. @@ -14483,7 +14671,7 @@ func (o InstanceBootDiskPtrOutput) DeviceName() pulumi.StringPtrOutput { } // A 256-bit [customer-supplied encryption key] -// (), +// (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), // encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) // to encrypt this disk. Only one of `kmsKeySelfLink` and `diskEncryptionKeyRaw` // may be set. @@ -22745,12 +22933,6 @@ func (o InstanceIAMMemberConditionPtrOutput) Title() pulumi.StringPtrOutput { } type InstanceNetworkInterface struct { - // Access configurations, i.e. IPs via which this - // instance can be accessed via the Internet. Omit to ensure that the instance - // is not accessible from the Internet. If omitted, ssh will not - // work unless this provider can send traffic to the instance's network (e.g. via - // tunnel or because it is running on another cloud instance on that network). - // This block can be repeated multiple times. Structure documented below. AccessConfigs []InstanceNetworkInterfaceAccessConfig `pulumi:"accessConfigs"` // An // array of alias IP ranges for this network interface. Can only be specified for network @@ -22806,12 +22988,6 @@ type InstanceNetworkInterfaceInput interface { } type InstanceNetworkInterfaceArgs struct { - // Access configurations, i.e. IPs via which this - // instance can be accessed via the Internet. Omit to ensure that the instance - // is not accessible from the Internet. If omitted, ssh will not - // work unless this provider can send traffic to the instance's network (e.g. via - // tunnel or because it is running on another cloud instance on that network). - // This block can be repeated multiple times. Structure documented below. AccessConfigs InstanceNetworkInterfaceAccessConfigArrayInput `pulumi:"accessConfigs"` // An // array of alias IP ranges for this network interface. Can only be specified for network @@ -22906,12 +23082,6 @@ func (o InstanceNetworkInterfaceOutput) ToInstanceNetworkInterfaceOutputWithCont return o } -// Access configurations, i.e. IPs via which this -// instance can be accessed via the Internet. Omit to ensure that the instance -// is not accessible from the Internet. If omitted, ssh will not -// work unless this provider can send traffic to the instance's network (e.g. via -// tunnel or because it is running on another cloud instance on that network). -// This block can be repeated multiple times. Structure documented below. func (o InstanceNetworkInterfaceOutput) AccessConfigs() InstanceNetworkInterfaceAccessConfigArrayOutput { return o.ApplyT(func(v InstanceNetworkInterface) []InstanceNetworkInterfaceAccessConfig { return v.AccessConfigs }).(InstanceNetworkInterfaceAccessConfigArrayOutput) } @@ -26144,12 +26314,6 @@ func (o InstanceTemplateGuestAcceleratorArrayOutput) Index(i pulumi.IntInput) In } type InstanceTemplateNetworkInterface struct { - // Access configurations, i.e. IPs via which this - // instance can be accessed via the Internet. Omit to ensure that the instance - // is not accessible from the Internet (this means that ssh provisioners will - // not work unless you can send traffic to the instance's - // network (e.g. via tunnel or because it is running on another cloud instance - // on that network). This block can be repeated multiple times. Structure documented below. AccessConfigs []InstanceTemplateNetworkInterfaceAccessConfig `pulumi:"accessConfigs"` // An // array of alias IP ranges for this network interface. Can only be specified for network @@ -26160,9 +26324,7 @@ type InstanceTemplateNetworkInterface struct { // specified, then this instance will have no external IPv6 Internet access. Structure documented below. Ipv6AccessConfigs []InstanceTemplateNetworkInterfaceIpv6AccessConfig `pulumi:"ipv6AccessConfigs"` Ipv6AccessType *string `pulumi:"ipv6AccessType"` - // The name of the instance template. If you leave - // this blank, the provider will auto-generate a unique name. - Name *string `pulumi:"name"` + Name *string `pulumi:"name"` // The name or selfLink of the network to attach this interface to. // Use `network` attribute for Legacy or Auto subnetted networks and // `subnetwork` for custom subnetted networks. @@ -26197,12 +26359,6 @@ type InstanceTemplateNetworkInterfaceInput interface { } type InstanceTemplateNetworkInterfaceArgs struct { - // Access configurations, i.e. IPs via which this - // instance can be accessed via the Internet. Omit to ensure that the instance - // is not accessible from the Internet (this means that ssh provisioners will - // not work unless you can send traffic to the instance's - // network (e.g. via tunnel or because it is running on another cloud instance - // on that network). This block can be repeated multiple times. Structure documented below. AccessConfigs InstanceTemplateNetworkInterfaceAccessConfigArrayInput `pulumi:"accessConfigs"` // An // array of alias IP ranges for this network interface. Can only be specified for network @@ -26213,9 +26369,7 @@ type InstanceTemplateNetworkInterfaceArgs struct { // specified, then this instance will have no external IPv6 Internet access. Structure documented below. Ipv6AccessConfigs InstanceTemplateNetworkInterfaceIpv6AccessConfigArrayInput `pulumi:"ipv6AccessConfigs"` Ipv6AccessType pulumi.StringPtrInput `pulumi:"ipv6AccessType"` - // The name of the instance template. If you leave - // this blank, the provider will auto-generate a unique name. - Name pulumi.StringPtrInput `pulumi:"name"` + Name pulumi.StringPtrInput `pulumi:"name"` // The name or selfLink of the network to attach this interface to. // Use `network` attribute for Legacy or Auto subnetted networks and // `subnetwork` for custom subnetted networks. @@ -26289,12 +26443,6 @@ func (o InstanceTemplateNetworkInterfaceOutput) ToInstanceTemplateNetworkInterfa return o } -// Access configurations, i.e. IPs via which this -// instance can be accessed via the Internet. Omit to ensure that the instance -// is not accessible from the Internet (this means that ssh provisioners will -// not work unless you can send traffic to the instance's -// network (e.g. via tunnel or because it is running on another cloud instance -// on that network). This block can be repeated multiple times. Structure documented below. func (o InstanceTemplateNetworkInterfaceOutput) AccessConfigs() InstanceTemplateNetworkInterfaceAccessConfigArrayOutput { return o.ApplyT(func(v InstanceTemplateNetworkInterface) []InstanceTemplateNetworkInterfaceAccessConfig { return v.AccessConfigs @@ -26323,8 +26471,6 @@ func (o InstanceTemplateNetworkInterfaceOutput) Ipv6AccessType() pulumi.StringPt return o.ApplyT(func(v InstanceTemplateNetworkInterface) *string { return v.Ipv6AccessType }).(pulumi.StringPtrOutput) } -// The name of the instance template. If you leave -// this blank, the provider will auto-generate a unique name. func (o InstanceTemplateNetworkInterfaceOutput) Name() pulumi.StringPtrOutput { return o.ApplyT(func(v InstanceTemplateNetworkInterface) *string { return v.Name }).(pulumi.StringPtrOutput) } @@ -27217,10 +27363,9 @@ type InstanceTemplateScheduling struct { // terminated by a user). This defaults to true. AutomaticRestart *bool `pulumi:"automaticRestart"` // Describe the type of termination action for `SPOT` VM. Can be `STOP` or `DELETE`. Read more on [here](https://cloud.google.com/compute/docs/instances/create-use-spot) - InstanceTerminationAction *string `pulumi:"instanceTerminationAction"` - // Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instanceTerminationAction`. Only support `DELETE` `instanceTerminationAction` at this point. Structure is documented below. - MaxRunDuration *InstanceTemplateSchedulingMaxRunDuration `pulumi:"maxRunDuration"` - MinNodeCpus *int `pulumi:"minNodeCpus"` + InstanceTerminationAction *string `pulumi:"instanceTerminationAction"` + MaxRunDuration *InstanceTemplateSchedulingMaxRunDuration `pulumi:"maxRunDuration"` + MinNodeCpus *int `pulumi:"minNodeCpus"` // Specifies node affinities or anti-affinities // to determine which sole-tenant nodes your instances and managed instance // groups will use as host systems. Read more on sole-tenant node creation @@ -27258,10 +27403,9 @@ type InstanceTemplateSchedulingArgs struct { // terminated by a user). This defaults to true. AutomaticRestart pulumi.BoolPtrInput `pulumi:"automaticRestart"` // Describe the type of termination action for `SPOT` VM. Can be `STOP` or `DELETE`. Read more on [here](https://cloud.google.com/compute/docs/instances/create-use-spot) - InstanceTerminationAction pulumi.StringPtrInput `pulumi:"instanceTerminationAction"` - // Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instanceTerminationAction`. Only support `DELETE` `instanceTerminationAction` at this point. Structure is documented below. - MaxRunDuration InstanceTemplateSchedulingMaxRunDurationPtrInput `pulumi:"maxRunDuration"` - MinNodeCpus pulumi.IntPtrInput `pulumi:"minNodeCpus"` + InstanceTerminationAction pulumi.StringPtrInput `pulumi:"instanceTerminationAction"` + MaxRunDuration InstanceTemplateSchedulingMaxRunDurationPtrInput `pulumi:"maxRunDuration"` + MinNodeCpus pulumi.IntPtrInput `pulumi:"minNodeCpus"` // Specifies node affinities or anti-affinities // to determine which sole-tenant nodes your instances and managed instance // groups will use as host systems. Read more on sole-tenant node creation @@ -27371,7 +27515,6 @@ func (o InstanceTemplateSchedulingOutput) InstanceTerminationAction() pulumi.Str return o.ApplyT(func(v InstanceTemplateScheduling) *string { return v.InstanceTerminationAction }).(pulumi.StringPtrOutput) } -// Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instanceTerminationAction`. Only support `DELETE` `instanceTerminationAction` at this point. Structure is documented below. func (o InstanceTemplateSchedulingOutput) MaxRunDuration() InstanceTemplateSchedulingMaxRunDurationPtrOutput { return o.ApplyT(func(v InstanceTemplateScheduling) *InstanceTemplateSchedulingMaxRunDuration { return v.MaxRunDuration }).(InstanceTemplateSchedulingMaxRunDurationPtrOutput) } @@ -27456,7 +27599,6 @@ func (o InstanceTemplateSchedulingPtrOutput) InstanceTerminationAction() pulumi. }).(pulumi.StringPtrOutput) } -// Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instanceTerminationAction`. Only support `DELETE` `instanceTerminationAction` at this point. Structure is documented below. func (o InstanceTemplateSchedulingPtrOutput) MaxRunDuration() InstanceTemplateSchedulingMaxRunDurationPtrOutput { return o.ApplyT(func(v *InstanceTemplateScheduling) *InstanceTemplateSchedulingMaxRunDuration { if v == nil { @@ -29960,6 +30102,276 @@ func (o NodeGroupMaintenanceWindowPtrOutput) StartTime() pulumi.StringPtrOutput }).(pulumi.StringPtrOutput) } +type NodeGroupShareSettings struct { + // A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + // Structure is documented below. + ProjectMaps []NodeGroupShareSettingsProjectMap `pulumi:"projectMaps"` + // Node group sharing type. + // Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + ShareType string `pulumi:"shareType"` +} + +// NodeGroupShareSettingsInput is an input type that accepts NodeGroupShareSettingsArgs and NodeGroupShareSettingsOutput values. +// You can construct a concrete instance of `NodeGroupShareSettingsInput` via: +// +// NodeGroupShareSettingsArgs{...} +type NodeGroupShareSettingsInput interface { + pulumi.Input + + ToNodeGroupShareSettingsOutput() NodeGroupShareSettingsOutput + ToNodeGroupShareSettingsOutputWithContext(context.Context) NodeGroupShareSettingsOutput +} + +type NodeGroupShareSettingsArgs struct { + // A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + // Structure is documented below. + ProjectMaps NodeGroupShareSettingsProjectMapArrayInput `pulumi:"projectMaps"` + // Node group sharing type. + // Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + ShareType pulumi.StringInput `pulumi:"shareType"` +} + +func (NodeGroupShareSettingsArgs) ElementType() reflect.Type { + return reflect.TypeOf((*NodeGroupShareSettings)(nil)).Elem() +} + +func (i NodeGroupShareSettingsArgs) ToNodeGroupShareSettingsOutput() NodeGroupShareSettingsOutput { + return i.ToNodeGroupShareSettingsOutputWithContext(context.Background()) +} + +func (i NodeGroupShareSettingsArgs) ToNodeGroupShareSettingsOutputWithContext(ctx context.Context) NodeGroupShareSettingsOutput { + return pulumi.ToOutputWithContext(ctx, i).(NodeGroupShareSettingsOutput) +} + +func (i NodeGroupShareSettingsArgs) ToNodeGroupShareSettingsPtrOutput() NodeGroupShareSettingsPtrOutput { + return i.ToNodeGroupShareSettingsPtrOutputWithContext(context.Background()) +} + +func (i NodeGroupShareSettingsArgs) ToNodeGroupShareSettingsPtrOutputWithContext(ctx context.Context) NodeGroupShareSettingsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(NodeGroupShareSettingsOutput).ToNodeGroupShareSettingsPtrOutputWithContext(ctx) +} + +// NodeGroupShareSettingsPtrInput is an input type that accepts NodeGroupShareSettingsArgs, NodeGroupShareSettingsPtr and NodeGroupShareSettingsPtrOutput values. +// You can construct a concrete instance of `NodeGroupShareSettingsPtrInput` via: +// +// NodeGroupShareSettingsArgs{...} +// +// or: +// +// nil +type NodeGroupShareSettingsPtrInput interface { + pulumi.Input + + ToNodeGroupShareSettingsPtrOutput() NodeGroupShareSettingsPtrOutput + ToNodeGroupShareSettingsPtrOutputWithContext(context.Context) NodeGroupShareSettingsPtrOutput +} + +type nodeGroupShareSettingsPtrType NodeGroupShareSettingsArgs + +func NodeGroupShareSettingsPtr(v *NodeGroupShareSettingsArgs) NodeGroupShareSettingsPtrInput { + return (*nodeGroupShareSettingsPtrType)(v) +} + +func (*nodeGroupShareSettingsPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**NodeGroupShareSettings)(nil)).Elem() +} + +func (i *nodeGroupShareSettingsPtrType) ToNodeGroupShareSettingsPtrOutput() NodeGroupShareSettingsPtrOutput { + return i.ToNodeGroupShareSettingsPtrOutputWithContext(context.Background()) +} + +func (i *nodeGroupShareSettingsPtrType) ToNodeGroupShareSettingsPtrOutputWithContext(ctx context.Context) NodeGroupShareSettingsPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(NodeGroupShareSettingsPtrOutput) +} + +type NodeGroupShareSettingsOutput struct{ *pulumi.OutputState } + +func (NodeGroupShareSettingsOutput) ElementType() reflect.Type { + return reflect.TypeOf((*NodeGroupShareSettings)(nil)).Elem() +} + +func (o NodeGroupShareSettingsOutput) ToNodeGroupShareSettingsOutput() NodeGroupShareSettingsOutput { + return o +} + +func (o NodeGroupShareSettingsOutput) ToNodeGroupShareSettingsOutputWithContext(ctx context.Context) NodeGroupShareSettingsOutput { + return o +} + +func (o NodeGroupShareSettingsOutput) ToNodeGroupShareSettingsPtrOutput() NodeGroupShareSettingsPtrOutput { + return o.ToNodeGroupShareSettingsPtrOutputWithContext(context.Background()) +} + +func (o NodeGroupShareSettingsOutput) ToNodeGroupShareSettingsPtrOutputWithContext(ctx context.Context) NodeGroupShareSettingsPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v NodeGroupShareSettings) *NodeGroupShareSettings { + return &v + }).(NodeGroupShareSettingsPtrOutput) +} + +// A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. +// Structure is documented below. +func (o NodeGroupShareSettingsOutput) ProjectMaps() NodeGroupShareSettingsProjectMapArrayOutput { + return o.ApplyT(func(v NodeGroupShareSettings) []NodeGroupShareSettingsProjectMap { return v.ProjectMaps }).(NodeGroupShareSettingsProjectMapArrayOutput) +} + +// Node group sharing type. +// Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. +func (o NodeGroupShareSettingsOutput) ShareType() pulumi.StringOutput { + return o.ApplyT(func(v NodeGroupShareSettings) string { return v.ShareType }).(pulumi.StringOutput) +} + +type NodeGroupShareSettingsPtrOutput struct{ *pulumi.OutputState } + +func (NodeGroupShareSettingsPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**NodeGroupShareSettings)(nil)).Elem() +} + +func (o NodeGroupShareSettingsPtrOutput) ToNodeGroupShareSettingsPtrOutput() NodeGroupShareSettingsPtrOutput { + return o +} + +func (o NodeGroupShareSettingsPtrOutput) ToNodeGroupShareSettingsPtrOutputWithContext(ctx context.Context) NodeGroupShareSettingsPtrOutput { + return o +} + +func (o NodeGroupShareSettingsPtrOutput) Elem() NodeGroupShareSettingsOutput { + return o.ApplyT(func(v *NodeGroupShareSettings) NodeGroupShareSettings { + if v != nil { + return *v + } + var ret NodeGroupShareSettings + return ret + }).(NodeGroupShareSettingsOutput) +} + +// A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. +// Structure is documented below. +func (o NodeGroupShareSettingsPtrOutput) ProjectMaps() NodeGroupShareSettingsProjectMapArrayOutput { + return o.ApplyT(func(v *NodeGroupShareSettings) []NodeGroupShareSettingsProjectMap { + if v == nil { + return nil + } + return v.ProjectMaps + }).(NodeGroupShareSettingsProjectMapArrayOutput) +} + +// Node group sharing type. +// Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. +func (o NodeGroupShareSettingsPtrOutput) ShareType() pulumi.StringPtrOutput { + return o.ApplyT(func(v *NodeGroupShareSettings) *string { + if v == nil { + return nil + } + return &v.ShareType + }).(pulumi.StringPtrOutput) +} + +type NodeGroupShareSettingsProjectMap struct { + // The identifier for this object. Format specified above. + Id string `pulumi:"id"` + // The project id/number should be the same as the key of this project config in the project map. + ProjectId string `pulumi:"projectId"` +} + +// NodeGroupShareSettingsProjectMapInput is an input type that accepts NodeGroupShareSettingsProjectMap and NodeGroupShareSettingsProjectMapOutput values. +// You can construct a concrete instance of `NodeGroupShareSettingsProjectMapInput` via: +// +// NodeGroupShareSettingsProjectMap{ "key": NodeGroupShareSettingsProjectArgs{...} } +type NodeGroupShareSettingsProjectMapInput interface { + pulumi.Input + + ToNodeGroupShareSettingsProjectMapOutput() NodeGroupShareSettingsProjectMapOutput + ToNodeGroupShareSettingsProjectMapOutputWithContext(context.Context) NodeGroupShareSettingsProjectMapOutput +} + +type NodeGroupShareSettingsProjectMapArgs struct { + // The identifier for this object. Format specified above. + Id pulumi.StringInput `pulumi:"id"` + // The project id/number should be the same as the key of this project config in the project map. + ProjectId pulumi.StringInput `pulumi:"projectId"` +} + +func (NodeGroupShareSettingsProjectMapArgs) ElementType() reflect.Type { + return reflect.TypeOf((*NodeGroupShareSettingsProjectMap)(nil)).Elem() +} + +func (i NodeGroupShareSettingsProjectMapArgs) ToNodeGroupShareSettingsProjectMapOutput() NodeGroupShareSettingsProjectMapOutput { + return i.ToNodeGroupShareSettingsProjectMapOutputWithContext(context.Background()) +} + +func (i NodeGroupShareSettingsProjectMapArgs) ToNodeGroupShareSettingsProjectMapOutputWithContext(ctx context.Context) NodeGroupShareSettingsProjectMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(NodeGroupShareSettingsProjectMapOutput) +} + +// NodeGroupShareSettingsProjectMapArrayInput is an input type that accepts NodeGroupShareSettingsProjectMapArray and NodeGroupShareSettingsProjectMapArrayOutput values. +// You can construct a concrete instance of `NodeGroupShareSettingsProjectMapArrayInput` via: +// +// NodeGroupShareSettingsProjectMapArray{ NodeGroupShareSettingsProjectMapArgs{...} } +type NodeGroupShareSettingsProjectMapArrayInput interface { + pulumi.Input + + ToNodeGroupShareSettingsProjectMapArrayOutput() NodeGroupShareSettingsProjectMapArrayOutput + ToNodeGroupShareSettingsProjectMapArrayOutputWithContext(context.Context) NodeGroupShareSettingsProjectMapArrayOutput +} + +type NodeGroupShareSettingsProjectMapArray []NodeGroupShareSettingsProjectMapInput + +func (NodeGroupShareSettingsProjectMapArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]NodeGroupShareSettingsProjectMap)(nil)).Elem() +} + +func (i NodeGroupShareSettingsProjectMapArray) ToNodeGroupShareSettingsProjectMapArrayOutput() NodeGroupShareSettingsProjectMapArrayOutput { + return i.ToNodeGroupShareSettingsProjectMapArrayOutputWithContext(context.Background()) +} + +func (i NodeGroupShareSettingsProjectMapArray) ToNodeGroupShareSettingsProjectMapArrayOutputWithContext(ctx context.Context) NodeGroupShareSettingsProjectMapArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(NodeGroupShareSettingsProjectMapArrayOutput) +} + +type NodeGroupShareSettingsProjectMapOutput struct{ *pulumi.OutputState } + +func (NodeGroupShareSettingsProjectMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*NodeGroupShareSettingsProjectMap)(nil)).Elem() +} + +func (o NodeGroupShareSettingsProjectMapOutput) ToNodeGroupShareSettingsProjectMapOutput() NodeGroupShareSettingsProjectMapOutput { + return o +} + +func (o NodeGroupShareSettingsProjectMapOutput) ToNodeGroupShareSettingsProjectMapOutputWithContext(ctx context.Context) NodeGroupShareSettingsProjectMapOutput { + return o +} + +// The identifier for this object. Format specified above. +func (o NodeGroupShareSettingsProjectMapOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v NodeGroupShareSettingsProjectMap) string { return v.Id }).(pulumi.StringOutput) +} + +// The project id/number should be the same as the key of this project config in the project map. +func (o NodeGroupShareSettingsProjectMapOutput) ProjectId() pulumi.StringOutput { + return o.ApplyT(func(v NodeGroupShareSettingsProjectMap) string { return v.ProjectId }).(pulumi.StringOutput) +} + +type NodeGroupShareSettingsProjectMapArrayOutput struct{ *pulumi.OutputState } + +func (NodeGroupShareSettingsProjectMapArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]NodeGroupShareSettingsProjectMap)(nil)).Elem() +} + +func (o NodeGroupShareSettingsProjectMapArrayOutput) ToNodeGroupShareSettingsProjectMapArrayOutput() NodeGroupShareSettingsProjectMapArrayOutput { + return o +} + +func (o NodeGroupShareSettingsProjectMapArrayOutput) ToNodeGroupShareSettingsProjectMapArrayOutputWithContext(ctx context.Context) NodeGroupShareSettingsProjectMapArrayOutput { + return o +} + +func (o NodeGroupShareSettingsProjectMapArrayOutput) Index(i pulumi.IntInput) NodeGroupShareSettingsProjectMapOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) NodeGroupShareSettingsProjectMap { + return vs[0].([]NodeGroupShareSettingsProjectMap)[vs[1].(int)] + }).(NodeGroupShareSettingsProjectMapOutput) +} + type NodeTemplateNodeTypeFlexibility struct { // Number of virtual CPUs to use. Cpus *string `pulumi:"cpus"` @@ -32017,10 +32429,7 @@ type RegionAutoscalerAutoscalingPolicy struct { // Defines operating mode for this policy. // Default value is `ON`. // Possible values are `OFF`, `ONLY_UP`, and `ON`. - Mode *string `pulumi:"mode"` - // Defines scale down controls to reduce the risk of response latency - // and outages due to abrupt scale-in events - // Structure is documented below. + Mode *string `pulumi:"mode"` ScaleDownControl *RegionAutoscalerAutoscalingPolicyScaleDownControl `pulumi:"scaleDownControl"` // Defines scale in controls to reduce the risk of response latency // and outages due to abrupt scale-in events @@ -32077,10 +32486,7 @@ type RegionAutoscalerAutoscalingPolicyArgs struct { // Defines operating mode for this policy. // Default value is `ON`. // Possible values are `OFF`, `ONLY_UP`, and `ON`. - Mode pulumi.StringPtrInput `pulumi:"mode"` - // Defines scale down controls to reduce the risk of response latency - // and outages due to abrupt scale-in events - // Structure is documented below. + Mode pulumi.StringPtrInput `pulumi:"mode"` ScaleDownControl RegionAutoscalerAutoscalingPolicyScaleDownControlPtrInput `pulumi:"scaleDownControl"` // Defines scale in controls to reduce the risk of response latency // and outages due to abrupt scale-in events @@ -32228,9 +32634,6 @@ func (o RegionAutoscalerAutoscalingPolicyOutput) Mode() pulumi.StringPtrOutput { return o.ApplyT(func(v RegionAutoscalerAutoscalingPolicy) *string { return v.Mode }).(pulumi.StringPtrOutput) } -// Defines scale down controls to reduce the risk of response latency -// and outages due to abrupt scale-in events -// Structure is documented below. func (o RegionAutoscalerAutoscalingPolicyOutput) ScaleDownControl() RegionAutoscalerAutoscalingPolicyScaleDownControlPtrOutput { return o.ApplyT(func(v RegionAutoscalerAutoscalingPolicy) *RegionAutoscalerAutoscalingPolicyScaleDownControl { return v.ScaleDownControl @@ -32369,9 +32772,6 @@ func (o RegionAutoscalerAutoscalingPolicyPtrOutput) Mode() pulumi.StringPtrOutpu }).(pulumi.StringPtrOutput) } -// Defines scale down controls to reduce the risk of response latency -// and outages due to abrupt scale-in events -// Structure is documented below. func (o RegionAutoscalerAutoscalingPolicyPtrOutput) ScaleDownControl() RegionAutoscalerAutoscalingPolicyScaleDownControlPtrOutput { return o.ApplyT(func(v *RegionAutoscalerAutoscalingPolicy) *RegionAutoscalerAutoscalingPolicyScaleDownControl { if v == nil { @@ -32754,52 +33154,11 @@ func (o RegionAutoscalerAutoscalingPolicyLoadBalancingUtilizationPtrOutput) Targ } type RegionAutoscalerAutoscalingPolicyMetric struct { - // A filter string to be used as the filter string for - // a Stackdriver Monitoring TimeSeries.list API call. - // This filter is used to select a specific TimeSeries for - // the purpose of autoscaling and to determine whether the metric - // is exporting per-instance or per-group data. - // You can only use the AND operator for joining selectors. - // You can only use direct equality comparison operator (=) without - // any functions for each selector. - // You can specify the metric in both the filter string and in the - // metric field. However, if specified in both places, the metric must - // be identical. - // The monitored resource type determines what kind of values are - // expected for the metric. If it is a gce_instance, the autoscaler - // expects the metric to include a separate TimeSeries for each - // instance in a group. In such a case, you cannot filter on resource - // labels. - // If the resource type is any other value, the autoscaler expects - // this metric to contain values that apply to the entire autoscaled - // instance group and resource label filtering can be performed to - // point autoscaler at the correct TimeSeries to scale upon. - // This is called a per-group metric for the purpose of autoscaling. - // If not specified, the type defaults to gce_instance. - // You should provide a filter that is selective enough to pick just - // one TimeSeries for the autoscaled group or for each of the instances - // (if you are using gceInstance resource type). If multiple - // TimeSeries are returned upon the query execution, the autoscaler - // will sum their respective values to obtain its scaling value. Filter *string `pulumi:"filter"` // The identifier (type) of the Stackdriver Monitoring metric. // The metric cannot have negative values. // The metric must have a value type of INT64 or DOUBLE. - Name string `pulumi:"name"` - // If scaling is based on a per-group metric value that represents the - // total amount of work to be done or resource usage, set this value to - // an amount assigned for a single instance of the scaled group. - // The autoscaler will keep the number of instances proportional to the - // value of this metric, the metric itself should not change value due - // to group resizing. - // For example, a good metric to use with the target is - // `pubsub.googleapis.com/subscription/num_undelivered_messages` - // or a custom metric exporting the total number of requests coming to - // your instances. - // A bad example would be a metric exporting an average or median - // latency, since this value can't include a chunk assignable to a - // single instance, it could be better used with utilizationTarget - // instead. + Name string `pulumi:"name"` SingleInstanceAssignment *float64 `pulumi:"singleInstanceAssignment"` // The target value of the metric that autoscaler should // maintain. This must be a positive value. A utilization @@ -32828,52 +33187,11 @@ type RegionAutoscalerAutoscalingPolicyMetricInput interface { } type RegionAutoscalerAutoscalingPolicyMetricArgs struct { - // A filter string to be used as the filter string for - // a Stackdriver Monitoring TimeSeries.list API call. - // This filter is used to select a specific TimeSeries for - // the purpose of autoscaling and to determine whether the metric - // is exporting per-instance or per-group data. - // You can only use the AND operator for joining selectors. - // You can only use direct equality comparison operator (=) without - // any functions for each selector. - // You can specify the metric in both the filter string and in the - // metric field. However, if specified in both places, the metric must - // be identical. - // The monitored resource type determines what kind of values are - // expected for the metric. If it is a gce_instance, the autoscaler - // expects the metric to include a separate TimeSeries for each - // instance in a group. In such a case, you cannot filter on resource - // labels. - // If the resource type is any other value, the autoscaler expects - // this metric to contain values that apply to the entire autoscaled - // instance group and resource label filtering can be performed to - // point autoscaler at the correct TimeSeries to scale upon. - // This is called a per-group metric for the purpose of autoscaling. - // If not specified, the type defaults to gce_instance. - // You should provide a filter that is selective enough to pick just - // one TimeSeries for the autoscaled group or for each of the instances - // (if you are using gceInstance resource type). If multiple - // TimeSeries are returned upon the query execution, the autoscaler - // will sum their respective values to obtain its scaling value. Filter pulumi.StringPtrInput `pulumi:"filter"` // The identifier (type) of the Stackdriver Monitoring metric. // The metric cannot have negative values. // The metric must have a value type of INT64 or DOUBLE. - Name pulumi.StringInput `pulumi:"name"` - // If scaling is based on a per-group metric value that represents the - // total amount of work to be done or resource usage, set this value to - // an amount assigned for a single instance of the scaled group. - // The autoscaler will keep the number of instances proportional to the - // value of this metric, the metric itself should not change value due - // to group resizing. - // For example, a good metric to use with the target is - // `pubsub.googleapis.com/subscription/num_undelivered_messages` - // or a custom metric exporting the total number of requests coming to - // your instances. - // A bad example would be a metric exporting an average or median - // latency, since this value can't include a chunk assignable to a - // single instance, it could be better used with utilizationTarget - // instead. + Name pulumi.StringInput `pulumi:"name"` SingleInstanceAssignment pulumi.Float64PtrInput `pulumi:"singleInstanceAssignment"` // The target value of the metric that autoscaler should // maintain. This must be a positive value. A utilization @@ -32941,33 +33259,6 @@ func (o RegionAutoscalerAutoscalingPolicyMetricOutput) ToRegionAutoscalerAutosca return o } -// A filter string to be used as the filter string for -// a Stackdriver Monitoring TimeSeries.list API call. -// This filter is used to select a specific TimeSeries for -// the purpose of autoscaling and to determine whether the metric -// is exporting per-instance or per-group data. -// You can only use the AND operator for joining selectors. -// You can only use direct equality comparison operator (=) without -// any functions for each selector. -// You can specify the metric in both the filter string and in the -// metric field. However, if specified in both places, the metric must -// be identical. -// The monitored resource type determines what kind of values are -// expected for the metric. If it is a gce_instance, the autoscaler -// expects the metric to include a separate TimeSeries for each -// instance in a group. In such a case, you cannot filter on resource -// labels. -// If the resource type is any other value, the autoscaler expects -// this metric to contain values that apply to the entire autoscaled -// instance group and resource label filtering can be performed to -// point autoscaler at the correct TimeSeries to scale upon. -// This is called a per-group metric for the purpose of autoscaling. -// If not specified, the type defaults to gce_instance. -// You should provide a filter that is selective enough to pick just -// one TimeSeries for the autoscaled group or for each of the instances -// (if you are using gceInstance resource type). If multiple -// TimeSeries are returned upon the query execution, the autoscaler -// will sum their respective values to obtain its scaling value. func (o RegionAutoscalerAutoscalingPolicyMetricOutput) Filter() pulumi.StringPtrOutput { return o.ApplyT(func(v RegionAutoscalerAutoscalingPolicyMetric) *string { return v.Filter }).(pulumi.StringPtrOutput) } @@ -32979,20 +33270,6 @@ func (o RegionAutoscalerAutoscalingPolicyMetricOutput) Name() pulumi.StringOutpu return o.ApplyT(func(v RegionAutoscalerAutoscalingPolicyMetric) string { return v.Name }).(pulumi.StringOutput) } -// If scaling is based on a per-group metric value that represents the -// total amount of work to be done or resource usage, set this value to -// an amount assigned for a single instance of the scaled group. -// The autoscaler will keep the number of instances proportional to the -// value of this metric, the metric itself should not change value due -// to group resizing. -// For example, a good metric to use with the target is -// `pubsub.googleapis.com/subscription/num_undelivered_messages` -// or a custom metric exporting the total number of requests coming to -// your instances. -// A bad example would be a metric exporting an average or median -// latency, since this value can't include a chunk assignable to a -// single instance, it could be better used with utilizationTarget -// instead. func (o RegionAutoscalerAutoscalingPolicyMetricOutput) SingleInstanceAssignment() pulumi.Float64PtrOutput { return o.ApplyT(func(v RegionAutoscalerAutoscalingPolicyMetric) *float64 { return v.SingleInstanceAssignment }).(pulumi.Float64PtrOutput) } @@ -34860,9 +35137,7 @@ type RegionBackendServiceCdnPolicyNegativeCachingPolicy struct { // The HTTP status code to define a TTL against. Only HTTP status codes 300, 301, 308, 404, 405, 410, 421, 451 and 501 // can be specified as values, and you cannot specify a status code more than once. Code *int `pulumi:"code"` - // The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - // (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - Ttl *int `pulumi:"ttl"` + Ttl *int `pulumi:"ttl"` } // RegionBackendServiceCdnPolicyNegativeCachingPolicyInput is an input type that accepts RegionBackendServiceCdnPolicyNegativeCachingPolicyArgs and RegionBackendServiceCdnPolicyNegativeCachingPolicyOutput values. @@ -34880,9 +35155,7 @@ type RegionBackendServiceCdnPolicyNegativeCachingPolicyArgs struct { // The HTTP status code to define a TTL against. Only HTTP status codes 300, 301, 308, 404, 405, 410, 421, 451 and 501 // can be specified as values, and you cannot specify a status code more than once. Code pulumi.IntPtrInput `pulumi:"code"` - // The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - // (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - Ttl pulumi.IntPtrInput `pulumi:"ttl"` + Ttl pulumi.IntPtrInput `pulumi:"ttl"` } func (RegionBackendServiceCdnPolicyNegativeCachingPolicyArgs) ElementType() reflect.Type { @@ -34942,8 +35215,6 @@ func (o RegionBackendServiceCdnPolicyNegativeCachingPolicyOutput) Code() pulumi. return o.ApplyT(func(v RegionBackendServiceCdnPolicyNegativeCachingPolicy) *int { return v.Code }).(pulumi.IntPtrOutput) } -// The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s -// (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. func (o RegionBackendServiceCdnPolicyNegativeCachingPolicyOutput) Ttl() pulumi.IntPtrOutput { return o.ApplyT(func(v RegionBackendServiceCdnPolicyNegativeCachingPolicy) *int { return v.Ttl }).(pulumi.IntPtrOutput) } @@ -34969,8 +35240,6 @@ func (o RegionBackendServiceCdnPolicyNegativeCachingPolicyArrayOutput) Index(i p } type RegionBackendServiceCircuitBreakers struct { - // The timeout for new network connections to hosts. - // Structure is documented below. ConnectTimeout *RegionBackendServiceCircuitBreakersConnectTimeout `pulumi:"connectTimeout"` // The maximum number of connections to the backend cluster. // Defaults to 1024. @@ -35003,8 +35272,6 @@ type RegionBackendServiceCircuitBreakersInput interface { } type RegionBackendServiceCircuitBreakersArgs struct { - // The timeout for new network connections to hosts. - // Structure is documented below. ConnectTimeout RegionBackendServiceCircuitBreakersConnectTimeoutPtrInput `pulumi:"connectTimeout"` // The maximum number of connections to the backend cluster. // Defaults to 1024. @@ -35102,8 +35369,6 @@ func (o RegionBackendServiceCircuitBreakersOutput) ToRegionBackendServiceCircuit }).(RegionBackendServiceCircuitBreakersPtrOutput) } -// The timeout for new network connections to hosts. -// Structure is documented below. func (o RegionBackendServiceCircuitBreakersOutput) ConnectTimeout() RegionBackendServiceCircuitBreakersConnectTimeoutPtrOutput { return o.ApplyT(func(v RegionBackendServiceCircuitBreakers) *RegionBackendServiceCircuitBreakersConnectTimeout { return v.ConnectTimeout @@ -35166,8 +35431,6 @@ func (o RegionBackendServiceCircuitBreakersPtrOutput) Elem() RegionBackendServic }).(RegionBackendServiceCircuitBreakersOutput) } -// The timeout for new network connections to hosts. -// Structure is documented below. func (o RegionBackendServiceCircuitBreakersPtrOutput) ConnectTimeout() RegionBackendServiceCircuitBreakersConnectTimeoutPtrOutput { return o.ApplyT(func(v *RegionBackendServiceCircuitBreakers) *RegionBackendServiceCircuitBreakersConnectTimeout { if v == nil { @@ -38623,7 +38886,6 @@ func (o RegionDiskIamMemberConditionPtrOutput) Title() pulumi.StringPtrOutput { } type RegionDiskSourceSnapshotEncryptionKey struct { - // The name of the encryption key that is stored in Google Cloud KMS. KmsKeyName *string `pulumi:"kmsKeyName"` // Specifies a 256-bit customer-supplied encryption key, encoded in // RFC 4648 base64 to either encrypt or decrypt this resource. @@ -38645,7 +38907,6 @@ type RegionDiskSourceSnapshotEncryptionKeyInput interface { } type RegionDiskSourceSnapshotEncryptionKeyArgs struct { - // The name of the encryption key that is stored in Google Cloud KMS. KmsKeyName pulumi.StringPtrInput `pulumi:"kmsKeyName"` // Specifies a 256-bit customer-supplied encryption key, encoded in // RFC 4648 base64 to either encrypt or decrypt this resource. @@ -38732,7 +38993,6 @@ func (o RegionDiskSourceSnapshotEncryptionKeyOutput) ToRegionDiskSourceSnapshotE }).(RegionDiskSourceSnapshotEncryptionKeyPtrOutput) } -// The name of the encryption key that is stored in Google Cloud KMS. func (o RegionDiskSourceSnapshotEncryptionKeyOutput) KmsKeyName() pulumi.StringPtrOutput { return o.ApplyT(func(v RegionDiskSourceSnapshotEncryptionKey) *string { return v.KmsKeyName }).(pulumi.StringPtrOutput) } @@ -38773,7 +39033,6 @@ func (o RegionDiskSourceSnapshotEncryptionKeyPtrOutput) Elem() RegionDiskSourceS }).(RegionDiskSourceSnapshotEncryptionKeyOutput) } -// The name of the encryption key that is stored in Google Cloud KMS. func (o RegionDiskSourceSnapshotEncryptionKeyPtrOutput) KmsKeyName() pulumi.StringPtrOutput { return o.ApplyT(func(v *RegionDiskSourceSnapshotEncryptionKey) *string { if v == nil { @@ -61231,6 +61490,8 @@ func (o RouterStatusBestRoutesForRouterArrayOutput) Index(i pulumi.IntInput) Rou } type SecurityPolicyAdaptiveProtectionConfig struct { + // ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + AutoDeployConfig *SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig `pulumi:"autoDeployConfig"` // Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. Layer7DdosDefenseConfig *SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig `pulumi:"layer7DdosDefenseConfig"` } @@ -61247,6 +61508,8 @@ type SecurityPolicyAdaptiveProtectionConfigInput interface { } type SecurityPolicyAdaptiveProtectionConfigArgs struct { + // ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + AutoDeployConfig SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrInput `pulumi:"autoDeployConfig"` // Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. Layer7DdosDefenseConfig SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigPtrInput `pulumi:"layer7DdosDefenseConfig"` } @@ -61328,6 +61591,13 @@ func (o SecurityPolicyAdaptiveProtectionConfigOutput) ToSecurityPolicyAdaptivePr }).(SecurityPolicyAdaptiveProtectionConfigPtrOutput) } +// ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. +func (o SecurityPolicyAdaptiveProtectionConfigOutput) AutoDeployConfig() SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfig) *SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig { + return v.AutoDeployConfig + }).(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput) +} + // Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. func (o SecurityPolicyAdaptiveProtectionConfigOutput) Layer7DdosDefenseConfig() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigPtrOutput { return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfig) *SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig { @@ -61359,6 +61629,16 @@ func (o SecurityPolicyAdaptiveProtectionConfigPtrOutput) Elem() SecurityPolicyAd }).(SecurityPolicyAdaptiveProtectionConfigOutput) } +// ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. +func (o SecurityPolicyAdaptiveProtectionConfigPtrOutput) AutoDeployConfig() SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput { + return o.ApplyT(func(v *SecurityPolicyAdaptiveProtectionConfig) *SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig { + if v == nil { + return nil + } + return v.AutoDeployConfig + }).(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput) +} + // Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. func (o SecurityPolicyAdaptiveProtectionConfigPtrOutput) Layer7DdosDefenseConfig() SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigPtrOutput { return o.ApplyT(func(v *SecurityPolicyAdaptiveProtectionConfig) *SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig { @@ -61369,6 +61649,202 @@ func (o SecurityPolicyAdaptiveProtectionConfigPtrOutput) Layer7DdosDefenseConfig }).(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigPtrOutput) } +type SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig struct { + // Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + ConfidenceThreshold *float64 `pulumi:"confidenceThreshold"` + // Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + ExpirationSec *int `pulumi:"expirationSec"` + // Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + ImpactedBaselineThreshold *float64 `pulumi:"impactedBaselineThreshold"` + // Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + LoadThreshold *float64 `pulumi:"loadThreshold"` +} + +// SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigInput is an input type that accepts SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs and SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput values. +// You can construct a concrete instance of `SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigInput` via: +// +// SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs{...} +type SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigInput interface { + pulumi.Input + + ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput() SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput + ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutputWithContext(context.Context) SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput +} + +type SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs struct { + // Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + ConfidenceThreshold pulumi.Float64PtrInput `pulumi:"confidenceThreshold"` + // Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + ExpirationSec pulumi.IntPtrInput `pulumi:"expirationSec"` + // Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + ImpactedBaselineThreshold pulumi.Float64PtrInput `pulumi:"impactedBaselineThreshold"` + // Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + LoadThreshold pulumi.Float64PtrInput `pulumi:"loadThreshold"` +} + +func (SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig)(nil)).Elem() +} + +func (i SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs) ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput() SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput { + return i.ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutputWithContext(context.Background()) +} + +func (i SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs) ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) +} + +func (i SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs) ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput() SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput { + return i.ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutputWithContext(context.Background()) +} + +func (i SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs) ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput).ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutputWithContext(ctx) +} + +// SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrInput is an input type that accepts SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs, SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtr and SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput values. +// You can construct a concrete instance of `SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrInput` via: +// +// SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs{...} +// +// or: +// +// nil +type SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrInput interface { + pulumi.Input + + ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput() SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput + ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutputWithContext(context.Context) SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput +} + +type securityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrType SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs + +func SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtr(v *SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs) SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrInput { + return (*securityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrType)(v) +} + +func (*securityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig)(nil)).Elem() +} + +func (i *securityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrType) ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput() SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput { + return i.ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutputWithContext(context.Background()) +} + +func (i *securityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrType) ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput) +} + +type SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput struct{ *pulumi.OutputState } + +func (SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig)(nil)).Elem() +} + +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput() SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput { + return o +} + +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput { + return o +} + +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput() SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput { + return o.ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutputWithContext(context.Background()) +} + +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) *SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig { + return &v + }).(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput) +} + +// Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ConfidenceThreshold() pulumi.Float64PtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) *float64 { return v.ConfidenceThreshold }).(pulumi.Float64PtrOutput) +} + +// Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ExpirationSec() pulumi.IntPtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) *int { return v.ExpirationSec }).(pulumi.IntPtrOutput) +} + +// Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) ImpactedBaselineThreshold() pulumi.Float64PtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) *float64 { + return v.ImpactedBaselineThreshold + }).(pulumi.Float64PtrOutput) +} + +// Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) LoadThreshold() pulumi.Float64PtrOutput { + return o.ApplyT(func(v SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) *float64 { return v.LoadThreshold }).(pulumi.Float64PtrOutput) +} + +type SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput struct{ *pulumi.OutputState } + +func (SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig)(nil)).Elem() +} + +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput) ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput() SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput { + return o +} + +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput) ToSecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutputWithContext(ctx context.Context) SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput { + return o +} + +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput) Elem() SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput { + return o.ApplyT(func(v *SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig { + if v != nil { + return *v + } + var ret SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig + return ret + }).(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput) +} + +// Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput) ConfidenceThreshold() pulumi.Float64PtrOutput { + return o.ApplyT(func(v *SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) *float64 { + if v == nil { + return nil + } + return v.ConfidenceThreshold + }).(pulumi.Float64PtrOutput) +} + +// Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput) ExpirationSec() pulumi.IntPtrOutput { + return o.ApplyT(func(v *SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) *int { + if v == nil { + return nil + } + return v.ExpirationSec + }).(pulumi.IntPtrOutput) +} + +// Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput) ImpactedBaselineThreshold() pulumi.Float64PtrOutput { + return o.ApplyT(func(v *SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) *float64 { + if v == nil { + return nil + } + return v.ImpactedBaselineThreshold + }).(pulumi.Float64PtrOutput) +} + +// Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. +func (o SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput) LoadThreshold() pulumi.Float64PtrOutput { + return o.ApplyT(func(v *SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig) *float64 { + if v == nil { + return nil + } + return v.LoadThreshold + }).(pulumi.Float64PtrOutput) +} + type SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig struct { // If set to true, enables CAAP for L7 DDoS detection. Enable *bool `pulumi:"enable"` @@ -84333,6 +84809,308 @@ func (o GetBackendServiceIapArrayOutput) Index(i pulumi.IntInput) GetBackendServ }).(GetBackendServiceIapOutput) } +type GetBackendServiceLocalityLbPolicy struct { + CustomPolicies []GetBackendServiceLocalityLbPolicyCustomPolicy `pulumi:"customPolicies"` + Policies []GetBackendServiceLocalityLbPolicyPolicy `pulumi:"policies"` +} + +// GetBackendServiceLocalityLbPolicyInput is an input type that accepts GetBackendServiceLocalityLbPolicyArgs and GetBackendServiceLocalityLbPolicyOutput values. +// You can construct a concrete instance of `GetBackendServiceLocalityLbPolicyInput` via: +// +// GetBackendServiceLocalityLbPolicyArgs{...} +type GetBackendServiceLocalityLbPolicyInput interface { + pulumi.Input + + ToGetBackendServiceLocalityLbPolicyOutput() GetBackendServiceLocalityLbPolicyOutput + ToGetBackendServiceLocalityLbPolicyOutputWithContext(context.Context) GetBackendServiceLocalityLbPolicyOutput +} + +type GetBackendServiceLocalityLbPolicyArgs struct { + CustomPolicies GetBackendServiceLocalityLbPolicyCustomPolicyArrayInput `pulumi:"customPolicies"` + Policies GetBackendServiceLocalityLbPolicyPolicyArrayInput `pulumi:"policies"` +} + +func (GetBackendServiceLocalityLbPolicyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetBackendServiceLocalityLbPolicy)(nil)).Elem() +} + +func (i GetBackendServiceLocalityLbPolicyArgs) ToGetBackendServiceLocalityLbPolicyOutput() GetBackendServiceLocalityLbPolicyOutput { + return i.ToGetBackendServiceLocalityLbPolicyOutputWithContext(context.Background()) +} + +func (i GetBackendServiceLocalityLbPolicyArgs) ToGetBackendServiceLocalityLbPolicyOutputWithContext(ctx context.Context) GetBackendServiceLocalityLbPolicyOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetBackendServiceLocalityLbPolicyOutput) +} + +// GetBackendServiceLocalityLbPolicyArrayInput is an input type that accepts GetBackendServiceLocalityLbPolicyArray and GetBackendServiceLocalityLbPolicyArrayOutput values. +// You can construct a concrete instance of `GetBackendServiceLocalityLbPolicyArrayInput` via: +// +// GetBackendServiceLocalityLbPolicyArray{ GetBackendServiceLocalityLbPolicyArgs{...} } +type GetBackendServiceLocalityLbPolicyArrayInput interface { + pulumi.Input + + ToGetBackendServiceLocalityLbPolicyArrayOutput() GetBackendServiceLocalityLbPolicyArrayOutput + ToGetBackendServiceLocalityLbPolicyArrayOutputWithContext(context.Context) GetBackendServiceLocalityLbPolicyArrayOutput +} + +type GetBackendServiceLocalityLbPolicyArray []GetBackendServiceLocalityLbPolicyInput + +func (GetBackendServiceLocalityLbPolicyArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetBackendServiceLocalityLbPolicy)(nil)).Elem() +} + +func (i GetBackendServiceLocalityLbPolicyArray) ToGetBackendServiceLocalityLbPolicyArrayOutput() GetBackendServiceLocalityLbPolicyArrayOutput { + return i.ToGetBackendServiceLocalityLbPolicyArrayOutputWithContext(context.Background()) +} + +func (i GetBackendServiceLocalityLbPolicyArray) ToGetBackendServiceLocalityLbPolicyArrayOutputWithContext(ctx context.Context) GetBackendServiceLocalityLbPolicyArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetBackendServiceLocalityLbPolicyArrayOutput) +} + +type GetBackendServiceLocalityLbPolicyOutput struct{ *pulumi.OutputState } + +func (GetBackendServiceLocalityLbPolicyOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetBackendServiceLocalityLbPolicy)(nil)).Elem() +} + +func (o GetBackendServiceLocalityLbPolicyOutput) ToGetBackendServiceLocalityLbPolicyOutput() GetBackendServiceLocalityLbPolicyOutput { + return o +} + +func (o GetBackendServiceLocalityLbPolicyOutput) ToGetBackendServiceLocalityLbPolicyOutputWithContext(ctx context.Context) GetBackendServiceLocalityLbPolicyOutput { + return o +} + +func (o GetBackendServiceLocalityLbPolicyOutput) CustomPolicies() GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput { + return o.ApplyT(func(v GetBackendServiceLocalityLbPolicy) []GetBackendServiceLocalityLbPolicyCustomPolicy { + return v.CustomPolicies + }).(GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput) +} + +func (o GetBackendServiceLocalityLbPolicyOutput) Policies() GetBackendServiceLocalityLbPolicyPolicyArrayOutput { + return o.ApplyT(func(v GetBackendServiceLocalityLbPolicy) []GetBackendServiceLocalityLbPolicyPolicy { return v.Policies }).(GetBackendServiceLocalityLbPolicyPolicyArrayOutput) +} + +type GetBackendServiceLocalityLbPolicyArrayOutput struct{ *pulumi.OutputState } + +func (GetBackendServiceLocalityLbPolicyArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetBackendServiceLocalityLbPolicy)(nil)).Elem() +} + +func (o GetBackendServiceLocalityLbPolicyArrayOutput) ToGetBackendServiceLocalityLbPolicyArrayOutput() GetBackendServiceLocalityLbPolicyArrayOutput { + return o +} + +func (o GetBackendServiceLocalityLbPolicyArrayOutput) ToGetBackendServiceLocalityLbPolicyArrayOutputWithContext(ctx context.Context) GetBackendServiceLocalityLbPolicyArrayOutput { + return o +} + +func (o GetBackendServiceLocalityLbPolicyArrayOutput) Index(i pulumi.IntInput) GetBackendServiceLocalityLbPolicyOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetBackendServiceLocalityLbPolicy { + return vs[0].([]GetBackendServiceLocalityLbPolicy)[vs[1].(int)] + }).(GetBackendServiceLocalityLbPolicyOutput) +} + +type GetBackendServiceLocalityLbPolicyCustomPolicy struct { + Data string `pulumi:"data"` + // The name of the Backend Service. + Name string `pulumi:"name"` +} + +// GetBackendServiceLocalityLbPolicyCustomPolicyInput is an input type that accepts GetBackendServiceLocalityLbPolicyCustomPolicyArgs and GetBackendServiceLocalityLbPolicyCustomPolicyOutput values. +// You can construct a concrete instance of `GetBackendServiceLocalityLbPolicyCustomPolicyInput` via: +// +// GetBackendServiceLocalityLbPolicyCustomPolicyArgs{...} +type GetBackendServiceLocalityLbPolicyCustomPolicyInput interface { + pulumi.Input + + ToGetBackendServiceLocalityLbPolicyCustomPolicyOutput() GetBackendServiceLocalityLbPolicyCustomPolicyOutput + ToGetBackendServiceLocalityLbPolicyCustomPolicyOutputWithContext(context.Context) GetBackendServiceLocalityLbPolicyCustomPolicyOutput +} + +type GetBackendServiceLocalityLbPolicyCustomPolicyArgs struct { + Data pulumi.StringInput `pulumi:"data"` + // The name of the Backend Service. + Name pulumi.StringInput `pulumi:"name"` +} + +func (GetBackendServiceLocalityLbPolicyCustomPolicyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetBackendServiceLocalityLbPolicyCustomPolicy)(nil)).Elem() +} + +func (i GetBackendServiceLocalityLbPolicyCustomPolicyArgs) ToGetBackendServiceLocalityLbPolicyCustomPolicyOutput() GetBackendServiceLocalityLbPolicyCustomPolicyOutput { + return i.ToGetBackendServiceLocalityLbPolicyCustomPolicyOutputWithContext(context.Background()) +} + +func (i GetBackendServiceLocalityLbPolicyCustomPolicyArgs) ToGetBackendServiceLocalityLbPolicyCustomPolicyOutputWithContext(ctx context.Context) GetBackendServiceLocalityLbPolicyCustomPolicyOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetBackendServiceLocalityLbPolicyCustomPolicyOutput) +} + +// GetBackendServiceLocalityLbPolicyCustomPolicyArrayInput is an input type that accepts GetBackendServiceLocalityLbPolicyCustomPolicyArray and GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput values. +// You can construct a concrete instance of `GetBackendServiceLocalityLbPolicyCustomPolicyArrayInput` via: +// +// GetBackendServiceLocalityLbPolicyCustomPolicyArray{ GetBackendServiceLocalityLbPolicyCustomPolicyArgs{...} } +type GetBackendServiceLocalityLbPolicyCustomPolicyArrayInput interface { + pulumi.Input + + ToGetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput() GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput + ToGetBackendServiceLocalityLbPolicyCustomPolicyArrayOutputWithContext(context.Context) GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput +} + +type GetBackendServiceLocalityLbPolicyCustomPolicyArray []GetBackendServiceLocalityLbPolicyCustomPolicyInput + +func (GetBackendServiceLocalityLbPolicyCustomPolicyArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetBackendServiceLocalityLbPolicyCustomPolicy)(nil)).Elem() +} + +func (i GetBackendServiceLocalityLbPolicyCustomPolicyArray) ToGetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput() GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput { + return i.ToGetBackendServiceLocalityLbPolicyCustomPolicyArrayOutputWithContext(context.Background()) +} + +func (i GetBackendServiceLocalityLbPolicyCustomPolicyArray) ToGetBackendServiceLocalityLbPolicyCustomPolicyArrayOutputWithContext(ctx context.Context) GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput) +} + +type GetBackendServiceLocalityLbPolicyCustomPolicyOutput struct{ *pulumi.OutputState } + +func (GetBackendServiceLocalityLbPolicyCustomPolicyOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetBackendServiceLocalityLbPolicyCustomPolicy)(nil)).Elem() +} + +func (o GetBackendServiceLocalityLbPolicyCustomPolicyOutput) ToGetBackendServiceLocalityLbPolicyCustomPolicyOutput() GetBackendServiceLocalityLbPolicyCustomPolicyOutput { + return o +} + +func (o GetBackendServiceLocalityLbPolicyCustomPolicyOutput) ToGetBackendServiceLocalityLbPolicyCustomPolicyOutputWithContext(ctx context.Context) GetBackendServiceLocalityLbPolicyCustomPolicyOutput { + return o +} + +func (o GetBackendServiceLocalityLbPolicyCustomPolicyOutput) Data() pulumi.StringOutput { + return o.ApplyT(func(v GetBackendServiceLocalityLbPolicyCustomPolicy) string { return v.Data }).(pulumi.StringOutput) +} + +// The name of the Backend Service. +func (o GetBackendServiceLocalityLbPolicyCustomPolicyOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetBackendServiceLocalityLbPolicyCustomPolicy) string { return v.Name }).(pulumi.StringOutput) +} + +type GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput struct{ *pulumi.OutputState } + +func (GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetBackendServiceLocalityLbPolicyCustomPolicy)(nil)).Elem() +} + +func (o GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput) ToGetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput() GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput { + return o +} + +func (o GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput) ToGetBackendServiceLocalityLbPolicyCustomPolicyArrayOutputWithContext(ctx context.Context) GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput { + return o +} + +func (o GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput) Index(i pulumi.IntInput) GetBackendServiceLocalityLbPolicyCustomPolicyOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetBackendServiceLocalityLbPolicyCustomPolicy { + return vs[0].([]GetBackendServiceLocalityLbPolicyCustomPolicy)[vs[1].(int)] + }).(GetBackendServiceLocalityLbPolicyCustomPolicyOutput) +} + +type GetBackendServiceLocalityLbPolicyPolicy struct { + // The name of the Backend Service. + Name string `pulumi:"name"` +} + +// GetBackendServiceLocalityLbPolicyPolicyInput is an input type that accepts GetBackendServiceLocalityLbPolicyPolicyArgs and GetBackendServiceLocalityLbPolicyPolicyOutput values. +// You can construct a concrete instance of `GetBackendServiceLocalityLbPolicyPolicyInput` via: +// +// GetBackendServiceLocalityLbPolicyPolicyArgs{...} +type GetBackendServiceLocalityLbPolicyPolicyInput interface { + pulumi.Input + + ToGetBackendServiceLocalityLbPolicyPolicyOutput() GetBackendServiceLocalityLbPolicyPolicyOutput + ToGetBackendServiceLocalityLbPolicyPolicyOutputWithContext(context.Context) GetBackendServiceLocalityLbPolicyPolicyOutput +} + +type GetBackendServiceLocalityLbPolicyPolicyArgs struct { + // The name of the Backend Service. + Name pulumi.StringInput `pulumi:"name"` +} + +func (GetBackendServiceLocalityLbPolicyPolicyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetBackendServiceLocalityLbPolicyPolicy)(nil)).Elem() +} + +func (i GetBackendServiceLocalityLbPolicyPolicyArgs) ToGetBackendServiceLocalityLbPolicyPolicyOutput() GetBackendServiceLocalityLbPolicyPolicyOutput { + return i.ToGetBackendServiceLocalityLbPolicyPolicyOutputWithContext(context.Background()) +} + +func (i GetBackendServiceLocalityLbPolicyPolicyArgs) ToGetBackendServiceLocalityLbPolicyPolicyOutputWithContext(ctx context.Context) GetBackendServiceLocalityLbPolicyPolicyOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetBackendServiceLocalityLbPolicyPolicyOutput) +} + +// GetBackendServiceLocalityLbPolicyPolicyArrayInput is an input type that accepts GetBackendServiceLocalityLbPolicyPolicyArray and GetBackendServiceLocalityLbPolicyPolicyArrayOutput values. +// You can construct a concrete instance of `GetBackendServiceLocalityLbPolicyPolicyArrayInput` via: +// +// GetBackendServiceLocalityLbPolicyPolicyArray{ GetBackendServiceLocalityLbPolicyPolicyArgs{...} } +type GetBackendServiceLocalityLbPolicyPolicyArrayInput interface { + pulumi.Input + + ToGetBackendServiceLocalityLbPolicyPolicyArrayOutput() GetBackendServiceLocalityLbPolicyPolicyArrayOutput + ToGetBackendServiceLocalityLbPolicyPolicyArrayOutputWithContext(context.Context) GetBackendServiceLocalityLbPolicyPolicyArrayOutput +} + +type GetBackendServiceLocalityLbPolicyPolicyArray []GetBackendServiceLocalityLbPolicyPolicyInput + +func (GetBackendServiceLocalityLbPolicyPolicyArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetBackendServiceLocalityLbPolicyPolicy)(nil)).Elem() +} + +func (i GetBackendServiceLocalityLbPolicyPolicyArray) ToGetBackendServiceLocalityLbPolicyPolicyArrayOutput() GetBackendServiceLocalityLbPolicyPolicyArrayOutput { + return i.ToGetBackendServiceLocalityLbPolicyPolicyArrayOutputWithContext(context.Background()) +} + +func (i GetBackendServiceLocalityLbPolicyPolicyArray) ToGetBackendServiceLocalityLbPolicyPolicyArrayOutputWithContext(ctx context.Context) GetBackendServiceLocalityLbPolicyPolicyArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetBackendServiceLocalityLbPolicyPolicyArrayOutput) +} + +type GetBackendServiceLocalityLbPolicyPolicyOutput struct{ *pulumi.OutputState } + +func (GetBackendServiceLocalityLbPolicyPolicyOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetBackendServiceLocalityLbPolicyPolicy)(nil)).Elem() +} + +func (o GetBackendServiceLocalityLbPolicyPolicyOutput) ToGetBackendServiceLocalityLbPolicyPolicyOutput() GetBackendServiceLocalityLbPolicyPolicyOutput { + return o +} + +func (o GetBackendServiceLocalityLbPolicyPolicyOutput) ToGetBackendServiceLocalityLbPolicyPolicyOutputWithContext(ctx context.Context) GetBackendServiceLocalityLbPolicyPolicyOutput { + return o +} + +// The name of the Backend Service. +func (o GetBackendServiceLocalityLbPolicyPolicyOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetBackendServiceLocalityLbPolicyPolicy) string { return v.Name }).(pulumi.StringOutput) +} + +type GetBackendServiceLocalityLbPolicyPolicyArrayOutput struct{ *pulumi.OutputState } + +func (GetBackendServiceLocalityLbPolicyPolicyArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetBackendServiceLocalityLbPolicyPolicy)(nil)).Elem() +} + +func (o GetBackendServiceLocalityLbPolicyPolicyArrayOutput) ToGetBackendServiceLocalityLbPolicyPolicyArrayOutput() GetBackendServiceLocalityLbPolicyPolicyArrayOutput { + return o +} + +func (o GetBackendServiceLocalityLbPolicyPolicyArrayOutput) ToGetBackendServiceLocalityLbPolicyPolicyArrayOutputWithContext(ctx context.Context) GetBackendServiceLocalityLbPolicyPolicyArrayOutput { + return o +} + +func (o GetBackendServiceLocalityLbPolicyPolicyArrayOutput) Index(i pulumi.IntInput) GetBackendServiceLocalityLbPolicyPolicyOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetBackendServiceLocalityLbPolicyPolicy { + return vs[0].([]GetBackendServiceLocalityLbPolicyPolicy)[vs[1].(int)] + }).(GetBackendServiceLocalityLbPolicyPolicyOutput) +} + type GetBackendServiceLogConfig struct { Enable bool `pulumi:"enable"` SampleRate float64 `pulumi:"sampleRate"` @@ -86140,1065 +86918,6 @@ func (o GetHealthCheckHttpsHealthCheckArrayOutput) Index(i pulumi.IntInput) GetH }).(GetHealthCheckHttpsHealthCheckOutput) } -type GetHealthCheckLogConfig struct { - Enable bool `pulumi:"enable"` -} - -// GetHealthCheckLogConfigInput is an input type that accepts GetHealthCheckLogConfigArgs and GetHealthCheckLogConfigOutput values. -// You can construct a concrete instance of `GetHealthCheckLogConfigInput` via: -// -// GetHealthCheckLogConfigArgs{...} -type GetHealthCheckLogConfigInput interface { - pulumi.Input - - ToGetHealthCheckLogConfigOutput() GetHealthCheckLogConfigOutput - ToGetHealthCheckLogConfigOutputWithContext(context.Context) GetHealthCheckLogConfigOutput -} - -type GetHealthCheckLogConfigArgs struct { - Enable pulumi.BoolInput `pulumi:"enable"` -} - -func (GetHealthCheckLogConfigArgs) ElementType() reflect.Type { - return reflect.TypeOf((*GetHealthCheckLogConfig)(nil)).Elem() -} - -func (i GetHealthCheckLogConfigArgs) ToGetHealthCheckLogConfigOutput() GetHealthCheckLogConfigOutput { - return i.ToGetHealthCheckLogConfigOutputWithContext(context.Background()) -} - -func (i GetHealthCheckLogConfigArgs) ToGetHealthCheckLogConfigOutputWithContext(ctx context.Context) GetHealthCheckLogConfigOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetHealthCheckLogConfigOutput) -} - -// GetHealthCheckLogConfigArrayInput is an input type that accepts GetHealthCheckLogConfigArray and GetHealthCheckLogConfigArrayOutput values. -// You can construct a concrete instance of `GetHealthCheckLogConfigArrayInput` via: -// -// GetHealthCheckLogConfigArray{ GetHealthCheckLogConfigArgs{...} } -type GetHealthCheckLogConfigArrayInput interface { - pulumi.Input - - ToGetHealthCheckLogConfigArrayOutput() GetHealthCheckLogConfigArrayOutput - ToGetHealthCheckLogConfigArrayOutputWithContext(context.Context) GetHealthCheckLogConfigArrayOutput -} - -type GetHealthCheckLogConfigArray []GetHealthCheckLogConfigInput - -func (GetHealthCheckLogConfigArray) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetHealthCheckLogConfig)(nil)).Elem() -} - -func (i GetHealthCheckLogConfigArray) ToGetHealthCheckLogConfigArrayOutput() GetHealthCheckLogConfigArrayOutput { - return i.ToGetHealthCheckLogConfigArrayOutputWithContext(context.Background()) -} - -func (i GetHealthCheckLogConfigArray) ToGetHealthCheckLogConfigArrayOutputWithContext(ctx context.Context) GetHealthCheckLogConfigArrayOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetHealthCheckLogConfigArrayOutput) -} - -type GetHealthCheckLogConfigOutput struct{ *pulumi.OutputState } - -func (GetHealthCheckLogConfigOutput) ElementType() reflect.Type { - return reflect.TypeOf((*GetHealthCheckLogConfig)(nil)).Elem() -} - -func (o GetHealthCheckLogConfigOutput) ToGetHealthCheckLogConfigOutput() GetHealthCheckLogConfigOutput { - return o -} - -func (o GetHealthCheckLogConfigOutput) ToGetHealthCheckLogConfigOutputWithContext(ctx context.Context) GetHealthCheckLogConfigOutput { - return o -} - -func (o GetHealthCheckLogConfigOutput) Enable() pulumi.BoolOutput { - return o.ApplyT(func(v GetHealthCheckLogConfig) bool { return v.Enable }).(pulumi.BoolOutput) -} - -type GetHealthCheckLogConfigArrayOutput struct{ *pulumi.OutputState } - -func (GetHealthCheckLogConfigArrayOutput) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetHealthCheckLogConfig)(nil)).Elem() -} - -func (o GetHealthCheckLogConfigArrayOutput) ToGetHealthCheckLogConfigArrayOutput() GetHealthCheckLogConfigArrayOutput { - return o -} - -func (o GetHealthCheckLogConfigArrayOutput) ToGetHealthCheckLogConfigArrayOutputWithContext(ctx context.Context) GetHealthCheckLogConfigArrayOutput { - return o -} - -func (o GetHealthCheckLogConfigArrayOutput) Index(i pulumi.IntInput) GetHealthCheckLogConfigOutput { - return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetHealthCheckLogConfig { - return vs[0].([]GetHealthCheckLogConfig)[vs[1].(int)] - }).(GetHealthCheckLogConfigOutput) -} - -type GetHealthCheckSslHealthCheck struct { - Port int `pulumi:"port"` - PortName string `pulumi:"portName"` - PortSpecification string `pulumi:"portSpecification"` - ProxyHeader string `pulumi:"proxyHeader"` - Request string `pulumi:"request"` - Response string `pulumi:"response"` -} - -// GetHealthCheckSslHealthCheckInput is an input type that accepts GetHealthCheckSslHealthCheckArgs and GetHealthCheckSslHealthCheckOutput values. -// You can construct a concrete instance of `GetHealthCheckSslHealthCheckInput` via: -// -// GetHealthCheckSslHealthCheckArgs{...} -type GetHealthCheckSslHealthCheckInput interface { - pulumi.Input - - ToGetHealthCheckSslHealthCheckOutput() GetHealthCheckSslHealthCheckOutput - ToGetHealthCheckSslHealthCheckOutputWithContext(context.Context) GetHealthCheckSslHealthCheckOutput -} - -type GetHealthCheckSslHealthCheckArgs struct { - Port pulumi.IntInput `pulumi:"port"` - PortName pulumi.StringInput `pulumi:"portName"` - PortSpecification pulumi.StringInput `pulumi:"portSpecification"` - ProxyHeader pulumi.StringInput `pulumi:"proxyHeader"` - Request pulumi.StringInput `pulumi:"request"` - Response pulumi.StringInput `pulumi:"response"` -} - -func (GetHealthCheckSslHealthCheckArgs) ElementType() reflect.Type { - return reflect.TypeOf((*GetHealthCheckSslHealthCheck)(nil)).Elem() -} - -func (i GetHealthCheckSslHealthCheckArgs) ToGetHealthCheckSslHealthCheckOutput() GetHealthCheckSslHealthCheckOutput { - return i.ToGetHealthCheckSslHealthCheckOutputWithContext(context.Background()) -} - -func (i GetHealthCheckSslHealthCheckArgs) ToGetHealthCheckSslHealthCheckOutputWithContext(ctx context.Context) GetHealthCheckSslHealthCheckOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetHealthCheckSslHealthCheckOutput) -} - -// GetHealthCheckSslHealthCheckArrayInput is an input type that accepts GetHealthCheckSslHealthCheckArray and GetHealthCheckSslHealthCheckArrayOutput values. -// You can construct a concrete instance of `GetHealthCheckSslHealthCheckArrayInput` via: -// -// GetHealthCheckSslHealthCheckArray{ GetHealthCheckSslHealthCheckArgs{...} } -type GetHealthCheckSslHealthCheckArrayInput interface { - pulumi.Input - - ToGetHealthCheckSslHealthCheckArrayOutput() GetHealthCheckSslHealthCheckArrayOutput - ToGetHealthCheckSslHealthCheckArrayOutputWithContext(context.Context) GetHealthCheckSslHealthCheckArrayOutput -} - -type GetHealthCheckSslHealthCheckArray []GetHealthCheckSslHealthCheckInput - -func (GetHealthCheckSslHealthCheckArray) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetHealthCheckSslHealthCheck)(nil)).Elem() -} - -func (i GetHealthCheckSslHealthCheckArray) ToGetHealthCheckSslHealthCheckArrayOutput() GetHealthCheckSslHealthCheckArrayOutput { - return i.ToGetHealthCheckSslHealthCheckArrayOutputWithContext(context.Background()) -} - -func (i GetHealthCheckSslHealthCheckArray) ToGetHealthCheckSslHealthCheckArrayOutputWithContext(ctx context.Context) GetHealthCheckSslHealthCheckArrayOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetHealthCheckSslHealthCheckArrayOutput) -} - -type GetHealthCheckSslHealthCheckOutput struct{ *pulumi.OutputState } - -func (GetHealthCheckSslHealthCheckOutput) ElementType() reflect.Type { - return reflect.TypeOf((*GetHealthCheckSslHealthCheck)(nil)).Elem() -} - -func (o GetHealthCheckSslHealthCheckOutput) ToGetHealthCheckSslHealthCheckOutput() GetHealthCheckSslHealthCheckOutput { - return o -} - -func (o GetHealthCheckSslHealthCheckOutput) ToGetHealthCheckSslHealthCheckOutputWithContext(ctx context.Context) GetHealthCheckSslHealthCheckOutput { - return o -} - -func (o GetHealthCheckSslHealthCheckOutput) Port() pulumi.IntOutput { - return o.ApplyT(func(v GetHealthCheckSslHealthCheck) int { return v.Port }).(pulumi.IntOutput) -} - -func (o GetHealthCheckSslHealthCheckOutput) PortName() pulumi.StringOutput { - return o.ApplyT(func(v GetHealthCheckSslHealthCheck) string { return v.PortName }).(pulumi.StringOutput) -} - -func (o GetHealthCheckSslHealthCheckOutput) PortSpecification() pulumi.StringOutput { - return o.ApplyT(func(v GetHealthCheckSslHealthCheck) string { return v.PortSpecification }).(pulumi.StringOutput) -} - -func (o GetHealthCheckSslHealthCheckOutput) ProxyHeader() pulumi.StringOutput { - return o.ApplyT(func(v GetHealthCheckSslHealthCheck) string { return v.ProxyHeader }).(pulumi.StringOutput) -} - -func (o GetHealthCheckSslHealthCheckOutput) Request() pulumi.StringOutput { - return o.ApplyT(func(v GetHealthCheckSslHealthCheck) string { return v.Request }).(pulumi.StringOutput) -} - -func (o GetHealthCheckSslHealthCheckOutput) Response() pulumi.StringOutput { - return o.ApplyT(func(v GetHealthCheckSslHealthCheck) string { return v.Response }).(pulumi.StringOutput) -} - -type GetHealthCheckSslHealthCheckArrayOutput struct{ *pulumi.OutputState } - -func (GetHealthCheckSslHealthCheckArrayOutput) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetHealthCheckSslHealthCheck)(nil)).Elem() -} - -func (o GetHealthCheckSslHealthCheckArrayOutput) ToGetHealthCheckSslHealthCheckArrayOutput() GetHealthCheckSslHealthCheckArrayOutput { - return o -} - -func (o GetHealthCheckSslHealthCheckArrayOutput) ToGetHealthCheckSslHealthCheckArrayOutputWithContext(ctx context.Context) GetHealthCheckSslHealthCheckArrayOutput { - return o -} - -func (o GetHealthCheckSslHealthCheckArrayOutput) Index(i pulumi.IntInput) GetHealthCheckSslHealthCheckOutput { - return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetHealthCheckSslHealthCheck { - return vs[0].([]GetHealthCheckSslHealthCheck)[vs[1].(int)] - }).(GetHealthCheckSslHealthCheckOutput) -} - -type GetHealthCheckTcpHealthCheck struct { - Port int `pulumi:"port"` - PortName string `pulumi:"portName"` - PortSpecification string `pulumi:"portSpecification"` - ProxyHeader string `pulumi:"proxyHeader"` - Request string `pulumi:"request"` - Response string `pulumi:"response"` -} - -// GetHealthCheckTcpHealthCheckInput is an input type that accepts GetHealthCheckTcpHealthCheckArgs and GetHealthCheckTcpHealthCheckOutput values. -// You can construct a concrete instance of `GetHealthCheckTcpHealthCheckInput` via: -// -// GetHealthCheckTcpHealthCheckArgs{...} -type GetHealthCheckTcpHealthCheckInput interface { - pulumi.Input - - ToGetHealthCheckTcpHealthCheckOutput() GetHealthCheckTcpHealthCheckOutput - ToGetHealthCheckTcpHealthCheckOutputWithContext(context.Context) GetHealthCheckTcpHealthCheckOutput -} - -type GetHealthCheckTcpHealthCheckArgs struct { - Port pulumi.IntInput `pulumi:"port"` - PortName pulumi.StringInput `pulumi:"portName"` - PortSpecification pulumi.StringInput `pulumi:"portSpecification"` - ProxyHeader pulumi.StringInput `pulumi:"proxyHeader"` - Request pulumi.StringInput `pulumi:"request"` - Response pulumi.StringInput `pulumi:"response"` -} - -func (GetHealthCheckTcpHealthCheckArgs) ElementType() reflect.Type { - return reflect.TypeOf((*GetHealthCheckTcpHealthCheck)(nil)).Elem() -} - -func (i GetHealthCheckTcpHealthCheckArgs) ToGetHealthCheckTcpHealthCheckOutput() GetHealthCheckTcpHealthCheckOutput { - return i.ToGetHealthCheckTcpHealthCheckOutputWithContext(context.Background()) -} - -func (i GetHealthCheckTcpHealthCheckArgs) ToGetHealthCheckTcpHealthCheckOutputWithContext(ctx context.Context) GetHealthCheckTcpHealthCheckOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetHealthCheckTcpHealthCheckOutput) -} - -// GetHealthCheckTcpHealthCheckArrayInput is an input type that accepts GetHealthCheckTcpHealthCheckArray and GetHealthCheckTcpHealthCheckArrayOutput values. -// You can construct a concrete instance of `GetHealthCheckTcpHealthCheckArrayInput` via: -// -// GetHealthCheckTcpHealthCheckArray{ GetHealthCheckTcpHealthCheckArgs{...} } -type GetHealthCheckTcpHealthCheckArrayInput interface { - pulumi.Input - - ToGetHealthCheckTcpHealthCheckArrayOutput() GetHealthCheckTcpHealthCheckArrayOutput - ToGetHealthCheckTcpHealthCheckArrayOutputWithContext(context.Context) GetHealthCheckTcpHealthCheckArrayOutput -} - -type GetHealthCheckTcpHealthCheckArray []GetHealthCheckTcpHealthCheckInput - -func (GetHealthCheckTcpHealthCheckArray) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetHealthCheckTcpHealthCheck)(nil)).Elem() -} - -func (i GetHealthCheckTcpHealthCheckArray) ToGetHealthCheckTcpHealthCheckArrayOutput() GetHealthCheckTcpHealthCheckArrayOutput { - return i.ToGetHealthCheckTcpHealthCheckArrayOutputWithContext(context.Background()) -} - -func (i GetHealthCheckTcpHealthCheckArray) ToGetHealthCheckTcpHealthCheckArrayOutputWithContext(ctx context.Context) GetHealthCheckTcpHealthCheckArrayOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetHealthCheckTcpHealthCheckArrayOutput) -} - -type GetHealthCheckTcpHealthCheckOutput struct{ *pulumi.OutputState } - -func (GetHealthCheckTcpHealthCheckOutput) ElementType() reflect.Type { - return reflect.TypeOf((*GetHealthCheckTcpHealthCheck)(nil)).Elem() -} - -func (o GetHealthCheckTcpHealthCheckOutput) ToGetHealthCheckTcpHealthCheckOutput() GetHealthCheckTcpHealthCheckOutput { - return o -} - -func (o GetHealthCheckTcpHealthCheckOutput) ToGetHealthCheckTcpHealthCheckOutputWithContext(ctx context.Context) GetHealthCheckTcpHealthCheckOutput { - return o -} - -func (o GetHealthCheckTcpHealthCheckOutput) Port() pulumi.IntOutput { - return o.ApplyT(func(v GetHealthCheckTcpHealthCheck) int { return v.Port }).(pulumi.IntOutput) -} - -func (o GetHealthCheckTcpHealthCheckOutput) PortName() pulumi.StringOutput { - return o.ApplyT(func(v GetHealthCheckTcpHealthCheck) string { return v.PortName }).(pulumi.StringOutput) -} - -func (o GetHealthCheckTcpHealthCheckOutput) PortSpecification() pulumi.StringOutput { - return o.ApplyT(func(v GetHealthCheckTcpHealthCheck) string { return v.PortSpecification }).(pulumi.StringOutput) -} - -func (o GetHealthCheckTcpHealthCheckOutput) ProxyHeader() pulumi.StringOutput { - return o.ApplyT(func(v GetHealthCheckTcpHealthCheck) string { return v.ProxyHeader }).(pulumi.StringOutput) -} - -func (o GetHealthCheckTcpHealthCheckOutput) Request() pulumi.StringOutput { - return o.ApplyT(func(v GetHealthCheckTcpHealthCheck) string { return v.Request }).(pulumi.StringOutput) -} - -func (o GetHealthCheckTcpHealthCheckOutput) Response() pulumi.StringOutput { - return o.ApplyT(func(v GetHealthCheckTcpHealthCheck) string { return v.Response }).(pulumi.StringOutput) -} - -type GetHealthCheckTcpHealthCheckArrayOutput struct{ *pulumi.OutputState } - -func (GetHealthCheckTcpHealthCheckArrayOutput) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetHealthCheckTcpHealthCheck)(nil)).Elem() -} - -func (o GetHealthCheckTcpHealthCheckArrayOutput) ToGetHealthCheckTcpHealthCheckArrayOutput() GetHealthCheckTcpHealthCheckArrayOutput { - return o -} - -func (o GetHealthCheckTcpHealthCheckArrayOutput) ToGetHealthCheckTcpHealthCheckArrayOutputWithContext(ctx context.Context) GetHealthCheckTcpHealthCheckArrayOutput { - return o -} - -func (o GetHealthCheckTcpHealthCheckArrayOutput) Index(i pulumi.IntInput) GetHealthCheckTcpHealthCheckOutput { - return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetHealthCheckTcpHealthCheck { - return vs[0].([]GetHealthCheckTcpHealthCheck)[vs[1].(int)] - }).(GetHealthCheckTcpHealthCheckOutput) -} - -type GetInstanceAdvancedMachineFeature struct { - EnableNestedVirtualization bool `pulumi:"enableNestedVirtualization"` - ThreadsPerCore int `pulumi:"threadsPerCore"` - VisibleCoreCount int `pulumi:"visibleCoreCount"` -} - -// GetInstanceAdvancedMachineFeatureInput is an input type that accepts GetInstanceAdvancedMachineFeatureArgs and GetInstanceAdvancedMachineFeatureOutput values. -// You can construct a concrete instance of `GetInstanceAdvancedMachineFeatureInput` via: -// -// GetInstanceAdvancedMachineFeatureArgs{...} -type GetInstanceAdvancedMachineFeatureInput interface { - pulumi.Input - - ToGetInstanceAdvancedMachineFeatureOutput() GetInstanceAdvancedMachineFeatureOutput - ToGetInstanceAdvancedMachineFeatureOutputWithContext(context.Context) GetInstanceAdvancedMachineFeatureOutput -} - -type GetInstanceAdvancedMachineFeatureArgs struct { - EnableNestedVirtualization pulumi.BoolInput `pulumi:"enableNestedVirtualization"` - ThreadsPerCore pulumi.IntInput `pulumi:"threadsPerCore"` - VisibleCoreCount pulumi.IntInput `pulumi:"visibleCoreCount"` -} - -func (GetInstanceAdvancedMachineFeatureArgs) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceAdvancedMachineFeature)(nil)).Elem() -} - -func (i GetInstanceAdvancedMachineFeatureArgs) ToGetInstanceAdvancedMachineFeatureOutput() GetInstanceAdvancedMachineFeatureOutput { - return i.ToGetInstanceAdvancedMachineFeatureOutputWithContext(context.Background()) -} - -func (i GetInstanceAdvancedMachineFeatureArgs) ToGetInstanceAdvancedMachineFeatureOutputWithContext(ctx context.Context) GetInstanceAdvancedMachineFeatureOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceAdvancedMachineFeatureOutput) -} - -// GetInstanceAdvancedMachineFeatureArrayInput is an input type that accepts GetInstanceAdvancedMachineFeatureArray and GetInstanceAdvancedMachineFeatureArrayOutput values. -// You can construct a concrete instance of `GetInstanceAdvancedMachineFeatureArrayInput` via: -// -// GetInstanceAdvancedMachineFeatureArray{ GetInstanceAdvancedMachineFeatureArgs{...} } -type GetInstanceAdvancedMachineFeatureArrayInput interface { - pulumi.Input - - ToGetInstanceAdvancedMachineFeatureArrayOutput() GetInstanceAdvancedMachineFeatureArrayOutput - ToGetInstanceAdvancedMachineFeatureArrayOutputWithContext(context.Context) GetInstanceAdvancedMachineFeatureArrayOutput -} - -type GetInstanceAdvancedMachineFeatureArray []GetInstanceAdvancedMachineFeatureInput - -func (GetInstanceAdvancedMachineFeatureArray) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetInstanceAdvancedMachineFeature)(nil)).Elem() -} - -func (i GetInstanceAdvancedMachineFeatureArray) ToGetInstanceAdvancedMachineFeatureArrayOutput() GetInstanceAdvancedMachineFeatureArrayOutput { - return i.ToGetInstanceAdvancedMachineFeatureArrayOutputWithContext(context.Background()) -} - -func (i GetInstanceAdvancedMachineFeatureArray) ToGetInstanceAdvancedMachineFeatureArrayOutputWithContext(ctx context.Context) GetInstanceAdvancedMachineFeatureArrayOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceAdvancedMachineFeatureArrayOutput) -} - -type GetInstanceAdvancedMachineFeatureOutput struct{ *pulumi.OutputState } - -func (GetInstanceAdvancedMachineFeatureOutput) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceAdvancedMachineFeature)(nil)).Elem() -} - -func (o GetInstanceAdvancedMachineFeatureOutput) ToGetInstanceAdvancedMachineFeatureOutput() GetInstanceAdvancedMachineFeatureOutput { - return o -} - -func (o GetInstanceAdvancedMachineFeatureOutput) ToGetInstanceAdvancedMachineFeatureOutputWithContext(ctx context.Context) GetInstanceAdvancedMachineFeatureOutput { - return o -} - -func (o GetInstanceAdvancedMachineFeatureOutput) EnableNestedVirtualization() pulumi.BoolOutput { - return o.ApplyT(func(v GetInstanceAdvancedMachineFeature) bool { return v.EnableNestedVirtualization }).(pulumi.BoolOutput) -} - -func (o GetInstanceAdvancedMachineFeatureOutput) ThreadsPerCore() pulumi.IntOutput { - return o.ApplyT(func(v GetInstanceAdvancedMachineFeature) int { return v.ThreadsPerCore }).(pulumi.IntOutput) -} - -func (o GetInstanceAdvancedMachineFeatureOutput) VisibleCoreCount() pulumi.IntOutput { - return o.ApplyT(func(v GetInstanceAdvancedMachineFeature) int { return v.VisibleCoreCount }).(pulumi.IntOutput) -} - -type GetInstanceAdvancedMachineFeatureArrayOutput struct{ *pulumi.OutputState } - -func (GetInstanceAdvancedMachineFeatureArrayOutput) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetInstanceAdvancedMachineFeature)(nil)).Elem() -} - -func (o GetInstanceAdvancedMachineFeatureArrayOutput) ToGetInstanceAdvancedMachineFeatureArrayOutput() GetInstanceAdvancedMachineFeatureArrayOutput { - return o -} - -func (o GetInstanceAdvancedMachineFeatureArrayOutput) ToGetInstanceAdvancedMachineFeatureArrayOutputWithContext(ctx context.Context) GetInstanceAdvancedMachineFeatureArrayOutput { - return o -} - -func (o GetInstanceAdvancedMachineFeatureArrayOutput) Index(i pulumi.IntInput) GetInstanceAdvancedMachineFeatureOutput { - return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetInstanceAdvancedMachineFeature { - return vs[0].([]GetInstanceAdvancedMachineFeature)[vs[1].(int)] - }).(GetInstanceAdvancedMachineFeatureOutput) -} - -type GetInstanceAttachedDisk struct { - // Name with which the attached disk is accessible - // under `/dev/disk/by-id/` - DeviceName string `pulumi:"deviceName"` - DiskEncryptionKeyRaw string `pulumi:"diskEncryptionKeyRaw"` - DiskEncryptionKeySha256 string `pulumi:"diskEncryptionKeySha256"` - KmsKeySelfLink string `pulumi:"kmsKeySelfLink"` - // Read/write mode for the disk. One of `"READ_ONLY"` or `"READ_WRITE"`. - Mode string `pulumi:"mode"` - // The name or selfLink of the disk attached to this instance. - Source string `pulumi:"source"` -} - -// GetInstanceAttachedDiskInput is an input type that accepts GetInstanceAttachedDiskArgs and GetInstanceAttachedDiskOutput values. -// You can construct a concrete instance of `GetInstanceAttachedDiskInput` via: -// -// GetInstanceAttachedDiskArgs{...} -type GetInstanceAttachedDiskInput interface { - pulumi.Input - - ToGetInstanceAttachedDiskOutput() GetInstanceAttachedDiskOutput - ToGetInstanceAttachedDiskOutputWithContext(context.Context) GetInstanceAttachedDiskOutput -} - -type GetInstanceAttachedDiskArgs struct { - // Name with which the attached disk is accessible - // under `/dev/disk/by-id/` - DeviceName pulumi.StringInput `pulumi:"deviceName"` - DiskEncryptionKeyRaw pulumi.StringInput `pulumi:"diskEncryptionKeyRaw"` - DiskEncryptionKeySha256 pulumi.StringInput `pulumi:"diskEncryptionKeySha256"` - KmsKeySelfLink pulumi.StringInput `pulumi:"kmsKeySelfLink"` - // Read/write mode for the disk. One of `"READ_ONLY"` or `"READ_WRITE"`. - Mode pulumi.StringInput `pulumi:"mode"` - // The name or selfLink of the disk attached to this instance. - Source pulumi.StringInput `pulumi:"source"` -} - -func (GetInstanceAttachedDiskArgs) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceAttachedDisk)(nil)).Elem() -} - -func (i GetInstanceAttachedDiskArgs) ToGetInstanceAttachedDiskOutput() GetInstanceAttachedDiskOutput { - return i.ToGetInstanceAttachedDiskOutputWithContext(context.Background()) -} - -func (i GetInstanceAttachedDiskArgs) ToGetInstanceAttachedDiskOutputWithContext(ctx context.Context) GetInstanceAttachedDiskOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceAttachedDiskOutput) -} - -// GetInstanceAttachedDiskArrayInput is an input type that accepts GetInstanceAttachedDiskArray and GetInstanceAttachedDiskArrayOutput values. -// You can construct a concrete instance of `GetInstanceAttachedDiskArrayInput` via: -// -// GetInstanceAttachedDiskArray{ GetInstanceAttachedDiskArgs{...} } -type GetInstanceAttachedDiskArrayInput interface { - pulumi.Input - - ToGetInstanceAttachedDiskArrayOutput() GetInstanceAttachedDiskArrayOutput - ToGetInstanceAttachedDiskArrayOutputWithContext(context.Context) GetInstanceAttachedDiskArrayOutput -} - -type GetInstanceAttachedDiskArray []GetInstanceAttachedDiskInput - -func (GetInstanceAttachedDiskArray) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetInstanceAttachedDisk)(nil)).Elem() -} - -func (i GetInstanceAttachedDiskArray) ToGetInstanceAttachedDiskArrayOutput() GetInstanceAttachedDiskArrayOutput { - return i.ToGetInstanceAttachedDiskArrayOutputWithContext(context.Background()) -} - -func (i GetInstanceAttachedDiskArray) ToGetInstanceAttachedDiskArrayOutputWithContext(ctx context.Context) GetInstanceAttachedDiskArrayOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceAttachedDiskArrayOutput) -} - -type GetInstanceAttachedDiskOutput struct{ *pulumi.OutputState } - -func (GetInstanceAttachedDiskOutput) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceAttachedDisk)(nil)).Elem() -} - -func (o GetInstanceAttachedDiskOutput) ToGetInstanceAttachedDiskOutput() GetInstanceAttachedDiskOutput { - return o -} - -func (o GetInstanceAttachedDiskOutput) ToGetInstanceAttachedDiskOutputWithContext(ctx context.Context) GetInstanceAttachedDiskOutput { - return o -} - -// Name with which the attached disk is accessible -// under `/dev/disk/by-id/` -func (o GetInstanceAttachedDiskOutput) DeviceName() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceAttachedDisk) string { return v.DeviceName }).(pulumi.StringOutput) -} - -func (o GetInstanceAttachedDiskOutput) DiskEncryptionKeyRaw() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceAttachedDisk) string { return v.DiskEncryptionKeyRaw }).(pulumi.StringOutput) -} - -func (o GetInstanceAttachedDiskOutput) DiskEncryptionKeySha256() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceAttachedDisk) string { return v.DiskEncryptionKeySha256 }).(pulumi.StringOutput) -} - -func (o GetInstanceAttachedDiskOutput) KmsKeySelfLink() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceAttachedDisk) string { return v.KmsKeySelfLink }).(pulumi.StringOutput) -} - -// Read/write mode for the disk. One of `"READ_ONLY"` or `"READ_WRITE"`. -func (o GetInstanceAttachedDiskOutput) Mode() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceAttachedDisk) string { return v.Mode }).(pulumi.StringOutput) -} - -// The name or selfLink of the disk attached to this instance. -func (o GetInstanceAttachedDiskOutput) Source() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceAttachedDisk) string { return v.Source }).(pulumi.StringOutput) -} - -type GetInstanceAttachedDiskArrayOutput struct{ *pulumi.OutputState } - -func (GetInstanceAttachedDiskArrayOutput) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetInstanceAttachedDisk)(nil)).Elem() -} - -func (o GetInstanceAttachedDiskArrayOutput) ToGetInstanceAttachedDiskArrayOutput() GetInstanceAttachedDiskArrayOutput { - return o -} - -func (o GetInstanceAttachedDiskArrayOutput) ToGetInstanceAttachedDiskArrayOutputWithContext(ctx context.Context) GetInstanceAttachedDiskArrayOutput { - return o -} - -func (o GetInstanceAttachedDiskArrayOutput) Index(i pulumi.IntInput) GetInstanceAttachedDiskOutput { - return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetInstanceAttachedDisk { - return vs[0].([]GetInstanceAttachedDisk)[vs[1].(int)] - }).(GetInstanceAttachedDiskOutput) -} - -type GetInstanceBootDisk struct { - // Whether the disk will be auto-deleted when the instance is deleted. - AutoDelete bool `pulumi:"autoDelete"` - // Name with which the attached disk is accessible - // under `/dev/disk/by-id/` - DeviceName string `pulumi:"deviceName"` - DiskEncryptionKeyRaw string `pulumi:"diskEncryptionKeyRaw"` - DiskEncryptionKeySha256 string `pulumi:"diskEncryptionKeySha256"` - // Parameters with which a disk was created alongside the instance. - // Structure is documented below. - InitializeParams []GetInstanceBootDiskInitializeParam `pulumi:"initializeParams"` - KmsKeySelfLink string `pulumi:"kmsKeySelfLink"` - // Read/write mode for the disk. One of `"READ_ONLY"` or `"READ_WRITE"`. - Mode string `pulumi:"mode"` - // The name or selfLink of the disk attached to this instance. - Source string `pulumi:"source"` -} - -// GetInstanceBootDiskInput is an input type that accepts GetInstanceBootDiskArgs and GetInstanceBootDiskOutput values. -// You can construct a concrete instance of `GetInstanceBootDiskInput` via: -// -// GetInstanceBootDiskArgs{...} -type GetInstanceBootDiskInput interface { - pulumi.Input - - ToGetInstanceBootDiskOutput() GetInstanceBootDiskOutput - ToGetInstanceBootDiskOutputWithContext(context.Context) GetInstanceBootDiskOutput -} - -type GetInstanceBootDiskArgs struct { - // Whether the disk will be auto-deleted when the instance is deleted. - AutoDelete pulumi.BoolInput `pulumi:"autoDelete"` - // Name with which the attached disk is accessible - // under `/dev/disk/by-id/` - DeviceName pulumi.StringInput `pulumi:"deviceName"` - DiskEncryptionKeyRaw pulumi.StringInput `pulumi:"diskEncryptionKeyRaw"` - DiskEncryptionKeySha256 pulumi.StringInput `pulumi:"diskEncryptionKeySha256"` - // Parameters with which a disk was created alongside the instance. - // Structure is documented below. - InitializeParams GetInstanceBootDiskInitializeParamArrayInput `pulumi:"initializeParams"` - KmsKeySelfLink pulumi.StringInput `pulumi:"kmsKeySelfLink"` - // Read/write mode for the disk. One of `"READ_ONLY"` or `"READ_WRITE"`. - Mode pulumi.StringInput `pulumi:"mode"` - // The name or selfLink of the disk attached to this instance. - Source pulumi.StringInput `pulumi:"source"` -} - -func (GetInstanceBootDiskArgs) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceBootDisk)(nil)).Elem() -} - -func (i GetInstanceBootDiskArgs) ToGetInstanceBootDiskOutput() GetInstanceBootDiskOutput { - return i.ToGetInstanceBootDiskOutputWithContext(context.Background()) -} - -func (i GetInstanceBootDiskArgs) ToGetInstanceBootDiskOutputWithContext(ctx context.Context) GetInstanceBootDiskOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceBootDiskOutput) -} - -// GetInstanceBootDiskArrayInput is an input type that accepts GetInstanceBootDiskArray and GetInstanceBootDiskArrayOutput values. -// You can construct a concrete instance of `GetInstanceBootDiskArrayInput` via: -// -// GetInstanceBootDiskArray{ GetInstanceBootDiskArgs{...} } -type GetInstanceBootDiskArrayInput interface { - pulumi.Input - - ToGetInstanceBootDiskArrayOutput() GetInstanceBootDiskArrayOutput - ToGetInstanceBootDiskArrayOutputWithContext(context.Context) GetInstanceBootDiskArrayOutput -} - -type GetInstanceBootDiskArray []GetInstanceBootDiskInput - -func (GetInstanceBootDiskArray) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetInstanceBootDisk)(nil)).Elem() -} - -func (i GetInstanceBootDiskArray) ToGetInstanceBootDiskArrayOutput() GetInstanceBootDiskArrayOutput { - return i.ToGetInstanceBootDiskArrayOutputWithContext(context.Background()) -} - -func (i GetInstanceBootDiskArray) ToGetInstanceBootDiskArrayOutputWithContext(ctx context.Context) GetInstanceBootDiskArrayOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceBootDiskArrayOutput) -} - -type GetInstanceBootDiskOutput struct{ *pulumi.OutputState } - -func (GetInstanceBootDiskOutput) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceBootDisk)(nil)).Elem() -} - -func (o GetInstanceBootDiskOutput) ToGetInstanceBootDiskOutput() GetInstanceBootDiskOutput { - return o -} - -func (o GetInstanceBootDiskOutput) ToGetInstanceBootDiskOutputWithContext(ctx context.Context) GetInstanceBootDiskOutput { - return o -} - -// Whether the disk will be auto-deleted when the instance is deleted. -func (o GetInstanceBootDiskOutput) AutoDelete() pulumi.BoolOutput { - return o.ApplyT(func(v GetInstanceBootDisk) bool { return v.AutoDelete }).(pulumi.BoolOutput) -} - -// Name with which the attached disk is accessible -// under `/dev/disk/by-id/` -func (o GetInstanceBootDiskOutput) DeviceName() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceBootDisk) string { return v.DeviceName }).(pulumi.StringOutput) -} - -func (o GetInstanceBootDiskOutput) DiskEncryptionKeyRaw() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceBootDisk) string { return v.DiskEncryptionKeyRaw }).(pulumi.StringOutput) -} - -func (o GetInstanceBootDiskOutput) DiskEncryptionKeySha256() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceBootDisk) string { return v.DiskEncryptionKeySha256 }).(pulumi.StringOutput) -} - -// Parameters with which a disk was created alongside the instance. -// Structure is documented below. -func (o GetInstanceBootDiskOutput) InitializeParams() GetInstanceBootDiskInitializeParamArrayOutput { - return o.ApplyT(func(v GetInstanceBootDisk) []GetInstanceBootDiskInitializeParam { return v.InitializeParams }).(GetInstanceBootDiskInitializeParamArrayOutput) -} - -func (o GetInstanceBootDiskOutput) KmsKeySelfLink() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceBootDisk) string { return v.KmsKeySelfLink }).(pulumi.StringOutput) -} - -// Read/write mode for the disk. One of `"READ_ONLY"` or `"READ_WRITE"`. -func (o GetInstanceBootDiskOutput) Mode() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceBootDisk) string { return v.Mode }).(pulumi.StringOutput) -} - -// The name or selfLink of the disk attached to this instance. -func (o GetInstanceBootDiskOutput) Source() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceBootDisk) string { return v.Source }).(pulumi.StringOutput) -} - -type GetInstanceBootDiskArrayOutput struct{ *pulumi.OutputState } - -func (GetInstanceBootDiskArrayOutput) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetInstanceBootDisk)(nil)).Elem() -} - -func (o GetInstanceBootDiskArrayOutput) ToGetInstanceBootDiskArrayOutput() GetInstanceBootDiskArrayOutput { - return o -} - -func (o GetInstanceBootDiskArrayOutput) ToGetInstanceBootDiskArrayOutputWithContext(ctx context.Context) GetInstanceBootDiskArrayOutput { - return o -} - -func (o GetInstanceBootDiskArrayOutput) Index(i pulumi.IntInput) GetInstanceBootDiskOutput { - return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetInstanceBootDisk { - return vs[0].([]GetInstanceBootDisk)[vs[1].(int)] - }).(GetInstanceBootDiskOutput) -} - -type GetInstanceBootDiskInitializeParam struct { - // The image from which this disk was initialised. - Image string `pulumi:"image"` - // A set of key/value label pairs assigned to the disk. - Labels map[string]interface{} `pulumi:"labels"` - // The size of the image in gigabytes. - Size int `pulumi:"size"` - // The accelerator type resource exposed to this instance. E.g. `nvidia-tesla-k80`. - Type string `pulumi:"type"` -} - -// GetInstanceBootDiskInitializeParamInput is an input type that accepts GetInstanceBootDiskInitializeParamArgs and GetInstanceBootDiskInitializeParamOutput values. -// You can construct a concrete instance of `GetInstanceBootDiskInitializeParamInput` via: -// -// GetInstanceBootDiskInitializeParamArgs{...} -type GetInstanceBootDiskInitializeParamInput interface { - pulumi.Input - - ToGetInstanceBootDiskInitializeParamOutput() GetInstanceBootDiskInitializeParamOutput - ToGetInstanceBootDiskInitializeParamOutputWithContext(context.Context) GetInstanceBootDiskInitializeParamOutput -} - -type GetInstanceBootDiskInitializeParamArgs struct { - // The image from which this disk was initialised. - Image pulumi.StringInput `pulumi:"image"` - // A set of key/value label pairs assigned to the disk. - Labels pulumi.MapInput `pulumi:"labels"` - // The size of the image in gigabytes. - Size pulumi.IntInput `pulumi:"size"` - // The accelerator type resource exposed to this instance. E.g. `nvidia-tesla-k80`. - Type pulumi.StringInput `pulumi:"type"` -} - -func (GetInstanceBootDiskInitializeParamArgs) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceBootDiskInitializeParam)(nil)).Elem() -} - -func (i GetInstanceBootDiskInitializeParamArgs) ToGetInstanceBootDiskInitializeParamOutput() GetInstanceBootDiskInitializeParamOutput { - return i.ToGetInstanceBootDiskInitializeParamOutputWithContext(context.Background()) -} - -func (i GetInstanceBootDiskInitializeParamArgs) ToGetInstanceBootDiskInitializeParamOutputWithContext(ctx context.Context) GetInstanceBootDiskInitializeParamOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceBootDiskInitializeParamOutput) -} - -// GetInstanceBootDiskInitializeParamArrayInput is an input type that accepts GetInstanceBootDiskInitializeParamArray and GetInstanceBootDiskInitializeParamArrayOutput values. -// You can construct a concrete instance of `GetInstanceBootDiskInitializeParamArrayInput` via: -// -// GetInstanceBootDiskInitializeParamArray{ GetInstanceBootDiskInitializeParamArgs{...} } -type GetInstanceBootDiskInitializeParamArrayInput interface { - pulumi.Input - - ToGetInstanceBootDiskInitializeParamArrayOutput() GetInstanceBootDiskInitializeParamArrayOutput - ToGetInstanceBootDiskInitializeParamArrayOutputWithContext(context.Context) GetInstanceBootDiskInitializeParamArrayOutput -} - -type GetInstanceBootDiskInitializeParamArray []GetInstanceBootDiskInitializeParamInput - -func (GetInstanceBootDiskInitializeParamArray) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetInstanceBootDiskInitializeParam)(nil)).Elem() -} - -func (i GetInstanceBootDiskInitializeParamArray) ToGetInstanceBootDiskInitializeParamArrayOutput() GetInstanceBootDiskInitializeParamArrayOutput { - return i.ToGetInstanceBootDiskInitializeParamArrayOutputWithContext(context.Background()) -} - -func (i GetInstanceBootDiskInitializeParamArray) ToGetInstanceBootDiskInitializeParamArrayOutputWithContext(ctx context.Context) GetInstanceBootDiskInitializeParamArrayOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceBootDiskInitializeParamArrayOutput) -} - -type GetInstanceBootDiskInitializeParamOutput struct{ *pulumi.OutputState } - -func (GetInstanceBootDiskInitializeParamOutput) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceBootDiskInitializeParam)(nil)).Elem() -} - -func (o GetInstanceBootDiskInitializeParamOutput) ToGetInstanceBootDiskInitializeParamOutput() GetInstanceBootDiskInitializeParamOutput { - return o -} - -func (o GetInstanceBootDiskInitializeParamOutput) ToGetInstanceBootDiskInitializeParamOutputWithContext(ctx context.Context) GetInstanceBootDiskInitializeParamOutput { - return o -} - -// The image from which this disk was initialised. -func (o GetInstanceBootDiskInitializeParamOutput) Image() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceBootDiskInitializeParam) string { return v.Image }).(pulumi.StringOutput) -} - -// A set of key/value label pairs assigned to the disk. -func (o GetInstanceBootDiskInitializeParamOutput) Labels() pulumi.MapOutput { - return o.ApplyT(func(v GetInstanceBootDiskInitializeParam) map[string]interface{} { return v.Labels }).(pulumi.MapOutput) -} - -// The size of the image in gigabytes. -func (o GetInstanceBootDiskInitializeParamOutput) Size() pulumi.IntOutput { - return o.ApplyT(func(v GetInstanceBootDiskInitializeParam) int { return v.Size }).(pulumi.IntOutput) -} - -// The accelerator type resource exposed to this instance. E.g. `nvidia-tesla-k80`. -func (o GetInstanceBootDiskInitializeParamOutput) Type() pulumi.StringOutput { - return o.ApplyT(func(v GetInstanceBootDiskInitializeParam) string { return v.Type }).(pulumi.StringOutput) -} - -type GetInstanceBootDiskInitializeParamArrayOutput struct{ *pulumi.OutputState } - -func (GetInstanceBootDiskInitializeParamArrayOutput) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetInstanceBootDiskInitializeParam)(nil)).Elem() -} - -func (o GetInstanceBootDiskInitializeParamArrayOutput) ToGetInstanceBootDiskInitializeParamArrayOutput() GetInstanceBootDiskInitializeParamArrayOutput { - return o -} - -func (o GetInstanceBootDiskInitializeParamArrayOutput) ToGetInstanceBootDiskInitializeParamArrayOutputWithContext(ctx context.Context) GetInstanceBootDiskInitializeParamArrayOutput { - return o -} - -func (o GetInstanceBootDiskInitializeParamArrayOutput) Index(i pulumi.IntInput) GetInstanceBootDiskInitializeParamOutput { - return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetInstanceBootDiskInitializeParam { - return vs[0].([]GetInstanceBootDiskInitializeParam)[vs[1].(int)] - }).(GetInstanceBootDiskInitializeParamOutput) -} - -type GetInstanceConfidentialInstanceConfig struct { - EnableConfidentialCompute bool `pulumi:"enableConfidentialCompute"` -} - -// GetInstanceConfidentialInstanceConfigInput is an input type that accepts GetInstanceConfidentialInstanceConfigArgs and GetInstanceConfidentialInstanceConfigOutput values. -// You can construct a concrete instance of `GetInstanceConfidentialInstanceConfigInput` via: -// -// GetInstanceConfidentialInstanceConfigArgs{...} -type GetInstanceConfidentialInstanceConfigInput interface { - pulumi.Input - - ToGetInstanceConfidentialInstanceConfigOutput() GetInstanceConfidentialInstanceConfigOutput - ToGetInstanceConfidentialInstanceConfigOutputWithContext(context.Context) GetInstanceConfidentialInstanceConfigOutput -} - -type GetInstanceConfidentialInstanceConfigArgs struct { - EnableConfidentialCompute pulumi.BoolInput `pulumi:"enableConfidentialCompute"` -} - -func (GetInstanceConfidentialInstanceConfigArgs) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceConfidentialInstanceConfig)(nil)).Elem() -} - -func (i GetInstanceConfidentialInstanceConfigArgs) ToGetInstanceConfidentialInstanceConfigOutput() GetInstanceConfidentialInstanceConfigOutput { - return i.ToGetInstanceConfidentialInstanceConfigOutputWithContext(context.Background()) -} - -func (i GetInstanceConfidentialInstanceConfigArgs) ToGetInstanceConfidentialInstanceConfigOutputWithContext(ctx context.Context) GetInstanceConfidentialInstanceConfigOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceConfidentialInstanceConfigOutput) -} - -// GetInstanceConfidentialInstanceConfigArrayInput is an input type that accepts GetInstanceConfidentialInstanceConfigArray and GetInstanceConfidentialInstanceConfigArrayOutput values. -// You can construct a concrete instance of `GetInstanceConfidentialInstanceConfigArrayInput` via: -// -// GetInstanceConfidentialInstanceConfigArray{ GetInstanceConfidentialInstanceConfigArgs{...} } -type GetInstanceConfidentialInstanceConfigArrayInput interface { - pulumi.Input - - ToGetInstanceConfidentialInstanceConfigArrayOutput() GetInstanceConfidentialInstanceConfigArrayOutput - ToGetInstanceConfidentialInstanceConfigArrayOutputWithContext(context.Context) GetInstanceConfidentialInstanceConfigArrayOutput -} - -type GetInstanceConfidentialInstanceConfigArray []GetInstanceConfidentialInstanceConfigInput - -func (GetInstanceConfidentialInstanceConfigArray) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetInstanceConfidentialInstanceConfig)(nil)).Elem() -} - -func (i GetInstanceConfidentialInstanceConfigArray) ToGetInstanceConfidentialInstanceConfigArrayOutput() GetInstanceConfidentialInstanceConfigArrayOutput { - return i.ToGetInstanceConfidentialInstanceConfigArrayOutputWithContext(context.Background()) -} - -func (i GetInstanceConfidentialInstanceConfigArray) ToGetInstanceConfidentialInstanceConfigArrayOutputWithContext(ctx context.Context) GetInstanceConfidentialInstanceConfigArrayOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceConfidentialInstanceConfigArrayOutput) -} - -type GetInstanceConfidentialInstanceConfigOutput struct{ *pulumi.OutputState } - -func (GetInstanceConfidentialInstanceConfigOutput) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceConfidentialInstanceConfig)(nil)).Elem() -} - -func (o GetInstanceConfidentialInstanceConfigOutput) ToGetInstanceConfidentialInstanceConfigOutput() GetInstanceConfidentialInstanceConfigOutput { - return o -} - -func (o GetInstanceConfidentialInstanceConfigOutput) ToGetInstanceConfidentialInstanceConfigOutputWithContext(ctx context.Context) GetInstanceConfidentialInstanceConfigOutput { - return o -} - -func (o GetInstanceConfidentialInstanceConfigOutput) EnableConfidentialCompute() pulumi.BoolOutput { - return o.ApplyT(func(v GetInstanceConfidentialInstanceConfig) bool { return v.EnableConfidentialCompute }).(pulumi.BoolOutput) -} - -type GetInstanceConfidentialInstanceConfigArrayOutput struct{ *pulumi.OutputState } - -func (GetInstanceConfidentialInstanceConfigArrayOutput) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetInstanceConfidentialInstanceConfig)(nil)).Elem() -} - -func (o GetInstanceConfidentialInstanceConfigArrayOutput) ToGetInstanceConfidentialInstanceConfigArrayOutput() GetInstanceConfidentialInstanceConfigArrayOutput { - return o -} - -func (o GetInstanceConfidentialInstanceConfigArrayOutput) ToGetInstanceConfidentialInstanceConfigArrayOutputWithContext(ctx context.Context) GetInstanceConfidentialInstanceConfigArrayOutput { - return o -} - -func (o GetInstanceConfidentialInstanceConfigArrayOutput) Index(i pulumi.IntInput) GetInstanceConfidentialInstanceConfigOutput { - return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetInstanceConfidentialInstanceConfig { - return vs[0].([]GetInstanceConfidentialInstanceConfig)[vs[1].(int)] - }).(GetInstanceConfidentialInstanceConfigOutput) -} - -type GetInstanceGroupManagerAllInstancesConfig struct { - Labels map[string]string `pulumi:"labels"` - Metadata map[string]string `pulumi:"metadata"` -} - -// GetInstanceGroupManagerAllInstancesConfigInput is an input type that accepts GetInstanceGroupManagerAllInstancesConfigArgs and GetInstanceGroupManagerAllInstancesConfigOutput values. -// You can construct a concrete instance of `GetInstanceGroupManagerAllInstancesConfigInput` via: -// -// GetInstanceGroupManagerAllInstancesConfigArgs{...} -type GetInstanceGroupManagerAllInstancesConfigInput interface { - pulumi.Input - - ToGetInstanceGroupManagerAllInstancesConfigOutput() GetInstanceGroupManagerAllInstancesConfigOutput - ToGetInstanceGroupManagerAllInstancesConfigOutputWithContext(context.Context) GetInstanceGroupManagerAllInstancesConfigOutput -} - -type GetInstanceGroupManagerAllInstancesConfigArgs struct { - Labels pulumi.StringMapInput `pulumi:"labels"` - Metadata pulumi.StringMapInput `pulumi:"metadata"` -} - -func (GetInstanceGroupManagerAllInstancesConfigArgs) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceGroupManagerAllInstancesConfig)(nil)).Elem() -} - -func (i GetInstanceGroupManagerAllInstancesConfigArgs) ToGetInstanceGroupManagerAllInstancesConfigOutput() GetInstanceGroupManagerAllInstancesConfigOutput { - return i.ToGetInstanceGroupManagerAllInstancesConfigOutputWithContext(context.Background()) -} - -func (i GetInstanceGroupManagerAllInstancesConfigArgs) ToGetInstanceGroupManagerAllInstancesConfigOutputWithContext(ctx context.Context) GetInstanceGroupManagerAllInstancesConfigOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceGroupManagerAllInstancesConfigOutput) -} - -// GetInstanceGroupManagerAllInstancesConfigArrayInput is an input type that accepts GetInstanceGroupManagerAllInstancesConfigArray and GetInstanceGroupManagerAllInstancesConfigArrayOutput values. -// You can construct a concrete instance of `GetInstanceGroupManagerAllInstancesConfigArrayInput` via: -// -// GetInstanceGroupManagerAllInstancesConfigArray{ GetInstanceGroupManagerAllInstancesConfigArgs{...} } -type GetInstanceGroupManagerAllInstancesConfigArrayInput interface { - pulumi.Input - - ToGetInstanceGroupManagerAllInstancesConfigArrayOutput() GetInstanceGroupManagerAllInstancesConfigArrayOutput - ToGetInstanceGroupManagerAllInstancesConfigArrayOutputWithContext(context.Context) GetInstanceGroupManagerAllInstancesConfigArrayOutput -} - -type GetInstanceGroupManagerAllInstancesConfigArray []GetInstanceGroupManagerAllInstancesConfigInput - -func (GetInstanceGroupManagerAllInstancesConfigArray) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetInstanceGroupManagerAllInstancesConfig)(nil)).Elem() -} - -func (i GetInstanceGroupManagerAllInstancesConfigArray) ToGetInstanceGroupManagerAllInstancesConfigArrayOutput() GetInstanceGroupManagerAllInstancesConfigArrayOutput { - return i.ToGetInstanceGroupManagerAllInstancesConfigArrayOutputWithContext(context.Background()) -} - -func (i GetInstanceGroupManagerAllInstancesConfigArray) ToGetInstanceGroupManagerAllInstancesConfigArrayOutputWithContext(ctx context.Context) GetInstanceGroupManagerAllInstancesConfigArrayOutput { - return pulumi.ToOutputWithContext(ctx, i).(GetInstanceGroupManagerAllInstancesConfigArrayOutput) -} - -type GetInstanceGroupManagerAllInstancesConfigOutput struct{ *pulumi.OutputState } - -func (GetInstanceGroupManagerAllInstancesConfigOutput) ElementType() reflect.Type { - return reflect.TypeOf((*GetInstanceGroupManagerAllInstancesConfig)(nil)).Elem() -} - -func (o GetInstanceGroupManagerAllInstancesConfigOutput) ToGetInstanceGroupManagerAllInstancesConfigOutput() GetInstanceGroupManagerAllInstancesConfigOutput { - return o -} - -func (o GetInstanceGroupManagerAllInstancesConfigOutput) ToGetInstanceGroupManagerAllInstancesConfigOutputWithContext(ctx context.Context) GetInstanceGroupManagerAllInstancesConfigOutput { - return o -} - -func (o GetInstanceGroupManagerAllInstancesConfigOutput) Labels() pulumi.StringMapOutput { - return o.ApplyT(func(v GetInstanceGroupManagerAllInstancesConfig) map[string]string { return v.Labels }).(pulumi.StringMapOutput) -} - -func (o GetInstanceGroupManagerAllInstancesConfigOutput) Metadata() pulumi.StringMapOutput { - return o.ApplyT(func(v GetInstanceGroupManagerAllInstancesConfig) map[string]string { return v.Metadata }).(pulumi.StringMapOutput) -} - -type GetInstanceGroupManagerAllInstancesConfigArrayOutput struct{ *pulumi.OutputState } - -func (GetInstanceGroupManagerAllInstancesConfigArrayOutput) ElementType() reflect.Type { - return reflect.TypeOf((*[]GetInstanceGroupManagerAllInstancesConfig)(nil)).Elem() -} - -func (o GetInstanceGroupManagerAllInstancesConfigArrayOutput) ToGetInstanceGroupManagerAllInstancesConfigArrayOutput() GetInstanceGroupManagerAllInstancesConfigArrayOutput { - return o -} - -func (o GetInstanceGroupManagerAllInstancesConfigArrayOutput) ToGetInstanceGroupManagerAllInstancesConfigArrayOutputWithContext(ctx context.Context) GetInstanceGroupManagerAllInstancesConfigArrayOutput { - return o -} - -func (o GetInstanceGroupManagerAllInstancesConfigArrayOutput) Index(i pulumi.IntInput) GetInstanceGroupManagerAllInstancesConfigOutput { - return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetInstanceGroupManagerAllInstancesConfig { - return vs[0].([]GetInstanceGroupManagerAllInstancesConfig)[vs[1].(int)] - }).(GetInstanceGroupManagerAllInstancesConfigOutput) -} - func init() { pulumi.RegisterInputType(reflect.TypeOf((*AutoscalarAutoscalingPolicyInput)(nil)).Elem(), AutoscalarAutoscalingPolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*AutoscalarAutoscalingPolicyPtrInput)(nil)).Elem(), AutoscalarAutoscalingPolicyArgs{}) @@ -87272,6 +86991,12 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*BackendServiceIamMemberConditionPtrInput)(nil)).Elem(), BackendServiceIamMemberConditionArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*BackendServiceIapInput)(nil)).Elem(), BackendServiceIapArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*BackendServiceIapPtrInput)(nil)).Elem(), BackendServiceIapArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*BackendServiceLocalityLbPolicyInput)(nil)).Elem(), BackendServiceLocalityLbPolicyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*BackendServiceLocalityLbPolicyArrayInput)(nil)).Elem(), BackendServiceLocalityLbPolicyArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*BackendServiceLocalityLbPolicyCustomPolicyInput)(nil)).Elem(), BackendServiceLocalityLbPolicyCustomPolicyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*BackendServiceLocalityLbPolicyCustomPolicyPtrInput)(nil)).Elem(), BackendServiceLocalityLbPolicyCustomPolicyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*BackendServiceLocalityLbPolicyPolicyInput)(nil)).Elem(), BackendServiceLocalityLbPolicyPolicyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*BackendServiceLocalityLbPolicyPolicyPtrInput)(nil)).Elem(), BackendServiceLocalityLbPolicyPolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*BackendServiceLogConfigInput)(nil)).Elem(), BackendServiceLogConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*BackendServiceLogConfigPtrInput)(nil)).Elem(), BackendServiceLogConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*BackendServiceOutlierDetectionInput)(nil)).Elem(), BackendServiceOutlierDetectionArgs{}) @@ -87546,6 +87271,10 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*NodeGroupAutoscalingPolicyPtrInput)(nil)).Elem(), NodeGroupAutoscalingPolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*NodeGroupMaintenanceWindowInput)(nil)).Elem(), NodeGroupMaintenanceWindowArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*NodeGroupMaintenanceWindowPtrInput)(nil)).Elem(), NodeGroupMaintenanceWindowArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*NodeGroupShareSettingsInput)(nil)).Elem(), NodeGroupShareSettingsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*NodeGroupShareSettingsPtrInput)(nil)).Elem(), NodeGroupShareSettingsArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*NodeGroupShareSettingsProjectMapInput)(nil)).Elem(), NodeGroupShareSettingsProjectMapArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*NodeGroupShareSettingsProjectMapArrayInput)(nil)).Elem(), NodeGroupShareSettingsProjectMapArray{}) pulumi.RegisterInputType(reflect.TypeOf((*NodeTemplateNodeTypeFlexibilityInput)(nil)).Elem(), NodeTemplateNodeTypeFlexibilityArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*NodeTemplateNodeTypeFlexibilityPtrInput)(nil)).Elem(), NodeTemplateNodeTypeFlexibilityArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*NodeTemplateServerBindingInput)(nil)).Elem(), NodeTemplateServerBindingArgs{}) @@ -87882,6 +87611,8 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*RouterStatusBestRoutesForRouterArrayInput)(nil)).Elem(), RouterStatusBestRoutesForRouterArray{}) pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigInput)(nil)).Elem(), SecurityPolicyAdaptiveProtectionConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigPtrInput)(nil)).Elem(), SecurityPolicyAdaptiveProtectionConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigInput)(nil)).Elem(), SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrInput)(nil)).Elem(), SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigInput)(nil)).Elem(), SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigPtrInput)(nil)).Elem(), SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*SecurityPolicyAdvancedOptionsConfigInput)(nil)).Elem(), SecurityPolicyAdvancedOptionsConfigArgs{}) @@ -88149,6 +87880,12 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetBackendServiceConsistentHashHttpCookyTtlArrayInput)(nil)).Elem(), GetBackendServiceConsistentHashHttpCookyTtlArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetBackendServiceIapInput)(nil)).Elem(), GetBackendServiceIapArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetBackendServiceIapArrayInput)(nil)).Elem(), GetBackendServiceIapArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetBackendServiceLocalityLbPolicyInput)(nil)).Elem(), GetBackendServiceLocalityLbPolicyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetBackendServiceLocalityLbPolicyArrayInput)(nil)).Elem(), GetBackendServiceLocalityLbPolicyArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetBackendServiceLocalityLbPolicyCustomPolicyInput)(nil)).Elem(), GetBackendServiceLocalityLbPolicyCustomPolicyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetBackendServiceLocalityLbPolicyCustomPolicyArrayInput)(nil)).Elem(), GetBackendServiceLocalityLbPolicyCustomPolicyArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetBackendServiceLocalityLbPolicyPolicyInput)(nil)).Elem(), GetBackendServiceLocalityLbPolicyPolicyArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetBackendServiceLocalityLbPolicyPolicyArrayInput)(nil)).Elem(), GetBackendServiceLocalityLbPolicyPolicyArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetBackendServiceLogConfigInput)(nil)).Elem(), GetBackendServiceLogConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetBackendServiceLogConfigArrayInput)(nil)).Elem(), GetBackendServiceLogConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetBackendServiceOutlierDetectionInput)(nil)).Elem(), GetBackendServiceOutlierDetectionArgs{}) @@ -88181,24 +87918,6 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckHttpHealthCheckArrayInput)(nil)).Elem(), GetHealthCheckHttpHealthCheckArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckHttpsHealthCheckInput)(nil)).Elem(), GetHealthCheckHttpsHealthCheckArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckHttpsHealthCheckArrayInput)(nil)).Elem(), GetHealthCheckHttpsHealthCheckArray{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckLogConfigInput)(nil)).Elem(), GetHealthCheckLogConfigArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckLogConfigArrayInput)(nil)).Elem(), GetHealthCheckLogConfigArray{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckSslHealthCheckInput)(nil)).Elem(), GetHealthCheckSslHealthCheckArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckSslHealthCheckArrayInput)(nil)).Elem(), GetHealthCheckSslHealthCheckArray{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckTcpHealthCheckInput)(nil)).Elem(), GetHealthCheckTcpHealthCheckArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckTcpHealthCheckArrayInput)(nil)).Elem(), GetHealthCheckTcpHealthCheckArray{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceAdvancedMachineFeatureInput)(nil)).Elem(), GetInstanceAdvancedMachineFeatureArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceAdvancedMachineFeatureArrayInput)(nil)).Elem(), GetInstanceAdvancedMachineFeatureArray{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceAttachedDiskInput)(nil)).Elem(), GetInstanceAttachedDiskArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceAttachedDiskArrayInput)(nil)).Elem(), GetInstanceAttachedDiskArray{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceBootDiskInput)(nil)).Elem(), GetInstanceBootDiskArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceBootDiskArrayInput)(nil)).Elem(), GetInstanceBootDiskArray{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceBootDiskInitializeParamInput)(nil)).Elem(), GetInstanceBootDiskInitializeParamArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceBootDiskInitializeParamArrayInput)(nil)).Elem(), GetInstanceBootDiskInitializeParamArray{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceConfidentialInstanceConfigInput)(nil)).Elem(), GetInstanceConfidentialInstanceConfigArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceConfidentialInstanceConfigArrayInput)(nil)).Elem(), GetInstanceConfidentialInstanceConfigArray{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerAllInstancesConfigInput)(nil)).Elem(), GetInstanceGroupManagerAllInstancesConfigArgs{}) - pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerAllInstancesConfigArrayInput)(nil)).Elem(), GetInstanceGroupManagerAllInstancesConfigArray{}) pulumi.RegisterOutputType(AutoscalarAutoscalingPolicyOutput{}) pulumi.RegisterOutputType(AutoscalarAutoscalingPolicyPtrOutput{}) pulumi.RegisterOutputType(AutoscalarAutoscalingPolicyCpuUtilizationOutput{}) @@ -88271,6 +87990,12 @@ func init() { pulumi.RegisterOutputType(BackendServiceIamMemberConditionPtrOutput{}) pulumi.RegisterOutputType(BackendServiceIapOutput{}) pulumi.RegisterOutputType(BackendServiceIapPtrOutput{}) + pulumi.RegisterOutputType(BackendServiceLocalityLbPolicyOutput{}) + pulumi.RegisterOutputType(BackendServiceLocalityLbPolicyArrayOutput{}) + pulumi.RegisterOutputType(BackendServiceLocalityLbPolicyCustomPolicyOutput{}) + pulumi.RegisterOutputType(BackendServiceLocalityLbPolicyCustomPolicyPtrOutput{}) + pulumi.RegisterOutputType(BackendServiceLocalityLbPolicyPolicyOutput{}) + pulumi.RegisterOutputType(BackendServiceLocalityLbPolicyPolicyPtrOutput{}) pulumi.RegisterOutputType(BackendServiceLogConfigOutput{}) pulumi.RegisterOutputType(BackendServiceLogConfigPtrOutput{}) pulumi.RegisterOutputType(BackendServiceOutlierDetectionOutput{}) @@ -88545,6 +88270,10 @@ func init() { pulumi.RegisterOutputType(NodeGroupAutoscalingPolicyPtrOutput{}) pulumi.RegisterOutputType(NodeGroupMaintenanceWindowOutput{}) pulumi.RegisterOutputType(NodeGroupMaintenanceWindowPtrOutput{}) + pulumi.RegisterOutputType(NodeGroupShareSettingsOutput{}) + pulumi.RegisterOutputType(NodeGroupShareSettingsPtrOutput{}) + pulumi.RegisterOutputType(NodeGroupShareSettingsProjectMapOutput{}) + pulumi.RegisterOutputType(NodeGroupShareSettingsProjectMapArrayOutput{}) pulumi.RegisterOutputType(NodeTemplateNodeTypeFlexibilityOutput{}) pulumi.RegisterOutputType(NodeTemplateNodeTypeFlexibilityPtrOutput{}) pulumi.RegisterOutputType(NodeTemplateServerBindingOutput{}) @@ -88881,6 +88610,8 @@ func init() { pulumi.RegisterOutputType(RouterStatusBestRoutesForRouterArrayOutput{}) pulumi.RegisterOutputType(SecurityPolicyAdaptiveProtectionConfigOutput{}) pulumi.RegisterOutputType(SecurityPolicyAdaptiveProtectionConfigPtrOutput{}) + pulumi.RegisterOutputType(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigOutput{}) + pulumi.RegisterOutputType(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigPtrOutput{}) pulumi.RegisterOutputType(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigOutput{}) pulumi.RegisterOutputType(SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigPtrOutput{}) pulumi.RegisterOutputType(SecurityPolicyAdvancedOptionsConfigOutput{}) @@ -89148,6 +88879,12 @@ func init() { pulumi.RegisterOutputType(GetBackendServiceConsistentHashHttpCookyTtlArrayOutput{}) pulumi.RegisterOutputType(GetBackendServiceIapOutput{}) pulumi.RegisterOutputType(GetBackendServiceIapArrayOutput{}) + pulumi.RegisterOutputType(GetBackendServiceLocalityLbPolicyOutput{}) + pulumi.RegisterOutputType(GetBackendServiceLocalityLbPolicyArrayOutput{}) + pulumi.RegisterOutputType(GetBackendServiceLocalityLbPolicyCustomPolicyOutput{}) + pulumi.RegisterOutputType(GetBackendServiceLocalityLbPolicyCustomPolicyArrayOutput{}) + pulumi.RegisterOutputType(GetBackendServiceLocalityLbPolicyPolicyOutput{}) + pulumi.RegisterOutputType(GetBackendServiceLocalityLbPolicyPolicyArrayOutput{}) pulumi.RegisterOutputType(GetBackendServiceLogConfigOutput{}) pulumi.RegisterOutputType(GetBackendServiceLogConfigArrayOutput{}) pulumi.RegisterOutputType(GetBackendServiceOutlierDetectionOutput{}) @@ -89180,22 +88917,4 @@ func init() { pulumi.RegisterOutputType(GetHealthCheckHttpHealthCheckArrayOutput{}) pulumi.RegisterOutputType(GetHealthCheckHttpsHealthCheckOutput{}) pulumi.RegisterOutputType(GetHealthCheckHttpsHealthCheckArrayOutput{}) - pulumi.RegisterOutputType(GetHealthCheckLogConfigOutput{}) - pulumi.RegisterOutputType(GetHealthCheckLogConfigArrayOutput{}) - pulumi.RegisterOutputType(GetHealthCheckSslHealthCheckOutput{}) - pulumi.RegisterOutputType(GetHealthCheckSslHealthCheckArrayOutput{}) - pulumi.RegisterOutputType(GetHealthCheckTcpHealthCheckOutput{}) - pulumi.RegisterOutputType(GetHealthCheckTcpHealthCheckArrayOutput{}) - pulumi.RegisterOutputType(GetInstanceAdvancedMachineFeatureOutput{}) - pulumi.RegisterOutputType(GetInstanceAdvancedMachineFeatureArrayOutput{}) - pulumi.RegisterOutputType(GetInstanceAttachedDiskOutput{}) - pulumi.RegisterOutputType(GetInstanceAttachedDiskArrayOutput{}) - pulumi.RegisterOutputType(GetInstanceBootDiskOutput{}) - pulumi.RegisterOutputType(GetInstanceBootDiskArrayOutput{}) - pulumi.RegisterOutputType(GetInstanceBootDiskInitializeParamOutput{}) - pulumi.RegisterOutputType(GetInstanceBootDiskInitializeParamArrayOutput{}) - pulumi.RegisterOutputType(GetInstanceConfidentialInstanceConfigOutput{}) - pulumi.RegisterOutputType(GetInstanceConfidentialInstanceConfigArrayOutput{}) - pulumi.RegisterOutputType(GetInstanceGroupManagerAllInstancesConfigOutput{}) - pulumi.RegisterOutputType(GetInstanceGroupManagerAllInstancesConfigArrayOutput{}) } diff --git a/sdk/go/gcp/compute/pulumiTypes1.go b/sdk/go/gcp/compute/pulumiTypes1.go index 22cbe8a6dd..80538a7022 100644 --- a/sdk/go/gcp/compute/pulumiTypes1.go +++ b/sdk/go/gcp/compute/pulumiTypes1.go @@ -10,6 +10,1065 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) +type GetHealthCheckLogConfig struct { + Enable bool `pulumi:"enable"` +} + +// GetHealthCheckLogConfigInput is an input type that accepts GetHealthCheckLogConfigArgs and GetHealthCheckLogConfigOutput values. +// You can construct a concrete instance of `GetHealthCheckLogConfigInput` via: +// +// GetHealthCheckLogConfigArgs{...} +type GetHealthCheckLogConfigInput interface { + pulumi.Input + + ToGetHealthCheckLogConfigOutput() GetHealthCheckLogConfigOutput + ToGetHealthCheckLogConfigOutputWithContext(context.Context) GetHealthCheckLogConfigOutput +} + +type GetHealthCheckLogConfigArgs struct { + Enable pulumi.BoolInput `pulumi:"enable"` +} + +func (GetHealthCheckLogConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetHealthCheckLogConfig)(nil)).Elem() +} + +func (i GetHealthCheckLogConfigArgs) ToGetHealthCheckLogConfigOutput() GetHealthCheckLogConfigOutput { + return i.ToGetHealthCheckLogConfigOutputWithContext(context.Background()) +} + +func (i GetHealthCheckLogConfigArgs) ToGetHealthCheckLogConfigOutputWithContext(ctx context.Context) GetHealthCheckLogConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetHealthCheckLogConfigOutput) +} + +// GetHealthCheckLogConfigArrayInput is an input type that accepts GetHealthCheckLogConfigArray and GetHealthCheckLogConfigArrayOutput values. +// You can construct a concrete instance of `GetHealthCheckLogConfigArrayInput` via: +// +// GetHealthCheckLogConfigArray{ GetHealthCheckLogConfigArgs{...} } +type GetHealthCheckLogConfigArrayInput interface { + pulumi.Input + + ToGetHealthCheckLogConfigArrayOutput() GetHealthCheckLogConfigArrayOutput + ToGetHealthCheckLogConfigArrayOutputWithContext(context.Context) GetHealthCheckLogConfigArrayOutput +} + +type GetHealthCheckLogConfigArray []GetHealthCheckLogConfigInput + +func (GetHealthCheckLogConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetHealthCheckLogConfig)(nil)).Elem() +} + +func (i GetHealthCheckLogConfigArray) ToGetHealthCheckLogConfigArrayOutput() GetHealthCheckLogConfigArrayOutput { + return i.ToGetHealthCheckLogConfigArrayOutputWithContext(context.Background()) +} + +func (i GetHealthCheckLogConfigArray) ToGetHealthCheckLogConfigArrayOutputWithContext(ctx context.Context) GetHealthCheckLogConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetHealthCheckLogConfigArrayOutput) +} + +type GetHealthCheckLogConfigOutput struct{ *pulumi.OutputState } + +func (GetHealthCheckLogConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetHealthCheckLogConfig)(nil)).Elem() +} + +func (o GetHealthCheckLogConfigOutput) ToGetHealthCheckLogConfigOutput() GetHealthCheckLogConfigOutput { + return o +} + +func (o GetHealthCheckLogConfigOutput) ToGetHealthCheckLogConfigOutputWithContext(ctx context.Context) GetHealthCheckLogConfigOutput { + return o +} + +func (o GetHealthCheckLogConfigOutput) Enable() pulumi.BoolOutput { + return o.ApplyT(func(v GetHealthCheckLogConfig) bool { return v.Enable }).(pulumi.BoolOutput) +} + +type GetHealthCheckLogConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetHealthCheckLogConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetHealthCheckLogConfig)(nil)).Elem() +} + +func (o GetHealthCheckLogConfigArrayOutput) ToGetHealthCheckLogConfigArrayOutput() GetHealthCheckLogConfigArrayOutput { + return o +} + +func (o GetHealthCheckLogConfigArrayOutput) ToGetHealthCheckLogConfigArrayOutputWithContext(ctx context.Context) GetHealthCheckLogConfigArrayOutput { + return o +} + +func (o GetHealthCheckLogConfigArrayOutput) Index(i pulumi.IntInput) GetHealthCheckLogConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetHealthCheckLogConfig { + return vs[0].([]GetHealthCheckLogConfig)[vs[1].(int)] + }).(GetHealthCheckLogConfigOutput) +} + +type GetHealthCheckSslHealthCheck struct { + Port int `pulumi:"port"` + PortName string `pulumi:"portName"` + PortSpecification string `pulumi:"portSpecification"` + ProxyHeader string `pulumi:"proxyHeader"` + Request string `pulumi:"request"` + Response string `pulumi:"response"` +} + +// GetHealthCheckSslHealthCheckInput is an input type that accepts GetHealthCheckSslHealthCheckArgs and GetHealthCheckSslHealthCheckOutput values. +// You can construct a concrete instance of `GetHealthCheckSslHealthCheckInput` via: +// +// GetHealthCheckSslHealthCheckArgs{...} +type GetHealthCheckSslHealthCheckInput interface { + pulumi.Input + + ToGetHealthCheckSslHealthCheckOutput() GetHealthCheckSslHealthCheckOutput + ToGetHealthCheckSslHealthCheckOutputWithContext(context.Context) GetHealthCheckSslHealthCheckOutput +} + +type GetHealthCheckSslHealthCheckArgs struct { + Port pulumi.IntInput `pulumi:"port"` + PortName pulumi.StringInput `pulumi:"portName"` + PortSpecification pulumi.StringInput `pulumi:"portSpecification"` + ProxyHeader pulumi.StringInput `pulumi:"proxyHeader"` + Request pulumi.StringInput `pulumi:"request"` + Response pulumi.StringInput `pulumi:"response"` +} + +func (GetHealthCheckSslHealthCheckArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetHealthCheckSslHealthCheck)(nil)).Elem() +} + +func (i GetHealthCheckSslHealthCheckArgs) ToGetHealthCheckSslHealthCheckOutput() GetHealthCheckSslHealthCheckOutput { + return i.ToGetHealthCheckSslHealthCheckOutputWithContext(context.Background()) +} + +func (i GetHealthCheckSslHealthCheckArgs) ToGetHealthCheckSslHealthCheckOutputWithContext(ctx context.Context) GetHealthCheckSslHealthCheckOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetHealthCheckSslHealthCheckOutput) +} + +// GetHealthCheckSslHealthCheckArrayInput is an input type that accepts GetHealthCheckSslHealthCheckArray and GetHealthCheckSslHealthCheckArrayOutput values. +// You can construct a concrete instance of `GetHealthCheckSslHealthCheckArrayInput` via: +// +// GetHealthCheckSslHealthCheckArray{ GetHealthCheckSslHealthCheckArgs{...} } +type GetHealthCheckSslHealthCheckArrayInput interface { + pulumi.Input + + ToGetHealthCheckSslHealthCheckArrayOutput() GetHealthCheckSslHealthCheckArrayOutput + ToGetHealthCheckSslHealthCheckArrayOutputWithContext(context.Context) GetHealthCheckSslHealthCheckArrayOutput +} + +type GetHealthCheckSslHealthCheckArray []GetHealthCheckSslHealthCheckInput + +func (GetHealthCheckSslHealthCheckArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetHealthCheckSslHealthCheck)(nil)).Elem() +} + +func (i GetHealthCheckSslHealthCheckArray) ToGetHealthCheckSslHealthCheckArrayOutput() GetHealthCheckSslHealthCheckArrayOutput { + return i.ToGetHealthCheckSslHealthCheckArrayOutputWithContext(context.Background()) +} + +func (i GetHealthCheckSslHealthCheckArray) ToGetHealthCheckSslHealthCheckArrayOutputWithContext(ctx context.Context) GetHealthCheckSslHealthCheckArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetHealthCheckSslHealthCheckArrayOutput) +} + +type GetHealthCheckSslHealthCheckOutput struct{ *pulumi.OutputState } + +func (GetHealthCheckSslHealthCheckOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetHealthCheckSslHealthCheck)(nil)).Elem() +} + +func (o GetHealthCheckSslHealthCheckOutput) ToGetHealthCheckSslHealthCheckOutput() GetHealthCheckSslHealthCheckOutput { + return o +} + +func (o GetHealthCheckSslHealthCheckOutput) ToGetHealthCheckSslHealthCheckOutputWithContext(ctx context.Context) GetHealthCheckSslHealthCheckOutput { + return o +} + +func (o GetHealthCheckSslHealthCheckOutput) Port() pulumi.IntOutput { + return o.ApplyT(func(v GetHealthCheckSslHealthCheck) int { return v.Port }).(pulumi.IntOutput) +} + +func (o GetHealthCheckSslHealthCheckOutput) PortName() pulumi.StringOutput { + return o.ApplyT(func(v GetHealthCheckSslHealthCheck) string { return v.PortName }).(pulumi.StringOutput) +} + +func (o GetHealthCheckSslHealthCheckOutput) PortSpecification() pulumi.StringOutput { + return o.ApplyT(func(v GetHealthCheckSslHealthCheck) string { return v.PortSpecification }).(pulumi.StringOutput) +} + +func (o GetHealthCheckSslHealthCheckOutput) ProxyHeader() pulumi.StringOutput { + return o.ApplyT(func(v GetHealthCheckSslHealthCheck) string { return v.ProxyHeader }).(pulumi.StringOutput) +} + +func (o GetHealthCheckSslHealthCheckOutput) Request() pulumi.StringOutput { + return o.ApplyT(func(v GetHealthCheckSslHealthCheck) string { return v.Request }).(pulumi.StringOutput) +} + +func (o GetHealthCheckSslHealthCheckOutput) Response() pulumi.StringOutput { + return o.ApplyT(func(v GetHealthCheckSslHealthCheck) string { return v.Response }).(pulumi.StringOutput) +} + +type GetHealthCheckSslHealthCheckArrayOutput struct{ *pulumi.OutputState } + +func (GetHealthCheckSslHealthCheckArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetHealthCheckSslHealthCheck)(nil)).Elem() +} + +func (o GetHealthCheckSslHealthCheckArrayOutput) ToGetHealthCheckSslHealthCheckArrayOutput() GetHealthCheckSslHealthCheckArrayOutput { + return o +} + +func (o GetHealthCheckSslHealthCheckArrayOutput) ToGetHealthCheckSslHealthCheckArrayOutputWithContext(ctx context.Context) GetHealthCheckSslHealthCheckArrayOutput { + return o +} + +func (o GetHealthCheckSslHealthCheckArrayOutput) Index(i pulumi.IntInput) GetHealthCheckSslHealthCheckOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetHealthCheckSslHealthCheck { + return vs[0].([]GetHealthCheckSslHealthCheck)[vs[1].(int)] + }).(GetHealthCheckSslHealthCheckOutput) +} + +type GetHealthCheckTcpHealthCheck struct { + Port int `pulumi:"port"` + PortName string `pulumi:"portName"` + PortSpecification string `pulumi:"portSpecification"` + ProxyHeader string `pulumi:"proxyHeader"` + Request string `pulumi:"request"` + Response string `pulumi:"response"` +} + +// GetHealthCheckTcpHealthCheckInput is an input type that accepts GetHealthCheckTcpHealthCheckArgs and GetHealthCheckTcpHealthCheckOutput values. +// You can construct a concrete instance of `GetHealthCheckTcpHealthCheckInput` via: +// +// GetHealthCheckTcpHealthCheckArgs{...} +type GetHealthCheckTcpHealthCheckInput interface { + pulumi.Input + + ToGetHealthCheckTcpHealthCheckOutput() GetHealthCheckTcpHealthCheckOutput + ToGetHealthCheckTcpHealthCheckOutputWithContext(context.Context) GetHealthCheckTcpHealthCheckOutput +} + +type GetHealthCheckTcpHealthCheckArgs struct { + Port pulumi.IntInput `pulumi:"port"` + PortName pulumi.StringInput `pulumi:"portName"` + PortSpecification pulumi.StringInput `pulumi:"portSpecification"` + ProxyHeader pulumi.StringInput `pulumi:"proxyHeader"` + Request pulumi.StringInput `pulumi:"request"` + Response pulumi.StringInput `pulumi:"response"` +} + +func (GetHealthCheckTcpHealthCheckArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetHealthCheckTcpHealthCheck)(nil)).Elem() +} + +func (i GetHealthCheckTcpHealthCheckArgs) ToGetHealthCheckTcpHealthCheckOutput() GetHealthCheckTcpHealthCheckOutput { + return i.ToGetHealthCheckTcpHealthCheckOutputWithContext(context.Background()) +} + +func (i GetHealthCheckTcpHealthCheckArgs) ToGetHealthCheckTcpHealthCheckOutputWithContext(ctx context.Context) GetHealthCheckTcpHealthCheckOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetHealthCheckTcpHealthCheckOutput) +} + +// GetHealthCheckTcpHealthCheckArrayInput is an input type that accepts GetHealthCheckTcpHealthCheckArray and GetHealthCheckTcpHealthCheckArrayOutput values. +// You can construct a concrete instance of `GetHealthCheckTcpHealthCheckArrayInput` via: +// +// GetHealthCheckTcpHealthCheckArray{ GetHealthCheckTcpHealthCheckArgs{...} } +type GetHealthCheckTcpHealthCheckArrayInput interface { + pulumi.Input + + ToGetHealthCheckTcpHealthCheckArrayOutput() GetHealthCheckTcpHealthCheckArrayOutput + ToGetHealthCheckTcpHealthCheckArrayOutputWithContext(context.Context) GetHealthCheckTcpHealthCheckArrayOutput +} + +type GetHealthCheckTcpHealthCheckArray []GetHealthCheckTcpHealthCheckInput + +func (GetHealthCheckTcpHealthCheckArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetHealthCheckTcpHealthCheck)(nil)).Elem() +} + +func (i GetHealthCheckTcpHealthCheckArray) ToGetHealthCheckTcpHealthCheckArrayOutput() GetHealthCheckTcpHealthCheckArrayOutput { + return i.ToGetHealthCheckTcpHealthCheckArrayOutputWithContext(context.Background()) +} + +func (i GetHealthCheckTcpHealthCheckArray) ToGetHealthCheckTcpHealthCheckArrayOutputWithContext(ctx context.Context) GetHealthCheckTcpHealthCheckArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetHealthCheckTcpHealthCheckArrayOutput) +} + +type GetHealthCheckTcpHealthCheckOutput struct{ *pulumi.OutputState } + +func (GetHealthCheckTcpHealthCheckOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetHealthCheckTcpHealthCheck)(nil)).Elem() +} + +func (o GetHealthCheckTcpHealthCheckOutput) ToGetHealthCheckTcpHealthCheckOutput() GetHealthCheckTcpHealthCheckOutput { + return o +} + +func (o GetHealthCheckTcpHealthCheckOutput) ToGetHealthCheckTcpHealthCheckOutputWithContext(ctx context.Context) GetHealthCheckTcpHealthCheckOutput { + return o +} + +func (o GetHealthCheckTcpHealthCheckOutput) Port() pulumi.IntOutput { + return o.ApplyT(func(v GetHealthCheckTcpHealthCheck) int { return v.Port }).(pulumi.IntOutput) +} + +func (o GetHealthCheckTcpHealthCheckOutput) PortName() pulumi.StringOutput { + return o.ApplyT(func(v GetHealthCheckTcpHealthCheck) string { return v.PortName }).(pulumi.StringOutput) +} + +func (o GetHealthCheckTcpHealthCheckOutput) PortSpecification() pulumi.StringOutput { + return o.ApplyT(func(v GetHealthCheckTcpHealthCheck) string { return v.PortSpecification }).(pulumi.StringOutput) +} + +func (o GetHealthCheckTcpHealthCheckOutput) ProxyHeader() pulumi.StringOutput { + return o.ApplyT(func(v GetHealthCheckTcpHealthCheck) string { return v.ProxyHeader }).(pulumi.StringOutput) +} + +func (o GetHealthCheckTcpHealthCheckOutput) Request() pulumi.StringOutput { + return o.ApplyT(func(v GetHealthCheckTcpHealthCheck) string { return v.Request }).(pulumi.StringOutput) +} + +func (o GetHealthCheckTcpHealthCheckOutput) Response() pulumi.StringOutput { + return o.ApplyT(func(v GetHealthCheckTcpHealthCheck) string { return v.Response }).(pulumi.StringOutput) +} + +type GetHealthCheckTcpHealthCheckArrayOutput struct{ *pulumi.OutputState } + +func (GetHealthCheckTcpHealthCheckArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetHealthCheckTcpHealthCheck)(nil)).Elem() +} + +func (o GetHealthCheckTcpHealthCheckArrayOutput) ToGetHealthCheckTcpHealthCheckArrayOutput() GetHealthCheckTcpHealthCheckArrayOutput { + return o +} + +func (o GetHealthCheckTcpHealthCheckArrayOutput) ToGetHealthCheckTcpHealthCheckArrayOutputWithContext(ctx context.Context) GetHealthCheckTcpHealthCheckArrayOutput { + return o +} + +func (o GetHealthCheckTcpHealthCheckArrayOutput) Index(i pulumi.IntInput) GetHealthCheckTcpHealthCheckOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetHealthCheckTcpHealthCheck { + return vs[0].([]GetHealthCheckTcpHealthCheck)[vs[1].(int)] + }).(GetHealthCheckTcpHealthCheckOutput) +} + +type GetInstanceAdvancedMachineFeature struct { + EnableNestedVirtualization bool `pulumi:"enableNestedVirtualization"` + ThreadsPerCore int `pulumi:"threadsPerCore"` + VisibleCoreCount int `pulumi:"visibleCoreCount"` +} + +// GetInstanceAdvancedMachineFeatureInput is an input type that accepts GetInstanceAdvancedMachineFeatureArgs and GetInstanceAdvancedMachineFeatureOutput values. +// You can construct a concrete instance of `GetInstanceAdvancedMachineFeatureInput` via: +// +// GetInstanceAdvancedMachineFeatureArgs{...} +type GetInstanceAdvancedMachineFeatureInput interface { + pulumi.Input + + ToGetInstanceAdvancedMachineFeatureOutput() GetInstanceAdvancedMachineFeatureOutput + ToGetInstanceAdvancedMachineFeatureOutputWithContext(context.Context) GetInstanceAdvancedMachineFeatureOutput +} + +type GetInstanceAdvancedMachineFeatureArgs struct { + EnableNestedVirtualization pulumi.BoolInput `pulumi:"enableNestedVirtualization"` + ThreadsPerCore pulumi.IntInput `pulumi:"threadsPerCore"` + VisibleCoreCount pulumi.IntInput `pulumi:"visibleCoreCount"` +} + +func (GetInstanceAdvancedMachineFeatureArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceAdvancedMachineFeature)(nil)).Elem() +} + +func (i GetInstanceAdvancedMachineFeatureArgs) ToGetInstanceAdvancedMachineFeatureOutput() GetInstanceAdvancedMachineFeatureOutput { + return i.ToGetInstanceAdvancedMachineFeatureOutputWithContext(context.Background()) +} + +func (i GetInstanceAdvancedMachineFeatureArgs) ToGetInstanceAdvancedMachineFeatureOutputWithContext(ctx context.Context) GetInstanceAdvancedMachineFeatureOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceAdvancedMachineFeatureOutput) +} + +// GetInstanceAdvancedMachineFeatureArrayInput is an input type that accepts GetInstanceAdvancedMachineFeatureArray and GetInstanceAdvancedMachineFeatureArrayOutput values. +// You can construct a concrete instance of `GetInstanceAdvancedMachineFeatureArrayInput` via: +// +// GetInstanceAdvancedMachineFeatureArray{ GetInstanceAdvancedMachineFeatureArgs{...} } +type GetInstanceAdvancedMachineFeatureArrayInput interface { + pulumi.Input + + ToGetInstanceAdvancedMachineFeatureArrayOutput() GetInstanceAdvancedMachineFeatureArrayOutput + ToGetInstanceAdvancedMachineFeatureArrayOutputWithContext(context.Context) GetInstanceAdvancedMachineFeatureArrayOutput +} + +type GetInstanceAdvancedMachineFeatureArray []GetInstanceAdvancedMachineFeatureInput + +func (GetInstanceAdvancedMachineFeatureArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceAdvancedMachineFeature)(nil)).Elem() +} + +func (i GetInstanceAdvancedMachineFeatureArray) ToGetInstanceAdvancedMachineFeatureArrayOutput() GetInstanceAdvancedMachineFeatureArrayOutput { + return i.ToGetInstanceAdvancedMachineFeatureArrayOutputWithContext(context.Background()) +} + +func (i GetInstanceAdvancedMachineFeatureArray) ToGetInstanceAdvancedMachineFeatureArrayOutputWithContext(ctx context.Context) GetInstanceAdvancedMachineFeatureArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceAdvancedMachineFeatureArrayOutput) +} + +type GetInstanceAdvancedMachineFeatureOutput struct{ *pulumi.OutputState } + +func (GetInstanceAdvancedMachineFeatureOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceAdvancedMachineFeature)(nil)).Elem() +} + +func (o GetInstanceAdvancedMachineFeatureOutput) ToGetInstanceAdvancedMachineFeatureOutput() GetInstanceAdvancedMachineFeatureOutput { + return o +} + +func (o GetInstanceAdvancedMachineFeatureOutput) ToGetInstanceAdvancedMachineFeatureOutputWithContext(ctx context.Context) GetInstanceAdvancedMachineFeatureOutput { + return o +} + +func (o GetInstanceAdvancedMachineFeatureOutput) EnableNestedVirtualization() pulumi.BoolOutput { + return o.ApplyT(func(v GetInstanceAdvancedMachineFeature) bool { return v.EnableNestedVirtualization }).(pulumi.BoolOutput) +} + +func (o GetInstanceAdvancedMachineFeatureOutput) ThreadsPerCore() pulumi.IntOutput { + return o.ApplyT(func(v GetInstanceAdvancedMachineFeature) int { return v.ThreadsPerCore }).(pulumi.IntOutput) +} + +func (o GetInstanceAdvancedMachineFeatureOutput) VisibleCoreCount() pulumi.IntOutput { + return o.ApplyT(func(v GetInstanceAdvancedMachineFeature) int { return v.VisibleCoreCount }).(pulumi.IntOutput) +} + +type GetInstanceAdvancedMachineFeatureArrayOutput struct{ *pulumi.OutputState } + +func (GetInstanceAdvancedMachineFeatureArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceAdvancedMachineFeature)(nil)).Elem() +} + +func (o GetInstanceAdvancedMachineFeatureArrayOutput) ToGetInstanceAdvancedMachineFeatureArrayOutput() GetInstanceAdvancedMachineFeatureArrayOutput { + return o +} + +func (o GetInstanceAdvancedMachineFeatureArrayOutput) ToGetInstanceAdvancedMachineFeatureArrayOutputWithContext(ctx context.Context) GetInstanceAdvancedMachineFeatureArrayOutput { + return o +} + +func (o GetInstanceAdvancedMachineFeatureArrayOutput) Index(i pulumi.IntInput) GetInstanceAdvancedMachineFeatureOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetInstanceAdvancedMachineFeature { + return vs[0].([]GetInstanceAdvancedMachineFeature)[vs[1].(int)] + }).(GetInstanceAdvancedMachineFeatureOutput) +} + +type GetInstanceAttachedDisk struct { + // Name with which the attached disk is accessible + // under `/dev/disk/by-id/` + DeviceName string `pulumi:"deviceName"` + DiskEncryptionKeyRaw string `pulumi:"diskEncryptionKeyRaw"` + DiskEncryptionKeySha256 string `pulumi:"diskEncryptionKeySha256"` + KmsKeySelfLink string `pulumi:"kmsKeySelfLink"` + // Read/write mode for the disk. One of `"READ_ONLY"` or `"READ_WRITE"`. + Mode string `pulumi:"mode"` + // The name or selfLink of the disk attached to this instance. + Source string `pulumi:"source"` +} + +// GetInstanceAttachedDiskInput is an input type that accepts GetInstanceAttachedDiskArgs and GetInstanceAttachedDiskOutput values. +// You can construct a concrete instance of `GetInstanceAttachedDiskInput` via: +// +// GetInstanceAttachedDiskArgs{...} +type GetInstanceAttachedDiskInput interface { + pulumi.Input + + ToGetInstanceAttachedDiskOutput() GetInstanceAttachedDiskOutput + ToGetInstanceAttachedDiskOutputWithContext(context.Context) GetInstanceAttachedDiskOutput +} + +type GetInstanceAttachedDiskArgs struct { + // Name with which the attached disk is accessible + // under `/dev/disk/by-id/` + DeviceName pulumi.StringInput `pulumi:"deviceName"` + DiskEncryptionKeyRaw pulumi.StringInput `pulumi:"diskEncryptionKeyRaw"` + DiskEncryptionKeySha256 pulumi.StringInput `pulumi:"diskEncryptionKeySha256"` + KmsKeySelfLink pulumi.StringInput `pulumi:"kmsKeySelfLink"` + // Read/write mode for the disk. One of `"READ_ONLY"` or `"READ_WRITE"`. + Mode pulumi.StringInput `pulumi:"mode"` + // The name or selfLink of the disk attached to this instance. + Source pulumi.StringInput `pulumi:"source"` +} + +func (GetInstanceAttachedDiskArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceAttachedDisk)(nil)).Elem() +} + +func (i GetInstanceAttachedDiskArgs) ToGetInstanceAttachedDiskOutput() GetInstanceAttachedDiskOutput { + return i.ToGetInstanceAttachedDiskOutputWithContext(context.Background()) +} + +func (i GetInstanceAttachedDiskArgs) ToGetInstanceAttachedDiskOutputWithContext(ctx context.Context) GetInstanceAttachedDiskOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceAttachedDiskOutput) +} + +// GetInstanceAttachedDiskArrayInput is an input type that accepts GetInstanceAttachedDiskArray and GetInstanceAttachedDiskArrayOutput values. +// You can construct a concrete instance of `GetInstanceAttachedDiskArrayInput` via: +// +// GetInstanceAttachedDiskArray{ GetInstanceAttachedDiskArgs{...} } +type GetInstanceAttachedDiskArrayInput interface { + pulumi.Input + + ToGetInstanceAttachedDiskArrayOutput() GetInstanceAttachedDiskArrayOutput + ToGetInstanceAttachedDiskArrayOutputWithContext(context.Context) GetInstanceAttachedDiskArrayOutput +} + +type GetInstanceAttachedDiskArray []GetInstanceAttachedDiskInput + +func (GetInstanceAttachedDiskArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceAttachedDisk)(nil)).Elem() +} + +func (i GetInstanceAttachedDiskArray) ToGetInstanceAttachedDiskArrayOutput() GetInstanceAttachedDiskArrayOutput { + return i.ToGetInstanceAttachedDiskArrayOutputWithContext(context.Background()) +} + +func (i GetInstanceAttachedDiskArray) ToGetInstanceAttachedDiskArrayOutputWithContext(ctx context.Context) GetInstanceAttachedDiskArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceAttachedDiskArrayOutput) +} + +type GetInstanceAttachedDiskOutput struct{ *pulumi.OutputState } + +func (GetInstanceAttachedDiskOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceAttachedDisk)(nil)).Elem() +} + +func (o GetInstanceAttachedDiskOutput) ToGetInstanceAttachedDiskOutput() GetInstanceAttachedDiskOutput { + return o +} + +func (o GetInstanceAttachedDiskOutput) ToGetInstanceAttachedDiskOutputWithContext(ctx context.Context) GetInstanceAttachedDiskOutput { + return o +} + +// Name with which the attached disk is accessible +// under `/dev/disk/by-id/` +func (o GetInstanceAttachedDiskOutput) DeviceName() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceAttachedDisk) string { return v.DeviceName }).(pulumi.StringOutput) +} + +func (o GetInstanceAttachedDiskOutput) DiskEncryptionKeyRaw() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceAttachedDisk) string { return v.DiskEncryptionKeyRaw }).(pulumi.StringOutput) +} + +func (o GetInstanceAttachedDiskOutput) DiskEncryptionKeySha256() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceAttachedDisk) string { return v.DiskEncryptionKeySha256 }).(pulumi.StringOutput) +} + +func (o GetInstanceAttachedDiskOutput) KmsKeySelfLink() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceAttachedDisk) string { return v.KmsKeySelfLink }).(pulumi.StringOutput) +} + +// Read/write mode for the disk. One of `"READ_ONLY"` or `"READ_WRITE"`. +func (o GetInstanceAttachedDiskOutput) Mode() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceAttachedDisk) string { return v.Mode }).(pulumi.StringOutput) +} + +// The name or selfLink of the disk attached to this instance. +func (o GetInstanceAttachedDiskOutput) Source() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceAttachedDisk) string { return v.Source }).(pulumi.StringOutput) +} + +type GetInstanceAttachedDiskArrayOutput struct{ *pulumi.OutputState } + +func (GetInstanceAttachedDiskArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceAttachedDisk)(nil)).Elem() +} + +func (o GetInstanceAttachedDiskArrayOutput) ToGetInstanceAttachedDiskArrayOutput() GetInstanceAttachedDiskArrayOutput { + return o +} + +func (o GetInstanceAttachedDiskArrayOutput) ToGetInstanceAttachedDiskArrayOutputWithContext(ctx context.Context) GetInstanceAttachedDiskArrayOutput { + return o +} + +func (o GetInstanceAttachedDiskArrayOutput) Index(i pulumi.IntInput) GetInstanceAttachedDiskOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetInstanceAttachedDisk { + return vs[0].([]GetInstanceAttachedDisk)[vs[1].(int)] + }).(GetInstanceAttachedDiskOutput) +} + +type GetInstanceBootDisk struct { + // Whether the disk will be auto-deleted when the instance is deleted. + AutoDelete bool `pulumi:"autoDelete"` + // Name with which the attached disk is accessible + // under `/dev/disk/by-id/` + DeviceName string `pulumi:"deviceName"` + DiskEncryptionKeyRaw string `pulumi:"diskEncryptionKeyRaw"` + DiskEncryptionKeySha256 string `pulumi:"diskEncryptionKeySha256"` + // Parameters with which a disk was created alongside the instance. + // Structure is documented below. + InitializeParams []GetInstanceBootDiskInitializeParam `pulumi:"initializeParams"` + KmsKeySelfLink string `pulumi:"kmsKeySelfLink"` + // Read/write mode for the disk. One of `"READ_ONLY"` or `"READ_WRITE"`. + Mode string `pulumi:"mode"` + // The name or selfLink of the disk attached to this instance. + Source string `pulumi:"source"` +} + +// GetInstanceBootDiskInput is an input type that accepts GetInstanceBootDiskArgs and GetInstanceBootDiskOutput values. +// You can construct a concrete instance of `GetInstanceBootDiskInput` via: +// +// GetInstanceBootDiskArgs{...} +type GetInstanceBootDiskInput interface { + pulumi.Input + + ToGetInstanceBootDiskOutput() GetInstanceBootDiskOutput + ToGetInstanceBootDiskOutputWithContext(context.Context) GetInstanceBootDiskOutput +} + +type GetInstanceBootDiskArgs struct { + // Whether the disk will be auto-deleted when the instance is deleted. + AutoDelete pulumi.BoolInput `pulumi:"autoDelete"` + // Name with which the attached disk is accessible + // under `/dev/disk/by-id/` + DeviceName pulumi.StringInput `pulumi:"deviceName"` + DiskEncryptionKeyRaw pulumi.StringInput `pulumi:"diskEncryptionKeyRaw"` + DiskEncryptionKeySha256 pulumi.StringInput `pulumi:"diskEncryptionKeySha256"` + // Parameters with which a disk was created alongside the instance. + // Structure is documented below. + InitializeParams GetInstanceBootDiskInitializeParamArrayInput `pulumi:"initializeParams"` + KmsKeySelfLink pulumi.StringInput `pulumi:"kmsKeySelfLink"` + // Read/write mode for the disk. One of `"READ_ONLY"` or `"READ_WRITE"`. + Mode pulumi.StringInput `pulumi:"mode"` + // The name or selfLink of the disk attached to this instance. + Source pulumi.StringInput `pulumi:"source"` +} + +func (GetInstanceBootDiskArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceBootDisk)(nil)).Elem() +} + +func (i GetInstanceBootDiskArgs) ToGetInstanceBootDiskOutput() GetInstanceBootDiskOutput { + return i.ToGetInstanceBootDiskOutputWithContext(context.Background()) +} + +func (i GetInstanceBootDiskArgs) ToGetInstanceBootDiskOutputWithContext(ctx context.Context) GetInstanceBootDiskOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceBootDiskOutput) +} + +// GetInstanceBootDiskArrayInput is an input type that accepts GetInstanceBootDiskArray and GetInstanceBootDiskArrayOutput values. +// You can construct a concrete instance of `GetInstanceBootDiskArrayInput` via: +// +// GetInstanceBootDiskArray{ GetInstanceBootDiskArgs{...} } +type GetInstanceBootDiskArrayInput interface { + pulumi.Input + + ToGetInstanceBootDiskArrayOutput() GetInstanceBootDiskArrayOutput + ToGetInstanceBootDiskArrayOutputWithContext(context.Context) GetInstanceBootDiskArrayOutput +} + +type GetInstanceBootDiskArray []GetInstanceBootDiskInput + +func (GetInstanceBootDiskArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceBootDisk)(nil)).Elem() +} + +func (i GetInstanceBootDiskArray) ToGetInstanceBootDiskArrayOutput() GetInstanceBootDiskArrayOutput { + return i.ToGetInstanceBootDiskArrayOutputWithContext(context.Background()) +} + +func (i GetInstanceBootDiskArray) ToGetInstanceBootDiskArrayOutputWithContext(ctx context.Context) GetInstanceBootDiskArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceBootDiskArrayOutput) +} + +type GetInstanceBootDiskOutput struct{ *pulumi.OutputState } + +func (GetInstanceBootDiskOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceBootDisk)(nil)).Elem() +} + +func (o GetInstanceBootDiskOutput) ToGetInstanceBootDiskOutput() GetInstanceBootDiskOutput { + return o +} + +func (o GetInstanceBootDiskOutput) ToGetInstanceBootDiskOutputWithContext(ctx context.Context) GetInstanceBootDiskOutput { + return o +} + +// Whether the disk will be auto-deleted when the instance is deleted. +func (o GetInstanceBootDiskOutput) AutoDelete() pulumi.BoolOutput { + return o.ApplyT(func(v GetInstanceBootDisk) bool { return v.AutoDelete }).(pulumi.BoolOutput) +} + +// Name with which the attached disk is accessible +// under `/dev/disk/by-id/` +func (o GetInstanceBootDiskOutput) DeviceName() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceBootDisk) string { return v.DeviceName }).(pulumi.StringOutput) +} + +func (o GetInstanceBootDiskOutput) DiskEncryptionKeyRaw() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceBootDisk) string { return v.DiskEncryptionKeyRaw }).(pulumi.StringOutput) +} + +func (o GetInstanceBootDiskOutput) DiskEncryptionKeySha256() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceBootDisk) string { return v.DiskEncryptionKeySha256 }).(pulumi.StringOutput) +} + +// Parameters with which a disk was created alongside the instance. +// Structure is documented below. +func (o GetInstanceBootDiskOutput) InitializeParams() GetInstanceBootDiskInitializeParamArrayOutput { + return o.ApplyT(func(v GetInstanceBootDisk) []GetInstanceBootDiskInitializeParam { return v.InitializeParams }).(GetInstanceBootDiskInitializeParamArrayOutput) +} + +func (o GetInstanceBootDiskOutput) KmsKeySelfLink() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceBootDisk) string { return v.KmsKeySelfLink }).(pulumi.StringOutput) +} + +// Read/write mode for the disk. One of `"READ_ONLY"` or `"READ_WRITE"`. +func (o GetInstanceBootDiskOutput) Mode() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceBootDisk) string { return v.Mode }).(pulumi.StringOutput) +} + +// The name or selfLink of the disk attached to this instance. +func (o GetInstanceBootDiskOutput) Source() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceBootDisk) string { return v.Source }).(pulumi.StringOutput) +} + +type GetInstanceBootDiskArrayOutput struct{ *pulumi.OutputState } + +func (GetInstanceBootDiskArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceBootDisk)(nil)).Elem() +} + +func (o GetInstanceBootDiskArrayOutput) ToGetInstanceBootDiskArrayOutput() GetInstanceBootDiskArrayOutput { + return o +} + +func (o GetInstanceBootDiskArrayOutput) ToGetInstanceBootDiskArrayOutputWithContext(ctx context.Context) GetInstanceBootDiskArrayOutput { + return o +} + +func (o GetInstanceBootDiskArrayOutput) Index(i pulumi.IntInput) GetInstanceBootDiskOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetInstanceBootDisk { + return vs[0].([]GetInstanceBootDisk)[vs[1].(int)] + }).(GetInstanceBootDiskOutput) +} + +type GetInstanceBootDiskInitializeParam struct { + // The image from which this disk was initialised. + Image string `pulumi:"image"` + // A set of key/value label pairs assigned to the disk. + Labels map[string]interface{} `pulumi:"labels"` + // The size of the image in gigabytes. + Size int `pulumi:"size"` + // The accelerator type resource exposed to this instance. E.g. `nvidia-tesla-k80`. + Type string `pulumi:"type"` +} + +// GetInstanceBootDiskInitializeParamInput is an input type that accepts GetInstanceBootDiskInitializeParamArgs and GetInstanceBootDiskInitializeParamOutput values. +// You can construct a concrete instance of `GetInstanceBootDiskInitializeParamInput` via: +// +// GetInstanceBootDiskInitializeParamArgs{...} +type GetInstanceBootDiskInitializeParamInput interface { + pulumi.Input + + ToGetInstanceBootDiskInitializeParamOutput() GetInstanceBootDiskInitializeParamOutput + ToGetInstanceBootDiskInitializeParamOutputWithContext(context.Context) GetInstanceBootDiskInitializeParamOutput +} + +type GetInstanceBootDiskInitializeParamArgs struct { + // The image from which this disk was initialised. + Image pulumi.StringInput `pulumi:"image"` + // A set of key/value label pairs assigned to the disk. + Labels pulumi.MapInput `pulumi:"labels"` + // The size of the image in gigabytes. + Size pulumi.IntInput `pulumi:"size"` + // The accelerator type resource exposed to this instance. E.g. `nvidia-tesla-k80`. + Type pulumi.StringInput `pulumi:"type"` +} + +func (GetInstanceBootDiskInitializeParamArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceBootDiskInitializeParam)(nil)).Elem() +} + +func (i GetInstanceBootDiskInitializeParamArgs) ToGetInstanceBootDiskInitializeParamOutput() GetInstanceBootDiskInitializeParamOutput { + return i.ToGetInstanceBootDiskInitializeParamOutputWithContext(context.Background()) +} + +func (i GetInstanceBootDiskInitializeParamArgs) ToGetInstanceBootDiskInitializeParamOutputWithContext(ctx context.Context) GetInstanceBootDiskInitializeParamOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceBootDiskInitializeParamOutput) +} + +// GetInstanceBootDiskInitializeParamArrayInput is an input type that accepts GetInstanceBootDiskInitializeParamArray and GetInstanceBootDiskInitializeParamArrayOutput values. +// You can construct a concrete instance of `GetInstanceBootDiskInitializeParamArrayInput` via: +// +// GetInstanceBootDiskInitializeParamArray{ GetInstanceBootDiskInitializeParamArgs{...} } +type GetInstanceBootDiskInitializeParamArrayInput interface { + pulumi.Input + + ToGetInstanceBootDiskInitializeParamArrayOutput() GetInstanceBootDiskInitializeParamArrayOutput + ToGetInstanceBootDiskInitializeParamArrayOutputWithContext(context.Context) GetInstanceBootDiskInitializeParamArrayOutput +} + +type GetInstanceBootDiskInitializeParamArray []GetInstanceBootDiskInitializeParamInput + +func (GetInstanceBootDiskInitializeParamArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceBootDiskInitializeParam)(nil)).Elem() +} + +func (i GetInstanceBootDiskInitializeParamArray) ToGetInstanceBootDiskInitializeParamArrayOutput() GetInstanceBootDiskInitializeParamArrayOutput { + return i.ToGetInstanceBootDiskInitializeParamArrayOutputWithContext(context.Background()) +} + +func (i GetInstanceBootDiskInitializeParamArray) ToGetInstanceBootDiskInitializeParamArrayOutputWithContext(ctx context.Context) GetInstanceBootDiskInitializeParamArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceBootDiskInitializeParamArrayOutput) +} + +type GetInstanceBootDiskInitializeParamOutput struct{ *pulumi.OutputState } + +func (GetInstanceBootDiskInitializeParamOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceBootDiskInitializeParam)(nil)).Elem() +} + +func (o GetInstanceBootDiskInitializeParamOutput) ToGetInstanceBootDiskInitializeParamOutput() GetInstanceBootDiskInitializeParamOutput { + return o +} + +func (o GetInstanceBootDiskInitializeParamOutput) ToGetInstanceBootDiskInitializeParamOutputWithContext(ctx context.Context) GetInstanceBootDiskInitializeParamOutput { + return o +} + +// The image from which this disk was initialised. +func (o GetInstanceBootDiskInitializeParamOutput) Image() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceBootDiskInitializeParam) string { return v.Image }).(pulumi.StringOutput) +} + +// A set of key/value label pairs assigned to the disk. +func (o GetInstanceBootDiskInitializeParamOutput) Labels() pulumi.MapOutput { + return o.ApplyT(func(v GetInstanceBootDiskInitializeParam) map[string]interface{} { return v.Labels }).(pulumi.MapOutput) +} + +// The size of the image in gigabytes. +func (o GetInstanceBootDiskInitializeParamOutput) Size() pulumi.IntOutput { + return o.ApplyT(func(v GetInstanceBootDiskInitializeParam) int { return v.Size }).(pulumi.IntOutput) +} + +// The accelerator type resource exposed to this instance. E.g. `nvidia-tesla-k80`. +func (o GetInstanceBootDiskInitializeParamOutput) Type() pulumi.StringOutput { + return o.ApplyT(func(v GetInstanceBootDiskInitializeParam) string { return v.Type }).(pulumi.StringOutput) +} + +type GetInstanceBootDiskInitializeParamArrayOutput struct{ *pulumi.OutputState } + +func (GetInstanceBootDiskInitializeParamArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceBootDiskInitializeParam)(nil)).Elem() +} + +func (o GetInstanceBootDiskInitializeParamArrayOutput) ToGetInstanceBootDiskInitializeParamArrayOutput() GetInstanceBootDiskInitializeParamArrayOutput { + return o +} + +func (o GetInstanceBootDiskInitializeParamArrayOutput) ToGetInstanceBootDiskInitializeParamArrayOutputWithContext(ctx context.Context) GetInstanceBootDiskInitializeParamArrayOutput { + return o +} + +func (o GetInstanceBootDiskInitializeParamArrayOutput) Index(i pulumi.IntInput) GetInstanceBootDiskInitializeParamOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetInstanceBootDiskInitializeParam { + return vs[0].([]GetInstanceBootDiskInitializeParam)[vs[1].(int)] + }).(GetInstanceBootDiskInitializeParamOutput) +} + +type GetInstanceConfidentialInstanceConfig struct { + EnableConfidentialCompute bool `pulumi:"enableConfidentialCompute"` +} + +// GetInstanceConfidentialInstanceConfigInput is an input type that accepts GetInstanceConfidentialInstanceConfigArgs and GetInstanceConfidentialInstanceConfigOutput values. +// You can construct a concrete instance of `GetInstanceConfidentialInstanceConfigInput` via: +// +// GetInstanceConfidentialInstanceConfigArgs{...} +type GetInstanceConfidentialInstanceConfigInput interface { + pulumi.Input + + ToGetInstanceConfidentialInstanceConfigOutput() GetInstanceConfidentialInstanceConfigOutput + ToGetInstanceConfidentialInstanceConfigOutputWithContext(context.Context) GetInstanceConfidentialInstanceConfigOutput +} + +type GetInstanceConfidentialInstanceConfigArgs struct { + EnableConfidentialCompute pulumi.BoolInput `pulumi:"enableConfidentialCompute"` +} + +func (GetInstanceConfidentialInstanceConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceConfidentialInstanceConfig)(nil)).Elem() +} + +func (i GetInstanceConfidentialInstanceConfigArgs) ToGetInstanceConfidentialInstanceConfigOutput() GetInstanceConfidentialInstanceConfigOutput { + return i.ToGetInstanceConfidentialInstanceConfigOutputWithContext(context.Background()) +} + +func (i GetInstanceConfidentialInstanceConfigArgs) ToGetInstanceConfidentialInstanceConfigOutputWithContext(ctx context.Context) GetInstanceConfidentialInstanceConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceConfidentialInstanceConfigOutput) +} + +// GetInstanceConfidentialInstanceConfigArrayInput is an input type that accepts GetInstanceConfidentialInstanceConfigArray and GetInstanceConfidentialInstanceConfigArrayOutput values. +// You can construct a concrete instance of `GetInstanceConfidentialInstanceConfigArrayInput` via: +// +// GetInstanceConfidentialInstanceConfigArray{ GetInstanceConfidentialInstanceConfigArgs{...} } +type GetInstanceConfidentialInstanceConfigArrayInput interface { + pulumi.Input + + ToGetInstanceConfidentialInstanceConfigArrayOutput() GetInstanceConfidentialInstanceConfigArrayOutput + ToGetInstanceConfidentialInstanceConfigArrayOutputWithContext(context.Context) GetInstanceConfidentialInstanceConfigArrayOutput +} + +type GetInstanceConfidentialInstanceConfigArray []GetInstanceConfidentialInstanceConfigInput + +func (GetInstanceConfidentialInstanceConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceConfidentialInstanceConfig)(nil)).Elem() +} + +func (i GetInstanceConfidentialInstanceConfigArray) ToGetInstanceConfidentialInstanceConfigArrayOutput() GetInstanceConfidentialInstanceConfigArrayOutput { + return i.ToGetInstanceConfidentialInstanceConfigArrayOutputWithContext(context.Background()) +} + +func (i GetInstanceConfidentialInstanceConfigArray) ToGetInstanceConfidentialInstanceConfigArrayOutputWithContext(ctx context.Context) GetInstanceConfidentialInstanceConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceConfidentialInstanceConfigArrayOutput) +} + +type GetInstanceConfidentialInstanceConfigOutput struct{ *pulumi.OutputState } + +func (GetInstanceConfidentialInstanceConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceConfidentialInstanceConfig)(nil)).Elem() +} + +func (o GetInstanceConfidentialInstanceConfigOutput) ToGetInstanceConfidentialInstanceConfigOutput() GetInstanceConfidentialInstanceConfigOutput { + return o +} + +func (o GetInstanceConfidentialInstanceConfigOutput) ToGetInstanceConfidentialInstanceConfigOutputWithContext(ctx context.Context) GetInstanceConfidentialInstanceConfigOutput { + return o +} + +func (o GetInstanceConfidentialInstanceConfigOutput) EnableConfidentialCompute() pulumi.BoolOutput { + return o.ApplyT(func(v GetInstanceConfidentialInstanceConfig) bool { return v.EnableConfidentialCompute }).(pulumi.BoolOutput) +} + +type GetInstanceConfidentialInstanceConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetInstanceConfidentialInstanceConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceConfidentialInstanceConfig)(nil)).Elem() +} + +func (o GetInstanceConfidentialInstanceConfigArrayOutput) ToGetInstanceConfidentialInstanceConfigArrayOutput() GetInstanceConfidentialInstanceConfigArrayOutput { + return o +} + +func (o GetInstanceConfidentialInstanceConfigArrayOutput) ToGetInstanceConfidentialInstanceConfigArrayOutputWithContext(ctx context.Context) GetInstanceConfidentialInstanceConfigArrayOutput { + return o +} + +func (o GetInstanceConfidentialInstanceConfigArrayOutput) Index(i pulumi.IntInput) GetInstanceConfidentialInstanceConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetInstanceConfidentialInstanceConfig { + return vs[0].([]GetInstanceConfidentialInstanceConfig)[vs[1].(int)] + }).(GetInstanceConfidentialInstanceConfigOutput) +} + +type GetInstanceGroupManagerAllInstancesConfig struct { + Labels map[string]string `pulumi:"labels"` + Metadata map[string]string `pulumi:"metadata"` +} + +// GetInstanceGroupManagerAllInstancesConfigInput is an input type that accepts GetInstanceGroupManagerAllInstancesConfigArgs and GetInstanceGroupManagerAllInstancesConfigOutput values. +// You can construct a concrete instance of `GetInstanceGroupManagerAllInstancesConfigInput` via: +// +// GetInstanceGroupManagerAllInstancesConfigArgs{...} +type GetInstanceGroupManagerAllInstancesConfigInput interface { + pulumi.Input + + ToGetInstanceGroupManagerAllInstancesConfigOutput() GetInstanceGroupManagerAllInstancesConfigOutput + ToGetInstanceGroupManagerAllInstancesConfigOutputWithContext(context.Context) GetInstanceGroupManagerAllInstancesConfigOutput +} + +type GetInstanceGroupManagerAllInstancesConfigArgs struct { + Labels pulumi.StringMapInput `pulumi:"labels"` + Metadata pulumi.StringMapInput `pulumi:"metadata"` +} + +func (GetInstanceGroupManagerAllInstancesConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceGroupManagerAllInstancesConfig)(nil)).Elem() +} + +func (i GetInstanceGroupManagerAllInstancesConfigArgs) ToGetInstanceGroupManagerAllInstancesConfigOutput() GetInstanceGroupManagerAllInstancesConfigOutput { + return i.ToGetInstanceGroupManagerAllInstancesConfigOutputWithContext(context.Background()) +} + +func (i GetInstanceGroupManagerAllInstancesConfigArgs) ToGetInstanceGroupManagerAllInstancesConfigOutputWithContext(ctx context.Context) GetInstanceGroupManagerAllInstancesConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceGroupManagerAllInstancesConfigOutput) +} + +// GetInstanceGroupManagerAllInstancesConfigArrayInput is an input type that accepts GetInstanceGroupManagerAllInstancesConfigArray and GetInstanceGroupManagerAllInstancesConfigArrayOutput values. +// You can construct a concrete instance of `GetInstanceGroupManagerAllInstancesConfigArrayInput` via: +// +// GetInstanceGroupManagerAllInstancesConfigArray{ GetInstanceGroupManagerAllInstancesConfigArgs{...} } +type GetInstanceGroupManagerAllInstancesConfigArrayInput interface { + pulumi.Input + + ToGetInstanceGroupManagerAllInstancesConfigArrayOutput() GetInstanceGroupManagerAllInstancesConfigArrayOutput + ToGetInstanceGroupManagerAllInstancesConfigArrayOutputWithContext(context.Context) GetInstanceGroupManagerAllInstancesConfigArrayOutput +} + +type GetInstanceGroupManagerAllInstancesConfigArray []GetInstanceGroupManagerAllInstancesConfigInput + +func (GetInstanceGroupManagerAllInstancesConfigArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceGroupManagerAllInstancesConfig)(nil)).Elem() +} + +func (i GetInstanceGroupManagerAllInstancesConfigArray) ToGetInstanceGroupManagerAllInstancesConfigArrayOutput() GetInstanceGroupManagerAllInstancesConfigArrayOutput { + return i.ToGetInstanceGroupManagerAllInstancesConfigArrayOutputWithContext(context.Background()) +} + +func (i GetInstanceGroupManagerAllInstancesConfigArray) ToGetInstanceGroupManagerAllInstancesConfigArrayOutputWithContext(ctx context.Context) GetInstanceGroupManagerAllInstancesConfigArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(GetInstanceGroupManagerAllInstancesConfigArrayOutput) +} + +type GetInstanceGroupManagerAllInstancesConfigOutput struct{ *pulumi.OutputState } + +func (GetInstanceGroupManagerAllInstancesConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetInstanceGroupManagerAllInstancesConfig)(nil)).Elem() +} + +func (o GetInstanceGroupManagerAllInstancesConfigOutput) ToGetInstanceGroupManagerAllInstancesConfigOutput() GetInstanceGroupManagerAllInstancesConfigOutput { + return o +} + +func (o GetInstanceGroupManagerAllInstancesConfigOutput) ToGetInstanceGroupManagerAllInstancesConfigOutputWithContext(ctx context.Context) GetInstanceGroupManagerAllInstancesConfigOutput { + return o +} + +func (o GetInstanceGroupManagerAllInstancesConfigOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v GetInstanceGroupManagerAllInstancesConfig) map[string]string { return v.Labels }).(pulumi.StringMapOutput) +} + +func (o GetInstanceGroupManagerAllInstancesConfigOutput) Metadata() pulumi.StringMapOutput { + return o.ApplyT(func(v GetInstanceGroupManagerAllInstancesConfig) map[string]string { return v.Metadata }).(pulumi.StringMapOutput) +} + +type GetInstanceGroupManagerAllInstancesConfigArrayOutput struct{ *pulumi.OutputState } + +func (GetInstanceGroupManagerAllInstancesConfigArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]GetInstanceGroupManagerAllInstancesConfig)(nil)).Elem() +} + +func (o GetInstanceGroupManagerAllInstancesConfigArrayOutput) ToGetInstanceGroupManagerAllInstancesConfigArrayOutput() GetInstanceGroupManagerAllInstancesConfigArrayOutput { + return o +} + +func (o GetInstanceGroupManagerAllInstancesConfigArrayOutput) ToGetInstanceGroupManagerAllInstancesConfigArrayOutputWithContext(ctx context.Context) GetInstanceGroupManagerAllInstancesConfigArrayOutput { + return o +} + +func (o GetInstanceGroupManagerAllInstancesConfigArrayOutput) Index(i pulumi.IntInput) GetInstanceGroupManagerAllInstancesConfigOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) GetInstanceGroupManagerAllInstancesConfig { + return vs[0].([]GetInstanceGroupManagerAllInstancesConfig)[vs[1].(int)] + }).(GetInstanceGroupManagerAllInstancesConfigOutput) +} + type GetInstanceGroupManagerAutoHealingPolicy struct { HealthCheck string `pulumi:"healthCheck"` InitialDelaySec int `pulumi:"initialDelaySec"` @@ -4009,12 +5068,6 @@ func (o GetInstanceTemplateGuestAcceleratorArrayOutput) Index(i pulumi.IntInput) } type GetInstanceTemplateNetworkInterface struct { - // Access configurations, i.e. IPs via which this - // instance can be accessed via the Internet. Omit to ensure that the instance - // is not accessible from the Internet (this means that ssh provisioners will - // not work unless you are running the prvovider can send traffic to the instance's - // network (e.g. via tunnel or because it is running on another cloud instance - // on that network). This block can be repeated multiple times. Structure documented below. AccessConfigs []GetInstanceTemplateNetworkInterfaceAccessConfig `pulumi:"accessConfigs"` // An // array of alias IP ranges for this network interface. Can only be specified for network @@ -4055,12 +5108,6 @@ type GetInstanceTemplateNetworkInterfaceInput interface { } type GetInstanceTemplateNetworkInterfaceArgs struct { - // Access configurations, i.e. IPs via which this - // instance can be accessed via the Internet. Omit to ensure that the instance - // is not accessible from the Internet (this means that ssh provisioners will - // not work unless you are running the prvovider can send traffic to the instance's - // network (e.g. via tunnel or because it is running on another cloud instance - // on that network). This block can be repeated multiple times. Structure documented below. AccessConfigs GetInstanceTemplateNetworkInterfaceAccessConfigArrayInput `pulumi:"accessConfigs"` // An // array of alias IP ranges for this network interface. Can only be specified for network @@ -4140,12 +5187,6 @@ func (o GetInstanceTemplateNetworkInterfaceOutput) ToGetInstanceTemplateNetworkI return o } -// Access configurations, i.e. IPs via which this -// instance can be accessed via the Internet. Omit to ensure that the instance -// is not accessible from the Internet (this means that ssh provisioners will -// not work unless you are running the prvovider can send traffic to the instance's -// network (e.g. via tunnel or because it is running on another cloud instance -// on that network). This block can be repeated multiple times. Structure documented below. func (o GetInstanceTemplateNetworkInterfaceOutput) AccessConfigs() GetInstanceTemplateNetworkInterfaceAccessConfigArrayOutput { return o.ApplyT(func(v GetInstanceTemplateNetworkInterface) []GetInstanceTemplateNetworkInterfaceAccessConfig { return v.AccessConfigs @@ -8783,6 +9824,24 @@ func (o GetSubnetworkSecondaryIpRangeArrayOutput) Index(i pulumi.IntInput) GetSu } func init() { + pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckLogConfigInput)(nil)).Elem(), GetHealthCheckLogConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckLogConfigArrayInput)(nil)).Elem(), GetHealthCheckLogConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckSslHealthCheckInput)(nil)).Elem(), GetHealthCheckSslHealthCheckArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckSslHealthCheckArrayInput)(nil)).Elem(), GetHealthCheckSslHealthCheckArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckTcpHealthCheckInput)(nil)).Elem(), GetHealthCheckTcpHealthCheckArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetHealthCheckTcpHealthCheckArrayInput)(nil)).Elem(), GetHealthCheckTcpHealthCheckArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceAdvancedMachineFeatureInput)(nil)).Elem(), GetInstanceAdvancedMachineFeatureArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceAdvancedMachineFeatureArrayInput)(nil)).Elem(), GetInstanceAdvancedMachineFeatureArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceAttachedDiskInput)(nil)).Elem(), GetInstanceAttachedDiskArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceAttachedDiskArrayInput)(nil)).Elem(), GetInstanceAttachedDiskArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceBootDiskInput)(nil)).Elem(), GetInstanceBootDiskArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceBootDiskArrayInput)(nil)).Elem(), GetInstanceBootDiskArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceBootDiskInitializeParamInput)(nil)).Elem(), GetInstanceBootDiskInitializeParamArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceBootDiskInitializeParamArrayInput)(nil)).Elem(), GetInstanceBootDiskInitializeParamArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceConfidentialInstanceConfigInput)(nil)).Elem(), GetInstanceConfidentialInstanceConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceConfidentialInstanceConfigArrayInput)(nil)).Elem(), GetInstanceConfidentialInstanceConfigArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerAllInstancesConfigInput)(nil)).Elem(), GetInstanceGroupManagerAllInstancesConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerAllInstancesConfigArrayInput)(nil)).Elem(), GetInstanceGroupManagerAllInstancesConfigArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerAutoHealingPolicyInput)(nil)).Elem(), GetInstanceGroupManagerAutoHealingPolicyArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerAutoHealingPolicyArrayInput)(nil)).Elem(), GetInstanceGroupManagerAutoHealingPolicyArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetInstanceGroupManagerNamedPortInput)(nil)).Elem(), GetInstanceGroupManagerNamedPortArgs{}) @@ -8935,6 +9994,24 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetSnapshotSourceDiskEncryptionKeyArrayInput)(nil)).Elem(), GetSnapshotSourceDiskEncryptionKeyArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSubnetworkSecondaryIpRangeInput)(nil)).Elem(), GetSubnetworkSecondaryIpRangeArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetSubnetworkSecondaryIpRangeArrayInput)(nil)).Elem(), GetSubnetworkSecondaryIpRangeArray{}) + pulumi.RegisterOutputType(GetHealthCheckLogConfigOutput{}) + pulumi.RegisterOutputType(GetHealthCheckLogConfigArrayOutput{}) + pulumi.RegisterOutputType(GetHealthCheckSslHealthCheckOutput{}) + pulumi.RegisterOutputType(GetHealthCheckSslHealthCheckArrayOutput{}) + pulumi.RegisterOutputType(GetHealthCheckTcpHealthCheckOutput{}) + pulumi.RegisterOutputType(GetHealthCheckTcpHealthCheckArrayOutput{}) + pulumi.RegisterOutputType(GetInstanceAdvancedMachineFeatureOutput{}) + pulumi.RegisterOutputType(GetInstanceAdvancedMachineFeatureArrayOutput{}) + pulumi.RegisterOutputType(GetInstanceAttachedDiskOutput{}) + pulumi.RegisterOutputType(GetInstanceAttachedDiskArrayOutput{}) + pulumi.RegisterOutputType(GetInstanceBootDiskOutput{}) + pulumi.RegisterOutputType(GetInstanceBootDiskArrayOutput{}) + pulumi.RegisterOutputType(GetInstanceBootDiskInitializeParamOutput{}) + pulumi.RegisterOutputType(GetInstanceBootDiskInitializeParamArrayOutput{}) + pulumi.RegisterOutputType(GetInstanceConfidentialInstanceConfigOutput{}) + pulumi.RegisterOutputType(GetInstanceConfidentialInstanceConfigArrayOutput{}) + pulumi.RegisterOutputType(GetInstanceGroupManagerAllInstancesConfigOutput{}) + pulumi.RegisterOutputType(GetInstanceGroupManagerAllInstancesConfigArrayOutput{}) pulumi.RegisterOutputType(GetInstanceGroupManagerAutoHealingPolicyOutput{}) pulumi.RegisterOutputType(GetInstanceGroupManagerAutoHealingPolicyArrayOutput{}) pulumi.RegisterOutputType(GetInstanceGroupManagerNamedPortOutput{}) diff --git a/sdk/go/gcp/compute/regionBackendService.go b/sdk/go/gcp/compute/regionBackendService.go index cc168fc8f7..8b9e29ee25 100644 --- a/sdk/go/gcp/compute/regionBackendService.go +++ b/sdk/go/gcp/compute/regionBackendService.go @@ -62,10 +62,8 @@ type RegionBackendService struct { // Time for which instance will be drained (not accept new // connections, but still work to finish started). ConnectionDrainingTimeoutSec pulumi.IntPtrOutput `pulumi:"connectionDrainingTimeoutSec"` - // Connection Tracking configuration for this BackendService. - // This is available only for Layer 4 Internal Load Balancing and - // Network Load Balancing. - // Structure is documented below. + // Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + // and Network Load Balancing. ConnectionTrackingPolicy RegionBackendServiceConnectionTrackingPolicyPtrOutput `pulumi:"connectionTrackingPolicy"` // Consistent Hash-based load balancing can be used to provide soft session // affinity based on HTTP headers, cookies or other properties. This load balancing @@ -208,10 +206,8 @@ type regionBackendServiceState struct { // Time for which instance will be drained (not accept new // connections, but still work to finish started). ConnectionDrainingTimeoutSec *int `pulumi:"connectionDrainingTimeoutSec"` - // Connection Tracking configuration for this BackendService. - // This is available only for Layer 4 Internal Load Balancing and - // Network Load Balancing. - // Structure is documented below. + // Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + // and Network Load Balancing. ConnectionTrackingPolicy *RegionBackendServiceConnectionTrackingPolicy `pulumi:"connectionTrackingPolicy"` // Consistent Hash-based load balancing can be used to provide soft session // affinity based on HTTP headers, cookies or other properties. This load balancing @@ -326,10 +322,8 @@ type RegionBackendServiceState struct { // Time for which instance will be drained (not accept new // connections, but still work to finish started). ConnectionDrainingTimeoutSec pulumi.IntPtrInput - // Connection Tracking configuration for this BackendService. - // This is available only for Layer 4 Internal Load Balancing and - // Network Load Balancing. - // Structure is documented below. + // Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + // and Network Load Balancing. ConnectionTrackingPolicy RegionBackendServiceConnectionTrackingPolicyPtrInput // Consistent Hash-based load balancing can be used to provide soft session // affinity based on HTTP headers, cookies or other properties. This load balancing @@ -448,10 +442,8 @@ type regionBackendServiceArgs struct { // Time for which instance will be drained (not accept new // connections, but still work to finish started). ConnectionDrainingTimeoutSec *int `pulumi:"connectionDrainingTimeoutSec"` - // Connection Tracking configuration for this BackendService. - // This is available only for Layer 4 Internal Load Balancing and - // Network Load Balancing. - // Structure is documented below. + // Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + // and Network Load Balancing. ConnectionTrackingPolicy *RegionBackendServiceConnectionTrackingPolicy `pulumi:"connectionTrackingPolicy"` // Consistent Hash-based load balancing can be used to provide soft session // affinity based on HTTP headers, cookies or other properties. This load balancing @@ -560,10 +552,8 @@ type RegionBackendServiceArgs struct { // Time for which instance will be drained (not accept new // connections, but still work to finish started). ConnectionDrainingTimeoutSec pulumi.IntPtrInput - // Connection Tracking configuration for this BackendService. - // This is available only for Layer 4 Internal Load Balancing and - // Network Load Balancing. - // Structure is documented below. + // Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + // and Network Load Balancing. ConnectionTrackingPolicy RegionBackendServiceConnectionTrackingPolicyPtrInput // Consistent Hash-based load balancing can be used to provide soft session // affinity based on HTTP headers, cookies or other properties. This load balancing @@ -772,10 +762,8 @@ func (o RegionBackendServiceOutput) ConnectionDrainingTimeoutSec() pulumi.IntPtr return o.ApplyT(func(v *RegionBackendService) pulumi.IntPtrOutput { return v.ConnectionDrainingTimeoutSec }).(pulumi.IntPtrOutput) } -// Connection Tracking configuration for this BackendService. -// This is available only for Layer 4 Internal Load Balancing and -// Network Load Balancing. -// Structure is documented below. +// Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing +// and Network Load Balancing. func (o RegionBackendServiceOutput) ConnectionTrackingPolicy() RegionBackendServiceConnectionTrackingPolicyPtrOutput { return o.ApplyT(func(v *RegionBackendService) RegionBackendServiceConnectionTrackingPolicyPtrOutput { return v.ConnectionTrackingPolicy diff --git a/sdk/go/gcp/compute/regionDisk.go b/sdk/go/gcp/compute/regionDisk.go index 33f7981522..62878e78cf 100644 --- a/sdk/go/gcp/compute/regionDisk.go +++ b/sdk/go/gcp/compute/regionDisk.go @@ -11,31 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Persistent disks are durable storage devices that function similarly to -// the physical disks in a desktop or a server. Compute Engine manages the -// hardware behind these devices to ensure data redundancy and optimize -// performance for you. Persistent disks are available as either standard -// hard disk drives (HDD) or solid-state drives (SSD). -// -// Persistent disks are located independently from your virtual machine -// instances, so you can detach or move persistent disks to keep your data -// even after you delete your instances. Persistent disk performance scales -// automatically with size, so you can resize your existing persistent disks -// or add more persistent disks to an instance to meet your performance and -// storage space requirements. -// -// Add a persistent disk to your instance when you need reliable and -// affordable storage with consistent performance characteristics. -// -// To get more information about RegionDisk, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionDisks) -// * How-to Guides -// - [Adding or Resizing Regional Persistent Disks](https://cloud.google.com/compute/docs/disks/regional-persistent-disk) -// -// > **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw -// state as plain-text. -// // ## Example Usage // ### Region Disk Basic // diff --git a/sdk/go/gcp/compute/regionDiskResourcePolicyAttachment.go b/sdk/go/gcp/compute/regionDiskResourcePolicyAttachment.go index 63615ff044..cddcbae64a 100644 --- a/sdk/go/gcp/compute/regionDiskResourcePolicyAttachment.go +++ b/sdk/go/gcp/compute/regionDiskResourcePolicyAttachment.go @@ -11,11 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Adds existing resource policies to a disk. You can only add one policy -// which will be applied to this disk for scheduling snapshot creation. -// -// > **Note:** This resource does not support zonal disks (`compute.Disk`). For zonal disks, please refer to the `compute.DiskResourcePolicyAttachment` resource. -// // ## Example Usage // ### Region Disk Resource Policy Attachment Basic // diff --git a/sdk/go/gcp/compute/regionInstanceGroupManager.go b/sdk/go/gcp/compute/regionInstanceGroupManager.go index e22a882a50..11d6f49fae 100644 --- a/sdk/go/gcp/compute/regionInstanceGroupManager.go +++ b/sdk/go/gcp/compute/regionInstanceGroupManager.go @@ -215,9 +215,8 @@ type RegionInstanceGroupManager struct { // version deals with a specific instance template, allowing canary release scenarios. // Structure is documented below. Versions RegionInstanceGroupManagerVersionArrayOutput `pulumi:"versions"` - // Whether to wait for all instances to be created/updated before - // returning. Note that if this is set to true and the operation does not succeed, the provider will - // continue trying until it times out. + // Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + // operation does not succeed, Terraform will continue trying until it times out. WaitForInstances pulumi.BoolPtrOutput `pulumi:"waitForInstances"` // When used with `waitForInstances` it specifies the status to wait for. // When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is @@ -332,9 +331,8 @@ type regionInstanceGroupManagerState struct { // version deals with a specific instance template, allowing canary release scenarios. // Structure is documented below. Versions []RegionInstanceGroupManagerVersion `pulumi:"versions"` - // Whether to wait for all instances to be created/updated before - // returning. Note that if this is set to true and the operation does not succeed, the provider will - // continue trying until it times out. + // Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + // operation does not succeed, Terraform will continue trying until it times out. WaitForInstances *bool `pulumi:"waitForInstances"` // When used with `waitForInstances` it specifies the status to wait for. // When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is @@ -415,9 +413,8 @@ type RegionInstanceGroupManagerState struct { // version deals with a specific instance template, allowing canary release scenarios. // Structure is documented below. Versions RegionInstanceGroupManagerVersionArrayInput - // Whether to wait for all instances to be created/updated before - // returning. Note that if this is set to true and the operation does not succeed, the provider will - // continue trying until it times out. + // Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + // operation does not succeed, Terraform will continue trying until it times out. WaitForInstances pulumi.BoolPtrInput // When used with `waitForInstances` it specifies the status to wait for. // When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is @@ -494,9 +491,8 @@ type regionInstanceGroupManagerArgs struct { // version deals with a specific instance template, allowing canary release scenarios. // Structure is documented below. Versions []RegionInstanceGroupManagerVersion `pulumi:"versions"` - // Whether to wait for all instances to be created/updated before - // returning. Note that if this is set to true and the operation does not succeed, the provider will - // continue trying until it times out. + // Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + // operation does not succeed, Terraform will continue trying until it times out. WaitForInstances *bool `pulumi:"waitForInstances"` // When used with `waitForInstances` it specifies the status to wait for. // When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is @@ -570,9 +566,8 @@ type RegionInstanceGroupManagerArgs struct { // version deals with a specific instance template, allowing canary release scenarios. // Structure is documented below. Versions RegionInstanceGroupManagerVersionArrayInput - // Whether to wait for all instances to be created/updated before - // returning. Note that if this is set to true and the operation does not succeed, the provider will - // continue trying until it times out. + // Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + // operation does not succeed, Terraform will continue trying until it times out. WaitForInstances pulumi.BoolPtrInput // When used with `waitForInstances` it specifies the status to wait for. // When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is @@ -819,9 +814,8 @@ func (o RegionInstanceGroupManagerOutput) Versions() RegionInstanceGroupManagerV return o.ApplyT(func(v *RegionInstanceGroupManager) RegionInstanceGroupManagerVersionArrayOutput { return v.Versions }).(RegionInstanceGroupManagerVersionArrayOutput) } -// Whether to wait for all instances to be created/updated before -// returning. Note that if this is set to true and the operation does not succeed, the provider will -// continue trying until it times out. +// Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the +// operation does not succeed, Terraform will continue trying until it times out. func (o RegionInstanceGroupManagerOutput) WaitForInstances() pulumi.BoolPtrOutput { return o.ApplyT(func(v *RegionInstanceGroupManager) pulumi.BoolPtrOutput { return v.WaitForInstances }).(pulumi.BoolPtrOutput) } diff --git a/sdk/go/gcp/compute/regionNetworkEndpointGroup.go b/sdk/go/gcp/compute/regionNetworkEndpointGroup.go index 83dd562327..fd9d813316 100644 --- a/sdk/go/gcp/compute/regionNetworkEndpointGroup.go +++ b/sdk/go/gcp/compute/regionNetworkEndpointGroup.go @@ -13,6 +13,10 @@ import ( // A regional NEG that can support Serverless Products. // +// Recreating a region network endpoint group that's in use by another resource will give a +// `resourceInUseByAnotherResource` error. Use `lifecycle.create_before_destroy` +// to avoid this type of error. +// // To get more information about RegionNetworkEndpointGroup, see: // // * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/regionNetworkEndpointGroups) diff --git a/sdk/go/gcp/compute/regionPerInstanceConfig.go b/sdk/go/gcp/compute/regionPerInstanceConfig.go index 2b17ab84a1..24d0890806 100644 --- a/sdk/go/gcp/compute/regionPerInstanceConfig.go +++ b/sdk/go/gcp/compute/regionPerInstanceConfig.go @@ -22,111 +22,6 @@ import ( // - [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs) // // ## Example Usage -// ### Stateful Rigm -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// myImage, err := compute.LookupImage(ctx, &compute.LookupImageArgs{ -// Family: pulumi.StringRef("debian-11"), -// Project: pulumi.StringRef("debian-cloud"), -// }, nil) -// if err != nil { -// return err -// } -// _, err = compute.NewInstanceTemplate(ctx, "igm-basic", &compute.InstanceTemplateArgs{ -// MachineType: pulumi.String("e2-medium"), -// CanIpForward: pulumi.Bool(false), -// Tags: pulumi.StringArray{ -// pulumi.String("foo"), -// pulumi.String("bar"), -// }, -// Disks: compute.InstanceTemplateDiskArray{ -// &compute.InstanceTemplateDiskArgs{ -// SourceImage: *pulumi.String(myImage.SelfLink), -// AutoDelete: pulumi.Bool(true), -// Boot: pulumi.Bool(true), -// }, -// }, -// NetworkInterfaces: compute.InstanceTemplateNetworkInterfaceArray{ -// &compute.InstanceTemplateNetworkInterfaceArgs{ -// Network: pulumi.String("default"), -// }, -// }, -// ServiceAccount: &compute.InstanceTemplateServiceAccountArgs{ -// Scopes: pulumi.StringArray{ -// pulumi.String("userinfo-email"), -// pulumi.String("compute-ro"), -// pulumi.String("storage-ro"), -// }, -// }, -// }) -// if err != nil { -// return err -// } -// rigm, err := compute.NewRegionInstanceGroupManager(ctx, "rigm", &compute.RegionInstanceGroupManagerArgs{ -// Description: pulumi.String("Demo test instance group manager"), -// Versions: compute.RegionInstanceGroupManagerVersionArray{ -// &compute.RegionInstanceGroupManagerVersionArgs{ -// Name: pulumi.String("prod"), -// InstanceTemplate: igm_basic.SelfLink, -// }, -// }, -// UpdatePolicy: &compute.RegionInstanceGroupManagerUpdatePolicyArgs{ -// Type: pulumi.String("OPPORTUNISTIC"), -// InstanceRedistributionType: pulumi.String("NONE"), -// MinimalAction: pulumi.String("RESTART"), -// }, -// BaseInstanceName: pulumi.String("rigm"), -// Region: pulumi.String("us-central1"), -// TargetSize: pulumi.Int(2), -// }) -// if err != nil { -// return err -// } -// _, err = compute.NewDisk(ctx, "default", &compute.DiskArgs{ -// Type: pulumi.String("pd-ssd"), -// Zone: pulumi.String("us-central1-a"), -// Image: pulumi.String("debian-11-bullseye-v20220719"), -// PhysicalBlockSizeBytes: pulumi.Int(4096), -// }) -// if err != nil { -// return err -// } -// _, err = compute.NewRegionPerInstanceConfig(ctx, "withDisk", &compute.RegionPerInstanceConfigArgs{ -// Region: pulumi.Any(google_compute_region_instance_group_manager.Igm.Region), -// RegionInstanceGroupManager: rigm.Name, -// PreservedState: &compute.RegionPerInstanceConfigPreservedStateArgs{ -// Metadata: pulumi.StringMap{ -// "foo": pulumi.String("bar"), -// "instance_template": igm_basic.SelfLink, -// }, -// Disks: compute.RegionPerInstanceConfigPreservedStateDiskArray{ -// &compute.RegionPerInstanceConfigPreservedStateDiskArgs{ -// DeviceName: pulumi.String("my-stateful-disk"), -// Source: _default.ID(), -// Mode: pulumi.String("READ_ONLY"), -// }, -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/compute/regionSslCertificate.go b/sdk/go/gcp/compute/regionSslCertificate.go index 4b53a2a370..4a311e906f 100644 --- a/sdk/go/gcp/compute/regionSslCertificate.go +++ b/sdk/go/gcp/compute/regionSslCertificate.go @@ -11,19 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A RegionSslCertificate resource, used for HTTPS load balancing. This resource -// provides a mechanism to upload an SSL key and certificate to -// the load balancer to serve secure connections from the user. -// -// To get more information about RegionSslCertificate, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionSslCertificates) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates) -// -// > **Warning:** All arguments including `certificate` and `privateKey` will be stored in the raw -// state as plain-text. -// // ## Example Usage // ### Region Ssl Certificate Basic // diff --git a/sdk/go/gcp/compute/routerNat.go b/sdk/go/gcp/compute/routerNat.go index 9a521c014c..480d3f2e31 100644 --- a/sdk/go/gcp/compute/routerNat.go +++ b/sdk/go/gcp/compute/routerNat.go @@ -260,6 +260,9 @@ type RouterNat struct { // Timeout (in seconds) for TCP established connections. // Defaults to 1200s if not set. TcpEstablishedIdleTimeoutSec pulumi.IntPtrOutput `pulumi:"tcpEstablishedIdleTimeoutSec"` + // Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + // Defaults to 120s if not set. + TcpTimeWaitTimeoutSec pulumi.IntPtrOutput `pulumi:"tcpTimeWaitTimeoutSec"` // Timeout (in seconds) for TCP transitory connections. // Defaults to 30s if not set. TcpTransitoryIdleTimeoutSec pulumi.IntPtrOutput `pulumi:"tcpTransitoryIdleTimeoutSec"` @@ -368,6 +371,9 @@ type routerNatState struct { // Timeout (in seconds) for TCP established connections. // Defaults to 1200s if not set. TcpEstablishedIdleTimeoutSec *int `pulumi:"tcpEstablishedIdleTimeoutSec"` + // Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + // Defaults to 120s if not set. + TcpTimeWaitTimeoutSec *int `pulumi:"tcpTimeWaitTimeoutSec"` // Timeout (in seconds) for TCP transitory connections. // Defaults to 30s if not set. TcpTransitoryIdleTimeoutSec *int `pulumi:"tcpTransitoryIdleTimeoutSec"` @@ -439,6 +445,9 @@ type RouterNatState struct { // Timeout (in seconds) for TCP established connections. // Defaults to 1200s if not set. TcpEstablishedIdleTimeoutSec pulumi.IntPtrInput + // Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + // Defaults to 120s if not set. + TcpTimeWaitTimeoutSec pulumi.IntPtrInput // Timeout (in seconds) for TCP transitory connections. // Defaults to 30s if not set. TcpTransitoryIdleTimeoutSec pulumi.IntPtrInput @@ -514,6 +523,9 @@ type routerNatArgs struct { // Timeout (in seconds) for TCP established connections. // Defaults to 1200s if not set. TcpEstablishedIdleTimeoutSec *int `pulumi:"tcpEstablishedIdleTimeoutSec"` + // Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + // Defaults to 120s if not set. + TcpTimeWaitTimeoutSec *int `pulumi:"tcpTimeWaitTimeoutSec"` // Timeout (in seconds) for TCP transitory connections. // Defaults to 30s if not set. TcpTransitoryIdleTimeoutSec *int `pulumi:"tcpTransitoryIdleTimeoutSec"` @@ -586,6 +598,9 @@ type RouterNatArgs struct { // Timeout (in seconds) for TCP established connections. // Defaults to 1200s if not set. TcpEstablishedIdleTimeoutSec pulumi.IntPtrInput + // Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + // Defaults to 120s if not set. + TcpTimeWaitTimeoutSec pulumi.IntPtrInput // Timeout (in seconds) for TCP transitory connections. // Defaults to 30s if not set. TcpTransitoryIdleTimeoutSec pulumi.IntPtrInput @@ -794,6 +809,12 @@ func (o RouterNatOutput) TcpEstablishedIdleTimeoutSec() pulumi.IntPtrOutput { return o.ApplyT(func(v *RouterNat) pulumi.IntPtrOutput { return v.TcpEstablishedIdleTimeoutSec }).(pulumi.IntPtrOutput) } +// Timeout (in seconds) for TCP connections that are in TIME_WAIT state. +// Defaults to 120s if not set. +func (o RouterNatOutput) TcpTimeWaitTimeoutSec() pulumi.IntPtrOutput { + return o.ApplyT(func(v *RouterNat) pulumi.IntPtrOutput { return v.TcpTimeWaitTimeoutSec }).(pulumi.IntPtrOutput) +} + // Timeout (in seconds) for TCP transitory connections. // Defaults to 30s if not set. func (o RouterNatOutput) TcpTransitoryIdleTimeoutSec() pulumi.IntPtrOutput { diff --git a/sdk/go/gcp/compute/securityPolicy.go b/sdk/go/gcp/compute/securityPolicy.go index ea48d2af46..ca5b67883b 100644 --- a/sdk/go/gcp/compute/securityPolicy.go +++ b/sdk/go/gcp/compute/securityPolicy.go @@ -10,12 +10,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A Security Policy defines an IP blacklist or whitelist that protects load balanced Google Cloud services by denying or permitting traffic from specified IP ranges. For more information -// see the [official documentation](https://cloud.google.com/armor/docs/configure-security-policies) -// and the [API](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies). -// -// Security Policy is used by google_compute_backend_service. -// // ## Example Usage // // ```go @@ -175,6 +169,28 @@ import ( // } // // ``` +// +// ## Import +// +// # Security policies can be imported using any of the following formats +// +// ```sh +// +// $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy projects/{{project}}/global/securityPolicies/{{name}} +// +// ``` +// +// ```sh +// +// $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{project}}/{{name}} +// +// ``` +// +// ```sh +// +// $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{name}} +// +// ``` type SecurityPolicy struct { pulumi.CustomResourceState @@ -198,7 +214,7 @@ type SecurityPolicy struct { // rule (rule with priority 2147483647 and match "\*"). If no rules are provided when creating a // security policy, a default rule with action "allow" will be added. Structure is documented below. Rules SecurityPolicyRuleArrayOutput `pulumi:"rules"` - // The URI of the created resourc + // The URI of the created resource. SelfLink pulumi.StringOutput `pulumi:"selfLink"` // The type indicates the intended use of the security policy. This field can be set only at resource creation time. // * CLOUD_ARMOR - Cloud Armor backend security policies can be configured to filter incoming HTTP requests targeting backend services. @@ -260,7 +276,7 @@ type securityPolicyState struct { // rule (rule with priority 2147483647 and match "\*"). If no rules are provided when creating a // security policy, a default rule with action "allow" will be added. Structure is documented below. Rules []SecurityPolicyRule `pulumi:"rules"` - // The URI of the created resourc + // The URI of the created resource. SelfLink *string `pulumi:"selfLink"` // The type indicates the intended use of the security policy. This field can be set only at resource creation time. // * CLOUD_ARMOR - Cloud Armor backend security policies can be configured to filter incoming HTTP requests targeting backend services. @@ -294,7 +310,7 @@ type SecurityPolicyState struct { // rule (rule with priority 2147483647 and match "\*"). If no rules are provided when creating a // security policy, a default rule with action "allow" will be added. Structure is documented below. Rules SecurityPolicyRuleArrayInput - // The URI of the created resourc + // The URI of the created resource. SelfLink pulumi.StringPtrInput // The type indicates the intended use of the security policy. This field can be set only at resource creation time. // * CLOUD_ARMOR - Cloud Armor backend security policies can be configured to filter incoming HTTP requests targeting backend services. @@ -505,7 +521,7 @@ func (o SecurityPolicyOutput) Rules() SecurityPolicyRuleArrayOutput { return o.ApplyT(func(v *SecurityPolicy) SecurityPolicyRuleArrayOutput { return v.Rules }).(SecurityPolicyRuleArrayOutput) } -// The URI of the created resourc +// The URI of the created resource. func (o SecurityPolicyOutput) SelfLink() pulumi.StringOutput { return o.ApplyT(func(v *SecurityPolicy) pulumi.StringOutput { return v.SelfLink }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/compute/securityScanConfig.go b/sdk/go/gcp/compute/securityScanConfig.go index 770cf22420..3405259ee8 100644 --- a/sdk/go/gcp/compute/securityScanConfig.go +++ b/sdk/go/gcp/compute/securityScanConfig.go @@ -11,16 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A ScanConfig resource contains the configurations to launch a scan. -// -// To get more information about ScanConfig, see: -// -// * [API documentation](https://cloud.google.com/security-scanner/docs/reference/rest/v1beta/projects.scanConfigs) -// * How-to Guides -// - [Using Cloud Security Scanner](https://cloud.google.com/security-scanner/docs/scanning) -// -// > **Warning:** All arguments including `authentication.google_account.password` and `authentication.custom_account.password` will be stored in the raw state as plain-text. -// // ## Example Usage // ### Scan Config Basic // @@ -43,7 +33,7 @@ import ( // return err // } // _, err = compute.NewSecurityScanConfig(ctx, "scan-config", &compute.SecurityScanConfigArgs{ -// DisplayName: pulumi.String("scan-config"), +// DisplayName: pulumi.String("terraform-scan-config"), // StartingUrls: pulumi.StringArray{ // scannerStaticIp.Address.ApplyT(func(address string) (string, error) { // return fmt.Sprintf("http://%v", address), nil diff --git a/sdk/go/gcp/compute/snapshot.go b/sdk/go/gcp/compute/snapshot.go index a4dfe717b8..a61631b2fa 100644 --- a/sdk/go/gcp/compute/snapshot.go +++ b/sdk/go/gcp/compute/snapshot.go @@ -11,28 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Represents a Persistent Disk Snapshot resource. -// -// Use snapshots to back up data from your persistent disks. Snapshots are -// different from public images and custom images, which are used primarily -// to create instances or configure instance templates. Snapshots are useful -// for periodic backup of the data on your persistent disks. You can create -// snapshots from persistent disks even while they are attached to running -// instances. -// -// Snapshots are incremental, so you can create regular snapshots on a -// persistent disk faster and at a much lower cost than if you regularly -// created a full image of the disk. -// -// To get more information about Snapshot, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/snapshots) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/compute/docs/disks/create-snapshots) -// -// > **Warning:** All arguments including `snapshot_encryption_key.raw_key` and `source_disk_encryption_key.raw_key` will be stored in the raw -// state as plain-text. -// // ## Example Usage // ### Snapshot Basic // diff --git a/sdk/go/gcp/compute/sslcertificate.go b/sdk/go/gcp/compute/sslcertificate.go index b31ebef922..65e3480f42 100644 --- a/sdk/go/gcp/compute/sslcertificate.go +++ b/sdk/go/gcp/compute/sslcertificate.go @@ -11,19 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// An SslCertificate resource, used for HTTPS load balancing. This resource -// provides a mechanism to upload an SSL key and certificate to -// the load balancer to serve secure connections from the user. -// -// To get more information about SslCertificate, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/sslCertificates) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates) -// -// > **Warning:** All arguments including `certificate` and `privateKey` will be stored in the raw -// state as plain-text. -// // ## Example Usage // ### Ssl Certificate Basic // diff --git a/sdk/go/gcp/compute/subnetwork.go b/sdk/go/gcp/compute/subnetwork.go index 672cf9a012..fc3288cc4b 100644 --- a/sdk/go/gcp/compute/subnetwork.go +++ b/sdk/go/gcp/compute/subnetwork.go @@ -321,11 +321,12 @@ type Subnetwork struct { // is ready to be promoted to ACTIVE or is currently draining. // Possible values are `ACTIVE` and `BACKUP`. Role pulumi.StringPtrOutput `pulumi:"role"` - // An array of configurations for secondary IP ranges for VM instances - // contained in this subnetwork. The primary IP of such VM must belong - // to the primary ipCidrRange of the subnetwork. The alias IPs may belong - // to either primary or secondary ranges. - // Structure is documented below. + // An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + // VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + // ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + // to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + // syntax: 'example=[]' For more details about this behavior, see [this + // section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). SecondaryIpRanges SubnetworkSecondaryIpRangeArrayOutput `pulumi:"secondaryIpRanges"` // The URI of the created resource. SelfLink pulumi.StringOutput `pulumi:"selfLink"` @@ -435,11 +436,12 @@ type subnetworkState struct { // is ready to be promoted to ACTIVE or is currently draining. // Possible values are `ACTIVE` and `BACKUP`. Role *string `pulumi:"role"` - // An array of configurations for secondary IP ranges for VM instances - // contained in this subnetwork. The primary IP of such VM must belong - // to the primary ipCidrRange of the subnetwork. The alias IPs may belong - // to either primary or secondary ranges. - // Structure is documented below. + // An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + // VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + // ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + // to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + // syntax: 'example=[]' For more details about this behavior, see [this + // section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). SecondaryIpRanges []SubnetworkSecondaryIpRange `pulumi:"secondaryIpRanges"` // The URI of the created resource. SelfLink *string `pulumi:"selfLink"` @@ -515,11 +517,12 @@ type SubnetworkState struct { // is ready to be promoted to ACTIVE or is currently draining. // Possible values are `ACTIVE` and `BACKUP`. Role pulumi.StringPtrInput - // An array of configurations for secondary IP ranges for VM instances - // contained in this subnetwork. The primary IP of such VM must belong - // to the primary ipCidrRange of the subnetwork. The alias IPs may belong - // to either primary or secondary ranges. - // Structure is documented below. + // An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + // VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + // ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + // to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + // syntax: 'example=[]' For more details about this behavior, see [this + // section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). SecondaryIpRanges SubnetworkSecondaryIpRangeArrayInput // The URI of the created resource. SelfLink pulumi.StringPtrInput @@ -586,11 +589,12 @@ type subnetworkArgs struct { // is ready to be promoted to ACTIVE or is currently draining. // Possible values are `ACTIVE` and `BACKUP`. Role *string `pulumi:"role"` - // An array of configurations for secondary IP ranges for VM instances - // contained in this subnetwork. The primary IP of such VM must belong - // to the primary ipCidrRange of the subnetwork. The alias IPs may belong - // to either primary or secondary ranges. - // Structure is documented below. + // An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + // VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + // ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + // to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + // syntax: 'example=[]' For more details about this behavior, see [this + // section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). SecondaryIpRanges []SubnetworkSecondaryIpRange `pulumi:"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. @@ -652,11 +656,12 @@ type SubnetworkArgs struct { // is ready to be promoted to ACTIVE or is currently draining. // Possible values are `ACTIVE` and `BACKUP`. Role pulumi.StringPtrInput - // An array of configurations for secondary IP ranges for VM instances - // contained in this subnetwork. The primary IP of such VM must belong - // to the primary ipCidrRange of the subnetwork. The alias IPs may belong - // to either primary or secondary ranges. - // Structure is documented below. + // An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + // VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + // ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + // to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + // syntax: 'example=[]' For more details about this behavior, see [this + // section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). SecondaryIpRanges SubnetworkSecondaryIpRangeArrayInput // The stack type for this subnet to identify whether the IPv6 feature is enabled or not. // If not specified IPV4_ONLY will be used. @@ -867,11 +872,12 @@ func (o SubnetworkOutput) Role() pulumi.StringPtrOutput { return o.ApplyT(func(v *Subnetwork) pulumi.StringPtrOutput { return v.Role }).(pulumi.StringPtrOutput) } -// An array of configurations for secondary IP ranges for VM instances -// contained in this subnetwork. The primary IP of such VM must belong -// to the primary ipCidrRange of the subnetwork. The alias IPs may belong -// to either primary or secondary ranges. -// Structure is documented below. +// An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such +// VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary +// ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) +// to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following +// syntax: 'example=[]' For more details about this behavior, see [this +// section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). func (o SubnetworkOutput) SecondaryIpRanges() SubnetworkSecondaryIpRangeArrayOutput { return o.ApplyT(func(v *Subnetwork) SubnetworkSecondaryIpRangeArrayOutput { return v.SecondaryIpRanges }).(SubnetworkSecondaryIpRangeArrayOutput) } diff --git a/sdk/go/gcp/compute/targetInstance.go b/sdk/go/gcp/compute/targetInstance.go index c3f3c415eb..982e7da10d 100644 --- a/sdk/go/gcp/compute/targetInstance.go +++ b/sdk/go/gcp/compute/targetInstance.go @@ -185,7 +185,8 @@ type TargetInstance struct { // Default value is `NO_NAT`. // Possible values are `NO_NAT`. NatPolicy pulumi.StringPtrOutput `pulumi:"natPolicy"` - // The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + // The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + // the network that the default network interface belongs to. Network pulumi.StringPtrOutput `pulumi:"network"` // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. @@ -252,7 +253,8 @@ type targetInstanceState struct { // Default value is `NO_NAT`. // Possible values are `NO_NAT`. NatPolicy *string `pulumi:"natPolicy"` - // The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + // The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + // the network that the default network interface belongs to. Network *string `pulumi:"network"` // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. @@ -288,7 +290,8 @@ type TargetInstanceState struct { // Default value is `NO_NAT`. // Possible values are `NO_NAT`. NatPolicy pulumi.StringPtrInput - // The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + // The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + // the network that the default network interface belongs to. Network pulumi.StringPtrInput // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. @@ -326,7 +329,8 @@ type targetInstanceArgs struct { // Default value is `NO_NAT`. // Possible values are `NO_NAT`. NatPolicy *string `pulumi:"natPolicy"` - // The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + // The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + // the network that the default network interface belongs to. Network *string `pulumi:"network"` // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. @@ -359,7 +363,8 @@ type TargetInstanceArgs struct { // Default value is `NO_NAT`. // Possible values are `NO_NAT`. NatPolicy pulumi.StringPtrInput - // The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + // The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + // the network that the default network interface belongs to. Network pulumi.StringPtrInput // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. @@ -494,7 +499,8 @@ func (o TargetInstanceOutput) NatPolicy() pulumi.StringPtrOutput { return o.ApplyT(func(v *TargetInstance) pulumi.StringPtrOutput { return v.NatPolicy }).(pulumi.StringPtrOutput) } -// The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. +// The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to +// the network that the default network interface belongs to. func (o TargetInstanceOutput) Network() pulumi.StringPtrOutput { return o.ApplyT(func(v *TargetInstance) pulumi.StringPtrOutput { return v.Network }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/compute/targetPool.go b/sdk/go/gcp/compute/targetPool.go index cd6f6746ec..f98bf7afa2 100644 --- a/sdk/go/gcp/compute/targetPool.go +++ b/sdk/go/gcp/compute/targetPool.go @@ -57,11 +57,9 @@ type TargetPool struct { // List of zero or one health check name or self_link. Only // legacy `compute.HttpHealthCheck` is supported. HealthChecks pulumi.StringPtrOutput `pulumi:"healthChecks"` - // List of instances in the pool. They can be given as - // URLs, or in the form of "zone/name". Note that the instances need not exist - // at the time of target pool creation, so there is no need to use the - // interpolation to create a dependency on the instances from the - // target pool. + // List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + // not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + // dependency on the instances from the target pool. Instances pulumi.StringArrayOutput `pulumi:"instances"` // A unique name for the resource, required by GCE. Changing // this forces a new resource to be created. @@ -120,11 +118,9 @@ type targetPoolState struct { // List of zero or one health check name or self_link. Only // legacy `compute.HttpHealthCheck` is supported. HealthChecks *string `pulumi:"healthChecks"` - // List of instances in the pool. They can be given as - // URLs, or in the form of "zone/name". Note that the instances need not exist - // at the time of target pool creation, so there is no need to use the - // interpolation to create a dependency on the instances from the - // target pool. + // List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + // not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + // dependency on the instances from the target pool. Instances []string `pulumi:"instances"` // A unique name for the resource, required by GCE. Changing // this forces a new resource to be created. @@ -155,11 +151,9 @@ type TargetPoolState struct { // List of zero or one health check name or self_link. Only // legacy `compute.HttpHealthCheck` is supported. HealthChecks pulumi.StringPtrInput - // List of instances in the pool. They can be given as - // URLs, or in the form of "zone/name". Note that the instances need not exist - // at the time of target pool creation, so there is no need to use the - // interpolation to create a dependency on the instances from the - // target pool. + // List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + // not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + // dependency on the instances from the target pool. Instances pulumi.StringArrayInput // A unique name for the resource, required by GCE. Changing // this forces a new resource to be created. @@ -194,11 +188,9 @@ type targetPoolArgs struct { // List of zero or one health check name or self_link. Only // legacy `compute.HttpHealthCheck` is supported. HealthChecks *string `pulumi:"healthChecks"` - // List of instances in the pool. They can be given as - // URLs, or in the form of "zone/name". Note that the instances need not exist - // at the time of target pool creation, so there is no need to use the - // interpolation to create a dependency on the instances from the - // target pool. + // List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + // not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + // dependency on the instances from the target pool. Instances []string `pulumi:"instances"` // A unique name for the resource, required by GCE. Changing // this forces a new resource to be created. @@ -228,11 +220,9 @@ type TargetPoolArgs struct { // List of zero or one health check name or self_link. Only // legacy `compute.HttpHealthCheck` is supported. HealthChecks pulumi.StringPtrInput - // List of instances in the pool. They can be given as - // URLs, or in the form of "zone/name". Note that the instances need not exist - // at the time of target pool creation, so there is no need to use the - // interpolation to create a dependency on the instances from the - // target pool. + // List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + // not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + // dependency on the instances from the target pool. Instances pulumi.StringArrayInput // A unique name for the resource, required by GCE. Changing // this forces a new resource to be created. @@ -359,11 +349,9 @@ func (o TargetPoolOutput) HealthChecks() pulumi.StringPtrOutput { return o.ApplyT(func(v *TargetPool) pulumi.StringPtrOutput { return v.HealthChecks }).(pulumi.StringPtrOutput) } -// List of instances in the pool. They can be given as -// URLs, or in the form of "zone/name". Note that the instances need not exist -// at the time of target pool creation, so there is no need to use the -// interpolation to create a dependency on the instances from the -// target pool. +// List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need +// not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a +// dependency on the instances from the target pool. func (o TargetPoolOutput) Instances() pulumi.StringArrayOutput { return o.ApplyT(func(v *TargetPool) pulumi.StringArrayOutput { return v.Instances }).(pulumi.StringArrayOutput) } diff --git a/sdk/go/gcp/compute/vpntunnel.go b/sdk/go/gcp/compute/vpntunnel.go index fb76cc17d0..b12027cfbc 100644 --- a/sdk/go/gcp/compute/vpntunnel.go +++ b/sdk/go/gcp/compute/vpntunnel.go @@ -11,18 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// VPN tunnel resource. -// -// To get more information about VpnTunnel, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/vpnTunnels) -// * How-to Guides -// - [Cloud VPN Overview](https://cloud.google.com/vpn/docs/concepts/overview) -// - [Networks and Tunnel Routing](https://cloud.google.com/vpn/docs/concepts/choosing-networks-routing) -// -// > **Warning:** All arguments including `sharedSecret` will be stored in the raw -// state as plain-text. -// // ## Example Usage // ### Vpn Tunnel Basic // diff --git a/sdk/go/gcp/config/config.go b/sdk/go/gcp/config/config.go index ffc2657e74..09e96d4f8c 100644 --- a/sdk/go/gcp/config/config.go +++ b/sdk/go/gcp/config/config.go @@ -119,6 +119,9 @@ func GetCloudSchedulerCustomEndpoint(ctx *pulumi.Context) string { func GetCloudTasksCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:cloudTasksCustomEndpoint") } +func GetCloudbuildv2CustomEndpoint(ctx *pulumi.Context) string { + return config.Get(ctx, "gcp:cloudbuildv2CustomEndpoint") +} func GetClouddeployCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:clouddeployCustomEndpoint") } @@ -188,9 +191,6 @@ func GetDialogflowCustomEndpoint(ctx *pulumi.Context) string { func GetDialogflowCxCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:dialogflowCxCustomEndpoint") } -func GetDisableGooglePartnerName(ctx *pulumi.Context) bool { - return config.GetBool(ctx, "gcp:disableGooglePartnerName") -} func GetDnsCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:dnsCustomEndpoint") } @@ -236,9 +236,6 @@ func GetGkeHubCustomEndpoint(ctx *pulumi.Context) string { func GetGkehubFeatureCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:gkehubFeatureCustomEndpoint") } -func GetGooglePartnerName(ctx *pulumi.Context) string { - return config.Get(ctx, "gcp:googlePartnerName") -} func GetHealthcareCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:healthcareCustomEndpoint") } @@ -394,6 +391,9 @@ func GetStorageTransferCustomEndpoint(ctx *pulumi.Context) string { func GetTagsCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:tagsCustomEndpoint") } +func GetTagsLocationCustomEndpoint(ctx *pulumi.Context) string { + return config.Get(ctx, "gcp:tagsLocationCustomEndpoint") +} func GetTpuCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:tpuCustomEndpoint") } @@ -409,6 +409,9 @@ func GetVpcAccessCustomEndpoint(ctx *pulumi.Context) string { func GetWorkflowsCustomEndpoint(ctx *pulumi.Context) string { return config.Get(ctx, "gcp:workflowsCustomEndpoint") } +func GetWorkstationsCustomEndpoint(ctx *pulumi.Context) string { + return config.Get(ctx, "gcp:workstationsCustomEndpoint") +} func GetZone(ctx *pulumi.Context) string { v, err := config.Try(ctx, "gcp:zone") if err == nil { diff --git a/sdk/go/gcp/container/attachedCluster.go b/sdk/go/gcp/container/attachedCluster.go index c252bfb38e..67500f4c33 100644 --- a/sdk/go/gcp/container/attachedCluster.go +++ b/sdk/go/gcp/container/attachedCluster.go @@ -70,6 +70,56 @@ import ( // } // // ``` +// ### Container Attached Cluster Ignore Errors +// +// ```go +// package main +// +// import ( +// +// "fmt" +// +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/container" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// project, err := organizations.LookupProject(ctx, nil, nil) +// if err != nil { +// return err +// } +// versions, err := container.GetAttachedVersions(ctx, &container.GetAttachedVersionsArgs{ +// Location: "us-west1", +// Project: project.ProjectId, +// }, nil) +// if err != nil { +// return err +// } +// _, err = container.NewAttachedCluster(ctx, "primary", &container.AttachedClusterArgs{ +// Location: pulumi.String("us-west1"), +// Project: *pulumi.String(project.ProjectId), +// Description: pulumi.String("Test cluster"), +// Distribution: pulumi.String("aks"), +// OidcConfig: &container.AttachedClusterOidcConfigArgs{ +// IssuerUrl: pulumi.String("https://oidc.issuer.url"), +// }, +// PlatformVersion: *pulumi.String(versions.ValidVersions[0]), +// Fleet: &container.AttachedClusterFleetArgs{ +// Project: pulumi.String(fmt.Sprintf("projects/%v", project.Number)), +// }, +// DeletionPolicy: pulumi.String("DELETE_IGNORE_ERRORS"), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` // // ## Import // @@ -111,6 +161,8 @@ type AttachedCluster struct { ClusterRegion pulumi.StringOutput `pulumi:"clusterRegion"` // Output only. The time at which this cluster was created. CreateTime pulumi.StringOutput `pulumi:"createTime"` + // Policy to determine what flags to send on delete. + DeletionPolicy pulumi.StringPtrOutput `pulumi:"deletionPolicy"` // A human readable description of this attached cluster. Cannot be longer // than 255 UTF-8 encoded bytes. Description pulumi.StringPtrOutput `pulumi:"description"` @@ -226,6 +278,8 @@ type attachedClusterState struct { ClusterRegion *string `pulumi:"clusterRegion"` // Output only. The time at which this cluster was created. CreateTime *string `pulumi:"createTime"` + // Policy to determine what flags to send on delete. + DeletionPolicy *string `pulumi:"deletionPolicy"` // A human readable description of this attached cluster. Cannot be longer // than 255 UTF-8 encoded bytes. Description *string `pulumi:"description"` @@ -298,6 +352,8 @@ type AttachedClusterState struct { ClusterRegion pulumi.StringPtrInput // Output only. The time at which this cluster was created. CreateTime pulumi.StringPtrInput + // Policy to determine what flags to send on delete. + DeletionPolicy pulumi.StringPtrInput // A human readable description of this attached cluster. Cannot be longer // than 255 UTF-8 encoded bytes. Description pulumi.StringPtrInput @@ -368,6 +424,8 @@ type attachedClusterArgs struct { // Configuration related to the cluster RBAC settings. // Structure is documented below. Authorization *AttachedClusterAuthorization `pulumi:"authorization"` + // Policy to determine what flags to send on delete. + DeletionPolicy *string `pulumi:"deletionPolicy"` // A human readable description of this attached cluster. Cannot be longer // than 255 UTF-8 encoded bytes. Description *string `pulumi:"description"` @@ -417,6 +475,8 @@ type AttachedClusterArgs struct { // Configuration related to the cluster RBAC settings. // Structure is documented below. Authorization AttachedClusterAuthorizationPtrInput + // Policy to determine what flags to send on delete. + DeletionPolicy pulumi.StringPtrInput // A human readable description of this attached cluster. Cannot be longer // than 255 UTF-8 encoded bytes. Description pulumi.StringPtrInput @@ -569,6 +629,11 @@ func (o AttachedClusterOutput) CreateTime() pulumi.StringOutput { return o.ApplyT(func(v *AttachedCluster) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) } +// Policy to determine what flags to send on delete. +func (o AttachedClusterOutput) DeletionPolicy() pulumi.StringPtrOutput { + return o.ApplyT(func(v *AttachedCluster) pulumi.StringPtrOutput { return v.DeletionPolicy }).(pulumi.StringPtrOutput) +} + // A human readable description of this attached cluster. Cannot be longer // than 255 UTF-8 encoded bytes. func (o AttachedClusterOutput) Description() pulumi.StringPtrOutput { diff --git a/sdk/go/gcp/container/cluster.go b/sdk/go/gcp/container/cluster.go index 1eb5594a72..62ee7bbd4a 100644 --- a/sdk/go/gcp/container/cluster.go +++ b/sdk/go/gcp/container/cluster.go @@ -10,14 +10,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Manages a Google Kubernetes Engine (GKE) cluster. For more information see -// [the official documentation](https://cloud.google.com/container-engine/docs/clusters) -// and [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters). -// -// > **Warning:** All arguments and attributes, including basic auth username and -// passwords as well as certificate outputs will be stored in the raw state as -// plaintext. [Read more about secrets in state](https://www.pulumi.com/docs/intro/concepts/programming-model/#secrets). -// // ## Example Usage // ### With A Separately Managed Node Pool (Recommended) // @@ -74,40 +66,6 @@ import ( // > **Note:** It is recommended that node pools be created and managed as separate resources as in the example above. // This allows node pools to be added and removed without recreating the cluster. Node pools defined directly in the // `container.Cluster` resource cannot be removed without re-creating the cluster. -// ### Autopilot -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/container" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := serviceAccount.NewAccount(ctx, "default", &serviceAccount.AccountArgs{ -// AccountId: pulumi.String("service-account-id"), -// DisplayName: pulumi.String("Service Account"), -// }) -// if err != nil { -// return err -// } -// _, err = container.NewCluster(ctx, "primary", &container.ClusterArgs{ -// EnableAutopilot: pulumi.Bool(true), -// Location: pulumi.String("us-central1-a"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // @@ -131,7 +89,7 @@ import ( // // ``` // -// For example, the following fields will show diffs if set in config* `min_master_version` * `remove_default_node_pool` +// For example, the following fields will show diffs if set in config- `min_master_version` - `remove_default_node_pool` type Cluster struct { pulumi.CustomResourceState @@ -156,7 +114,7 @@ type Cluster struct { // automatically chosen or specify a `/14` block in `10.0.0.0/8`. This field will // only work for routes-based clusters, where `ipAllocationPolicy` is not defined. ClusterIpv4Cidr pulumi.StringOutput `pulumi:"clusterIpv4Cidr"` - // Configuration for + // ) Configuration for // [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, // Structure is documented below. ClusterTelemetry ClusterClusterTelemetryOutput `pulumi:"clusterTelemetry"` @@ -198,6 +156,7 @@ type Cluster struct { // this cluster. Note that when this option is enabled, the cluster cannot be upgraded // and will be automatically deleted after 30 days. EnableKubernetesAlpha pulumi.BoolPtrOutput `pulumi:"enableKubernetesAlpha"` + // ) // Whether L4ILB Subsetting is enabled for this cluster. EnableL4IlbSubsetting pulumi.BoolPtrOutput `pulumi:"enableL4IlbSubsetting"` // Whether the ABAC authorizer is enabled for this cluster. @@ -214,7 +173,7 @@ type Cluster struct { Endpoint pulumi.StringOutput `pulumi:"endpoint"` // Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. GatewayApiConfig ClusterGatewayApiConfigPtrOutput `pulumi:"gatewayApiConfig"` - // . Structure is documented below. + // ). Structure is documented below. IdentityServiceConfig ClusterIdentityServiceConfigOutput `pulumi:"identityServiceConfig"` // The number of nodes to create in this // cluster's default node pool. In regional or multi-zonal clusters, this is the @@ -266,15 +225,9 @@ type Cluster struct { MasterVersion pulumi.StringOutput `pulumi:"masterVersion"` // Structure is documented below. MeshCertificates ClusterMeshCertificatesOutput `pulumi:"meshCertificates"` - // The minimum version of the master. GKE - // will auto-update the master to new versions, so this does not guarantee the - // current master version--use the read-only `masterVersion` field to obtain that. - // If unset, the cluster's version will be set by GKE to the version of the most recent - // official release (which is not necessarily the latest version). Most users will find - // the `container.getEngineVersions` data source useful - it indicates which versions - // are available. If you intend to specify versions manually, - // [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - // describe the various acceptable formats for this field. + // The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + // current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + // set by GKE to the version of the most recent official release (which is not necessarily the latest version). MinMasterVersion pulumi.StringPtrOutput `pulumi:"minMasterVersion"` // Monitoring configuration for the cluster. // Structure is documented below. @@ -302,11 +255,7 @@ type Cluster struct { // Options are `VPC_NATIVE` or `ROUTES`. `VPC_NATIVE` enables [IP aliasing](https://cloud.google.com/kubernetes-engine/docs/how-to/ip-aliases), // and requires the `ipAllocationPolicy` block to be defined. By default, when this field is unspecified and no `ipAllocationPolicy` blocks are set, GKE will create a `ROUTES`-based cluster. NetworkingMode pulumi.StringOutput `pulumi:"networkingMode"` - // Parameters used in creating the default node pool. - // Generally, this field should not be used at the same time as a - // `container.NodePool` or a `nodePool` block; this configuration - // manages the default node pool, which isn't recommended to be used. - // Structure is documented below. + // The configuration of the nodepool NodeConfig ClusterNodeConfigOutput `pulumi:"nodeConfig"` // The list of zones in which the cluster's nodes // are located. Nodes must be in the region of their regional cluster or in the @@ -326,14 +275,12 @@ type Cluster struct { // to say "these are the _only_ node pools associated with this cluster", use the // container.NodePool resource instead of this property. NodePools ClusterNodePoolArrayOutput `pulumi:"nodePools"` - // The Kubernetes version on the nodes. Must either be unset - // or set to the same value as `minMasterVersion` on create. Defaults to the default - // version set by GKE which is not necessarily the latest version. This only affects - // nodes in the default node pool. While a fuzzy version can be specified, it's - // recommended that you specify explicit versions as the provider will see spurious diffs - // when fuzzy versions are used. See the `container.getEngineVersions` data source's - // `versionPrefix` field to approximate fuzzy versions. - // To update nodes in other node pools, use the `version` attribute on the node pool. + // The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + // Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + // default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + // Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + // version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + // use the version attribute on the node pool. NodeVersion pulumi.StringOutput `pulumi:"nodeVersion"` // Configuration for the [cluster upgrade notifications](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-upgrade-notifications) feature. Structure is documented below. NotificationConfig ClusterNotificationConfigOutput `pulumi:"notificationConfig"` @@ -350,15 +297,8 @@ type Cluster struct { // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project pulumi.StringOutput `pulumi:"project"` - // Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - // feature, which provide more control over automatic upgrades of your GKE clusters. - // When updating this field, GKE imposes specific version requirements. See - // [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - // for more details; the `container.getEngineVersions` datasource can provide - // the default version for a channel. Note that removing the `releaseChannel` - // field from your config will cause the provider to stop managing your cluster's - // release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - // channel. Structure is documented below. + // Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + // clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. ReleaseChannel ClusterReleaseChannelOutput `pulumi:"releaseChannel"` // If `true`, deletes the default node // pool upon cluster creation. If you're using `container.NodePool` @@ -448,7 +388,7 @@ type clusterState struct { // automatically chosen or specify a `/14` block in `10.0.0.0/8`. This field will // only work for routes-based clusters, where `ipAllocationPolicy` is not defined. ClusterIpv4Cidr *string `pulumi:"clusterIpv4Cidr"` - // Configuration for + // ) Configuration for // [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, // Structure is documented below. ClusterTelemetry *ClusterClusterTelemetry `pulumi:"clusterTelemetry"` @@ -490,6 +430,7 @@ type clusterState struct { // this cluster. Note that when this option is enabled, the cluster cannot be upgraded // and will be automatically deleted after 30 days. EnableKubernetesAlpha *bool `pulumi:"enableKubernetesAlpha"` + // ) // Whether L4ILB Subsetting is enabled for this cluster. EnableL4IlbSubsetting *bool `pulumi:"enableL4IlbSubsetting"` // Whether the ABAC authorizer is enabled for this cluster. @@ -506,7 +447,7 @@ type clusterState struct { Endpoint *string `pulumi:"endpoint"` // Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. GatewayApiConfig *ClusterGatewayApiConfig `pulumi:"gatewayApiConfig"` - // . Structure is documented below. + // ). Structure is documented below. IdentityServiceConfig *ClusterIdentityServiceConfig `pulumi:"identityServiceConfig"` // The number of nodes to create in this // cluster's default node pool. In regional or multi-zonal clusters, this is the @@ -558,15 +499,9 @@ type clusterState struct { MasterVersion *string `pulumi:"masterVersion"` // Structure is documented below. MeshCertificates *ClusterMeshCertificates `pulumi:"meshCertificates"` - // The minimum version of the master. GKE - // will auto-update the master to new versions, so this does not guarantee the - // current master version--use the read-only `masterVersion` field to obtain that. - // If unset, the cluster's version will be set by GKE to the version of the most recent - // official release (which is not necessarily the latest version). Most users will find - // the `container.getEngineVersions` data source useful - it indicates which versions - // are available. If you intend to specify versions manually, - // [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - // describe the various acceptable formats for this field. + // The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + // current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + // set by GKE to the version of the most recent official release (which is not necessarily the latest version). MinMasterVersion *string `pulumi:"minMasterVersion"` // Monitoring configuration for the cluster. // Structure is documented below. @@ -594,11 +529,7 @@ type clusterState struct { // Options are `VPC_NATIVE` or `ROUTES`. `VPC_NATIVE` enables [IP aliasing](https://cloud.google.com/kubernetes-engine/docs/how-to/ip-aliases), // and requires the `ipAllocationPolicy` block to be defined. By default, when this field is unspecified and no `ipAllocationPolicy` blocks are set, GKE will create a `ROUTES`-based cluster. NetworkingMode *string `pulumi:"networkingMode"` - // Parameters used in creating the default node pool. - // Generally, this field should not be used at the same time as a - // `container.NodePool` or a `nodePool` block; this configuration - // manages the default node pool, which isn't recommended to be used. - // Structure is documented below. + // The configuration of the nodepool NodeConfig *ClusterNodeConfig `pulumi:"nodeConfig"` // The list of zones in which the cluster's nodes // are located. Nodes must be in the region of their regional cluster or in the @@ -618,14 +549,12 @@ type clusterState struct { // to say "these are the _only_ node pools associated with this cluster", use the // container.NodePool resource instead of this property. NodePools []ClusterNodePool `pulumi:"nodePools"` - // The Kubernetes version on the nodes. Must either be unset - // or set to the same value as `minMasterVersion` on create. Defaults to the default - // version set by GKE which is not necessarily the latest version. This only affects - // nodes in the default node pool. While a fuzzy version can be specified, it's - // recommended that you specify explicit versions as the provider will see spurious diffs - // when fuzzy versions are used. See the `container.getEngineVersions` data source's - // `versionPrefix` field to approximate fuzzy versions. - // To update nodes in other node pools, use the `version` attribute on the node pool. + // The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + // Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + // default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + // Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + // version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + // use the version attribute on the node pool. NodeVersion *string `pulumi:"nodeVersion"` // Configuration for the [cluster upgrade notifications](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-upgrade-notifications) feature. Structure is documented below. NotificationConfig *ClusterNotificationConfig `pulumi:"notificationConfig"` @@ -642,15 +571,8 @@ type clusterState struct { // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project *string `pulumi:"project"` - // Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - // feature, which provide more control over automatic upgrades of your GKE clusters. - // When updating this field, GKE imposes specific version requirements. See - // [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - // for more details; the `container.getEngineVersions` datasource can provide - // the default version for a channel. Note that removing the `releaseChannel` - // field from your config will cause the provider to stop managing your cluster's - // release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - // channel. Structure is documented below. + // Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + // clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. ReleaseChannel *ClusterReleaseChannel `pulumi:"releaseChannel"` // If `true`, deletes the default node // pool upon cluster creation. If you're using `container.NodePool` @@ -712,7 +634,7 @@ type ClusterState struct { // automatically chosen or specify a `/14` block in `10.0.0.0/8`. This field will // only work for routes-based clusters, where `ipAllocationPolicy` is not defined. ClusterIpv4Cidr pulumi.StringPtrInput - // Configuration for + // ) Configuration for // [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, // Structure is documented below. ClusterTelemetry ClusterClusterTelemetryPtrInput @@ -754,6 +676,7 @@ type ClusterState struct { // this cluster. Note that when this option is enabled, the cluster cannot be upgraded // and will be automatically deleted after 30 days. EnableKubernetesAlpha pulumi.BoolPtrInput + // ) // Whether L4ILB Subsetting is enabled for this cluster. EnableL4IlbSubsetting pulumi.BoolPtrInput // Whether the ABAC authorizer is enabled for this cluster. @@ -770,7 +693,7 @@ type ClusterState struct { Endpoint pulumi.StringPtrInput // Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. GatewayApiConfig ClusterGatewayApiConfigPtrInput - // . Structure is documented below. + // ). Structure is documented below. IdentityServiceConfig ClusterIdentityServiceConfigPtrInput // The number of nodes to create in this // cluster's default node pool. In regional or multi-zonal clusters, this is the @@ -822,15 +745,9 @@ type ClusterState struct { MasterVersion pulumi.StringPtrInput // Structure is documented below. MeshCertificates ClusterMeshCertificatesPtrInput - // The minimum version of the master. GKE - // will auto-update the master to new versions, so this does not guarantee the - // current master version--use the read-only `masterVersion` field to obtain that. - // If unset, the cluster's version will be set by GKE to the version of the most recent - // official release (which is not necessarily the latest version). Most users will find - // the `container.getEngineVersions` data source useful - it indicates which versions - // are available. If you intend to specify versions manually, - // [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - // describe the various acceptable formats for this field. + // The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + // current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + // set by GKE to the version of the most recent official release (which is not necessarily the latest version). MinMasterVersion pulumi.StringPtrInput // Monitoring configuration for the cluster. // Structure is documented below. @@ -858,11 +775,7 @@ type ClusterState struct { // Options are `VPC_NATIVE` or `ROUTES`. `VPC_NATIVE` enables [IP aliasing](https://cloud.google.com/kubernetes-engine/docs/how-to/ip-aliases), // and requires the `ipAllocationPolicy` block to be defined. By default, when this field is unspecified and no `ipAllocationPolicy` blocks are set, GKE will create a `ROUTES`-based cluster. NetworkingMode pulumi.StringPtrInput - // Parameters used in creating the default node pool. - // Generally, this field should not be used at the same time as a - // `container.NodePool` or a `nodePool` block; this configuration - // manages the default node pool, which isn't recommended to be used. - // Structure is documented below. + // The configuration of the nodepool NodeConfig ClusterNodeConfigPtrInput // The list of zones in which the cluster's nodes // are located. Nodes must be in the region of their regional cluster or in the @@ -882,14 +795,12 @@ type ClusterState struct { // to say "these are the _only_ node pools associated with this cluster", use the // container.NodePool resource instead of this property. NodePools ClusterNodePoolArrayInput - // The Kubernetes version on the nodes. Must either be unset - // or set to the same value as `minMasterVersion` on create. Defaults to the default - // version set by GKE which is not necessarily the latest version. This only affects - // nodes in the default node pool. While a fuzzy version can be specified, it's - // recommended that you specify explicit versions as the provider will see spurious diffs - // when fuzzy versions are used. See the `container.getEngineVersions` data source's - // `versionPrefix` field to approximate fuzzy versions. - // To update nodes in other node pools, use the `version` attribute on the node pool. + // The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + // Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + // default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + // Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + // version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + // use the version attribute on the node pool. NodeVersion pulumi.StringPtrInput // Configuration for the [cluster upgrade notifications](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-upgrade-notifications) feature. Structure is documented below. NotificationConfig ClusterNotificationConfigPtrInput @@ -906,15 +817,8 @@ type ClusterState struct { // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project pulumi.StringPtrInput - // Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - // feature, which provide more control over automatic upgrades of your GKE clusters. - // When updating this field, GKE imposes specific version requirements. See - // [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - // for more details; the `container.getEngineVersions` datasource can provide - // the default version for a channel. Note that removing the `releaseChannel` - // field from your config will cause the provider to stop managing your cluster's - // release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - // channel. Structure is documented below. + // Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + // clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. ReleaseChannel ClusterReleaseChannelPtrInput // If `true`, deletes the default node // pool upon cluster creation. If you're using `container.NodePool` @@ -980,7 +884,7 @@ type clusterArgs struct { // automatically chosen or specify a `/14` block in `10.0.0.0/8`. This field will // only work for routes-based clusters, where `ipAllocationPolicy` is not defined. ClusterIpv4Cidr *string `pulumi:"clusterIpv4Cidr"` - // Configuration for + // ) Configuration for // [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, // Structure is documented below. ClusterTelemetry *ClusterClusterTelemetry `pulumi:"clusterTelemetry"` @@ -1022,6 +926,7 @@ type clusterArgs struct { // this cluster. Note that when this option is enabled, the cluster cannot be upgraded // and will be automatically deleted after 30 days. EnableKubernetesAlpha *bool `pulumi:"enableKubernetesAlpha"` + // ) // Whether L4ILB Subsetting is enabled for this cluster. EnableL4IlbSubsetting *bool `pulumi:"enableL4IlbSubsetting"` // Whether the ABAC authorizer is enabled for this cluster. @@ -1036,7 +941,7 @@ type clusterArgs struct { EnableTpu *bool `pulumi:"enableTpu"` // Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. GatewayApiConfig *ClusterGatewayApiConfig `pulumi:"gatewayApiConfig"` - // . Structure is documented below. + // ). Structure is documented below. IdentityServiceConfig *ClusterIdentityServiceConfig `pulumi:"identityServiceConfig"` // The number of nodes to create in this // cluster's default node pool. In regional or multi-zonal clusters, this is the @@ -1082,15 +987,9 @@ type clusterArgs struct { MasterAuthorizedNetworksConfig *ClusterMasterAuthorizedNetworksConfig `pulumi:"masterAuthorizedNetworksConfig"` // Structure is documented below. MeshCertificates *ClusterMeshCertificates `pulumi:"meshCertificates"` - // The minimum version of the master. GKE - // will auto-update the master to new versions, so this does not guarantee the - // current master version--use the read-only `masterVersion` field to obtain that. - // If unset, the cluster's version will be set by GKE to the version of the most recent - // official release (which is not necessarily the latest version). Most users will find - // the `container.getEngineVersions` data source useful - it indicates which versions - // are available. If you intend to specify versions manually, - // [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - // describe the various acceptable formats for this field. + // The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + // current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + // set by GKE to the version of the most recent official release (which is not necessarily the latest version). MinMasterVersion *string `pulumi:"minMasterVersion"` // Monitoring configuration for the cluster. // Structure is documented below. @@ -1118,11 +1017,7 @@ type clusterArgs struct { // Options are `VPC_NATIVE` or `ROUTES`. `VPC_NATIVE` enables [IP aliasing](https://cloud.google.com/kubernetes-engine/docs/how-to/ip-aliases), // and requires the `ipAllocationPolicy` block to be defined. By default, when this field is unspecified and no `ipAllocationPolicy` blocks are set, GKE will create a `ROUTES`-based cluster. NetworkingMode *string `pulumi:"networkingMode"` - // Parameters used in creating the default node pool. - // Generally, this field should not be used at the same time as a - // `container.NodePool` or a `nodePool` block; this configuration - // manages the default node pool, which isn't recommended to be used. - // Structure is documented below. + // The configuration of the nodepool NodeConfig *ClusterNodeConfig `pulumi:"nodeConfig"` // The list of zones in which the cluster's nodes // are located. Nodes must be in the region of their regional cluster or in the @@ -1142,14 +1037,12 @@ type clusterArgs struct { // to say "these are the _only_ node pools associated with this cluster", use the // container.NodePool resource instead of this property. NodePools []ClusterNodePool `pulumi:"nodePools"` - // The Kubernetes version on the nodes. Must either be unset - // or set to the same value as `minMasterVersion` on create. Defaults to the default - // version set by GKE which is not necessarily the latest version. This only affects - // nodes in the default node pool. While a fuzzy version can be specified, it's - // recommended that you specify explicit versions as the provider will see spurious diffs - // when fuzzy versions are used. See the `container.getEngineVersions` data source's - // `versionPrefix` field to approximate fuzzy versions. - // To update nodes in other node pools, use the `version` attribute on the node pool. + // The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + // Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + // default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + // Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + // version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + // use the version attribute on the node pool. NodeVersion *string `pulumi:"nodeVersion"` // Configuration for the [cluster upgrade notifications](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-upgrade-notifications) feature. Structure is documented below. NotificationConfig *ClusterNotificationConfig `pulumi:"notificationConfig"` @@ -1165,15 +1058,8 @@ type clusterArgs struct { // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project *string `pulumi:"project"` - // Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - // feature, which provide more control over automatic upgrades of your GKE clusters. - // When updating this field, GKE imposes specific version requirements. See - // [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - // for more details; the `container.getEngineVersions` datasource can provide - // the default version for a channel. Note that removing the `releaseChannel` - // field from your config will cause the provider to stop managing your cluster's - // release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - // channel. Structure is documented below. + // Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + // clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. ReleaseChannel *ClusterReleaseChannel `pulumi:"releaseChannel"` // If `true`, deletes the default node // pool upon cluster creation. If you're using `container.NodePool` @@ -1225,7 +1111,7 @@ type ClusterArgs struct { // automatically chosen or specify a `/14` block in `10.0.0.0/8`. This field will // only work for routes-based clusters, where `ipAllocationPolicy` is not defined. ClusterIpv4Cidr pulumi.StringPtrInput - // Configuration for + // ) Configuration for // [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, // Structure is documented below. ClusterTelemetry ClusterClusterTelemetryPtrInput @@ -1267,6 +1153,7 @@ type ClusterArgs struct { // this cluster. Note that when this option is enabled, the cluster cannot be upgraded // and will be automatically deleted after 30 days. EnableKubernetesAlpha pulumi.BoolPtrInput + // ) // Whether L4ILB Subsetting is enabled for this cluster. EnableL4IlbSubsetting pulumi.BoolPtrInput // Whether the ABAC authorizer is enabled for this cluster. @@ -1281,7 +1168,7 @@ type ClusterArgs struct { EnableTpu pulumi.BoolPtrInput // Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. GatewayApiConfig ClusterGatewayApiConfigPtrInput - // . Structure is documented below. + // ). Structure is documented below. IdentityServiceConfig ClusterIdentityServiceConfigPtrInput // The number of nodes to create in this // cluster's default node pool. In regional or multi-zonal clusters, this is the @@ -1327,15 +1214,9 @@ type ClusterArgs struct { MasterAuthorizedNetworksConfig ClusterMasterAuthorizedNetworksConfigPtrInput // Structure is documented below. MeshCertificates ClusterMeshCertificatesPtrInput - // The minimum version of the master. GKE - // will auto-update the master to new versions, so this does not guarantee the - // current master version--use the read-only `masterVersion` field to obtain that. - // If unset, the cluster's version will be set by GKE to the version of the most recent - // official release (which is not necessarily the latest version). Most users will find - // the `container.getEngineVersions` data source useful - it indicates which versions - // are available. If you intend to specify versions manually, - // [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - // describe the various acceptable formats for this field. + // The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + // current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + // set by GKE to the version of the most recent official release (which is not necessarily the latest version). MinMasterVersion pulumi.StringPtrInput // Monitoring configuration for the cluster. // Structure is documented below. @@ -1363,11 +1244,7 @@ type ClusterArgs struct { // Options are `VPC_NATIVE` or `ROUTES`. `VPC_NATIVE` enables [IP aliasing](https://cloud.google.com/kubernetes-engine/docs/how-to/ip-aliases), // and requires the `ipAllocationPolicy` block to be defined. By default, when this field is unspecified and no `ipAllocationPolicy` blocks are set, GKE will create a `ROUTES`-based cluster. NetworkingMode pulumi.StringPtrInput - // Parameters used in creating the default node pool. - // Generally, this field should not be used at the same time as a - // `container.NodePool` or a `nodePool` block; this configuration - // manages the default node pool, which isn't recommended to be used. - // Structure is documented below. + // The configuration of the nodepool NodeConfig ClusterNodeConfigPtrInput // The list of zones in which the cluster's nodes // are located. Nodes must be in the region of their regional cluster or in the @@ -1387,14 +1264,12 @@ type ClusterArgs struct { // to say "these are the _only_ node pools associated with this cluster", use the // container.NodePool resource instead of this property. NodePools ClusterNodePoolArrayInput - // The Kubernetes version on the nodes. Must either be unset - // or set to the same value as `minMasterVersion` on create. Defaults to the default - // version set by GKE which is not necessarily the latest version. This only affects - // nodes in the default node pool. While a fuzzy version can be specified, it's - // recommended that you specify explicit versions as the provider will see spurious diffs - // when fuzzy versions are used. See the `container.getEngineVersions` data source's - // `versionPrefix` field to approximate fuzzy versions. - // To update nodes in other node pools, use the `version` attribute on the node pool. + // The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + // Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + // default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + // Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + // version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + // use the version attribute on the node pool. NodeVersion pulumi.StringPtrInput // Configuration for the [cluster upgrade notifications](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-upgrade-notifications) feature. Structure is documented below. NotificationConfig ClusterNotificationConfigPtrInput @@ -1410,15 +1285,8 @@ type ClusterArgs struct { // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. Project pulumi.StringPtrInput - // Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - // feature, which provide more control over automatic upgrades of your GKE clusters. - // When updating this field, GKE imposes specific version requirements. See - // [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - // for more details; the `container.getEngineVersions` datasource can provide - // the default version for a channel. Note that removing the `releaseChannel` - // field from your config will cause the provider to stop managing your cluster's - // release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - // channel. Structure is documented below. + // Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + // clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. ReleaseChannel ClusterReleaseChannelPtrInput // If `true`, deletes the default node // pool upon cluster creation. If you're using `container.NodePool` @@ -1570,7 +1438,7 @@ func (o ClusterOutput) ClusterIpv4Cidr() pulumi.StringOutput { return o.ApplyT(func(v *Cluster) pulumi.StringOutput { return v.ClusterIpv4Cidr }).(pulumi.StringOutput) } -// Configuration for +// ) Configuration for // [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, // Structure is documented below. func (o ClusterOutput) ClusterTelemetry() ClusterClusterTelemetryOutput { @@ -1651,6 +1519,7 @@ func (o ClusterOutput) EnableKubernetesAlpha() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Cluster) pulumi.BoolPtrOutput { return v.EnableKubernetesAlpha }).(pulumi.BoolPtrOutput) } +// ) // Whether L4ILB Subsetting is enabled for this cluster. func (o ClusterOutput) EnableL4IlbSubsetting() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Cluster) pulumi.BoolPtrOutput { return v.EnableL4IlbSubsetting }).(pulumi.BoolPtrOutput) @@ -1685,7 +1554,7 @@ func (o ClusterOutput) GatewayApiConfig() ClusterGatewayApiConfigPtrOutput { return o.ApplyT(func(v *Cluster) ClusterGatewayApiConfigPtrOutput { return v.GatewayApiConfig }).(ClusterGatewayApiConfigPtrOutput) } -// . Structure is documented below. +// ). Structure is documented below. func (o ClusterOutput) IdentityServiceConfig() ClusterIdentityServiceConfigOutput { return o.ApplyT(func(v *Cluster) ClusterIdentityServiceConfigOutput { return v.IdentityServiceConfig }).(ClusterIdentityServiceConfigOutput) } @@ -1773,15 +1642,9 @@ func (o ClusterOutput) MeshCertificates() ClusterMeshCertificatesOutput { return o.ApplyT(func(v *Cluster) ClusterMeshCertificatesOutput { return v.MeshCertificates }).(ClusterMeshCertificatesOutput) } -// The minimum version of the master. GKE -// will auto-update the master to new versions, so this does not guarantee the -// current master version--use the read-only `masterVersion` field to obtain that. -// If unset, the cluster's version will be set by GKE to the version of the most recent -// official release (which is not necessarily the latest version). Most users will find -// the `container.getEngineVersions` data source useful - it indicates which versions -// are available. If you intend to specify versions manually, -// [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) -// describe the various acceptable formats for this field. +// The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the +// current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be +// set by GKE to the version of the most recent official release (which is not necessarily the latest version). func (o ClusterOutput) MinMasterVersion() pulumi.StringPtrOutput { return o.ApplyT(func(v *Cluster) pulumi.StringPtrOutput { return v.MinMasterVersion }).(pulumi.StringPtrOutput) } @@ -1830,11 +1693,7 @@ func (o ClusterOutput) NetworkingMode() pulumi.StringOutput { return o.ApplyT(func(v *Cluster) pulumi.StringOutput { return v.NetworkingMode }).(pulumi.StringOutput) } -// Parameters used in creating the default node pool. -// Generally, this field should not be used at the same time as a -// `container.NodePool` or a `nodePool` block; this configuration -// manages the default node pool, which isn't recommended to be used. -// Structure is documented below. +// The configuration of the nodepool func (o ClusterOutput) NodeConfig() ClusterNodeConfigOutput { return o.ApplyT(func(v *Cluster) ClusterNodeConfigOutput { return v.NodeConfig }).(ClusterNodeConfigOutput) } @@ -1869,14 +1728,12 @@ func (o ClusterOutput) NodePools() ClusterNodePoolArrayOutput { return o.ApplyT(func(v *Cluster) ClusterNodePoolArrayOutput { return v.NodePools }).(ClusterNodePoolArrayOutput) } -// The Kubernetes version on the nodes. Must either be unset -// or set to the same value as `minMasterVersion` on create. Defaults to the default -// version set by GKE which is not necessarily the latest version. This only affects -// nodes in the default node pool. While a fuzzy version can be specified, it's -// recommended that you specify explicit versions as the provider will see spurious diffs -// when fuzzy versions are used. See the `container.getEngineVersions` data source's -// `versionPrefix` field to approximate fuzzy versions. -// To update nodes in other node pools, use the `version` attribute on the node pool. +// The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. +// Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the +// default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as +// Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's +// version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, +// use the version attribute on the node pool. func (o ClusterOutput) NodeVersion() pulumi.StringOutput { return o.ApplyT(func(v *Cluster) pulumi.StringOutput { return v.NodeVersion }).(pulumi.StringOutput) } @@ -1914,15 +1771,8 @@ func (o ClusterOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *Cluster) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } -// Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) -// feature, which provide more control over automatic upgrades of your GKE clusters. -// When updating this field, GKE imposes specific version requirements. See -// [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) -// for more details; the `container.getEngineVersions` datasource can provide -// the default version for a channel. Note that removing the `releaseChannel` -// field from your config will cause the provider to stop managing your cluster's -// release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` -// channel. Structure is documented below. +// Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE +// clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. func (o ClusterOutput) ReleaseChannel() ClusterReleaseChannelOutput { return o.ApplyT(func(v *Cluster) ClusterReleaseChannelOutput { return v.ReleaseChannel }).(ClusterReleaseChannelOutput) } diff --git a/sdk/go/gcp/container/getEngineVersions.go b/sdk/go/gcp/container/getEngineVersions.go index 2ef29af54d..dacc39cab6 100644 --- a/sdk/go/gcp/container/getEngineVersions.go +++ b/sdk/go/gcp/container/getEngineVersions.go @@ -72,13 +72,7 @@ type GetEngineVersionsArgs struct { Location *string `pulumi:"location"` // ID of the project to list available cluster versions for. Should match the project the cluster will be deployed to. // Defaults to the project that the provider is authenticated with. - Project *string `pulumi:"project"` - // If provided, the provider will only return versions - // that match the string prefix. For example, `1.11.` will match all `1.11` series - // releases. Since this is just a string match, it's recommended that you append a - // `.` after minor versions to ensure that prefixes such as `1.1` don't match - // versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - // for full details on how version strings are formatted. + Project *string `pulumi:"project"` VersionPrefix *string `pulumi:"versionPrefix"` } @@ -127,13 +121,7 @@ type GetEngineVersionsOutputArgs struct { Location pulumi.StringPtrInput `pulumi:"location"` // ID of the project to list available cluster versions for. Should match the project the cluster will be deployed to. // Defaults to the project that the provider is authenticated with. - Project pulumi.StringPtrInput `pulumi:"project"` - // If provided, the provider will only return versions - // that match the string prefix. For example, `1.11.` will match all `1.11` series - // releases. Since this is just a string match, it's recommended that you append a - // `.` after minor versions to ensure that prefixes such as `1.1` don't match - // versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - // for full details on how version strings are formatted. + Project pulumi.StringPtrInput `pulumi:"project"` VersionPrefix pulumi.StringPtrInput `pulumi:"versionPrefix"` } diff --git a/sdk/go/gcp/container/nodePool.go b/sdk/go/gcp/container/nodePool.go index d37a13d706..5a8e49583d 100644 --- a/sdk/go/gcp/container/nodePool.go +++ b/sdk/go/gcp/container/nodePool.go @@ -11,62 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Manages a node pool in a Google Kubernetes Engine (GKE) cluster separately from -// the cluster control plane. For more information see [the official documentation](https://cloud.google.com/container-engine/docs/node-pools) -// and [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters.nodePools). -// -// ## Example Usage -// ### Using A Separately Managed Node Pool (Recommended) -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/container" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := serviceAccount.NewAccount(ctx, "default", &serviceAccount.AccountArgs{ -// AccountId: pulumi.String("service-account-id"), -// DisplayName: pulumi.String("Service Account"), -// }) -// if err != nil { -// return err -// } -// primary, err := container.NewCluster(ctx, "primary", &container.ClusterArgs{ -// Location: pulumi.String("us-central1"), -// RemoveDefaultNodePool: pulumi.Bool(true), -// InitialNodeCount: pulumi.Int(1), -// }) -// if err != nil { -// return err -// } -// _, err = container.NewNodePool(ctx, "primaryPreemptibleNodes", &container.NodePoolArgs{ -// Cluster: primary.ID(), -// NodeCount: pulumi.Int(1), -// NodeConfig: &container.NodePoolNodeConfigArgs{ -// Preemptible: pulumi.Bool(true), -// MachineType: pulumi.String("e2-medium"), -// ServiceAccount: _default.Email, -// OauthScopes: pulumi.StringArray{ -// pulumi.String("https://www.googleapis.com/auth/cloud-platform"), -// }, -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // Node pools can be imported using the `project`, `location`, `cluster` and `name`. If the project is omitted, the project value in the provider configuration will be used. Examples @@ -90,13 +34,8 @@ type NodePool struct { Autoscaling NodePoolAutoscalingPtrOutput `pulumi:"autoscaling"` // The cluster to create the node pool for. Cluster must be present in `location` provided for clusters. May be specified in the format `projects/{{project}}/locations/{{location}}/clusters/{{cluster}}` or as just the name of the cluster. Cluster pulumi.StringOutput `pulumi:"cluster"` - // The initial number of nodes for the pool. In - // regional or multi-zonal clusters, this is the number of nodes per zone. Changing - // this will force recreation of the resource. WARNING: Resizing your node pool manually - // may change this value in your existing cluster, which will trigger destruction - // and recreation on the next provider run (to rectify the discrepancy). If you don't - // need this value, don't set it. If you do need it, you can use a lifecycle block to - // ignore subsqeuent changes to this field. + // The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + // Changing this will force recreation of the resource. InitialNodeCount pulumi.IntOutput `pulumi:"initialNodeCount"` // The resource URLs of the managed instance groups associated with this node pool. InstanceGroupUrls pulumi.StringArrayOutput `pulumi:"instanceGroupUrls"` @@ -113,8 +52,7 @@ type NodePool struct { // See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr) // for more information. MaxPodsPerNode pulumi.IntOutput `pulumi:"maxPodsPerNode"` - // The name of the node pool. If left blank, the provider will - // auto-generate a unique name. + // The name of the node pool. If left blank, Terraform will auto-generate a unique name. Name pulumi.StringOutput `pulumi:"name"` // Creates a unique name for the node pool beginning // with the specified prefix. Conflicts with `name`. @@ -144,12 +82,11 @@ type NodePool struct { // Specify node upgrade settings to change how GKE upgrades nodes. // The maximum number of nodes upgraded simultaneously is limited to 20. Structure is documented below. UpgradeSettings NodePoolUpgradeSettingsOutput `pulumi:"upgradeSettings"` - // The Kubernetes version for the nodes in this pool. Note that if this field - // and `autoUpgrade` are both specified, they will fight each other for what the node version should - // be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - // recommended that you specify explicit versions as the provider will see spurious diffs - // when fuzzy versions are used. See the `container.getEngineVersions` data source's - // `versionPrefix` field to approximate fuzzy versions in a provider-compatible way. + // The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + // will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + // can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + // versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + // versions in a Terraform-compatible way. Version pulumi.StringOutput `pulumi:"version"` } @@ -190,13 +127,8 @@ type nodePoolState struct { Autoscaling *NodePoolAutoscaling `pulumi:"autoscaling"` // The cluster to create the node pool for. Cluster must be present in `location` provided for clusters. May be specified in the format `projects/{{project}}/locations/{{location}}/clusters/{{cluster}}` or as just the name of the cluster. Cluster *string `pulumi:"cluster"` - // The initial number of nodes for the pool. In - // regional or multi-zonal clusters, this is the number of nodes per zone. Changing - // this will force recreation of the resource. WARNING: Resizing your node pool manually - // may change this value in your existing cluster, which will trigger destruction - // and recreation on the next provider run (to rectify the discrepancy). If you don't - // need this value, don't set it. If you do need it, you can use a lifecycle block to - // ignore subsqeuent changes to this field. + // The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + // Changing this will force recreation of the resource. InitialNodeCount *int `pulumi:"initialNodeCount"` // The resource URLs of the managed instance groups associated with this node pool. InstanceGroupUrls []string `pulumi:"instanceGroupUrls"` @@ -213,8 +145,7 @@ type nodePoolState struct { // See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr) // for more information. MaxPodsPerNode *int `pulumi:"maxPodsPerNode"` - // The name of the node pool. If left blank, the provider will - // auto-generate a unique name. + // The name of the node pool. If left blank, Terraform will auto-generate a unique name. Name *string `pulumi:"name"` // Creates a unique name for the node pool beginning // with the specified prefix. Conflicts with `name`. @@ -244,12 +175,11 @@ type nodePoolState struct { // Specify node upgrade settings to change how GKE upgrades nodes. // The maximum number of nodes upgraded simultaneously is limited to 20. Structure is documented below. UpgradeSettings *NodePoolUpgradeSettings `pulumi:"upgradeSettings"` - // The Kubernetes version for the nodes in this pool. Note that if this field - // and `autoUpgrade` are both specified, they will fight each other for what the node version should - // be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - // recommended that you specify explicit versions as the provider will see spurious diffs - // when fuzzy versions are used. See the `container.getEngineVersions` data source's - // `versionPrefix` field to approximate fuzzy versions in a provider-compatible way. + // The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + // will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + // can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + // versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + // versions in a Terraform-compatible way. Version *string `pulumi:"version"` } @@ -259,13 +189,8 @@ type NodePoolState struct { Autoscaling NodePoolAutoscalingPtrInput // The cluster to create the node pool for. Cluster must be present in `location` provided for clusters. May be specified in the format `projects/{{project}}/locations/{{location}}/clusters/{{cluster}}` or as just the name of the cluster. Cluster pulumi.StringPtrInput - // The initial number of nodes for the pool. In - // regional or multi-zonal clusters, this is the number of nodes per zone. Changing - // this will force recreation of the resource. WARNING: Resizing your node pool manually - // may change this value in your existing cluster, which will trigger destruction - // and recreation on the next provider run (to rectify the discrepancy). If you don't - // need this value, don't set it. If you do need it, you can use a lifecycle block to - // ignore subsqeuent changes to this field. + // The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + // Changing this will force recreation of the resource. InitialNodeCount pulumi.IntPtrInput // The resource URLs of the managed instance groups associated with this node pool. InstanceGroupUrls pulumi.StringArrayInput @@ -282,8 +207,7 @@ type NodePoolState struct { // See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr) // for more information. MaxPodsPerNode pulumi.IntPtrInput - // The name of the node pool. If left blank, the provider will - // auto-generate a unique name. + // The name of the node pool. If left blank, Terraform will auto-generate a unique name. Name pulumi.StringPtrInput // Creates a unique name for the node pool beginning // with the specified prefix. Conflicts with `name`. @@ -313,12 +237,11 @@ type NodePoolState struct { // Specify node upgrade settings to change how GKE upgrades nodes. // The maximum number of nodes upgraded simultaneously is limited to 20. Structure is documented below. UpgradeSettings NodePoolUpgradeSettingsPtrInput - // The Kubernetes version for the nodes in this pool. Note that if this field - // and `autoUpgrade` are both specified, they will fight each other for what the node version should - // be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - // recommended that you specify explicit versions as the provider will see spurious diffs - // when fuzzy versions are used. See the `container.getEngineVersions` data source's - // `versionPrefix` field to approximate fuzzy versions in a provider-compatible way. + // The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + // will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + // can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + // versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + // versions in a Terraform-compatible way. Version pulumi.StringPtrInput } @@ -332,13 +255,8 @@ type nodePoolArgs struct { Autoscaling *NodePoolAutoscaling `pulumi:"autoscaling"` // The cluster to create the node pool for. Cluster must be present in `location` provided for clusters. May be specified in the format `projects/{{project}}/locations/{{location}}/clusters/{{cluster}}` or as just the name of the cluster. Cluster string `pulumi:"cluster"` - // The initial number of nodes for the pool. In - // regional or multi-zonal clusters, this is the number of nodes per zone. Changing - // this will force recreation of the resource. WARNING: Resizing your node pool manually - // may change this value in your existing cluster, which will trigger destruction - // and recreation on the next provider run (to rectify the discrepancy). If you don't - // need this value, don't set it. If you do need it, you can use a lifecycle block to - // ignore subsqeuent changes to this field. + // The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + // Changing this will force recreation of the resource. InitialNodeCount *int `pulumi:"initialNodeCount"` // The location (region or zone) of the cluster. Location *string `pulumi:"location"` @@ -351,8 +269,7 @@ type nodePoolArgs struct { // See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr) // for more information. MaxPodsPerNode *int `pulumi:"maxPodsPerNode"` - // The name of the node pool. If left blank, the provider will - // auto-generate a unique name. + // The name of the node pool. If left blank, Terraform will auto-generate a unique name. Name *string `pulumi:"name"` // Creates a unique name for the node pool beginning // with the specified prefix. Conflicts with `name`. @@ -381,12 +298,11 @@ type nodePoolArgs struct { // Specify node upgrade settings to change how GKE upgrades nodes. // The maximum number of nodes upgraded simultaneously is limited to 20. Structure is documented below. UpgradeSettings *NodePoolUpgradeSettings `pulumi:"upgradeSettings"` - // The Kubernetes version for the nodes in this pool. Note that if this field - // and `autoUpgrade` are both specified, they will fight each other for what the node version should - // be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - // recommended that you specify explicit versions as the provider will see spurious diffs - // when fuzzy versions are used. See the `container.getEngineVersions` data source's - // `versionPrefix` field to approximate fuzzy versions in a provider-compatible way. + // The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + // will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + // can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + // versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + // versions in a Terraform-compatible way. Version *string `pulumi:"version"` } @@ -397,13 +313,8 @@ type NodePoolArgs struct { Autoscaling NodePoolAutoscalingPtrInput // The cluster to create the node pool for. Cluster must be present in `location` provided for clusters. May be specified in the format `projects/{{project}}/locations/{{location}}/clusters/{{cluster}}` or as just the name of the cluster. Cluster pulumi.StringInput - // The initial number of nodes for the pool. In - // regional or multi-zonal clusters, this is the number of nodes per zone. Changing - // this will force recreation of the resource. WARNING: Resizing your node pool manually - // may change this value in your existing cluster, which will trigger destruction - // and recreation on the next provider run (to rectify the discrepancy). If you don't - // need this value, don't set it. If you do need it, you can use a lifecycle block to - // ignore subsqeuent changes to this field. + // The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + // Changing this will force recreation of the resource. InitialNodeCount pulumi.IntPtrInput // The location (region or zone) of the cluster. Location pulumi.StringPtrInput @@ -416,8 +327,7 @@ type NodePoolArgs struct { // See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr) // for more information. MaxPodsPerNode pulumi.IntPtrInput - // The name of the node pool. If left blank, the provider will - // auto-generate a unique name. + // The name of the node pool. If left blank, Terraform will auto-generate a unique name. Name pulumi.StringPtrInput // Creates a unique name for the node pool beginning // with the specified prefix. Conflicts with `name`. @@ -446,12 +356,11 @@ type NodePoolArgs struct { // Specify node upgrade settings to change how GKE upgrades nodes. // The maximum number of nodes upgraded simultaneously is limited to 20. Structure is documented below. UpgradeSettings NodePoolUpgradeSettingsPtrInput - // The Kubernetes version for the nodes in this pool. Note that if this field - // and `autoUpgrade` are both specified, they will fight each other for what the node version should - // be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - // recommended that you specify explicit versions as the provider will see spurious diffs - // when fuzzy versions are used. See the `container.getEngineVersions` data source's - // `versionPrefix` field to approximate fuzzy versions in a provider-compatible way. + // The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + // will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + // can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + // versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + // versions in a Terraform-compatible way. Version pulumi.StringPtrInput } @@ -553,13 +462,8 @@ func (o NodePoolOutput) Cluster() pulumi.StringOutput { return o.ApplyT(func(v *NodePool) pulumi.StringOutput { return v.Cluster }).(pulumi.StringOutput) } -// The initial number of nodes for the pool. In -// regional or multi-zonal clusters, this is the number of nodes per zone. Changing -// this will force recreation of the resource. WARNING: Resizing your node pool manually -// may change this value in your existing cluster, which will trigger destruction -// and recreation on the next provider run (to rectify the discrepancy). If you don't -// need this value, don't set it. If you do need it, you can use a lifecycle block to -// ignore subsqeuent changes to this field. +// The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. +// Changing this will force recreation of the resource. func (o NodePoolOutput) InitialNodeCount() pulumi.IntOutput { return o.ApplyT(func(v *NodePool) pulumi.IntOutput { return v.InitialNodeCount }).(pulumi.IntOutput) } @@ -594,8 +498,7 @@ func (o NodePoolOutput) MaxPodsPerNode() pulumi.IntOutput { return o.ApplyT(func(v *NodePool) pulumi.IntOutput { return v.MaxPodsPerNode }).(pulumi.IntOutput) } -// The name of the node pool. If left blank, the provider will -// auto-generate a unique name. +// The name of the node pool. If left blank, Terraform will auto-generate a unique name. func (o NodePoolOutput) Name() pulumi.StringOutput { return o.ApplyT(func(v *NodePool) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) } @@ -655,12 +558,11 @@ func (o NodePoolOutput) UpgradeSettings() NodePoolUpgradeSettingsOutput { return o.ApplyT(func(v *NodePool) NodePoolUpgradeSettingsOutput { return v.UpgradeSettings }).(NodePoolUpgradeSettingsOutput) } -// The Kubernetes version for the nodes in this pool. Note that if this field -// and `autoUpgrade` are both specified, they will fight each other for what the node version should -// be, so setting both is highly discouraged. While a fuzzy version can be specified, it's -// recommended that you specify explicit versions as the provider will see spurious diffs -// when fuzzy versions are used. See the `container.getEngineVersions` data source's -// `versionPrefix` field to approximate fuzzy versions in a provider-compatible way. +// The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they +// will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version +// can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy +// versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy +// versions in a Terraform-compatible way. func (o NodePoolOutput) Version() pulumi.StringOutput { return o.ApplyT(func(v *NodePool) pulumi.StringOutput { return v.Version }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/container/pulumiTypes.go b/sdk/go/gcp/container/pulumiTypes.go index bb0c62dc94..7d6c1b0ec1 100644 --- a/sdk/go/gcp/container/pulumiTypes.go +++ b/sdk/go/gcp/container/pulumiTypes.go @@ -8589,10 +8589,10 @@ type ClusterAddonsConfig struct { // controller addon, which makes it easy to set up HTTP load balancers for services in a // cluster. It is enabled by default; set `disabled = true` to disable. HttpLoadBalancing *ClusterAddonsConfigHttpLoadBalancing `pulumi:"httpLoadBalancing"` - // . + // ). // Structure is documented below. IstioConfig *ClusterAddonsConfigIstioConfig `pulumi:"istioConfig"` - // . + // ). // Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. KalmConfig *ClusterAddonsConfigKalmConfig `pulumi:"kalmConfig"` // Whether we should enable the network policy addon @@ -8645,10 +8645,10 @@ type ClusterAddonsConfigArgs struct { // controller addon, which makes it easy to set up HTTP load balancers for services in a // cluster. It is enabled by default; set `disabled = true` to disable. HttpLoadBalancing ClusterAddonsConfigHttpLoadBalancingPtrInput `pulumi:"httpLoadBalancing"` - // . + // ). // Structure is documented below. IstioConfig ClusterAddonsConfigIstioConfigPtrInput `pulumi:"istioConfig"` - // . + // ). // Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. KalmConfig ClusterAddonsConfigKalmConfigPtrInput `pulumi:"kalmConfig"` // Whether we should enable the network policy addon @@ -8796,13 +8796,13 @@ func (o ClusterAddonsConfigOutput) HttpLoadBalancing() ClusterAddonsConfigHttpLo return o.ApplyT(func(v ClusterAddonsConfig) *ClusterAddonsConfigHttpLoadBalancing { return v.HttpLoadBalancing }).(ClusterAddonsConfigHttpLoadBalancingPtrOutput) } -// . +// ). // Structure is documented below. func (o ClusterAddonsConfigOutput) IstioConfig() ClusterAddonsConfigIstioConfigPtrOutput { return o.ApplyT(func(v ClusterAddonsConfig) *ClusterAddonsConfigIstioConfig { return v.IstioConfig }).(ClusterAddonsConfigIstioConfigPtrOutput) } -// . +// ). // Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. func (o ClusterAddonsConfigOutput) KalmConfig() ClusterAddonsConfigKalmConfigPtrOutput { return o.ApplyT(func(v ClusterAddonsConfig) *ClusterAddonsConfigKalmConfig { return v.KalmConfig }).(ClusterAddonsConfigKalmConfigPtrOutput) @@ -8935,7 +8935,7 @@ func (o ClusterAddonsConfigPtrOutput) HttpLoadBalancing() ClusterAddonsConfigHtt }).(ClusterAddonsConfigHttpLoadBalancingPtrOutput) } -// . +// ). // Structure is documented below. func (o ClusterAddonsConfigPtrOutput) IstioConfig() ClusterAddonsConfigIstioConfigPtrOutput { return o.ApplyT(func(v *ClusterAddonsConfig) *ClusterAddonsConfigIstioConfig { @@ -8946,7 +8946,7 @@ func (o ClusterAddonsConfigPtrOutput) IstioConfig() ClusterAddonsConfigIstioConf }).(ClusterAddonsConfigIstioConfigPtrOutput) } -// . +// ). // Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. func (o ClusterAddonsConfigPtrOutput) KalmConfig() ClusterAddonsConfigKalmConfigPtrOutput { return o.ApplyT(func(v *ClusterAddonsConfig) *ClusterAddonsConfigKalmConfig { @@ -11149,6 +11149,7 @@ type ClusterClusterAutoscalingAutoProvisioningDefaults struct { ImageType *string `pulumi:"imageType"` // NodeManagement configuration for this NodePool. Structure is documented below. Management *ClusterClusterAutoscalingAutoProvisioningDefaultsManagement `pulumi:"management"` + // ) // Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the // specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such // as "Intel Haswell" or "Intel Sandy Bridge". @@ -11185,6 +11186,7 @@ type ClusterClusterAutoscalingAutoProvisioningDefaultsArgs struct { ImageType pulumi.StringPtrInput `pulumi:"imageType"` // NodeManagement configuration for this NodePool. Structure is documented below. Management ClusterClusterAutoscalingAutoProvisioningDefaultsManagementPtrInput `pulumi:"management"` + // ) // Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the // specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such // as "Intel Haswell" or "Intel Sandy Bridge". @@ -11303,6 +11305,7 @@ func (o ClusterClusterAutoscalingAutoProvisioningDefaultsOutput) Management() Cl }).(ClusterClusterAutoscalingAutoProvisioningDefaultsManagementPtrOutput) } +// ) // Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the // specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such // as "Intel Haswell" or "Intel Sandy Bridge". @@ -11408,6 +11411,7 @@ func (o ClusterClusterAutoscalingAutoProvisioningDefaultsPtrOutput) Management() }).(ClusterClusterAutoscalingAutoProvisioningDefaultsManagementPtrOutput) } +// ) // Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the // specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such // as "Intel Haswell" or "Intel Sandy Bridge". @@ -16031,7 +16035,7 @@ func (o ClusterNetworkPolicyPtrOutput) Provider() pulumi.StringPtrOutput { } type ClusterNodeConfig struct { - // The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + // The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption BootDiskKmsKey *string `pulumi:"bootDiskKmsKey"` // Size of the disk attached to each node, specified // in GB. The smallest allowed disk size is 10GB. Defaults to 100GB. @@ -16047,9 +16051,7 @@ type ClusterNodeConfig struct { // A `machineType` that has more than 16 GiB of memory is also recommended. // GCFS must be enabled in order to use [image streaming](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming). // Structure is documented below. - GcfsConfig *ClusterNodeConfigGcfsConfig `pulumi:"gcfsConfig"` - // List of the type and count of accelerator cards attached to the instance. - // Structure documented below. + GcfsConfig *ClusterNodeConfigGcfsConfig `pulumi:"gcfsConfig"` GuestAccelerators []ClusterNodeConfigGuestAccelerator `pulumi:"guestAccelerators"` // Google Virtual NIC (gVNIC) is a virtual network interface. // Installing the gVNIC driver allows for more efficient traffic transmission across the Google network infrastructure. @@ -16078,13 +16080,8 @@ type ClusterNodeConfig struct { // The name of a Google Compute Engine machine type. // Defaults to `e2-medium`. To create a custom machine type, value should be set as specified // [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). - MachineType *string `pulumi:"machineType"` - // The metadata key/value pairs assigned to instances in - // the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - // `true` by the API; if `metadata` is set but that default value is not - // included, the provider will attempt to unset the value. To avoid this, set the - // value in your config. - Metadata map[string]string `pulumi:"metadata"` + MachineType *string `pulumi:"machineType"` + Metadata map[string]string `pulumi:"metadata"` // Minimum CPU platform to be used by this instance. // The instance may be scheduled on the specified or newer CPU platform. Applicable // values are the friendly names of CPU platforms, such as `Intel Haswell`. See the @@ -16105,8 +16102,10 @@ type ClusterNodeConfig struct { ReservationAffinity *ClusterNodeConfigReservationAffinity `pulumi:"reservationAffinity"` // The GCP labels (key/value pairs) to be applied to each node. Refer [here](https://cloud.google.com/kubernetes-engine/docs/how-to/creating-managing-labels) // for how these labels are applied to clusters, node pools and nodes. - ResourceLabels map[string]string `pulumi:"resourceLabels"` - SandboxConfig *ClusterNodeConfigSandboxConfig `pulumi:"sandboxConfig"` + ResourceLabels map[string]string `pulumi:"resourceLabels"` + // ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `imageType = "COS_CONTAINERD"` and `nodeVersion = "1.12.7-gke.17"` or later to use it. + // Structure is documented below. + SandboxConfig *ClusterNodeConfigSandboxConfig `pulumi:"sandboxConfig"` // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. ServiceAccount *string `pulumi:"serviceAccount"` @@ -16118,15 +16117,7 @@ type ClusterNodeConfig struct { Spot *bool `pulumi:"spot"` // The list of instance tags applied to all nodes. Tags are used to identify // valid sources or targets for network firewalls. - Tags []string `pulumi:"tags"` - // A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - // to apply to nodes. GKE's API can only set this field on cluster creation. - // However, GKE will add taints to your nodes if you enable certain features such - // as GPUs. If this field is set, any diffs on this field will cause the provider to - // recreate the underlying resource. Taint values can be updated safely in - // Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - // this field to manage taints. If you do, `lifecycle.ignore_changes` is - // recommended. Structure is documented below. + Tags []string `pulumi:"tags"` Taints []ClusterNodeConfigTaint `pulumi:"taints"` // Metadata configuration to expose to workloads on the node pool. // Structure is documented below. @@ -16145,7 +16136,7 @@ type ClusterNodeConfigInput interface { } type ClusterNodeConfigArgs struct { - // The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + // The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption BootDiskKmsKey pulumi.StringPtrInput `pulumi:"bootDiskKmsKey"` // Size of the disk attached to each node, specified // in GB. The smallest allowed disk size is 10GB. Defaults to 100GB. @@ -16161,9 +16152,7 @@ type ClusterNodeConfigArgs struct { // A `machineType` that has more than 16 GiB of memory is also recommended. // GCFS must be enabled in order to use [image streaming](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming). // Structure is documented below. - GcfsConfig ClusterNodeConfigGcfsConfigPtrInput `pulumi:"gcfsConfig"` - // List of the type and count of accelerator cards attached to the instance. - // Structure documented below. + GcfsConfig ClusterNodeConfigGcfsConfigPtrInput `pulumi:"gcfsConfig"` GuestAccelerators ClusterNodeConfigGuestAcceleratorArrayInput `pulumi:"guestAccelerators"` // Google Virtual NIC (gVNIC) is a virtual network interface. // Installing the gVNIC driver allows for more efficient traffic transmission across the Google network infrastructure. @@ -16193,12 +16182,7 @@ type ClusterNodeConfigArgs struct { // Defaults to `e2-medium`. To create a custom machine type, value should be set as specified // [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). MachineType pulumi.StringPtrInput `pulumi:"machineType"` - // The metadata key/value pairs assigned to instances in - // the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - // `true` by the API; if `metadata` is set but that default value is not - // included, the provider will attempt to unset the value. To avoid this, set the - // value in your config. - Metadata pulumi.StringMapInput `pulumi:"metadata"` + Metadata pulumi.StringMapInput `pulumi:"metadata"` // Minimum CPU platform to be used by this instance. // The instance may be scheduled on the specified or newer CPU platform. Applicable // values are the friendly names of CPU platforms, such as `Intel Haswell`. See the @@ -16219,8 +16203,10 @@ type ClusterNodeConfigArgs struct { ReservationAffinity ClusterNodeConfigReservationAffinityPtrInput `pulumi:"reservationAffinity"` // The GCP labels (key/value pairs) to be applied to each node. Refer [here](https://cloud.google.com/kubernetes-engine/docs/how-to/creating-managing-labels) // for how these labels are applied to clusters, node pools and nodes. - ResourceLabels pulumi.StringMapInput `pulumi:"resourceLabels"` - SandboxConfig ClusterNodeConfigSandboxConfigPtrInput `pulumi:"sandboxConfig"` + ResourceLabels pulumi.StringMapInput `pulumi:"resourceLabels"` + // ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `imageType = "COS_CONTAINERD"` and `nodeVersion = "1.12.7-gke.17"` or later to use it. + // Structure is documented below. + SandboxConfig ClusterNodeConfigSandboxConfigPtrInput `pulumi:"sandboxConfig"` // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. ServiceAccount pulumi.StringPtrInput `pulumi:"serviceAccount"` @@ -16232,15 +16218,7 @@ type ClusterNodeConfigArgs struct { Spot pulumi.BoolPtrInput `pulumi:"spot"` // The list of instance tags applied to all nodes. Tags are used to identify // valid sources or targets for network firewalls. - Tags pulumi.StringArrayInput `pulumi:"tags"` - // A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - // to apply to nodes. GKE's API can only set this field on cluster creation. - // However, GKE will add taints to your nodes if you enable certain features such - // as GPUs. If this field is set, any diffs on this field will cause the provider to - // recreate the underlying resource. Taint values can be updated safely in - // Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - // this field to manage taints. If you do, `lifecycle.ignore_changes` is - // recommended. Structure is documented below. + Tags pulumi.StringArrayInput `pulumi:"tags"` Taints ClusterNodeConfigTaintArrayInput `pulumi:"taints"` // Metadata configuration to expose to workloads on the node pool. // Structure is documented below. @@ -16324,7 +16302,7 @@ func (o ClusterNodeConfigOutput) ToClusterNodeConfigPtrOutputWithContext(ctx con }).(ClusterNodeConfigPtrOutput) } -// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: +// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption func (o ClusterNodeConfigOutput) BootDiskKmsKey() pulumi.StringPtrOutput { return o.ApplyT(func(v ClusterNodeConfig) *string { return v.BootDiskKmsKey }).(pulumi.StringPtrOutput) } @@ -16356,8 +16334,6 @@ func (o ClusterNodeConfigOutput) GcfsConfig() ClusterNodeConfigGcfsConfigPtrOutp return o.ApplyT(func(v ClusterNodeConfig) *ClusterNodeConfigGcfsConfig { return v.GcfsConfig }).(ClusterNodeConfigGcfsConfigPtrOutput) } -// List of the type and count of accelerator cards attached to the instance. -// Structure documented below. func (o ClusterNodeConfigOutput) GuestAccelerators() ClusterNodeConfigGuestAcceleratorArrayOutput { return o.ApplyT(func(v ClusterNodeConfig) []ClusterNodeConfigGuestAccelerator { return v.GuestAccelerators }).(ClusterNodeConfigGuestAcceleratorArrayOutput) } @@ -16414,11 +16390,6 @@ func (o ClusterNodeConfigOutput) MachineType() pulumi.StringPtrOutput { return o.ApplyT(func(v ClusterNodeConfig) *string { return v.MachineType }).(pulumi.StringPtrOutput) } -// The metadata key/value pairs assigned to instances in -// the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to -// `true` by the API; if `metadata` is set but that default value is not -// included, the provider will attempt to unset the value. To avoid this, set the -// value in your config. func (o ClusterNodeConfigOutput) Metadata() pulumi.StringMapOutput { return o.ApplyT(func(v ClusterNodeConfig) map[string]string { return v.Metadata }).(pulumi.StringMapOutput) } @@ -16462,6 +16433,8 @@ func (o ClusterNodeConfigOutput) ResourceLabels() pulumi.StringMapOutput { return o.ApplyT(func(v ClusterNodeConfig) map[string]string { return v.ResourceLabels }).(pulumi.StringMapOutput) } +// ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `imageType = "COS_CONTAINERD"` and `nodeVersion = "1.12.7-gke.17"` or later to use it. +// Structure is documented below. func (o ClusterNodeConfigOutput) SandboxConfig() ClusterNodeConfigSandboxConfigPtrOutput { return o.ApplyT(func(v ClusterNodeConfig) *ClusterNodeConfigSandboxConfig { return v.SandboxConfig }).(ClusterNodeConfigSandboxConfigPtrOutput) } @@ -16490,14 +16463,6 @@ func (o ClusterNodeConfigOutput) Tags() pulumi.StringArrayOutput { return o.ApplyT(func(v ClusterNodeConfig) []string { return v.Tags }).(pulumi.StringArrayOutput) } -// A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) -// to apply to nodes. GKE's API can only set this field on cluster creation. -// However, GKE will add taints to your nodes if you enable certain features such -// as GPUs. If this field is set, any diffs on this field will cause the provider to -// recreate the underlying resource. Taint values can be updated safely in -// Kubernetes (eg. through `kubectl`), and it's recommended that you do not use -// this field to manage taints. If you do, `lifecycle.ignore_changes` is -// recommended. Structure is documented below. func (o ClusterNodeConfigOutput) Taints() ClusterNodeConfigTaintArrayOutput { return o.ApplyT(func(v ClusterNodeConfig) []ClusterNodeConfigTaint { return v.Taints }).(ClusterNodeConfigTaintArrayOutput) } @@ -16532,7 +16497,7 @@ func (o ClusterNodeConfigPtrOutput) Elem() ClusterNodeConfigOutput { }).(ClusterNodeConfigOutput) } -// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: +// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption func (o ClusterNodeConfigPtrOutput) BootDiskKmsKey() pulumi.StringPtrOutput { return o.ApplyT(func(v *ClusterNodeConfig) *string { if v == nil { @@ -16589,8 +16554,6 @@ func (o ClusterNodeConfigPtrOutput) GcfsConfig() ClusterNodeConfigGcfsConfigPtrO }).(ClusterNodeConfigGcfsConfigPtrOutput) } -// List of the type and count of accelerator cards attached to the instance. -// Structure documented below. func (o ClusterNodeConfigPtrOutput) GuestAccelerators() ClusterNodeConfigGuestAcceleratorArrayOutput { return o.ApplyT(func(v *ClusterNodeConfig) []ClusterNodeConfigGuestAccelerator { if v == nil { @@ -16692,11 +16655,6 @@ func (o ClusterNodeConfigPtrOutput) MachineType() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } -// The metadata key/value pairs assigned to instances in -// the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to -// `true` by the API; if `metadata` is set but that default value is not -// included, the provider will attempt to unset the value. To avoid this, set the -// value in your config. func (o ClusterNodeConfigPtrOutput) Metadata() pulumi.StringMapOutput { return o.ApplyT(func(v *ClusterNodeConfig) map[string]string { if v == nil { @@ -16775,6 +16733,8 @@ func (o ClusterNodeConfigPtrOutput) ResourceLabels() pulumi.StringMapOutput { }).(pulumi.StringMapOutput) } +// ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `imageType = "COS_CONTAINERD"` and `nodeVersion = "1.12.7-gke.17"` or later to use it. +// Structure is documented below. func (o ClusterNodeConfigPtrOutput) SandboxConfig() ClusterNodeConfigSandboxConfigPtrOutput { return o.ApplyT(func(v *ClusterNodeConfig) *ClusterNodeConfigSandboxConfig { if v == nil { @@ -16828,14 +16788,6 @@ func (o ClusterNodeConfigPtrOutput) Tags() pulumi.StringArrayOutput { }).(pulumi.StringArrayOutput) } -// A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) -// to apply to nodes. GKE's API can only set this field on cluster creation. -// However, GKE will add taints to your nodes if you enable certain features such -// as GPUs. If this field is set, any diffs on this field will cause the provider to -// recreate the underlying resource. Taint values can be updated safely in -// Kubernetes (eg. through `kubectl`), and it's recommended that you do not use -// this field to manage taints. If you do, `lifecycle.ignore_changes` is -// recommended. Structure is documented below. func (o ClusterNodeConfigPtrOutput) Taints() ClusterNodeConfigTaintArrayOutput { return o.ApplyT(func(v *ClusterNodeConfig) []ClusterNodeConfigTaint { if v == nil { @@ -18495,7 +18447,7 @@ func (o ClusterNodeConfigTaintArrayOutput) Index(i pulumi.IntInput) ClusterNodeC type ClusterNodeConfigWorkloadMetadataConfig struct { // How to expose the node metadata to the workload running on the node. // Accepted values are: - // * UNSPECIFIED: Not Set + // * MODE_UNSPECIFIED: Not Set // * GCE_METADATA: Expose all Compute Engine metadata to pods. // * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. Mode string `pulumi:"mode"` @@ -18515,7 +18467,7 @@ type ClusterNodeConfigWorkloadMetadataConfigInput interface { type ClusterNodeConfigWorkloadMetadataConfigArgs struct { // How to expose the node metadata to the workload running on the node. // Accepted values are: - // * UNSPECIFIED: Not Set + // * MODE_UNSPECIFIED: Not Set // * GCE_METADATA: Expose all Compute Engine metadata to pods. // * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. Mode pulumi.StringInput `pulumi:"mode"` @@ -18600,7 +18552,7 @@ func (o ClusterNodeConfigWorkloadMetadataConfigOutput) ToClusterNodeConfigWorklo // How to expose the node metadata to the workload running on the node. // Accepted values are: -// * UNSPECIFIED: Not Set +// * MODE_UNSPECIFIED: Not Set // * GCE_METADATA: Expose all Compute Engine metadata to pods. // * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. func (o ClusterNodeConfigWorkloadMetadataConfigOutput) Mode() pulumi.StringOutput { @@ -18633,7 +18585,7 @@ func (o ClusterNodeConfigWorkloadMetadataConfigPtrOutput) Elem() ClusterNodeConf // How to expose the node metadata to the workload running on the node. // Accepted values are: -// * UNSPECIFIED: Not Set +// * MODE_UNSPECIFIED: Not Set // * GCE_METADATA: Expose all Compute Engine metadata to pods. // * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. func (o ClusterNodeConfigWorkloadMetadataConfigPtrOutput) Mode() pulumi.StringPtrOutput { @@ -18661,18 +18613,11 @@ type ClusterNodePool struct { MaxPodsPerNode *int `pulumi:"maxPodsPerNode"` // The name of the cluster, unique within the project and // location. - Name *string `pulumi:"name"` - NamePrefix *string `pulumi:"namePrefix"` - // Configuration for - // [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below + Name *string `pulumi:"name"` + NamePrefix *string `pulumi:"namePrefix"` NetworkConfig *ClusterNodePoolNetworkConfig `pulumi:"networkConfig"` - // Parameters used in creating the default node pool. - // Generally, this field should not be used at the same time as a - // `container.NodePool` or a `nodePool` block; this configuration - // manages the default node pool, which isn't recommended to be used. - // Structure is documented below. - NodeConfig *ClusterNodePoolNodeConfig `pulumi:"nodeConfig"` - NodeCount *int `pulumi:"nodeCount"` + NodeConfig *ClusterNodePoolNodeConfig `pulumi:"nodeConfig"` + NodeCount *int `pulumi:"nodeCount"` // The list of zones in which the cluster's nodes // are located. Nodes must be in the region of their regional cluster or in the // same region as their cluster's zone for zonal clusters. If this is specified for @@ -18711,18 +18656,11 @@ type ClusterNodePoolArgs struct { MaxPodsPerNode pulumi.IntPtrInput `pulumi:"maxPodsPerNode"` // The name of the cluster, unique within the project and // location. - Name pulumi.StringPtrInput `pulumi:"name"` - NamePrefix pulumi.StringPtrInput `pulumi:"namePrefix"` - // Configuration for - // [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below + Name pulumi.StringPtrInput `pulumi:"name"` + NamePrefix pulumi.StringPtrInput `pulumi:"namePrefix"` NetworkConfig ClusterNodePoolNetworkConfigPtrInput `pulumi:"networkConfig"` - // Parameters used in creating the default node pool. - // Generally, this field should not be used at the same time as a - // `container.NodePool` or a `nodePool` block; this configuration - // manages the default node pool, which isn't recommended to be used. - // Structure is documented below. - NodeConfig ClusterNodePoolNodeConfigPtrInput `pulumi:"nodeConfig"` - NodeCount pulumi.IntPtrInput `pulumi:"nodeCount"` + NodeConfig ClusterNodePoolNodeConfigPtrInput `pulumi:"nodeConfig"` + NodeCount pulumi.IntPtrInput `pulumi:"nodeCount"` // The list of zones in which the cluster's nodes // are located. Nodes must be in the region of their regional cluster or in the // same region as their cluster's zone for zonal clusters. If this is specified for @@ -18826,17 +18764,10 @@ func (o ClusterNodePoolOutput) NamePrefix() pulumi.StringPtrOutput { return o.ApplyT(func(v ClusterNodePool) *string { return v.NamePrefix }).(pulumi.StringPtrOutput) } -// Configuration for -// [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below func (o ClusterNodePoolOutput) NetworkConfig() ClusterNodePoolNetworkConfigPtrOutput { return o.ApplyT(func(v ClusterNodePool) *ClusterNodePoolNetworkConfig { return v.NetworkConfig }).(ClusterNodePoolNetworkConfigPtrOutput) } -// Parameters used in creating the default node pool. -// Generally, this field should not be used at the same time as a -// `container.NodePool` or a `nodePool` block; this configuration -// manages the default node pool, which isn't recommended to be used. -// Structure is documented below. func (o ClusterNodePoolOutput) NodeConfig() ClusterNodePoolNodeConfigPtrOutput { return o.ApplyT(func(v ClusterNodePool) *ClusterNodePoolNodeConfig { return v.NodeConfig }).(ClusterNodePoolNodeConfigPtrOutput) } @@ -19944,17 +19875,14 @@ func (o ClusterNodePoolManagementPtrOutput) AutoUpgrade() pulumi.BoolPtrOutput { } type ClusterNodePoolNetworkConfig struct { - // Whether to create a new range for pod IPs in this node pool. Defaults are provided for `podRange` and `podIpv4CidrBlock` if they are not specified. CreatePodRange *bool `pulumi:"createPodRange"` // Enables the private cluster feature, // creating a private endpoint on the cluster. In a private cluster, nodes only // have RFC 1918 private addresses and communicate with the master's private // endpoint via private networking. - EnablePrivateNodes *bool `pulumi:"enablePrivateNodes"` - // The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - PodIpv4CidrBlock *string `pulumi:"podIpv4CidrBlock"` - // The ID of the secondary range for pod IPs. If `createPodRange` is true, this ID is used for the new range. If `createPodRange` is false, uses an existing secondary range with this ID. - PodRange *string `pulumi:"podRange"` + EnablePrivateNodes *bool `pulumi:"enablePrivateNodes"` + PodIpv4CidrBlock *string `pulumi:"podIpv4CidrBlock"` + PodRange *string `pulumi:"podRange"` } // ClusterNodePoolNetworkConfigInput is an input type that accepts ClusterNodePoolNetworkConfigArgs and ClusterNodePoolNetworkConfigOutput values. @@ -19969,17 +19897,14 @@ type ClusterNodePoolNetworkConfigInput interface { } type ClusterNodePoolNetworkConfigArgs struct { - // Whether to create a new range for pod IPs in this node pool. Defaults are provided for `podRange` and `podIpv4CidrBlock` if they are not specified. CreatePodRange pulumi.BoolPtrInput `pulumi:"createPodRange"` // Enables the private cluster feature, // creating a private endpoint on the cluster. In a private cluster, nodes only // have RFC 1918 private addresses and communicate with the master's private // endpoint via private networking. - EnablePrivateNodes pulumi.BoolPtrInput `pulumi:"enablePrivateNodes"` - // The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - PodIpv4CidrBlock pulumi.StringPtrInput `pulumi:"podIpv4CidrBlock"` - // The ID of the secondary range for pod IPs. If `createPodRange` is true, this ID is used for the new range. If `createPodRange` is false, uses an existing secondary range with this ID. - PodRange pulumi.StringPtrInput `pulumi:"podRange"` + EnablePrivateNodes pulumi.BoolPtrInput `pulumi:"enablePrivateNodes"` + PodIpv4CidrBlock pulumi.StringPtrInput `pulumi:"podIpv4CidrBlock"` + PodRange pulumi.StringPtrInput `pulumi:"podRange"` } func (ClusterNodePoolNetworkConfigArgs) ElementType() reflect.Type { @@ -20059,7 +19984,6 @@ func (o ClusterNodePoolNetworkConfigOutput) ToClusterNodePoolNetworkConfigPtrOut }).(ClusterNodePoolNetworkConfigPtrOutput) } -// Whether to create a new range for pod IPs in this node pool. Defaults are provided for `podRange` and `podIpv4CidrBlock` if they are not specified. func (o ClusterNodePoolNetworkConfigOutput) CreatePodRange() pulumi.BoolPtrOutput { return o.ApplyT(func(v ClusterNodePoolNetworkConfig) *bool { return v.CreatePodRange }).(pulumi.BoolPtrOutput) } @@ -20072,12 +19996,10 @@ func (o ClusterNodePoolNetworkConfigOutput) EnablePrivateNodes() pulumi.BoolPtrO return o.ApplyT(func(v ClusterNodePoolNetworkConfig) *bool { return v.EnablePrivateNodes }).(pulumi.BoolPtrOutput) } -// The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. func (o ClusterNodePoolNetworkConfigOutput) PodIpv4CidrBlock() pulumi.StringPtrOutput { return o.ApplyT(func(v ClusterNodePoolNetworkConfig) *string { return v.PodIpv4CidrBlock }).(pulumi.StringPtrOutput) } -// The ID of the secondary range for pod IPs. If `createPodRange` is true, this ID is used for the new range. If `createPodRange` is false, uses an existing secondary range with this ID. func (o ClusterNodePoolNetworkConfigOutput) PodRange() pulumi.StringPtrOutput { return o.ApplyT(func(v ClusterNodePoolNetworkConfig) *string { return v.PodRange }).(pulumi.StringPtrOutput) } @@ -20106,7 +20028,6 @@ func (o ClusterNodePoolNetworkConfigPtrOutput) Elem() ClusterNodePoolNetworkConf }).(ClusterNodePoolNetworkConfigOutput) } -// Whether to create a new range for pod IPs in this node pool. Defaults are provided for `podRange` and `podIpv4CidrBlock` if they are not specified. func (o ClusterNodePoolNetworkConfigPtrOutput) CreatePodRange() pulumi.BoolPtrOutput { return o.ApplyT(func(v *ClusterNodePoolNetworkConfig) *bool { if v == nil { @@ -20129,7 +20050,6 @@ func (o ClusterNodePoolNetworkConfigPtrOutput) EnablePrivateNodes() pulumi.BoolP }).(pulumi.BoolPtrOutput) } -// The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. func (o ClusterNodePoolNetworkConfigPtrOutput) PodIpv4CidrBlock() pulumi.StringPtrOutput { return o.ApplyT(func(v *ClusterNodePoolNetworkConfig) *string { if v == nil { @@ -20139,7 +20059,6 @@ func (o ClusterNodePoolNetworkConfigPtrOutput) PodIpv4CidrBlock() pulumi.StringP }).(pulumi.StringPtrOutput) } -// The ID of the secondary range for pod IPs. If `createPodRange` is true, this ID is used for the new range. If `createPodRange` is false, uses an existing secondary range with this ID. func (o ClusterNodePoolNetworkConfigPtrOutput) PodRange() pulumi.StringPtrOutput { return o.ApplyT(func(v *ClusterNodePoolNetworkConfig) *string { if v == nil { @@ -20150,7 +20069,7 @@ func (o ClusterNodePoolNetworkConfigPtrOutput) PodRange() pulumi.StringPtrOutput } type ClusterNodePoolNodeConfig struct { - // The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + // The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption BootDiskKmsKey *string `pulumi:"bootDiskKmsKey"` // Size of the disk attached to each node, specified // in GB. The smallest allowed disk size is 10GB. Defaults to 100GB. @@ -20166,9 +20085,7 @@ type ClusterNodePoolNodeConfig struct { // A `machineType` that has more than 16 GiB of memory is also recommended. // GCFS must be enabled in order to use [image streaming](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming). // Structure is documented below. - GcfsConfig *ClusterNodePoolNodeConfigGcfsConfig `pulumi:"gcfsConfig"` - // List of the type and count of accelerator cards attached to the instance. - // Structure documented below. + GcfsConfig *ClusterNodePoolNodeConfigGcfsConfig `pulumi:"gcfsConfig"` GuestAccelerators []ClusterNodePoolNodeConfigGuestAccelerator `pulumi:"guestAccelerators"` // Google Virtual NIC (gVNIC) is a virtual network interface. // Installing the gVNIC driver allows for more efficient traffic transmission across the Google network infrastructure. @@ -20197,13 +20114,8 @@ type ClusterNodePoolNodeConfig struct { // The name of a Google Compute Engine machine type. // Defaults to `e2-medium`. To create a custom machine type, value should be set as specified // [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). - MachineType *string `pulumi:"machineType"` - // The metadata key/value pairs assigned to instances in - // the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - // `true` by the API; if `metadata` is set but that default value is not - // included, the provider will attempt to unset the value. To avoid this, set the - // value in your config. - Metadata map[string]string `pulumi:"metadata"` + MachineType *string `pulumi:"machineType"` + Metadata map[string]string `pulumi:"metadata"` // Minimum CPU platform to be used by this instance. // The instance may be scheduled on the specified or newer CPU platform. Applicable // values are the friendly names of CPU platforms, such as `Intel Haswell`. See the @@ -20224,8 +20136,10 @@ type ClusterNodePoolNodeConfig struct { ReservationAffinity *ClusterNodePoolNodeConfigReservationAffinity `pulumi:"reservationAffinity"` // The GCP labels (key/value pairs) to be applied to each node. Refer [here](https://cloud.google.com/kubernetes-engine/docs/how-to/creating-managing-labels) // for how these labels are applied to clusters, node pools and nodes. - ResourceLabels map[string]string `pulumi:"resourceLabels"` - SandboxConfig *ClusterNodePoolNodeConfigSandboxConfig `pulumi:"sandboxConfig"` + ResourceLabels map[string]string `pulumi:"resourceLabels"` + // ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `imageType = "COS_CONTAINERD"` and `nodeVersion = "1.12.7-gke.17"` or later to use it. + // Structure is documented below. + SandboxConfig *ClusterNodePoolNodeConfigSandboxConfig `pulumi:"sandboxConfig"` // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. ServiceAccount *string `pulumi:"serviceAccount"` @@ -20237,15 +20151,7 @@ type ClusterNodePoolNodeConfig struct { Spot *bool `pulumi:"spot"` // The list of instance tags applied to all nodes. Tags are used to identify // valid sources or targets for network firewalls. - Tags []string `pulumi:"tags"` - // A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - // to apply to nodes. GKE's API can only set this field on cluster creation. - // However, GKE will add taints to your nodes if you enable certain features such - // as GPUs. If this field is set, any diffs on this field will cause the provider to - // recreate the underlying resource. Taint values can be updated safely in - // Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - // this field to manage taints. If you do, `lifecycle.ignore_changes` is - // recommended. Structure is documented below. + Tags []string `pulumi:"tags"` Taints []ClusterNodePoolNodeConfigTaint `pulumi:"taints"` // Metadata configuration to expose to workloads on the node pool. // Structure is documented below. @@ -20264,7 +20170,7 @@ type ClusterNodePoolNodeConfigInput interface { } type ClusterNodePoolNodeConfigArgs struct { - // The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + // The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption BootDiskKmsKey pulumi.StringPtrInput `pulumi:"bootDiskKmsKey"` // Size of the disk attached to each node, specified // in GB. The smallest allowed disk size is 10GB. Defaults to 100GB. @@ -20280,9 +20186,7 @@ type ClusterNodePoolNodeConfigArgs struct { // A `machineType` that has more than 16 GiB of memory is also recommended. // GCFS must be enabled in order to use [image streaming](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming). // Structure is documented below. - GcfsConfig ClusterNodePoolNodeConfigGcfsConfigPtrInput `pulumi:"gcfsConfig"` - // List of the type and count of accelerator cards attached to the instance. - // Structure documented below. + GcfsConfig ClusterNodePoolNodeConfigGcfsConfigPtrInput `pulumi:"gcfsConfig"` GuestAccelerators ClusterNodePoolNodeConfigGuestAcceleratorArrayInput `pulumi:"guestAccelerators"` // Google Virtual NIC (gVNIC) is a virtual network interface. // Installing the gVNIC driver allows for more efficient traffic transmission across the Google network infrastructure. @@ -20312,12 +20216,7 @@ type ClusterNodePoolNodeConfigArgs struct { // Defaults to `e2-medium`. To create a custom machine type, value should be set as specified // [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). MachineType pulumi.StringPtrInput `pulumi:"machineType"` - // The metadata key/value pairs assigned to instances in - // the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - // `true` by the API; if `metadata` is set but that default value is not - // included, the provider will attempt to unset the value. To avoid this, set the - // value in your config. - Metadata pulumi.StringMapInput `pulumi:"metadata"` + Metadata pulumi.StringMapInput `pulumi:"metadata"` // Minimum CPU platform to be used by this instance. // The instance may be scheduled on the specified or newer CPU platform. Applicable // values are the friendly names of CPU platforms, such as `Intel Haswell`. See the @@ -20338,8 +20237,10 @@ type ClusterNodePoolNodeConfigArgs struct { ReservationAffinity ClusterNodePoolNodeConfigReservationAffinityPtrInput `pulumi:"reservationAffinity"` // The GCP labels (key/value pairs) to be applied to each node. Refer [here](https://cloud.google.com/kubernetes-engine/docs/how-to/creating-managing-labels) // for how these labels are applied to clusters, node pools and nodes. - ResourceLabels pulumi.StringMapInput `pulumi:"resourceLabels"` - SandboxConfig ClusterNodePoolNodeConfigSandboxConfigPtrInput `pulumi:"sandboxConfig"` + ResourceLabels pulumi.StringMapInput `pulumi:"resourceLabels"` + // ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `imageType = "COS_CONTAINERD"` and `nodeVersion = "1.12.7-gke.17"` or later to use it. + // Structure is documented below. + SandboxConfig ClusterNodePoolNodeConfigSandboxConfigPtrInput `pulumi:"sandboxConfig"` // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. ServiceAccount pulumi.StringPtrInput `pulumi:"serviceAccount"` @@ -20351,15 +20252,7 @@ type ClusterNodePoolNodeConfigArgs struct { Spot pulumi.BoolPtrInput `pulumi:"spot"` // The list of instance tags applied to all nodes. Tags are used to identify // valid sources or targets for network firewalls. - Tags pulumi.StringArrayInput `pulumi:"tags"` - // A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - // to apply to nodes. GKE's API can only set this field on cluster creation. - // However, GKE will add taints to your nodes if you enable certain features such - // as GPUs. If this field is set, any diffs on this field will cause the provider to - // recreate the underlying resource. Taint values can be updated safely in - // Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - // this field to manage taints. If you do, `lifecycle.ignore_changes` is - // recommended. Structure is documented below. + Tags pulumi.StringArrayInput `pulumi:"tags"` Taints ClusterNodePoolNodeConfigTaintArrayInput `pulumi:"taints"` // Metadata configuration to expose to workloads on the node pool. // Structure is documented below. @@ -20443,7 +20336,7 @@ func (o ClusterNodePoolNodeConfigOutput) ToClusterNodePoolNodeConfigPtrOutputWit }).(ClusterNodePoolNodeConfigPtrOutput) } -// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: +// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption func (o ClusterNodePoolNodeConfigOutput) BootDiskKmsKey() pulumi.StringPtrOutput { return o.ApplyT(func(v ClusterNodePoolNodeConfig) *string { return v.BootDiskKmsKey }).(pulumi.StringPtrOutput) } @@ -20477,8 +20370,6 @@ func (o ClusterNodePoolNodeConfigOutput) GcfsConfig() ClusterNodePoolNodeConfigG return o.ApplyT(func(v ClusterNodePoolNodeConfig) *ClusterNodePoolNodeConfigGcfsConfig { return v.GcfsConfig }).(ClusterNodePoolNodeConfigGcfsConfigPtrOutput) } -// List of the type and count of accelerator cards attached to the instance. -// Structure documented below. func (o ClusterNodePoolNodeConfigOutput) GuestAccelerators() ClusterNodePoolNodeConfigGuestAcceleratorArrayOutput { return o.ApplyT(func(v ClusterNodePoolNodeConfig) []ClusterNodePoolNodeConfigGuestAccelerator { return v.GuestAccelerators @@ -20537,11 +20428,6 @@ func (o ClusterNodePoolNodeConfigOutput) MachineType() pulumi.StringPtrOutput { return o.ApplyT(func(v ClusterNodePoolNodeConfig) *string { return v.MachineType }).(pulumi.StringPtrOutput) } -// The metadata key/value pairs assigned to instances in -// the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to -// `true` by the API; if `metadata` is set but that default value is not -// included, the provider will attempt to unset the value. To avoid this, set the -// value in your config. func (o ClusterNodePoolNodeConfigOutput) Metadata() pulumi.StringMapOutput { return o.ApplyT(func(v ClusterNodePoolNodeConfig) map[string]string { return v.Metadata }).(pulumi.StringMapOutput) } @@ -20587,6 +20473,8 @@ func (o ClusterNodePoolNodeConfigOutput) ResourceLabels() pulumi.StringMapOutput return o.ApplyT(func(v ClusterNodePoolNodeConfig) map[string]string { return v.ResourceLabels }).(pulumi.StringMapOutput) } +// ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `imageType = "COS_CONTAINERD"` and `nodeVersion = "1.12.7-gke.17"` or later to use it. +// Structure is documented below. func (o ClusterNodePoolNodeConfigOutput) SandboxConfig() ClusterNodePoolNodeConfigSandboxConfigPtrOutput { return o.ApplyT(func(v ClusterNodePoolNodeConfig) *ClusterNodePoolNodeConfigSandboxConfig { return v.SandboxConfig }).(ClusterNodePoolNodeConfigSandboxConfigPtrOutput) } @@ -20617,14 +20505,6 @@ func (o ClusterNodePoolNodeConfigOutput) Tags() pulumi.StringArrayOutput { return o.ApplyT(func(v ClusterNodePoolNodeConfig) []string { return v.Tags }).(pulumi.StringArrayOutput) } -// A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) -// to apply to nodes. GKE's API can only set this field on cluster creation. -// However, GKE will add taints to your nodes if you enable certain features such -// as GPUs. If this field is set, any diffs on this field will cause the provider to -// recreate the underlying resource. Taint values can be updated safely in -// Kubernetes (eg. through `kubectl`), and it's recommended that you do not use -// this field to manage taints. If you do, `lifecycle.ignore_changes` is -// recommended. Structure is documented below. func (o ClusterNodePoolNodeConfigOutput) Taints() ClusterNodePoolNodeConfigTaintArrayOutput { return o.ApplyT(func(v ClusterNodePoolNodeConfig) []ClusterNodePoolNodeConfigTaint { return v.Taints }).(ClusterNodePoolNodeConfigTaintArrayOutput) } @@ -20661,7 +20541,7 @@ func (o ClusterNodePoolNodeConfigPtrOutput) Elem() ClusterNodePoolNodeConfigOutp }).(ClusterNodePoolNodeConfigOutput) } -// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: +// The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption func (o ClusterNodePoolNodeConfigPtrOutput) BootDiskKmsKey() pulumi.StringPtrOutput { return o.ApplyT(func(v *ClusterNodePoolNodeConfig) *string { if v == nil { @@ -20718,8 +20598,6 @@ func (o ClusterNodePoolNodeConfigPtrOutput) GcfsConfig() ClusterNodePoolNodeConf }).(ClusterNodePoolNodeConfigGcfsConfigPtrOutput) } -// List of the type and count of accelerator cards attached to the instance. -// Structure documented below. func (o ClusterNodePoolNodeConfigPtrOutput) GuestAccelerators() ClusterNodePoolNodeConfigGuestAcceleratorArrayOutput { return o.ApplyT(func(v *ClusterNodePoolNodeConfig) []ClusterNodePoolNodeConfigGuestAccelerator { if v == nil { @@ -20821,11 +20699,6 @@ func (o ClusterNodePoolNodeConfigPtrOutput) MachineType() pulumi.StringPtrOutput }).(pulumi.StringPtrOutput) } -// The metadata key/value pairs assigned to instances in -// the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to -// `true` by the API; if `metadata` is set but that default value is not -// included, the provider will attempt to unset the value. To avoid this, set the -// value in your config. func (o ClusterNodePoolNodeConfigPtrOutput) Metadata() pulumi.StringMapOutput { return o.ApplyT(func(v *ClusterNodePoolNodeConfig) map[string]string { if v == nil { @@ -20904,6 +20777,8 @@ func (o ClusterNodePoolNodeConfigPtrOutput) ResourceLabels() pulumi.StringMapOut }).(pulumi.StringMapOutput) } +// ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `imageType = "COS_CONTAINERD"` and `nodeVersion = "1.12.7-gke.17"` or later to use it. +// Structure is documented below. func (o ClusterNodePoolNodeConfigPtrOutput) SandboxConfig() ClusterNodePoolNodeConfigSandboxConfigPtrOutput { return o.ApplyT(func(v *ClusterNodePoolNodeConfig) *ClusterNodePoolNodeConfigSandboxConfig { if v == nil { @@ -20957,14 +20832,6 @@ func (o ClusterNodePoolNodeConfigPtrOutput) Tags() pulumi.StringArrayOutput { }).(pulumi.StringArrayOutput) } -// A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) -// to apply to nodes. GKE's API can only set this field on cluster creation. -// However, GKE will add taints to your nodes if you enable certain features such -// as GPUs. If this field is set, any diffs on this field will cause the provider to -// recreate the underlying resource. Taint values can be updated safely in -// Kubernetes (eg. through `kubectl`), and it's recommended that you do not use -// this field to manage taints. If you do, `lifecycle.ignore_changes` is -// recommended. Structure is documented below. func (o ClusterNodePoolNodeConfigPtrOutput) Taints() ClusterNodePoolNodeConfigTaintArrayOutput { return o.ApplyT(func(v *ClusterNodePoolNodeConfig) []ClusterNodePoolNodeConfigTaint { if v == nil { @@ -22624,7 +22491,7 @@ func (o ClusterNodePoolNodeConfigTaintArrayOutput) Index(i pulumi.IntInput) Clus type ClusterNodePoolNodeConfigWorkloadMetadataConfig struct { // How to expose the node metadata to the workload running on the node. // Accepted values are: - // * UNSPECIFIED: Not Set + // * MODE_UNSPECIFIED: Not Set // * GCE_METADATA: Expose all Compute Engine metadata to pods. // * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. Mode string `pulumi:"mode"` @@ -22644,7 +22511,7 @@ type ClusterNodePoolNodeConfigWorkloadMetadataConfigInput interface { type ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs struct { // How to expose the node metadata to the workload running on the node. // Accepted values are: - // * UNSPECIFIED: Not Set + // * MODE_UNSPECIFIED: Not Set // * GCE_METADATA: Expose all Compute Engine metadata to pods. // * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. Mode pulumi.StringInput `pulumi:"mode"` @@ -22729,7 +22596,7 @@ func (o ClusterNodePoolNodeConfigWorkloadMetadataConfigOutput) ToClusterNodePool // How to expose the node metadata to the workload running on the node. // Accepted values are: -// * UNSPECIFIED: Not Set +// * MODE_UNSPECIFIED: Not Set // * GCE_METADATA: Expose all Compute Engine metadata to pods. // * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. func (o ClusterNodePoolNodeConfigWorkloadMetadataConfigOutput) Mode() pulumi.StringOutput { @@ -22762,7 +22629,7 @@ func (o ClusterNodePoolNodeConfigWorkloadMetadataConfigPtrOutput) Elem() Cluster // How to expose the node metadata to the workload running on the node. // Accepted values are: -// * UNSPECIFIED: Not Set +// * MODE_UNSPECIFIED: Not Set // * GCE_METADATA: Expose all Compute Engine metadata to pods. // * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. func (o ClusterNodePoolNodeConfigWorkloadMetadataConfigPtrOutput) Mode() pulumi.StringPtrOutput { @@ -24050,10 +23917,7 @@ type ClusterPrivateClusterConfig struct { // creating a private endpoint on the cluster. In a private cluster, nodes only // have RFC 1918 private addresses and communicate with the master's private // endpoint via private networking. - EnablePrivateNodes *bool `pulumi:"enablePrivateNodes"` - // Controls cluster master global - // access settings. If unset, the provider will no longer manage this field and will - // not modify the previously-set value. Structure is documented below. + EnablePrivateNodes *bool `pulumi:"enablePrivateNodes"` MasterGlobalAccessConfig *ClusterPrivateClusterConfigMasterGlobalAccessConfig `pulumi:"masterGlobalAccessConfig"` // The IP range in CIDR notation to use for // the hosted master network. This range will be used for assigning private IP @@ -24094,10 +23958,7 @@ type ClusterPrivateClusterConfigArgs struct { // creating a private endpoint on the cluster. In a private cluster, nodes only // have RFC 1918 private addresses and communicate with the master's private // endpoint via private networking. - EnablePrivateNodes pulumi.BoolPtrInput `pulumi:"enablePrivateNodes"` - // Controls cluster master global - // access settings. If unset, the provider will no longer manage this field and will - // not modify the previously-set value. Structure is documented below. + EnablePrivateNodes pulumi.BoolPtrInput `pulumi:"enablePrivateNodes"` MasterGlobalAccessConfig ClusterPrivateClusterConfigMasterGlobalAccessConfigPtrInput `pulumi:"masterGlobalAccessConfig"` // The IP range in CIDR notation to use for // the hosted master network. This range will be used for assigning private IP @@ -24210,9 +24071,6 @@ func (o ClusterPrivateClusterConfigOutput) EnablePrivateNodes() pulumi.BoolPtrOu return o.ApplyT(func(v ClusterPrivateClusterConfig) *bool { return v.EnablePrivateNodes }).(pulumi.BoolPtrOutput) } -// Controls cluster master global -// access settings. If unset, the provider will no longer manage this field and will -// not modify the previously-set value. Structure is documented below. func (o ClusterPrivateClusterConfigOutput) MasterGlobalAccessConfig() ClusterPrivateClusterConfigMasterGlobalAccessConfigPtrOutput { return o.ApplyT(func(v ClusterPrivateClusterConfig) *ClusterPrivateClusterConfigMasterGlobalAccessConfig { return v.MasterGlobalAccessConfig @@ -24300,9 +24158,6 @@ func (o ClusterPrivateClusterConfigPtrOutput) EnablePrivateNodes() pulumi.BoolPt }).(pulumi.BoolPtrOutput) } -// Controls cluster master global -// access settings. If unset, the provider will no longer manage this field and will -// not modify the previously-set value. Structure is documented below. func (o ClusterPrivateClusterConfigPtrOutput) MasterGlobalAccessConfig() ClusterPrivateClusterConfigMasterGlobalAccessConfigPtrOutput { return o.ApplyT(func(v *ClusterPrivateClusterConfig) *ClusterPrivateClusterConfigMasterGlobalAccessConfig { if v == nil { diff --git a/sdk/go/gcp/datacatalog/entryGroup.go b/sdk/go/gcp/datacatalog/entryGroup.go index 057960b14b..cd1247b99e 100644 --- a/sdk/go/gcp/datacatalog/entryGroup.go +++ b/sdk/go/gcp/datacatalog/entryGroup.go @@ -60,8 +60,8 @@ import ( // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := datacatalog.NewEntryGroup(ctx, "basicEntryGroup", &datacatalog.EntryGroupArgs{ -// Description: pulumi.String("example entry group"), -// DisplayName: pulumi.String("entry group"), +// Description: pulumi.String("entry group created by Terraform"), +// DisplayName: pulumi.String("terraform entry group"), // EntryGroupId: pulumi.String("my_group"), // }) // if err != nil { diff --git a/sdk/go/gcp/datacatalog/policyTag.go b/sdk/go/gcp/datacatalog/policyTag.go index ad78eba2d8..5f4c58ccab 100644 --- a/sdk/go/gcp/datacatalog/policyTag.go +++ b/sdk/go/gcp/datacatalog/policyTag.go @@ -11,14 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Denotes one policy tag in a taxonomy. -// -// To get more information about PolicyTag, see: -// -// * [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies.policyTags) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/data-catalog/docs) -// // ## Example Usage // ### Data Catalog Taxonomies Policy Tag Basic // diff --git a/sdk/go/gcp/datacatalog/policyTagIamBinding.go b/sdk/go/gcp/datacatalog/policyTagIamBinding.go index e9b88c2fc4..d8d659acfb 100644 --- a/sdk/go/gcp/datacatalog/policyTagIamBinding.go +++ b/sdk/go/gcp/datacatalog/policyTagIamBinding.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: -// -// * `datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. -// * `datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. -// * `datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. -// -// > **Note:** `datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `datacatalog.PolicyTagIamBinding` and `datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. -// -// > **Note:** `datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_data\_catalog\_policy\_tag\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = datacatalog.NewPolicyTagIamPolicy(ctx, "policy", &datacatalog.PolicyTagIamPolicyArgs{ -// PolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_data\_catalog\_policy\_tag\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := datacatalog.NewPolicyTagIamBinding(ctx, "binding", &datacatalog.PolicyTagIamBindingArgs{ -// PolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name), -// Role: pulumi.String("roles/viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_data\_catalog\_policy\_tag\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := datacatalog.NewPolicyTagIamMember(ctx, "member", &datacatalog.PolicyTagIamMemberArgs{ -// PolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name), -// Role: pulumi.String("roles/viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/datacatalog/policyTagIamMember.go b/sdk/go/gcp/datacatalog/policyTagIamMember.go index f658bdd889..cc4158dad2 100644 --- a/sdk/go/gcp/datacatalog/policyTagIamMember.go +++ b/sdk/go/gcp/datacatalog/policyTagIamMember.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: -// -// * `datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. -// * `datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. -// * `datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. -// -// > **Note:** `datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `datacatalog.PolicyTagIamBinding` and `datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. -// -// > **Note:** `datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_data\_catalog\_policy\_tag\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = datacatalog.NewPolicyTagIamPolicy(ctx, "policy", &datacatalog.PolicyTagIamPolicyArgs{ -// PolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_data\_catalog\_policy\_tag\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := datacatalog.NewPolicyTagIamBinding(ctx, "binding", &datacatalog.PolicyTagIamBindingArgs{ -// PolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name), -// Role: pulumi.String("roles/viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_data\_catalog\_policy\_tag\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := datacatalog.NewPolicyTagIamMember(ctx, "member", &datacatalog.PolicyTagIamMemberArgs{ -// PolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name), -// Role: pulumi.String("roles/viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/datacatalog/policyTagIamPolicy.go b/sdk/go/gcp/datacatalog/policyTagIamPolicy.go index 83b6804f4b..2d082fea1e 100644 --- a/sdk/go/gcp/datacatalog/policyTagIamPolicy.go +++ b/sdk/go/gcp/datacatalog/policyTagIamPolicy.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: -// -// * `datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. -// * `datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. -// * `datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. -// -// > **Note:** `datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `datacatalog.PolicyTagIamBinding` and `datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. -// -// > **Note:** `datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_data\_catalog\_policy\_tag\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = datacatalog.NewPolicyTagIamPolicy(ctx, "policy", &datacatalog.PolicyTagIamPolicyArgs{ -// PolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_data\_catalog\_policy\_tag\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := datacatalog.NewPolicyTagIamBinding(ctx, "binding", &datacatalog.PolicyTagIamBindingArgs{ -// PolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name), -// Role: pulumi.String("roles/viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_data\_catalog\_policy\_tag\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := datacatalog.NewPolicyTagIamMember(ctx, "member", &datacatalog.PolicyTagIamMemberArgs{ -// PolicyTag: pulumi.Any(google_data_catalog_policy_tag.Basic_policy_tag.Name), -// Role: pulumi.String("roles/viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/datacatalog/taxonomy.go b/sdk/go/gcp/datacatalog/taxonomy.go index 176e5d08bd..98ad94e18a 100644 --- a/sdk/go/gcp/datacatalog/taxonomy.go +++ b/sdk/go/gcp/datacatalog/taxonomy.go @@ -11,14 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A collection of policy tags that classify data along a common axis. -// -// To get more information about Taxonomy, see: -// -// * [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/data-catalog/docs) -// // ## Example Usage // ### Data Catalog Taxonomy Basic // diff --git a/sdk/go/gcp/datacatalog/taxonomyIamBinding.go b/sdk/go/gcp/datacatalog/taxonomyIamBinding.go index 868d1d30d2..7459c0533d 100644 --- a/sdk/go/gcp/datacatalog/taxonomyIamBinding.go +++ b/sdk/go/gcp/datacatalog/taxonomyIamBinding.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: -// -// * `datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. -// * `datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. -// * `datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. -// -// > **Note:** `datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `datacatalog.TaxonomyIamBinding` and `datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. -// -// > **Note:** `datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_data\_catalog\_taxonomy\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = datacatalog.NewTaxonomyIamPolicy(ctx, "policy", &datacatalog.TaxonomyIamPolicyArgs{ -// Taxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_data\_catalog\_taxonomy\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := datacatalog.NewTaxonomyIamBinding(ctx, "binding", &datacatalog.TaxonomyIamBindingArgs{ -// Taxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name), -// Role: pulumi.String("roles/viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_data\_catalog\_taxonomy\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := datacatalog.NewTaxonomyIamMember(ctx, "member", &datacatalog.TaxonomyIamMemberArgs{ -// Taxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name), -// Role: pulumi.String("roles/viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/datacatalog/taxonomyIamMember.go b/sdk/go/gcp/datacatalog/taxonomyIamMember.go index 02e2768534..cf592fc2f7 100644 --- a/sdk/go/gcp/datacatalog/taxonomyIamMember.go +++ b/sdk/go/gcp/datacatalog/taxonomyIamMember.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: -// -// * `datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. -// * `datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. -// * `datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. -// -// > **Note:** `datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `datacatalog.TaxonomyIamBinding` and `datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. -// -// > **Note:** `datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_data\_catalog\_taxonomy\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = datacatalog.NewTaxonomyIamPolicy(ctx, "policy", &datacatalog.TaxonomyIamPolicyArgs{ -// Taxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_data\_catalog\_taxonomy\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := datacatalog.NewTaxonomyIamBinding(ctx, "binding", &datacatalog.TaxonomyIamBindingArgs{ -// Taxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name), -// Role: pulumi.String("roles/viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_data\_catalog\_taxonomy\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := datacatalog.NewTaxonomyIamMember(ctx, "member", &datacatalog.TaxonomyIamMemberArgs{ -// Taxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name), -// Role: pulumi.String("roles/viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/datacatalog/taxonomyIamPolicy.go b/sdk/go/gcp/datacatalog/taxonomyIamPolicy.go index ef85d46499..a690ae6905 100644 --- a/sdk/go/gcp/datacatalog/taxonomyIamPolicy.go +++ b/sdk/go/gcp/datacatalog/taxonomyIamPolicy.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: -// -// * `datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. -// * `datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. -// * `datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. -// -// > **Note:** `datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `datacatalog.TaxonomyIamBinding` and `datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. -// -// > **Note:** `datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_data\_catalog\_taxonomy\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = datacatalog.NewTaxonomyIamPolicy(ctx, "policy", &datacatalog.TaxonomyIamPolicyArgs{ -// Taxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name), -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_data\_catalog\_taxonomy\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := datacatalog.NewTaxonomyIamBinding(ctx, "binding", &datacatalog.TaxonomyIamBindingArgs{ -// Taxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name), -// Role: pulumi.String("roles/viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_data\_catalog\_taxonomy\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datacatalog" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := datacatalog.NewTaxonomyIamMember(ctx, "member", &datacatalog.TaxonomyIamMemberArgs{ -// Taxonomy: pulumi.Any(google_data_catalog_taxonomy.Basic_taxonomy.Name), -// Role: pulumi.String("roles/viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/dataflow/flexTemplateJob.go b/sdk/go/gcp/dataflow/flexTemplateJob.go index 2e2c290737..b5b2f98b70 100644 --- a/sdk/go/gcp/dataflow/flexTemplateJob.go +++ b/sdk/go/gcp/dataflow/flexTemplateJob.go @@ -24,16 +24,13 @@ type FlexTemplateJob struct { JobId pulumi.StringOutput `pulumi:"jobId"` // User labels to be specified for the job. Keys and values // should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - // page. **Note**: This field is marked as deprecated as the API does not currently - // support adding labels. + // page. // **NOTE**: Google-provided Dataflow templates often provide default labels // that begin with `goog-dataflow-provided`. Unless explicitly set in config, these // labels will be ignored to prevent diffs on re-apply. Labels pulumi.MapOutput `pulumi:"labels"` // A unique name for the resource, required by Dataflow. - Name pulumi.StringOutput `pulumi:"name"` - // One of "drain" or "cancel". Specifies behavior of - // deletion during `pulumi destroy`. See above note. + Name pulumi.StringOutput `pulumi:"name"` OnDelete pulumi.StringPtrOutput `pulumi:"onDelete"` // Key/Value pairs to be passed to the Dataflow job (as // used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) @@ -91,16 +88,13 @@ type flexTemplateJobState struct { JobId *string `pulumi:"jobId"` // User labels to be specified for the job. Keys and values // should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - // page. **Note**: This field is marked as deprecated as the API does not currently - // support adding labels. + // page. // **NOTE**: Google-provided Dataflow templates often provide default labels // that begin with `goog-dataflow-provided`. Unless explicitly set in config, these // labels will be ignored to prevent diffs on re-apply. Labels map[string]interface{} `pulumi:"labels"` // A unique name for the resource, required by Dataflow. - Name *string `pulumi:"name"` - // One of "drain" or "cancel". Specifies behavior of - // deletion during `pulumi destroy`. See above note. + Name *string `pulumi:"name"` OnDelete *string `pulumi:"onDelete"` // Key/Value pairs to be passed to the Dataflow job (as // used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) @@ -127,16 +121,13 @@ type FlexTemplateJobState struct { JobId pulumi.StringPtrInput // User labels to be specified for the job. Keys and values // should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - // page. **Note**: This field is marked as deprecated as the API does not currently - // support adding labels. + // page. // **NOTE**: Google-provided Dataflow templates often provide default labels // that begin with `goog-dataflow-provided`. Unless explicitly set in config, these // labels will be ignored to prevent diffs on re-apply. Labels pulumi.MapInput // A unique name for the resource, required by Dataflow. - Name pulumi.StringPtrInput - // One of "drain" or "cancel". Specifies behavior of - // deletion during `pulumi destroy`. See above note. + Name pulumi.StringPtrInput OnDelete pulumi.StringPtrInput // Key/Value pairs to be passed to the Dataflow job (as // used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) @@ -165,16 +156,13 @@ type flexTemplateJobArgs struct { ContainerSpecGcsPath string `pulumi:"containerSpecGcsPath"` // User labels to be specified for the job. Keys and values // should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - // page. **Note**: This field is marked as deprecated as the API does not currently - // support adding labels. + // page. // **NOTE**: Google-provided Dataflow templates often provide default labels // that begin with `goog-dataflow-provided`. Unless explicitly set in config, these // labels will be ignored to prevent diffs on re-apply. Labels map[string]interface{} `pulumi:"labels"` // A unique name for the resource, required by Dataflow. - Name *string `pulumi:"name"` - // One of "drain" or "cancel". Specifies behavior of - // deletion during `pulumi destroy`. See above note. + Name *string `pulumi:"name"` OnDelete *string `pulumi:"onDelete"` // Key/Value pairs to be passed to the Dataflow job (as // used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) @@ -198,16 +186,13 @@ type FlexTemplateJobArgs struct { ContainerSpecGcsPath pulumi.StringInput // User labels to be specified for the job. Keys and values // should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - // page. **Note**: This field is marked as deprecated as the API does not currently - // support adding labels. + // page. // **NOTE**: Google-provided Dataflow templates often provide default labels // that begin with `goog-dataflow-provided`. Unless explicitly set in config, these // labels will be ignored to prevent diffs on re-apply. Labels pulumi.MapInput // A unique name for the resource, required by Dataflow. - Name pulumi.StringPtrInput - // One of "drain" or "cancel". Specifies behavior of - // deletion during `pulumi destroy`. See above note. + Name pulumi.StringPtrInput OnDelete pulumi.StringPtrInput // Key/Value pairs to be passed to the Dataflow job (as // used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) @@ -324,8 +309,7 @@ func (o FlexTemplateJobOutput) JobId() pulumi.StringOutput { // User labels to be specified for the job. Keys and values // should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) -// page. **Note**: This field is marked as deprecated as the API does not currently -// support adding labels. +// page. // **NOTE**: Google-provided Dataflow templates often provide default labels // that begin with `goog-dataflow-provided`. Unless explicitly set in config, these // labels will be ignored to prevent diffs on re-apply. @@ -338,8 +322,6 @@ func (o FlexTemplateJobOutput) Name() pulumi.StringOutput { return o.ApplyT(func(v *FlexTemplateJob) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) } -// One of "drain" or "cancel". Specifies behavior of -// deletion during `pulumi destroy`. See above note. func (o FlexTemplateJobOutput) OnDelete() pulumi.StringPtrOutput { return o.ApplyT(func(v *FlexTemplateJob) pulumi.StringPtrOutput { return v.OnDelete }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/dataflow/job.go b/sdk/go/gcp/dataflow/job.go index a838016e80..b44f3b13e6 100644 --- a/sdk/go/gcp/dataflow/job.go +++ b/sdk/go/gcp/dataflow/job.go @@ -46,7 +46,7 @@ type Job struct { Name pulumi.StringOutput `pulumi:"name"` // The network to which VMs will be assigned. If it is not provided, "default" will be used. Network pulumi.StringPtrOutput `pulumi:"network"` - // One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + // One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. OnDelete pulumi.StringPtrOutput `pulumi:"onDelete"` // Key/Value pairs to be passed to the Dataflow job (as used in the template). Parameters pulumi.MapOutput `pulumi:"parameters"` @@ -56,7 +56,9 @@ type Job struct { Region pulumi.StringPtrOutput `pulumi:"region"` // The Service Account email used to create the job. ServiceAccountEmail pulumi.StringPtrOutput `pulumi:"serviceAccountEmail"` - // If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + // If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + // terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + // different, e.g. by embedding a release ID or by using a random_id. SkipWaitOnJobTermination pulumi.BoolPtrOutput `pulumi:"skipWaitOnJobTermination"` // The current state of the resource, selected from the [JobState enum](https://cloud.google.com/dataflow/docs/reference/rest/v1b3/projects.jobs#Job.JobState) State pulumi.StringOutput `pulumi:"state"` @@ -132,7 +134,7 @@ type jobState struct { Name *string `pulumi:"name"` // The network to which VMs will be assigned. If it is not provided, "default" will be used. Network *string `pulumi:"network"` - // One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + // One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. OnDelete *string `pulumi:"onDelete"` // Key/Value pairs to be passed to the Dataflow job (as used in the template). Parameters map[string]interface{} `pulumi:"parameters"` @@ -142,7 +144,9 @@ type jobState struct { Region *string `pulumi:"region"` // The Service Account email used to create the job. ServiceAccountEmail *string `pulumi:"serviceAccountEmail"` - // If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + // If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + // terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + // different, e.g. by embedding a release ID or by using a random_id. SkipWaitOnJobTermination *bool `pulumi:"skipWaitOnJobTermination"` // The current state of the resource, selected from the [JobState enum](https://cloud.google.com/dataflow/docs/reference/rest/v1b3/projects.jobs#Job.JobState) State *string `pulumi:"state"` @@ -184,7 +188,7 @@ type JobState struct { Name pulumi.StringPtrInput // The network to which VMs will be assigned. If it is not provided, "default" will be used. Network pulumi.StringPtrInput - // One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + // One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. OnDelete pulumi.StringPtrInput // Key/Value pairs to be passed to the Dataflow job (as used in the template). Parameters pulumi.MapInput @@ -194,7 +198,9 @@ type JobState struct { Region pulumi.StringPtrInput // The Service Account email used to create the job. ServiceAccountEmail pulumi.StringPtrInput - // If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + // If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + // terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + // different, e.g. by embedding a release ID or by using a random_id. SkipWaitOnJobTermination pulumi.BoolPtrInput // The current state of the resource, selected from the [JobState enum](https://cloud.google.com/dataflow/docs/reference/rest/v1b3/projects.jobs#Job.JobState) State pulumi.StringPtrInput @@ -238,7 +244,7 @@ type jobArgs struct { Name *string `pulumi:"name"` // The network to which VMs will be assigned. If it is not provided, "default" will be used. Network *string `pulumi:"network"` - // One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + // One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. OnDelete *string `pulumi:"onDelete"` // Key/Value pairs to be passed to the Dataflow job (as used in the template). Parameters map[string]interface{} `pulumi:"parameters"` @@ -248,7 +254,9 @@ type jobArgs struct { Region *string `pulumi:"region"` // The Service Account email used to create the job. ServiceAccountEmail *string `pulumi:"serviceAccountEmail"` - // If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + // If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + // terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + // different, e.g. by embedding a release ID or by using a random_id. SkipWaitOnJobTermination *bool `pulumi:"skipWaitOnJobTermination"` // The subnetwork to which VMs will be assigned. Should be of the form "regions/REGION/subnetworks/SUBNETWORK". If the [subnetwork is located in a Shared VPC network](https://cloud.google.com/dataflow/docs/guides/specifying-networks#shared), you must use the complete URL. For example `"googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"` Subnetwork *string `pulumi:"subnetwork"` @@ -285,7 +293,7 @@ type JobArgs struct { Name pulumi.StringPtrInput // The network to which VMs will be assigned. If it is not provided, "default" will be used. Network pulumi.StringPtrInput - // One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + // One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. OnDelete pulumi.StringPtrInput // Key/Value pairs to be passed to the Dataflow job (as used in the template). Parameters pulumi.MapInput @@ -295,7 +303,9 @@ type JobArgs struct { Region pulumi.StringPtrInput // The Service Account email used to create the job. ServiceAccountEmail pulumi.StringPtrInput - // If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + // If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + // terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + // different, e.g. by embedding a release ID or by using a random_id. SkipWaitOnJobTermination pulumi.BoolPtrInput // The subnetwork to which VMs will be assigned. Should be of the form "regions/REGION/subnetworks/SUBNETWORK". If the [subnetwork is located in a Shared VPC network](https://cloud.google.com/dataflow/docs/guides/specifying-networks#shared), you must use the complete URL. For example `"googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"` Subnetwork pulumi.StringPtrInput @@ -449,7 +459,7 @@ func (o JobOutput) Network() pulumi.StringPtrOutput { return o.ApplyT(func(v *Job) pulumi.StringPtrOutput { return v.Network }).(pulumi.StringPtrOutput) } -// One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. +// One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. func (o JobOutput) OnDelete() pulumi.StringPtrOutput { return o.ApplyT(func(v *Job) pulumi.StringPtrOutput { return v.OnDelete }).(pulumi.StringPtrOutput) } @@ -474,7 +484,9 @@ func (o JobOutput) ServiceAccountEmail() pulumi.StringPtrOutput { return o.ApplyT(func(v *Job) pulumi.StringPtrOutput { return v.ServiceAccountEmail }).(pulumi.StringPtrOutput) } -// If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. +// If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from +// terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are +// different, e.g. by embedding a release ID or by using a random_id. func (o JobOutput) SkipWaitOnJobTermination() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Job) pulumi.BoolPtrOutput { return v.SkipWaitOnJobTermination }).(pulumi.BoolPtrOutput) } diff --git a/sdk/go/gcp/datafusion/instance.go b/sdk/go/gcp/datafusion/instance.go index c22eb4550e..23c18d1afa 100644 --- a/sdk/go/gcp/datafusion/instance.go +++ b/sdk/go/gcp/datafusion/instance.go @@ -354,12 +354,12 @@ type Instance struct { // Endpoint on which the Data Fusion UI and REST APIs are accessible. ServiceEndpoint pulumi.StringOutput `pulumi:"serviceEndpoint"` // The current state of this Data Fusion instance. - // * CREATING: Instance is being created - // * RUNNING: Instance is running and ready for requests - // * FAILED: Instance creation failed - // * DELETING: Instance is being deleted - // * UPGRADING: Instance is being upgraded - // * RESTARTING: Instance is being restarted + // - CREATING: Instance is being created + // - RUNNING: Instance is running and ready for requests + // - FAILED: Instance creation failed + // - DELETING: Instance is being deleted + // - UPGRADING: Instance is being upgraded + // - RESTARTING: Instance is being restarted State pulumi.StringOutput `pulumi:"state"` // Additional information about the current state of this Data Fusion instance if available. StateMessage pulumi.StringOutput `pulumi:"stateMessage"` @@ -367,12 +367,12 @@ type Instance struct { TenantProjectId pulumi.StringOutput `pulumi:"tenantProjectId"` // Represents the type of Data Fusion instance. Each type is configured with // the default settings for processing and memory. - // * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + // - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines // using point and click UI. However, there are certain limitations, such as fewer number // of concurrent pipelines, no support for streaming pipelines, etc. - // * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + // - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features // available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - // * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + // - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but // with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration // pipelines at low cost. // Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -469,12 +469,12 @@ type instanceState struct { // Endpoint on which the Data Fusion UI and REST APIs are accessible. ServiceEndpoint *string `pulumi:"serviceEndpoint"` // The current state of this Data Fusion instance. - // * CREATING: Instance is being created - // * RUNNING: Instance is running and ready for requests - // * FAILED: Instance creation failed - // * DELETING: Instance is being deleted - // * UPGRADING: Instance is being upgraded - // * RESTARTING: Instance is being restarted + // - CREATING: Instance is being created + // - RUNNING: Instance is running and ready for requests + // - FAILED: Instance creation failed + // - DELETING: Instance is being deleted + // - UPGRADING: Instance is being upgraded + // - RESTARTING: Instance is being restarted State *string `pulumi:"state"` // Additional information about the current state of this Data Fusion instance if available. StateMessage *string `pulumi:"stateMessage"` @@ -482,12 +482,12 @@ type instanceState struct { TenantProjectId *string `pulumi:"tenantProjectId"` // Represents the type of Data Fusion instance. Each type is configured with // the default settings for processing and memory. - // * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + // - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines // using point and click UI. However, there are certain limitations, such as fewer number // of concurrent pipelines, no support for streaming pipelines, etc. - // * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + // - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features // available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - // * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + // - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but // with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration // pipelines at low cost. // Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -553,12 +553,12 @@ type InstanceState struct { // Endpoint on which the Data Fusion UI and REST APIs are accessible. ServiceEndpoint pulumi.StringPtrInput // The current state of this Data Fusion instance. - // * CREATING: Instance is being created - // * RUNNING: Instance is running and ready for requests - // * FAILED: Instance creation failed - // * DELETING: Instance is being deleted - // * UPGRADING: Instance is being upgraded - // * RESTARTING: Instance is being restarted + // - CREATING: Instance is being created + // - RUNNING: Instance is running and ready for requests + // - FAILED: Instance creation failed + // - DELETING: Instance is being deleted + // - UPGRADING: Instance is being upgraded + // - RESTARTING: Instance is being restarted State pulumi.StringPtrInput // Additional information about the current state of this Data Fusion instance if available. StateMessage pulumi.StringPtrInput @@ -566,12 +566,12 @@ type InstanceState struct { TenantProjectId pulumi.StringPtrInput // Represents the type of Data Fusion instance. Each type is configured with // the default settings for processing and memory. - // * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + // - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines // using point and click UI. However, there are certain limitations, such as fewer number // of concurrent pipelines, no support for streaming pipelines, etc. - // * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + // - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features // available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - // * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + // - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but // with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration // pipelines at low cost. // Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -628,12 +628,12 @@ type instanceArgs struct { Region *string `pulumi:"region"` // Represents the type of Data Fusion instance. Each type is configured with // the default settings for processing and memory. - // * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + // - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines // using point and click UI. However, there are certain limitations, such as fewer number // of concurrent pipelines, no support for streaming pipelines, etc. - // * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + // - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features // available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - // * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + // - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but // with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration // pipelines at low cost. // Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -685,12 +685,12 @@ type InstanceArgs struct { Region pulumi.StringPtrInput // Represents the type of Data Fusion instance. Each type is configured with // the default settings for processing and memory. - // * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + // - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines // using point and click UI. However, there are certain limitations, such as fewer number // of concurrent pipelines, no support for streaming pipelines, etc. - // * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + // - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features // available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - // * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + // - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but // with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration // pipelines at low cost. // Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -903,12 +903,12 @@ func (o InstanceOutput) ServiceEndpoint() pulumi.StringOutput { } // The current state of this Data Fusion instance. -// * CREATING: Instance is being created -// * RUNNING: Instance is running and ready for requests -// * FAILED: Instance creation failed -// * DELETING: Instance is being deleted -// * UPGRADING: Instance is being upgraded -// * RESTARTING: Instance is being restarted +// - CREATING: Instance is being created +// - RUNNING: Instance is running and ready for requests +// - FAILED: Instance creation failed +// - DELETING: Instance is being deleted +// - UPGRADING: Instance is being upgraded +// - RESTARTING: Instance is being restarted func (o InstanceOutput) State() pulumi.StringOutput { return o.ApplyT(func(v *Instance) pulumi.StringOutput { return v.State }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/dataloss/pulumiTypes.go b/sdk/go/gcp/dataloss/pulumiTypes.go index 8ec9019a92..6c9811bbca 100644 --- a/sdk/go/gcp/dataloss/pulumiTypes.go +++ b/sdk/go/gcp/dataloss/pulumiTypes.go @@ -21423,7 +21423,11 @@ type PreventionJobTriggerInspectJobAction struct { // Publish a message into a given Pub/Sub topic when the job completes. // Structure is documented below. PubSub *PreventionJobTriggerInspectJobActionPubSub `pulumi:"pubSub"` - // Schedule for triggered jobs + // Publish findings of a DlpJob to Data Catalog. + PublishFindingsToCloudDataCatalog *PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog `pulumi:"publishFindingsToCloudDataCatalog"` + // Publish the result summary of a DlpJob to the Cloud Security Command Center. + PublishSummaryToCscc *PreventionJobTriggerInspectJobActionPublishSummaryToCscc `pulumi:"publishSummaryToCscc"` + // If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk // Structure is documented below. SaveFindings *PreventionJobTriggerInspectJobActionSaveFindings `pulumi:"saveFindings"` } @@ -21443,7 +21447,11 @@ type PreventionJobTriggerInspectJobActionArgs struct { // Publish a message into a given Pub/Sub topic when the job completes. // Structure is documented below. PubSub PreventionJobTriggerInspectJobActionPubSubPtrInput `pulumi:"pubSub"` - // Schedule for triggered jobs + // Publish findings of a DlpJob to Data Catalog. + PublishFindingsToCloudDataCatalog PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrInput `pulumi:"publishFindingsToCloudDataCatalog"` + // Publish the result summary of a DlpJob to the Cloud Security Command Center. + PublishSummaryToCscc PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrInput `pulumi:"publishSummaryToCscc"` + // If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk // Structure is documented below. SaveFindings PreventionJobTriggerInspectJobActionSaveFindingsPtrInput `pulumi:"saveFindings"` } @@ -21507,7 +21515,21 @@ func (o PreventionJobTriggerInspectJobActionOutput) PubSub() PreventionJobTrigge }).(PreventionJobTriggerInspectJobActionPubSubPtrOutput) } -// Schedule for triggered jobs +// Publish findings of a DlpJob to Data Catalog. +func (o PreventionJobTriggerInspectJobActionOutput) PublishFindingsToCloudDataCatalog() PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput { + return o.ApplyT(func(v PreventionJobTriggerInspectJobAction) *PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog { + return v.PublishFindingsToCloudDataCatalog + }).(PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput) +} + +// Publish the result summary of a DlpJob to the Cloud Security Command Center. +func (o PreventionJobTriggerInspectJobActionOutput) PublishSummaryToCscc() PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput { + return o.ApplyT(func(v PreventionJobTriggerInspectJobAction) *PreventionJobTriggerInspectJobActionPublishSummaryToCscc { + return v.PublishSummaryToCscc + }).(PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput) +} + +// If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk // Structure is documented below. func (o PreventionJobTriggerInspectJobActionOutput) SaveFindings() PreventionJobTriggerInspectJobActionSaveFindingsPtrOutput { return o.ApplyT(func(v PreventionJobTriggerInspectJobAction) *PreventionJobTriggerInspectJobActionSaveFindings { @@ -21672,6 +21694,242 @@ func (o PreventionJobTriggerInspectJobActionPubSubPtrOutput) Topic() pulumi.Stri }).(pulumi.StringPtrOutput) } +type PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog struct { +} + +// PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogInput is an input type that accepts PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs and PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput values. +// You can construct a concrete instance of `PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogInput` via: +// +// PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs{...} +type PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogInput interface { + pulumi.Input + + ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput() PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput + ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutputWithContext(context.Context) PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput +} + +type PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs struct { +} + +func (PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs) ElementType() reflect.Type { + return reflect.TypeOf((*PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog)(nil)).Elem() +} + +func (i PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs) ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput() PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput { + return i.ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutputWithContext(context.Background()) +} + +func (i PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs) ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutputWithContext(ctx context.Context) PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput) +} + +func (i PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs) ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput() PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput { + return i.ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutputWithContext(context.Background()) +} + +func (i PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs) ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutputWithContext(ctx context.Context) PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput).ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutputWithContext(ctx) +} + +// PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrInput is an input type that accepts PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs, PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtr and PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput values. +// You can construct a concrete instance of `PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrInput` via: +// +// PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs{...} +// +// or: +// +// nil +type PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrInput interface { + pulumi.Input + + ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput() PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput + ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutputWithContext(context.Context) PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput +} + +type preventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrType PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs + +func PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtr(v *PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs) PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrInput { + return (*preventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrType)(v) +} + +func (*preventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog)(nil)).Elem() +} + +func (i *preventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrType) ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput() PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput { + return i.ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutputWithContext(context.Background()) +} + +func (i *preventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrType) ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutputWithContext(ctx context.Context) PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput) +} + +type PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput struct{ *pulumi.OutputState } + +func (PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput) ElementType() reflect.Type { + return reflect.TypeOf((*PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog)(nil)).Elem() +} + +func (o PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput) ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput() PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput { + return o +} + +func (o PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput) ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutputWithContext(ctx context.Context) PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput { + return o +} + +func (o PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput) ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput() PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput { + return o.ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutputWithContext(context.Background()) +} + +func (o PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput) ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutputWithContext(ctx context.Context) PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog) *PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog { + return &v + }).(PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput) +} + +type PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput struct{ *pulumi.OutputState } + +func (PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog)(nil)).Elem() +} + +func (o PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput) ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput() PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput { + return o +} + +func (o PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput) ToPreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutputWithContext(ctx context.Context) PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput { + return o +} + +func (o PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput) Elem() PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput { + return o.ApplyT(func(v *PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog) PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog { + if v != nil { + return *v + } + var ret PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog + return ret + }).(PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput) +} + +type PreventionJobTriggerInspectJobActionPublishSummaryToCscc struct { +} + +// PreventionJobTriggerInspectJobActionPublishSummaryToCsccInput is an input type that accepts PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs and PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput values. +// You can construct a concrete instance of `PreventionJobTriggerInspectJobActionPublishSummaryToCsccInput` via: +// +// PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs{...} +type PreventionJobTriggerInspectJobActionPublishSummaryToCsccInput interface { + pulumi.Input + + ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput() PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput + ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccOutputWithContext(context.Context) PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput +} + +type PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs struct { +} + +func (PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs) ElementType() reflect.Type { + return reflect.TypeOf((*PreventionJobTriggerInspectJobActionPublishSummaryToCscc)(nil)).Elem() +} + +func (i PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs) ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput() PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput { + return i.ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccOutputWithContext(context.Background()) +} + +func (i PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs) ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccOutputWithContext(ctx context.Context) PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput) +} + +func (i PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs) ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput() PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput { + return i.ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutputWithContext(context.Background()) +} + +func (i PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs) ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutputWithContext(ctx context.Context) PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput).ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutputWithContext(ctx) +} + +// PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrInput is an input type that accepts PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs, PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtr and PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput values. +// You can construct a concrete instance of `PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrInput` via: +// +// PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs{...} +// +// or: +// +// nil +type PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrInput interface { + pulumi.Input + + ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput() PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput + ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutputWithContext(context.Context) PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput +} + +type preventionJobTriggerInspectJobActionPublishSummaryToCsccPtrType PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs + +func PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtr(v *PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs) PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrInput { + return (*preventionJobTriggerInspectJobActionPublishSummaryToCsccPtrType)(v) +} + +func (*preventionJobTriggerInspectJobActionPublishSummaryToCsccPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**PreventionJobTriggerInspectJobActionPublishSummaryToCscc)(nil)).Elem() +} + +func (i *preventionJobTriggerInspectJobActionPublishSummaryToCsccPtrType) ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput() PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput { + return i.ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutputWithContext(context.Background()) +} + +func (i *preventionJobTriggerInspectJobActionPublishSummaryToCsccPtrType) ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutputWithContext(ctx context.Context) PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput) +} + +type PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput struct{ *pulumi.OutputState } + +func (PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput) ElementType() reflect.Type { + return reflect.TypeOf((*PreventionJobTriggerInspectJobActionPublishSummaryToCscc)(nil)).Elem() +} + +func (o PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput) ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput() PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput { + return o +} + +func (o PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput) ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccOutputWithContext(ctx context.Context) PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput { + return o +} + +func (o PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput) ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput() PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput { + return o.ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutputWithContext(context.Background()) +} + +func (o PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput) ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutputWithContext(ctx context.Context) PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v PreventionJobTriggerInspectJobActionPublishSummaryToCscc) *PreventionJobTriggerInspectJobActionPublishSummaryToCscc { + return &v + }).(PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput) +} + +type PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput struct{ *pulumi.OutputState } + +func (PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**PreventionJobTriggerInspectJobActionPublishSummaryToCscc)(nil)).Elem() +} + +func (o PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput) ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput() PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput { + return o +} + +func (o PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput) ToPreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutputWithContext(ctx context.Context) PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput { + return o +} + +func (o PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput) Elem() PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput { + return o.ApplyT(func(v *PreventionJobTriggerInspectJobActionPublishSummaryToCscc) PreventionJobTriggerInspectJobActionPublishSummaryToCscc { + if v != nil { + return *v + } + var ret PreventionJobTriggerInspectJobActionPublishSummaryToCscc + return ret + }).(PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput) +} + type PreventionJobTriggerInspectJobActionSaveFindings struct { // Information on where to store output // Structure is documented below. @@ -26482,6 +26740,10 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*PreventionJobTriggerInspectJobActionArrayInput)(nil)).Elem(), PreventionJobTriggerInspectJobActionArray{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionJobTriggerInspectJobActionPubSubInput)(nil)).Elem(), PreventionJobTriggerInspectJobActionPubSubArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionJobTriggerInspectJobActionPubSubPtrInput)(nil)).Elem(), PreventionJobTriggerInspectJobActionPubSubArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogInput)(nil)).Elem(), PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrInput)(nil)).Elem(), PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*PreventionJobTriggerInspectJobActionPublishSummaryToCsccInput)(nil)).Elem(), PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrInput)(nil)).Elem(), PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionJobTriggerInspectJobActionSaveFindingsInput)(nil)).Elem(), PreventionJobTriggerInspectJobActionSaveFindingsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionJobTriggerInspectJobActionSaveFindingsPtrInput)(nil)).Elem(), PreventionJobTriggerInspectJobActionSaveFindingsArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*PreventionJobTriggerInspectJobActionSaveFindingsOutputConfigInput)(nil)).Elem(), PreventionJobTriggerInspectJobActionSaveFindingsOutputConfigArgs{}) @@ -26785,6 +27047,10 @@ func init() { pulumi.RegisterOutputType(PreventionJobTriggerInspectJobActionArrayOutput{}) pulumi.RegisterOutputType(PreventionJobTriggerInspectJobActionPubSubOutput{}) pulumi.RegisterOutputType(PreventionJobTriggerInspectJobActionPubSubPtrOutput{}) + pulumi.RegisterOutputType(PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogOutput{}) + pulumi.RegisterOutputType(PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogPtrOutput{}) + pulumi.RegisterOutputType(PreventionJobTriggerInspectJobActionPublishSummaryToCsccOutput{}) + pulumi.RegisterOutputType(PreventionJobTriggerInspectJobActionPublishSummaryToCsccPtrOutput{}) pulumi.RegisterOutputType(PreventionJobTriggerInspectJobActionSaveFindingsOutput{}) pulumi.RegisterOutputType(PreventionJobTriggerInspectJobActionSaveFindingsPtrOutput{}) pulumi.RegisterOutputType(PreventionJobTriggerInspectJobActionSaveFindingsOutputConfigOutput{}) diff --git a/sdk/go/gcp/dataproc/clusterIAMBinding.go b/sdk/go/gcp/dataproc/clusterIAMBinding.go index 53c9a3743d..7cabd7fc5e 100644 --- a/sdk/go/gcp/dataproc/clusterIAMBinding.go +++ b/sdk/go/gcp/dataproc/clusterIAMBinding.go @@ -156,12 +156,8 @@ type ClusterIAMBinding struct { // (Computed) The etag of the clusters's IAM policy. Etag pulumi.StringOutput `pulumi:"etag"` Members pulumi.StringArrayOutput `pulumi:"members"` - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. - Project pulumi.StringOutput `pulumi:"project"` - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringOutput `pulumi:"region"` + Project pulumi.StringOutput `pulumi:"project"` + Region pulumi.StringOutput `pulumi:"region"` // The role that should be applied. Only one // `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -212,12 +208,8 @@ type clusterIAMBindingState struct { // (Computed) The etag of the clusters's IAM policy. Etag *string `pulumi:"etag"` Members []string `pulumi:"members"` - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. - Project *string `pulumi:"project"` - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region *string `pulumi:"region"` + Project *string `pulumi:"project"` + Region *string `pulumi:"region"` // The role that should be applied. Only one // `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -231,12 +223,8 @@ type ClusterIAMBindingState struct { // (Computed) The etag of the clusters's IAM policy. Etag pulumi.StringPtrInput Members pulumi.StringArrayInput - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. Project pulumi.StringPtrInput - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringPtrInput + Region pulumi.StringPtrInput // The role that should be applied. Only one // `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -252,12 +240,8 @@ type clusterIAMBindingArgs struct { Cluster string `pulumi:"cluster"` Condition *ClusterIAMBindingCondition `pulumi:"condition"` Members []string `pulumi:"members"` - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. - Project *string `pulumi:"project"` - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region *string `pulumi:"region"` + Project *string `pulumi:"project"` + Region *string `pulumi:"region"` // The role that should be applied. Only one // `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -270,12 +254,8 @@ type ClusterIAMBindingArgs struct { Cluster pulumi.StringInput Condition ClusterIAMBindingConditionPtrInput Members pulumi.StringArrayInput - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. - Project pulumi.StringPtrInput - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringPtrInput + Project pulumi.StringPtrInput + Region pulumi.StringPtrInput // The role that should be applied. Only one // `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -387,14 +367,10 @@ func (o ClusterIAMBindingOutput) Members() pulumi.StringArrayOutput { return o.ApplyT(func(v *ClusterIAMBinding) pulumi.StringArrayOutput { return v.Members }).(pulumi.StringArrayOutput) } -// The project in which the cluster belongs. If it -// is not provided, the provider will use a default. func (o ClusterIAMBindingOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *ClusterIAMBinding) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } -// The region in which the cluster belongs. If it -// is not provided, the provider will use a default. func (o ClusterIAMBindingOutput) Region() pulumi.StringOutput { return o.ApplyT(func(v *ClusterIAMBinding) pulumi.StringOutput { return v.Region }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/dataproc/clusterIAMMember.go b/sdk/go/gcp/dataproc/clusterIAMMember.go index f1a53c28c2..41706b8c4e 100644 --- a/sdk/go/gcp/dataproc/clusterIAMMember.go +++ b/sdk/go/gcp/dataproc/clusterIAMMember.go @@ -154,14 +154,10 @@ type ClusterIAMMember struct { Cluster pulumi.StringOutput `pulumi:"cluster"` Condition ClusterIAMMemberConditionPtrOutput `pulumi:"condition"` // (Computed) The etag of the clusters's IAM policy. - Etag pulumi.StringOutput `pulumi:"etag"` - Member pulumi.StringOutput `pulumi:"member"` - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. + Etag pulumi.StringOutput `pulumi:"etag"` + Member pulumi.StringOutput `pulumi:"member"` Project pulumi.StringOutput `pulumi:"project"` - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringOutput `pulumi:"region"` + Region pulumi.StringOutput `pulumi:"region"` // The role that should be applied. Only one // `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -210,14 +206,10 @@ type clusterIAMMemberState struct { Cluster *string `pulumi:"cluster"` Condition *ClusterIAMMemberCondition `pulumi:"condition"` // (Computed) The etag of the clusters's IAM policy. - Etag *string `pulumi:"etag"` - Member *string `pulumi:"member"` - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. + Etag *string `pulumi:"etag"` + Member *string `pulumi:"member"` Project *string `pulumi:"project"` - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region *string `pulumi:"region"` + Region *string `pulumi:"region"` // The role that should be applied. Only one // `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -229,14 +221,10 @@ type ClusterIAMMemberState struct { Cluster pulumi.StringPtrInput Condition ClusterIAMMemberConditionPtrInput // (Computed) The etag of the clusters's IAM policy. - Etag pulumi.StringPtrInput - Member pulumi.StringPtrInput - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. + Etag pulumi.StringPtrInput + Member pulumi.StringPtrInput Project pulumi.StringPtrInput - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringPtrInput + Region pulumi.StringPtrInput // The role that should be applied. Only one // `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -252,12 +240,8 @@ type clusterIAMMemberArgs struct { Cluster string `pulumi:"cluster"` Condition *ClusterIAMMemberCondition `pulumi:"condition"` Member string `pulumi:"member"` - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. - Project *string `pulumi:"project"` - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region *string `pulumi:"region"` + Project *string `pulumi:"project"` + Region *string `pulumi:"region"` // The role that should be applied. Only one // `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -270,12 +254,8 @@ type ClusterIAMMemberArgs struct { Cluster pulumi.StringInput Condition ClusterIAMMemberConditionPtrInput Member pulumi.StringInput - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. - Project pulumi.StringPtrInput - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringPtrInput + Project pulumi.StringPtrInput + Region pulumi.StringPtrInput // The role that should be applied. Only one // `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -387,14 +367,10 @@ func (o ClusterIAMMemberOutput) Member() pulumi.StringOutput { return o.ApplyT(func(v *ClusterIAMMember) pulumi.StringOutput { return v.Member }).(pulumi.StringOutput) } -// The project in which the cluster belongs. If it -// is not provided, the provider will use a default. func (o ClusterIAMMemberOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *ClusterIAMMember) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } -// The region in which the cluster belongs. If it -// is not provided, the provider will use a default. func (o ClusterIAMMemberOutput) Region() pulumi.StringOutput { return o.ApplyT(func(v *ClusterIAMMember) pulumi.StringOutput { return v.Region }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/dataproc/clusterIAMPolicy.go b/sdk/go/gcp/dataproc/clusterIAMPolicy.go index 83660ea436..7c67c6f040 100644 --- a/sdk/go/gcp/dataproc/clusterIAMPolicy.go +++ b/sdk/go/gcp/dataproc/clusterIAMPolicy.go @@ -156,12 +156,8 @@ type ClusterIAMPolicy struct { Etag pulumi.StringOutput `pulumi:"etag"` // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData pulumi.StringOutput `pulumi:"policyData"` - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. - Project pulumi.StringOutput `pulumi:"project"` - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringOutput `pulumi:"region"` + Project pulumi.StringOutput `pulumi:"project"` + Region pulumi.StringOutput `pulumi:"region"` } // NewClusterIAMPolicy registers a new resource with the given unique name, arguments, and options. @@ -205,12 +201,8 @@ type clusterIAMPolicyState struct { Etag *string `pulumi:"etag"` // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData *string `pulumi:"policyData"` - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. - Project *string `pulumi:"project"` - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region *string `pulumi:"region"` + Project *string `pulumi:"project"` + Region *string `pulumi:"region"` } type ClusterIAMPolicyState struct { @@ -220,12 +212,8 @@ type ClusterIAMPolicyState struct { Etag pulumi.StringPtrInput // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData pulumi.StringPtrInput - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. - Project pulumi.StringPtrInput - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringPtrInput + Project pulumi.StringPtrInput + Region pulumi.StringPtrInput } func (ClusterIAMPolicyState) ElementType() reflect.Type { @@ -236,13 +224,9 @@ type clusterIAMPolicyArgs struct { // The name or relative resource id of the cluster to manage IAM policies for. Cluster string `pulumi:"cluster"` // The policy data generated by a `organizations.getIAMPolicy` data source. - PolicyData string `pulumi:"policyData"` - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. - Project *string `pulumi:"project"` - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region *string `pulumi:"region"` + PolicyData string `pulumi:"policyData"` + Project *string `pulumi:"project"` + Region *string `pulumi:"region"` } // The set of arguments for constructing a ClusterIAMPolicy resource. @@ -251,12 +235,8 @@ type ClusterIAMPolicyArgs struct { Cluster pulumi.StringInput // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData pulumi.StringInput - // The project in which the cluster belongs. If it - // is not provided, the provider will use a default. - Project pulumi.StringPtrInput - // The region in which the cluster belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringPtrInput + Project pulumi.StringPtrInput + Region pulumi.StringPtrInput } func (ClusterIAMPolicyArgs) ElementType() reflect.Type { @@ -361,14 +341,10 @@ func (o ClusterIAMPolicyOutput) PolicyData() pulumi.StringOutput { return o.ApplyT(func(v *ClusterIAMPolicy) pulumi.StringOutput { return v.PolicyData }).(pulumi.StringOutput) } -// The project in which the cluster belongs. If it -// is not provided, the provider will use a default. func (o ClusterIAMPolicyOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *ClusterIAMPolicy) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } -// The region in which the cluster belongs. If it -// is not provided, the provider will use a default. func (o ClusterIAMPolicyOutput) Region() pulumi.StringOutput { return o.ApplyT(func(v *ClusterIAMPolicy) pulumi.StringOutput { return v.Region }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/dataproc/jobIAMBinding.go b/sdk/go/gcp/dataproc/jobIAMBinding.go index 5b1d2031bd..1f033bf160 100644 --- a/sdk/go/gcp/dataproc/jobIAMBinding.go +++ b/sdk/go/gcp/dataproc/jobIAMBinding.go @@ -155,12 +155,8 @@ type JobIAMBinding struct { Etag pulumi.StringOutput `pulumi:"etag"` JobId pulumi.StringOutput `pulumi:"jobId"` Members pulumi.StringArrayOutput `pulumi:"members"` - // The project in which the job belongs. If it - // is not provided, the provider will use a default. - Project pulumi.StringOutput `pulumi:"project"` - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringOutput `pulumi:"region"` + Project pulumi.StringOutput `pulumi:"project"` + Region pulumi.StringOutput `pulumi:"region"` // The role that should be applied. Only one // `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -210,12 +206,8 @@ type jobIAMBindingState struct { Etag *string `pulumi:"etag"` JobId *string `pulumi:"jobId"` Members []string `pulumi:"members"` - // The project in which the job belongs. If it - // is not provided, the provider will use a default. - Project *string `pulumi:"project"` - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region *string `pulumi:"region"` + Project *string `pulumi:"project"` + Region *string `pulumi:"region"` // The role that should be applied. Only one // `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -228,12 +220,8 @@ type JobIAMBindingState struct { Etag pulumi.StringPtrInput JobId pulumi.StringPtrInput Members pulumi.StringArrayInput - // The project in which the job belongs. If it - // is not provided, the provider will use a default. Project pulumi.StringPtrInput - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringPtrInput + Region pulumi.StringPtrInput // The role that should be applied. Only one // `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -248,12 +236,8 @@ type jobIAMBindingArgs struct { Condition *JobIAMBindingCondition `pulumi:"condition"` JobId string `pulumi:"jobId"` Members []string `pulumi:"members"` - // The project in which the job belongs. If it - // is not provided, the provider will use a default. - Project *string `pulumi:"project"` - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region *string `pulumi:"region"` + Project *string `pulumi:"project"` + Region *string `pulumi:"region"` // The role that should be applied. Only one // `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -265,12 +249,8 @@ type JobIAMBindingArgs struct { Condition JobIAMBindingConditionPtrInput JobId pulumi.StringInput Members pulumi.StringArrayInput - // The project in which the job belongs. If it - // is not provided, the provider will use a default. - Project pulumi.StringPtrInput - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringPtrInput + Project pulumi.StringPtrInput + Region pulumi.StringPtrInput // The role that should be applied. Only one // `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -381,14 +361,10 @@ func (o JobIAMBindingOutput) Members() pulumi.StringArrayOutput { return o.ApplyT(func(v *JobIAMBinding) pulumi.StringArrayOutput { return v.Members }).(pulumi.StringArrayOutput) } -// The project in which the job belongs. If it -// is not provided, the provider will use a default. func (o JobIAMBindingOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *JobIAMBinding) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } -// The region in which the job belongs. If it -// is not provided, the provider will use a default. func (o JobIAMBindingOutput) Region() pulumi.StringOutput { return o.ApplyT(func(v *JobIAMBinding) pulumi.StringOutput { return v.Region }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/dataproc/jobIAMMember.go b/sdk/go/gcp/dataproc/jobIAMMember.go index 003112289b..9604faf977 100644 --- a/sdk/go/gcp/dataproc/jobIAMMember.go +++ b/sdk/go/gcp/dataproc/jobIAMMember.go @@ -152,15 +152,11 @@ type JobIAMMember struct { Condition JobIAMMemberConditionPtrOutput `pulumi:"condition"` // (Computed) The etag of the jobs's IAM policy. - Etag pulumi.StringOutput `pulumi:"etag"` - JobId pulumi.StringOutput `pulumi:"jobId"` - Member pulumi.StringOutput `pulumi:"member"` - // The project in which the job belongs. If it - // is not provided, the provider will use a default. + Etag pulumi.StringOutput `pulumi:"etag"` + JobId pulumi.StringOutput `pulumi:"jobId"` + Member pulumi.StringOutput `pulumi:"member"` Project pulumi.StringOutput `pulumi:"project"` - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringOutput `pulumi:"region"` + Region pulumi.StringOutput `pulumi:"region"` // The role that should be applied. Only one // `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -207,15 +203,11 @@ func GetJobIAMMember(ctx *pulumi.Context, type jobIAMMemberState struct { Condition *JobIAMMemberCondition `pulumi:"condition"` // (Computed) The etag of the jobs's IAM policy. - Etag *string `pulumi:"etag"` - JobId *string `pulumi:"jobId"` - Member *string `pulumi:"member"` - // The project in which the job belongs. If it - // is not provided, the provider will use a default. + Etag *string `pulumi:"etag"` + JobId *string `pulumi:"jobId"` + Member *string `pulumi:"member"` Project *string `pulumi:"project"` - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region *string `pulumi:"region"` + Region *string `pulumi:"region"` // The role that should be applied. Only one // `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -225,15 +217,11 @@ type jobIAMMemberState struct { type JobIAMMemberState struct { Condition JobIAMMemberConditionPtrInput // (Computed) The etag of the jobs's IAM policy. - Etag pulumi.StringPtrInput - JobId pulumi.StringPtrInput - Member pulumi.StringPtrInput - // The project in which the job belongs. If it - // is not provided, the provider will use a default. + Etag pulumi.StringPtrInput + JobId pulumi.StringPtrInput + Member pulumi.StringPtrInput Project pulumi.StringPtrInput - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringPtrInput + Region pulumi.StringPtrInput // The role that should be applied. Only one // `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -248,12 +236,8 @@ type jobIAMMemberArgs struct { Condition *JobIAMMemberCondition `pulumi:"condition"` JobId string `pulumi:"jobId"` Member string `pulumi:"member"` - // The project in which the job belongs. If it - // is not provided, the provider will use a default. - Project *string `pulumi:"project"` - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region *string `pulumi:"region"` + Project *string `pulumi:"project"` + Region *string `pulumi:"region"` // The role that should be applied. Only one // `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -265,12 +249,8 @@ type JobIAMMemberArgs struct { Condition JobIAMMemberConditionPtrInput JobId pulumi.StringInput Member pulumi.StringInput - // The project in which the job belongs. If it - // is not provided, the provider will use a default. - Project pulumi.StringPtrInput - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringPtrInput + Project pulumi.StringPtrInput + Region pulumi.StringPtrInput // The role that should be applied. Only one // `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format // `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -381,14 +361,10 @@ func (o JobIAMMemberOutput) Member() pulumi.StringOutput { return o.ApplyT(func(v *JobIAMMember) pulumi.StringOutput { return v.Member }).(pulumi.StringOutput) } -// The project in which the job belongs. If it -// is not provided, the provider will use a default. func (o JobIAMMemberOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *JobIAMMember) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } -// The region in which the job belongs. If it -// is not provided, the provider will use a default. func (o JobIAMMemberOutput) Region() pulumi.StringOutput { return o.ApplyT(func(v *JobIAMMember) pulumi.StringOutput { return v.Region }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/dataproc/jobIAMPolicy.go b/sdk/go/gcp/dataproc/jobIAMPolicy.go index 091e8571fa..57834faad4 100644 --- a/sdk/go/gcp/dataproc/jobIAMPolicy.go +++ b/sdk/go/gcp/dataproc/jobIAMPolicy.go @@ -155,12 +155,8 @@ type JobIAMPolicy struct { JobId pulumi.StringOutput `pulumi:"jobId"` // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData pulumi.StringOutput `pulumi:"policyData"` - // The project in which the job belongs. If it - // is not provided, the provider will use a default. - Project pulumi.StringOutput `pulumi:"project"` - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringOutput `pulumi:"region"` + Project pulumi.StringOutput `pulumi:"project"` + Region pulumi.StringOutput `pulumi:"region"` } // NewJobIAMPolicy registers a new resource with the given unique name, arguments, and options. @@ -203,12 +199,8 @@ type jobIAMPolicyState struct { JobId *string `pulumi:"jobId"` // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData *string `pulumi:"policyData"` - // The project in which the job belongs. If it - // is not provided, the provider will use a default. - Project *string `pulumi:"project"` - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region *string `pulumi:"region"` + Project *string `pulumi:"project"` + Region *string `pulumi:"region"` } type JobIAMPolicyState struct { @@ -217,12 +209,8 @@ type JobIAMPolicyState struct { JobId pulumi.StringPtrInput // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData pulumi.StringPtrInput - // The project in which the job belongs. If it - // is not provided, the provider will use a default. - Project pulumi.StringPtrInput - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringPtrInput + Project pulumi.StringPtrInput + Region pulumi.StringPtrInput } func (JobIAMPolicyState) ElementType() reflect.Type { @@ -232,13 +220,9 @@ func (JobIAMPolicyState) ElementType() reflect.Type { type jobIAMPolicyArgs struct { JobId string `pulumi:"jobId"` // The policy data generated by a `organizations.getIAMPolicy` data source. - PolicyData string `pulumi:"policyData"` - // The project in which the job belongs. If it - // is not provided, the provider will use a default. - Project *string `pulumi:"project"` - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region *string `pulumi:"region"` + PolicyData string `pulumi:"policyData"` + Project *string `pulumi:"project"` + Region *string `pulumi:"region"` } // The set of arguments for constructing a JobIAMPolicy resource. @@ -246,12 +230,8 @@ type JobIAMPolicyArgs struct { JobId pulumi.StringInput // The policy data generated by a `organizations.getIAMPolicy` data source. PolicyData pulumi.StringInput - // The project in which the job belongs. If it - // is not provided, the provider will use a default. - Project pulumi.StringPtrInput - // The region in which the job belongs. If it - // is not provided, the provider will use a default. - Region pulumi.StringPtrInput + Project pulumi.StringPtrInput + Region pulumi.StringPtrInput } func (JobIAMPolicyArgs) ElementType() reflect.Type { @@ -355,14 +335,10 @@ func (o JobIAMPolicyOutput) PolicyData() pulumi.StringOutput { return o.ApplyT(func(v *JobIAMPolicy) pulumi.StringOutput { return v.PolicyData }).(pulumi.StringOutput) } -// The project in which the job belongs. If it -// is not provided, the provider will use a default. func (o JobIAMPolicyOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *JobIAMPolicy) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } -// The region in which the job belongs. If it -// is not provided, the provider will use a default. func (o JobIAMPolicyOutput) Region() pulumi.StringOutput { return o.ApplyT(func(v *JobIAMPolicy) pulumi.StringOutput { return v.Region }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/dataproc/pulumiTypes.go b/sdk/go/gcp/dataproc/pulumiTypes.go index dfa2837ae0..2e0009291e 100644 --- a/sdk/go/gcp/dataproc/pulumiTypes.go +++ b/sdk/go/gcp/dataproc/pulumiTypes.go @@ -2466,6 +2466,10 @@ type ClusterClusterConfigGceClusterConfig struct { // network to the cluster will be part of. Conflicts with `subnetwork`. // If neither is specified, this defaults to the "default" network. Network *string `pulumi:"network"` + // Node Group Affinity for sole-tenant clusters. + NodeGroupAffinity *ClusterClusterConfigGceClusterConfigNodeGroupAffinity `pulumi:"nodeGroupAffinity"` + // Reservation Affinity for consuming zonal reservation. + ReservationAffinity *ClusterClusterConfigGceClusterConfigReservationAffinity `pulumi:"reservationAffinity"` // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. ServiceAccount *string `pulumi:"serviceAccount"` @@ -2518,6 +2522,10 @@ type ClusterClusterConfigGceClusterConfigArgs struct { // network to the cluster will be part of. Conflicts with `subnetwork`. // If neither is specified, this defaults to the "default" network. Network pulumi.StringPtrInput `pulumi:"network"` + // Node Group Affinity for sole-tenant clusters. + NodeGroupAffinity ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrInput `pulumi:"nodeGroupAffinity"` + // Reservation Affinity for consuming zonal reservation. + ReservationAffinity ClusterClusterConfigGceClusterConfigReservationAffinityPtrInput `pulumi:"reservationAffinity"` // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. ServiceAccount pulumi.StringPtrInput `pulumi:"serviceAccount"` @@ -2644,6 +2652,20 @@ func (o ClusterClusterConfigGceClusterConfigOutput) Network() pulumi.StringPtrOu return o.ApplyT(func(v ClusterClusterConfigGceClusterConfig) *string { return v.Network }).(pulumi.StringPtrOutput) } +// Node Group Affinity for sole-tenant clusters. +func (o ClusterClusterConfigGceClusterConfigOutput) NodeGroupAffinity() ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput { + return o.ApplyT(func(v ClusterClusterConfigGceClusterConfig) *ClusterClusterConfigGceClusterConfigNodeGroupAffinity { + return v.NodeGroupAffinity + }).(ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput) +} + +// Reservation Affinity for consuming zonal reservation. +func (o ClusterClusterConfigGceClusterConfigOutput) ReservationAffinity() ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput { + return o.ApplyT(func(v ClusterClusterConfigGceClusterConfig) *ClusterClusterConfigGceClusterConfigReservationAffinity { + return v.ReservationAffinity + }).(ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput) +} + // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. func (o ClusterClusterConfigGceClusterConfigOutput) ServiceAccount() pulumi.StringPtrOutput { @@ -2750,6 +2772,26 @@ func (o ClusterClusterConfigGceClusterConfigPtrOutput) Network() pulumi.StringPt }).(pulumi.StringPtrOutput) } +// Node Group Affinity for sole-tenant clusters. +func (o ClusterClusterConfigGceClusterConfigPtrOutput) NodeGroupAffinity() ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput { + return o.ApplyT(func(v *ClusterClusterConfigGceClusterConfig) *ClusterClusterConfigGceClusterConfigNodeGroupAffinity { + if v == nil { + return nil + } + return v.NodeGroupAffinity + }).(ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput) +} + +// Reservation Affinity for consuming zonal reservation. +func (o ClusterClusterConfigGceClusterConfigPtrOutput) ReservationAffinity() ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput { + return o.ApplyT(func(v *ClusterClusterConfigGceClusterConfig) *ClusterClusterConfigGceClusterConfigReservationAffinity { + if v == nil { + return nil + } + return v.ReservationAffinity + }).(ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput) +} + // The service account to be used by the Node VMs. // If not specified, the "default" service account is used. func (o ClusterClusterConfigGceClusterConfigPtrOutput) ServiceAccount() pulumi.StringPtrOutput { @@ -2823,6 +2865,320 @@ func (o ClusterClusterConfigGceClusterConfigPtrOutput) Zone() pulumi.StringPtrOu }).(pulumi.StringPtrOutput) } +type ClusterClusterConfigGceClusterConfigNodeGroupAffinity struct { + // The URI of a sole-tenant node group resource that the cluster will be created on. + NodeGroupUri string `pulumi:"nodeGroupUri"` +} + +// ClusterClusterConfigGceClusterConfigNodeGroupAffinityInput is an input type that accepts ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs and ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput values. +// You can construct a concrete instance of `ClusterClusterConfigGceClusterConfigNodeGroupAffinityInput` via: +// +// ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs{...} +type ClusterClusterConfigGceClusterConfigNodeGroupAffinityInput interface { + pulumi.Input + + ToClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput() ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput + ToClusterClusterConfigGceClusterConfigNodeGroupAffinityOutputWithContext(context.Context) ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput +} + +type ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs struct { + // The URI of a sole-tenant node group resource that the cluster will be created on. + NodeGroupUri pulumi.StringInput `pulumi:"nodeGroupUri"` +} + +func (ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterClusterConfigGceClusterConfigNodeGroupAffinity)(nil)).Elem() +} + +func (i ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs) ToClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput() ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput { + return i.ToClusterClusterConfigGceClusterConfigNodeGroupAffinityOutputWithContext(context.Background()) +} + +func (i ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs) ToClusterClusterConfigGceClusterConfigNodeGroupAffinityOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput) +} + +func (i ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs) ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput() ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput { + return i.ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutputWithContext(context.Background()) +} + +func (i ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs) ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput).ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutputWithContext(ctx) +} + +// ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrInput is an input type that accepts ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs, ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtr and ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput values. +// You can construct a concrete instance of `ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrInput` via: +// +// ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs{...} +// +// or: +// +// nil +type ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrInput interface { + pulumi.Input + + ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput() ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput + ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutputWithContext(context.Context) ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput +} + +type clusterClusterConfigGceClusterConfigNodeGroupAffinityPtrType ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs + +func ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtr(v *ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs) ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrInput { + return (*clusterClusterConfigGceClusterConfigNodeGroupAffinityPtrType)(v) +} + +func (*clusterClusterConfigGceClusterConfigNodeGroupAffinityPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterClusterConfigGceClusterConfigNodeGroupAffinity)(nil)).Elem() +} + +func (i *clusterClusterConfigGceClusterConfigNodeGroupAffinityPtrType) ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput() ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput { + return i.ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutputWithContext(context.Background()) +} + +func (i *clusterClusterConfigGceClusterConfigNodeGroupAffinityPtrType) ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput) +} + +type ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput struct{ *pulumi.OutputState } + +func (ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterClusterConfigGceClusterConfigNodeGroupAffinity)(nil)).Elem() +} + +func (o ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput) ToClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput() ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput { + return o +} + +func (o ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput) ToClusterClusterConfigGceClusterConfigNodeGroupAffinityOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput { + return o +} + +func (o ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput) ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput() ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput { + return o.ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutputWithContext(context.Background()) +} + +func (o ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput) ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClusterClusterConfigGceClusterConfigNodeGroupAffinity) *ClusterClusterConfigGceClusterConfigNodeGroupAffinity { + return &v + }).(ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput) +} + +// The URI of a sole-tenant node group resource that the cluster will be created on. +func (o ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput) NodeGroupUri() pulumi.StringOutput { + return o.ApplyT(func(v ClusterClusterConfigGceClusterConfigNodeGroupAffinity) string { return v.NodeGroupUri }).(pulumi.StringOutput) +} + +type ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput struct{ *pulumi.OutputState } + +func (ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterClusterConfigGceClusterConfigNodeGroupAffinity)(nil)).Elem() +} + +func (o ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput) ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput() ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput { + return o +} + +func (o ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput) ToClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput { + return o +} + +func (o ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput) Elem() ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput { + return o.ApplyT(func(v *ClusterClusterConfigGceClusterConfigNodeGroupAffinity) ClusterClusterConfigGceClusterConfigNodeGroupAffinity { + if v != nil { + return *v + } + var ret ClusterClusterConfigGceClusterConfigNodeGroupAffinity + return ret + }).(ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput) +} + +// The URI of a sole-tenant node group resource that the cluster will be created on. +func (o ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput) NodeGroupUri() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterClusterConfigGceClusterConfigNodeGroupAffinity) *string { + if v == nil { + return nil + } + return &v.NodeGroupUri + }).(pulumi.StringPtrOutput) +} + +type ClusterClusterConfigGceClusterConfigReservationAffinity struct { + // Corresponds to the type of reservation consumption. + ConsumeReservationType *string `pulumi:"consumeReservationType"` + // Corresponds to the label key of reservation resource. + Key *string `pulumi:"key"` + // Corresponds to the label values of reservation resource. + Values []string `pulumi:"values"` +} + +// ClusterClusterConfigGceClusterConfigReservationAffinityInput is an input type that accepts ClusterClusterConfigGceClusterConfigReservationAffinityArgs and ClusterClusterConfigGceClusterConfigReservationAffinityOutput values. +// You can construct a concrete instance of `ClusterClusterConfigGceClusterConfigReservationAffinityInput` via: +// +// ClusterClusterConfigGceClusterConfigReservationAffinityArgs{...} +type ClusterClusterConfigGceClusterConfigReservationAffinityInput interface { + pulumi.Input + + ToClusterClusterConfigGceClusterConfigReservationAffinityOutput() ClusterClusterConfigGceClusterConfigReservationAffinityOutput + ToClusterClusterConfigGceClusterConfigReservationAffinityOutputWithContext(context.Context) ClusterClusterConfigGceClusterConfigReservationAffinityOutput +} + +type ClusterClusterConfigGceClusterConfigReservationAffinityArgs struct { + // Corresponds to the type of reservation consumption. + ConsumeReservationType pulumi.StringPtrInput `pulumi:"consumeReservationType"` + // Corresponds to the label key of reservation resource. + Key pulumi.StringPtrInput `pulumi:"key"` + // Corresponds to the label values of reservation resource. + Values pulumi.StringArrayInput `pulumi:"values"` +} + +func (ClusterClusterConfigGceClusterConfigReservationAffinityArgs) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterClusterConfigGceClusterConfigReservationAffinity)(nil)).Elem() +} + +func (i ClusterClusterConfigGceClusterConfigReservationAffinityArgs) ToClusterClusterConfigGceClusterConfigReservationAffinityOutput() ClusterClusterConfigGceClusterConfigReservationAffinityOutput { + return i.ToClusterClusterConfigGceClusterConfigReservationAffinityOutputWithContext(context.Background()) +} + +func (i ClusterClusterConfigGceClusterConfigReservationAffinityArgs) ToClusterClusterConfigGceClusterConfigReservationAffinityOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigReservationAffinityOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterClusterConfigGceClusterConfigReservationAffinityOutput) +} + +func (i ClusterClusterConfigGceClusterConfigReservationAffinityArgs) ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput() ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput { + return i.ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutputWithContext(context.Background()) +} + +func (i ClusterClusterConfigGceClusterConfigReservationAffinityArgs) ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterClusterConfigGceClusterConfigReservationAffinityOutput).ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutputWithContext(ctx) +} + +// ClusterClusterConfigGceClusterConfigReservationAffinityPtrInput is an input type that accepts ClusterClusterConfigGceClusterConfigReservationAffinityArgs, ClusterClusterConfigGceClusterConfigReservationAffinityPtr and ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput values. +// You can construct a concrete instance of `ClusterClusterConfigGceClusterConfigReservationAffinityPtrInput` via: +// +// ClusterClusterConfigGceClusterConfigReservationAffinityArgs{...} +// +// or: +// +// nil +type ClusterClusterConfigGceClusterConfigReservationAffinityPtrInput interface { + pulumi.Input + + ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput() ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput + ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutputWithContext(context.Context) ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput +} + +type clusterClusterConfigGceClusterConfigReservationAffinityPtrType ClusterClusterConfigGceClusterConfigReservationAffinityArgs + +func ClusterClusterConfigGceClusterConfigReservationAffinityPtr(v *ClusterClusterConfigGceClusterConfigReservationAffinityArgs) ClusterClusterConfigGceClusterConfigReservationAffinityPtrInput { + return (*clusterClusterConfigGceClusterConfigReservationAffinityPtrType)(v) +} + +func (*clusterClusterConfigGceClusterConfigReservationAffinityPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterClusterConfigGceClusterConfigReservationAffinity)(nil)).Elem() +} + +func (i *clusterClusterConfigGceClusterConfigReservationAffinityPtrType) ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput() ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput { + return i.ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutputWithContext(context.Background()) +} + +func (i *clusterClusterConfigGceClusterConfigReservationAffinityPtrType) ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput) +} + +type ClusterClusterConfigGceClusterConfigReservationAffinityOutput struct{ *pulumi.OutputState } + +func (ClusterClusterConfigGceClusterConfigReservationAffinityOutput) ElementType() reflect.Type { + return reflect.TypeOf((*ClusterClusterConfigGceClusterConfigReservationAffinity)(nil)).Elem() +} + +func (o ClusterClusterConfigGceClusterConfigReservationAffinityOutput) ToClusterClusterConfigGceClusterConfigReservationAffinityOutput() ClusterClusterConfigGceClusterConfigReservationAffinityOutput { + return o +} + +func (o ClusterClusterConfigGceClusterConfigReservationAffinityOutput) ToClusterClusterConfigGceClusterConfigReservationAffinityOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigReservationAffinityOutput { + return o +} + +func (o ClusterClusterConfigGceClusterConfigReservationAffinityOutput) ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput() ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput { + return o.ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutputWithContext(context.Background()) +} + +func (o ClusterClusterConfigGceClusterConfigReservationAffinityOutput) ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v ClusterClusterConfigGceClusterConfigReservationAffinity) *ClusterClusterConfigGceClusterConfigReservationAffinity { + return &v + }).(ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput) +} + +// Corresponds to the type of reservation consumption. +func (o ClusterClusterConfigGceClusterConfigReservationAffinityOutput) ConsumeReservationType() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterClusterConfigGceClusterConfigReservationAffinity) *string { + return v.ConsumeReservationType + }).(pulumi.StringPtrOutput) +} + +// Corresponds to the label key of reservation resource. +func (o ClusterClusterConfigGceClusterConfigReservationAffinityOutput) Key() pulumi.StringPtrOutput { + return o.ApplyT(func(v ClusterClusterConfigGceClusterConfigReservationAffinity) *string { return v.Key }).(pulumi.StringPtrOutput) +} + +// Corresponds to the label values of reservation resource. +func (o ClusterClusterConfigGceClusterConfigReservationAffinityOutput) Values() pulumi.StringArrayOutput { + return o.ApplyT(func(v ClusterClusterConfigGceClusterConfigReservationAffinity) []string { return v.Values }).(pulumi.StringArrayOutput) +} + +type ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput struct{ *pulumi.OutputState } + +func (ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**ClusterClusterConfigGceClusterConfigReservationAffinity)(nil)).Elem() +} + +func (o ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput) ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput() ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput { + return o +} + +func (o ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput) ToClusterClusterConfigGceClusterConfigReservationAffinityPtrOutputWithContext(ctx context.Context) ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput { + return o +} + +func (o ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput) Elem() ClusterClusterConfigGceClusterConfigReservationAffinityOutput { + return o.ApplyT(func(v *ClusterClusterConfigGceClusterConfigReservationAffinity) ClusterClusterConfigGceClusterConfigReservationAffinity { + if v != nil { + return *v + } + var ret ClusterClusterConfigGceClusterConfigReservationAffinity + return ret + }).(ClusterClusterConfigGceClusterConfigReservationAffinityOutput) +} + +// Corresponds to the type of reservation consumption. +func (o ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput) ConsumeReservationType() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterClusterConfigGceClusterConfigReservationAffinity) *string { + if v == nil { + return nil + } + return v.ConsumeReservationType + }).(pulumi.StringPtrOutput) +} + +// Corresponds to the label key of reservation resource. +func (o ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput) Key() pulumi.StringPtrOutput { + return o.ApplyT(func(v *ClusterClusterConfigGceClusterConfigReservationAffinity) *string { + if v == nil { + return nil + } + return v.Key + }).(pulumi.StringPtrOutput) +} + +// Corresponds to the label values of reservation resource. +func (o ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput) Values() pulumi.StringArrayOutput { + return o.ApplyT(func(v *ClusterClusterConfigGceClusterConfigReservationAffinity) []string { + if v == nil { + return nil + } + return v.Values + }).(pulumi.StringArrayOutput) +} + type ClusterClusterConfigGceClusterConfigShieldedInstanceConfig struct { // Defines whether instances have integrity monitoring enabled. EnableIntegrityMonitoring *bool `pulumi:"enableIntegrityMonitoring"` @@ -4071,6 +4427,7 @@ type ClusterClusterConfigPreemptibleWorkerConfig struct { // * PREEMPTIBILITY_UNSPECIFIED // * NON_PREEMPTIBLE // * PREEMPTIBLE + // * SPOT Preemptibility *string `pulumi:"preemptibility"` } @@ -4097,6 +4454,7 @@ type ClusterClusterConfigPreemptibleWorkerConfigArgs struct { // * PREEMPTIBILITY_UNSPECIFIED // * NON_PREEMPTIBLE // * PREEMPTIBLE + // * SPOT Preemptibility pulumi.StringPtrInput `pulumi:"preemptibility"` } @@ -4199,6 +4557,7 @@ func (o ClusterClusterConfigPreemptibleWorkerConfigOutput) NumInstances() pulumi // * PREEMPTIBILITY_UNSPECIFIED // * NON_PREEMPTIBLE // * PREEMPTIBLE +// * SPOT func (o ClusterClusterConfigPreemptibleWorkerConfigOutput) Preemptibility() pulumi.StringPtrOutput { return o.ApplyT(func(v ClusterClusterConfigPreemptibleWorkerConfig) *string { return v.Preemptibility }).(pulumi.StringPtrOutput) } @@ -4262,6 +4621,7 @@ func (o ClusterClusterConfigPreemptibleWorkerConfigPtrOutput) NumInstances() pul // * PREEMPTIBILITY_UNSPECIFIED // * NON_PREEMPTIBLE // * PREEMPTIBLE +// * SPOT func (o ClusterClusterConfigPreemptibleWorkerConfigPtrOutput) Preemptibility() pulumi.StringPtrOutput { return o.ApplyT(func(v *ClusterClusterConfigPreemptibleWorkerConfig) *string { if v == nil { @@ -24490,6 +24850,10 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigEndpointConfigPtrInput)(nil)).Elem(), ClusterClusterConfigEndpointConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigPtrInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigNodeGroupAffinityInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigReservationAffinityInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigReservationAffinityArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigReservationAffinityPtrInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigReservationAffinityArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigShieldedInstanceConfigInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigShieldedInstanceConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigGceClusterConfigShieldedInstanceConfigPtrInput)(nil)).Elem(), ClusterClusterConfigGceClusterConfigShieldedInstanceConfigArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*ClusterClusterConfigInitializationActionInput)(nil)).Elem(), ClusterClusterConfigInitializationActionArgs{}) @@ -24754,6 +25118,10 @@ func init() { pulumi.RegisterOutputType(ClusterClusterConfigEndpointConfigPtrOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigPtrOutput{}) + pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigNodeGroupAffinityOutput{}) + pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigNodeGroupAffinityPtrOutput{}) + pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigReservationAffinityOutput{}) + pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigReservationAffinityPtrOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigShieldedInstanceConfigOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigGceClusterConfigShieldedInstanceConfigPtrOutput{}) pulumi.RegisterOutputType(ClusterClusterConfigInitializationActionOutput{}) diff --git a/sdk/go/gcp/datastream/pulumiTypes.go b/sdk/go/gcp/datastream/pulumiTypes.go index c08622ac1a..f364423119 100644 --- a/sdk/go/gcp/datastream/pulumiTypes.go +++ b/sdk/go/gcp/datastream/pulumiTypes.go @@ -3310,6 +3310,11 @@ type StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsData // If supplied, every created dataset will have its name prefixed by the provided value. // The prefix and name will be separated by an underscore. i.e. _. DatasetIdPrefix *string `pulumi:"datasetIdPrefix"` + // Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + // table. The BigQuery Service Account associated with your project requires access to this + // encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + // See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + KmsKeyName *string `pulumi:"kmsKeyName"` // The geographic location where the dataset should reside. // See https://cloud.google.com/bigquery/docs/locations for supported locations. Location string `pulumi:"location"` @@ -3330,6 +3335,11 @@ type StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsData // If supplied, every created dataset will have its name prefixed by the provided value. // The prefix and name will be separated by an underscore. i.e. _. DatasetIdPrefix pulumi.StringPtrInput `pulumi:"datasetIdPrefix"` + // Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + // table. The BigQuery Service Account associated with your project requires access to this + // encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + // See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + KmsKeyName pulumi.StringPtrInput `pulumi:"kmsKeyName"` // The geographic location where the dataset should reside. // See https://cloud.google.com/bigquery/docs/locations for supported locations. Location pulumi.StringInput `pulumi:"location"` @@ -3420,6 +3430,16 @@ func (o StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsD }).(pulumi.StringPtrOutput) } +// Describes the Cloud KMS encryption key that will be used to protect destination BigQuery +// table. The BigQuery Service Account associated with your project requires access to this +// encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. +// See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. +func (o StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateOutput) KmsKeyName() pulumi.StringPtrOutput { + return o.ApplyT(func(v StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate) *string { + return v.KmsKeyName + }).(pulumi.StringPtrOutput) +} + // The geographic location where the dataset should reside. // See https://cloud.google.com/bigquery/docs/locations for supported locations. func (o StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateOutput) Location() pulumi.StringOutput { @@ -3463,6 +3483,19 @@ func (o StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsD }).(pulumi.StringPtrOutput) } +// Describes the Cloud KMS encryption key that will be used to protect destination BigQuery +// table. The BigQuery Service Account associated with your project requires access to this +// encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. +// See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. +func (o StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplatePtrOutput) KmsKeyName() pulumi.StringPtrOutput { + return o.ApplyT(func(v *StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate) *string { + if v == nil { + return nil + } + return v.KmsKeyName + }).(pulumi.StringPtrOutput) +} + // The geographic location where the dataset should reside. // See https://cloud.google.com/bigquery/docs/locations for supported locations. func (o StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplatePtrOutput) Location() pulumi.StringPtrOutput { diff --git a/sdk/go/gcp/datastream/stream.go b/sdk/go/gcp/datastream/stream.go index bc25bb257b..10c2919eec 100644 --- a/sdk/go/gcp/datastream/stream.go +++ b/sdk/go/gcp/datastream/stream.go @@ -30,6 +30,7 @@ import ( // "fmt" // // "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datastream" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" // "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" // "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/sql" // "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/storage" @@ -143,6 +144,14 @@ import ( // if err != nil { // return err // } +// keyUser, err := kms.NewCryptoKeyIAMMember(ctx, "keyUser", &kms.CryptoKeyIAMMemberArgs{ +// CryptoKeyId: pulumi.String("kms-name"), +// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypterDecrypter"), +// Member: pulumi.String(fmt.Sprintf("serviceAccount:service-%v@gcp-sa-datastream.iam.gserviceaccount.com", project.Number)), +// }) +// if err != nil { +// return err +// } // destinationConnectionProfile, err := datastream.NewConnectionProfile(ctx, "destinationConnectionProfile", &datastream.ConnectionProfileArgs{ // DisplayName: pulumi.String("Connection profile"), // Location: pulumi.String("us-central1"), @@ -249,10 +258,158 @@ import ( // }, // }, // }, +// CustomerManagedEncryptionKey: pulumi.String("kms-name"), +// }, pulumi.DependsOn([]pulumi.Resource{ +// keyUser, +// })) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Datastream Stream Bigquery +// +// ```go +// package main +// +// import ( +// +// "fmt" +// +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigquery" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/datastream" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/sql" +// "github.com/pulumi/pulumi-random/sdk/v4/go/random" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := organizations.LookupProject(ctx, nil, nil) +// if err != nil { +// return err +// } +// instance, err := sql.NewDatabaseInstance(ctx, "instance", &sql.DatabaseInstanceArgs{ +// DatabaseVersion: pulumi.String("MYSQL_8_0"), +// Region: pulumi.String("us-central1"), +// Settings: &sql.DatabaseInstanceSettingsArgs{ +// Tier: pulumi.String("db-f1-micro"), +// BackupConfiguration: &sql.DatabaseInstanceSettingsBackupConfigurationArgs{ +// Enabled: pulumi.Bool(true), +// BinaryLogEnabled: pulumi.Bool(true), +// }, +// IpConfiguration: &sql.DatabaseInstanceSettingsIpConfigurationArgs{ +// AuthorizedNetworks: sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArray{ +// &sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{ +// Value: pulumi.String("34.71.242.81"), +// }, +// &sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{ +// Value: pulumi.String("34.72.28.29"), +// }, +// &sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{ +// Value: pulumi.String("34.67.6.157"), +// }, +// &sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{ +// Value: pulumi.String("34.67.234.134"), +// }, +// &sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs{ +// Value: pulumi.String("34.72.239.218"), +// }, +// }, +// }, +// }, +// DeletionProtection: pulumi.Bool(true), // }) // if err != nil { // return err // } +// _, err = sql.NewDatabase(ctx, "db", &sql.DatabaseArgs{ +// Instance: instance.Name, +// }) +// if err != nil { +// return err +// } +// pwd, err := random.NewRandomPassword(ctx, "pwd", &random.RandomPasswordArgs{ +// Length: pulumi.Int(16), +// Special: pulumi.Bool(false), +// }) +// if err != nil { +// return err +// } +// user, err := sql.NewUser(ctx, "user", &sql.UserArgs{ +// Instance: instance.Name, +// Host: pulumi.String("%"), +// Password: pwd.Result, +// }) +// if err != nil { +// return err +// } +// sourceConnectionProfile, err := datastream.NewConnectionProfile(ctx, "sourceConnectionProfile", &datastream.ConnectionProfileArgs{ +// DisplayName: pulumi.String("Source connection profile"), +// Location: pulumi.String("us-central1"), +// ConnectionProfileId: pulumi.String("source-profile"), +// MysqlProfile: &datastream.ConnectionProfileMysqlProfileArgs{ +// Hostname: instance.PublicIpAddress, +// Username: user.Name, +// Password: user.Password, +// }, +// }) +// if err != nil { +// return err +// } +// bqSa, err := bigquery.GetDefaultServiceAccount(ctx, nil, nil) +// if err != nil { +// return err +// } +// bigqueryKeyUser, err := kms.NewCryptoKeyIAMMember(ctx, "bigqueryKeyUser", &kms.CryptoKeyIAMMemberArgs{ +// CryptoKeyId: pulumi.String("bigquery-kms-name"), +// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypterDecrypter"), +// Member: pulumi.String(fmt.Sprintf("serviceAccount:%v", bqSa.Email)), +// }) +// if err != nil { +// return err +// } +// destinationConnectionProfile, err := datastream.NewConnectionProfile(ctx, "destinationConnectionProfile", &datastream.ConnectionProfileArgs{ +// DisplayName: pulumi.String("Connection profile"), +// Location: pulumi.String("us-central1"), +// ConnectionProfileId: pulumi.String("destination-profile"), +// BigqueryProfile: nil, +// }) +// if err != nil { +// return err +// } +// _, err = datastream.NewStream(ctx, "default", &datastream.StreamArgs{ +// StreamId: pulumi.String("my-stream"), +// Location: pulumi.String("us-central1"), +// DisplayName: pulumi.String("my stream"), +// SourceConfig: &datastream.StreamSourceConfigArgs{ +// SourceConnectionProfile: sourceConnectionProfile.ID(), +// MysqlSourceConfig: nil, +// }, +// DestinationConfig: &datastream.StreamDestinationConfigArgs{ +// DestinationConnectionProfile: destinationConnectionProfile.ID(), +// BigqueryDestinationConfig: &datastream.StreamDestinationConfigBigqueryDestinationConfigArgs{ +// SourceHierarchyDatasets: &datastream.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsArgs{ +// DatasetTemplate: &datastream.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs{ +// Location: pulumi.String("us-central1"), +// KmsKeyName: pulumi.String("bigquery-kms-name"), +// }, +// }, +// }, +// }, +// BackfillNone: nil, +// }, pulumi.DependsOn([]pulumi.Resource{ +// bigqueryKeyUser, +// })) +// if err != nil { +// return err +// } // return nil // }) // } @@ -288,6 +445,9 @@ type Stream struct { BackfillAll StreamBackfillAllPtrOutput `pulumi:"backfillAll"` // Backfill strategy to disable automatic backfill for the Stream's objects. BackfillNone StreamBackfillNonePtrOutput `pulumi:"backfillNone"` + // A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + // will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + CustomerManagedEncryptionKey pulumi.StringPtrOutput `pulumi:"customerManagedEncryptionKey"` // Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. DesiredState pulumi.StringPtrOutput `pulumi:"desiredState"` // Destination connection profile configuration. @@ -362,6 +522,9 @@ type streamState struct { BackfillAll *StreamBackfillAll `pulumi:"backfillAll"` // Backfill strategy to disable automatic backfill for the Stream's objects. BackfillNone *StreamBackfillNone `pulumi:"backfillNone"` + // A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + // will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + CustomerManagedEncryptionKey *string `pulumi:"customerManagedEncryptionKey"` // Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. DesiredState *string `pulumi:"desiredState"` // Destination connection profile configuration. @@ -393,6 +556,9 @@ type StreamState struct { BackfillAll StreamBackfillAllPtrInput // Backfill strategy to disable automatic backfill for the Stream's objects. BackfillNone StreamBackfillNonePtrInput + // A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + // will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + CustomerManagedEncryptionKey pulumi.StringPtrInput // Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. DesiredState pulumi.StringPtrInput // Destination connection profile configuration. @@ -428,6 +594,9 @@ type streamArgs struct { BackfillAll *StreamBackfillAll `pulumi:"backfillAll"` // Backfill strategy to disable automatic backfill for the Stream's objects. BackfillNone *StreamBackfillNone `pulumi:"backfillNone"` + // A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + // will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + CustomerManagedEncryptionKey *string `pulumi:"customerManagedEncryptionKey"` // Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. DesiredState *string `pulumi:"desiredState"` // Destination connection profile configuration. @@ -456,6 +625,9 @@ type StreamArgs struct { BackfillAll StreamBackfillAllPtrInput // Backfill strategy to disable automatic backfill for the Stream's objects. BackfillNone StreamBackfillNonePtrInput + // A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + // will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + CustomerManagedEncryptionKey pulumi.StringPtrInput // Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. DesiredState pulumi.StringPtrInput // Destination connection profile configuration. @@ -575,6 +747,12 @@ func (o StreamOutput) BackfillNone() StreamBackfillNonePtrOutput { return o.ApplyT(func(v *Stream) StreamBackfillNonePtrOutput { return v.BackfillNone }).(StreamBackfillNonePtrOutput) } +// A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data +// will be encrypted using an internal Stream-specific encryption key provisioned through KMS. +func (o StreamOutput) CustomerManagedEncryptionKey() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Stream) pulumi.StringPtrOutput { return v.CustomerManagedEncryptionKey }).(pulumi.StringPtrOutput) +} + // Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. func (o StreamOutput) DesiredState() pulumi.StringPtrOutput { return o.ApplyT(func(v *Stream) pulumi.StringPtrOutput { return v.DesiredState }).(pulumi.StringPtrOutput) diff --git a/sdk/go/gcp/deploymentmanager/deployment.go b/sdk/go/gcp/deploymentmanager/deployment.go index 5390c7aeda..429ef3995f 100644 --- a/sdk/go/gcp/deploymentmanager/deployment.go +++ b/sdk/go/gcp/deploymentmanager/deployment.go @@ -11,20 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A collection of resources that are deployed and managed together using -// a configuration file -// -// > **Warning:** This resource is intended only to manage a Deployment resource, -// and attempts to manage the Deployment's resources in the provider as well -// will likely result in errors or unexpected behavior as the two tools -// fight over ownership. We strongly discourage doing so unless you are an -// experienced user of both tools. -// -// In addition, due to limitations of the API, the provider will treat -// deployments in preview as recreate-only for any update operation other -// than actually deploying an in-preview deployment (i.e. `preview=true` to -// `preview=false`). -// // ## Example Usage // ### Deployment Manager Deployment Basic // @@ -125,14 +111,10 @@ type Deployment struct { Manifest pulumi.StringOutput `pulumi:"manifest"` // Unique name for the deployment Name pulumi.StringOutput `pulumi:"name"` - // If set to true, a deployment is created with "shell" resources - // that are not actually instantiated. This allows you to preview a - // deployment. It can be updated to false to actually deploy - // with real resources. - // ~>**NOTE:** Deployment Manager does not allow update - // of a deployment in preview (unless updating to preview=false). Thus, - // the provider will force-recreate deployments if either preview is updated - // to true or if other fields are updated while preview is true. + // If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + // preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + // does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + // deployments if either preview is updated to true or if other fields are updated while preview is true. Preview pulumi.BoolPtrOutput `pulumi:"preview"` // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. @@ -206,14 +188,10 @@ type deploymentState struct { Manifest *string `pulumi:"manifest"` // Unique name for the deployment Name *string `pulumi:"name"` - // If set to true, a deployment is created with "shell" resources - // that are not actually instantiated. This allows you to preview a - // deployment. It can be updated to false to actually deploy - // with real resources. - // ~>**NOTE:** Deployment Manager does not allow update - // of a deployment in preview (unless updating to preview=false). Thus, - // the provider will force-recreate deployments if either preview is updated - // to true or if other fields are updated while preview is true. + // If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + // preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + // does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + // deployments if either preview is updated to true or if other fields are updated while preview is true. Preview *bool `pulumi:"preview"` // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. @@ -256,14 +234,10 @@ type DeploymentState struct { Manifest pulumi.StringPtrInput // Unique name for the deployment Name pulumi.StringPtrInput - // If set to true, a deployment is created with "shell" resources - // that are not actually instantiated. This allows you to preview a - // deployment. It can be updated to false to actually deploy - // with real resources. - // ~>**NOTE:** Deployment Manager does not allow update - // of a deployment in preview (unless updating to preview=false). Thus, - // the provider will force-recreate deployments if either preview is updated - // to true or if other fields are updated while preview is true. + // If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + // preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + // does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + // deployments if either preview is updated to true or if other fields are updated while preview is true. Preview pulumi.BoolPtrInput // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. @@ -305,14 +279,10 @@ type deploymentArgs struct { Labels []DeploymentLabel `pulumi:"labels"` // Unique name for the deployment Name *string `pulumi:"name"` - // If set to true, a deployment is created with "shell" resources - // that are not actually instantiated. This allows you to preview a - // deployment. It can be updated to false to actually deploy - // with real resources. - // ~>**NOTE:** Deployment Manager does not allow update - // of a deployment in preview (unless updating to preview=false). Thus, - // the provider will force-recreate deployments if either preview is updated - // to true or if other fields are updated while preview is true. + // If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + // preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + // does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + // deployments if either preview is updated to true or if other fields are updated while preview is true. Preview *bool `pulumi:"preview"` // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. @@ -349,14 +319,10 @@ type DeploymentArgs struct { Labels DeploymentLabelArrayInput // Unique name for the deployment Name pulumi.StringPtrInput - // If set to true, a deployment is created with "shell" resources - // that are not actually instantiated. This allows you to preview a - // deployment. It can be updated to false to actually deploy - // with real resources. - // ~>**NOTE:** Deployment Manager does not allow update - // of a deployment in preview (unless updating to preview=false). Thus, - // the provider will force-recreate deployments if either preview is updated - // to true or if other fields are updated while preview is true. + // If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + // preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + // does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + // deployments if either preview is updated to true or if other fields are updated while preview is true. Preview pulumi.BoolPtrInput // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. @@ -504,14 +470,10 @@ func (o DeploymentOutput) Name() pulumi.StringOutput { return o.ApplyT(func(v *Deployment) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) } -// If set to true, a deployment is created with "shell" resources -// that are not actually instantiated. This allows you to preview a -// deployment. It can be updated to false to actually deploy -// with real resources. -// ~>**NOTE:** Deployment Manager does not allow update -// of a deployment in preview (unless updating to preview=false). Thus, -// the provider will force-recreate deployments if either preview is updated -// to true or if other fields are updated while preview is true. +// If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to +// preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager +// does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate +// deployments if either preview is updated to true or if other fields are updated while preview is true. func (o DeploymentOutput) Preview() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Deployment) pulumi.BoolPtrOutput { return v.Preview }).(pulumi.BoolPtrOutput) } diff --git a/sdk/go/gcp/diagflow/agent.go b/sdk/go/gcp/diagflow/agent.go index 4a223859d5..b7d29e4da9 100644 --- a/sdk/go/gcp/diagflow/agent.go +++ b/sdk/go/gcp/diagflow/agent.go @@ -117,12 +117,11 @@ type Agent struct { Project pulumi.StringOutput `pulumi:"project"` // The list of all languages supported by this agent (except for the defaultLanguageCode). SupportedLanguageCodes pulumi.StringArrayOutput `pulumi:"supportedLanguageCodes"` - // The agent tier. If not specified, TIER_STANDARD is assumed. - // * TIER_STANDARD: Standard tier. - // * TIER_ENTERPRISE: Enterprise tier (Essentials). - // * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - // NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - // the the provider state and Dialogflow if the agent tier is changed outside of the provider. + // The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + // Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + // provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + // agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + // "TIER_ENTERPRISE_PLUS"] Tier pulumi.StringPtrOutput `pulumi:"tier"` // The time zone of this agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, // Europe/Paris. @@ -209,12 +208,11 @@ type agentState struct { Project *string `pulumi:"project"` // The list of all languages supported by this agent (except for the defaultLanguageCode). SupportedLanguageCodes []string `pulumi:"supportedLanguageCodes"` - // The agent tier. If not specified, TIER_STANDARD is assumed. - // * TIER_STANDARD: Standard tier. - // * TIER_ENTERPRISE: Enterprise tier (Essentials). - // * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - // NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - // the the provider state and Dialogflow if the agent tier is changed outside of the provider. + // The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + // Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + // provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + // agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + // "TIER_ENTERPRISE_PLUS"] Tier *string `pulumi:"tier"` // The time zone of this agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, // Europe/Paris. @@ -264,12 +262,11 @@ type AgentState struct { Project pulumi.StringPtrInput // The list of all languages supported by this agent (except for the defaultLanguageCode). SupportedLanguageCodes pulumi.StringArrayInput - // The agent tier. If not specified, TIER_STANDARD is assumed. - // * TIER_STANDARD: Standard tier. - // * TIER_ENTERPRISE: Enterprise tier (Essentials). - // * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - // NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - // the the provider state and Dialogflow if the agent tier is changed outside of the provider. + // The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + // Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + // provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + // agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + // "TIER_ENTERPRISE_PLUS"] Tier pulumi.StringPtrInput // The time zone of this agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, // Europe/Paris. @@ -320,12 +317,11 @@ type agentArgs struct { Project *string `pulumi:"project"` // The list of all languages supported by this agent (except for the defaultLanguageCode). SupportedLanguageCodes []string `pulumi:"supportedLanguageCodes"` - // The agent tier. If not specified, TIER_STANDARD is assumed. - // * TIER_STANDARD: Standard tier. - // * TIER_ENTERPRISE: Enterprise tier (Essentials). - // * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - // NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - // the the provider state and Dialogflow if the agent tier is changed outside of the provider. + // The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + // Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + // provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + // agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + // "TIER_ENTERPRISE_PLUS"] Tier *string `pulumi:"tier"` // The time zone of this agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, // Europe/Paris. @@ -373,12 +369,11 @@ type AgentArgs struct { Project pulumi.StringPtrInput // The list of all languages supported by this agent (except for the defaultLanguageCode). SupportedLanguageCodes pulumi.StringArrayInput - // The agent tier. If not specified, TIER_STANDARD is assumed. - // * TIER_STANDARD: Standard tier. - // * TIER_ENTERPRISE: Enterprise tier (Essentials). - // * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - // NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - // the the provider state and Dialogflow if the agent tier is changed outside of the provider. + // The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + // Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + // provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + // agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + // "TIER_ENTERPRISE_PLUS"] Tier pulumi.StringPtrInput // The time zone of this agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, // Europe/Paris. @@ -547,12 +542,11 @@ func (o AgentOutput) SupportedLanguageCodes() pulumi.StringArrayOutput { return o.ApplyT(func(v *Agent) pulumi.StringArrayOutput { return v.SupportedLanguageCodes }).(pulumi.StringArrayOutput) } -// The agent tier. If not specified, TIER_STANDARD is assumed. -// - TIER_STANDARD: Standard tier. -// - TIER_ENTERPRISE: Enterprise tier (Essentials). -// - TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). -// NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between -// the the provider state and Dialogflow if the agent tier is changed outside of the provider. +// The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: +// Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the +// provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the +// agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", +// "TIER_ENTERPRISE_PLUS"] func (o AgentOutput) Tier() pulumi.StringPtrOutput { return o.ApplyT(func(v *Agent) pulumi.StringPtrOutput { return v.Tier }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/diagflow/intent.go b/sdk/go/gcp/diagflow/intent.go index ffdbc7da3f..c2a21c9e16 100644 --- a/sdk/go/gcp/diagflow/intent.go +++ b/sdk/go/gcp/diagflow/intent.go @@ -56,97 +56,6 @@ import ( // } // // ``` -// ### Dialogflow Intent Full -// -// ```go -// package main -// -// import ( -// -// "fmt" -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/diagflow" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/serviceAccount" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// agentProjectProject, err := organizations.NewProject(ctx, "agentProjectProject", &organizations.ProjectArgs{ -// ProjectId: pulumi.String("tf-test-dialogflow"), -// OrgId: pulumi.String("123456789"), -// }) -// if err != nil { -// return err -// } -// agentProjectService, err := projects.NewService(ctx, "agentProjectService", &projects.ServiceArgs{ -// Project: agentProjectProject.ProjectId, -// Service: pulumi.String("dialogflow.googleapis.com"), -// DisableDependentServices: pulumi.Bool(false), -// }) -// if err != nil { -// return err -// } -// dialogflowServiceAccount, err := serviceAccount.NewAccount(ctx, "dialogflowServiceAccount", &serviceAccount.AccountArgs{ -// AccountId: pulumi.String("tf-test-dialogflow"), -// }) -// if err != nil { -// return err -// } -// _, err = projects.NewIAMMember(ctx, "agentCreate", &projects.IAMMemberArgs{ -// Project: agentProjectService.Project, -// Role: pulumi.String("roles/dialogflow.admin"), -// Member: dialogflowServiceAccount.Email.ApplyT(func(email string) (string, error) { -// return fmt.Sprintf("serviceAccount:%v", email), nil -// }).(pulumi.StringOutput), -// }) -// if err != nil { -// return err -// } -// basicAgent, err := diagflow.NewAgent(ctx, "basicAgent", &diagflow.AgentArgs{ -// Project: agentProjectProject.ProjectId, -// DisplayName: pulumi.String("example_agent"), -// DefaultLanguageCode: pulumi.String("en"), -// TimeZone: pulumi.String("America/New_York"), -// }) -// if err != nil { -// return err -// } -// _, err = diagflow.NewIntent(ctx, "fullIntent", &diagflow.IntentArgs{ -// Project: agentProjectProject.ProjectId, -// DisplayName: pulumi.String("full-intent"), -// WebhookState: pulumi.String("WEBHOOK_STATE_ENABLED"), -// Priority: pulumi.Int(1), -// IsFallback: pulumi.Bool(false), -// MlDisabled: pulumi.Bool(true), -// Action: pulumi.String("some_action"), -// ResetContexts: pulumi.Bool(true), -// InputContextNames: pulumi.StringArray{ -// agentProjectProject.ProjectId.ApplyT(func(projectId string) (string, error) { -// return fmt.Sprintf("projects/%v/agent/sessions/-/contexts/some_id", projectId), nil -// }).(pulumi.StringOutput), -// }, -// Events: pulumi.StringArray{ -// pulumi.String("some_event"), -// }, -// DefaultResponsePlatforms: pulumi.StringArray{ -// pulumi.String("FACEBOOK"), -// pulumi.String("SLACK"), -// }, -// }, pulumi.DependsOn([]pulumi.Resource{ -// basicAgent, -// })) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/dns/getManagedZone.go b/sdk/go/gcp/dns/getManagedZone.go index ea6bd61a9e..c64671b97a 100644 --- a/sdk/go/gcp/dns/getManagedZone.go +++ b/sdk/go/gcp/dns/getManagedZone.go @@ -74,8 +74,7 @@ type LookupManagedZoneArgs struct { type LookupManagedZoneResult struct { // A textual description field. Description string `pulumi:"description"` - // The fully qualified DNS name of this zone, e.g. `example.io.`. - DnsName string `pulumi:"dnsName"` + DnsName string `pulumi:"dnsName"` // The provider-assigned unique ID for this managed resource. Id string `pulumi:"id"` ManagedZoneId int `pulumi:"managedZoneId"` @@ -135,7 +134,6 @@ func (o LookupManagedZoneResultOutput) Description() pulumi.StringOutput { return o.ApplyT(func(v LookupManagedZoneResult) string { return v.Description }).(pulumi.StringOutput) } -// The fully qualified DNS name of this zone, e.g. `example.io.`. func (o LookupManagedZoneResultOutput) DnsName() pulumi.StringOutput { return o.ApplyT(func(v LookupManagedZoneResult) string { return v.DnsName }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/dns/managedZone.go b/sdk/go/gcp/dns/managedZone.go index af5687f264..7ffe617c56 100644 --- a/sdk/go/gcp/dns/managedZone.go +++ b/sdk/go/gcp/dns/managedZone.go @@ -29,16 +29,27 @@ import ( // // import ( // +// "fmt" +// // "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/dns" +// "github.com/pulumi/pulumi-random/sdk/v4/go/random" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // // ) // // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := dns.NewManagedZone(ctx, "example-zone", &dns.ManagedZoneArgs{ +// rnd, err := random.NewRandomId(ctx, "rnd", &random.RandomIdArgs{ +// ByteLength: pulumi.Int(4), +// }) +// if err != nil { +// return err +// } +// _, err = dns.NewManagedZone(ctx, "example-zone", &dns.ManagedZoneArgs{ // Description: pulumi.String("Example DNS zone"), -// DnsName: pulumi.String("my-domain.com."), +// DnsName: rnd.Hex.ApplyT(func(hex string) (string, error) { +// return fmt.Sprintf("example-%v.com.", hex), nil +// }).(pulumi.StringOutput), // Labels: pulumi.StringMap{ // "foo": pulumi.String("bar"), // }, @@ -428,7 +439,7 @@ type ManagedZone struct { // The time that this resource was created on the server. // This is in RFC3339 text format. CreationTime pulumi.StringOutput `pulumi:"creationTime"` - // A textual description field. Defaults to 'Managed by Pulumi'. + // A textual description field. Defaults to 'Managed by Terraform'. Description pulumi.StringOutput `pulumi:"description"` // The DNS name of this managed zone, for instance "example.com.". DnsName pulumi.StringOutput `pulumi:"dnsName"` @@ -463,12 +474,12 @@ type ManagedZone struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringOutput `pulumi:"project"` - // Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - // lookup queries using automatically configured records for VPC resources. This only applies - // to networks listed under `privateVisibilityConfig`. + // Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + // automatically configured records for VPC resources. This only applies to networks listed under + // 'private_visibility_config'. ReverseLookup pulumi.BoolPtrOutput `pulumi:"reverseLookup"` - // The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - // Structure is documented below. + // The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + // information related to the namespace associated with the zone. ServiceDirectoryConfig ManagedZoneServiceDirectoryConfigPtrOutput `pulumi:"serviceDirectoryConfig"` // The zone's visibility: public zones are exposed to the Internet, // while private zones are visible only to Virtual Private Cloud resources. @@ -518,7 +529,7 @@ type managedZoneState struct { // The time that this resource was created on the server. // This is in RFC3339 text format. CreationTime *string `pulumi:"creationTime"` - // A textual description field. Defaults to 'Managed by Pulumi'. + // A textual description field. Defaults to 'Managed by Terraform'. Description *string `pulumi:"description"` // The DNS name of this managed zone, for instance "example.com.". DnsName *string `pulumi:"dnsName"` @@ -553,12 +564,12 @@ type managedZoneState struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project *string `pulumi:"project"` - // Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - // lookup queries using automatically configured records for VPC resources. This only applies - // to networks listed under `privateVisibilityConfig`. + // Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + // automatically configured records for VPC resources. This only applies to networks listed under + // 'private_visibility_config'. ReverseLookup *bool `pulumi:"reverseLookup"` - // The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - // Structure is documented below. + // The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + // information related to the namespace associated with the zone. ServiceDirectoryConfig *ManagedZoneServiceDirectoryConfig `pulumi:"serviceDirectoryConfig"` // The zone's visibility: public zones are exposed to the Internet, // while private zones are visible only to Virtual Private Cloud resources. @@ -574,7 +585,7 @@ type ManagedZoneState struct { // The time that this resource was created on the server. // This is in RFC3339 text format. CreationTime pulumi.StringPtrInput - // A textual description field. Defaults to 'Managed by Pulumi'. + // A textual description field. Defaults to 'Managed by Terraform'. Description pulumi.StringPtrInput // The DNS name of this managed zone, for instance "example.com.". DnsName pulumi.StringPtrInput @@ -609,12 +620,12 @@ type ManagedZoneState struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringPtrInput - // Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - // lookup queries using automatically configured records for VPC resources. This only applies - // to networks listed under `privateVisibilityConfig`. + // Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + // automatically configured records for VPC resources. This only applies to networks listed under + // 'private_visibility_config'. ReverseLookup pulumi.BoolPtrInput - // The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - // Structure is documented below. + // The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + // information related to the namespace associated with the zone. ServiceDirectoryConfig ManagedZoneServiceDirectoryConfigPtrInput // The zone's visibility: public zones are exposed to the Internet, // while private zones are visible only to Virtual Private Cloud resources. @@ -631,7 +642,7 @@ type managedZoneArgs struct { // Cloud logging configuration // Structure is documented below. CloudLoggingConfig *ManagedZoneCloudLoggingConfig `pulumi:"cloudLoggingConfig"` - // A textual description field. Defaults to 'Managed by Pulumi'. + // A textual description field. Defaults to 'Managed by Terraform'. Description *string `pulumi:"description"` // The DNS name of this managed zone, for instance "example.com.". DnsName string `pulumi:"dnsName"` @@ -661,12 +672,12 @@ type managedZoneArgs struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project *string `pulumi:"project"` - // Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - // lookup queries using automatically configured records for VPC resources. This only applies - // to networks listed under `privateVisibilityConfig`. + // Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + // automatically configured records for VPC resources. This only applies to networks listed under + // 'private_visibility_config'. ReverseLookup *bool `pulumi:"reverseLookup"` - // The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - // Structure is documented below. + // The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + // information related to the namespace associated with the zone. ServiceDirectoryConfig *ManagedZoneServiceDirectoryConfig `pulumi:"serviceDirectoryConfig"` // The zone's visibility: public zones are exposed to the Internet, // while private zones are visible only to Virtual Private Cloud resources. @@ -680,7 +691,7 @@ type ManagedZoneArgs struct { // Cloud logging configuration // Structure is documented below. CloudLoggingConfig ManagedZoneCloudLoggingConfigPtrInput - // A textual description field. Defaults to 'Managed by Pulumi'. + // A textual description field. Defaults to 'Managed by Terraform'. Description pulumi.StringPtrInput // The DNS name of this managed zone, for instance "example.com.". DnsName pulumi.StringInput @@ -710,12 +721,12 @@ type ManagedZoneArgs struct { // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. Project pulumi.StringPtrInput - // Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - // lookup queries using automatically configured records for VPC resources. This only applies - // to networks listed under `privateVisibilityConfig`. + // Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + // automatically configured records for VPC resources. This only applies to networks listed under + // 'private_visibility_config'. ReverseLookup pulumi.BoolPtrInput - // The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - // Structure is documented below. + // The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + // information related to the namespace associated with the zone. ServiceDirectoryConfig ManagedZoneServiceDirectoryConfigPtrInput // The zone's visibility: public zones are exposed to the Internet, // while private zones are visible only to Virtual Private Cloud resources. @@ -823,7 +834,7 @@ func (o ManagedZoneOutput) CreationTime() pulumi.StringOutput { return o.ApplyT(func(v *ManagedZone) pulumi.StringOutput { return v.CreationTime }).(pulumi.StringOutput) } -// A textual description field. Defaults to 'Managed by Pulumi'. +// A textual description field. Defaults to 'Managed by Terraform'. func (o ManagedZoneOutput) Description() pulumi.StringOutput { return o.ApplyT(func(v *ManagedZone) pulumi.StringOutput { return v.Description }).(pulumi.StringOutput) } @@ -894,15 +905,15 @@ func (o ManagedZoneOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *ManagedZone) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } -// Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse -// lookup queries using automatically configured records for VPC resources. This only applies -// to networks listed under `privateVisibilityConfig`. +// Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using +// automatically configured records for VPC resources. This only applies to networks listed under +// 'private_visibility_config'. func (o ManagedZoneOutput) ReverseLookup() pulumi.BoolPtrOutput { return o.ApplyT(func(v *ManagedZone) pulumi.BoolPtrOutput { return v.ReverseLookup }).(pulumi.BoolPtrOutput) } -// The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. -// Structure is documented below. +// The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains +// information related to the namespace associated with the zone. func (o ManagedZoneOutput) ServiceDirectoryConfig() ManagedZoneServiceDirectoryConfigPtrOutput { return o.ApplyT(func(v *ManagedZone) ManagedZoneServiceDirectoryConfigPtrOutput { return v.ServiceDirectoryConfig }).(ManagedZoneServiceDirectoryConfigPtrOutput) } diff --git a/sdk/go/gcp/dns/policy.go b/sdk/go/gcp/dns/policy.go index 9dd5aed877..2d3a7f59dd 100644 --- a/sdk/go/gcp/dns/policy.go +++ b/sdk/go/gcp/dns/policy.go @@ -108,7 +108,7 @@ type Policy struct { // Names such as .internal are not available when an alternative name server is specified. // Structure is documented below. AlternativeNameServerConfig PolicyAlternativeNameServerConfigPtrOutput `pulumi:"alternativeNameServerConfig"` - // A textual description field. Defaults to 'Managed by Pulumi'. + // A textual description field. Defaults to 'Managed by Terraform'. Description pulumi.StringPtrOutput `pulumi:"description"` // Allows networks bound to this policy to receive DNS queries sent // by VMs or applications over VPN connections. When enabled, a @@ -162,7 +162,7 @@ type policyState struct { // Names such as .internal are not available when an alternative name server is specified. // Structure is documented below. AlternativeNameServerConfig *PolicyAlternativeNameServerConfig `pulumi:"alternativeNameServerConfig"` - // A textual description field. Defaults to 'Managed by Pulumi'. + // A textual description field. Defaults to 'Managed by Terraform'. Description *string `pulumi:"description"` // Allows networks bound to this policy to receive DNS queries sent // by VMs or applications over VPN connections. When enabled, a @@ -188,7 +188,7 @@ type PolicyState struct { // Names such as .internal are not available when an alternative name server is specified. // Structure is documented below. AlternativeNameServerConfig PolicyAlternativeNameServerConfigPtrInput - // A textual description field. Defaults to 'Managed by Pulumi'. + // A textual description field. Defaults to 'Managed by Terraform'. Description pulumi.StringPtrInput // Allows networks bound to this policy to receive DNS queries sent // by VMs or applications over VPN connections. When enabled, a @@ -218,7 +218,7 @@ type policyArgs struct { // Names such as .internal are not available when an alternative name server is specified. // Structure is documented below. AlternativeNameServerConfig *PolicyAlternativeNameServerConfig `pulumi:"alternativeNameServerConfig"` - // A textual description field. Defaults to 'Managed by Pulumi'. + // A textual description field. Defaults to 'Managed by Terraform'. Description *string `pulumi:"description"` // Allows networks bound to this policy to receive DNS queries sent // by VMs or applications over VPN connections. When enabled, a @@ -245,7 +245,7 @@ type PolicyArgs struct { // Names such as .internal are not available when an alternative name server is specified. // Structure is documented below. AlternativeNameServerConfig PolicyAlternativeNameServerConfigPtrInput - // A textual description field. Defaults to 'Managed by Pulumi'. + // A textual description field. Defaults to 'Managed by Terraform'. Description pulumi.StringPtrInput // Allows networks bound to this policy to receive DNS queries sent // by VMs or applications over VPN connections. When enabled, a @@ -360,7 +360,7 @@ func (o PolicyOutput) AlternativeNameServerConfig() PolicyAlternativeNameServerC return o.ApplyT(func(v *Policy) PolicyAlternativeNameServerConfigPtrOutput { return v.AlternativeNameServerConfig }).(PolicyAlternativeNameServerConfigPtrOutput) } -// A textual description field. Defaults to 'Managed by Pulumi'. +// A textual description field. Defaults to 'Managed by Terraform'. func (o PolicyOutput) Description() pulumi.StringPtrOutput { return o.ApplyT(func(v *Policy) pulumi.StringPtrOutput { return v.Description }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/firebase/getWebApp.go b/sdk/go/gcp/firebase/getWebApp.go index d4a6593826..e1770fb5ad 100644 --- a/sdk/go/gcp/firebase/getWebApp.go +++ b/sdk/go/gcp/firebase/getWebApp.go @@ -10,7 +10,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A Google Cloud Firebase web application instance func LookupWebApp(ctx *pulumi.Context, args *LookupWebAppArgs, opts ...pulumi.InvokeOption) (*LookupWebAppResult, error) { var rv LookupWebAppResult err := ctx.Invoke("gcp:firebase/getWebApp:getWebApp", args, &rv, opts...) diff --git a/sdk/go/gcp/firebase/getWebAppConfig.go b/sdk/go/gcp/firebase/getWebAppConfig.go index 04fa5608df..a430f7fc8d 100644 --- a/sdk/go/gcp/firebase/getWebAppConfig.go +++ b/sdk/go/gcp/firebase/getWebAppConfig.go @@ -10,13 +10,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A Google Cloud Firebase web application configuration -// -// To get more information about WebApp, see: -// -// * [API documentation](https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects.webApps) -// * How-to Guides -// - [Official Documentation](https://firebase.google.com/) func GetWebAppConfig(ctx *pulumi.Context, args *GetWebAppConfigArgs, opts ...pulumi.InvokeOption) (*GetWebAppConfigResult, error) { var rv GetWebAppConfigResult err := ctx.Invoke("gcp:firebase/getWebAppConfig:getWebAppConfig", args, &rv, opts...) diff --git a/sdk/go/gcp/firebase/project.go b/sdk/go/gcp/firebase/project.go index d4cfb271fd..d978f8c430 100644 --- a/sdk/go/gcp/firebase/project.go +++ b/sdk/go/gcp/firebase/project.go @@ -10,51 +10,7 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A Google Cloud Firebase instance. This enables Firebase resources on a given google project. -// Since a FirebaseProject is actually also a GCP Project, a FirebaseProject uses underlying GCP -// identifiers (most importantly, the projectId) as its own for easy interop with GCP APIs. -// Once Firebase has been added to a Google Project it cannot be removed. -// -// To get more information about Project, see: -// -// * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects) -// * How-to Guides -// - [Official Documentation](https://firebase.google.com/) -// // ## Example Usage -// ### Firebase Project Basic -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/firebase" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// defaultProject, err := organizations.NewProject(ctx, "defaultProject", &organizations.ProjectArgs{ -// ProjectId: pulumi.String("tf-test"), -// OrgId: pulumi.String("123456789"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// _, err = firebase.NewProject(ctx, "defaultFirebase/projectProject", &firebase.ProjectArgs{ -// Project: defaultProject.ProjectId, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/firebase/projectLocation.go b/sdk/go/gcp/firebase/projectLocation.go index 95ad0330c0..f1dd725736 100644 --- a/sdk/go/gcp/firebase/projectLocation.go +++ b/sdk/go/gcp/firebase/projectLocation.go @@ -11,62 +11,7 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Sets the default Google Cloud Platform (GCP) resource location for the specified FirebaseProject. -// This method creates an App Engine application with a default Cloud Storage bucket, located in the specified -// locationId. This location must be one of the available GCP resource locations. -// After the default GCP resource location is finalized, or if it was already set, it cannot be changed. -// The default GCP resource location for the specified FirebaseProject might already be set because either the -// GCP Project already has an App Engine application or defaultLocation.finalize was previously called with a -// specified locationId. Any new calls to defaultLocation.finalize with a different specified locationId will -// return a 409 error. -// -// To get more information about ProjectLocation, see: -// -// * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.defaultLocation/finalize) -// * How-to Guides -// - [Official Documentation](https://firebase.google.com/) -// // ## Example Usage -// ### Firebase Project Location Basic -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/firebase" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// defaultProject, err := organizations.NewProject(ctx, "defaultProject", &organizations.ProjectArgs{ -// ProjectId: pulumi.String("tf-test"), -// OrgId: pulumi.String("123456789"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// _, err = firebase.NewProject(ctx, "defaultFirebase/projectProject", &firebase.ProjectArgs{ -// Project: defaultProject.ProjectId, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// _, err = firebase.NewProjectLocation(ctx, "basic", &firebase.ProjectLocationArgs{ -// Project: defaultFirebase / projectProject.Project, -// LocationId: pulumi.String("us-central"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/firebase/webApp.go b/sdk/go/gcp/firebase/webApp.go index c66fc84a40..52d04cd818 100644 --- a/sdk/go/gcp/firebase/webApp.go +++ b/sdk/go/gcp/firebase/webApp.go @@ -11,14 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A Google Cloud Firebase web application instance -// -// To get more information about WebApp, see: -// -// * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.webApps) -// * How-to Guides -// - [Official Documentation](https://firebase.google.com/) -// // ## Example Usage // // ## Import diff --git a/sdk/go/gcp/firestore/document.go b/sdk/go/gcp/firestore/document.go index 1289da00f7..fd6a16cc61 100644 --- a/sdk/go/gcp/firestore/document.go +++ b/sdk/go/gcp/firestore/document.go @@ -34,6 +34,8 @@ import ( // // import ( // +// "fmt" +// // "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/firestore" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // @@ -43,7 +45,7 @@ import ( // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := firestore.NewDocument(ctx, "mydoc", &firestore.DocumentArgs{ // Collection: pulumi.String("somenewcollection"), -// DocumentId: pulumi.String("my-doc"), +// DocumentId: pulumi.String(fmt.Sprintf("my-doc-%vrandom_suffix}", "%{")), // Fields: pulumi.String("{\"something\":{\"mapValue\":{\"fields\":{\"akey\":{\"stringValue\":\"avalue\"}}}}}"), // Project: pulumi.String("my-project-name"), // }) @@ -73,7 +75,7 @@ import ( // pulumi.Run(func(ctx *pulumi.Context) error { // mydoc, err := firestore.NewDocument(ctx, "mydoc", &firestore.DocumentArgs{ // Collection: pulumi.String("somenewcollection"), -// DocumentId: pulumi.String("my-doc"), +// DocumentId: pulumi.String(fmt.Sprintf("my-doc-%vrandom_suffix}", "%{")), // Fields: pulumi.String("{\"something\":{\"mapValue\":{\"fields\":{\"akey\":{\"stringValue\":\"avalue\"}}}}}"), // Project: pulumi.String("my-project-name"), // }) diff --git a/sdk/go/gcp/folder/iamAuditConfig.go b/sdk/go/gcp/folder/iamAuditConfig.go index 81cc3fff39..3f527b6097 100644 --- a/sdk/go/gcp/folder/iamAuditConfig.go +++ b/sdk/go/gcp/folder/iamAuditConfig.go @@ -11,281 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: -// -// * `folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. -// * `folder.IAMBinding`: 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 folder are preserved. -// * `folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. -// * `folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. -// -// > **Note:** `folder.IAMPolicy` **cannot** be used in conjunction with `folder.IAMBinding`, `folder.IAMMember`, or `folder.IamAuditConfig` or they will fight over what your policy should be. -// -// > **Note:** `folder.IAMBinding` resources **can be** used in conjunction with `folder.IAMMember` resources **only if** they do not grant privilege to the same role. -// -// > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, -// -// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. -// -// ## google\_folder\_iam\_policy -// -// !> **Be careful!** You can accidentally lock yourself out of your folder -// -// using this resource. Deleting a `folder.IAMPolicy` removes access -// from anyone without permissions on its parent folder/organization. Proceed with caution. -// It's not recommended to use `folder.IAMPolicy` with your provider folder -// to avoid locking yourself out, and it should generally only be used with folders -// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before -// applying the change. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = folder.NewIAMPolicy(ctx, "folder", &folder.IAMPolicyArgs{ -// Folder: pulumi.String("folders/1234567"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Condition: { -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// Title: "expires_after_2019_12_31", -// }, -// Members: []string{ -// "user:jane@example.com", -// }, -// Role: "roles/compute.admin", -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = folder.NewIAMPolicy(ctx, "folder", &folder.IAMPolicyArgs{ -// Folder: pulumi.String("folders/1234567"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_folder\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIAMBinding(ctx, "folder", &folder.IAMBindingArgs{ -// Folder: pulumi.String("folders/1234567"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIAMBinding(ctx, "folder", &folder.IAMBindingArgs{ -// Condition: &folder.IAMBindingConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Folder: pulumi.String("folders/1234567"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/container.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_folder\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIAMMember(ctx, "folder", &folder.IAMMemberArgs{ -// Folder: pulumi.String("folders/1234567"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIAMMember(ctx, "folder", &folder.IAMMemberArgs{ -// Condition: &folder.IAMMemberConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Folder: pulumi.String("folders/1234567"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/firebase.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_folder\_iam\_audit\_config -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIamAuditConfig(ctx, "folder", &folder.IamAuditConfigArgs{ -// AuditLogConfigs: folder.IamAuditConfigAuditLogConfigArray{ -// &folder.IamAuditConfigAuditLogConfigArgs{ -// LogType: pulumi.String("ADMIN_READ"), -// }, -// &folder.IamAuditConfigAuditLogConfigArgs{ -// ExemptedMembers: pulumi.StringArray{ -// pulumi.String("user:joebloggs@hashicorp.com"), -// }, -// LogType: pulumi.String("DATA_READ"), -// }, -// }, -// Folder: pulumi.String("folders/1234567"), -// Service: pulumi.String("allServices"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/folder/iambinding.go b/sdk/go/gcp/folder/iambinding.go index 8bdb29f6ae..a0c7349a39 100644 --- a/sdk/go/gcp/folder/iambinding.go +++ b/sdk/go/gcp/folder/iambinding.go @@ -11,91 +11,69 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Allows creation and management of a single binding within IAM policy for -// an existing Google Cloud Platform folder. -// -// > **Note:** This resource _must not_ be used in conjunction with +// ## Import // -// `folder.IAMPolicy` or they will fight over what your policy -// should be. +// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. // -// > **Note:** On create, this resource will overwrite members of any existing roles. +// This member resource can be imported using the `folder`, role, and member e.g. // -// Use `pulumi import` and inspect the output to ensure -// your existing members are preserved. +// ```sh // -// ## Example Usage +// $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder roles/viewer user:foo@example.com" // -// ```go -// package main +// ``` // -// import ( +// IAM binding imports use space-delimited identifiers; the resource in question and the role. // -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// This binding resource can be imported using the `folder` and role, e.g. // -// ) +// ```sh // -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// department1, err := organizations.NewFolder(ctx, "department1", &organizations.FolderArgs{ -// DisplayName: pulumi.String("Department 1"), -// Parent: pulumi.String("organizations/1234567"), -// }) -// if err != nil { -// return err -// } -// _, err = folder.NewIAMBinding(ctx, "admin", &folder.IAMBindingArgs{ -// Folder: department1.Name, -// Role: pulumi.String("roles/editor"), -// Members: pulumi.StringArray{ -// pulumi.String("user:alice@gmail.com"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } +// $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder roles/viewer" // // ``` // -// ## Import +// IAM policy imports use the identifier of the resource in question. +// +// This policy resource can be imported using the `folder`. +// +// ```sh +// +// $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder folder // -// IAM binding imports use space-delimited identifiers; first the resource in question and then the role. +// ``` // -// These bindings can be imported using the `folder` and role, e.g. +// IAM audit config imports use the identifier of the resource in question and the service, e.g. // // ```sh // -// $ pulumi import gcp:folder/iAMBinding:IAMBinding viewer "folder-name roles/viewer" +// $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder foo.googleapis.com" // // ``` // -// -> **Custom Roles**If you're importing a IAM binding with a custom role, make sure to use the +// -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the +// +// full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure // -// full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. +// ```sh +// +// $ pulumi import gcp:folder/iAMBinding:IAMBinding to include the title of condition, e.g. `google_folder_iam_binding.my_folder "folder roles/{{role_id}} condition-title"` +// +// ``` type IAMBinding struct { pulumi.CustomResourceState + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition IAMBindingConditionPtrOutput `pulumi:"condition"` // (Computed) The etag of the folder's IAM policy. Etag pulumi.StringOutput `pulumi:"etag"` // The resource name of the folder the policy is attached to. Its format is folders/{folder_id}. - Folder pulumi.StringOutput `pulumi:"folder"` - // An array of identities that will be granted the privilege in the `role`. - // Each entry can have one of the following values: - // * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - // * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - // * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - // * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - // * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding + Folder pulumi.StringOutput `pulumi:"folder"` Members pulumi.StringArrayOutput `pulumi:"members"` // The role that should be applied. Only one // `folder.IAMBinding` can be used per role. Note that custom roles must be of the format - // `[projects|organizations]/{parent-name}/roles/{role-name}`. + // `organizations/{{org_id}}/roles/{{role_id}}`. Role pulumi.StringOutput `pulumi:"role"` } @@ -137,42 +115,32 @@ func GetIAMBinding(ctx *pulumi.Context, // Input properties used for looking up and filtering IAMBinding resources. type iambindingState struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition *IAMBindingCondition `pulumi:"condition"` // (Computed) The etag of the folder's IAM policy. Etag *string `pulumi:"etag"` // The resource name of the folder the policy is attached to. Its format is folders/{folder_id}. - Folder *string `pulumi:"folder"` - // An array of identities that will be granted the privilege in the `role`. - // Each entry can have one of the following values: - // * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - // * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - // * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - // * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - // * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding + Folder *string `pulumi:"folder"` Members []string `pulumi:"members"` // The role that should be applied. Only one // `folder.IAMBinding` can be used per role. Note that custom roles must be of the format - // `[projects|organizations]/{parent-name}/roles/{role-name}`. + // `organizations/{{org_id}}/roles/{{role_id}}`. Role *string `pulumi:"role"` } type IAMBindingState struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition IAMBindingConditionPtrInput // (Computed) The etag of the folder's IAM policy. Etag pulumi.StringPtrInput // The resource name of the folder the policy is attached to. Its format is folders/{folder_id}. - Folder pulumi.StringPtrInput - // An array of identities that will be granted the privilege in the `role`. - // Each entry can have one of the following values: - // * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - // * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - // * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - // * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - // * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding + Folder pulumi.StringPtrInput Members pulumi.StringArrayInput // The role that should be applied. Only one // `folder.IAMBinding` can be used per role. Note that custom roles must be of the format - // `[projects|organizations]/{parent-name}/roles/{role-name}`. + // `organizations/{{org_id}}/roles/{{role_id}}`. Role pulumi.StringPtrInput } @@ -181,39 +149,29 @@ func (IAMBindingState) ElementType() reflect.Type { } type iambindingArgs struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition *IAMBindingCondition `pulumi:"condition"` // The resource name of the folder the policy is attached to. Its format is folders/{folder_id}. - Folder string `pulumi:"folder"` - // An array of identities that will be granted the privilege in the `role`. - // Each entry can have one of the following values: - // * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - // * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - // * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - // * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - // * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding + Folder string `pulumi:"folder"` Members []string `pulumi:"members"` // The role that should be applied. Only one // `folder.IAMBinding` can be used per role. Note that custom roles must be of the format - // `[projects|organizations]/{parent-name}/roles/{role-name}`. + // `organizations/{{org_id}}/roles/{{role_id}}`. Role string `pulumi:"role"` } // The set of arguments for constructing a IAMBinding resource. type IAMBindingArgs struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition IAMBindingConditionPtrInput // The resource name of the folder the policy is attached to. Its format is folders/{folder_id}. - Folder pulumi.StringInput - // An array of identities that will be granted the privilege in the `role`. - // Each entry can have one of the following values: - // * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - // * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - // * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - // * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - // * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding + Folder pulumi.StringInput Members pulumi.StringArrayInput // The role that should be applied. Only one // `folder.IAMBinding` can be used per role. Note that custom roles must be of the format - // `[projects|organizations]/{parent-name}/roles/{role-name}`. + // `organizations/{{org_id}}/roles/{{role_id}}`. Role pulumi.StringInput } @@ -304,6 +262,8 @@ func (o IAMBindingOutput) ToIAMBindingOutputWithContext(ctx context.Context) IAM return o } +// An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. +// Structure is documented below. func (o IAMBindingOutput) Condition() IAMBindingConditionPtrOutput { return o.ApplyT(func(v *IAMBinding) IAMBindingConditionPtrOutput { return v.Condition }).(IAMBindingConditionPtrOutput) } @@ -318,20 +278,13 @@ func (o IAMBindingOutput) Folder() pulumi.StringOutput { return o.ApplyT(func(v *IAMBinding) pulumi.StringOutput { return v.Folder }).(pulumi.StringOutput) } -// An array of identities that will be granted the privilege in the `role`. -// Each entry can have one of the following values: -// * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. -// * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. -// * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. -// * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. -// * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding func (o IAMBindingOutput) Members() pulumi.StringArrayOutput { return o.ApplyT(func(v *IAMBinding) pulumi.StringArrayOutput { return v.Members }).(pulumi.StringArrayOutput) } // The role that should be applied. Only one // `folder.IAMBinding` can be used per role. Note that custom roles must be of the format -// `[projects|organizations]/{parent-name}/roles/{role-name}`. +// `organizations/{{org_id}}/roles/{{role_id}}`. func (o IAMBindingOutput) Role() pulumi.StringOutput { return o.ApplyT(func(v *IAMBinding) pulumi.StringOutput { return v.Role }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/folder/iammember.go b/sdk/go/gcp/folder/iammember.go index 682e68daa7..f31cb92ec6 100644 --- a/sdk/go/gcp/folder/iammember.go +++ b/sdk/go/gcp/folder/iammember.go @@ -11,281 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: -// -// * `folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. -// * `folder.IAMBinding`: 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 folder are preserved. -// * `folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. -// * `folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. -// -// > **Note:** `folder.IAMPolicy` **cannot** be used in conjunction with `folder.IAMBinding`, `folder.IAMMember`, or `folder.IamAuditConfig` or they will fight over what your policy should be. -// -// > **Note:** `folder.IAMBinding` resources **can be** used in conjunction with `folder.IAMMember` resources **only if** they do not grant privilege to the same role. -// -// > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, -// -// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. -// -// ## google\_folder\_iam\_policy -// -// !> **Be careful!** You can accidentally lock yourself out of your folder -// -// using this resource. Deleting a `folder.IAMPolicy` removes access -// from anyone without permissions on its parent folder/organization. Proceed with caution. -// It's not recommended to use `folder.IAMPolicy` with your provider folder -// to avoid locking yourself out, and it should generally only be used with folders -// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before -// applying the change. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = folder.NewIAMPolicy(ctx, "folder", &folder.IAMPolicyArgs{ -// Folder: pulumi.String("folders/1234567"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Condition: { -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// Title: "expires_after_2019_12_31", -// }, -// Members: []string{ -// "user:jane@example.com", -// }, -// Role: "roles/compute.admin", -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = folder.NewIAMPolicy(ctx, "folder", &folder.IAMPolicyArgs{ -// Folder: pulumi.String("folders/1234567"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_folder\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIAMBinding(ctx, "folder", &folder.IAMBindingArgs{ -// Folder: pulumi.String("folders/1234567"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIAMBinding(ctx, "folder", &folder.IAMBindingArgs{ -// Condition: &folder.IAMBindingConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Folder: pulumi.String("folders/1234567"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/container.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_folder\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIAMMember(ctx, "folder", &folder.IAMMemberArgs{ -// Folder: pulumi.String("folders/1234567"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIAMMember(ctx, "folder", &folder.IAMMemberArgs{ -// Condition: &folder.IAMMemberConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Folder: pulumi.String("folders/1234567"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/firebase.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_folder\_iam\_audit\_config -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIamAuditConfig(ctx, "folder", &folder.IamAuditConfigArgs{ -// AuditLogConfigs: folder.IamAuditConfigAuditLogConfigArray{ -// &folder.IamAuditConfigAuditLogConfigArgs{ -// LogType: pulumi.String("ADMIN_READ"), -// }, -// &folder.IamAuditConfigAuditLogConfigArgs{ -// ExemptedMembers: pulumi.StringArray{ -// pulumi.String("user:joebloggs@hashicorp.com"), -// }, -// LogType: pulumi.String("DATA_READ"), -// }, -// }, -// Folder: pulumi.String("folders/1234567"), -// Service: pulumi.String("allServices"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/folder/iampolicy.go b/sdk/go/gcp/folder/iampolicy.go index 84a81276e0..6cb97b4ea0 100644 --- a/sdk/go/gcp/folder/iampolicy.go +++ b/sdk/go/gcp/folder/iampolicy.go @@ -11,281 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: -// -// * `folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. -// * `folder.IAMBinding`: 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 folder are preserved. -// * `folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. -// * `folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. -// -// > **Note:** `folder.IAMPolicy` **cannot** be used in conjunction with `folder.IAMBinding`, `folder.IAMMember`, or `folder.IamAuditConfig` or they will fight over what your policy should be. -// -// > **Note:** `folder.IAMBinding` resources **can be** used in conjunction with `folder.IAMMember` resources **only if** they do not grant privilege to the same role. -// -// > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, -// -// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. -// -// ## google\_folder\_iam\_policy -// -// !> **Be careful!** You can accidentally lock yourself out of your folder -// -// using this resource. Deleting a `folder.IAMPolicy` removes access -// from anyone without permissions on its parent folder/organization. Proceed with caution. -// It's not recommended to use `folder.IAMPolicy` with your provider folder -// to avoid locking yourself out, and it should generally only be used with folders -// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before -// applying the change. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = folder.NewIAMPolicy(ctx, "folder", &folder.IAMPolicyArgs{ -// Folder: pulumi.String("folders/1234567"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Condition: { -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// Title: "expires_after_2019_12_31", -// }, -// Members: []string{ -// "user:jane@example.com", -// }, -// Role: "roles/compute.admin", -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = folder.NewIAMPolicy(ctx, "folder", &folder.IAMPolicyArgs{ -// Folder: pulumi.String("folders/1234567"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_folder\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIAMBinding(ctx, "folder", &folder.IAMBindingArgs{ -// Folder: pulumi.String("folders/1234567"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIAMBinding(ctx, "folder", &folder.IAMBindingArgs{ -// Condition: &folder.IAMBindingConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Folder: pulumi.String("folders/1234567"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/container.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_folder\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIAMMember(ctx, "folder", &folder.IAMMemberArgs{ -// Folder: pulumi.String("folders/1234567"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIAMMember(ctx, "folder", &folder.IAMMemberArgs{ -// Condition: &folder.IAMMemberConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Folder: pulumi.String("folders/1234567"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/firebase.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_folder\_iam\_audit\_config -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/folder" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := folder.NewIamAuditConfig(ctx, "folder", &folder.IamAuditConfigArgs{ -// AuditLogConfigs: folder.IamAuditConfigAuditLogConfigArray{ -// &folder.IamAuditConfigAuditLogConfigArgs{ -// LogType: pulumi.String("ADMIN_READ"), -// }, -// &folder.IamAuditConfigAuditLogConfigArgs{ -// ExemptedMembers: pulumi.StringArray{ -// pulumi.String("user:joebloggs@hashicorp.com"), -// }, -// LogType: pulumi.String("DATA_READ"), -// }, -// }, -// Folder: pulumi.String("folders/1234567"), -// Service: pulumi.String("allServices"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/folder/pulumiTypes.go b/sdk/go/gcp/folder/pulumiTypes.go index f38fc25622..4cb5a35216 100644 --- a/sdk/go/gcp/folder/pulumiTypes.go +++ b/sdk/go/gcp/folder/pulumiTypes.go @@ -189,9 +189,12 @@ func (o AccessApprovalSettingsEnrolledServiceArrayOutput) Index(i pulumi.IntInpu } type IAMBindingCondition struct { + // An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. Description *string `pulumi:"description"` - Expression string `pulumi:"expression"` - Title string `pulumi:"title"` + // Textual representation of an expression in Common Expression Language syntax. + Expression string `pulumi:"expression"` + // A title for the expression, i.e. a short string describing its purpose. + Title string `pulumi:"title"` } // IAMBindingConditionInput is an input type that accepts IAMBindingConditionArgs and IAMBindingConditionOutput values. @@ -206,9 +209,12 @@ type IAMBindingConditionInput interface { } type IAMBindingConditionArgs struct { + // An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. Description pulumi.StringPtrInput `pulumi:"description"` - Expression pulumi.StringInput `pulumi:"expression"` - Title pulumi.StringInput `pulumi:"title"` + // Textual representation of an expression in Common Expression Language syntax. + Expression pulumi.StringInput `pulumi:"expression"` + // A title for the expression, i.e. a short string describing its purpose. + Title pulumi.StringInput `pulumi:"title"` } func (IAMBindingConditionArgs) ElementType() reflect.Type { @@ -288,14 +294,17 @@ func (o IAMBindingConditionOutput) ToIAMBindingConditionPtrOutputWithContext(ctx }).(IAMBindingConditionPtrOutput) } +// An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. func (o IAMBindingConditionOutput) Description() pulumi.StringPtrOutput { return o.ApplyT(func(v IAMBindingCondition) *string { return v.Description }).(pulumi.StringPtrOutput) } +// Textual representation of an expression in Common Expression Language syntax. func (o IAMBindingConditionOutput) Expression() pulumi.StringOutput { return o.ApplyT(func(v IAMBindingCondition) string { return v.Expression }).(pulumi.StringOutput) } +// A title for the expression, i.e. a short string describing its purpose. func (o IAMBindingConditionOutput) Title() pulumi.StringOutput { return o.ApplyT(func(v IAMBindingCondition) string { return v.Title }).(pulumi.StringOutput) } @@ -324,6 +333,7 @@ func (o IAMBindingConditionPtrOutput) Elem() IAMBindingConditionOutput { }).(IAMBindingConditionOutput) } +// An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. func (o IAMBindingConditionPtrOutput) Description() pulumi.StringPtrOutput { return o.ApplyT(func(v *IAMBindingCondition) *string { if v == nil { @@ -333,6 +343,7 @@ func (o IAMBindingConditionPtrOutput) Description() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } +// Textual representation of an expression in Common Expression Language syntax. func (o IAMBindingConditionPtrOutput) Expression() pulumi.StringPtrOutput { return o.ApplyT(func(v *IAMBindingCondition) *string { if v == nil { @@ -342,6 +353,7 @@ func (o IAMBindingConditionPtrOutput) Expression() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } +// A title for the expression, i.e. a short string describing its purpose. func (o IAMBindingConditionPtrOutput) Title() pulumi.StringPtrOutput { return o.ApplyT(func(v *IAMBindingCondition) *string { if v == nil { diff --git a/sdk/go/gcp/healthcare/datasetIamBinding.go b/sdk/go/gcp/healthcare/datasetIamBinding.go index 355eabbf86..b3aaf26158 100644 --- a/sdk/go/gcp/healthcare/datasetIamBinding.go +++ b/sdk/go/gcp/healthcare/datasetIamBinding.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: -// -// * `healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. -// * `healthcare.DatasetIamBinding`: 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 dataset are preserved. -// * `healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. -// -// > **Note:** `healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `healthcare.DatasetIamBinding` and `healthcare.DatasetIamMember` or they will fight over what your policy should be. -// -// > **Note:** `healthcare.DatasetIamBinding` resources **can be** used in conjunction with `healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_healthcare\_dataset\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = healthcare.NewDatasetIamPolicy(ctx, "dataset", &healthcare.DatasetIamPolicyArgs{ -// DatasetId: pulumi.String("your-dataset-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_dataset\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewDatasetIamBinding(ctx, "dataset", &healthcare.DatasetIamBindingArgs{ -// DatasetId: pulumi.String("your-dataset-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_dataset\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewDatasetIamMember(ctx, "dataset", &healthcare.DatasetIamMemberArgs{ -// DatasetId: pulumi.String("your-dataset-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/healthcare/datasetIamMember.go b/sdk/go/gcp/healthcare/datasetIamMember.go index 256c42145d..1576658558 100644 --- a/sdk/go/gcp/healthcare/datasetIamMember.go +++ b/sdk/go/gcp/healthcare/datasetIamMember.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: -// -// * `healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. -// * `healthcare.DatasetIamBinding`: 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 dataset are preserved. -// * `healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. -// -// > **Note:** `healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `healthcare.DatasetIamBinding` and `healthcare.DatasetIamMember` or they will fight over what your policy should be. -// -// > **Note:** `healthcare.DatasetIamBinding` resources **can be** used in conjunction with `healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_healthcare\_dataset\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = healthcare.NewDatasetIamPolicy(ctx, "dataset", &healthcare.DatasetIamPolicyArgs{ -// DatasetId: pulumi.String("your-dataset-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_dataset\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewDatasetIamBinding(ctx, "dataset", &healthcare.DatasetIamBindingArgs{ -// DatasetId: pulumi.String("your-dataset-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_dataset\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewDatasetIamMember(ctx, "dataset", &healthcare.DatasetIamMemberArgs{ -// DatasetId: pulumi.String("your-dataset-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/healthcare/datasetIamPolicy.go b/sdk/go/gcp/healthcare/datasetIamPolicy.go index 6da8006759..1d2edad81f 100644 --- a/sdk/go/gcp/healthcare/datasetIamPolicy.go +++ b/sdk/go/gcp/healthcare/datasetIamPolicy.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: -// -// * `healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. -// * `healthcare.DatasetIamBinding`: 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 dataset are preserved. -// * `healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. -// -// > **Note:** `healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `healthcare.DatasetIamBinding` and `healthcare.DatasetIamMember` or they will fight over what your policy should be. -// -// > **Note:** `healthcare.DatasetIamBinding` resources **can be** used in conjunction with `healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_healthcare\_dataset\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = healthcare.NewDatasetIamPolicy(ctx, "dataset", &healthcare.DatasetIamPolicyArgs{ -// DatasetId: pulumi.String("your-dataset-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_dataset\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewDatasetIamBinding(ctx, "dataset", &healthcare.DatasetIamBindingArgs{ -// DatasetId: pulumi.String("your-dataset-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_dataset\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewDatasetIamMember(ctx, "dataset", &healthcare.DatasetIamMemberArgs{ -// DatasetId: pulumi.String("your-dataset-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/healthcare/dicomStore.go b/sdk/go/gcp/healthcare/dicomStore.go index 51200e2139..172d5777e9 100644 --- a/sdk/go/gcp/healthcare/dicomStore.go +++ b/sdk/go/gcp/healthcare/dicomStore.go @@ -177,9 +177,9 @@ type DicomStore struct { NotificationConfig DicomStoreNotificationConfigPtrOutput `pulumi:"notificationConfig"` // The fully qualified name of this dataset SelfLink pulumi.StringOutput `pulumi:"selfLink"` - // To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - // streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - // Structure is documented below. + // To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + // you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + // tables in a BigQuery dataset. StreamConfigs DicomStoreStreamConfigArrayOutput `pulumi:"streamConfigs"` } @@ -235,9 +235,9 @@ type dicomStoreState struct { NotificationConfig *DicomStoreNotificationConfig `pulumi:"notificationConfig"` // The fully qualified name of this dataset SelfLink *string `pulumi:"selfLink"` - // To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - // streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - // Structure is documented below. + // To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + // you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + // tables in a BigQuery dataset. StreamConfigs []DicomStoreStreamConfig `pulumi:"streamConfigs"` } @@ -262,9 +262,9 @@ type DicomStoreState struct { NotificationConfig DicomStoreNotificationConfigPtrInput // The fully qualified name of this dataset SelfLink pulumi.StringPtrInput - // To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - // streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - // Structure is documented below. + // To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + // you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + // tables in a BigQuery dataset. StreamConfigs DicomStoreStreamConfigArrayInput } @@ -291,9 +291,9 @@ type dicomStoreArgs struct { // A nested object resource // Structure is documented below. NotificationConfig *DicomStoreNotificationConfig `pulumi:"notificationConfig"` - // To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - // streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - // Structure is documented below. + // To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + // you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + // tables in a BigQuery dataset. StreamConfigs []DicomStoreStreamConfig `pulumi:"streamConfigs"` } @@ -317,9 +317,9 @@ type DicomStoreArgs struct { // A nested object resource // Structure is documented below. NotificationConfig DicomStoreNotificationConfigPtrInput - // To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - // streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - // Structure is documented below. + // To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + // you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + // tables in a BigQuery dataset. StreamConfigs DicomStoreStreamConfigArrayInput } @@ -445,9 +445,9 @@ func (o DicomStoreOutput) SelfLink() pulumi.StringOutput { return o.ApplyT(func(v *DicomStore) pulumi.StringOutput { return v.SelfLink }).(pulumi.StringOutput) } -// To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. -// streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. -// Structure is documented below. +// To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so +// you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery +// tables in a BigQuery dataset. func (o DicomStoreOutput) StreamConfigs() DicomStoreStreamConfigArrayOutput { return o.ApplyT(func(v *DicomStore) DicomStoreStreamConfigArrayOutput { return v.StreamConfigs }).(DicomStoreStreamConfigArrayOutput) } diff --git a/sdk/go/gcp/healthcare/dicomStoreIamBinding.go b/sdk/go/gcp/healthcare/dicomStoreIamBinding.go index b826437096..b9028803da 100644 --- a/sdk/go/gcp/healthcare/dicomStoreIamBinding.go +++ b/sdk/go/gcp/healthcare/dicomStoreIamBinding.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: -// -// * `healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. -// * `healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. -// * `healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. -// -// > **Note:** `healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `healthcare.DicomStoreIamBinding` and `healthcare.DicomStoreIamMember` or they will fight over what your policy should be. -// -// > **Note:** `healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_healthcare\_dicom\_store\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = healthcare.NewDicomStoreIamPolicy(ctx, "dicomStore", &healthcare.DicomStoreIamPolicyArgs{ -// DicomStoreId: pulumi.String("your-dicom-store-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_dicom\_store\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewDicomStoreIamBinding(ctx, "dicomStore", &healthcare.DicomStoreIamBindingArgs{ -// DicomStoreId: pulumi.String("your-dicom-store-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_dicom\_store\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewDicomStoreIamMember(ctx, "dicomStore", &healthcare.DicomStoreIamMemberArgs{ -// DicomStoreId: pulumi.String("your-dicom-store-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/healthcare/dicomStoreIamMember.go b/sdk/go/gcp/healthcare/dicomStoreIamMember.go index 54a21933f6..dc07572fe2 100644 --- a/sdk/go/gcp/healthcare/dicomStoreIamMember.go +++ b/sdk/go/gcp/healthcare/dicomStoreIamMember.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: -// -// * `healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. -// * `healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. -// * `healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. -// -// > **Note:** `healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `healthcare.DicomStoreIamBinding` and `healthcare.DicomStoreIamMember` or they will fight over what your policy should be. -// -// > **Note:** `healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_healthcare\_dicom\_store\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = healthcare.NewDicomStoreIamPolicy(ctx, "dicomStore", &healthcare.DicomStoreIamPolicyArgs{ -// DicomStoreId: pulumi.String("your-dicom-store-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_dicom\_store\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewDicomStoreIamBinding(ctx, "dicomStore", &healthcare.DicomStoreIamBindingArgs{ -// DicomStoreId: pulumi.String("your-dicom-store-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_dicom\_store\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewDicomStoreIamMember(ctx, "dicomStore", &healthcare.DicomStoreIamMemberArgs{ -// DicomStoreId: pulumi.String("your-dicom-store-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/healthcare/dicomStoreIamPolicy.go b/sdk/go/gcp/healthcare/dicomStoreIamPolicy.go index da2fae68f4..29507f91ca 100644 --- a/sdk/go/gcp/healthcare/dicomStoreIamPolicy.go +++ b/sdk/go/gcp/healthcare/dicomStoreIamPolicy.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: -// -// * `healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. -// * `healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. -// * `healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. -// -// > **Note:** `healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `healthcare.DicomStoreIamBinding` and `healthcare.DicomStoreIamMember` or they will fight over what your policy should be. -// -// > **Note:** `healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_healthcare\_dicom\_store\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = healthcare.NewDicomStoreIamPolicy(ctx, "dicomStore", &healthcare.DicomStoreIamPolicyArgs{ -// DicomStoreId: pulumi.String("your-dicom-store-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_dicom\_store\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewDicomStoreIamBinding(ctx, "dicomStore", &healthcare.DicomStoreIamBindingArgs{ -// DicomStoreId: pulumi.String("your-dicom-store-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_dicom\_store\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewDicomStoreIamMember(ctx, "dicomStore", &healthcare.DicomStoreIamMemberArgs{ -// DicomStoreId: pulumi.String("your-dicom-store-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/healthcare/fhirStore.go b/sdk/go/gcp/healthcare/fhirStore.go index d3efc7c483..1f96dbd528 100644 --- a/sdk/go/gcp/healthcare/fhirStore.go +++ b/sdk/go/gcp/healthcare/fhirStore.go @@ -79,6 +79,8 @@ import ( // // "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/bigquery" // "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" // "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/pubsub" // "github.com/pulumi/pulumi/sdk/v3/go/pulumi" // @@ -86,6 +88,26 @@ import ( // // func main() { // pulumi.Run(func(ctx *pulumi.Context) error { +// project, err := organizations.LookupProject(ctx, nil, nil) +// if err != nil { +// return err +// } +// bigqueryEditor, err := projects.NewIAMMember(ctx, "bigqueryEditor", &projects.IAMMemberArgs{ +// Project: *pulumi.String(project.ProjectId), +// Role: pulumi.String("roles/bigquery.dataEditor"), +// Member: pulumi.String(fmt.Sprintf("serviceAccount:service-%v@gcp-sa-healthcare.iam.gserviceaccount.com", project.Number)), +// }) +// if err != nil { +// return err +// } +// bigqueryJobUser, err := projects.NewIAMMember(ctx, "bigqueryJobUser", &projects.IAMMemberArgs{ +// Project: *pulumi.String(project.ProjectId), +// Role: pulumi.String("roles/bigquery.jobUser"), +// Member: pulumi.String(fmt.Sprintf("serviceAccount:service-%v@gcp-sa-healthcare.iam.gserviceaccount.com", project.Number)), +// }) +// if err != nil { +// return err +// } // dataset, err := healthcare.NewDataset(ctx, "dataset", &healthcare.DatasetArgs{ // Location: pulumi.String("us-central1"), // }) @@ -129,7 +151,10 @@ import ( // }, // }, // }, -// }) +// }, pulumi.DependsOn([]pulumi.Resource{ +// bigqueryEditor, +// bigqueryJobUser, +// })) // if err != nil { // return err // } diff --git a/sdk/go/gcp/healthcare/fhirStoreIamBinding.go b/sdk/go/gcp/healthcare/fhirStoreIamBinding.go index e77932108a..1376eab611 100644 --- a/sdk/go/gcp/healthcare/fhirStoreIamBinding.go +++ b/sdk/go/gcp/healthcare/fhirStoreIamBinding.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: -// -// * `healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. -// * `healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. -// * `healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. -// -// > **Note:** `healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `healthcare.FhirStoreIamBinding` and `healthcare.FhirStoreIamMember` or they will fight over what your policy should be. -// -// > **Note:** `healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_healthcare\_fhir\_store\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = healthcare.NewFhirStoreIamPolicy(ctx, "fhirStore", &healthcare.FhirStoreIamPolicyArgs{ -// FhirStoreId: pulumi.String("your-fhir-store-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_fhir\_store\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewFhirStoreIamBinding(ctx, "fhirStore", &healthcare.FhirStoreIamBindingArgs{ -// FhirStoreId: pulumi.String("your-fhir-store-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_fhir\_store\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewFhirStoreIamMember(ctx, "fhirStore", &healthcare.FhirStoreIamMemberArgs{ -// FhirStoreId: pulumi.String("your-fhir-store-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/healthcare/fhirStoreIamMember.go b/sdk/go/gcp/healthcare/fhirStoreIamMember.go index 58631156df..26b1e40601 100644 --- a/sdk/go/gcp/healthcare/fhirStoreIamMember.go +++ b/sdk/go/gcp/healthcare/fhirStoreIamMember.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: -// -// * `healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. -// * `healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. -// * `healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. -// -// > **Note:** `healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `healthcare.FhirStoreIamBinding` and `healthcare.FhirStoreIamMember` or they will fight over what your policy should be. -// -// > **Note:** `healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_healthcare\_fhir\_store\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = healthcare.NewFhirStoreIamPolicy(ctx, "fhirStore", &healthcare.FhirStoreIamPolicyArgs{ -// FhirStoreId: pulumi.String("your-fhir-store-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_fhir\_store\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewFhirStoreIamBinding(ctx, "fhirStore", &healthcare.FhirStoreIamBindingArgs{ -// FhirStoreId: pulumi.String("your-fhir-store-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_fhir\_store\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewFhirStoreIamMember(ctx, "fhirStore", &healthcare.FhirStoreIamMemberArgs{ -// FhirStoreId: pulumi.String("your-fhir-store-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/healthcare/fhirStoreIamPolicy.go b/sdk/go/gcp/healthcare/fhirStoreIamPolicy.go index 6f025ad172..c508014f15 100644 --- a/sdk/go/gcp/healthcare/fhirStoreIamPolicy.go +++ b/sdk/go/gcp/healthcare/fhirStoreIamPolicy.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: -// -// * `healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. -// * `healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. -// * `healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. -// -// > **Note:** `healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `healthcare.FhirStoreIamBinding` and `healthcare.FhirStoreIamMember` or they will fight over what your policy should be. -// -// > **Note:** `healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_healthcare\_fhir\_store\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = healthcare.NewFhirStoreIamPolicy(ctx, "fhirStore", &healthcare.FhirStoreIamPolicyArgs{ -// FhirStoreId: pulumi.String("your-fhir-store-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_fhir\_store\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewFhirStoreIamBinding(ctx, "fhirStore", &healthcare.FhirStoreIamBindingArgs{ -// FhirStoreId: pulumi.String("your-fhir-store-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_fhir\_store\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewFhirStoreIamMember(ctx, "fhirStore", &healthcare.FhirStoreIamMemberArgs{ -// FhirStoreId: pulumi.String("your-fhir-store-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/healthcare/hl7StoreIamBinding.go b/sdk/go/gcp/healthcare/hl7StoreIamBinding.go index 1ea33d298f..c970a2cf6c 100644 --- a/sdk/go/gcp/healthcare/hl7StoreIamBinding.go +++ b/sdk/go/gcp/healthcare/hl7StoreIamBinding.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: -// -// * `healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. -// * `healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. -// * `healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. -// -// > **Note:** `healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `healthcare.Hl7StoreIamBinding` and `healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. -// -// > **Note:** `healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_healthcare\_hl7\_v2\_store\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = healthcare.NewHl7StoreIamPolicy(ctx, "hl7V2Store", &healthcare.Hl7StoreIamPolicyArgs{ -// Hl7V2StoreId: pulumi.String("your-hl7-v2-store-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_hl7\_v2\_store\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewHl7StoreIamBinding(ctx, "hl7V2Store", &healthcare.Hl7StoreIamBindingArgs{ -// Hl7V2StoreId: pulumi.String("your-hl7-v2-store-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_hl7\_v2\_store\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewHl7StoreIamMember(ctx, "hl7V2Store", &healthcare.Hl7StoreIamMemberArgs{ -// Hl7V2StoreId: pulumi.String("your-hl7-v2-store-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/healthcare/hl7StoreIamMember.go b/sdk/go/gcp/healthcare/hl7StoreIamMember.go index c35c0c2c48..b275a36239 100644 --- a/sdk/go/gcp/healthcare/hl7StoreIamMember.go +++ b/sdk/go/gcp/healthcare/hl7StoreIamMember.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: -// -// * `healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. -// * `healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. -// * `healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. -// -// > **Note:** `healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `healthcare.Hl7StoreIamBinding` and `healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. -// -// > **Note:** `healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_healthcare\_hl7\_v2\_store\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = healthcare.NewHl7StoreIamPolicy(ctx, "hl7V2Store", &healthcare.Hl7StoreIamPolicyArgs{ -// Hl7V2StoreId: pulumi.String("your-hl7-v2-store-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_hl7\_v2\_store\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewHl7StoreIamBinding(ctx, "hl7V2Store", &healthcare.Hl7StoreIamBindingArgs{ -// Hl7V2StoreId: pulumi.String("your-hl7-v2-store-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_hl7\_v2\_store\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewHl7StoreIamMember(ctx, "hl7V2Store", &healthcare.Hl7StoreIamMemberArgs{ -// Hl7V2StoreId: pulumi.String("your-hl7-v2-store-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/healthcare/hl7StoreIamPolicy.go b/sdk/go/gcp/healthcare/hl7StoreIamPolicy.go index b03d8bc17e..0eb4765108 100644 --- a/sdk/go/gcp/healthcare/hl7StoreIamPolicy.go +++ b/sdk/go/gcp/healthcare/hl7StoreIamPolicy.go @@ -11,115 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: -// -// * `healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. -// * `healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. -// * `healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. -// -// > **Note:** `healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `healthcare.Hl7StoreIamBinding` and `healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. -// -// > **Note:** `healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_healthcare\_hl7\_v2\_store\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = healthcare.NewHl7StoreIamPolicy(ctx, "hl7V2Store", &healthcare.Hl7StoreIamPolicyArgs{ -// Hl7V2StoreId: pulumi.String("your-hl7-v2-store-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_hl7\_v2\_store\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewHl7StoreIamBinding(ctx, "hl7V2Store", &healthcare.Hl7StoreIamBindingArgs{ -// Hl7V2StoreId: pulumi.String("your-hl7-v2-store-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_healthcare\_hl7\_v2\_store\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/healthcare" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := healthcare.NewHl7StoreIamMember(ctx, "hl7V2Store", &healthcare.Hl7StoreIamMemberArgs{ -// Hl7V2StoreId: pulumi.String("your-hl7-v2-store-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/iam/accessBoundaryPolicy.go b/sdk/go/gcp/iam/accessBoundaryPolicy.go new file mode 100644 index 0000000000..2f0f86a7b8 --- /dev/null +++ b/sdk/go/gcp/iam/accessBoundaryPolicy.go @@ -0,0 +1,296 @@ +// Code generated by the Pulumi Terraform Bridge (tfgen) Tool DO NOT EDIT. +// *** WARNING: Do not edit by hand unless you're certain you know what you are doing! *** + +package iam + +import ( + "context" + "reflect" + + "github.com/pkg/errors" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Represents a collection of access boundary policies to apply to a given resource. +// **NOTE**: This is a private feature and users should contact GCP support +// if they would like to test it. +// +// ## Example Usage +// +// ## Import +// +// # AccessBoundaryPolicy can be imported using any of these accepted formats +// +// ```sh +// +// $ pulumi import gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy default {{parent}}/{{name}} +// +// ``` +type AccessBoundaryPolicy struct { + pulumi.CustomResourceState + + // The display name of the rule. + DisplayName pulumi.StringPtrOutput `pulumi:"displayName"` + // The hash of the resource. Used internally during updates. + Etag pulumi.StringOutput `pulumi:"etag"` + // The name of the policy. + Name pulumi.StringOutput `pulumi:"name"` + // The attachment point is identified by its URL-encoded full resource name. + Parent pulumi.StringOutput `pulumi:"parent"` + // Rules to be applied. + // Structure is documented below. + Rules AccessBoundaryPolicyRuleArrayOutput `pulumi:"rules"` +} + +// NewAccessBoundaryPolicy registers a new resource with the given unique name, arguments, and options. +func NewAccessBoundaryPolicy(ctx *pulumi.Context, + name string, args *AccessBoundaryPolicyArgs, opts ...pulumi.ResourceOption) (*AccessBoundaryPolicy, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Parent == nil { + return nil, errors.New("invalid value for required argument 'Parent'") + } + if args.Rules == nil { + return nil, errors.New("invalid value for required argument 'Rules'") + } + var resource AccessBoundaryPolicy + err := ctx.RegisterResource("gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetAccessBoundaryPolicy gets an existing AccessBoundaryPolicy 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 GetAccessBoundaryPolicy(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *AccessBoundaryPolicyState, opts ...pulumi.ResourceOption) (*AccessBoundaryPolicy, error) { + var resource AccessBoundaryPolicy + err := ctx.ReadResource("gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering AccessBoundaryPolicy resources. +type accessBoundaryPolicyState struct { + // The display name of the rule. + DisplayName *string `pulumi:"displayName"` + // The hash of the resource. Used internally during updates. + Etag *string `pulumi:"etag"` + // The name of the policy. + Name *string `pulumi:"name"` + // The attachment point is identified by its URL-encoded full resource name. + Parent *string `pulumi:"parent"` + // Rules to be applied. + // Structure is documented below. + Rules []AccessBoundaryPolicyRule `pulumi:"rules"` +} + +type AccessBoundaryPolicyState struct { + // The display name of the rule. + DisplayName pulumi.StringPtrInput + // The hash of the resource. Used internally during updates. + Etag pulumi.StringPtrInput + // The name of the policy. + Name pulumi.StringPtrInput + // The attachment point is identified by its URL-encoded full resource name. + Parent pulumi.StringPtrInput + // Rules to be applied. + // Structure is documented below. + Rules AccessBoundaryPolicyRuleArrayInput +} + +func (AccessBoundaryPolicyState) ElementType() reflect.Type { + return reflect.TypeOf((*accessBoundaryPolicyState)(nil)).Elem() +} + +type accessBoundaryPolicyArgs struct { + // The display name of the rule. + DisplayName *string `pulumi:"displayName"` + // The name of the policy. + Name *string `pulumi:"name"` + // The attachment point is identified by its URL-encoded full resource name. + Parent string `pulumi:"parent"` + // Rules to be applied. + // Structure is documented below. + Rules []AccessBoundaryPolicyRule `pulumi:"rules"` +} + +// The set of arguments for constructing a AccessBoundaryPolicy resource. +type AccessBoundaryPolicyArgs struct { + // The display name of the rule. + DisplayName pulumi.StringPtrInput + // The name of the policy. + Name pulumi.StringPtrInput + // The attachment point is identified by its URL-encoded full resource name. + Parent pulumi.StringInput + // Rules to be applied. + // Structure is documented below. + Rules AccessBoundaryPolicyRuleArrayInput +} + +func (AccessBoundaryPolicyArgs) ElementType() reflect.Type { + return reflect.TypeOf((*accessBoundaryPolicyArgs)(nil)).Elem() +} + +type AccessBoundaryPolicyInput interface { + pulumi.Input + + ToAccessBoundaryPolicyOutput() AccessBoundaryPolicyOutput + ToAccessBoundaryPolicyOutputWithContext(ctx context.Context) AccessBoundaryPolicyOutput +} + +func (*AccessBoundaryPolicy) ElementType() reflect.Type { + return reflect.TypeOf((**AccessBoundaryPolicy)(nil)).Elem() +} + +func (i *AccessBoundaryPolicy) ToAccessBoundaryPolicyOutput() AccessBoundaryPolicyOutput { + return i.ToAccessBoundaryPolicyOutputWithContext(context.Background()) +} + +func (i *AccessBoundaryPolicy) ToAccessBoundaryPolicyOutputWithContext(ctx context.Context) AccessBoundaryPolicyOutput { + return pulumi.ToOutputWithContext(ctx, i).(AccessBoundaryPolicyOutput) +} + +// AccessBoundaryPolicyArrayInput is an input type that accepts AccessBoundaryPolicyArray and AccessBoundaryPolicyArrayOutput values. +// You can construct a concrete instance of `AccessBoundaryPolicyArrayInput` via: +// +// AccessBoundaryPolicyArray{ AccessBoundaryPolicyArgs{...} } +type AccessBoundaryPolicyArrayInput interface { + pulumi.Input + + ToAccessBoundaryPolicyArrayOutput() AccessBoundaryPolicyArrayOutput + ToAccessBoundaryPolicyArrayOutputWithContext(context.Context) AccessBoundaryPolicyArrayOutput +} + +type AccessBoundaryPolicyArray []AccessBoundaryPolicyInput + +func (AccessBoundaryPolicyArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*AccessBoundaryPolicy)(nil)).Elem() +} + +func (i AccessBoundaryPolicyArray) ToAccessBoundaryPolicyArrayOutput() AccessBoundaryPolicyArrayOutput { + return i.ToAccessBoundaryPolicyArrayOutputWithContext(context.Background()) +} + +func (i AccessBoundaryPolicyArray) ToAccessBoundaryPolicyArrayOutputWithContext(ctx context.Context) AccessBoundaryPolicyArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(AccessBoundaryPolicyArrayOutput) +} + +// AccessBoundaryPolicyMapInput is an input type that accepts AccessBoundaryPolicyMap and AccessBoundaryPolicyMapOutput values. +// You can construct a concrete instance of `AccessBoundaryPolicyMapInput` via: +// +// AccessBoundaryPolicyMap{ "key": AccessBoundaryPolicyArgs{...} } +type AccessBoundaryPolicyMapInput interface { + pulumi.Input + + ToAccessBoundaryPolicyMapOutput() AccessBoundaryPolicyMapOutput + ToAccessBoundaryPolicyMapOutputWithContext(context.Context) AccessBoundaryPolicyMapOutput +} + +type AccessBoundaryPolicyMap map[string]AccessBoundaryPolicyInput + +func (AccessBoundaryPolicyMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*AccessBoundaryPolicy)(nil)).Elem() +} + +func (i AccessBoundaryPolicyMap) ToAccessBoundaryPolicyMapOutput() AccessBoundaryPolicyMapOutput { + return i.ToAccessBoundaryPolicyMapOutputWithContext(context.Background()) +} + +func (i AccessBoundaryPolicyMap) ToAccessBoundaryPolicyMapOutputWithContext(ctx context.Context) AccessBoundaryPolicyMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(AccessBoundaryPolicyMapOutput) +} + +type AccessBoundaryPolicyOutput struct{ *pulumi.OutputState } + +func (AccessBoundaryPolicyOutput) ElementType() reflect.Type { + return reflect.TypeOf((**AccessBoundaryPolicy)(nil)).Elem() +} + +func (o AccessBoundaryPolicyOutput) ToAccessBoundaryPolicyOutput() AccessBoundaryPolicyOutput { + return o +} + +func (o AccessBoundaryPolicyOutput) ToAccessBoundaryPolicyOutputWithContext(ctx context.Context) AccessBoundaryPolicyOutput { + return o +} + +// The display name of the rule. +func (o AccessBoundaryPolicyOutput) DisplayName() pulumi.StringPtrOutput { + return o.ApplyT(func(v *AccessBoundaryPolicy) pulumi.StringPtrOutput { return v.DisplayName }).(pulumi.StringPtrOutput) +} + +// The hash of the resource. Used internally during updates. +func (o AccessBoundaryPolicyOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v *AccessBoundaryPolicy) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) +} + +// The name of the policy. +func (o AccessBoundaryPolicyOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *AccessBoundaryPolicy) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The attachment point is identified by its URL-encoded full resource name. +func (o AccessBoundaryPolicyOutput) Parent() pulumi.StringOutput { + return o.ApplyT(func(v *AccessBoundaryPolicy) pulumi.StringOutput { return v.Parent }).(pulumi.StringOutput) +} + +// Rules to be applied. +// Structure is documented below. +func (o AccessBoundaryPolicyOutput) Rules() AccessBoundaryPolicyRuleArrayOutput { + return o.ApplyT(func(v *AccessBoundaryPolicy) AccessBoundaryPolicyRuleArrayOutput { return v.Rules }).(AccessBoundaryPolicyRuleArrayOutput) +} + +type AccessBoundaryPolicyArrayOutput struct{ *pulumi.OutputState } + +func (AccessBoundaryPolicyArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*AccessBoundaryPolicy)(nil)).Elem() +} + +func (o AccessBoundaryPolicyArrayOutput) ToAccessBoundaryPolicyArrayOutput() AccessBoundaryPolicyArrayOutput { + return o +} + +func (o AccessBoundaryPolicyArrayOutput) ToAccessBoundaryPolicyArrayOutputWithContext(ctx context.Context) AccessBoundaryPolicyArrayOutput { + return o +} + +func (o AccessBoundaryPolicyArrayOutput) Index(i pulumi.IntInput) AccessBoundaryPolicyOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *AccessBoundaryPolicy { + return vs[0].([]*AccessBoundaryPolicy)[vs[1].(int)] + }).(AccessBoundaryPolicyOutput) +} + +type AccessBoundaryPolicyMapOutput struct{ *pulumi.OutputState } + +func (AccessBoundaryPolicyMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*AccessBoundaryPolicy)(nil)).Elem() +} + +func (o AccessBoundaryPolicyMapOutput) ToAccessBoundaryPolicyMapOutput() AccessBoundaryPolicyMapOutput { + return o +} + +func (o AccessBoundaryPolicyMapOutput) ToAccessBoundaryPolicyMapOutputWithContext(ctx context.Context) AccessBoundaryPolicyMapOutput { + return o +} + +func (o AccessBoundaryPolicyMapOutput) MapIndex(k pulumi.StringInput) AccessBoundaryPolicyOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *AccessBoundaryPolicy { + return vs[0].(map[string]*AccessBoundaryPolicy)[vs[1].(string)] + }).(AccessBoundaryPolicyOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*AccessBoundaryPolicyInput)(nil)).Elem(), &AccessBoundaryPolicy{}) + pulumi.RegisterInputType(reflect.TypeOf((*AccessBoundaryPolicyArrayInput)(nil)).Elem(), AccessBoundaryPolicyArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*AccessBoundaryPolicyMapInput)(nil)).Elem(), AccessBoundaryPolicyMap{}) + pulumi.RegisterOutputType(AccessBoundaryPolicyOutput{}) + pulumi.RegisterOutputType(AccessBoundaryPolicyArrayOutput{}) + pulumi.RegisterOutputType(AccessBoundaryPolicyMapOutput{}) +} diff --git a/sdk/go/gcp/iam/getWorkloadIdentityPool.go b/sdk/go/gcp/iam/getWorkloadIdentityPool.go index c238153e85..ccb5f2a391 100644 --- a/sdk/go/gcp/iam/getWorkloadIdentityPool.go +++ b/sdk/go/gcp/iam/getWorkloadIdentityPool.go @@ -10,8 +10,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Get a IAM workload identity pool from Google Cloud by its id. -// > **Note:** The following resource requires the Beta IAM role `roles/iam.workloadIdentityPoolAdmin` in order to succeed. `OWNER` and `EDITOR` roles do not include the necessary permissions. // ## Example Usage // // ```go diff --git a/sdk/go/gcp/iam/getWorkloadIdentityPoolProvider.go b/sdk/go/gcp/iam/getWorkloadIdentityPoolProvider.go index c8de9a706f..d0ba69d240 100644 --- a/sdk/go/gcp/iam/getWorkloadIdentityPoolProvider.go +++ b/sdk/go/gcp/iam/getWorkloadIdentityPoolProvider.go @@ -10,8 +10,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Get a IAM workload identity provider from Google Cloud by its id. -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/iam/init.go b/sdk/go/gcp/iam/init.go index 7a23b51f18..379eab91fa 100644 --- a/sdk/go/gcp/iam/init.go +++ b/sdk/go/gcp/iam/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:iam/accessBoundaryPolicy:AccessBoundaryPolicy": + r = &AccessBoundaryPolicy{} case "gcp:iam/denyPolicy:DenyPolicy": r = &DenyPolicy{} case "gcp:iam/workforcePool:WorkforcePool": @@ -44,6 +46,11 @@ func init() { if err != nil { version = semver.Version{Major: 1} } + pulumi.RegisterResourceModule( + "gcp", + "iam/accessBoundaryPolicy", + &module{version}, + ) pulumi.RegisterResourceModule( "gcp", "iam/denyPolicy", diff --git a/sdk/go/gcp/iam/pulumiTypes.go b/sdk/go/gcp/iam/pulumiTypes.go index c2fa0d3c26..ac84d85f51 100644 --- a/sdk/go/gcp/iam/pulumiTypes.go +++ b/sdk/go/gcp/iam/pulumiTypes.go @@ -10,6 +10,504 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) +type AccessBoundaryPolicyRule struct { + // An access boundary rule in an IAM policy. + // Structure is documented below. + AccessBoundaryRule *AccessBoundaryPolicyRuleAccessBoundaryRule `pulumi:"accessBoundaryRule"` + // The description of the rule. + Description *string `pulumi:"description"` +} + +// AccessBoundaryPolicyRuleInput is an input type that accepts AccessBoundaryPolicyRuleArgs and AccessBoundaryPolicyRuleOutput values. +// You can construct a concrete instance of `AccessBoundaryPolicyRuleInput` via: +// +// AccessBoundaryPolicyRuleArgs{...} +type AccessBoundaryPolicyRuleInput interface { + pulumi.Input + + ToAccessBoundaryPolicyRuleOutput() AccessBoundaryPolicyRuleOutput + ToAccessBoundaryPolicyRuleOutputWithContext(context.Context) AccessBoundaryPolicyRuleOutput +} + +type AccessBoundaryPolicyRuleArgs struct { + // An access boundary rule in an IAM policy. + // Structure is documented below. + AccessBoundaryRule AccessBoundaryPolicyRuleAccessBoundaryRulePtrInput `pulumi:"accessBoundaryRule"` + // The description of the rule. + Description pulumi.StringPtrInput `pulumi:"description"` +} + +func (AccessBoundaryPolicyRuleArgs) ElementType() reflect.Type { + return reflect.TypeOf((*AccessBoundaryPolicyRule)(nil)).Elem() +} + +func (i AccessBoundaryPolicyRuleArgs) ToAccessBoundaryPolicyRuleOutput() AccessBoundaryPolicyRuleOutput { + return i.ToAccessBoundaryPolicyRuleOutputWithContext(context.Background()) +} + +func (i AccessBoundaryPolicyRuleArgs) ToAccessBoundaryPolicyRuleOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleOutput { + return pulumi.ToOutputWithContext(ctx, i).(AccessBoundaryPolicyRuleOutput) +} + +// AccessBoundaryPolicyRuleArrayInput is an input type that accepts AccessBoundaryPolicyRuleArray and AccessBoundaryPolicyRuleArrayOutput values. +// You can construct a concrete instance of `AccessBoundaryPolicyRuleArrayInput` via: +// +// AccessBoundaryPolicyRuleArray{ AccessBoundaryPolicyRuleArgs{...} } +type AccessBoundaryPolicyRuleArrayInput interface { + pulumi.Input + + ToAccessBoundaryPolicyRuleArrayOutput() AccessBoundaryPolicyRuleArrayOutput + ToAccessBoundaryPolicyRuleArrayOutputWithContext(context.Context) AccessBoundaryPolicyRuleArrayOutput +} + +type AccessBoundaryPolicyRuleArray []AccessBoundaryPolicyRuleInput + +func (AccessBoundaryPolicyRuleArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]AccessBoundaryPolicyRule)(nil)).Elem() +} + +func (i AccessBoundaryPolicyRuleArray) ToAccessBoundaryPolicyRuleArrayOutput() AccessBoundaryPolicyRuleArrayOutput { + return i.ToAccessBoundaryPolicyRuleArrayOutputWithContext(context.Background()) +} + +func (i AccessBoundaryPolicyRuleArray) ToAccessBoundaryPolicyRuleArrayOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(AccessBoundaryPolicyRuleArrayOutput) +} + +type AccessBoundaryPolicyRuleOutput struct{ *pulumi.OutputState } + +func (AccessBoundaryPolicyRuleOutput) ElementType() reflect.Type { + return reflect.TypeOf((*AccessBoundaryPolicyRule)(nil)).Elem() +} + +func (o AccessBoundaryPolicyRuleOutput) ToAccessBoundaryPolicyRuleOutput() AccessBoundaryPolicyRuleOutput { + return o +} + +func (o AccessBoundaryPolicyRuleOutput) ToAccessBoundaryPolicyRuleOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleOutput { + return o +} + +// An access boundary rule in an IAM policy. +// Structure is documented below. +func (o AccessBoundaryPolicyRuleOutput) AccessBoundaryRule() AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput { + return o.ApplyT(func(v AccessBoundaryPolicyRule) *AccessBoundaryPolicyRuleAccessBoundaryRule { + return v.AccessBoundaryRule + }).(AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput) +} + +// The description of the rule. +func (o AccessBoundaryPolicyRuleOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v AccessBoundaryPolicyRule) *string { return v.Description }).(pulumi.StringPtrOutput) +} + +type AccessBoundaryPolicyRuleArrayOutput struct{ *pulumi.OutputState } + +func (AccessBoundaryPolicyRuleArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]AccessBoundaryPolicyRule)(nil)).Elem() +} + +func (o AccessBoundaryPolicyRuleArrayOutput) ToAccessBoundaryPolicyRuleArrayOutput() AccessBoundaryPolicyRuleArrayOutput { + return o +} + +func (o AccessBoundaryPolicyRuleArrayOutput) ToAccessBoundaryPolicyRuleArrayOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleArrayOutput { + return o +} + +func (o AccessBoundaryPolicyRuleArrayOutput) Index(i pulumi.IntInput) AccessBoundaryPolicyRuleOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) AccessBoundaryPolicyRule { + return vs[0].([]AccessBoundaryPolicyRule)[vs[1].(int)] + }).(AccessBoundaryPolicyRuleOutput) +} + +type AccessBoundaryPolicyRuleAccessBoundaryRule struct { + // The availability condition further constrains the access allowed by the access boundary rule. + // Structure is documented below. + AvailabilityCondition *AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition `pulumi:"availabilityCondition"` + // A list of permissions that may be allowed for use on the specified resource. + AvailablePermissions []string `pulumi:"availablePermissions"` + // The full resource name of a Google Cloud resource entity. + AvailableResource *string `pulumi:"availableResource"` +} + +// AccessBoundaryPolicyRuleAccessBoundaryRuleInput is an input type that accepts AccessBoundaryPolicyRuleAccessBoundaryRuleArgs and AccessBoundaryPolicyRuleAccessBoundaryRuleOutput values. +// You can construct a concrete instance of `AccessBoundaryPolicyRuleAccessBoundaryRuleInput` via: +// +// AccessBoundaryPolicyRuleAccessBoundaryRuleArgs{...} +type AccessBoundaryPolicyRuleAccessBoundaryRuleInput interface { + pulumi.Input + + ToAccessBoundaryPolicyRuleAccessBoundaryRuleOutput() AccessBoundaryPolicyRuleAccessBoundaryRuleOutput + ToAccessBoundaryPolicyRuleAccessBoundaryRuleOutputWithContext(context.Context) AccessBoundaryPolicyRuleAccessBoundaryRuleOutput +} + +type AccessBoundaryPolicyRuleAccessBoundaryRuleArgs struct { + // The availability condition further constrains the access allowed by the access boundary rule. + // Structure is documented below. + AvailabilityCondition AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrInput `pulumi:"availabilityCondition"` + // A list of permissions that may be allowed for use on the specified resource. + AvailablePermissions pulumi.StringArrayInput `pulumi:"availablePermissions"` + // The full resource name of a Google Cloud resource entity. + AvailableResource pulumi.StringPtrInput `pulumi:"availableResource"` +} + +func (AccessBoundaryPolicyRuleAccessBoundaryRuleArgs) ElementType() reflect.Type { + return reflect.TypeOf((*AccessBoundaryPolicyRuleAccessBoundaryRule)(nil)).Elem() +} + +func (i AccessBoundaryPolicyRuleAccessBoundaryRuleArgs) ToAccessBoundaryPolicyRuleAccessBoundaryRuleOutput() AccessBoundaryPolicyRuleAccessBoundaryRuleOutput { + return i.ToAccessBoundaryPolicyRuleAccessBoundaryRuleOutputWithContext(context.Background()) +} + +func (i AccessBoundaryPolicyRuleAccessBoundaryRuleArgs) ToAccessBoundaryPolicyRuleAccessBoundaryRuleOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleAccessBoundaryRuleOutput { + return pulumi.ToOutputWithContext(ctx, i).(AccessBoundaryPolicyRuleAccessBoundaryRuleOutput) +} + +func (i AccessBoundaryPolicyRuleAccessBoundaryRuleArgs) ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput() AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput { + return i.ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutputWithContext(context.Background()) +} + +func (i AccessBoundaryPolicyRuleAccessBoundaryRuleArgs) ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(AccessBoundaryPolicyRuleAccessBoundaryRuleOutput).ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutputWithContext(ctx) +} + +// AccessBoundaryPolicyRuleAccessBoundaryRulePtrInput is an input type that accepts AccessBoundaryPolicyRuleAccessBoundaryRuleArgs, AccessBoundaryPolicyRuleAccessBoundaryRulePtr and AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput values. +// You can construct a concrete instance of `AccessBoundaryPolicyRuleAccessBoundaryRulePtrInput` via: +// +// AccessBoundaryPolicyRuleAccessBoundaryRuleArgs{...} +// +// or: +// +// nil +type AccessBoundaryPolicyRuleAccessBoundaryRulePtrInput interface { + pulumi.Input + + ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput() AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput + ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutputWithContext(context.Context) AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput +} + +type accessBoundaryPolicyRuleAccessBoundaryRulePtrType AccessBoundaryPolicyRuleAccessBoundaryRuleArgs + +func AccessBoundaryPolicyRuleAccessBoundaryRulePtr(v *AccessBoundaryPolicyRuleAccessBoundaryRuleArgs) AccessBoundaryPolicyRuleAccessBoundaryRulePtrInput { + return (*accessBoundaryPolicyRuleAccessBoundaryRulePtrType)(v) +} + +func (*accessBoundaryPolicyRuleAccessBoundaryRulePtrType) ElementType() reflect.Type { + return reflect.TypeOf((**AccessBoundaryPolicyRuleAccessBoundaryRule)(nil)).Elem() +} + +func (i *accessBoundaryPolicyRuleAccessBoundaryRulePtrType) ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput() AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput { + return i.ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutputWithContext(context.Background()) +} + +func (i *accessBoundaryPolicyRuleAccessBoundaryRulePtrType) ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput) +} + +type AccessBoundaryPolicyRuleAccessBoundaryRuleOutput struct{ *pulumi.OutputState } + +func (AccessBoundaryPolicyRuleAccessBoundaryRuleOutput) ElementType() reflect.Type { + return reflect.TypeOf((*AccessBoundaryPolicyRuleAccessBoundaryRule)(nil)).Elem() +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleOutput) ToAccessBoundaryPolicyRuleAccessBoundaryRuleOutput() AccessBoundaryPolicyRuleAccessBoundaryRuleOutput { + return o +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleOutput) ToAccessBoundaryPolicyRuleAccessBoundaryRuleOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleAccessBoundaryRuleOutput { + return o +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleOutput) ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput() AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput { + return o.ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutputWithContext(context.Background()) +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleOutput) ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v AccessBoundaryPolicyRuleAccessBoundaryRule) *AccessBoundaryPolicyRuleAccessBoundaryRule { + return &v + }).(AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput) +} + +// The availability condition further constrains the access allowed by the access boundary rule. +// Structure is documented below. +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleOutput) AvailabilityCondition() AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput { + return o.ApplyT(func(v AccessBoundaryPolicyRuleAccessBoundaryRule) *AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition { + return v.AvailabilityCondition + }).(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput) +} + +// A list of permissions that may be allowed for use on the specified resource. +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleOutput) AvailablePermissions() pulumi.StringArrayOutput { + return o.ApplyT(func(v AccessBoundaryPolicyRuleAccessBoundaryRule) []string { return v.AvailablePermissions }).(pulumi.StringArrayOutput) +} + +// The full resource name of a Google Cloud resource entity. +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleOutput) AvailableResource() pulumi.StringPtrOutput { + return o.ApplyT(func(v AccessBoundaryPolicyRuleAccessBoundaryRule) *string { return v.AvailableResource }).(pulumi.StringPtrOutput) +} + +type AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput struct{ *pulumi.OutputState } + +func (AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**AccessBoundaryPolicyRuleAccessBoundaryRule)(nil)).Elem() +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput) ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput() AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput { + return o +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput) ToAccessBoundaryPolicyRuleAccessBoundaryRulePtrOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput { + return o +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput) Elem() AccessBoundaryPolicyRuleAccessBoundaryRuleOutput { + return o.ApplyT(func(v *AccessBoundaryPolicyRuleAccessBoundaryRule) AccessBoundaryPolicyRuleAccessBoundaryRule { + if v != nil { + return *v + } + var ret AccessBoundaryPolicyRuleAccessBoundaryRule + return ret + }).(AccessBoundaryPolicyRuleAccessBoundaryRuleOutput) +} + +// The availability condition further constrains the access allowed by the access boundary rule. +// Structure is documented below. +func (o AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput) AvailabilityCondition() AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput { + return o.ApplyT(func(v *AccessBoundaryPolicyRuleAccessBoundaryRule) *AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition { + if v == nil { + return nil + } + return v.AvailabilityCondition + }).(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput) +} + +// A list of permissions that may be allowed for use on the specified resource. +func (o AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput) AvailablePermissions() pulumi.StringArrayOutput { + return o.ApplyT(func(v *AccessBoundaryPolicyRuleAccessBoundaryRule) []string { + if v == nil { + return nil + } + return v.AvailablePermissions + }).(pulumi.StringArrayOutput) +} + +// The full resource name of a Google Cloud resource entity. +func (o AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput) AvailableResource() pulumi.StringPtrOutput { + return o.ApplyT(func(v *AccessBoundaryPolicyRuleAccessBoundaryRule) *string { + if v == nil { + return nil + } + return v.AvailableResource + }).(pulumi.StringPtrOutput) +} + +type AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition struct { + // Description of the expression. This is a longer text which describes the expression, + // e.g. when hovered over it in a UI. + Description *string `pulumi:"description"` + // Textual representation of an expression in Common Expression Language syntax. + Expression string `pulumi:"expression"` + // String indicating the location of the expression for error reporting, + // e.g. a file name and a position in the file. + Location *string `pulumi:"location"` + // Title for the expression, i.e. a short string describing its purpose. + // This can be used e.g. in UIs which allow to enter the expression. + Title *string `pulumi:"title"` +} + +// AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionInput is an input type that accepts AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs and AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput values. +// You can construct a concrete instance of `AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionInput` via: +// +// AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs{...} +type AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionInput interface { + pulumi.Input + + ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput() AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput + ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutputWithContext(context.Context) AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput +} + +type AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs struct { + // Description of the expression. This is a longer text which describes the expression, + // e.g. when hovered over it in a UI. + Description pulumi.StringPtrInput `pulumi:"description"` + // Textual representation of an expression in Common Expression Language syntax. + Expression pulumi.StringInput `pulumi:"expression"` + // String indicating the location of the expression for error reporting, + // e.g. a file name and a position in the file. + Location pulumi.StringPtrInput `pulumi:"location"` + // Title for the expression, i.e. a short string describing its purpose. + // This can be used e.g. in UIs which allow to enter the expression. + Title pulumi.StringPtrInput `pulumi:"title"` +} + +func (AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition)(nil)).Elem() +} + +func (i AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs) ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput() AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput { + return i.ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutputWithContext(context.Background()) +} + +func (i AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs) ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput { + return pulumi.ToOutputWithContext(ctx, i).(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput) +} + +func (i AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs) ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput() AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput { + return i.ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutputWithContext(context.Background()) +} + +func (i AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs) ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput).ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutputWithContext(ctx) +} + +// AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrInput is an input type that accepts AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs, AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtr and AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput values. +// You can construct a concrete instance of `AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrInput` via: +// +// AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs{...} +// +// or: +// +// nil +type AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrInput interface { + pulumi.Input + + ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput() AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput + ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutputWithContext(context.Context) AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput +} + +type accessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrType AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs + +func AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtr(v *AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs) AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrInput { + return (*accessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrType)(v) +} + +func (*accessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition)(nil)).Elem() +} + +func (i *accessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrType) ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput() AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput { + return i.ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutputWithContext(context.Background()) +} + +func (i *accessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrType) ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput) +} + +type AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput struct{ *pulumi.OutputState } + +func (AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput) ElementType() reflect.Type { + return reflect.TypeOf((*AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition)(nil)).Elem() +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput) ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput() AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput { + return o +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput) ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput { + return o +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput) ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput() AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput { + return o.ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutputWithContext(context.Background()) +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput) ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition) *AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition { + return &v + }).(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput) +} + +// Description of the expression. This is a longer text which describes the expression, +// e.g. when hovered over it in a UI. +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition) *string { return v.Description }).(pulumi.StringPtrOutput) +} + +// Textual representation of an expression in Common Expression Language syntax. +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput) Expression() pulumi.StringOutput { + return o.ApplyT(func(v AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition) string { return v.Expression }).(pulumi.StringOutput) +} + +// String indicating the location of the expression for error reporting, +// e.g. a file name and a position in the file. +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput) Location() pulumi.StringPtrOutput { + return o.ApplyT(func(v AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition) *string { return v.Location }).(pulumi.StringPtrOutput) +} + +// Title for the expression, i.e. a short string describing its purpose. +// This can be used e.g. in UIs which allow to enter the expression. +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput) Title() pulumi.StringPtrOutput { + return o.ApplyT(func(v AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition) *string { return v.Title }).(pulumi.StringPtrOutput) +} + +type AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput struct{ *pulumi.OutputState } + +func (AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition)(nil)).Elem() +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput) ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput() AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput { + return o +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput) ToAccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutputWithContext(ctx context.Context) AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput { + return o +} + +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput) Elem() AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput { + return o.ApplyT(func(v *AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition) AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition { + if v != nil { + return *v + } + var ret AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition + return ret + }).(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput) +} + +// Description of the expression. This is a longer text which describes the expression, +// e.g. when hovered over it in a UI. +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput) Description() pulumi.StringPtrOutput { + return o.ApplyT(func(v *AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition) *string { + if v == nil { + return nil + } + return v.Description + }).(pulumi.StringPtrOutput) +} + +// Textual representation of an expression in Common Expression Language syntax. +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput) Expression() pulumi.StringPtrOutput { + return o.ApplyT(func(v *AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition) *string { + if v == nil { + return nil + } + return &v.Expression + }).(pulumi.StringPtrOutput) +} + +// String indicating the location of the expression for error reporting, +// e.g. a file name and a position in the file. +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput) Location() pulumi.StringPtrOutput { + return o.ApplyT(func(v *AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition) *string { + if v == nil { + return nil + } + return v.Location + }).(pulumi.StringPtrOutput) +} + +// Title for the expression, i.e. a short string describing its purpose. +// This can be used e.g. in UIs which allow to enter the expression. +func (o AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput) Title() pulumi.StringPtrOutput { + return o.ApplyT(func(v *AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition) *string { + if v == nil { + return nil + } + return v.Title + }).(pulumi.StringPtrOutput) +} + type DenyPolicyRule struct { // A deny rule in an IAM deny policy. // Structure is documented below. @@ -1602,6 +2100,12 @@ func (o GetWorkloadIdentityPoolProviderOidcArrayOutput) Index(i pulumi.IntInput) } func init() { + pulumi.RegisterInputType(reflect.TypeOf((*AccessBoundaryPolicyRuleInput)(nil)).Elem(), AccessBoundaryPolicyRuleArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*AccessBoundaryPolicyRuleArrayInput)(nil)).Elem(), AccessBoundaryPolicyRuleArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*AccessBoundaryPolicyRuleAccessBoundaryRuleInput)(nil)).Elem(), AccessBoundaryPolicyRuleAccessBoundaryRuleArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*AccessBoundaryPolicyRuleAccessBoundaryRulePtrInput)(nil)).Elem(), AccessBoundaryPolicyRuleAccessBoundaryRuleArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionInput)(nil)).Elem(), AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrInput)(nil)).Elem(), AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DenyPolicyRuleInput)(nil)).Elem(), DenyPolicyRuleArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*DenyPolicyRuleArrayInput)(nil)).Elem(), DenyPolicyRuleArray{}) pulumi.RegisterInputType(reflect.TypeOf((*DenyPolicyRuleDenyRuleInput)(nil)).Elem(), DenyPolicyRuleDenyRuleArgs{}) @@ -1622,6 +2126,12 @@ func init() { pulumi.RegisterInputType(reflect.TypeOf((*GetWorkloadIdentityPoolProviderAwArrayInput)(nil)).Elem(), GetWorkloadIdentityPoolProviderAwArray{}) pulumi.RegisterInputType(reflect.TypeOf((*GetWorkloadIdentityPoolProviderOidcInput)(nil)).Elem(), GetWorkloadIdentityPoolProviderOidcArgs{}) pulumi.RegisterInputType(reflect.TypeOf((*GetWorkloadIdentityPoolProviderOidcArrayInput)(nil)).Elem(), GetWorkloadIdentityPoolProviderOidcArray{}) + pulumi.RegisterOutputType(AccessBoundaryPolicyRuleOutput{}) + pulumi.RegisterOutputType(AccessBoundaryPolicyRuleArrayOutput{}) + pulumi.RegisterOutputType(AccessBoundaryPolicyRuleAccessBoundaryRuleOutput{}) + pulumi.RegisterOutputType(AccessBoundaryPolicyRuleAccessBoundaryRulePtrOutput{}) + pulumi.RegisterOutputType(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionOutput{}) + pulumi.RegisterOutputType(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionPtrOutput{}) pulumi.RegisterOutputType(DenyPolicyRuleOutput{}) pulumi.RegisterOutputType(DenyPolicyRuleArrayOutput{}) pulumi.RegisterOutputType(DenyPolicyRuleDenyRuleOutput{}) diff --git a/sdk/go/gcp/iam/workforcePoolProvider.go b/sdk/go/gcp/iam/workforcePoolProvider.go index d86b3b74eb..f902554899 100644 --- a/sdk/go/gcp/iam/workforcePoolProvider.go +++ b/sdk/go/gcp/iam/workforcePoolProvider.go @@ -139,7 +139,7 @@ import ( // "google.subject": pulumi.String("assertion.sub"), // }, // Oidc: &iam.WorkforcePoolProviderOidcArgs{ -// IssuerUri: pulumi.String("https://accounts.google.com"), +// IssuerUri: pulumi.String("https://accounts.thirdparty.com"), // ClientId: pulumi.String("client-id"), // }, // }) @@ -181,7 +181,7 @@ import ( // "google.subject": pulumi.String("assertion.sub"), // }, // Oidc: &iam.WorkforcePoolProviderOidcArgs{ -// IssuerUri: pulumi.String("https://accounts.google.com"), +// IssuerUri: pulumi.String("https://accounts.thirdparty.com"), // ClientId: pulumi.String("client-id"), // }, // DisplayName: pulumi.String("Display name"), diff --git a/sdk/go/gcp/iap/brand.go b/sdk/go/gcp/iap/brand.go index ac18398788..7af33863c7 100644 --- a/sdk/go/gcp/iap/brand.go +++ b/sdk/go/gcp/iap/brand.go @@ -11,65 +11,7 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// OAuth brand data. Only "Organization Internal" brands can be created -// programmatically via API. To convert it into an external brands -// please use the GCP Console. -// -// > **Note:** Brands can only be created once for a Google Cloud -// project and the underlying Google API doesn't not support DELETE or PATCH methods. -// Destroying a provider-managed Brand will remove it from state -// but *will not delete it from Google Cloud.* -// -// To get more information about Brand, see: -// -// * [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands) -// * How-to Guides -// - [Setting up IAP Brand](https://cloud.google.com/iap/docs/tutorial-gce#set_up_iap) -// // ## Example Usage -// ### Iap Brand -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iap" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// project, err := organizations.NewProject(ctx, "project", &organizations.ProjectArgs{ -// ProjectId: pulumi.String("tf-test"), -// OrgId: pulumi.String("123456789"), -// }) -// if err != nil { -// return err -// } -// projectService, err := projects.NewService(ctx, "projectService", &projects.ServiceArgs{ -// Project: project.ProjectId, -// Service: pulumi.String("iap.googleapis.com"), -// }) -// if err != nil { -// return err -// } -// _, err = iap.NewBrand(ctx, "projectBrand", &iap.BrandArgs{ -// SupportEmail: pulumi.String("support@example.com"), -// ApplicationTitle: pulumi.String("Cloud IAP protected Application"), -// Project: projectService.Project, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/iap/client.go b/sdk/go/gcp/iap/client.go index cfa2a89522..068c0a905b 100644 --- a/sdk/go/gcp/iap/client.go +++ b/sdk/go/gcp/iap/client.go @@ -11,72 +11,7 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Contains the data that describes an Identity Aware Proxy owned client. -// -// > **Note:** Only internal org clients can be created via declarative tools. External clients must be -// manually created via the GCP console. This restriction is due to the existing APIs and not lack of support -// in this tool. -// -// To get more information about Client, see: -// -// * [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands.identityAwareProxyClients) -// * How-to Guides -// - [Setting up IAP Client](https://cloud.google.com/iap/docs/authentication-howto) -// -// > **Warning:** All arguments including `secret` will be stored in the raw -// state as plain-text. -// // ## Example Usage -// ### Iap Client -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/iap" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// project, err := organizations.NewProject(ctx, "project", &organizations.ProjectArgs{ -// ProjectId: pulumi.String("tf-test"), -// OrgId: pulumi.String("123456789"), -// }) -// if err != nil { -// return err -// } -// projectService, err := projects.NewService(ctx, "projectService", &projects.ServiceArgs{ -// Project: project.ProjectId, -// Service: pulumi.String("iap.googleapis.com"), -// }) -// if err != nil { -// return err -// } -// projectBrand, err := iap.NewBrand(ctx, "projectBrand", &iap.BrandArgs{ -// SupportEmail: pulumi.String("support@example.com"), -// ApplicationTitle: pulumi.String("Cloud IAP protected Application"), -// Project: projectService.Project, -// }) -// if err != nil { -// return err -// } -// _, err = iap.NewClient(ctx, "projectClient", &iap.ClientArgs{ -// DisplayName: pulumi.String("Test Client"), -// Brand: projectBrand.Name, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/kms/cryptoKey.go b/sdk/go/gcp/kms/cryptoKey.go index 7a6c9903de..37256a9997 100644 --- a/sdk/go/gcp/kms/cryptoKey.go +++ b/sdk/go/gcp/kms/cryptoKey.go @@ -11,22 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A `CryptoKey` represents a logical key that can be used for cryptographic operations. -// -// > **Note:** CryptoKeys cannot be deleted from Google Cloud Platform. -// Destroying a provider-managed CryptoKey will remove it from state -// and delete all CryptoKeyVersions, rendering the key unusable, but *will -// not delete the resource from the project.* When the provider destroys these keys, -// any data previously encrypted with these keys will be irrecoverable. -// For this reason, it is strongly recommended that you add lifecycle hooks -// to the resource to prevent accidental destruction. -// -// To get more information about CryptoKey, see: -// -// * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys) -// * How-to Guides -// - [Creating a key](https://cloud.google.com/kms/docs/creating-keys#create_a_key) -// // ## Example Usage // ### Kms Crypto Key Basic // diff --git a/sdk/go/gcp/kms/cryptoKeyIAMBinding.go b/sdk/go/gcp/kms/cryptoKeyIAMBinding.go index 8a73850e42..07c7d63837 100644 --- a/sdk/go/gcp/kms/cryptoKeyIAMBinding.go +++ b/sdk/go/gcp/kms/cryptoKeyIAMBinding.go @@ -11,228 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: -// -// * `kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. -// * `kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. -// * `kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. -// -// > **Note:** `kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `kms.CryptoKeyIAMBinding` and `kms.CryptoKeyIAMMember` or they will fight over what your policy should be. -// -// > **Note:** `kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// keyring, err := kms.NewKeyRing(ctx, "keyring", &kms.KeyRingArgs{ -// Location: pulumi.String("global"), -// }) -// if err != nil { -// return err -// } -// key, err := kms.NewCryptoKey(ctx, "key", &kms.CryptoKeyArgs{ -// KeyRing: keyring.ID(), -// RotationPeriod: pulumi.String("100000s"), -// }) -// if err != nil { -// return err -// } -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/cloudkms.cryptoKeyEncrypter", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = kms.NewCryptoKeyIAMPolicy(ctx, "cryptoKey", &kms.CryptoKeyIAMPolicyArgs{ -// CryptoKeyId: key.ID(), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Condition: { -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// Title: "expires_after_2019_12_31", -// }, -// Members: []string{ -// "user:jane@example.com", -// }, -// Role: "roles/cloudkms.cryptoKeyEncrypter", -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewCryptoKeyIAMBinding(ctx, "cryptoKey", &kms.CryptoKeyIAMBindingArgs{ -// CryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id), -// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypter"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewCryptoKeyIAMBinding(ctx, "cryptoKey", &kms.CryptoKeyIAMBindingArgs{ -// CryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id), -// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypter"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Condition: &kms.CryptoKeyIAMBindingConditionArgs{ -// Title: pulumi.String("expires_after_2019_12_31"), -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewCryptoKeyIAMMember(ctx, "cryptoKey", &kms.CryptoKeyIAMMemberArgs{ -// CryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id), -// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypter"), -// Member: pulumi.String("user:jane@example.com"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewCryptoKeyIAMMember(ctx, "cryptoKey", &kms.CryptoKeyIAMMemberArgs{ -// CryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id), -// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypter"), -// Member: pulumi.String("user:jane@example.com"), -// Condition: &kms.CryptoKeyIAMMemberConditionArgs{ -// Title: pulumi.String("expires_after_2019_12_31"), -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/kms/cryptoKeyIAMMember.go b/sdk/go/gcp/kms/cryptoKeyIAMMember.go index 8cc14310ce..5b0e446818 100644 --- a/sdk/go/gcp/kms/cryptoKeyIAMMember.go +++ b/sdk/go/gcp/kms/cryptoKeyIAMMember.go @@ -11,228 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: -// -// * `kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. -// * `kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. -// * `kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. -// -// > **Note:** `kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `kms.CryptoKeyIAMBinding` and `kms.CryptoKeyIAMMember` or they will fight over what your policy should be. -// -// > **Note:** `kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// keyring, err := kms.NewKeyRing(ctx, "keyring", &kms.KeyRingArgs{ -// Location: pulumi.String("global"), -// }) -// if err != nil { -// return err -// } -// key, err := kms.NewCryptoKey(ctx, "key", &kms.CryptoKeyArgs{ -// KeyRing: keyring.ID(), -// RotationPeriod: pulumi.String("100000s"), -// }) -// if err != nil { -// return err -// } -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/cloudkms.cryptoKeyEncrypter", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = kms.NewCryptoKeyIAMPolicy(ctx, "cryptoKey", &kms.CryptoKeyIAMPolicyArgs{ -// CryptoKeyId: key.ID(), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Condition: { -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// Title: "expires_after_2019_12_31", -// }, -// Members: []string{ -// "user:jane@example.com", -// }, -// Role: "roles/cloudkms.cryptoKeyEncrypter", -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewCryptoKeyIAMBinding(ctx, "cryptoKey", &kms.CryptoKeyIAMBindingArgs{ -// CryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id), -// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypter"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewCryptoKeyIAMBinding(ctx, "cryptoKey", &kms.CryptoKeyIAMBindingArgs{ -// CryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id), -// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypter"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Condition: &kms.CryptoKeyIAMBindingConditionArgs{ -// Title: pulumi.String("expires_after_2019_12_31"), -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewCryptoKeyIAMMember(ctx, "cryptoKey", &kms.CryptoKeyIAMMemberArgs{ -// CryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id), -// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypter"), -// Member: pulumi.String("user:jane@example.com"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewCryptoKeyIAMMember(ctx, "cryptoKey", &kms.CryptoKeyIAMMemberArgs{ -// CryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id), -// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypter"), -// Member: pulumi.String("user:jane@example.com"), -// Condition: &kms.CryptoKeyIAMMemberConditionArgs{ -// Title: pulumi.String("expires_after_2019_12_31"), -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/kms/cryptoKeyIAMPolicy.go b/sdk/go/gcp/kms/cryptoKeyIAMPolicy.go index 71c184a3f4..6467169d60 100644 --- a/sdk/go/gcp/kms/cryptoKeyIAMPolicy.go +++ b/sdk/go/gcp/kms/cryptoKeyIAMPolicy.go @@ -11,228 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: -// -// * `kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. -// * `kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. -// * `kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. -// -// > **Note:** `kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `kms.CryptoKeyIAMBinding` and `kms.CryptoKeyIAMMember` or they will fight over what your policy should be. -// -// > **Note:** `kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// keyring, err := kms.NewKeyRing(ctx, "keyring", &kms.KeyRingArgs{ -// Location: pulumi.String("global"), -// }) -// if err != nil { -// return err -// } -// key, err := kms.NewCryptoKey(ctx, "key", &kms.CryptoKeyArgs{ -// KeyRing: keyring.ID(), -// RotationPeriod: pulumi.String("100000s"), -// }) -// if err != nil { -// return err -// } -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/cloudkms.cryptoKeyEncrypter", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = kms.NewCryptoKeyIAMPolicy(ctx, "cryptoKey", &kms.CryptoKeyIAMPolicyArgs{ -// CryptoKeyId: key.ID(), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Condition: { -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// Title: "expires_after_2019_12_31", -// }, -// Members: []string{ -// "user:jane@example.com", -// }, -// Role: "roles/cloudkms.cryptoKeyEncrypter", -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewCryptoKeyIAMBinding(ctx, "cryptoKey", &kms.CryptoKeyIAMBindingArgs{ -// CryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id), -// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypter"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewCryptoKeyIAMBinding(ctx, "cryptoKey", &kms.CryptoKeyIAMBindingArgs{ -// CryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id), -// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypter"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Condition: &kms.CryptoKeyIAMBindingConditionArgs{ -// Title: pulumi.String("expires_after_2019_12_31"), -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewCryptoKeyIAMMember(ctx, "cryptoKey", &kms.CryptoKeyIAMMemberArgs{ -// CryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id), -// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypter"), -// Member: pulumi.String("user:jane@example.com"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewCryptoKeyIAMMember(ctx, "cryptoKey", &kms.CryptoKeyIAMMemberArgs{ -// CryptoKeyId: pulumi.Any(google_kms_crypto_key.Key.Id), -// Role: pulumi.String("roles/cloudkms.cryptoKeyEncrypter"), -// Member: pulumi.String("user:jane@example.com"), -// Condition: &kms.CryptoKeyIAMMemberConditionArgs{ -// Title: pulumi.String("expires_after_2019_12_31"), -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/kms/keyRing.go b/sdk/go/gcp/kms/keyRing.go index fe53b69e03..3d4eb9322b 100644 --- a/sdk/go/gcp/kms/keyRing.go +++ b/sdk/go/gcp/kms/keyRing.go @@ -11,18 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A `KeyRing` is a toplevel logical grouping of `CryptoKeys`. -// -// > **Note:** KeyRings cannot be deleted from Google Cloud Platform. -// Destroying a provider-managed KeyRing will remove it from state but -// *will not delete the resource from the project.* -// -// To get more information about KeyRing, see: -// -// * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings) -// * How-to Guides -// - [Creating a key ring](https://cloud.google.com/kms/docs/creating-keys#create_a_key_ring) -// // ## Example Usage // ### Kms Key Ring Basic // diff --git a/sdk/go/gcp/kms/keyRingIAMBinding.go b/sdk/go/gcp/kms/keyRingIAMBinding.go index e5eda3f7f5..6a387fb68f 100644 --- a/sdk/go/gcp/kms/keyRingIAMBinding.go +++ b/sdk/go/gcp/kms/keyRingIAMBinding.go @@ -11,241 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: -// -// * `kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. -// * `kms.KeyRingIAMBinding`: 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 key ring are preserved. -// * `kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. -// -// > **Note:** `kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `kms.KeyRingIAMBinding` and `kms.KeyRingIAMMember` or they will fight over what your policy should be. -// -// > **Note:** `kms.KeyRingIAMBinding` resources **can be** used in conjunction with `kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_kms\_key\_ring\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// keyring, err := kms.NewKeyRing(ctx, "keyring", &kms.KeyRingArgs{ -// Location: pulumi.String("global"), -// }) -// if err != nil { -// return err -// } -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = kms.NewKeyRingIAMPolicy(ctx, "keyRing", &kms.KeyRingIAMPolicyArgs{ -// KeyRingId: keyring.ID(), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// keyring, err := kms.NewKeyRing(ctx, "keyring", &kms.KeyRingArgs{ -// Location: pulumi.String("global"), -// }) -// if err != nil { -// return err -// } -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// Condition: { -// Title: "expires_after_2019_12_31", -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = kms.NewKeyRingIAMPolicy(ctx, "keyRing", &kms.KeyRingIAMPolicyArgs{ -// KeyRingId: keyring.ID(), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_kms\_key\_ring\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewKeyRingIAMBinding(ctx, "keyRing", &kms.KeyRingIAMBindingArgs{ -// KeyRingId: pulumi.String("your-key-ring-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/cloudkms.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewKeyRingIAMBinding(ctx, "keyRing", &kms.KeyRingIAMBindingArgs{ -// Condition: &kms.KeyRingIAMBindingConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// KeyRingId: pulumi.String("your-key-ring-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/cloudkms.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_kms\_key\_ring\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewKeyRingIAMMember(ctx, "keyRing", &kms.KeyRingIAMMemberArgs{ -// KeyRingId: pulumi.String("your-key-ring-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/cloudkms.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewKeyRingIAMMember(ctx, "keyRing", &kms.KeyRingIAMMemberArgs{ -// Condition: &kms.KeyRingIAMMemberConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// KeyRingId: pulumi.String("your-key-ring-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/cloudkms.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/kms/keyRingIAMMember.go b/sdk/go/gcp/kms/keyRingIAMMember.go index e1710968ac..180118c986 100644 --- a/sdk/go/gcp/kms/keyRingIAMMember.go +++ b/sdk/go/gcp/kms/keyRingIAMMember.go @@ -11,241 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: -// -// * `kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. -// * `kms.KeyRingIAMBinding`: 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 key ring are preserved. -// * `kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. -// -// > **Note:** `kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `kms.KeyRingIAMBinding` and `kms.KeyRingIAMMember` or they will fight over what your policy should be. -// -// > **Note:** `kms.KeyRingIAMBinding` resources **can be** used in conjunction with `kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_kms\_key\_ring\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// keyring, err := kms.NewKeyRing(ctx, "keyring", &kms.KeyRingArgs{ -// Location: pulumi.String("global"), -// }) -// if err != nil { -// return err -// } -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = kms.NewKeyRingIAMPolicy(ctx, "keyRing", &kms.KeyRingIAMPolicyArgs{ -// KeyRingId: keyring.ID(), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// keyring, err := kms.NewKeyRing(ctx, "keyring", &kms.KeyRingArgs{ -// Location: pulumi.String("global"), -// }) -// if err != nil { -// return err -// } -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// Condition: { -// Title: "expires_after_2019_12_31", -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = kms.NewKeyRingIAMPolicy(ctx, "keyRing", &kms.KeyRingIAMPolicyArgs{ -// KeyRingId: keyring.ID(), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_kms\_key\_ring\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewKeyRingIAMBinding(ctx, "keyRing", &kms.KeyRingIAMBindingArgs{ -// KeyRingId: pulumi.String("your-key-ring-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/cloudkms.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewKeyRingIAMBinding(ctx, "keyRing", &kms.KeyRingIAMBindingArgs{ -// Condition: &kms.KeyRingIAMBindingConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// KeyRingId: pulumi.String("your-key-ring-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/cloudkms.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_kms\_key\_ring\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewKeyRingIAMMember(ctx, "keyRing", &kms.KeyRingIAMMemberArgs{ -// KeyRingId: pulumi.String("your-key-ring-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/cloudkms.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewKeyRingIAMMember(ctx, "keyRing", &kms.KeyRingIAMMemberArgs{ -// Condition: &kms.KeyRingIAMMemberConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// KeyRingId: pulumi.String("your-key-ring-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/cloudkms.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/kms/keyRingIAMPolicy.go b/sdk/go/gcp/kms/keyRingIAMPolicy.go index 3cf7d7266e..d7e929c9d7 100644 --- a/sdk/go/gcp/kms/keyRingIAMPolicy.go +++ b/sdk/go/gcp/kms/keyRingIAMPolicy.go @@ -11,241 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: -// -// * `kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. -// * `kms.KeyRingIAMBinding`: 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 key ring are preserved. -// * `kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. -// -// > **Note:** `kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `kms.KeyRingIAMBinding` and `kms.KeyRingIAMMember` or they will fight over what your policy should be. -// -// > **Note:** `kms.KeyRingIAMBinding` resources **can be** used in conjunction with `kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_kms\_key\_ring\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// keyring, err := kms.NewKeyRing(ctx, "keyring", &kms.KeyRingArgs{ -// Location: pulumi.String("global"), -// }) -// if err != nil { -// return err -// } -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = kms.NewKeyRingIAMPolicy(ctx, "keyRing", &kms.KeyRingIAMPolicyArgs{ -// KeyRingId: keyring.ID(), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// keyring, err := kms.NewKeyRing(ctx, "keyring", &kms.KeyRingArgs{ -// Location: pulumi.String("global"), -// }) -// if err != nil { -// return err -// } -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// Condition: { -// Title: "expires_after_2019_12_31", -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = kms.NewKeyRingIAMPolicy(ctx, "keyRing", &kms.KeyRingIAMPolicyArgs{ -// KeyRingId: keyring.ID(), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_kms\_key\_ring\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewKeyRingIAMBinding(ctx, "keyRing", &kms.KeyRingIAMBindingArgs{ -// KeyRingId: pulumi.String("your-key-ring-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/cloudkms.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewKeyRingIAMBinding(ctx, "keyRing", &kms.KeyRingIAMBindingArgs{ -// Condition: &kms.KeyRingIAMBindingConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// KeyRingId: pulumi.String("your-key-ring-id"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Role: pulumi.String("roles/cloudkms.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_kms\_key\_ring\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewKeyRingIAMMember(ctx, "keyRing", &kms.KeyRingIAMMemberArgs{ -// KeyRingId: pulumi.String("your-key-ring-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/cloudkms.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/kms" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := kms.NewKeyRingIAMMember(ctx, "keyRing", &kms.KeyRingIAMMemberArgs{ -// Condition: &kms.KeyRingIAMMemberConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// KeyRingId: pulumi.String("your-key-ring-id"), -// Member: pulumi.String("user:jane@example.com"), -// Role: pulumi.String("roles/cloudkms.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/kms/keyRingImportJob.go b/sdk/go/gcp/kms/keyRingImportJob.go index fe12790672..56116eb409 100644 --- a/sdk/go/gcp/kms/keyRingImportJob.go +++ b/sdk/go/gcp/kms/keyRingImportJob.go @@ -11,21 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A `KeyRingImportJob` can be used to create `CryptoKeys` and `CryptoKeyVersions` using pre-existing -// key material, generated outside of Cloud KMS. A `KeyRingImportJob` expires 3 days after it is created. -// Once expired, Cloud KMS will no longer be able to import or unwrap any key material that -// was wrapped with the `KeyRingImportJob`'s public key. -// -// > **Note:** KeyRingImportJobs cannot be deleted from Google Cloud Platform. -// Destroying a provider-managed KeyRingImportJob will remove it from state but -// *will not delete the resource from the project.* -// -// To get more information about KeyRingImportJob, see: -// -// * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.importJobs) -// * How-to Guides -// - [Importing a key](https://cloud.google.com/kms/docs/importing-a-key) -// // ## Example Usage // // ## Import diff --git a/sdk/go/gcp/kms/secretCiphertext.go b/sdk/go/gcp/kms/secretCiphertext.go index 6f71a79594..96043dc3ab 100644 --- a/sdk/go/gcp/kms/secretCiphertext.go +++ b/sdk/go/gcp/kms/secretCiphertext.go @@ -11,21 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Encrypts secret data with Google Cloud KMS and provides access to the ciphertext. -// -// > **NOTE:** Using this resource will allow you to conceal secret data within your -// resource definitions, but it does not take care of protecting that data in the -// logging output, plan output, or state output. Please take care to secure your secret -// data outside of resource definitions. -// -// To get more information about SecretCiphertext, see: -// -// * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt) -// * How-to Guides -// - [Encrypting and decrypting data with a symmetric key](https://cloud.google.com/kms/docs/encrypt-decrypt) -// -// > **Warning:** All arguments including `plaintext` and `additionalAuthenticatedData` will be stored in the raw state as plain-text. -// // ## Example Usage // ### Kms Secret Ciphertext Basic // diff --git a/sdk/go/gcp/logging/billingAccountBucketConfig.go b/sdk/go/gcp/logging/billingAccountBucketConfig.go index f7d84ce279..744835c45d 100644 --- a/sdk/go/gcp/logging/billingAccountBucketConfig.go +++ b/sdk/go/gcp/logging/billingAccountBucketConfig.go @@ -11,12 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Manages a billing account level logging bucket config. For more information see -// [the official logging documentation](https://cloud.google.com/logging/docs/) and -// [Storing Logs](https://cloud.google.com/logging/docs/storage). -// -// > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/logging/billingAccountSink.go b/sdk/go/gcp/logging/billingAccountSink.go index ad854f3ad9..de581df401 100644 --- a/sdk/go/gcp/logging/billingAccountSink.go +++ b/sdk/go/gcp/logging/billingAccountSink.go @@ -11,15 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/billingAccounts.sinks) -// * How-to Guides -// - [Exporting Logs](https://cloud.google.com/logging/docs/export) -// -// > **Note** You must have the "Logs Configuration Writer" IAM role (`roles/logging.configWriter`) -// [granted on the billing account](https://cloud.google.com/billing/reference/rest/v1/billingAccounts/getIamPolicy) to -// the credentials used with this provider. [IAM roles granted on a billing account](https://cloud.google.com/billing/docs/how-to/billing-access) are separate from the -// typical IAM roles granted on a project. -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/logging/folderBucketConfig.go b/sdk/go/gcp/logging/folderBucketConfig.go index e7159cf915..4a349ed85c 100644 --- a/sdk/go/gcp/logging/folderBucketConfig.go +++ b/sdk/go/gcp/logging/folderBucketConfig.go @@ -11,12 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Manages a folder-level logging bucket config. For more information see -// [the official logging documentation](https://cloud.google.com/logging/docs/) and -// [Storing Logs](https://cloud.google.com/logging/docs/storage). -// -// > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/logging/folderExclusion.go b/sdk/go/gcp/logging/folderExclusion.go index 5f4abee2ab..1b154f2dc8 100644 --- a/sdk/go/gcp/logging/folderExclusion.go +++ b/sdk/go/gcp/logging/folderExclusion.go @@ -11,14 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Manages a folder-level logging exclusion. For more information see: -// -// * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/folders.exclusions) -// * How-to Guides -// - [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) -// -// > You can specify exclusions for log sinks created by the provider by using the exclusions field of `logging.FolderSink` -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/logging/organizationBucketConfig.go b/sdk/go/gcp/logging/organizationBucketConfig.go index 3f9b86add4..5a22b1c55e 100644 --- a/sdk/go/gcp/logging/organizationBucketConfig.go +++ b/sdk/go/gcp/logging/organizationBucketConfig.go @@ -11,12 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Manages a organization-level logging bucket config. For more information see -// [the official logging documentation](https://cloud.google.com/logging/docs/) and -// [Storing Logs](https://cloud.google.com/logging/docs/storage). -// -// > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/logging/organizationExclusion.go b/sdk/go/gcp/logging/organizationExclusion.go index 2c3ea7123f..252b09ee87 100644 --- a/sdk/go/gcp/logging/organizationExclusion.go +++ b/sdk/go/gcp/logging/organizationExclusion.go @@ -11,14 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Manages an organization-level logging exclusion. For more information see: -// -// * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/organizations.exclusions) -// * How-to Guides -// - [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) -// -// > You can specify exclusions for log sinks created by the provider by using the exclusions field of `logging.OrganizationSink` -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/logging/projectBucketConfig.go b/sdk/go/gcp/logging/projectBucketConfig.go index f10a6f22a7..c29d483d51 100644 --- a/sdk/go/gcp/logging/projectBucketConfig.go +++ b/sdk/go/gcp/logging/projectBucketConfig.go @@ -11,12 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Manages a project-level logging bucket config. For more information see -// [the official logging documentation](https://cloud.google.com/logging/docs/) and -// [Storing Logs](https://cloud.google.com/logging/docs/storage). -// -// > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/logging/projectExclusion.go b/sdk/go/gcp/logging/projectExclusion.go index cf5998790a..febdfc6221 100644 --- a/sdk/go/gcp/logging/projectExclusion.go +++ b/sdk/go/gcp/logging/projectExclusion.go @@ -11,14 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Manages a project-level logging exclusion. For more information see: -// -// * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.exclusions) -// * How-to Guides -// - [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) -// -// > You can specify exclusions for log sinks created by the provider by using the exclusions field of `logging.ProjectSink` -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/monitoring/notificationChannel.go b/sdk/go/gcp/monitoring/notificationChannel.go index d581fb7cf1..dd37a1a7e4 100644 --- a/sdk/go/gcp/monitoring/notificationChannel.go +++ b/sdk/go/gcp/monitoring/notificationChannel.go @@ -11,33 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A NotificationChannel is a medium through which an alert is delivered -// when a policy violation is detected. Examples of channels include email, SMS, -// and third-party messaging applications. Fields containing sensitive information -// like authentication tokens or contact info are only partially populated on retrieval. -// -// Notification Channels are designed to be flexible and are made up of a supported `type` -// and labels to configure that channel. Each `type` has specific labels that need to be -// present for that channel to be correctly configured. The labels that are required to be -// present for one channel `type` are often different than those required for another. -// Due to these loose constraints it's often best to set up a channel through the UI -// and import it to the provider when setting up a brand new channel type to determine which -// labels are required. -// -// A list of supported channels per project the `list` endpoint can be -// accessed programmatically or through the api explorer at https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannelDescriptors/list . -// This provides the channel type and all of the required labels that must be passed. -// -// To get more information about NotificationChannel, see: -// -// * [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannels) -// * How-to Guides -// - [Notification Options](https://cloud.google.com/monitoring/support/notification-options) -// - [Monitoring API Documentation](https://cloud.google.com/monitoring/api/v3/) -// -// > **Warning:** All arguments including `sensitive_labels.auth_token`, `sensitive_labels.password`, and `sensitive_labels.service_key` will be stored in the raw -// state as plain-text. -// // ## Example Usage // ### Notification Channel Basic // @@ -126,12 +99,10 @@ type NotificationChannel struct { // referenced by an existing alerting policy will fail to be // deleted in a delete operation. ForceDelete pulumi.BoolPtrOutput `pulumi:"forceDelete"` - // Configuration fields that define the channel and its behavior. The - // permissible and required labels are specified in the - // NotificationChannelDescriptor corresponding to the type field. - // Labels with sensitive data are obfuscated by the API and therefore the provider cannot - // determine if there are upstream changes to these fields. They can also be configured via - // the sensitiveLabels block, but cannot be configured in both places. + // Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + // NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + // therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + // sensitive_labels block, but cannot be configured in both places. Labels pulumi.StringMapOutput `pulumi:"labels"` // The full REST resource name for this channel. The syntax is: // projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID] @@ -200,12 +171,10 @@ type notificationChannelState struct { // referenced by an existing alerting policy will fail to be // deleted in a delete operation. ForceDelete *bool `pulumi:"forceDelete"` - // Configuration fields that define the channel and its behavior. The - // permissible and required labels are specified in the - // NotificationChannelDescriptor corresponding to the type field. - // Labels with sensitive data are obfuscated by the API and therefore the provider cannot - // determine if there are upstream changes to these fields. They can also be configured via - // the sensitiveLabels block, but cannot be configured in both places. + // Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + // NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + // therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + // sensitive_labels block, but cannot be configured in both places. Labels map[string]string `pulumi:"labels"` // The full REST resource name for this channel. The syntax is: // projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID] @@ -243,12 +212,10 @@ type NotificationChannelState struct { // referenced by an existing alerting policy will fail to be // deleted in a delete operation. ForceDelete pulumi.BoolPtrInput - // Configuration fields that define the channel and its behavior. The - // permissible and required labels are specified in the - // NotificationChannelDescriptor corresponding to the type field. - // Labels with sensitive data are obfuscated by the API and therefore the provider cannot - // determine if there are upstream changes to these fields. They can also be configured via - // the sensitiveLabels block, but cannot be configured in both places. + // Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + // NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + // therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + // sensitive_labels block, but cannot be configured in both places. Labels pulumi.StringMapInput // The full REST resource name for this channel. The syntax is: // projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID] @@ -290,12 +257,10 @@ type notificationChannelArgs struct { // referenced by an existing alerting policy will fail to be // deleted in a delete operation. ForceDelete *bool `pulumi:"forceDelete"` - // Configuration fields that define the channel and its behavior. The - // permissible and required labels are specified in the - // NotificationChannelDescriptor corresponding to the type field. - // Labels with sensitive data are obfuscated by the API and therefore the provider cannot - // determine if there are upstream changes to these fields. They can also be configured via - // the sensitiveLabels block, but cannot be configured in both places. + // Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + // NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + // therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + // sensitive_labels block, but cannot be configured in both places. Labels map[string]string `pulumi:"labels"` // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. @@ -328,12 +293,10 @@ type NotificationChannelArgs struct { // referenced by an existing alerting policy will fail to be // deleted in a delete operation. ForceDelete pulumi.BoolPtrInput - // Configuration fields that define the channel and its behavior. The - // permissible and required labels are specified in the - // NotificationChannelDescriptor corresponding to the type field. - // Labels with sensitive data are obfuscated by the API and therefore the provider cannot - // determine if there are upstream changes to these fields. They can also be configured via - // the sensitiveLabels block, but cannot be configured in both places. + // Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + // NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + // therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + // sensitive_labels block, but cannot be configured in both places. Labels pulumi.StringMapInput // The ID of the project in which the resource belongs. // If it is not provided, the provider project is used. @@ -463,12 +426,10 @@ func (o NotificationChannelOutput) ForceDelete() pulumi.BoolPtrOutput { return o.ApplyT(func(v *NotificationChannel) pulumi.BoolPtrOutput { return v.ForceDelete }).(pulumi.BoolPtrOutput) } -// Configuration fields that define the channel and its behavior. The -// permissible and required labels are specified in the -// NotificationChannelDescriptor corresponding to the type field. -// Labels with sensitive data are obfuscated by the API and therefore the provider cannot -// determine if there are upstream changes to these fields. They can also be configured via -// the sensitiveLabels block, but cannot be configured in both places. +// Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the +// NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and +// therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the +// sensitive_labels block, but cannot be configured in both places. func (o NotificationChannelOutput) Labels() pulumi.StringMapOutput { return o.ApplyT(func(v *NotificationChannel) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) } diff --git a/sdk/go/gcp/monitoring/slo.go b/sdk/go/gcp/monitoring/slo.go index 0db26a8da5..5ce358bca5 100644 --- a/sdk/go/gcp/monitoring/slo.go +++ b/sdk/go/gcp/monitoring/slo.go @@ -50,7 +50,7 @@ import ( // _, err = monitoring.NewSlo(ctx, "appengSlo", &monitoring.SloArgs{ // Service: *pulumi.String(_default.ServiceId), // SloId: pulumi.String("ae-slo"), -// DisplayName: pulumi.String("Test SLO for App Engine"), +// DisplayName: pulumi.String("Terraform Test SLO for App Engine"), // Goal: pulumi.Float64(0.9), // CalendarPeriod: pulumi.String("DAY"), // BasicSli: &monitoring.SloBasicSliArgs{ @@ -95,7 +95,7 @@ import ( // _, err = monitoring.NewSlo(ctx, "requestBasedSlo", &monitoring.SloArgs{ // Service: customsrv.ServiceId, // SloId: pulumi.String("consumed-api-slo"), -// DisplayName: pulumi.String("Test SLO with request based SLI (good total ratio)"), +// DisplayName: pulumi.String("Terraform Test SLO with request based SLI (good total ratio)"), // Goal: pulumi.Float64(0.9), // RollingPeriodDays: pulumi.Int(30), // RequestBasedSli: &monitoring.SloRequestBasedSliArgs{ diff --git a/sdk/go/gcp/monitoring/uptimeCheckConfig.go b/sdk/go/gcp/monitoring/uptimeCheckConfig.go index 777b0aeb4f..fcc9efb274 100644 --- a/sdk/go/gcp/monitoring/uptimeCheckConfig.go +++ b/sdk/go/gcp/monitoring/uptimeCheckConfig.go @@ -11,17 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// This message configures which resources and services to monitor for availability. -// -// To get more information about UptimeCheckConfig, see: -// -// * [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.uptimeCheckConfigs) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/monitoring/uptime-checks/) -// -// > **Warning:** All arguments including `http_check.auth_info.password` will be stored in the raw -// state as plain-text. -// // ## Example Usage // ### Uptime Check Config Http // diff --git a/sdk/go/gcp/notebooks/instance.go b/sdk/go/gcp/notebooks/instance.go index 3bf5e0e64e..6ffcf9701d 100644 --- a/sdk/go/gcp/notebooks/instance.go +++ b/sdk/go/gcp/notebooks/instance.go @@ -77,6 +77,7 @@ import ( // MachineType: pulumi.String("e2-medium"), // Metadata: pulumi.StringMap{ // "proxy-mode": pulumi.String("service_account"), +// "terraform": pulumi.String("true"), // }, // }) // if err != nil { @@ -171,6 +172,9 @@ import ( // Labels: pulumi.StringMap{ // "k": pulumi.String("val"), // }, +// Metadata: pulumi.StringMap{ +// "terraform": pulumi.String("true"), +// }, // }) // if err != nil { // return err diff --git a/sdk/go/gcp/organizations/folder.go b/sdk/go/gcp/organizations/folder.go index aab666eb46..a4f0b14640 100644 --- a/sdk/go/gcp/organizations/folder.go +++ b/sdk/go/gcp/organizations/folder.go @@ -11,20 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Allows management of a Google Cloud Platform folder. For more information see -// [the official documentation](https://cloud.google.com/resource-manager/docs/creating-managing-folders) -// and -// [API](https://cloud.google.com/resource-manager/reference/rest/v2/folders). -// -// A folder can contain projects, other folders, or a combination of both. You can use folders to group projects under an organization in a hierarchy. For example, your organization might contain multiple departments, each with its own set of Cloud Platform resources. Folders allows you to group these resources on a per-department basis. Folders are used to group resources that share common IAM policies. -// -// Folders created live inside an Organization. See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. -// -// The service account used to run the provider when creating a `organizations.Folder` -// resource must have `roles/resourcemanager.folderCreator`. See the -// [Access Control for Folders Using IAM](https://cloud.google.com/resource-manager/docs/access-control-folders) -// doc for more information. -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/organizations/iamAuditConfig.go b/sdk/go/gcp/organizations/iamAuditConfig.go index 4831cd0366..4b0688ac0f 100644 --- a/sdk/go/gcp/organizations/iamAuditConfig.go +++ b/sdk/go/gcp/organizations/iamAuditConfig.go @@ -11,50 +11,53 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Allows management of audit logging config for a given service for a Google Cloud Platform Organization. +// ## Import +// +// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. +// +// This member resource can be imported using the `org_id`, role, and member e.g. // -// ## Example Usage +// ```sh // -// ```go -// package main +// $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-orgid roles/viewer user:foo@example.com" // -// import ( +// ``` // -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// IAM binding imports use space-delimited identifiers; the resource in question and the role. // -// ) +// This binding resource can be imported using the `org_id` and role, e.g. // -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.NewIamAuditConfig(ctx, "config", &organizations.IamAuditConfigArgs{ -// AuditLogConfigs: organizations.IamAuditConfigAuditLogConfigArray{ -// &organizations.IamAuditConfigAuditLogConfigArgs{ -// ExemptedMembers: pulumi.StringArray{ -// pulumi.String("user:joebloggs@hashicorp.com"), -// }, -// LogType: pulumi.String("DATA_READ"), -// }, -// }, -// OrgId: pulumi.String("your-organization-id"), -// Service: pulumi.String("allServices"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } +// ```sh +// +// $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-org-id roles/viewer" // // ``` // -// ## Import +// IAM policy imports use the identifier of the resource in question. +// +// This policy resource can be imported using the `org_id`. +// +// ```sh +// +// $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization your-org-id +// +// ``` +// +// IAM audit config imports use the identifier of the resource in question and the service, e.g. +// +// ```sh +// +// $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-organization-id foo.googleapis.com" +// +// ``` +// +// -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the // -// IAM audit config imports use the identifier of the resource in question and the service, e.g. +// full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure // // ```sh // -// $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig config "your-organization-id foo.googleapis.com" +// $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig to include the title of condition, e.g. `google_organization_iam_binding.my_organization "your-org-id roles/{{role_id}} condition-title"` // // ``` type IamAuditConfig struct { @@ -62,9 +65,11 @@ type IamAuditConfig struct { // The configuration for logging of each type of permission. This can be specified multiple times. Structure is documented below. AuditLogConfigs IamAuditConfigAuditLogConfigArrayOutput `pulumi:"auditLogConfigs"` - // The etag of iam policy + // (Computed) The etag of the organization's IAM policy. Etag pulumi.StringOutput `pulumi:"etag"` - // The numeric ID of the organization in which you want to manage the audit logging config. + // The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + // Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + // will not be inferred from the provider. OrgId pulumi.StringOutput `pulumi:"orgId"` // Service which will be enabled for audit logging. The special value `allServices` covers all services. Note that if there are google\_organization\_iam\_audit\_config resources covering both `allServices` and a specific service then the union of the two AuditConfigs is used for that service: the `logTypes` specified in each `auditLogConfig` are enabled, and the `exemptedMembers` in each `auditLogConfig` are exempted. Service pulumi.StringOutput `pulumi:"service"` @@ -110,9 +115,11 @@ func GetIamAuditConfig(ctx *pulumi.Context, type iamAuditConfigState struct { // The configuration for logging of each type of permission. This can be specified multiple times. Structure is documented below. AuditLogConfigs []IamAuditConfigAuditLogConfig `pulumi:"auditLogConfigs"` - // The etag of iam policy + // (Computed) The etag of the organization's IAM policy. Etag *string `pulumi:"etag"` - // The numeric ID of the organization in which you want to manage the audit logging config. + // The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + // Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + // will not be inferred from the provider. OrgId *string `pulumi:"orgId"` // Service which will be enabled for audit logging. The special value `allServices` covers all services. Note that if there are google\_organization\_iam\_audit\_config resources covering both `allServices` and a specific service then the union of the two AuditConfigs is used for that service: the `logTypes` specified in each `auditLogConfig` are enabled, and the `exemptedMembers` in each `auditLogConfig` are exempted. Service *string `pulumi:"service"` @@ -121,9 +128,11 @@ type iamAuditConfigState struct { type IamAuditConfigState struct { // The configuration for logging of each type of permission. This can be specified multiple times. Structure is documented below. AuditLogConfigs IamAuditConfigAuditLogConfigArrayInput - // The etag of iam policy + // (Computed) The etag of the organization's IAM policy. Etag pulumi.StringPtrInput - // The numeric ID of the organization in which you want to manage the audit logging config. + // The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + // Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + // will not be inferred from the provider. OrgId pulumi.StringPtrInput // Service which will be enabled for audit logging. The special value `allServices` covers all services. Note that if there are google\_organization\_iam\_audit\_config resources covering both `allServices` and a specific service then the union of the two AuditConfigs is used for that service: the `logTypes` specified in each `auditLogConfig` are enabled, and the `exemptedMembers` in each `auditLogConfig` are exempted. Service pulumi.StringPtrInput @@ -136,7 +145,9 @@ func (IamAuditConfigState) ElementType() reflect.Type { type iamAuditConfigArgs struct { // The configuration for logging of each type of permission. This can be specified multiple times. Structure is documented below. AuditLogConfigs []IamAuditConfigAuditLogConfig `pulumi:"auditLogConfigs"` - // The numeric ID of the organization in which you want to manage the audit logging config. + // The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + // Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + // will not be inferred from the provider. OrgId string `pulumi:"orgId"` // Service which will be enabled for audit logging. The special value `allServices` covers all services. Note that if there are google\_organization\_iam\_audit\_config resources covering both `allServices` and a specific service then the union of the two AuditConfigs is used for that service: the `logTypes` specified in each `auditLogConfig` are enabled, and the `exemptedMembers` in each `auditLogConfig` are exempted. Service string `pulumi:"service"` @@ -146,7 +157,9 @@ type iamAuditConfigArgs struct { type IamAuditConfigArgs struct { // The configuration for logging of each type of permission. This can be specified multiple times. Structure is documented below. AuditLogConfigs IamAuditConfigAuditLogConfigArrayInput - // The numeric ID of the organization in which you want to manage the audit logging config. + // The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + // Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + // will not be inferred from the provider. OrgId pulumi.StringInput // Service which will be enabled for audit logging. The special value `allServices` covers all services. Note that if there are google\_organization\_iam\_audit\_config resources covering both `allServices` and a specific service then the union of the two AuditConfigs is used for that service: the `logTypes` specified in each `auditLogConfig` are enabled, and the `exemptedMembers` in each `auditLogConfig` are exempted. Service pulumi.StringInput @@ -244,12 +257,14 @@ func (o IamAuditConfigOutput) AuditLogConfigs() IamAuditConfigAuditLogConfigArra return o.ApplyT(func(v *IamAuditConfig) IamAuditConfigAuditLogConfigArrayOutput { return v.AuditLogConfigs }).(IamAuditConfigAuditLogConfigArrayOutput) } -// The etag of iam policy +// (Computed) The etag of the organization's IAM policy. func (o IamAuditConfigOutput) Etag() pulumi.StringOutput { return o.ApplyT(func(v *IamAuditConfig) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) } -// The numeric ID of the organization in which you want to manage the audit logging config. +// The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. +// Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it +// will not be inferred from the provider. func (o IamAuditConfigOutput) OrgId() pulumi.StringOutput { return o.ApplyT(func(v *IamAuditConfig) pulumi.StringOutput { return v.OrgId }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/organizations/iambinding.go b/sdk/go/gcp/organizations/iambinding.go index 06eaab4634..0061ac6a25 100644 --- a/sdk/go/gcp/organizations/iambinding.go +++ b/sdk/go/gcp/organizations/iambinding.go @@ -11,77 +11,71 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Allows creation and management of a single binding within IAM policy for -// an existing Google Cloud Platform Organization. -// -// > **Note:** This resource __must not__ be used in conjunction with +// ## Import // -// `organizations.IAMMember` for the __same role__ or they will fight over -// what your policy should be. +// IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. // -// > **Note:** On create, this resource will overwrite members of any existing roles. +// This member resource can be imported using the `org_id`, role, and member e.g. // -// Use `pulumi import` and inspect the `output to ensure -// your existing members are preserved. +// ```sh // -// ## Example Usage +// $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-orgid roles/viewer user:foo@example.com" // -// ```go -// package main +// ``` // -// import ( +// IAM binding imports use space-delimited identifiers; the resource in question and the role. // -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// This binding resource can be imported using the `org_id` and role, e.g. // -// ) +// ```sh // -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.NewIAMBinding(ctx, "binding", &organizations.IAMBindingArgs{ -// Members: pulumi.StringArray{ -// pulumi.String("user:alice@gmail.com"), -// }, -// OrgId: pulumi.String("123456789"), -// Role: pulumi.String("roles/browser"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } +// $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-org-id roles/viewer" // // ``` // -// ## Import +// IAM policy imports use the identifier of the resource in question. +// +// This policy resource can be imported using the `org_id`. +// +// ```sh // -// IAM binding imports use space-delimited identifiers; first the resource in question and then the role. +// $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization your-org-id // -// These bindings can be imported using the `org_id` and role, e.g. +// ``` +// +// IAM audit config imports use the identifier of the resource in question and the service, e.g. // // ```sh // -// $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_org "your-org-id roles/viewer" +// $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-organization-id foo.googleapis.com" // // ``` // // -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the // -// full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. +// full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure +// +// ```sh +// +// $ pulumi import gcp:organizations/iAMBinding:IAMBinding to include the title of condition, e.g. `google_organization_iam_binding.my_organization "your-org-id roles/{{role_id}} condition-title"` +// +// ``` type IAMBinding struct { pulumi.CustomResourceState + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition IAMBindingConditionPtrOutput `pulumi:"condition"` // (Computed) The etag of the organization's IAM policy. - Etag pulumi.StringOutput `pulumi:"etag"` - // A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding + Etag pulumi.StringOutput `pulumi:"etag"` Members pulumi.StringArrayOutput `pulumi:"members"` - // The numeric ID of the organization in which you want to create a custom role. + // The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + // Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + // will not be inferred from the provider. OrgId pulumi.StringOutput `pulumi:"orgId"` // The role that should be applied. Only one // `organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - // `[projects|organizations]/{parent-name}/roles/{role-name}`. + // `organizations/{{org_id}}/roles/{{role_id}}`. Role pulumi.StringOutput `pulumi:"role"` } @@ -123,30 +117,36 @@ func GetIAMBinding(ctx *pulumi.Context, // Input properties used for looking up and filtering IAMBinding resources. type iambindingState struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition *IAMBindingCondition `pulumi:"condition"` // (Computed) The etag of the organization's IAM policy. - Etag *string `pulumi:"etag"` - // A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding + Etag *string `pulumi:"etag"` Members []string `pulumi:"members"` - // The numeric ID of the organization in which you want to create a custom role. + // The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + // Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + // will not be inferred from the provider. OrgId *string `pulumi:"orgId"` // The role that should be applied. Only one // `organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - // `[projects|organizations]/{parent-name}/roles/{role-name}`. + // `organizations/{{org_id}}/roles/{{role_id}}`. Role *string `pulumi:"role"` } type IAMBindingState struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition IAMBindingConditionPtrInput // (Computed) The etag of the organization's IAM policy. - Etag pulumi.StringPtrInput - // A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding + Etag pulumi.StringPtrInput Members pulumi.StringArrayInput - // The numeric ID of the organization in which you want to create a custom role. + // The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + // Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + // will not be inferred from the provider. OrgId pulumi.StringPtrInput // The role that should be applied. Only one // `organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - // `[projects|organizations]/{parent-name}/roles/{role-name}`. + // `organizations/{{org_id}}/roles/{{role_id}}`. Role pulumi.StringPtrInput } @@ -155,27 +155,33 @@ func (IAMBindingState) ElementType() reflect.Type { } type iambindingArgs struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition *IAMBindingCondition `pulumi:"condition"` - // A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - Members []string `pulumi:"members"` - // The numeric ID of the organization in which you want to create a custom role. + Members []string `pulumi:"members"` + // The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + // Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + // will not be inferred from the provider. OrgId string `pulumi:"orgId"` // The role that should be applied. Only one // `organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - // `[projects|organizations]/{parent-name}/roles/{role-name}`. + // `organizations/{{org_id}}/roles/{{role_id}}`. Role string `pulumi:"role"` } // The set of arguments for constructing a IAMBinding resource. type IAMBindingArgs struct { + // An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + // Structure is documented below. Condition IAMBindingConditionPtrInput - // A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - Members pulumi.StringArrayInput - // The numeric ID of the organization in which you want to create a custom role. + Members pulumi.StringArrayInput + // The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + // Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + // will not be inferred from the provider. OrgId pulumi.StringInput // The role that should be applied. Only one // `organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - // `[projects|organizations]/{parent-name}/roles/{role-name}`. + // `organizations/{{org_id}}/roles/{{role_id}}`. Role pulumi.StringInput } @@ -266,6 +272,8 @@ func (o IAMBindingOutput) ToIAMBindingOutputWithContext(ctx context.Context) IAM return o } +// An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. +// Structure is documented below. func (o IAMBindingOutput) Condition() IAMBindingConditionPtrOutput { return o.ApplyT(func(v *IAMBinding) IAMBindingConditionPtrOutput { return v.Condition }).(IAMBindingConditionPtrOutput) } @@ -275,19 +283,20 @@ func (o IAMBindingOutput) Etag() pulumi.StringOutput { return o.ApplyT(func(v *IAMBinding) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) } -// A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding func (o IAMBindingOutput) Members() pulumi.StringArrayOutput { return o.ApplyT(func(v *IAMBinding) pulumi.StringArrayOutput { return v.Members }).(pulumi.StringArrayOutput) } -// The numeric ID of the organization in which you want to create a custom role. +// The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. +// Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it +// will not be inferred from the provider. func (o IAMBindingOutput) OrgId() pulumi.StringOutput { return o.ApplyT(func(v *IAMBinding) pulumi.StringOutput { return v.OrgId }).(pulumi.StringOutput) } // The role that should be applied. Only one // `organizations.IAMBinding` can be used per role. Note that custom roles must be of the format -// `[projects|organizations]/{parent-name}/roles/{role-name}`. +// `organizations/{{org_id}}/roles/{{role_id}}`. func (o IAMBindingOutput) Role() pulumi.StringOutput { return o.ApplyT(func(v *IAMBinding) pulumi.StringOutput { return v.Role }).(pulumi.StringOutput) } diff --git a/sdk/go/gcp/organizations/iamcustomRole.go b/sdk/go/gcp/organizations/iamcustomRole.go index 60162b1b12..475838b4ff 100644 --- a/sdk/go/gcp/organizations/iamcustomRole.go +++ b/sdk/go/gcp/organizations/iamcustomRole.go @@ -11,19 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Allows management of a customized Cloud IAM organization role. For more information see -// [the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles) -// and -// [API](https://cloud.google.com/iam/reference/rest/v1/organizations.roles). -// -// > **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise -// -// from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the -// same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted -// after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is -// made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all -// by the provider, and new roles cannot share that name. -// // ## Example Usage // // This snippet creates a customized IAM organization role. diff --git a/sdk/go/gcp/organizations/iammember.go b/sdk/go/gcp/organizations/iammember.go index 9a47313c83..2d5c2a94ff 100644 --- a/sdk/go/gcp/organizations/iammember.go +++ b/sdk/go/gcp/organizations/iammember.go @@ -11,281 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case: -// -// * `organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached. -// * `organizations.IAMBinding`: 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 organization are preserved. -// * `organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved. -// * `organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. -// -// > **Note:** `organizations.IAMPolicy` **cannot** be used in conjunction with `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig` or they will fight over what your policy should be. -// -// > **Note:** `organizations.IAMBinding` resources **can be** used in conjunction with `organizations.IAMMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_organization\_iam\_policy -// -// !> **Warning:** New organizations have several default policies which will, -// -// without extreme caution, be **overwritten** by use of this resource. -// The safest alternative is to use multiple `organizations.IAMBinding` -// resources. This resource makes it easy to remove your own access to -// an organization, which will require a call to Google Support to have -// fixed, and can take multiple days to resolve. -// -// In general, this resource should only be used with organizations -// fully managed by this provider.I f you do use this resource, -// the best way to be sure that you are not making dangerous changes is to start -// by **importing** your existing policy, and examining the diff very closely. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = organizations.NewIAMPolicy(ctx, "organization", &organizations.IAMPolicyArgs{ -// OrgId: pulumi.String("your-organization-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Condition: { -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// Title: "expires_after_2019_12_31", -// }, -// Members: []string{ -// "user:jane@example.com", -// }, -// Role: "roles/editor", -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = organizations.NewIAMPolicy(ctx, "organization", &organizations.IAMPolicyArgs{ -// OrgId: pulumi.String("your-organization-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_organization\_iam\_binding -// -// > **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.NewIAMBinding(ctx, "organization", &organizations.IAMBindingArgs{ -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// OrgId: pulumi.String("your-organization-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.NewIAMBinding(ctx, "organization", &organizations.IAMBindingArgs{ -// Condition: &organizations.IAMBindingConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// OrgId: pulumi.String("your-organization-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_organization\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.NewIAMMember(ctx, "organization", &organizations.IAMMemberArgs{ -// Member: pulumi.String("user:jane@example.com"), -// OrgId: pulumi.String("your-organization-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.NewIAMMember(ctx, "organization", &organizations.IAMMemberArgs{ -// Condition: &organizations.IAMMemberConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Member: pulumi.String("user:jane@example.com"), -// OrgId: pulumi.String("your-organization-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_organization\_iam\_audit\_config -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.NewIamAuditConfig(ctx, "organization", &organizations.IamAuditConfigArgs{ -// AuditLogConfigs: organizations.IamAuditConfigAuditLogConfigArray{ -// &organizations.IamAuditConfigAuditLogConfigArgs{ -// LogType: pulumi.String("ADMIN_READ"), -// }, -// &organizations.IamAuditConfigAuditLogConfigArgs{ -// ExemptedMembers: pulumi.StringArray{ -// pulumi.String("user:joebloggs@hashicorp.com"), -// }, -// LogType: pulumi.String("DATA_READ"), -// }, -// }, -// OrgId: pulumi.String("your-organization-id"), -// Service: pulumi.String("allServices"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/organizations/iampolicy.go b/sdk/go/gcp/organizations/iampolicy.go index 2c693aa511..175e3bbebb 100644 --- a/sdk/go/gcp/organizations/iampolicy.go +++ b/sdk/go/gcp/organizations/iampolicy.go @@ -11,281 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case: -// -// * `organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached. -// * `organizations.IAMBinding`: 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 organization are preserved. -// * `organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved. -// * `organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. -// -// > **Note:** `organizations.IAMPolicy` **cannot** be used in conjunction with `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig` or they will fight over what your policy should be. -// -// > **Note:** `organizations.IAMBinding` resources **can be** used in conjunction with `organizations.IAMMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_organization\_iam\_policy -// -// !> **Warning:** New organizations have several default policies which will, -// -// without extreme caution, be **overwritten** by use of this resource. -// The safest alternative is to use multiple `organizations.IAMBinding` -// resources. This resource makes it easy to remove your own access to -// an organization, which will require a call to Google Support to have -// fixed, and can take multiple days to resolve. -// -// In general, this resource should only be used with organizations -// fully managed by this provider.I f you do use this resource, -// the best way to be sure that you are not making dangerous changes is to start -// by **importing** your existing policy, and examining the diff very closely. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = organizations.NewIAMPolicy(ctx, "organization", &organizations.IAMPolicyArgs{ -// OrgId: pulumi.String("your-organization-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Condition: { -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// Title: "expires_after_2019_12_31", -// }, -// Members: []string{ -// "user:jane@example.com", -// }, -// Role: "roles/editor", -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = organizations.NewIAMPolicy(ctx, "organization", &organizations.IAMPolicyArgs{ -// OrgId: pulumi.String("your-organization-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_organization\_iam\_binding -// -// > **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.NewIAMBinding(ctx, "organization", &organizations.IAMBindingArgs{ -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// OrgId: pulumi.String("your-organization-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.NewIAMBinding(ctx, "organization", &organizations.IAMBindingArgs{ -// Condition: &organizations.IAMBindingConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// OrgId: pulumi.String("your-organization-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_organization\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.NewIAMMember(ctx, "organization", &organizations.IAMMemberArgs{ -// Member: pulumi.String("user:jane@example.com"), -// OrgId: pulumi.String("your-organization-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.NewIAMMember(ctx, "organization", &organizations.IAMMemberArgs{ -// Condition: &organizations.IAMMemberConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Member: pulumi.String("user:jane@example.com"), -// OrgId: pulumi.String("your-organization-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_organization\_iam\_audit\_config -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := organizations.NewIamAuditConfig(ctx, "organization", &organizations.IamAuditConfigArgs{ -// AuditLogConfigs: organizations.IamAuditConfigAuditLogConfigArray{ -// &organizations.IamAuditConfigAuditLogConfigArgs{ -// LogType: pulumi.String("ADMIN_READ"), -// }, -// &organizations.IamAuditConfigAuditLogConfigArgs{ -// ExemptedMembers: pulumi.StringArray{ -// pulumi.String("user:joebloggs@hashicorp.com"), -// }, -// LogType: pulumi.String("DATA_READ"), -// }, -// }, -// OrgId: pulumi.String("your-organization-id"), -// Service: pulumi.String("allServices"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/organizations/project.go b/sdk/go/gcp/organizations/project.go index 9a8083e5da..8842894993 100644 --- a/sdk/go/gcp/organizations/project.go +++ b/sdk/go/gcp/organizations/project.go @@ -11,24 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Allows creation and management of a Google Cloud Platform project. -// -// Projects created with this resource must be associated with an Organization. -// See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. -// -// The user or service account that is running this provider when creating a `organizations.Project` -// resource must have `roles/resourcemanager.projectCreator` on the specified organization. See the -// [Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org) -// doc for more information. -// -// > This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account. -// -// To get more information about projects, see: -// -// * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects) -// * How-to Guides -// - [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects) -// // ## Example Usage // // ```go @@ -102,16 +84,13 @@ import ( type Project struct { pulumi.CustomResourceState - // Create the 'default' network automatically. Default `true`. - // If set to `false`, the default network will be deleted. Note that, for quota purposes, you - // will still need to have 1 network slot available to create the project successfully, even if - // you set `autoCreateNetwork` to `false`, since the network will exist momentarily. + // Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + // that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + // if you set auto_create_network to false, since the network will exist momentarily. AutoCreateNetwork pulumi.BoolPtrOutput `pulumi:"autoCreateNetwork"` - // The alphanumeric ID of the billing account this project - // belongs to. The user or service account performing this operation with the provider - // must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - // See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - // for more details. + // The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + // operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + // See Google Cloud Billing API Access Control for more details. BillingAccount pulumi.StringPtrOutput `pulumi:"billingAccount"` // The numeric ID of the folder this project should be // created under. Only one of `orgId` or `folderId` may be @@ -134,8 +113,7 @@ type Project struct { OrgId pulumi.StringPtrOutput `pulumi:"orgId"` // The project ID. Changing this forces a new project to be created. ProjectId pulumi.StringOutput `pulumi:"projectId"` - // If true, the resource can be deleted - // without deleting the Project via the Google API. + // If true, the Terraform resource can be deleted without deleting the Project via the Google API. SkipDelete pulumi.BoolOutput `pulumi:"skipDelete"` } @@ -171,16 +149,13 @@ func GetProject(ctx *pulumi.Context, // Input properties used for looking up and filtering Project resources. type projectState struct { - // Create the 'default' network automatically. Default `true`. - // If set to `false`, the default network will be deleted. Note that, for quota purposes, you - // will still need to have 1 network slot available to create the project successfully, even if - // you set `autoCreateNetwork` to `false`, since the network will exist momentarily. + // Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + // that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + // if you set auto_create_network to false, since the network will exist momentarily. AutoCreateNetwork *bool `pulumi:"autoCreateNetwork"` - // The alphanumeric ID of the billing account this project - // belongs to. The user or service account performing this operation with the provider - // must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - // See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - // for more details. + // The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + // operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + // See Google Cloud Billing API Access Control for more details. BillingAccount *string `pulumi:"billingAccount"` // The numeric ID of the folder this project should be // created under. Only one of `orgId` or `folderId` may be @@ -203,22 +178,18 @@ type projectState struct { OrgId *string `pulumi:"orgId"` // The project ID. Changing this forces a new project to be created. ProjectId *string `pulumi:"projectId"` - // If true, the resource can be deleted - // without deleting the Project via the Google API. + // If true, the Terraform resource can be deleted without deleting the Project via the Google API. SkipDelete *bool `pulumi:"skipDelete"` } type ProjectState struct { - // Create the 'default' network automatically. Default `true`. - // If set to `false`, the default network will be deleted. Note that, for quota purposes, you - // will still need to have 1 network slot available to create the project successfully, even if - // you set `autoCreateNetwork` to `false`, since the network will exist momentarily. + // Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + // that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + // if you set auto_create_network to false, since the network will exist momentarily. AutoCreateNetwork pulumi.BoolPtrInput - // The alphanumeric ID of the billing account this project - // belongs to. The user or service account performing this operation with the provider - // must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - // See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - // for more details. + // The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + // operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + // See Google Cloud Billing API Access Control for more details. BillingAccount pulumi.StringPtrInput // The numeric ID of the folder this project should be // created under. Only one of `orgId` or `folderId` may be @@ -241,8 +212,7 @@ type ProjectState struct { OrgId pulumi.StringPtrInput // The project ID. Changing this forces a new project to be created. ProjectId pulumi.StringPtrInput - // If true, the resource can be deleted - // without deleting the Project via the Google API. + // If true, the Terraform resource can be deleted without deleting the Project via the Google API. SkipDelete pulumi.BoolPtrInput } @@ -251,16 +221,13 @@ func (ProjectState) ElementType() reflect.Type { } type projectArgs struct { - // Create the 'default' network automatically. Default `true`. - // If set to `false`, the default network will be deleted. Note that, for quota purposes, you - // will still need to have 1 network slot available to create the project successfully, even if - // you set `autoCreateNetwork` to `false`, since the network will exist momentarily. + // Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + // that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + // if you set auto_create_network to false, since the network will exist momentarily. AutoCreateNetwork *bool `pulumi:"autoCreateNetwork"` - // The alphanumeric ID of the billing account this project - // belongs to. The user or service account performing this operation with the provider - // must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - // See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - // for more details. + // The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + // operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + // See Google Cloud Billing API Access Control for more details. BillingAccount *string `pulumi:"billingAccount"` // The numeric ID of the folder this project should be // created under. Only one of `orgId` or `folderId` may be @@ -281,23 +248,19 @@ type projectArgs struct { OrgId *string `pulumi:"orgId"` // The project ID. Changing this forces a new project to be created. ProjectId string `pulumi:"projectId"` - // If true, the resource can be deleted - // without deleting the Project via the Google API. + // If true, the Terraform resource can be deleted without deleting the Project via the Google API. SkipDelete *bool `pulumi:"skipDelete"` } // The set of arguments for constructing a Project resource. type ProjectArgs struct { - // Create the 'default' network automatically. Default `true`. - // If set to `false`, the default network will be deleted. Note that, for quota purposes, you - // will still need to have 1 network slot available to create the project successfully, even if - // you set `autoCreateNetwork` to `false`, since the network will exist momentarily. + // Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + // that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + // if you set auto_create_network to false, since the network will exist momentarily. AutoCreateNetwork pulumi.BoolPtrInput - // The alphanumeric ID of the billing account this project - // belongs to. The user or service account performing this operation with the provider - // must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - // See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - // for more details. + // The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + // operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + // See Google Cloud Billing API Access Control for more details. BillingAccount pulumi.StringPtrInput // The numeric ID of the folder this project should be // created under. Only one of `orgId` or `folderId` may be @@ -318,8 +281,7 @@ type ProjectArgs struct { OrgId pulumi.StringPtrInput // The project ID. Changing this forces a new project to be created. ProjectId pulumi.StringInput - // If true, the resource can be deleted - // without deleting the Project via the Google API. + // If true, the Terraform resource can be deleted without deleting the Project via the Google API. SkipDelete pulumi.BoolPtrInput } @@ -410,19 +372,16 @@ func (o ProjectOutput) ToProjectOutputWithContext(ctx context.Context) ProjectOu return o } -// Create the 'default' network automatically. Default `true`. -// If set to `false`, the default network will be deleted. Note that, for quota purposes, you -// will still need to have 1 network slot available to create the project successfully, even if -// you set `autoCreateNetwork` to `false`, since the network will exist momentarily. +// Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note +// that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even +// if you set auto_create_network to false, since the network will exist momentarily. func (o ProjectOutput) AutoCreateNetwork() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Project) pulumi.BoolPtrOutput { return v.AutoCreateNetwork }).(pulumi.BoolPtrOutput) } -// The alphanumeric ID of the billing account this project -// belongs to. The user or service account performing this operation with the provider -// must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. -// See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) -// for more details. +// The alphanumeric ID of the billing account this project belongs to. The user or service account performing this +// operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. +// See Google Cloud Billing API Access Control for more details. func (o ProjectOutput) BillingAccount() pulumi.StringPtrOutput { return o.ApplyT(func(v *Project) pulumi.StringPtrOutput { return v.BillingAccount }).(pulumi.StringPtrOutput) } @@ -466,8 +425,7 @@ func (o ProjectOutput) ProjectId() pulumi.StringOutput { return o.ApplyT(func(v *Project) pulumi.StringOutput { return v.ProjectId }).(pulumi.StringOutput) } -// If true, the resource can be deleted -// without deleting the Project via the Google API. +// If true, the Terraform resource can be deleted without deleting the Project via the Google API. func (o ProjectOutput) SkipDelete() pulumi.BoolOutput { return o.ApplyT(func(v *Project) pulumi.BoolOutput { return v.SkipDelete }).(pulumi.BoolOutput) } diff --git a/sdk/go/gcp/organizations/pulumiTypes.go b/sdk/go/gcp/organizations/pulumiTypes.go index 4d19b0f7d2..0a2d8f7a18 100644 --- a/sdk/go/gcp/organizations/pulumiTypes.go +++ b/sdk/go/gcp/organizations/pulumiTypes.go @@ -153,9 +153,12 @@ func (o AccessApprovalSettingsEnrolledServiceArrayOutput) Index(i pulumi.IntInpu } type IAMBindingCondition struct { + // An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. Description *string `pulumi:"description"` - Expression string `pulumi:"expression"` - Title string `pulumi:"title"` + // Textual representation of an expression in Common Expression Language syntax. + Expression string `pulumi:"expression"` + // A title for the expression, i.e. a short string describing its purpose. + Title string `pulumi:"title"` } // IAMBindingConditionInput is an input type that accepts IAMBindingConditionArgs and IAMBindingConditionOutput values. @@ -170,9 +173,12 @@ type IAMBindingConditionInput interface { } type IAMBindingConditionArgs struct { + // An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. Description pulumi.StringPtrInput `pulumi:"description"` - Expression pulumi.StringInput `pulumi:"expression"` - Title pulumi.StringInput `pulumi:"title"` + // Textual representation of an expression in Common Expression Language syntax. + Expression pulumi.StringInput `pulumi:"expression"` + // A title for the expression, i.e. a short string describing its purpose. + Title pulumi.StringInput `pulumi:"title"` } func (IAMBindingConditionArgs) ElementType() reflect.Type { @@ -252,14 +258,17 @@ func (o IAMBindingConditionOutput) ToIAMBindingConditionPtrOutputWithContext(ctx }).(IAMBindingConditionPtrOutput) } +// An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. func (o IAMBindingConditionOutput) Description() pulumi.StringPtrOutput { return o.ApplyT(func(v IAMBindingCondition) *string { return v.Description }).(pulumi.StringPtrOutput) } +// Textual representation of an expression in Common Expression Language syntax. func (o IAMBindingConditionOutput) Expression() pulumi.StringOutput { return o.ApplyT(func(v IAMBindingCondition) string { return v.Expression }).(pulumi.StringOutput) } +// A title for the expression, i.e. a short string describing its purpose. func (o IAMBindingConditionOutput) Title() pulumi.StringOutput { return o.ApplyT(func(v IAMBindingCondition) string { return v.Title }).(pulumi.StringOutput) } @@ -288,6 +297,7 @@ func (o IAMBindingConditionPtrOutput) Elem() IAMBindingConditionOutput { }).(IAMBindingConditionOutput) } +// An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. func (o IAMBindingConditionPtrOutput) Description() pulumi.StringPtrOutput { return o.ApplyT(func(v *IAMBindingCondition) *string { if v == nil { @@ -297,6 +307,7 @@ func (o IAMBindingConditionPtrOutput) Description() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } +// Textual representation of an expression in Common Expression Language syntax. func (o IAMBindingConditionPtrOutput) Expression() pulumi.StringPtrOutput { return o.ApplyT(func(v *IAMBindingCondition) *string { if v == nil { @@ -306,6 +317,7 @@ func (o IAMBindingConditionPtrOutput) Expression() pulumi.StringPtrOutput { }).(pulumi.StringPtrOutput) } +// A title for the expression, i.e. a short string describing its purpose. func (o IAMBindingConditionPtrOutput) Title() pulumi.StringPtrOutput { return o.ApplyT(func(v *IAMBindingCondition) *string { if v == nil { @@ -491,12 +503,7 @@ func (o IAMMemberConditionPtrOutput) Title() pulumi.StringPtrOutput { } type IamAuditConfigAuditLogConfig struct { - // Identities that do not cause logging for this type of permission. - // Each entry can have one of the following values: - // * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - // * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - // * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - // * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + // Identities that do not cause logging for this type of permission. The format is the same as that for `members`. ExemptedMembers []string `pulumi:"exemptedMembers"` // Permission type for which logging is to be configured. Must be one of `DATA_READ`, `DATA_WRITE`, or `ADMIN_READ`. LogType string `pulumi:"logType"` @@ -514,12 +521,7 @@ type IamAuditConfigAuditLogConfigInput interface { } type IamAuditConfigAuditLogConfigArgs struct { - // Identities that do not cause logging for this type of permission. - // Each entry can have one of the following values: - // * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - // * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - // * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - // * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + // Identities that do not cause logging for this type of permission. The format is the same as that for `members`. ExemptedMembers pulumi.StringArrayInput `pulumi:"exemptedMembers"` // Permission type for which logging is to be configured. Must be one of `DATA_READ`, `DATA_WRITE`, or `ADMIN_READ`. LogType pulumi.StringInput `pulumi:"logType"` @@ -576,12 +578,7 @@ func (o IamAuditConfigAuditLogConfigOutput) ToIamAuditConfigAuditLogConfigOutput return o } -// Identities that do not cause logging for this type of permission. -// Each entry can have one of the following values: -// * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. -// * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. -// * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. -// * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. +// Identities that do not cause logging for this type of permission. The format is the same as that for `members`. func (o IamAuditConfigAuditLogConfigOutput) ExemptedMembers() pulumi.StringArrayOutput { return o.ApplyT(func(v IamAuditConfigAuditLogConfig) []string { return v.ExemptedMembers }).(pulumi.StringArrayOutput) } diff --git a/sdk/go/gcp/osconfig/guestPolicies.go b/sdk/go/gcp/osconfig/guestPolicies.go index b3bc8d588a..49aab5aba5 100644 --- a/sdk/go/gcp/osconfig/guestPolicies.go +++ b/sdk/go/gcp/osconfig/guestPolicies.go @@ -11,16 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// An OS Config resource representing a guest configuration policy. These policies represent -// the desired state for VM instance guest environments including packages to install or remove, -// package repository configurations, and software to install. -// -// To get more information about GuestPolicies, see: -// -// * [API documentation](https://cloud.google.com/compute/docs/osconfig/rest) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/compute/docs/os-config-management) -// // ## Example Usage // ### Os Config Guest Policies Basic // diff --git a/sdk/go/gcp/projects/iamauditConfig.go b/sdk/go/gcp/projects/iamauditConfig.go index 8e0ae0f7ca..8ada028170 100644 --- a/sdk/go/gcp/projects/iamauditConfig.go +++ b/sdk/go/gcp/projects/iamauditConfig.go @@ -11,281 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: -// -// * `projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. -// * `projects.IAMBinding`: 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 project are preserved. -// * `projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. -// * `projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. -// -// > **Note:** `projects.IAMPolicy` **cannot** be used in conjunction with `projects.IAMBinding`, `projects.IAMMember`, or `projects.IAMAuditConfig` or they will fight over what your policy should be. -// -// > **Note:** `projects.IAMBinding` resources **can be** used in conjunction with `projects.IAMMember` resources **only if** they do not grant privilege to the same role. -// -// > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, -// -// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. -// -// ## google\_project\_iam\_policy -// -// !> **Be careful!** You can accidentally lock yourself out of your project -// -// using this resource. Deleting a `projects.IAMPolicy` removes access -// from anyone without organization-level access to the project. Proceed with caution. -// It's not recommended to use `projects.IAMPolicy` with your provider project -// to avoid locking yourself out, and it should generally only be used with projects -// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before -// applying the change. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = projects.NewIAMPolicy(ctx, "project", &projects.IAMPolicyArgs{ -// Project: pulumi.String("your-project-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Condition: { -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// Title: "expires_after_2019_12_31", -// }, -// Members: []string{ -// "user:jane@example.com", -// }, -// Role: "roles/compute.admin", -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = projects.NewIAMPolicy(ctx, "project", &projects.IAMPolicyArgs{ -// PolicyData: *pulumi.String(admin.PolicyData), -// Project: pulumi.String("your-project-id"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_project\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMBinding(ctx, "project", &projects.IAMBindingArgs{ -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMBinding(ctx, "project", &projects.IAMBindingArgs{ -// Condition: &projects.IAMBindingConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/container.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_project\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMMember(ctx, "project", &projects.IAMMemberArgs{ -// Member: pulumi.String("user:jane@example.com"), -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMMember(ctx, "project", &projects.IAMMemberArgs{ -// Condition: &projects.IAMMemberConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Member: pulumi.String("user:jane@example.com"), -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/firebase.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_project\_iam\_audit\_config -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMAuditConfig(ctx, "project", &projects.IAMAuditConfigArgs{ -// AuditLogConfigs: projects.IAMAuditConfigAuditLogConfigArray{ -// &projects.IAMAuditConfigAuditLogConfigArgs{ -// LogType: pulumi.String("ADMIN_READ"), -// }, -// &projects.IAMAuditConfigAuditLogConfigArgs{ -// ExemptedMembers: pulumi.StringArray{ -// pulumi.String("user:joebloggs@hashicorp.com"), -// }, -// LogType: pulumi.String("DATA_READ"), -// }, -// }, -// Project: pulumi.String("your-project-id"), -// Service: pulumi.String("allServices"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/projects/iambinding.go b/sdk/go/gcp/projects/iambinding.go index 2215dfc45b..f39ae432f9 100644 --- a/sdk/go/gcp/projects/iambinding.go +++ b/sdk/go/gcp/projects/iambinding.go @@ -11,281 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: -// -// * `projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. -// * `projects.IAMBinding`: 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 project are preserved. -// * `projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. -// * `projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. -// -// > **Note:** `projects.IAMPolicy` **cannot** be used in conjunction with `projects.IAMBinding`, `projects.IAMMember`, or `projects.IAMAuditConfig` or they will fight over what your policy should be. -// -// > **Note:** `projects.IAMBinding` resources **can be** used in conjunction with `projects.IAMMember` resources **only if** they do not grant privilege to the same role. -// -// > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, -// -// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. -// -// ## google\_project\_iam\_policy -// -// !> **Be careful!** You can accidentally lock yourself out of your project -// -// using this resource. Deleting a `projects.IAMPolicy` removes access -// from anyone without organization-level access to the project. Proceed with caution. -// It's not recommended to use `projects.IAMPolicy` with your provider project -// to avoid locking yourself out, and it should generally only be used with projects -// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before -// applying the change. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = projects.NewIAMPolicy(ctx, "project", &projects.IAMPolicyArgs{ -// Project: pulumi.String("your-project-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Condition: { -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// Title: "expires_after_2019_12_31", -// }, -// Members: []string{ -// "user:jane@example.com", -// }, -// Role: "roles/compute.admin", -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = projects.NewIAMPolicy(ctx, "project", &projects.IAMPolicyArgs{ -// PolicyData: *pulumi.String(admin.PolicyData), -// Project: pulumi.String("your-project-id"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_project\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMBinding(ctx, "project", &projects.IAMBindingArgs{ -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMBinding(ctx, "project", &projects.IAMBindingArgs{ -// Condition: &projects.IAMBindingConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/container.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_project\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMMember(ctx, "project", &projects.IAMMemberArgs{ -// Member: pulumi.String("user:jane@example.com"), -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMMember(ctx, "project", &projects.IAMMemberArgs{ -// Condition: &projects.IAMMemberConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Member: pulumi.String("user:jane@example.com"), -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/firebase.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_project\_iam\_audit\_config -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMAuditConfig(ctx, "project", &projects.IAMAuditConfigArgs{ -// AuditLogConfigs: projects.IAMAuditConfigAuditLogConfigArray{ -// &projects.IAMAuditConfigAuditLogConfigArgs{ -// LogType: pulumi.String("ADMIN_READ"), -// }, -// &projects.IAMAuditConfigAuditLogConfigArgs{ -// ExemptedMembers: pulumi.StringArray{ -// pulumi.String("user:joebloggs@hashicorp.com"), -// }, -// LogType: pulumi.String("DATA_READ"), -// }, -// }, -// Project: pulumi.String("your-project-id"), -// Service: pulumi.String("allServices"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/projects/iamcustomRole.go b/sdk/go/gcp/projects/iamcustomRole.go index 2d917bd171..b51b018555 100644 --- a/sdk/go/gcp/projects/iamcustomRole.go +++ b/sdk/go/gcp/projects/iamcustomRole.go @@ -11,19 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Allows management of a customized Cloud IAM project role. For more information see -// [the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles) -// and -// [API](https://cloud.google.com/iam/reference/rest/v1/projects.roles). -// -// > **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise -// -// from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the -// same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted -// after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is -// made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all -// by the provider, and new roles cannot share that name. -// // ## Example Usage // // This snippet creates a customized IAM role. diff --git a/sdk/go/gcp/projects/iammember.go b/sdk/go/gcp/projects/iammember.go index bb70d635ed..27b36419d4 100644 --- a/sdk/go/gcp/projects/iammember.go +++ b/sdk/go/gcp/projects/iammember.go @@ -11,281 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: -// -// * `projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. -// * `projects.IAMBinding`: 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 project are preserved. -// * `projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. -// * `projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. -// -// > **Note:** `projects.IAMPolicy` **cannot** be used in conjunction with `projects.IAMBinding`, `projects.IAMMember`, or `projects.IAMAuditConfig` or they will fight over what your policy should be. -// -// > **Note:** `projects.IAMBinding` resources **can be** used in conjunction with `projects.IAMMember` resources **only if** they do not grant privilege to the same role. -// -// > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, -// -// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. -// -// ## google\_project\_iam\_policy -// -// !> **Be careful!** You can accidentally lock yourself out of your project -// -// using this resource. Deleting a `projects.IAMPolicy` removes access -// from anyone without organization-level access to the project. Proceed with caution. -// It's not recommended to use `projects.IAMPolicy` with your provider project -// to avoid locking yourself out, and it should generally only be used with projects -// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before -// applying the change. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = projects.NewIAMPolicy(ctx, "project", &projects.IAMPolicyArgs{ -// Project: pulumi.String("your-project-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Condition: { -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// Title: "expires_after_2019_12_31", -// }, -// Members: []string{ -// "user:jane@example.com", -// }, -// Role: "roles/compute.admin", -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = projects.NewIAMPolicy(ctx, "project", &projects.IAMPolicyArgs{ -// PolicyData: *pulumi.String(admin.PolicyData), -// Project: pulumi.String("your-project-id"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_project\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMBinding(ctx, "project", &projects.IAMBindingArgs{ -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMBinding(ctx, "project", &projects.IAMBindingArgs{ -// Condition: &projects.IAMBindingConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/container.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_project\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMMember(ctx, "project", &projects.IAMMemberArgs{ -// Member: pulumi.String("user:jane@example.com"), -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMMember(ctx, "project", &projects.IAMMemberArgs{ -// Condition: &projects.IAMMemberConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Member: pulumi.String("user:jane@example.com"), -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/firebase.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_project\_iam\_audit\_config -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMAuditConfig(ctx, "project", &projects.IAMAuditConfigArgs{ -// AuditLogConfigs: projects.IAMAuditConfigAuditLogConfigArray{ -// &projects.IAMAuditConfigAuditLogConfigArgs{ -// LogType: pulumi.String("ADMIN_READ"), -// }, -// &projects.IAMAuditConfigAuditLogConfigArgs{ -// ExemptedMembers: pulumi.StringArray{ -// pulumi.String("user:joebloggs@hashicorp.com"), -// }, -// LogType: pulumi.String("DATA_READ"), -// }, -// }, -// Project: pulumi.String("your-project-id"), -// Service: pulumi.String("allServices"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/projects/iampolicy.go b/sdk/go/gcp/projects/iampolicy.go index bf08e159d0..cac614690c 100644 --- a/sdk/go/gcp/projects/iampolicy.go +++ b/sdk/go/gcp/projects/iampolicy.go @@ -11,281 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: -// -// * `projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. -// * `projects.IAMBinding`: 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 project are preserved. -// * `projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. -// * `projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. -// -// > **Note:** `projects.IAMPolicy` **cannot** be used in conjunction with `projects.IAMBinding`, `projects.IAMMember`, or `projects.IAMAuditConfig` or they will fight over what your policy should be. -// -// > **Note:** `projects.IAMBinding` resources **can be** used in conjunction with `projects.IAMMember` resources **only if** they do not grant privilege to the same role. -// -// > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, -// -// IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. -// -// ## google\_project\_iam\_policy -// -// !> **Be careful!** You can accidentally lock yourself out of your project -// -// using this resource. Deleting a `projects.IAMPolicy` removes access -// from anyone without organization-level access to the project. Proceed with caution. -// It's not recommended to use `projects.IAMPolicy` with your provider project -// to avoid locking yourself out, and it should generally only be used with projects -// fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before -// applying the change. -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/editor", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = projects.NewIAMPolicy(ctx, "project", &projects.IAMPolicyArgs{ -// Project: pulumi.String("your-project-id"), -// PolicyData: *pulumi.String(admin.PolicyData), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Condition: { -// Description: pulumi.StringRef("Expiring at midnight of 2019-12-31"), -// Expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", -// Title: "expires_after_2019_12_31", -// }, -// Members: []string{ -// "user:jane@example.com", -// }, -// Role: "roles/compute.admin", -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = projects.NewIAMPolicy(ctx, "project", &projects.IAMPolicyArgs{ -// PolicyData: *pulumi.String(admin.PolicyData), -// Project: pulumi.String("your-project-id"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_project\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMBinding(ctx, "project", &projects.IAMBindingArgs{ -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMBinding(ctx, "project", &projects.IAMBindingArgs{ -// Condition: &projects.IAMBindingConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/container.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_project\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMMember(ctx, "project", &projects.IAMMemberArgs{ -// Member: pulumi.String("user:jane@example.com"), -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/editor"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// With IAM Conditions: -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMMember(ctx, "project", &projects.IAMMemberArgs{ -// Condition: &projects.IAMMemberConditionArgs{ -// Description: pulumi.String("Expiring at midnight of 2019-12-31"), -// Expression: pulumi.String("request.time < timestamp(\"2020-01-01T00:00:00Z\")"), -// Title: pulumi.String("expires_after_2019_12_31"), -// }, -// Member: pulumi.String("user:jane@example.com"), -// Project: pulumi.String("your-project-id"), -// Role: pulumi.String("roles/firebase.admin"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_project\_iam\_audit\_config -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/projects" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := projects.NewIAMAuditConfig(ctx, "project", &projects.IAMAuditConfigArgs{ -// AuditLogConfigs: projects.IAMAuditConfigAuditLogConfigArray{ -// &projects.IAMAuditConfigAuditLogConfigArgs{ -// LogType: pulumi.String("ADMIN_READ"), -// }, -// &projects.IAMAuditConfigAuditLogConfigArgs{ -// ExemptedMembers: pulumi.StringArray{ -// pulumi.String("user:joebloggs@hashicorp.com"), -// }, -// LogType: pulumi.String("DATA_READ"), -// }, -// }, -// Project: pulumi.String("your-project-id"), -// Service: pulumi.String("allServices"), -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/go/gcp/projects/service.go b/sdk/go/gcp/projects/service.go index 2911296484..3b455ca1b0 100644 --- a/sdk/go/gcp/projects/service.go +++ b/sdk/go/gcp/projects/service.go @@ -72,8 +72,7 @@ type Service struct { // destroyed. If `false` or unset, an error will be generated if any enabled // services depend on this service when destroying it. DisableDependentServices pulumi.BoolPtrOutput `pulumi:"disableDependentServices"` - // If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - DisableOnDestroy pulumi.BoolPtrOutput `pulumi:"disableOnDestroy"` + DisableOnDestroy pulumi.BoolPtrOutput `pulumi:"disableOnDestroy"` // The project ID. If not provided, the provider project // is used. Project pulumi.StringOutput `pulumi:"project"` @@ -118,8 +117,7 @@ type serviceState struct { // destroyed. If `false` or unset, an error will be generated if any enabled // services depend on this service when destroying it. DisableDependentServices *bool `pulumi:"disableDependentServices"` - // If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - DisableOnDestroy *bool `pulumi:"disableOnDestroy"` + DisableOnDestroy *bool `pulumi:"disableOnDestroy"` // The project ID. If not provided, the provider project // is used. Project *string `pulumi:"project"` @@ -133,8 +131,7 @@ type ServiceState struct { // destroyed. If `false` or unset, an error will be generated if any enabled // services depend on this service when destroying it. DisableDependentServices pulumi.BoolPtrInput - // If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - DisableOnDestroy pulumi.BoolPtrInput + DisableOnDestroy pulumi.BoolPtrInput // The project ID. If not provided, the provider project // is used. Project pulumi.StringPtrInput @@ -152,8 +149,7 @@ type serviceArgs struct { // destroyed. If `false` or unset, an error will be generated if any enabled // services depend on this service when destroying it. DisableDependentServices *bool `pulumi:"disableDependentServices"` - // If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - DisableOnDestroy *bool `pulumi:"disableOnDestroy"` + DisableOnDestroy *bool `pulumi:"disableOnDestroy"` // The project ID. If not provided, the provider project // is used. Project *string `pulumi:"project"` @@ -168,8 +164,7 @@ type ServiceArgs struct { // destroyed. If `false` or unset, an error will be generated if any enabled // services depend on this service when destroying it. DisableDependentServices pulumi.BoolPtrInput - // If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - DisableOnDestroy pulumi.BoolPtrInput + DisableOnDestroy pulumi.BoolPtrInput // The project ID. If not provided, the provider project // is used. Project pulumi.StringPtrInput @@ -272,7 +267,6 @@ func (o ServiceOutput) DisableDependentServices() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Service) pulumi.BoolPtrOutput { return v.DisableDependentServices }).(pulumi.BoolPtrOutput) } -// If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. func (o ServiceOutput) DisableOnDestroy() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Service) pulumi.BoolPtrOutput { return v.DisableOnDestroy }).(pulumi.BoolPtrOutput) } diff --git a/sdk/go/gcp/projects/serviceIdentity.go b/sdk/go/gcp/projects/serviceIdentity.go index 0a5e496cf0..b3238c3e94 100644 --- a/sdk/go/gcp/projects/serviceIdentity.go +++ b/sdk/go/gcp/projects/serviceIdentity.go @@ -11,19 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Generate service identity for a service. -// -// > **Note:** Once created, this resource cannot be updated or destroyed. These -// actions are a no-op. -// -// > **Note:** This resource can be used to retrieve the emails of the [Google-managed service accounts](https://cloud.google.com/iam/docs/service-agents) -// of the APIs that Google has configured with a Service Identity. You can run `gcloud beta services identity create --service SERVICE_NAME.googleapis.com` to -// verify if an API supports this. -// -// To get more information about Service Identity, see: -// -// * [API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services/generateServiceIdentity) -// // ## Example Usage // ### Service Identity Basic // diff --git a/sdk/go/gcp/projects/usageExportBucket.go b/sdk/go/gcp/projects/usageExportBucket.go index c24049b00d..8faed35c94 100644 --- a/sdk/go/gcp/projects/usageExportBucket.go +++ b/sdk/go/gcp/projects/usageExportBucket.go @@ -11,24 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Allows creation and management of a Google Cloud Platform project. -// -// Projects created with this resource must be associated with an Organization. -// See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. -// -// The user or service account that is running this provider when creating a `organizations.Project` -// resource must have `roles/resourcemanager.projectCreator` on the specified organization. See the -// [Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org) -// doc for more information. -// -// > This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account. -// -// To get more information about projects, see: -// -// * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects) -// * How-to Guides -// - [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects) -// // ## Example Usage // // ```go diff --git a/sdk/go/gcp/provider.go b/sdk/go/gcp/provider.go index 04879040d4..5c6084b716 100644 --- a/sdk/go/gcp/provider.go +++ b/sdk/go/gcp/provider.go @@ -53,6 +53,7 @@ type Provider struct { CloudRunV2CustomEndpoint pulumi.StringPtrOutput `pulumi:"cloudRunV2CustomEndpoint"` CloudSchedulerCustomEndpoint pulumi.StringPtrOutput `pulumi:"cloudSchedulerCustomEndpoint"` CloudTasksCustomEndpoint pulumi.StringPtrOutput `pulumi:"cloudTasksCustomEndpoint"` + Cloudbuildv2CustomEndpoint pulumi.StringPtrOutput `pulumi:"cloudbuildv2CustomEndpoint"` ClouddeployCustomEndpoint pulumi.StringPtrOutput `pulumi:"clouddeployCustomEndpoint"` Cloudfunctions2CustomEndpoint pulumi.StringPtrOutput `pulumi:"cloudfunctions2CustomEndpoint"` ComposerCustomEndpoint pulumi.StringPtrOutput `pulumi:"composerCustomEndpoint"` @@ -91,7 +92,6 @@ type Provider struct { GkeBackupCustomEndpoint pulumi.StringPtrOutput `pulumi:"gkeBackupCustomEndpoint"` GkeHubCustomEndpoint pulumi.StringPtrOutput `pulumi:"gkeHubCustomEndpoint"` GkehubFeatureCustomEndpoint pulumi.StringPtrOutput `pulumi:"gkehubFeatureCustomEndpoint"` - GooglePartnerName pulumi.StringPtrOutput `pulumi:"googlePartnerName"` HealthcareCustomEndpoint pulumi.StringPtrOutput `pulumi:"healthcareCustomEndpoint"` Iam2CustomEndpoint pulumi.StringPtrOutput `pulumi:"iam2CustomEndpoint"` IamBetaCustomEndpoint pulumi.StringPtrOutput `pulumi:"iamBetaCustomEndpoint"` @@ -139,10 +139,12 @@ type Provider struct { StorageCustomEndpoint pulumi.StringPtrOutput `pulumi:"storageCustomEndpoint"` StorageTransferCustomEndpoint pulumi.StringPtrOutput `pulumi:"storageTransferCustomEndpoint"` TagsCustomEndpoint pulumi.StringPtrOutput `pulumi:"tagsCustomEndpoint"` + TagsLocationCustomEndpoint pulumi.StringPtrOutput `pulumi:"tagsLocationCustomEndpoint"` TpuCustomEndpoint pulumi.StringPtrOutput `pulumi:"tpuCustomEndpoint"` VertexAiCustomEndpoint pulumi.StringPtrOutput `pulumi:"vertexAiCustomEndpoint"` VpcAccessCustomEndpoint pulumi.StringPtrOutput `pulumi:"vpcAccessCustomEndpoint"` WorkflowsCustomEndpoint pulumi.StringPtrOutput `pulumi:"workflowsCustomEndpoint"` + WorkstationsCustomEndpoint pulumi.StringPtrOutput `pulumi:"workstationsCustomEndpoint"` Zone pulumi.StringPtrOutput `pulumi:"zone"` } @@ -208,6 +210,7 @@ type providerArgs struct { CloudRunV2CustomEndpoint *string `pulumi:"cloudRunV2CustomEndpoint"` CloudSchedulerCustomEndpoint *string `pulumi:"cloudSchedulerCustomEndpoint"` CloudTasksCustomEndpoint *string `pulumi:"cloudTasksCustomEndpoint"` + Cloudbuildv2CustomEndpoint *string `pulumi:"cloudbuildv2CustomEndpoint"` ClouddeployCustomEndpoint *string `pulumi:"clouddeployCustomEndpoint"` Cloudfunctions2CustomEndpoint *string `pulumi:"cloudfunctions2CustomEndpoint"` ComposerCustomEndpoint *string `pulumi:"composerCustomEndpoint"` @@ -231,7 +234,6 @@ type providerArgs struct { DeploymentManagerCustomEndpoint *string `pulumi:"deploymentManagerCustomEndpoint"` DialogflowCustomEndpoint *string `pulumi:"dialogflowCustomEndpoint"` DialogflowCxCustomEndpoint *string `pulumi:"dialogflowCxCustomEndpoint"` - DisableGooglePartnerName *bool `pulumi:"disableGooglePartnerName"` DnsCustomEndpoint *string `pulumi:"dnsCustomEndpoint"` DocumentAiCustomEndpoint *string `pulumi:"documentAiCustomEndpoint"` EssentialContactsCustomEndpoint *string `pulumi:"essentialContactsCustomEndpoint"` @@ -247,7 +249,6 @@ type providerArgs struct { GkeBackupCustomEndpoint *string `pulumi:"gkeBackupCustomEndpoint"` GkeHubCustomEndpoint *string `pulumi:"gkeHubCustomEndpoint"` GkehubFeatureCustomEndpoint *string `pulumi:"gkehubFeatureCustomEndpoint"` - GooglePartnerName *string `pulumi:"googlePartnerName"` HealthcareCustomEndpoint *string `pulumi:"healthcareCustomEndpoint"` Iam2CustomEndpoint *string `pulumi:"iam2CustomEndpoint"` IamBetaCustomEndpoint *string `pulumi:"iamBetaCustomEndpoint"` @@ -297,11 +298,13 @@ type providerArgs struct { StorageCustomEndpoint *string `pulumi:"storageCustomEndpoint"` StorageTransferCustomEndpoint *string `pulumi:"storageTransferCustomEndpoint"` TagsCustomEndpoint *string `pulumi:"tagsCustomEndpoint"` + TagsLocationCustomEndpoint *string `pulumi:"tagsLocationCustomEndpoint"` TpuCustomEndpoint *string `pulumi:"tpuCustomEndpoint"` UserProjectOverride *bool `pulumi:"userProjectOverride"` VertexAiCustomEndpoint *string `pulumi:"vertexAiCustomEndpoint"` VpcAccessCustomEndpoint *string `pulumi:"vpcAccessCustomEndpoint"` WorkflowsCustomEndpoint *string `pulumi:"workflowsCustomEndpoint"` + WorkstationsCustomEndpoint *string `pulumi:"workstationsCustomEndpoint"` Zone *string `pulumi:"zone"` } @@ -344,6 +347,7 @@ type ProviderArgs struct { CloudRunV2CustomEndpoint pulumi.StringPtrInput CloudSchedulerCustomEndpoint pulumi.StringPtrInput CloudTasksCustomEndpoint pulumi.StringPtrInput + Cloudbuildv2CustomEndpoint pulumi.StringPtrInput ClouddeployCustomEndpoint pulumi.StringPtrInput Cloudfunctions2CustomEndpoint pulumi.StringPtrInput ComposerCustomEndpoint pulumi.StringPtrInput @@ -367,7 +371,6 @@ type ProviderArgs struct { DeploymentManagerCustomEndpoint pulumi.StringPtrInput DialogflowCustomEndpoint pulumi.StringPtrInput DialogflowCxCustomEndpoint pulumi.StringPtrInput - DisableGooglePartnerName pulumi.BoolPtrInput DnsCustomEndpoint pulumi.StringPtrInput DocumentAiCustomEndpoint pulumi.StringPtrInput EssentialContactsCustomEndpoint pulumi.StringPtrInput @@ -383,7 +386,6 @@ type ProviderArgs struct { GkeBackupCustomEndpoint pulumi.StringPtrInput GkeHubCustomEndpoint pulumi.StringPtrInput GkehubFeatureCustomEndpoint pulumi.StringPtrInput - GooglePartnerName pulumi.StringPtrInput HealthcareCustomEndpoint pulumi.StringPtrInput Iam2CustomEndpoint pulumi.StringPtrInput IamBetaCustomEndpoint pulumi.StringPtrInput @@ -433,11 +435,13 @@ type ProviderArgs struct { StorageCustomEndpoint pulumi.StringPtrInput StorageTransferCustomEndpoint pulumi.StringPtrInput TagsCustomEndpoint pulumi.StringPtrInput + TagsLocationCustomEndpoint pulumi.StringPtrInput TpuCustomEndpoint pulumi.StringPtrInput UserProjectOverride pulumi.BoolPtrInput VertexAiCustomEndpoint pulumi.StringPtrInput VpcAccessCustomEndpoint pulumi.StringPtrInput WorkflowsCustomEndpoint pulumi.StringPtrInput + WorkstationsCustomEndpoint pulumi.StringPtrInput Zone pulumi.StringPtrInput } @@ -622,6 +626,10 @@ func (o ProviderOutput) CloudTasksCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.CloudTasksCustomEndpoint }).(pulumi.StringPtrOutput) } +func (o ProviderOutput) Cloudbuildv2CustomEndpoint() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.Cloudbuildv2CustomEndpoint }).(pulumi.StringPtrOutput) +} + func (o ProviderOutput) ClouddeployCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.ClouddeployCustomEndpoint }).(pulumi.StringPtrOutput) } @@ -774,10 +782,6 @@ func (o ProviderOutput) GkehubFeatureCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.GkehubFeatureCustomEndpoint }).(pulumi.StringPtrOutput) } -func (o ProviderOutput) GooglePartnerName() pulumi.StringPtrOutput { - return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.GooglePartnerName }).(pulumi.StringPtrOutput) -} - func (o ProviderOutput) HealthcareCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.HealthcareCustomEndpoint }).(pulumi.StringPtrOutput) } @@ -966,6 +970,10 @@ func (o ProviderOutput) TagsCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.TagsCustomEndpoint }).(pulumi.StringPtrOutput) } +func (o ProviderOutput) TagsLocationCustomEndpoint() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.TagsLocationCustomEndpoint }).(pulumi.StringPtrOutput) +} + func (o ProviderOutput) TpuCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.TpuCustomEndpoint }).(pulumi.StringPtrOutput) } @@ -982,6 +990,10 @@ func (o ProviderOutput) WorkflowsCustomEndpoint() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.WorkflowsCustomEndpoint }).(pulumi.StringPtrOutput) } +func (o ProviderOutput) WorkstationsCustomEndpoint() pulumi.StringPtrOutput { + return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.WorkstationsCustomEndpoint }).(pulumi.StringPtrOutput) +} + func (o ProviderOutput) Zone() pulumi.StringPtrOutput { return o.ApplyT(func(v *Provider) pulumi.StringPtrOutput { return v.Zone }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/redis/instance.go b/sdk/go/gcp/redis/instance.go index 9da40a4862..4a14f4c1b9 100644 --- a/sdk/go/gcp/redis/instance.go +++ b/sdk/go/gcp/redis/instance.go @@ -73,7 +73,7 @@ import ( // AlternativeLocationId: pulumi.String("us-central1-f"), // AuthorizedNetwork: *pulumi.String(redis_network.Id), // RedisVersion: pulumi.String("REDIS_4_0"), -// DisplayName: pulumi.String("Test Instance"), +// DisplayName: pulumi.String("Terraform Test Instance"), // ReservedIpRange: pulumi.String("192.168.0.0/29"), // Labels: pulumi.StringMap{ // "my_key": pulumi.String("my_val"), @@ -182,7 +182,7 @@ import ( // AuthorizedNetwork: *pulumi.String(redis_network.Id), // ConnectMode: pulumi.String("PRIVATE_SERVICE_ACCESS"), // RedisVersion: pulumi.String("REDIS_4_0"), -// DisplayName: pulumi.String("Test Instance"), +// DisplayName: pulumi.String("Terraform Test Instance"), // }, pulumi.DependsOn([]pulumi.Resource{ // privateServiceConnection, // })) diff --git a/sdk/go/gcp/redis/pulumiTypes.go b/sdk/go/gcp/redis/pulumiTypes.go index dd3bd46d25..ca41702af2 100644 --- a/sdk/go/gcp/redis/pulumiTypes.go +++ b/sdk/go/gcp/redis/pulumiTypes.go @@ -807,7 +807,7 @@ type InstancePersistenceConfig struct { // - ONE_HOUR: Snapshot every 1 hour. // - SIX_HOURS: Snapshot every 6 hours. // - TWELVE_HOURS: Snapshot every 12 hours. - // - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + // - TWENTY_FOUR_HOURS: Snapshot every 24 hours. // Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. RdbSnapshotPeriod *string `pulumi:"rdbSnapshotPeriod"` // Optional. Date and time that the first snapshot was/will be attempted, @@ -845,7 +845,7 @@ type InstancePersistenceConfigArgs struct { // - ONE_HOUR: Snapshot every 1 hour. // - SIX_HOURS: Snapshot every 6 hours. // - TWELVE_HOURS: Snapshot every 12 hours. - // - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + // - TWENTY_FOUR_HOURS: Snapshot every 24 hours. // Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. RdbSnapshotPeriod pulumi.StringPtrInput `pulumi:"rdbSnapshotPeriod"` // Optional. Date and time that the first snapshot was/will be attempted, @@ -954,7 +954,7 @@ func (o InstancePersistenceConfigOutput) RdbNextSnapshotTime() pulumi.StringPtrO // - ONE_HOUR: Snapshot every 1 hour. // - SIX_HOURS: Snapshot every 6 hours. // - TWELVE_HOURS: Snapshot every 12 hours. -// - TWENTY_FOUR_HOURS: Snapshot every 24 horus. +// - TWENTY_FOUR_HOURS: Snapshot every 24 hours. // Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. func (o InstancePersistenceConfigOutput) RdbSnapshotPeriod() pulumi.StringPtrOutput { return o.ApplyT(func(v InstancePersistenceConfig) *string { return v.RdbSnapshotPeriod }).(pulumi.StringPtrOutput) @@ -1024,7 +1024,7 @@ func (o InstancePersistenceConfigPtrOutput) RdbNextSnapshotTime() pulumi.StringP // - ONE_HOUR: Snapshot every 1 hour. // - SIX_HOURS: Snapshot every 6 hours. // - TWELVE_HOURS: Snapshot every 12 hours. -// - TWENTY_FOUR_HOURS: Snapshot every 24 horus. +// - TWENTY_FOUR_HOURS: Snapshot every 24 hours. // Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. func (o InstancePersistenceConfigPtrOutput) RdbSnapshotPeriod() pulumi.StringPtrOutput { return o.ApplyT(func(v *InstancePersistenceConfig) *string { diff --git a/sdk/go/gcp/secretmanager/getSecretVersionAccess.go b/sdk/go/gcp/secretmanager/getSecretVersionAccess.go new file mode 100644 index 0000000000..01c3dd6af7 --- /dev/null +++ b/sdk/go/gcp/secretmanager/getSecretVersionAccess.go @@ -0,0 +1,149 @@ +// 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 secretmanager + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// Get a payload of Secret Manager secret's version. It only requires the [Secret Manager Secret Accessor](https://cloud.google.com/secret-manager/docs/access-control#secretmanager.secretAccessor) role. For more information see the [official documentation](https://cloud.google.com/secret-manager/docs/) and [API](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets.versions/access). +// +// ## Example Usage +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/secretmanager" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// _, err := secretmanager.GetSecretVersionAccess(ctx, &secretmanager.GetSecretVersionAccessArgs{ +// Secret: "my-secret", +// }, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +func GetSecretVersionAccess(ctx *pulumi.Context, args *GetSecretVersionAccessArgs, opts ...pulumi.InvokeOption) (*GetSecretVersionAccessResult, error) { + var rv GetSecretVersionAccessResult + err := ctx.Invoke("gcp:secretmanager/getSecretVersionAccess:getSecretVersionAccess", args, &rv, opts...) + if err != nil { + return nil, err + } + return &rv, nil +} + +// A collection of arguments for invoking getSecretVersionAccess. +type GetSecretVersionAccessArgs struct { + // The project to get the secret version for. If it + // is not provided, the provider project is used. + Project *string `pulumi:"project"` + // The secret to get the secret version for. + Secret string `pulumi:"secret"` + // The version of the secret to get. If it + // is not provided, the latest version is retrieved. + Version *string `pulumi:"version"` +} + +// A collection of values returned by getSecretVersionAccess. +type GetSecretVersionAccessResult struct { + // The provider-assigned unique ID for this managed resource. + Id string `pulumi:"id"` + // The resource name of the SecretVersion. Format: + // `projects/{{project}}/secrets/{{secret_id}}/versions/{{version}}` + Name string `pulumi:"name"` + Project string `pulumi:"project"` + Secret string `pulumi:"secret"` + // The secret data. No larger than 64KiB. + SecretData string `pulumi:"secretData"` + Version string `pulumi:"version"` +} + +func GetSecretVersionAccessOutput(ctx *pulumi.Context, args GetSecretVersionAccessOutputArgs, opts ...pulumi.InvokeOption) GetSecretVersionAccessResultOutput { + return pulumi.ToOutputWithContext(context.Background(), args). + ApplyT(func(v interface{}) (GetSecretVersionAccessResult, error) { + args := v.(GetSecretVersionAccessArgs) + r, err := GetSecretVersionAccess(ctx, &args, opts...) + var s GetSecretVersionAccessResult + if r != nil { + s = *r + } + return s, err + }).(GetSecretVersionAccessResultOutput) +} + +// A collection of arguments for invoking getSecretVersionAccess. +type GetSecretVersionAccessOutputArgs struct { + // The project to get the secret version for. If it + // is not provided, the provider project is used. + Project pulumi.StringPtrInput `pulumi:"project"` + // The secret to get the secret version for. + Secret pulumi.StringInput `pulumi:"secret"` + // The version of the secret to get. If it + // is not provided, the latest version is retrieved. + Version pulumi.StringPtrInput `pulumi:"version"` +} + +func (GetSecretVersionAccessOutputArgs) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecretVersionAccessArgs)(nil)).Elem() +} + +// A collection of values returned by getSecretVersionAccess. +type GetSecretVersionAccessResultOutput struct{ *pulumi.OutputState } + +func (GetSecretVersionAccessResultOutput) ElementType() reflect.Type { + return reflect.TypeOf((*GetSecretVersionAccessResult)(nil)).Elem() +} + +func (o GetSecretVersionAccessResultOutput) ToGetSecretVersionAccessResultOutput() GetSecretVersionAccessResultOutput { + return o +} + +func (o GetSecretVersionAccessResultOutput) ToGetSecretVersionAccessResultOutputWithContext(ctx context.Context) GetSecretVersionAccessResultOutput { + return o +} + +// The provider-assigned unique ID for this managed resource. +func (o GetSecretVersionAccessResultOutput) Id() pulumi.StringOutput { + return o.ApplyT(func(v GetSecretVersionAccessResult) string { return v.Id }).(pulumi.StringOutput) +} + +// The resource name of the SecretVersion. Format: +// `projects/{{project}}/secrets/{{secret_id}}/versions/{{version}}` +func (o GetSecretVersionAccessResultOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v GetSecretVersionAccessResult) string { return v.Name }).(pulumi.StringOutput) +} + +func (o GetSecretVersionAccessResultOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v GetSecretVersionAccessResult) string { return v.Project }).(pulumi.StringOutput) +} + +func (o GetSecretVersionAccessResultOutput) Secret() pulumi.StringOutput { + return o.ApplyT(func(v GetSecretVersionAccessResult) string { return v.Secret }).(pulumi.StringOutput) +} + +// The secret data. No larger than 64KiB. +func (o GetSecretVersionAccessResultOutput) SecretData() pulumi.StringOutput { + return o.ApplyT(func(v GetSecretVersionAccessResult) string { return v.SecretData }).(pulumi.StringOutput) +} + +func (o GetSecretVersionAccessResultOutput) Version() pulumi.StringOutput { + return o.ApplyT(func(v GetSecretVersionAccessResult) string { return v.Version }).(pulumi.StringOutput) +} + +func init() { + pulumi.RegisterOutputType(GetSecretVersionAccessResultOutput{}) +} diff --git a/sdk/go/gcp/secretmanager/secretVersion.go b/sdk/go/gcp/secretmanager/secretVersion.go index 4436e5acdd..5e4014d71c 100644 --- a/sdk/go/gcp/secretmanager/secretVersion.go +++ b/sdk/go/gcp/secretmanager/secretVersion.go @@ -11,11 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A secret version resource. -// -// > **Warning:** All arguments including `payload.secret_data` will be stored in the raw -// state as plain-text. -// // ## Example Usage // ### Secret Version Basic // diff --git a/sdk/go/gcp/serviceaccount/account.go b/sdk/go/gcp/serviceaccount/account.go index 88b9846f6b..234edb5530 100644 --- a/sdk/go/gcp/serviceaccount/account.go +++ b/sdk/go/gcp/serviceaccount/account.go @@ -11,18 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Allows management of a Google Cloud service account. -// -// * [API documentation](https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/compute/docs/access/service-accounts) -// -// > **Warning:** If you delete and recreate a service account, you must reapply any IAM roles that it had before. -// -// > Creation of service accounts is eventually consistent, and that can lead to -// errors when you try to apply ACLs to service accounts immediately after -// creation. -// // ## Example Usage // // This snippet creates a service account in a project. diff --git a/sdk/go/gcp/serviceaccount/getAccountIdToken.go b/sdk/go/gcp/serviceaccount/getAccountIdToken.go index d8873e1f08..23a96bde47 100644 --- a/sdk/go/gcp/serviceaccount/getAccountIdToken.go +++ b/sdk/go/gcp/serviceaccount/getAccountIdToken.go @@ -10,23 +10,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// This data source provides a Google OpenID Connect (`oidc`) `idToken`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)). -// -// For more information see -// [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken). -// -// ## Example Usage -// -// ### ServiceAccount JSON Credential File. -// -// `serviceAccount.getAccountIdToken` will use the configured provider credentials -// -// ### Service Account Impersonation. -// -// `serviceAccount.getAccountAccessToken` will use background impersonated credentials provided by `serviceAccount.getAccountAccessToken`. -// -// Note: to use the following, you must grant `targetServiceAccount` the -// `roles/iam.serviceAccountTokenCreator` role on itself. func GetAccountIdToken(ctx *pulumi.Context, args *GetAccountIdTokenArgs, opts ...pulumi.InvokeOption) (*GetAccountIdTokenResult, error) { var rv GetAccountIdTokenResult err := ctx.Invoke("gcp:serviceAccount/getAccountIdToken:getAccountIdToken", args, &rv, opts...) diff --git a/sdk/go/gcp/serviceaccount/iambinding.go b/sdk/go/gcp/serviceaccount/iambinding.go index c922c20240..ef8f27b085 100644 --- a/sdk/go/gcp/serviceaccount/iambinding.go +++ b/sdk/go/gcp/serviceaccount/iambinding.go @@ -23,8 +23,7 @@ import ( // // > **Note:** `serviceAccount.IAMBinding` resources **can be** used in conjunction with `serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. // -// ## Example Usage -// ### Service Account IAM Policy +// ## google\_service\_account\_iam\_policy // // ```go // package main @@ -71,7 +70,8 @@ import ( // } // // ``` -// ### Service Account IAM Binding +// +// ## google\_service\_account\_iam\_binding // // ```go // package main @@ -107,7 +107,8 @@ import ( // } // // ``` -// ### Service Account IAM Binding With IAM Conditions: +// +// With IAM Conditions: // // ```go // package main @@ -148,7 +149,8 @@ import ( // } // // ``` -// ### Service Account IAM Member +// +// ## google\_service\_account\_iam\_member // // ```go // package main @@ -199,7 +201,8 @@ import ( // } // // ``` -// ### Service Account IAM Member With IAM Conditions: +// +// With IAM Conditions: // // ```go // package main diff --git a/sdk/go/gcp/serviceaccount/iammember.go b/sdk/go/gcp/serviceaccount/iammember.go index 00eae550b7..54a18b8c98 100644 --- a/sdk/go/gcp/serviceaccount/iammember.go +++ b/sdk/go/gcp/serviceaccount/iammember.go @@ -23,8 +23,7 @@ import ( // // > **Note:** `serviceAccount.IAMBinding` resources **can be** used in conjunction with `serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. // -// ## Example Usage -// ### Service Account IAM Policy +// ## google\_service\_account\_iam\_policy // // ```go // package main @@ -71,7 +70,8 @@ import ( // } // // ``` -// ### Service Account IAM Binding +// +// ## google\_service\_account\_iam\_binding // // ```go // package main @@ -107,7 +107,8 @@ import ( // } // // ``` -// ### Service Account IAM Binding With IAM Conditions: +// +// With IAM Conditions: // // ```go // package main @@ -148,7 +149,8 @@ import ( // } // // ``` -// ### Service Account IAM Member +// +// ## google\_service\_account\_iam\_member // // ```go // package main @@ -199,7 +201,8 @@ import ( // } // // ``` -// ### Service Account IAM Member With IAM Conditions: +// +// With IAM Conditions: // // ```go // package main diff --git a/sdk/go/gcp/serviceaccount/iampolicy.go b/sdk/go/gcp/serviceaccount/iampolicy.go index c86ab548f8..b6f5b5af87 100644 --- a/sdk/go/gcp/serviceaccount/iampolicy.go +++ b/sdk/go/gcp/serviceaccount/iampolicy.go @@ -23,8 +23,7 @@ import ( // // > **Note:** `serviceAccount.IAMBinding` resources **can be** used in conjunction with `serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. // -// ## Example Usage -// ### Service Account IAM Policy +// ## google\_service\_account\_iam\_policy // // ```go // package main @@ -71,7 +70,8 @@ import ( // } // // ``` -// ### Service Account IAM Binding +// +// ## google\_service\_account\_iam\_binding // // ```go // package main @@ -107,7 +107,8 @@ import ( // } // // ``` -// ### Service Account IAM Binding With IAM Conditions: +// +// With IAM Conditions: // // ```go // package main @@ -148,7 +149,8 @@ import ( // } // // ``` -// ### Service Account IAM Member +// +// ## google\_service\_account\_iam\_member // // ```go // package main @@ -199,7 +201,8 @@ import ( // } // // ``` -// ### Service Account IAM Member With IAM Conditions: +// +// With IAM Conditions: // // ```go // package main diff --git a/sdk/go/gcp/servicedirectory/endpoint.go b/sdk/go/gcp/servicedirectory/endpoint.go index 0e95d7e230..c8a0fe6dc5 100644 --- a/sdk/go/gcp/servicedirectory/endpoint.go +++ b/sdk/go/gcp/servicedirectory/endpoint.go @@ -11,14 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// An individual endpoint that provides a service. -// -// To get more information about Endpoint, see: -// -// * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services.endpoints) -// * How-to Guides -// - [Configuring an endpoint](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_an_endpoint) -// // ## Example Usage // ### Service Directory Endpoint Basic // diff --git a/sdk/go/gcp/servicedirectory/namespace.go b/sdk/go/gcp/servicedirectory/namespace.go index bcb3f4ef4d..9fa14a566d 100644 --- a/sdk/go/gcp/servicedirectory/namespace.go +++ b/sdk/go/gcp/servicedirectory/namespace.go @@ -11,15 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A container for `services`. Namespaces allow administrators to group services -// together and define permissions for a collection of services. -// -// To get more information about Namespace, see: -// -// * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces) -// * How-to Guides -// - [Configuring a namespace](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_namespace) -// // ## Example Usage // ### Service Directory Namespace Basic // diff --git a/sdk/go/gcp/servicedirectory/namespaceIamBinding.go b/sdk/go/gcp/servicedirectory/namespaceIamBinding.go index b015579261..d5d2457cba 100644 --- a/sdk/go/gcp/servicedirectory/namespaceIamBinding.go +++ b/sdk/go/gcp/servicedirectory/namespaceIamBinding.go @@ -11,112 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: -// -// * `servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. -// * `servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. -// * `servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. -// -// > **Note:** `servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `servicedirectory.NamespaceIamBinding` and `servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. -// -// > **Note:** `servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_service\_directory\_namespace\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = servicedirectory.NewNamespaceIamPolicy(ctx, "policy", &servicedirectory.NamespaceIamPolicyArgs{ -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_service\_directory\_namespace\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := servicedirectory.NewNamespaceIamBinding(ctx, "binding", &servicedirectory.NamespaceIamBindingArgs{ -// Role: pulumi.String("roles/viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_service\_directory\_namespace\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := servicedirectory.NewNamespaceIamMember(ctx, "member", &servicedirectory.NamespaceIamMemberArgs{ -// Role: pulumi.String("roles/viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/servicedirectory/namespaceIamMember.go b/sdk/go/gcp/servicedirectory/namespaceIamMember.go index 24758313d1..5310839ace 100644 --- a/sdk/go/gcp/servicedirectory/namespaceIamMember.go +++ b/sdk/go/gcp/servicedirectory/namespaceIamMember.go @@ -11,112 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: -// -// * `servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. -// * `servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. -// * `servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. -// -// > **Note:** `servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `servicedirectory.NamespaceIamBinding` and `servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. -// -// > **Note:** `servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_service\_directory\_namespace\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = servicedirectory.NewNamespaceIamPolicy(ctx, "policy", &servicedirectory.NamespaceIamPolicyArgs{ -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_service\_directory\_namespace\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := servicedirectory.NewNamespaceIamBinding(ctx, "binding", &servicedirectory.NamespaceIamBindingArgs{ -// Role: pulumi.String("roles/viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_service\_directory\_namespace\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := servicedirectory.NewNamespaceIamMember(ctx, "member", &servicedirectory.NamespaceIamMemberArgs{ -// Role: pulumi.String("roles/viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/servicedirectory/namespaceIamPolicy.go b/sdk/go/gcp/servicedirectory/namespaceIamPolicy.go index c9a3cd11a4..c37e27a9c2 100644 --- a/sdk/go/gcp/servicedirectory/namespaceIamPolicy.go +++ b/sdk/go/gcp/servicedirectory/namespaceIamPolicy.go @@ -11,112 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: -// -// * `servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. -// * `servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. -// * `servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. -// -// > **Note:** `servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `servicedirectory.NamespaceIamBinding` and `servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. -// -// > **Note:** `servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_service\_directory\_namespace\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = servicedirectory.NewNamespaceIamPolicy(ctx, "policy", &servicedirectory.NamespaceIamPolicyArgs{ -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_service\_directory\_namespace\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := servicedirectory.NewNamespaceIamBinding(ctx, "binding", &servicedirectory.NamespaceIamBindingArgs{ -// Role: pulumi.String("roles/viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_service\_directory\_namespace\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := servicedirectory.NewNamespaceIamMember(ctx, "member", &servicedirectory.NamespaceIamMemberArgs{ -// Role: pulumi.String("roles/viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/servicedirectory/service.go b/sdk/go/gcp/servicedirectory/service.go index aafed428df..fab603ae83 100644 --- a/sdk/go/gcp/servicedirectory/service.go +++ b/sdk/go/gcp/servicedirectory/service.go @@ -11,14 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// An individual service. A service contains a name and optional metadata. -// -// To get more information about Service, see: -// -// * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services) -// * How-to Guides -// - [Configuring a service](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_service) -// // ## Example Usage // ### Service Directory Service Basic // diff --git a/sdk/go/gcp/servicedirectory/serviceIamBinding.go b/sdk/go/gcp/servicedirectory/serviceIamBinding.go index 120b6273c5..87a869558d 100644 --- a/sdk/go/gcp/servicedirectory/serviceIamBinding.go +++ b/sdk/go/gcp/servicedirectory/serviceIamBinding.go @@ -11,112 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: -// -// * `servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. -// * `servicedirectory.ServiceIamBinding`: 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 service are preserved. -// * `servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. -// -// > **Note:** `servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `servicedirectory.ServiceIamBinding` and `servicedirectory.ServiceIamMember` or they will fight over what your policy should be. -// -// > **Note:** `servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_service\_directory\_service\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = servicedirectory.NewServiceIamPolicy(ctx, "policy", &servicedirectory.ServiceIamPolicyArgs{ -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_service\_directory\_service\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := servicedirectory.NewServiceIamBinding(ctx, "binding", &servicedirectory.ServiceIamBindingArgs{ -// Role: pulumi.String("roles/viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_service\_directory\_service\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := servicedirectory.NewServiceIamMember(ctx, "member", &servicedirectory.ServiceIamMemberArgs{ -// Role: pulumi.String("roles/viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/servicedirectory/serviceIamMember.go b/sdk/go/gcp/servicedirectory/serviceIamMember.go index 297b1c9832..82d19edbcc 100644 --- a/sdk/go/gcp/servicedirectory/serviceIamMember.go +++ b/sdk/go/gcp/servicedirectory/serviceIamMember.go @@ -11,112 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: -// -// * `servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. -// * `servicedirectory.ServiceIamBinding`: 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 service are preserved. -// * `servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. -// -// > **Note:** `servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `servicedirectory.ServiceIamBinding` and `servicedirectory.ServiceIamMember` or they will fight over what your policy should be. -// -// > **Note:** `servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_service\_directory\_service\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = servicedirectory.NewServiceIamPolicy(ctx, "policy", &servicedirectory.ServiceIamPolicyArgs{ -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_service\_directory\_service\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := servicedirectory.NewServiceIamBinding(ctx, "binding", &servicedirectory.ServiceIamBindingArgs{ -// Role: pulumi.String("roles/viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_service\_directory\_service\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := servicedirectory.NewServiceIamMember(ctx, "member", &servicedirectory.ServiceIamMemberArgs{ -// Role: pulumi.String("roles/viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/servicedirectory/serviceIamPolicy.go b/sdk/go/gcp/servicedirectory/serviceIamPolicy.go index 447321ec4a..c9d77b2c17 100644 --- a/sdk/go/gcp/servicedirectory/serviceIamPolicy.go +++ b/sdk/go/gcp/servicedirectory/serviceIamPolicy.go @@ -11,112 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: -// -// * `servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. -// * `servicedirectory.ServiceIamBinding`: 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 service are preserved. -// * `servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. -// -// > **Note:** `servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `servicedirectory.ServiceIamBinding` and `servicedirectory.ServiceIamMember` or they will fight over what your policy should be. -// -// > **Note:** `servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. -// -// ## google\_service\_directory\_service\_iam\_policy -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// admin, err := organizations.LookupIAMPolicy(ctx, &organizations.LookupIAMPolicyArgs{ -// Bindings: []organizations.GetIAMPolicyBinding{ -// { -// Role: "roles/viewer", -// Members: []string{ -// "user:jane@example.com", -// }, -// }, -// }, -// }, nil) -// if err != nil { -// return err -// } -// _, err = servicedirectory.NewServiceIamPolicy(ctx, "policy", &servicedirectory.ServiceIamPolicyArgs{ -// PolicyData: *pulumi.String(admin.PolicyData), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_service\_directory\_service\_iam\_binding -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := servicedirectory.NewServiceIamBinding(ctx, "binding", &servicedirectory.ServiceIamBindingArgs{ -// Role: pulumi.String("roles/viewer"), -// Members: pulumi.StringArray{ -// pulumi.String("user:jane@example.com"), -// }, -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// -// ## google\_service\_directory\_service\_iam\_member -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicedirectory" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// _, err := servicedirectory.NewServiceIamMember(ctx, "member", &servicedirectory.ServiceIamMemberArgs{ -// Role: pulumi.String("roles/viewer"), -// Member: pulumi.String("user:jane@example.com"), -// }, pulumi.Provider(google_beta)) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` -// // ## Import // // For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/go/gcp/serviceusage/consumerQuotaOverride.go b/sdk/go/gcp/serviceusage/consumerQuotaOverride.go index ed82ff8ba7..7930f1c9cb 100644 --- a/sdk/go/gcp/serviceusage/consumerQuotaOverride.go +++ b/sdk/go/gcp/serviceusage/consumerQuotaOverride.go @@ -11,16 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A consumer override is applied to the consumer on its own authority to limit its own quota usage. -// Consumer overrides cannot be used to grant more quota than would be allowed by admin overrides, -// producer overrides, or the default limit of the service. -// -// To get more information about ConsumerQuotaOverride, see: -// -// * How-to Guides -// - [Getting Started](https://cloud.google.com/service-usage/docs/getting-started) -// - [REST API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services.consumerQuotaMetrics.limits.consumerOverrides) -// // ## Example Usage // // ## Import diff --git a/sdk/go/gcp/spanner/database.go b/sdk/go/gcp/spanner/database.go index e930b9ff4b..cc756e903a 100644 --- a/sdk/go/gcp/spanner/database.go +++ b/sdk/go/gcp/spanner/database.go @@ -11,16 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A Cloud Spanner Database which is hosted on a Spanner instance. -// -// To get more information about Database, see: -// -// * [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instances.databases) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/spanner/) -// -// > **Warning:** It is strongly recommended to set `lifecycle { preventDestroy = true }` on databases in order to prevent accidental data loss. -// // ## Example Usage // ### Spanner Database Basic // @@ -101,8 +91,8 @@ type Database struct { // execute atomically with the creation of the database: if there is an // error in any statement, the database is not created. Ddls pulumi.StringArrayOutput `pulumi:"ddls"` - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `destroy` or `update` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // 'terraform destroy' or 'terraform apply' that would delete the instance will fail. DeletionProtection pulumi.BoolPtrOutput `pulumi:"deletionProtection"` // Encryption configuration for the database // Structure is documented below. @@ -166,8 +156,8 @@ type databaseState struct { // execute atomically with the creation of the database: if there is an // error in any statement, the database is not created. Ddls []string `pulumi:"ddls"` - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `destroy` or `update` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // 'terraform destroy' or 'terraform apply' that would delete the instance will fail. DeletionProtection *bool `pulumi:"deletionProtection"` // Encryption configuration for the database // Structure is documented below. @@ -200,8 +190,8 @@ type DatabaseState struct { // execute atomically with the creation of the database: if there is an // error in any statement, the database is not created. Ddls pulumi.StringArrayInput - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `destroy` or `update` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // 'terraform destroy' or 'terraform apply' that would delete the instance will fail. DeletionProtection pulumi.BoolPtrInput // Encryption configuration for the database // Structure is documented below. @@ -238,8 +228,8 @@ type databaseArgs struct { // execute atomically with the creation of the database: if there is an // error in any statement, the database is not created. Ddls []string `pulumi:"ddls"` - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `destroy` or `update` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // 'terraform destroy' or 'terraform apply' that would delete the instance will fail. DeletionProtection *bool `pulumi:"deletionProtection"` // Encryption configuration for the database // Structure is documented below. @@ -271,8 +261,8 @@ type DatabaseArgs struct { // execute atomically with the creation of the database: if there is an // error in any statement, the database is not created. Ddls pulumi.StringArrayInput - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `destroy` or `update` that would delete the instance will fail. + // Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + // 'terraform destroy' or 'terraform apply' that would delete the instance will fail. DeletionProtection pulumi.BoolPtrInput // Encryption configuration for the database // Structure is documented below. @@ -395,8 +385,8 @@ func (o DatabaseOutput) Ddls() pulumi.StringArrayOutput { return o.ApplyT(func(v *Database) pulumi.StringArrayOutput { return v.Ddls }).(pulumi.StringArrayOutput) } -// Whether or not to allow the provider to destroy the instance. Unless this field is set to false -// in state, a `destroy` or `update` that would delete the instance will fail. +// Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a +// 'terraform destroy' or 'terraform apply' that would delete the instance will fail. func (o DatabaseOutput) DeletionProtection() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Database) pulumi.BoolPtrOutput { return v.DeletionProtection }).(pulumi.BoolPtrOutput) } diff --git a/sdk/go/gcp/sql/databaseInstance.go b/sdk/go/gcp/sql/databaseInstance.go index 9b3a95859a..7a30bc17d0 100644 --- a/sdk/go/gcp/sql/databaseInstance.go +++ b/sdk/go/gcp/sql/databaseInstance.go @@ -11,18 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Creates a new Google SQL Database Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), -// or the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/instances). -// -// > **NOTE on `sql.DatabaseInstance`:** - Second-generation instances include a -// default 'root'@'%' user with no password. This user will be deleted by the provider on -// instance creation. You should use `sql.User` to define a custom user with -// a restricted host and strong password. -// -// > **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false` -// (and run `pulumi update` to write the field to state) in order to destroy an instance. -// It is recommended to not set this field (or set it to true) until you're ready to destroy the instance and its databases. -// // ## Example Usage // ### SQL Second Generation Instance // @@ -150,9 +138,7 @@ type DatabaseInstance struct { // The list of all maintenance versions applicable on the instance. AvailableMaintenanceVersions pulumi.StringArrayOutput `pulumi:"availableMaintenanceVersions"` - // The context needed to create this instance as a clone of another instance. When this field is set during - // resource creation, this provider will attempt to clone another instance as indicated in the context. The - // configuration is detailed below. + // Configuration for creating a new instance as a clone of another instance. Clone DatabaseInstanceClonePtrOutput `pulumi:"clone"` // The connection name of the instance to be used in // connection strings. For example, when connecting with [Cloud SQL Proxy](https://cloud.google.com/sql/docs/mysql/connect-admin-proxy). @@ -167,19 +153,11 @@ type DatabaseInstance struct { // [Database Version Policies](https://cloud.google.com/sql/docs/db-versions) // includes an up-to-date reference of supported versions. DatabaseVersion pulumi.StringOutput `pulumi:"databaseVersion"` - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + // Used to block Terraform from deleting a SQL Instance. Defaults to true. DeletionProtection pulumi.BoolPtrOutput `pulumi:"deletionProtection"` - // The full path to the encryption key used for the CMEK disk encryption. Setting - // up disk encryption currently requires manual steps outside of this provider. - // The provided key must be in the same region as the SQL instance. In order - // to use this feature, a special kind of service account must be created and - // granted permission on this key. This step can currently only be done - // manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - // That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - // key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - EncryptionKeyName pulumi.StringOutput `pulumi:"encryptionKeyName"` - // The first IPv4 address of any type assigned. + EncryptionKeyName pulumi.StringOutput `pulumi:"encryptionKeyName"` + // The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + // output when the resource is configured with a count. FirstIpAddress pulumi.StringOutput `pulumi:"firstIpAddress"` // The type of the instance. The supported values are `SQL_INSTANCE_TYPE_UNSPECIFIED`, `CLOUD_SQL_INSTANCE`, `ON_PREMISES_INSTANCE` and `READ_REPLICA_INSTANCE`. InstanceType pulumi.StringOutput `pulumi:"instanceType"` @@ -190,30 +168,26 @@ type DatabaseInstance struct { // act as the master in the replication setup. Note, this requires the master to // have `binaryLogEnabled` set, as well as existing backups. MasterInstanceName pulumi.StringOutput `pulumi:"masterInstanceName"` - // The name of the instance. If the name is left - // blank, the provider will randomly generate one when the instance is first - // created. This is done because after a name is used, it cannot be reused for - // up to [one week](https://cloud.google.com/sql/docs/delete-instance). + // The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + // created. This is done because after a name is used, it cannot be reused for up to one week. Name pulumi.StringOutput `pulumi:"name"` - // The first private (`PRIVATE`) IPv4 address assigned. + // IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + // access an IP of a specific type without performing filtering in a Terraform config. PrivateIpAddress pulumi.StringOutput `pulumi:"privateIpAddress"` // 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 first public (`PRIMARY`) IPv4 address assigned. + // IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + // access an IP of a specific type without performing filtering in a Terraform config. PublicIpAddress pulumi.StringOutput `pulumi:"publicIpAddress"` // The region the instance will sit in. If a region is not provided in the resource definition, // the provider region will be used instead. Region pulumi.StringOutput `pulumi:"region"` // The configuration for replication. The // configuration is detailed below. Valid only for MySQL instances. - ReplicaConfiguration DatabaseInstanceReplicaConfigurationOutput `pulumi:"replicaConfiguration"` - // 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 - // block during resource creation/update will trigger the restore action after the resource is created/updated. + ReplicaConfiguration DatabaseInstanceReplicaConfigurationOutput `pulumi:"replicaConfiguration"` RestoreBackupContext DatabaseInstanceRestoreBackupContextPtrOutput `pulumi:"restoreBackupContext"` - // Initial root password. Required for MS SQL Server. + // Initial root password. Can be updated. Required for MS SQL Server. RootPassword pulumi.StringPtrOutput `pulumi:"rootPassword"` // The URI of the created resource. SelfLink pulumi.StringOutput `pulumi:"selfLink"` @@ -267,9 +241,7 @@ func GetDatabaseInstance(ctx *pulumi.Context, type databaseInstanceState struct { // The list of all maintenance versions applicable on the instance. AvailableMaintenanceVersions []string `pulumi:"availableMaintenanceVersions"` - // The context needed to create this instance as a clone of another instance. When this field is set during - // resource creation, this provider will attempt to clone another instance as indicated in the context. The - // configuration is detailed below. + // Configuration for creating a new instance as a clone of another instance. Clone *DatabaseInstanceClone `pulumi:"clone"` // The connection name of the instance to be used in // connection strings. For example, when connecting with [Cloud SQL Proxy](https://cloud.google.com/sql/docs/mysql/connect-admin-proxy). @@ -284,19 +256,11 @@ type databaseInstanceState struct { // [Database Version Policies](https://cloud.google.com/sql/docs/db-versions) // includes an up-to-date reference of supported versions. DatabaseVersion *string `pulumi:"databaseVersion"` - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. - DeletionProtection *bool `pulumi:"deletionProtection"` - // The full path to the encryption key used for the CMEK disk encryption. Setting - // up disk encryption currently requires manual steps outside of this provider. - // The provided key must be in the same region as the SQL instance. In order - // to use this feature, a special kind of service account must be created and - // granted permission on this key. This step can currently only be done - // manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - // That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - // key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - EncryptionKeyName *string `pulumi:"encryptionKeyName"` - // The first IPv4 address of any type assigned. + // Used to block Terraform from deleting a SQL Instance. Defaults to true. + DeletionProtection *bool `pulumi:"deletionProtection"` + EncryptionKeyName *string `pulumi:"encryptionKeyName"` + // The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + // output when the resource is configured with a count. FirstIpAddress *string `pulumi:"firstIpAddress"` // The type of the instance. The supported values are `SQL_INSTANCE_TYPE_UNSPECIFIED`, `CLOUD_SQL_INSTANCE`, `ON_PREMISES_INSTANCE` and `READ_REPLICA_INSTANCE`. InstanceType *string `pulumi:"instanceType"` @@ -307,17 +271,17 @@ type databaseInstanceState struct { // act as the master in the replication setup. Note, this requires the master to // have `binaryLogEnabled` set, as well as existing backups. MasterInstanceName *string `pulumi:"masterInstanceName"` - // The name of the instance. If the name is left - // blank, the provider will randomly generate one when the instance is first - // created. This is done because after a name is used, it cannot be reused for - // up to [one week](https://cloud.google.com/sql/docs/delete-instance). + // The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + // created. This is done because after a name is used, it cannot be reused for up to one week. Name *string `pulumi:"name"` - // The first private (`PRIVATE`) IPv4 address assigned. + // IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + // access an IP of a specific type without performing filtering in a Terraform config. PrivateIpAddress *string `pulumi:"privateIpAddress"` // 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 first public (`PRIMARY`) IPv4 address assigned. + // IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + // access an IP of a specific type without performing filtering in a Terraform config. PublicIpAddress *string `pulumi:"publicIpAddress"` // The region the instance will sit in. If a region is not provided in the resource definition, // the provider region will be used instead. @@ -325,12 +289,8 @@ type databaseInstanceState struct { // The configuration for replication. The // configuration is detailed below. Valid only for MySQL instances. ReplicaConfiguration *DatabaseInstanceReplicaConfiguration `pulumi:"replicaConfiguration"` - // 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 - // block during resource creation/update will trigger the restore action after the resource is created/updated. RestoreBackupContext *DatabaseInstanceRestoreBackupContext `pulumi:"restoreBackupContext"` - // Initial root password. Required for MS SQL Server. + // Initial root password. Can be updated. Required for MS SQL Server. RootPassword *string `pulumi:"rootPassword"` // The URI of the created resource. SelfLink *string `pulumi:"selfLink"` @@ -346,9 +306,7 @@ type databaseInstanceState struct { type DatabaseInstanceState struct { // The list of all maintenance versions applicable on the instance. AvailableMaintenanceVersions pulumi.StringArrayInput - // The context needed to create this instance as a clone of another instance. When this field is set during - // resource creation, this provider will attempt to clone another instance as indicated in the context. The - // configuration is detailed below. + // Configuration for creating a new instance as a clone of another instance. Clone DatabaseInstanceClonePtrInput // The connection name of the instance to be used in // connection strings. For example, when connecting with [Cloud SQL Proxy](https://cloud.google.com/sql/docs/mysql/connect-admin-proxy). @@ -363,19 +321,11 @@ type DatabaseInstanceState struct { // [Database Version Policies](https://cloud.google.com/sql/docs/db-versions) // includes an up-to-date reference of supported versions. DatabaseVersion pulumi.StringPtrInput - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + // Used to block Terraform from deleting a SQL Instance. Defaults to true. DeletionProtection pulumi.BoolPtrInput - // The full path to the encryption key used for the CMEK disk encryption. Setting - // up disk encryption currently requires manual steps outside of this provider. - // The provided key must be in the same region as the SQL instance. In order - // to use this feature, a special kind of service account must be created and - // granted permission on this key. This step can currently only be done - // manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - // That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - // key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - EncryptionKeyName pulumi.StringPtrInput - // The first IPv4 address of any type assigned. + EncryptionKeyName pulumi.StringPtrInput + // The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + // output when the resource is configured with a count. FirstIpAddress pulumi.StringPtrInput // The type of the instance. The supported values are `SQL_INSTANCE_TYPE_UNSPECIFIED`, `CLOUD_SQL_INSTANCE`, `ON_PREMISES_INSTANCE` and `READ_REPLICA_INSTANCE`. InstanceType pulumi.StringPtrInput @@ -386,17 +336,17 @@ type DatabaseInstanceState struct { // act as the master in the replication setup. Note, this requires the master to // have `binaryLogEnabled` set, as well as existing backups. MasterInstanceName pulumi.StringPtrInput - // The name of the instance. If the name is left - // blank, the provider will randomly generate one when the instance is first - // created. This is done because after a name is used, it cannot be reused for - // up to [one week](https://cloud.google.com/sql/docs/delete-instance). + // The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + // created. This is done because after a name is used, it cannot be reused for up to one week. Name pulumi.StringPtrInput - // The first private (`PRIVATE`) IPv4 address assigned. + // IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + // access an IP of a specific type without performing filtering in a Terraform config. PrivateIpAddress 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 first public (`PRIMARY`) IPv4 address assigned. + // IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + // access an IP of a specific type without performing filtering in a Terraform config. PublicIpAddress pulumi.StringPtrInput // The region the instance will sit in. If a region is not provided in the resource definition, // the provider region will be used instead. @@ -404,12 +354,8 @@ type DatabaseInstanceState struct { // The configuration for replication. The // configuration is detailed below. Valid only for MySQL instances. ReplicaConfiguration DatabaseInstanceReplicaConfigurationPtrInput - // 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 - // block during resource creation/update will trigger the restore action after the resource is created/updated. RestoreBackupContext DatabaseInstanceRestoreBackupContextPtrInput - // Initial root password. Required for MS SQL Server. + // Initial root password. Can be updated. Required for MS SQL Server. RootPassword pulumi.StringPtrInput // The URI of the created resource. SelfLink pulumi.StringPtrInput @@ -427,9 +373,7 @@ func (DatabaseInstanceState) ElementType() reflect.Type { } type databaseInstanceArgs struct { - // The context needed to create this instance as a clone of another instance. When this field is set during - // resource creation, this provider will attempt to clone another instance as indicated in the context. The - // configuration is detailed below. + // Configuration for creating a new instance as a clone of another instance. Clone *DatabaseInstanceClone `pulumi:"clone"` // The MySQL, PostgreSQL or // SQL Server version to use. Supported values include `MYSQL_5_6`, @@ -441,28 +385,17 @@ type databaseInstanceArgs struct { // [Database Version Policies](https://cloud.google.com/sql/docs/db-versions) // includes an up-to-date reference of supported versions. DatabaseVersion string `pulumi:"databaseVersion"` - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. - DeletionProtection *bool `pulumi:"deletionProtection"` - // The full path to the encryption key used for the CMEK disk encryption. Setting - // up disk encryption currently requires manual steps outside of this provider. - // The provided key must be in the same region as the SQL instance. In order - // to use this feature, a special kind of service account must be created and - // granted permission on this key. This step can currently only be done - // manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - // That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - // key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - EncryptionKeyName *string `pulumi:"encryptionKeyName"` + // Used to block Terraform from deleting a SQL Instance. Defaults to true. + DeletionProtection *bool `pulumi:"deletionProtection"` + EncryptionKeyName *string `pulumi:"encryptionKeyName"` // The current software version on the instance. This attribute can not be set during creation. Refer to `availableMaintenanceVersions` attribute to see what `maintenanceVersion` are available for upgrade. When this attribute gets updated, it will cause an instance restart. Setting a `maintenanceVersion` value that is older than the current one on the instance will be ignored. MaintenanceVersion *string `pulumi:"maintenanceVersion"` // The name of the existing instance that will // act as the master in the replication setup. Note, this requires the master to // have `binaryLogEnabled` set, as well as existing backups. MasterInstanceName *string `pulumi:"masterInstanceName"` - // The name of the instance. If the name is left - // blank, the provider will randomly generate one when the instance is first - // created. This is done because after a name is used, it cannot be reused for - // up to [one week](https://cloud.google.com/sql/docs/delete-instance). + // The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + // created. This is done because after a name is used, it cannot be reused for up to one week. Name *string `pulumi:"name"` // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. @@ -473,12 +406,8 @@ type databaseInstanceArgs struct { // The configuration for replication. The // configuration is detailed below. Valid only for MySQL instances. ReplicaConfiguration *DatabaseInstanceReplicaConfiguration `pulumi:"replicaConfiguration"` - // 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 - // block during resource creation/update will trigger the restore action after the resource is created/updated. RestoreBackupContext *DatabaseInstanceRestoreBackupContext `pulumi:"restoreBackupContext"` - // Initial root password. Required for MS SQL Server. + // Initial root password. Can be updated. Required for MS SQL Server. RootPassword *string `pulumi:"rootPassword"` // The settings to use for the database. The // configuration is detailed below. Required if `clone` is not set. @@ -487,9 +416,7 @@ type databaseInstanceArgs struct { // The set of arguments for constructing a DatabaseInstance resource. type DatabaseInstanceArgs struct { - // The context needed to create this instance as a clone of another instance. When this field is set during - // resource creation, this provider will attempt to clone another instance as indicated in the context. The - // configuration is detailed below. + // Configuration for creating a new instance as a clone of another instance. Clone DatabaseInstanceClonePtrInput // The MySQL, PostgreSQL or // SQL Server version to use. Supported values include `MYSQL_5_6`, @@ -501,28 +428,17 @@ type DatabaseInstanceArgs struct { // [Database Version Policies](https://cloud.google.com/sql/docs/db-versions) // includes an up-to-date reference of supported versions. DatabaseVersion pulumi.StringInput - // Whether or not to allow the provider to destroy the instance. Unless this field is set to false - // in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + // Used to block Terraform from deleting a SQL Instance. Defaults to true. DeletionProtection pulumi.BoolPtrInput - // The full path to the encryption key used for the CMEK disk encryption. Setting - // up disk encryption currently requires manual steps outside of this provider. - // The provided key must be in the same region as the SQL instance. In order - // to use this feature, a special kind of service account must be created and - // granted permission on this key. This step can currently only be done - // manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - // That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - // key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - EncryptionKeyName pulumi.StringPtrInput + EncryptionKeyName pulumi.StringPtrInput // The current software version on the instance. This attribute can not be set during creation. Refer to `availableMaintenanceVersions` attribute to see what `maintenanceVersion` are available for upgrade. When this attribute gets updated, it will cause an instance restart. Setting a `maintenanceVersion` value that is older than the current one on the instance will be ignored. MaintenanceVersion pulumi.StringPtrInput // The name of the existing instance that will // act as the master in the replication setup. Note, this requires the master to // have `binaryLogEnabled` set, as well as existing backups. MasterInstanceName pulumi.StringPtrInput - // The name of the instance. If the name is left - // blank, the provider will randomly generate one when the instance is first - // created. This is done because after a name is used, it cannot be reused for - // up to [one week](https://cloud.google.com/sql/docs/delete-instance). + // The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + // created. This is done because after a name is used, it cannot be reused for up to one week. Name pulumi.StringPtrInput // The ID of the project in which the resource belongs. If it // is not provided, the provider project is used. @@ -533,12 +449,8 @@ type DatabaseInstanceArgs struct { // The configuration for replication. The // configuration is detailed below. Valid only for MySQL instances. ReplicaConfiguration DatabaseInstanceReplicaConfigurationPtrInput - // 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 - // block during resource creation/update will trigger the restore action after the resource is created/updated. RestoreBackupContext DatabaseInstanceRestoreBackupContextPtrInput - // Initial root password. Required for MS SQL Server. + // Initial root password. Can be updated. Required for MS SQL Server. RootPassword pulumi.StringPtrInput // The settings to use for the database. The // configuration is detailed below. Required if `clone` is not set. @@ -637,9 +549,7 @@ func (o DatabaseInstanceOutput) AvailableMaintenanceVersions() pulumi.StringArra return o.ApplyT(func(v *DatabaseInstance) pulumi.StringArrayOutput { return v.AvailableMaintenanceVersions }).(pulumi.StringArrayOutput) } -// The context needed to create this instance as a clone of another instance. When this field is set during -// resource creation, this provider will attempt to clone another instance as indicated in the context. The -// configuration is detailed below. +// Configuration for creating a new instance as a clone of another instance. func (o DatabaseInstanceOutput) Clone() DatabaseInstanceClonePtrOutput { return o.ApplyT(func(v *DatabaseInstance) DatabaseInstanceClonePtrOutput { return v.Clone }).(DatabaseInstanceClonePtrOutput) } @@ -663,25 +573,17 @@ func (o DatabaseInstanceOutput) DatabaseVersion() pulumi.StringOutput { return o.ApplyT(func(v *DatabaseInstance) pulumi.StringOutput { return v.DatabaseVersion }).(pulumi.StringOutput) } -// Whether or not to allow the provider to destroy the instance. Unless this field is set to false -// in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. +// Used to block Terraform from deleting a SQL Instance. Defaults to true. func (o DatabaseInstanceOutput) DeletionProtection() pulumi.BoolPtrOutput { return o.ApplyT(func(v *DatabaseInstance) pulumi.BoolPtrOutput { return v.DeletionProtection }).(pulumi.BoolPtrOutput) } -// The full path to the encryption key used for the CMEK disk encryption. Setting -// up disk encryption currently requires manual steps outside of this provider. -// The provided key must be in the same region as the SQL instance. In order -// to use this feature, a special kind of service account must be created and -// granted permission on this key. This step can currently only be done -// manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). -// That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your -// key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). func (o DatabaseInstanceOutput) EncryptionKeyName() pulumi.StringOutput { return o.ApplyT(func(v *DatabaseInstance) pulumi.StringOutput { return v.EncryptionKeyName }).(pulumi.StringOutput) } -// The first IPv4 address of any type assigned. +// The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform +// output when the resource is configured with a count. func (o DatabaseInstanceOutput) FirstIpAddress() pulumi.StringOutput { return o.ApplyT(func(v *DatabaseInstance) pulumi.StringOutput { return v.FirstIpAddress }).(pulumi.StringOutput) } @@ -707,15 +609,14 @@ func (o DatabaseInstanceOutput) MasterInstanceName() pulumi.StringOutput { return o.ApplyT(func(v *DatabaseInstance) pulumi.StringOutput { return v.MasterInstanceName }).(pulumi.StringOutput) } -// The name of the instance. If the name is left -// blank, the provider will randomly generate one when the instance is first -// created. This is done because after a name is used, it cannot be reused for -// up to [one week](https://cloud.google.com/sql/docs/delete-instance). +// The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first +// created. This is done because after a name is used, it cannot be reused for up to one week. func (o DatabaseInstanceOutput) Name() pulumi.StringOutput { return o.ApplyT(func(v *DatabaseInstance) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) } -// The first private (`PRIVATE`) IPv4 address assigned. +// IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to +// access an IP of a specific type without performing filtering in a Terraform config. func (o DatabaseInstanceOutput) PrivateIpAddress() pulumi.StringOutput { return o.ApplyT(func(v *DatabaseInstance) pulumi.StringOutput { return v.PrivateIpAddress }).(pulumi.StringOutput) } @@ -726,7 +627,8 @@ func (o DatabaseInstanceOutput) Project() pulumi.StringOutput { return o.ApplyT(func(v *DatabaseInstance) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) } -// The first public (`PRIMARY`) IPv4 address assigned. +// IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to +// access an IP of a specific type without performing filtering in a Terraform config. func (o DatabaseInstanceOutput) PublicIpAddress() pulumi.StringOutput { return o.ApplyT(func(v *DatabaseInstance) pulumi.StringOutput { return v.PublicIpAddress }).(pulumi.StringOutput) } @@ -743,15 +645,11 @@ func (o DatabaseInstanceOutput) ReplicaConfiguration() DatabaseInstanceReplicaCo return o.ApplyT(func(v *DatabaseInstance) DatabaseInstanceReplicaConfigurationOutput { return v.ReplicaConfiguration }).(DatabaseInstanceReplicaConfigurationOutput) } -// 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 -// block during resource creation/update will trigger the restore action after the resource is created/updated. func (o DatabaseInstanceOutput) RestoreBackupContext() DatabaseInstanceRestoreBackupContextPtrOutput { return o.ApplyT(func(v *DatabaseInstance) DatabaseInstanceRestoreBackupContextPtrOutput { return v.RestoreBackupContext }).(DatabaseInstanceRestoreBackupContextPtrOutput) } -// Initial root password. Required for MS SQL Server. +// Initial root password. Can be updated. Required for MS SQL Server. func (o DatabaseInstanceOutput) RootPassword() pulumi.StringPtrOutput { return o.ApplyT(func(v *DatabaseInstance) pulumi.StringPtrOutput { return v.RootPassword }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/sql/sourceRepresentationInstance.go b/sdk/go/gcp/sql/sourceRepresentationInstance.go index aff5d3ebcc..4e159bba0a 100644 --- a/sdk/go/gcp/sql/sourceRepresentationInstance.go +++ b/sdk/go/gcp/sql/sourceRepresentationInstance.go @@ -11,12 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// A source representation instance is a Cloud SQL instance that represents -// the source database server to the Cloud SQL replica. It is visible in the -// Cloud Console and appears the same as a regular Cloud SQL instance, but it -// contains no data, requires no configuration or maintenance, and does not -// affect billing. You cannot update the source representation instance. -// // ## Example Usage // ### Sql Source Representation Instance Basic // @@ -34,9 +28,12 @@ import ( // pulumi.Run(func(ctx *pulumi.Context) error { // _, err := sql.NewSourceRepresentationInstance(ctx, "instance", &sql.SourceRepresentationInstanceArgs{ // DatabaseVersion: pulumi.String("MYSQL_8_0"), +// DumpFilePath: pulumi.String("gs://replica-bucket/source-database.sql.gz"), // Host: pulumi.String("10.20.30.40"), +// Password: pulumi.String("password-for-the-user"), // Port: pulumi.Int(3306), // Region: pulumi.String("us-central1"), +// Username: pulumi.String("some-user"), // }) // if err != nil { // return err @@ -87,6 +84,7 @@ type SourceRepresentationInstance struct { // The name of the source representation instance. Use any valid Cloud SQL instance name. Name pulumi.StringOutput `pulumi:"name"` // The password for the replication user account. + // **Note**: This property is sensitive and will not be displayed in the plan. Password pulumi.StringPtrOutput `pulumi:"password"` // The externally accessible port for the source database server. // Defaults to 3306. @@ -114,6 +112,13 @@ func NewSourceRepresentationInstance(ctx *pulumi.Context, if args.Host == nil { return nil, errors.New("invalid value for required argument 'Host'") } + if args.Password != nil { + args.Password = pulumi.ToSecret(args.Password).(pulumi.StringPtrInput) + } + secrets := pulumi.AdditionalSecretOutputs([]string{ + "password", + }) + opts = append(opts, secrets) var resource SourceRepresentationInstance err := ctx.RegisterResource("gcp:sql/sourceRepresentationInstance:SourceRepresentationInstance", name, args, &resource, opts...) if err != nil { @@ -152,6 +157,7 @@ type sourceRepresentationInstanceState struct { // The name of the source representation instance. Use any valid Cloud SQL instance name. Name *string `pulumi:"name"` // The password for the replication user account. + // **Note**: This property is sensitive and will not be displayed in the plan. Password *string `pulumi:"password"` // The externally accessible port for the source database server. // Defaults to 3306. @@ -183,6 +189,7 @@ type SourceRepresentationInstanceState struct { // The name of the source representation instance. Use any valid Cloud SQL instance name. Name pulumi.StringPtrInput // The password for the replication user account. + // **Note**: This property is sensitive and will not be displayed in the plan. Password pulumi.StringPtrInput // The externally accessible port for the source database server. // Defaults to 3306. @@ -218,6 +225,7 @@ type sourceRepresentationInstanceArgs struct { // The name of the source representation instance. Use any valid Cloud SQL instance name. Name *string `pulumi:"name"` // The password for the replication user account. + // **Note**: This property is sensitive and will not be displayed in the plan. Password *string `pulumi:"password"` // The externally accessible port for the source database server. // Defaults to 3306. @@ -250,6 +258,7 @@ type SourceRepresentationInstanceArgs struct { // The name of the source representation instance. Use any valid Cloud SQL instance name. Name pulumi.StringPtrInput // The password for the replication user account. + // **Note**: This property is sensitive and will not be displayed in the plan. Password pulumi.StringPtrInput // The externally accessible port for the source database server. // Defaults to 3306. @@ -388,6 +397,7 @@ func (o SourceRepresentationInstanceOutput) Name() pulumi.StringOutput { } // The password for the replication user account. +// **Note**: This property is sensitive and will not be displayed in the plan. func (o SourceRepresentationInstanceOutput) Password() pulumi.StringPtrOutput { return o.ApplyT(func(v *SourceRepresentationInstance) pulumi.StringPtrOutput { return v.Password }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/sql/sslCert.go b/sdk/go/gcp/sql/sslCert.go index df722b4d68..854a73f855 100644 --- a/sdk/go/gcp/sql/sslCert.go +++ b/sdk/go/gcp/sql/sslCert.go @@ -11,10 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Creates a new Google SQL SSL Cert on a Google SQL Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/sslCerts). -// -// > **Note:** All arguments including the private key will be stored in the raw state as plain-text -// // ## Example Usage // // Example creating a SQL Client Certificate. diff --git a/sdk/go/gcp/sql/user.go b/sdk/go/gcp/sql/user.go index bcd7c3a1fa..65687afbf0 100644 --- a/sdk/go/gcp/sql/user.go +++ b/sdk/go/gcp/sql/user.go @@ -11,10 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Creates a new Google SQL User on a Google SQL User Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/users). -// -// > **Note:** All arguments including the username and password will be stored in the raw state as plain-text. -// // ## Example Usage // // Example creating a SQL User. diff --git a/sdk/go/gcp/storage/bucket.go b/sdk/go/gcp/storage/bucket.go index 93103118c6..3b0cc8df37 100644 --- a/sdk/go/gcp/storage/bucket.go +++ b/sdk/go/gcp/storage/bucket.go @@ -176,9 +176,8 @@ type Bucket struct { DefaultEventBasedHold pulumi.BoolPtrOutput `pulumi:"defaultEventBasedHold"` // The bucket's encryption configuration. Structure is documented below. Encryption BucketEncryptionPtrOutput `pulumi:"encryption"` - // When deleting a bucket, this - // boolean option will delete all contained objects. If you try to delete a - // bucket that contains objects, the provider will fail that run. + // When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + // contains objects, Terraform will fail that run. ForceDestroy pulumi.BoolPtrOutput `pulumi:"forceDestroy"` // A map of key/value label pairs to assign to the bucket. Labels pulumi.StringMapOutput `pulumi:"labels"` @@ -255,9 +254,8 @@ type bucketState struct { DefaultEventBasedHold *bool `pulumi:"defaultEventBasedHold"` // The bucket's encryption configuration. Structure is documented below. Encryption *BucketEncryption `pulumi:"encryption"` - // When deleting a bucket, this - // boolean option will delete all contained objects. If you try to delete a - // bucket that contains objects, the provider will fail that run. + // When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + // contains objects, Terraform will fail that run. ForceDestroy *bool `pulumi:"forceDestroy"` // A map of key/value label pairs to assign to the bucket. Labels map[string]string `pulumi:"labels"` @@ -303,9 +301,8 @@ type BucketState struct { DefaultEventBasedHold pulumi.BoolPtrInput // The bucket's encryption configuration. Structure is documented below. Encryption BucketEncryptionPtrInput - // When deleting a bucket, this - // boolean option will delete all contained objects. If you try to delete a - // bucket that contains objects, the provider will fail that run. + // When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + // contains objects, Terraform will fail that run. ForceDestroy pulumi.BoolPtrInput // A map of key/value label pairs to assign to the bucket. Labels pulumi.StringMapInput @@ -355,9 +352,8 @@ type bucketArgs struct { DefaultEventBasedHold *bool `pulumi:"defaultEventBasedHold"` // The bucket's encryption configuration. Structure is documented below. Encryption *BucketEncryption `pulumi:"encryption"` - // When deleting a bucket, this - // boolean option will delete all contained objects. If you try to delete a - // bucket that contains objects, the provider will fail that run. + // When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + // contains objects, Terraform will fail that run. ForceDestroy *bool `pulumi:"forceDestroy"` // A map of key/value label pairs to assign to the bucket. Labels map[string]string `pulumi:"labels"` @@ -400,9 +396,8 @@ type BucketArgs struct { DefaultEventBasedHold pulumi.BoolPtrInput // The bucket's encryption configuration. Structure is documented below. Encryption BucketEncryptionPtrInput - // When deleting a bucket, this - // boolean option will delete all contained objects. If you try to delete a - // bucket that contains objects, the provider will fail that run. + // When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + // contains objects, Terraform will fail that run. ForceDestroy pulumi.BoolPtrInput // A map of key/value label pairs to assign to the bucket. Labels pulumi.StringMapInput @@ -545,9 +540,8 @@ func (o BucketOutput) Encryption() BucketEncryptionPtrOutput { return o.ApplyT(func(v *Bucket) BucketEncryptionPtrOutput { return v.Encryption }).(BucketEncryptionPtrOutput) } -// When deleting a bucket, this -// boolean option will delete all contained objects. If you try to delete a -// bucket that contains objects, the provider will fail that run. +// When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that +// contains objects, Terraform will fail that run. func (o BucketOutput) ForceDestroy() pulumi.BoolPtrOutput { return o.ApplyT(func(v *Bucket) pulumi.BoolPtrOutput { return v.ForceDestroy }).(pulumi.BoolPtrOutput) } diff --git a/sdk/go/gcp/storage/bucketACL.go b/sdk/go/gcp/storage/bucketACL.go index 2f10c74de8..dab08ea4e8 100644 --- a/sdk/go/gcp/storage/bucketACL.go +++ b/sdk/go/gcp/storage/bucketACL.go @@ -11,17 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Authoritatively manages a bucket's ACLs in Google cloud storage service (GCS). For more information see -// [the official documentation](https://cloud.google.com/storage/docs/access-control/lists) -// and -// [API](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls). -// -// Bucket ACLs can be managed non authoritatively using the `storageBucketAccessControl` resource. Do not use these two resources in conjunction to manage the same bucket. -// -// Permissions can be granted either by ACLs or Cloud IAM policies. In general, permissions granted by Cloud IAM policies do not appear in ACLs, and permissions granted by ACLs do not appear in Cloud IAM policies. The only exception is for ACLs applied directly on a bucket and certain bucket-level Cloud IAM policies, as described in [Cloud IAM relation to ACLs](https://cloud.google.com/storage/docs/access-control/iam#acls). -// -// **NOTE** This resource will not remove the `project-owners-` entity from the `OWNER` role. -// // ## Example Usage // // Example creating an ACL on a bucket with one owner, and one reader. diff --git a/sdk/go/gcp/storage/bucketAccessControl.go b/sdk/go/gcp/storage/bucketAccessControl.go index c5daa8173f..696e957b7a 100644 --- a/sdk/go/gcp/storage/bucketAccessControl.go +++ b/sdk/go/gcp/storage/bucketAccessControl.go @@ -11,29 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Bucket ACLs can be managed authoritatively using the -// `storageBucketAcl` resource. Do not use these two resources in conjunction to manage the same bucket. -// -// The BucketAccessControls resource manages the Access Control List -// (ACLs) for a single entity/role pairing on a bucket. ACLs let you specify who -// has access to your data and to what extent. -// -// There are three roles that can be assigned to an entity: -// -// READERs can get the bucket, though no acl property will be returned, and -// list the bucket's objects. WRITERs are READERs, and they can insert -// objects into the bucket and delete the bucket's objects. OWNERs are -// WRITERs, and they can get the acl property of a bucket, update a bucket, -// and call all BucketAccessControls methods on the bucket. For more -// information, see Access Control, with the caveat that this API uses -// READER, WRITER, and OWNER instead of READ, WRITE, and FULL_CONTROL. -// -// To get more information about BucketAccessControl, see: -// -// * [API documentation](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/storage/docs/access-control/lists) -// // ## Example Usage // ### Storage Bucket Access Control Public Bucket // diff --git a/sdk/go/gcp/storage/bucketObject.go b/sdk/go/gcp/storage/bucketObject.go index 8bebc6380b..5fbc542488 100644 --- a/sdk/go/gcp/storage/bucketObject.go +++ b/sdk/go/gcp/storage/bucketObject.go @@ -60,7 +60,7 @@ type BucketObject struct { // [Cache-Control](https://tools.ietf.org/html/rfc7234#section-5.2) // directive to specify caching behavior of object data. If omitted and object is accessible to all anonymous users, the default will be public, max-age=3600 CacheControl pulumi.StringPtrOutput `pulumi:"cacheControl"` - // Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + // Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). Content pulumi.StringPtrOutput `pulumi:"content"` // [Content-Disposition](https://tools.ietf.org/html/rfc6266) of the object data. ContentDisposition pulumi.StringPtrOutput `pulumi:"contentDisposition"` @@ -152,7 +152,7 @@ type bucketObjectState struct { // [Cache-Control](https://tools.ietf.org/html/rfc7234#section-5.2) // directive to specify caching behavior of object data. If omitted and object is accessible to all anonymous users, the default will be public, max-age=3600 CacheControl *string `pulumi:"cacheControl"` - // Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + // Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). Content *string `pulumi:"content"` // [Content-Disposition](https://tools.ietf.org/html/rfc6266) of the object data. ContentDisposition *string `pulumi:"contentDisposition"` @@ -202,7 +202,7 @@ type BucketObjectState struct { // [Cache-Control](https://tools.ietf.org/html/rfc7234#section-5.2) // directive to specify caching behavior of object data. If omitted and object is accessible to all anonymous users, the default will be public, max-age=3600 CacheControl pulumi.StringPtrInput - // Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + // Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). Content pulumi.StringPtrInput // [Content-Disposition](https://tools.ietf.org/html/rfc6266) of the object data. ContentDisposition pulumi.StringPtrInput @@ -256,7 +256,7 @@ type bucketObjectArgs struct { // [Cache-Control](https://tools.ietf.org/html/rfc7234#section-5.2) // directive to specify caching behavior of object data. If omitted and object is accessible to all anonymous users, the default will be public, max-age=3600 CacheControl *string `pulumi:"cacheControl"` - // Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + // Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). Content *string `pulumi:"content"` // [Content-Disposition](https://tools.ietf.org/html/rfc6266) of the object data. ContentDisposition *string `pulumi:"contentDisposition"` @@ -296,7 +296,7 @@ type BucketObjectArgs struct { // [Cache-Control](https://tools.ietf.org/html/rfc7234#section-5.2) // directive to specify caching behavior of object data. If omitted and object is accessible to all anonymous users, the default will be public, max-age=3600 CacheControl pulumi.StringPtrInput - // Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + // Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). Content pulumi.StringPtrInput // [Content-Disposition](https://tools.ietf.org/html/rfc6266) of the object data. ContentDisposition pulumi.StringPtrInput @@ -427,7 +427,7 @@ func (o BucketObjectOutput) CacheControl() pulumi.StringPtrOutput { return o.ApplyT(func(v *BucketObject) pulumi.StringPtrOutput { return v.CacheControl }).(pulumi.StringPtrOutput) } -// Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. +// Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). func (o BucketObjectOutput) Content() pulumi.StringPtrOutput { return o.ApplyT(func(v *BucketObject) pulumi.StringPtrOutput { return v.Content }).(pulumi.StringPtrOutput) } diff --git a/sdk/go/gcp/storage/getProjectServiceAccount.go b/sdk/go/gcp/storage/getProjectServiceAccount.go index 615895a33a..ac9e905560 100644 --- a/sdk/go/gcp/storage/getProjectServiceAccount.go +++ b/sdk/go/gcp/storage/getProjectServiceAccount.go @@ -10,40 +10,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts). -// -// For each Google Cloud project, Google maintains a unique service account which -// is used as the identity for various Google Cloud Storage operations, including -// operations involving -// [customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys) -// and those involving -// [storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification). -// This automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use -// these customer-managed resources. -// -// The service account has a well-known, documented naming format which is parameterised on the numeric Google project ID. -// However, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which -// presuppose its existence. -// These actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the -// service account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys -// on the bucket creation page. -// -// Use of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations -// which demand its existence, such as specifying it in Cloud IAM policy. -// Always prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause -// provider update errors in cases where the service account does not yet exist. -// -// > When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources, -// -// you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource. -// Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a -// bucket configuration, otherwise the API calls will fail. -// You may need to use `dependsOn` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it. -// See the examples here and in the `storage.Notification` resource. -// -// For more information see -// [the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount). -// // ## Example Usage // ### Pub/Sub Notifications // diff --git a/sdk/go/gcp/storage/hmacKey.go b/sdk/go/gcp/storage/hmacKey.go index d5d627ecf7..5f15cd3b60 100644 --- a/sdk/go/gcp/storage/hmacKey.go +++ b/sdk/go/gcp/storage/hmacKey.go @@ -11,22 +11,6 @@ import ( "github.com/pulumi/pulumi/sdk/v3/go/pulumi" ) -// The hmacKeys resource represents an HMAC key within Cloud Storage. The resource -// consists of a secret and HMAC key metadata. HMAC keys can be used as credentials -// for service accounts. -// -// To get more information about HmacKey, see: -// -// * [API documentation](https://cloud.google.com/storage/docs/json_api/v1/projects/hmacKeys) -// * How-to Guides -// - [Official Documentation](https://cloud.google.com/storage/docs/authentication/managing-hmackeys) -// -// > **Warning:** All arguments including the `secret` value will be stored in the raw -// state as plain-text. On import, the `secret` value will not be retrieved. -// -// > **Warning:** All arguments including `secret` will be stored in the raw -// state as plain-text. -// // ## Example Usage // ### Storage Hmac Key // diff --git a/sdk/go/gcp/tags/init.go b/sdk/go/gcp/tags/init.go index 42d360598c..3018cd47a9 100644 --- a/sdk/go/gcp/tags/init.go +++ b/sdk/go/gcp/tags/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:tags/locationTagBinding:LocationTagBinding": + r = &LocationTagBinding{} case "gcp:tags/tagBinding:TagBinding": r = &TagBinding{} case "gcp:tags/tagKey:TagKey": @@ -52,6 +54,11 @@ func init() { if err != nil { version = semver.Version{Major: 1} } + pulumi.RegisterResourceModule( + "gcp", + "tags/locationTagBinding", + &module{version}, + ) pulumi.RegisterResourceModule( "gcp", "tags/tagBinding", diff --git a/sdk/go/gcp/tags/locationTagBinding.go b/sdk/go/gcp/tags/locationTagBinding.go new file mode 100644 index 0000000000..83ae8cdd5d --- /dev/null +++ b/sdk/go/gcp/tags/locationTagBinding.go @@ -0,0 +1,349 @@ +// 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 tags + +import ( + "context" + "reflect" + + "github.com/pkg/errors" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## subcategory: "Tags" +// +// page_title: "Google: tags.LocationTagBinding" +// description: |- +// +// A LocationTagBinding represents a connection between a TagValue and a Regional cloud resources. +// +// --- +// +// # google\_tags\_location\_tag\_binding +// +// A TagBinding represents a connection between a TagValue and a Regional cloud resource (currently project, folder, or organization). Once a TagBinding is created, the TagValue is applied to all the descendants of the cloud resource. +// +// To get more information about TagBinding, see: +// +// * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v3/tagBindings) +// * How-to Guides +// - [Official Documentation](https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing) +// +// ## Example Usage +// ### Location Tag Binding Basic +// +// ```go +// package main +// +// import ( +// +// "fmt" +// +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/tags" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// project, err := organizations.NewProject(ctx, "project", &organizations.ProjectArgs{ +// OrgId: pulumi.String("123456789"), +// ProjectId: pulumi.String("project_id"), +// }) +// if err != nil { +// return err +// } +// key, err := tags.NewTagKey(ctx, "key", &tags.TagKeyArgs{ +// Description: pulumi.String("For keyname resources."), +// Parent: pulumi.String("organizations/123456789"), +// ShortName: pulumi.String("keyname"), +// }) +// if err != nil { +// return err +// } +// value, err := tags.NewTagValue(ctx, "value", &tags.TagValueArgs{ +// Description: pulumi.String("For valuename resources."), +// Parent: key.Name.ApplyT(func(name string) (string, error) { +// return fmt.Sprintf("tagKeys/%v", name), nil +// }).(pulumi.StringOutput), +// ShortName: pulumi.String("valuename"), +// }) +// if err != nil { +// return err +// } +// _, err = tags.NewLocationTagBinding(ctx, "binding", &tags.LocationTagBindingArgs{ +// Location: pulumi.String("us-central1"), +// Parent: project.Number.ApplyT(func(number string) (string, error) { +// return fmt.Sprintf("//run.googleapis.com/projects/%v/locations/%v/services/%v", number, google_cloud_run_service.Default.Location, google_cloud_run_service.Default.Name), nil +// }).(pulumi.StringOutput), +// TagValue: value.Name.ApplyT(func(name string) (string, error) { +// return fmt.Sprintf("tagValues/%v", name), nil +// }).(pulumi.StringOutput), +// }) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// # TagBinding can be imported using any of these accepted formats +// +// ```sh +// +// $ pulumi import gcp:tags/locationTagBinding:LocationTagBinding default {{location}}/{{name}} +// +// ``` +type LocationTagBinding struct { + pulumi.CustomResourceState + + // Location of the resource. + Location pulumi.StringPtrOutput `pulumi:"location"` + // The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + Name pulumi.StringOutput `pulumi:"name"` + // The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + Parent pulumi.StringOutput `pulumi:"parent"` + // The TagValue of the TagBinding. Must be of the form tagValues/456. + TagValue pulumi.StringOutput `pulumi:"tagValue"` +} + +// NewLocationTagBinding registers a new resource with the given unique name, arguments, and options. +func NewLocationTagBinding(ctx *pulumi.Context, + name string, args *LocationTagBindingArgs, opts ...pulumi.ResourceOption) (*LocationTagBinding, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Parent == nil { + return nil, errors.New("invalid value for required argument 'Parent'") + } + if args.TagValue == nil { + return nil, errors.New("invalid value for required argument 'TagValue'") + } + var resource LocationTagBinding + err := ctx.RegisterResource("gcp:tags/locationTagBinding:LocationTagBinding", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetLocationTagBinding gets an existing LocationTagBinding 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 GetLocationTagBinding(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *LocationTagBindingState, opts ...pulumi.ResourceOption) (*LocationTagBinding, error) { + var resource LocationTagBinding + err := ctx.ReadResource("gcp:tags/locationTagBinding:LocationTagBinding", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering LocationTagBinding resources. +type locationTagBindingState struct { + // Location of the resource. + Location *string `pulumi:"location"` + // The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + Name *string `pulumi:"name"` + // The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + Parent *string `pulumi:"parent"` + // The TagValue of the TagBinding. Must be of the form tagValues/456. + TagValue *string `pulumi:"tagValue"` +} + +type LocationTagBindingState struct { + // Location of the resource. + Location pulumi.StringPtrInput + // The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + Name pulumi.StringPtrInput + // The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + Parent pulumi.StringPtrInput + // The TagValue of the TagBinding. Must be of the form tagValues/456. + TagValue pulumi.StringPtrInput +} + +func (LocationTagBindingState) ElementType() reflect.Type { + return reflect.TypeOf((*locationTagBindingState)(nil)).Elem() +} + +type locationTagBindingArgs struct { + // Location of the resource. + Location *string `pulumi:"location"` + // The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + Parent string `pulumi:"parent"` + // The TagValue of the TagBinding. Must be of the form tagValues/456. + TagValue string `pulumi:"tagValue"` +} + +// The set of arguments for constructing a LocationTagBinding resource. +type LocationTagBindingArgs struct { + // Location of the resource. + Location pulumi.StringPtrInput + // The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + Parent pulumi.StringInput + // The TagValue of the TagBinding. Must be of the form tagValues/456. + TagValue pulumi.StringInput +} + +func (LocationTagBindingArgs) ElementType() reflect.Type { + return reflect.TypeOf((*locationTagBindingArgs)(nil)).Elem() +} + +type LocationTagBindingInput interface { + pulumi.Input + + ToLocationTagBindingOutput() LocationTagBindingOutput + ToLocationTagBindingOutputWithContext(ctx context.Context) LocationTagBindingOutput +} + +func (*LocationTagBinding) ElementType() reflect.Type { + return reflect.TypeOf((**LocationTagBinding)(nil)).Elem() +} + +func (i *LocationTagBinding) ToLocationTagBindingOutput() LocationTagBindingOutput { + return i.ToLocationTagBindingOutputWithContext(context.Background()) +} + +func (i *LocationTagBinding) ToLocationTagBindingOutputWithContext(ctx context.Context) LocationTagBindingOutput { + return pulumi.ToOutputWithContext(ctx, i).(LocationTagBindingOutput) +} + +// LocationTagBindingArrayInput is an input type that accepts LocationTagBindingArray and LocationTagBindingArrayOutput values. +// You can construct a concrete instance of `LocationTagBindingArrayInput` via: +// +// LocationTagBindingArray{ LocationTagBindingArgs{...} } +type LocationTagBindingArrayInput interface { + pulumi.Input + + ToLocationTagBindingArrayOutput() LocationTagBindingArrayOutput + ToLocationTagBindingArrayOutputWithContext(context.Context) LocationTagBindingArrayOutput +} + +type LocationTagBindingArray []LocationTagBindingInput + +func (LocationTagBindingArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*LocationTagBinding)(nil)).Elem() +} + +func (i LocationTagBindingArray) ToLocationTagBindingArrayOutput() LocationTagBindingArrayOutput { + return i.ToLocationTagBindingArrayOutputWithContext(context.Background()) +} + +func (i LocationTagBindingArray) ToLocationTagBindingArrayOutputWithContext(ctx context.Context) LocationTagBindingArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(LocationTagBindingArrayOutput) +} + +// LocationTagBindingMapInput is an input type that accepts LocationTagBindingMap and LocationTagBindingMapOutput values. +// You can construct a concrete instance of `LocationTagBindingMapInput` via: +// +// LocationTagBindingMap{ "key": LocationTagBindingArgs{...} } +type LocationTagBindingMapInput interface { + pulumi.Input + + ToLocationTagBindingMapOutput() LocationTagBindingMapOutput + ToLocationTagBindingMapOutputWithContext(context.Context) LocationTagBindingMapOutput +} + +type LocationTagBindingMap map[string]LocationTagBindingInput + +func (LocationTagBindingMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*LocationTagBinding)(nil)).Elem() +} + +func (i LocationTagBindingMap) ToLocationTagBindingMapOutput() LocationTagBindingMapOutput { + return i.ToLocationTagBindingMapOutputWithContext(context.Background()) +} + +func (i LocationTagBindingMap) ToLocationTagBindingMapOutputWithContext(ctx context.Context) LocationTagBindingMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(LocationTagBindingMapOutput) +} + +type LocationTagBindingOutput struct{ *pulumi.OutputState } + +func (LocationTagBindingOutput) ElementType() reflect.Type { + return reflect.TypeOf((**LocationTagBinding)(nil)).Elem() +} + +func (o LocationTagBindingOutput) ToLocationTagBindingOutput() LocationTagBindingOutput { + return o +} + +func (o LocationTagBindingOutput) ToLocationTagBindingOutputWithContext(ctx context.Context) LocationTagBindingOutput { + return o +} + +// Location of the resource. +func (o LocationTagBindingOutput) Location() pulumi.StringPtrOutput { + return o.ApplyT(func(v *LocationTagBinding) pulumi.StringPtrOutput { return v.Location }).(pulumi.StringPtrOutput) +} + +// The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` +func (o LocationTagBindingOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *LocationTagBinding) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 +func (o LocationTagBindingOutput) Parent() pulumi.StringOutput { + return o.ApplyT(func(v *LocationTagBinding) pulumi.StringOutput { return v.Parent }).(pulumi.StringOutput) +} + +// The TagValue of the TagBinding. Must be of the form tagValues/456. +func (o LocationTagBindingOutput) TagValue() pulumi.StringOutput { + return o.ApplyT(func(v *LocationTagBinding) pulumi.StringOutput { return v.TagValue }).(pulumi.StringOutput) +} + +type LocationTagBindingArrayOutput struct{ *pulumi.OutputState } + +func (LocationTagBindingArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*LocationTagBinding)(nil)).Elem() +} + +func (o LocationTagBindingArrayOutput) ToLocationTagBindingArrayOutput() LocationTagBindingArrayOutput { + return o +} + +func (o LocationTagBindingArrayOutput) ToLocationTagBindingArrayOutputWithContext(ctx context.Context) LocationTagBindingArrayOutput { + return o +} + +func (o LocationTagBindingArrayOutput) Index(i pulumi.IntInput) LocationTagBindingOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *LocationTagBinding { + return vs[0].([]*LocationTagBinding)[vs[1].(int)] + }).(LocationTagBindingOutput) +} + +type LocationTagBindingMapOutput struct{ *pulumi.OutputState } + +func (LocationTagBindingMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*LocationTagBinding)(nil)).Elem() +} + +func (o LocationTagBindingMapOutput) ToLocationTagBindingMapOutput() LocationTagBindingMapOutput { + return o +} + +func (o LocationTagBindingMapOutput) ToLocationTagBindingMapOutputWithContext(ctx context.Context) LocationTagBindingMapOutput { + return o +} + +func (o LocationTagBindingMapOutput) MapIndex(k pulumi.StringInput) LocationTagBindingOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *LocationTagBinding { + return vs[0].(map[string]*LocationTagBinding)[vs[1].(string)] + }).(LocationTagBindingOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*LocationTagBindingInput)(nil)).Elem(), &LocationTagBinding{}) + pulumi.RegisterInputType(reflect.TypeOf((*LocationTagBindingArrayInput)(nil)).Elem(), LocationTagBindingArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*LocationTagBindingMapInput)(nil)).Elem(), LocationTagBindingMap{}) + pulumi.RegisterOutputType(LocationTagBindingOutput{}) + pulumi.RegisterOutputType(LocationTagBindingArrayOutput{}) + pulumi.RegisterOutputType(LocationTagBindingMapOutput{}) +} diff --git a/sdk/go/gcp/tpu/node.go b/sdk/go/gcp/tpu/node.go index cc5dbdfccb..8dbdba793b 100644 --- a/sdk/go/gcp/tpu/node.go +++ b/sdk/go/gcp/tpu/node.go @@ -52,73 +52,6 @@ import ( // } // // ``` -// ### TPU Node Full -// -// ```go -// package main -// -// import ( -// -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/servicenetworking" -// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/tpu" -// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" -// -// ) -// -// func main() { -// pulumi.Run(func(ctx *pulumi.Context) error { -// available, err := tpu.GetTensorflowVersions(ctx, nil, nil) -// if err != nil { -// return err -// } -// network, err := compute.LookupNetwork(ctx, &compute.LookupNetworkArgs{ -// Name: "default", -// }, nil) -// if err != nil { -// return err -// } -// serviceRange, err := compute.NewGlobalAddress(ctx, "serviceRange", &compute.GlobalAddressArgs{ -// Purpose: pulumi.String("VPC_PEERING"), -// AddressType: pulumi.String("INTERNAL"), -// PrefixLength: pulumi.Int(16), -// Network: *pulumi.String(network.Id), -// }) -// if err != nil { -// return err -// } -// privateServiceConnection, err := servicenetworking.NewConnection(ctx, "privateServiceConnection", &servicenetworking.ConnectionArgs{ -// Network: *pulumi.String(network.Id), -// Service: pulumi.String("servicenetworking.googleapis.com"), -// ReservedPeeringRanges: pulumi.StringArray{ -// serviceRange.Name, -// }, -// }) -// if err != nil { -// return err -// } -// _, err = tpu.NewNode(ctx, "tpu", &tpu.NodeArgs{ -// Zone: pulumi.String("us-central1-b"), -// AcceleratorType: pulumi.String("v3-8"), -// TensorflowVersion: *pulumi.String(available.Versions[0]), -// Description: pulumi.String("Google Provider test TPU"), -// UseServiceNetworking: pulumi.Bool(true), -// Network: privateServiceConnection.Network, -// Labels: pulumi.StringMap{ -// "foo": pulumi.String("bar"), -// }, -// SchedulingConfig: &tpu.NodeSchedulingConfigArgs{ -// Preemptible: pulumi.Bool(true), -// }, -// }) -// if err != nil { -// return err -// } -// return nil -// }) -// } -// -// ``` // // ## Import // diff --git a/sdk/go/gcp/workstations/init.go b/sdk/go/gcp/workstations/init.go new file mode 100644 index 0000000000..9a1c7801e3 --- /dev/null +++ b/sdk/go/gcp/workstations/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 workstations + +import ( + "fmt" + + "github.com/blang/semver" + "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp" + "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:workstations/workstationCluster:WorkstationCluster": + r = &WorkstationCluster{} + 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 := gcp.PkgVersion() + if err != nil { + version = semver.Version{Major: 1} + } + pulumi.RegisterResourceModule( + "gcp", + "workstations/workstationCluster", + &module{version}, + ) +} diff --git a/sdk/go/gcp/workstations/pulumiTypes.go b/sdk/go/gcp/workstations/pulumiTypes.go new file mode 100644 index 0000000000..77e150b851 --- /dev/null +++ b/sdk/go/gcp/workstations/pulumiTypes.go @@ -0,0 +1,328 @@ +// 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 workstations + +import ( + "context" + "reflect" + + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +type WorkstationClusterCondition struct { + // The status code, which should be an enum value of google.rpc.Code. + Code *int `pulumi:"code"` + // A list of messages that carry the error details. + Details []map[string]interface{} `pulumi:"details"` + // Human readable message indicating details about the current status. + Message *string `pulumi:"message"` +} + +// WorkstationClusterConditionInput is an input type that accepts WorkstationClusterConditionArgs and WorkstationClusterConditionOutput values. +// You can construct a concrete instance of `WorkstationClusterConditionInput` via: +// +// WorkstationClusterConditionArgs{...} +type WorkstationClusterConditionInput interface { + pulumi.Input + + ToWorkstationClusterConditionOutput() WorkstationClusterConditionOutput + ToWorkstationClusterConditionOutputWithContext(context.Context) WorkstationClusterConditionOutput +} + +type WorkstationClusterConditionArgs struct { + // The status code, which should be an enum value of google.rpc.Code. + Code pulumi.IntPtrInput `pulumi:"code"` + // A list of messages that carry the error details. + Details pulumi.MapArrayInput `pulumi:"details"` + // Human readable message indicating details about the current status. + Message pulumi.StringPtrInput `pulumi:"message"` +} + +func (WorkstationClusterConditionArgs) ElementType() reflect.Type { + return reflect.TypeOf((*WorkstationClusterCondition)(nil)).Elem() +} + +func (i WorkstationClusterConditionArgs) ToWorkstationClusterConditionOutput() WorkstationClusterConditionOutput { + return i.ToWorkstationClusterConditionOutputWithContext(context.Background()) +} + +func (i WorkstationClusterConditionArgs) ToWorkstationClusterConditionOutputWithContext(ctx context.Context) WorkstationClusterConditionOutput { + return pulumi.ToOutputWithContext(ctx, i).(WorkstationClusterConditionOutput) +} + +// WorkstationClusterConditionArrayInput is an input type that accepts WorkstationClusterConditionArray and WorkstationClusterConditionArrayOutput values. +// You can construct a concrete instance of `WorkstationClusterConditionArrayInput` via: +// +// WorkstationClusterConditionArray{ WorkstationClusterConditionArgs{...} } +type WorkstationClusterConditionArrayInput interface { + pulumi.Input + + ToWorkstationClusterConditionArrayOutput() WorkstationClusterConditionArrayOutput + ToWorkstationClusterConditionArrayOutputWithContext(context.Context) WorkstationClusterConditionArrayOutput +} + +type WorkstationClusterConditionArray []WorkstationClusterConditionInput + +func (WorkstationClusterConditionArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]WorkstationClusterCondition)(nil)).Elem() +} + +func (i WorkstationClusterConditionArray) ToWorkstationClusterConditionArrayOutput() WorkstationClusterConditionArrayOutput { + return i.ToWorkstationClusterConditionArrayOutputWithContext(context.Background()) +} + +func (i WorkstationClusterConditionArray) ToWorkstationClusterConditionArrayOutputWithContext(ctx context.Context) WorkstationClusterConditionArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(WorkstationClusterConditionArrayOutput) +} + +type WorkstationClusterConditionOutput struct{ *pulumi.OutputState } + +func (WorkstationClusterConditionOutput) ElementType() reflect.Type { + return reflect.TypeOf((*WorkstationClusterCondition)(nil)).Elem() +} + +func (o WorkstationClusterConditionOutput) ToWorkstationClusterConditionOutput() WorkstationClusterConditionOutput { + return o +} + +func (o WorkstationClusterConditionOutput) ToWorkstationClusterConditionOutputWithContext(ctx context.Context) WorkstationClusterConditionOutput { + return o +} + +// The status code, which should be an enum value of google.rpc.Code. +func (o WorkstationClusterConditionOutput) Code() pulumi.IntPtrOutput { + return o.ApplyT(func(v WorkstationClusterCondition) *int { return v.Code }).(pulumi.IntPtrOutput) +} + +// A list of messages that carry the error details. +func (o WorkstationClusterConditionOutput) Details() pulumi.MapArrayOutput { + return o.ApplyT(func(v WorkstationClusterCondition) []map[string]interface{} { return v.Details }).(pulumi.MapArrayOutput) +} + +// Human readable message indicating details about the current status. +func (o WorkstationClusterConditionOutput) Message() pulumi.StringPtrOutput { + return o.ApplyT(func(v WorkstationClusterCondition) *string { return v.Message }).(pulumi.StringPtrOutput) +} + +type WorkstationClusterConditionArrayOutput struct{ *pulumi.OutputState } + +func (WorkstationClusterConditionArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]WorkstationClusterCondition)(nil)).Elem() +} + +func (o WorkstationClusterConditionArrayOutput) ToWorkstationClusterConditionArrayOutput() WorkstationClusterConditionArrayOutput { + return o +} + +func (o WorkstationClusterConditionArrayOutput) ToWorkstationClusterConditionArrayOutputWithContext(ctx context.Context) WorkstationClusterConditionArrayOutput { + return o +} + +func (o WorkstationClusterConditionArrayOutput) Index(i pulumi.IntInput) WorkstationClusterConditionOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) WorkstationClusterCondition { + return vs[0].([]WorkstationClusterCondition)[vs[1].(int)] + }).(WorkstationClusterConditionOutput) +} + +type WorkstationClusterPrivateClusterConfig struct { + // Hostname for the workstation cluster. + // This field will be populated only when private endpoint is enabled. + // To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + ClusterHostname *string `pulumi:"clusterHostname"` + // Whether Workstations endpoint is private. + EnablePrivateEndpoint bool `pulumi:"enablePrivateEndpoint"` + // Service attachment URI for the workstation cluster. + // The service attachemnt is created when private endpoint is enabled. + // To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + ServiceAttachmentUri *string `pulumi:"serviceAttachmentUri"` +} + +// WorkstationClusterPrivateClusterConfigInput is an input type that accepts WorkstationClusterPrivateClusterConfigArgs and WorkstationClusterPrivateClusterConfigOutput values. +// You can construct a concrete instance of `WorkstationClusterPrivateClusterConfigInput` via: +// +// WorkstationClusterPrivateClusterConfigArgs{...} +type WorkstationClusterPrivateClusterConfigInput interface { + pulumi.Input + + ToWorkstationClusterPrivateClusterConfigOutput() WorkstationClusterPrivateClusterConfigOutput + ToWorkstationClusterPrivateClusterConfigOutputWithContext(context.Context) WorkstationClusterPrivateClusterConfigOutput +} + +type WorkstationClusterPrivateClusterConfigArgs struct { + // Hostname for the workstation cluster. + // This field will be populated only when private endpoint is enabled. + // To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + ClusterHostname pulumi.StringPtrInput `pulumi:"clusterHostname"` + // Whether Workstations endpoint is private. + EnablePrivateEndpoint pulumi.BoolInput `pulumi:"enablePrivateEndpoint"` + // Service attachment URI for the workstation cluster. + // The service attachemnt is created when private endpoint is enabled. + // To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + ServiceAttachmentUri pulumi.StringPtrInput `pulumi:"serviceAttachmentUri"` +} + +func (WorkstationClusterPrivateClusterConfigArgs) ElementType() reflect.Type { + return reflect.TypeOf((*WorkstationClusterPrivateClusterConfig)(nil)).Elem() +} + +func (i WorkstationClusterPrivateClusterConfigArgs) ToWorkstationClusterPrivateClusterConfigOutput() WorkstationClusterPrivateClusterConfigOutput { + return i.ToWorkstationClusterPrivateClusterConfigOutputWithContext(context.Background()) +} + +func (i WorkstationClusterPrivateClusterConfigArgs) ToWorkstationClusterPrivateClusterConfigOutputWithContext(ctx context.Context) WorkstationClusterPrivateClusterConfigOutput { + return pulumi.ToOutputWithContext(ctx, i).(WorkstationClusterPrivateClusterConfigOutput) +} + +func (i WorkstationClusterPrivateClusterConfigArgs) ToWorkstationClusterPrivateClusterConfigPtrOutput() WorkstationClusterPrivateClusterConfigPtrOutput { + return i.ToWorkstationClusterPrivateClusterConfigPtrOutputWithContext(context.Background()) +} + +func (i WorkstationClusterPrivateClusterConfigArgs) ToWorkstationClusterPrivateClusterConfigPtrOutputWithContext(ctx context.Context) WorkstationClusterPrivateClusterConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(WorkstationClusterPrivateClusterConfigOutput).ToWorkstationClusterPrivateClusterConfigPtrOutputWithContext(ctx) +} + +// WorkstationClusterPrivateClusterConfigPtrInput is an input type that accepts WorkstationClusterPrivateClusterConfigArgs, WorkstationClusterPrivateClusterConfigPtr and WorkstationClusterPrivateClusterConfigPtrOutput values. +// You can construct a concrete instance of `WorkstationClusterPrivateClusterConfigPtrInput` via: +// +// WorkstationClusterPrivateClusterConfigArgs{...} +// +// or: +// +// nil +type WorkstationClusterPrivateClusterConfigPtrInput interface { + pulumi.Input + + ToWorkstationClusterPrivateClusterConfigPtrOutput() WorkstationClusterPrivateClusterConfigPtrOutput + ToWorkstationClusterPrivateClusterConfigPtrOutputWithContext(context.Context) WorkstationClusterPrivateClusterConfigPtrOutput +} + +type workstationClusterPrivateClusterConfigPtrType WorkstationClusterPrivateClusterConfigArgs + +func WorkstationClusterPrivateClusterConfigPtr(v *WorkstationClusterPrivateClusterConfigArgs) WorkstationClusterPrivateClusterConfigPtrInput { + return (*workstationClusterPrivateClusterConfigPtrType)(v) +} + +func (*workstationClusterPrivateClusterConfigPtrType) ElementType() reflect.Type { + return reflect.TypeOf((**WorkstationClusterPrivateClusterConfig)(nil)).Elem() +} + +func (i *workstationClusterPrivateClusterConfigPtrType) ToWorkstationClusterPrivateClusterConfigPtrOutput() WorkstationClusterPrivateClusterConfigPtrOutput { + return i.ToWorkstationClusterPrivateClusterConfigPtrOutputWithContext(context.Background()) +} + +func (i *workstationClusterPrivateClusterConfigPtrType) ToWorkstationClusterPrivateClusterConfigPtrOutputWithContext(ctx context.Context) WorkstationClusterPrivateClusterConfigPtrOutput { + return pulumi.ToOutputWithContext(ctx, i).(WorkstationClusterPrivateClusterConfigPtrOutput) +} + +type WorkstationClusterPrivateClusterConfigOutput struct{ *pulumi.OutputState } + +func (WorkstationClusterPrivateClusterConfigOutput) ElementType() reflect.Type { + return reflect.TypeOf((*WorkstationClusterPrivateClusterConfig)(nil)).Elem() +} + +func (o WorkstationClusterPrivateClusterConfigOutput) ToWorkstationClusterPrivateClusterConfigOutput() WorkstationClusterPrivateClusterConfigOutput { + return o +} + +func (o WorkstationClusterPrivateClusterConfigOutput) ToWorkstationClusterPrivateClusterConfigOutputWithContext(ctx context.Context) WorkstationClusterPrivateClusterConfigOutput { + return o +} + +func (o WorkstationClusterPrivateClusterConfigOutput) ToWorkstationClusterPrivateClusterConfigPtrOutput() WorkstationClusterPrivateClusterConfigPtrOutput { + return o.ToWorkstationClusterPrivateClusterConfigPtrOutputWithContext(context.Background()) +} + +func (o WorkstationClusterPrivateClusterConfigOutput) ToWorkstationClusterPrivateClusterConfigPtrOutputWithContext(ctx context.Context) WorkstationClusterPrivateClusterConfigPtrOutput { + return o.ApplyTWithContext(ctx, func(_ context.Context, v WorkstationClusterPrivateClusterConfig) *WorkstationClusterPrivateClusterConfig { + return &v + }).(WorkstationClusterPrivateClusterConfigPtrOutput) +} + +// Hostname for the workstation cluster. +// This field will be populated only when private endpoint is enabled. +// To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. +func (o WorkstationClusterPrivateClusterConfigOutput) ClusterHostname() pulumi.StringPtrOutput { + return o.ApplyT(func(v WorkstationClusterPrivateClusterConfig) *string { return v.ClusterHostname }).(pulumi.StringPtrOutput) +} + +// Whether Workstations endpoint is private. +func (o WorkstationClusterPrivateClusterConfigOutput) EnablePrivateEndpoint() pulumi.BoolOutput { + return o.ApplyT(func(v WorkstationClusterPrivateClusterConfig) bool { return v.EnablePrivateEndpoint }).(pulumi.BoolOutput) +} + +// Service attachment URI for the workstation cluster. +// The service attachemnt is created when private endpoint is enabled. +// To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. +func (o WorkstationClusterPrivateClusterConfigOutput) ServiceAttachmentUri() pulumi.StringPtrOutput { + return o.ApplyT(func(v WorkstationClusterPrivateClusterConfig) *string { return v.ServiceAttachmentUri }).(pulumi.StringPtrOutput) +} + +type WorkstationClusterPrivateClusterConfigPtrOutput struct{ *pulumi.OutputState } + +func (WorkstationClusterPrivateClusterConfigPtrOutput) ElementType() reflect.Type { + return reflect.TypeOf((**WorkstationClusterPrivateClusterConfig)(nil)).Elem() +} + +func (o WorkstationClusterPrivateClusterConfigPtrOutput) ToWorkstationClusterPrivateClusterConfigPtrOutput() WorkstationClusterPrivateClusterConfigPtrOutput { + return o +} + +func (o WorkstationClusterPrivateClusterConfigPtrOutput) ToWorkstationClusterPrivateClusterConfigPtrOutputWithContext(ctx context.Context) WorkstationClusterPrivateClusterConfigPtrOutput { + return o +} + +func (o WorkstationClusterPrivateClusterConfigPtrOutput) Elem() WorkstationClusterPrivateClusterConfigOutput { + return o.ApplyT(func(v *WorkstationClusterPrivateClusterConfig) WorkstationClusterPrivateClusterConfig { + if v != nil { + return *v + } + var ret WorkstationClusterPrivateClusterConfig + return ret + }).(WorkstationClusterPrivateClusterConfigOutput) +} + +// Hostname for the workstation cluster. +// This field will be populated only when private endpoint is enabled. +// To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. +func (o WorkstationClusterPrivateClusterConfigPtrOutput) ClusterHostname() pulumi.StringPtrOutput { + return o.ApplyT(func(v *WorkstationClusterPrivateClusterConfig) *string { + if v == nil { + return nil + } + return v.ClusterHostname + }).(pulumi.StringPtrOutput) +} + +// Whether Workstations endpoint is private. +func (o WorkstationClusterPrivateClusterConfigPtrOutput) EnablePrivateEndpoint() pulumi.BoolPtrOutput { + return o.ApplyT(func(v *WorkstationClusterPrivateClusterConfig) *bool { + if v == nil { + return nil + } + return &v.EnablePrivateEndpoint + }).(pulumi.BoolPtrOutput) +} + +// Service attachment URI for the workstation cluster. +// The service attachemnt is created when private endpoint is enabled. +// To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. +func (o WorkstationClusterPrivateClusterConfigPtrOutput) ServiceAttachmentUri() pulumi.StringPtrOutput { + return o.ApplyT(func(v *WorkstationClusterPrivateClusterConfig) *string { + if v == nil { + return nil + } + return v.ServiceAttachmentUri + }).(pulumi.StringPtrOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*WorkstationClusterConditionInput)(nil)).Elem(), WorkstationClusterConditionArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*WorkstationClusterConditionArrayInput)(nil)).Elem(), WorkstationClusterConditionArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*WorkstationClusterPrivateClusterConfigInput)(nil)).Elem(), WorkstationClusterPrivateClusterConfigArgs{}) + pulumi.RegisterInputType(reflect.TypeOf((*WorkstationClusterPrivateClusterConfigPtrInput)(nil)).Elem(), WorkstationClusterPrivateClusterConfigArgs{}) + pulumi.RegisterOutputType(WorkstationClusterConditionOutput{}) + pulumi.RegisterOutputType(WorkstationClusterConditionArrayOutput{}) + pulumi.RegisterOutputType(WorkstationClusterPrivateClusterConfigOutput{}) + pulumi.RegisterOutputType(WorkstationClusterPrivateClusterConfigPtrOutput{}) +} diff --git a/sdk/go/gcp/workstations/workstationCluster.go b/sdk/go/gcp/workstations/workstationCluster.go new file mode 100644 index 0000000000..f121201a8a --- /dev/null +++ b/sdk/go/gcp/workstations/workstationCluster.go @@ -0,0 +1,586 @@ +// 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 workstations + +import ( + "context" + "reflect" + + "github.com/pkg/errors" + "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +) + +// ## Example Usage +// ### Workstation Cluster Basic +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/workstations" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// defaultNetwork, err := compute.NewNetwork(ctx, "defaultNetwork", &compute.NetworkArgs{ +// AutoCreateSubnetworks: pulumi.Bool(false), +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// defaultSubnetwork, err := compute.NewSubnetwork(ctx, "defaultSubnetwork", &compute.SubnetworkArgs{ +// IpCidrRange: pulumi.String("10.0.0.0/24"), +// Region: pulumi.String("us-central1"), +// Network: defaultNetwork.Name, +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// _, err = workstations.NewWorkstationCluster(ctx, "defaultWorkstationCluster", &workstations.WorkstationClusterArgs{ +// WorkstationClusterId: pulumi.String("workstation-cluster"), +// Network: defaultNetwork.ID(), +// Subnetwork: defaultSubnetwork.ID(), +// Location: pulumi.String("us-central1"), +// Labels: pulumi.StringMap{ +// "label": pulumi.String("key"), +// }, +// Annotations: pulumi.StringMap{ +// "label-one": pulumi.String("value-one"), +// }, +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// _, err = organizations.LookupProject(ctx, nil, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// ### Workstation Cluster Private +// +// ```go +// package main +// +// import ( +// +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/compute" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/organizations" +// "github.com/pulumi/pulumi-gcp/sdk/v6/go/gcp/workstations" +// "github.com/pulumi/pulumi/sdk/v3/go/pulumi" +// +// ) +// +// func main() { +// pulumi.Run(func(ctx *pulumi.Context) error { +// defaultNetwork, err := compute.NewNetwork(ctx, "defaultNetwork", &compute.NetworkArgs{ +// AutoCreateSubnetworks: pulumi.Bool(false), +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// defaultSubnetwork, err := compute.NewSubnetwork(ctx, "defaultSubnetwork", &compute.SubnetworkArgs{ +// IpCidrRange: pulumi.String("10.0.0.0/24"), +// Region: pulumi.String("us-central1"), +// Network: defaultNetwork.Name, +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// _, err = workstations.NewWorkstationCluster(ctx, "defaultWorkstationCluster", &workstations.WorkstationClusterArgs{ +// WorkstationClusterId: pulumi.String("workstation-cluster-private"), +// Network: defaultNetwork.ID(), +// Subnetwork: defaultSubnetwork.ID(), +// Location: pulumi.String("us-central1"), +// PrivateClusterConfig: &workstations.WorkstationClusterPrivateClusterConfigArgs{ +// EnablePrivateEndpoint: pulumi.Bool(true), +// }, +// Labels: pulumi.StringMap{ +// "label": pulumi.String("key"), +// }, +// Annotations: pulumi.StringMap{ +// "label-one": pulumi.String("value-one"), +// }, +// }, pulumi.Provider(google_beta)) +// if err != nil { +// return err +// } +// _, err = organizations.LookupProject(ctx, nil, nil) +// if err != nil { +// return err +// } +// return nil +// }) +// } +// +// ``` +// +// ## Import +// +// # WorkstationCluster can be imported using any of these accepted formats +// +// ```sh +// +// $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}} +// +// ``` +// +// ```sh +// +// $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{project}}/{{location}}/{{workstation_cluster_id}} +// +// ``` +// +// ```sh +// +// $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{location}}/{{workstation_cluster_id}} +// +// ``` +// +// ```sh +// +// $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{workstation_cluster_id}} +// +// ``` +type WorkstationCluster struct { + pulumi.CustomResourceState + + // Client-specified annotations. This is distinct from labels. + Annotations pulumi.StringMapOutput `pulumi:"annotations"` + // Status conditions describing the current resource state. + // Structure is documented below. + Conditions WorkstationClusterConditionArrayOutput `pulumi:"conditions"` + // Time the Instance was created in UTC. + CreateTime pulumi.StringOutput `pulumi:"createTime"` + // Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + // Details can be found in the conditions field. + Degraded pulumi.BoolOutput `pulumi:"degraded"` + // Human-readable name for this resource. + DisplayName pulumi.StringPtrOutput `pulumi:"displayName"` + // Checksum computed by the server. + // May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + Etag pulumi.StringOutput `pulumi:"etag"` + // Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + Labels pulumi.StringMapOutput `pulumi:"labels"` + // The location where the workstation cluster should reside. + Location pulumi.StringPtrOutput `pulumi:"location"` + // The name of the cluster resource. + Name pulumi.StringOutput `pulumi:"name"` + // The relative resource name of the VPC network on which the instance can be accessed. + // It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + Network pulumi.StringOutput `pulumi:"network"` + // Configuration for private cluster. + // Structure is documented below. + PrivateClusterConfig WorkstationClusterPrivateClusterConfigPtrOutput `pulumi:"privateClusterConfig"` + // 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"` + // Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + // Must be part of the subnetwork specified for this cluster. + Subnetwork pulumi.StringOutput `pulumi:"subnetwork"` + // The system-generated UID of the resource. + Uid pulumi.StringOutput `pulumi:"uid"` + // The ID of the workstation cluster. + WorkstationClusterId pulumi.StringOutput `pulumi:"workstationClusterId"` +} + +// NewWorkstationCluster registers a new resource with the given unique name, arguments, and options. +func NewWorkstationCluster(ctx *pulumi.Context, + name string, args *WorkstationClusterArgs, opts ...pulumi.ResourceOption) (*WorkstationCluster, error) { + if args == nil { + return nil, errors.New("missing one or more required arguments") + } + + if args.Network == nil { + return nil, errors.New("invalid value for required argument 'Network'") + } + if args.Subnetwork == nil { + return nil, errors.New("invalid value for required argument 'Subnetwork'") + } + if args.WorkstationClusterId == nil { + return nil, errors.New("invalid value for required argument 'WorkstationClusterId'") + } + var resource WorkstationCluster + err := ctx.RegisterResource("gcp:workstations/workstationCluster:WorkstationCluster", name, args, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// GetWorkstationCluster gets an existing WorkstationCluster 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 GetWorkstationCluster(ctx *pulumi.Context, + name string, id pulumi.IDInput, state *WorkstationClusterState, opts ...pulumi.ResourceOption) (*WorkstationCluster, error) { + var resource WorkstationCluster + err := ctx.ReadResource("gcp:workstations/workstationCluster:WorkstationCluster", name, id, state, &resource, opts...) + if err != nil { + return nil, err + } + return &resource, nil +} + +// Input properties used for looking up and filtering WorkstationCluster resources. +type workstationClusterState struct { + // Client-specified annotations. This is distinct from labels. + Annotations map[string]string `pulumi:"annotations"` + // Status conditions describing the current resource state. + // Structure is documented below. + Conditions []WorkstationClusterCondition `pulumi:"conditions"` + // Time the Instance was created in UTC. + CreateTime *string `pulumi:"createTime"` + // Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + // Details can be found in the conditions field. + Degraded *bool `pulumi:"degraded"` + // Human-readable name for this resource. + DisplayName *string `pulumi:"displayName"` + // Checksum computed by the server. + // May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + Etag *string `pulumi:"etag"` + // Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + Labels map[string]string `pulumi:"labels"` + // The location where the workstation cluster should reside. + Location *string `pulumi:"location"` + // The name of the cluster resource. + Name *string `pulumi:"name"` + // The relative resource name of the VPC network on which the instance can be accessed. + // It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + Network *string `pulumi:"network"` + // Configuration for private cluster. + // Structure is documented below. + PrivateClusterConfig *WorkstationClusterPrivateClusterConfig `pulumi:"privateClusterConfig"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + // Must be part of the subnetwork specified for this cluster. + Subnetwork *string `pulumi:"subnetwork"` + // The system-generated UID of the resource. + Uid *string `pulumi:"uid"` + // The ID of the workstation cluster. + WorkstationClusterId *string `pulumi:"workstationClusterId"` +} + +type WorkstationClusterState struct { + // Client-specified annotations. This is distinct from labels. + Annotations pulumi.StringMapInput + // Status conditions describing the current resource state. + // Structure is documented below. + Conditions WorkstationClusterConditionArrayInput + // Time the Instance was created in UTC. + CreateTime pulumi.StringPtrInput + // Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + // Details can be found in the conditions field. + Degraded pulumi.BoolPtrInput + // Human-readable name for this resource. + DisplayName pulumi.StringPtrInput + // Checksum computed by the server. + // May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + Etag pulumi.StringPtrInput + // Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + Labels pulumi.StringMapInput + // The location where the workstation cluster should reside. + Location pulumi.StringPtrInput + // The name of the cluster resource. + Name pulumi.StringPtrInput + // The relative resource name of the VPC network on which the instance can be accessed. + // It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + Network pulumi.StringPtrInput + // Configuration for private cluster. + // Structure is documented below. + PrivateClusterConfig WorkstationClusterPrivateClusterConfigPtrInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + // Must be part of the subnetwork specified for this cluster. + Subnetwork pulumi.StringPtrInput + // The system-generated UID of the resource. + Uid pulumi.StringPtrInput + // The ID of the workstation cluster. + WorkstationClusterId pulumi.StringPtrInput +} + +func (WorkstationClusterState) ElementType() reflect.Type { + return reflect.TypeOf((*workstationClusterState)(nil)).Elem() +} + +type workstationClusterArgs struct { + // Client-specified annotations. This is distinct from labels. + Annotations map[string]string `pulumi:"annotations"` + // Human-readable name for this resource. + DisplayName *string `pulumi:"displayName"` + // Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + Labels map[string]string `pulumi:"labels"` + // The location where the workstation cluster should reside. + Location *string `pulumi:"location"` + // The relative resource name of the VPC network on which the instance can be accessed. + // It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + Network string `pulumi:"network"` + // Configuration for private cluster. + // Structure is documented below. + PrivateClusterConfig *WorkstationClusterPrivateClusterConfig `pulumi:"privateClusterConfig"` + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project *string `pulumi:"project"` + // Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + // Must be part of the subnetwork specified for this cluster. + Subnetwork string `pulumi:"subnetwork"` + // The ID of the workstation cluster. + WorkstationClusterId string `pulumi:"workstationClusterId"` +} + +// The set of arguments for constructing a WorkstationCluster resource. +type WorkstationClusterArgs struct { + // Client-specified annotations. This is distinct from labels. + Annotations pulumi.StringMapInput + // Human-readable name for this resource. + DisplayName pulumi.StringPtrInput + // Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + Labels pulumi.StringMapInput + // The location where the workstation cluster should reside. + Location pulumi.StringPtrInput + // The relative resource name of the VPC network on which the instance can be accessed. + // It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + Network pulumi.StringInput + // Configuration for private cluster. + // Structure is documented below. + PrivateClusterConfig WorkstationClusterPrivateClusterConfigPtrInput + // The ID of the project in which the resource belongs. + // If it is not provided, the provider project is used. + Project pulumi.StringPtrInput + // Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + // Must be part of the subnetwork specified for this cluster. + Subnetwork pulumi.StringInput + // The ID of the workstation cluster. + WorkstationClusterId pulumi.StringInput +} + +func (WorkstationClusterArgs) ElementType() reflect.Type { + return reflect.TypeOf((*workstationClusterArgs)(nil)).Elem() +} + +type WorkstationClusterInput interface { + pulumi.Input + + ToWorkstationClusterOutput() WorkstationClusterOutput + ToWorkstationClusterOutputWithContext(ctx context.Context) WorkstationClusterOutput +} + +func (*WorkstationCluster) ElementType() reflect.Type { + return reflect.TypeOf((**WorkstationCluster)(nil)).Elem() +} + +func (i *WorkstationCluster) ToWorkstationClusterOutput() WorkstationClusterOutput { + return i.ToWorkstationClusterOutputWithContext(context.Background()) +} + +func (i *WorkstationCluster) ToWorkstationClusterOutputWithContext(ctx context.Context) WorkstationClusterOutput { + return pulumi.ToOutputWithContext(ctx, i).(WorkstationClusterOutput) +} + +// WorkstationClusterArrayInput is an input type that accepts WorkstationClusterArray and WorkstationClusterArrayOutput values. +// You can construct a concrete instance of `WorkstationClusterArrayInput` via: +// +// WorkstationClusterArray{ WorkstationClusterArgs{...} } +type WorkstationClusterArrayInput interface { + pulumi.Input + + ToWorkstationClusterArrayOutput() WorkstationClusterArrayOutput + ToWorkstationClusterArrayOutputWithContext(context.Context) WorkstationClusterArrayOutput +} + +type WorkstationClusterArray []WorkstationClusterInput + +func (WorkstationClusterArray) ElementType() reflect.Type { + return reflect.TypeOf((*[]*WorkstationCluster)(nil)).Elem() +} + +func (i WorkstationClusterArray) ToWorkstationClusterArrayOutput() WorkstationClusterArrayOutput { + return i.ToWorkstationClusterArrayOutputWithContext(context.Background()) +} + +func (i WorkstationClusterArray) ToWorkstationClusterArrayOutputWithContext(ctx context.Context) WorkstationClusterArrayOutput { + return pulumi.ToOutputWithContext(ctx, i).(WorkstationClusterArrayOutput) +} + +// WorkstationClusterMapInput is an input type that accepts WorkstationClusterMap and WorkstationClusterMapOutput values. +// You can construct a concrete instance of `WorkstationClusterMapInput` via: +// +// WorkstationClusterMap{ "key": WorkstationClusterArgs{...} } +type WorkstationClusterMapInput interface { + pulumi.Input + + ToWorkstationClusterMapOutput() WorkstationClusterMapOutput + ToWorkstationClusterMapOutputWithContext(context.Context) WorkstationClusterMapOutput +} + +type WorkstationClusterMap map[string]WorkstationClusterInput + +func (WorkstationClusterMap) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*WorkstationCluster)(nil)).Elem() +} + +func (i WorkstationClusterMap) ToWorkstationClusterMapOutput() WorkstationClusterMapOutput { + return i.ToWorkstationClusterMapOutputWithContext(context.Background()) +} + +func (i WorkstationClusterMap) ToWorkstationClusterMapOutputWithContext(ctx context.Context) WorkstationClusterMapOutput { + return pulumi.ToOutputWithContext(ctx, i).(WorkstationClusterMapOutput) +} + +type WorkstationClusterOutput struct{ *pulumi.OutputState } + +func (WorkstationClusterOutput) ElementType() reflect.Type { + return reflect.TypeOf((**WorkstationCluster)(nil)).Elem() +} + +func (o WorkstationClusterOutput) ToWorkstationClusterOutput() WorkstationClusterOutput { + return o +} + +func (o WorkstationClusterOutput) ToWorkstationClusterOutputWithContext(ctx context.Context) WorkstationClusterOutput { + return o +} + +// Client-specified annotations. This is distinct from labels. +func (o WorkstationClusterOutput) Annotations() pulumi.StringMapOutput { + return o.ApplyT(func(v *WorkstationCluster) pulumi.StringMapOutput { return v.Annotations }).(pulumi.StringMapOutput) +} + +// Status conditions describing the current resource state. +// Structure is documented below. +func (o WorkstationClusterOutput) Conditions() WorkstationClusterConditionArrayOutput { + return o.ApplyT(func(v *WorkstationCluster) WorkstationClusterConditionArrayOutput { return v.Conditions }).(WorkstationClusterConditionArrayOutput) +} + +// Time the Instance was created in UTC. +func (o WorkstationClusterOutput) CreateTime() pulumi.StringOutput { + return o.ApplyT(func(v *WorkstationCluster) pulumi.StringOutput { return v.CreateTime }).(pulumi.StringOutput) +} + +// Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. +// Details can be found in the conditions field. +func (o WorkstationClusterOutput) Degraded() pulumi.BoolOutput { + return o.ApplyT(func(v *WorkstationCluster) pulumi.BoolOutput { return v.Degraded }).(pulumi.BoolOutput) +} + +// Human-readable name for this resource. +func (o WorkstationClusterOutput) DisplayName() pulumi.StringPtrOutput { + return o.ApplyT(func(v *WorkstationCluster) pulumi.StringPtrOutput { return v.DisplayName }).(pulumi.StringPtrOutput) +} + +// Checksum computed by the server. +// May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. +func (o WorkstationClusterOutput) Etag() pulumi.StringOutput { + return o.ApplyT(func(v *WorkstationCluster) pulumi.StringOutput { return v.Etag }).(pulumi.StringOutput) +} + +// Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. +func (o WorkstationClusterOutput) Labels() pulumi.StringMapOutput { + return o.ApplyT(func(v *WorkstationCluster) pulumi.StringMapOutput { return v.Labels }).(pulumi.StringMapOutput) +} + +// The location where the workstation cluster should reside. +func (o WorkstationClusterOutput) Location() pulumi.StringPtrOutput { + return o.ApplyT(func(v *WorkstationCluster) pulumi.StringPtrOutput { return v.Location }).(pulumi.StringPtrOutput) +} + +// The name of the cluster resource. +func (o WorkstationClusterOutput) Name() pulumi.StringOutput { + return o.ApplyT(func(v *WorkstationCluster) pulumi.StringOutput { return v.Name }).(pulumi.StringOutput) +} + +// The relative resource name of the VPC network on which the instance can be accessed. +// It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". +func (o WorkstationClusterOutput) Network() pulumi.StringOutput { + return o.ApplyT(func(v *WorkstationCluster) pulumi.StringOutput { return v.Network }).(pulumi.StringOutput) +} + +// Configuration for private cluster. +// Structure is documented below. +func (o WorkstationClusterOutput) PrivateClusterConfig() WorkstationClusterPrivateClusterConfigPtrOutput { + return o.ApplyT(func(v *WorkstationCluster) WorkstationClusterPrivateClusterConfigPtrOutput { + return v.PrivateClusterConfig + }).(WorkstationClusterPrivateClusterConfigPtrOutput) +} + +// The ID of the project in which the resource belongs. +// If it is not provided, the provider project is used. +func (o WorkstationClusterOutput) Project() pulumi.StringOutput { + return o.ApplyT(func(v *WorkstationCluster) pulumi.StringOutput { return v.Project }).(pulumi.StringOutput) +} + +// Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. +// Must be part of the subnetwork specified for this cluster. +func (o WorkstationClusterOutput) Subnetwork() pulumi.StringOutput { + return o.ApplyT(func(v *WorkstationCluster) pulumi.StringOutput { return v.Subnetwork }).(pulumi.StringOutput) +} + +// The system-generated UID of the resource. +func (o WorkstationClusterOutput) Uid() pulumi.StringOutput { + return o.ApplyT(func(v *WorkstationCluster) pulumi.StringOutput { return v.Uid }).(pulumi.StringOutput) +} + +// The ID of the workstation cluster. +func (o WorkstationClusterOutput) WorkstationClusterId() pulumi.StringOutput { + return o.ApplyT(func(v *WorkstationCluster) pulumi.StringOutput { return v.WorkstationClusterId }).(pulumi.StringOutput) +} + +type WorkstationClusterArrayOutput struct{ *pulumi.OutputState } + +func (WorkstationClusterArrayOutput) ElementType() reflect.Type { + return reflect.TypeOf((*[]*WorkstationCluster)(nil)).Elem() +} + +func (o WorkstationClusterArrayOutput) ToWorkstationClusterArrayOutput() WorkstationClusterArrayOutput { + return o +} + +func (o WorkstationClusterArrayOutput) ToWorkstationClusterArrayOutputWithContext(ctx context.Context) WorkstationClusterArrayOutput { + return o +} + +func (o WorkstationClusterArrayOutput) Index(i pulumi.IntInput) WorkstationClusterOutput { + return pulumi.All(o, i).ApplyT(func(vs []interface{}) *WorkstationCluster { + return vs[0].([]*WorkstationCluster)[vs[1].(int)] + }).(WorkstationClusterOutput) +} + +type WorkstationClusterMapOutput struct{ *pulumi.OutputState } + +func (WorkstationClusterMapOutput) ElementType() reflect.Type { + return reflect.TypeOf((*map[string]*WorkstationCluster)(nil)).Elem() +} + +func (o WorkstationClusterMapOutput) ToWorkstationClusterMapOutput() WorkstationClusterMapOutput { + return o +} + +func (o WorkstationClusterMapOutput) ToWorkstationClusterMapOutputWithContext(ctx context.Context) WorkstationClusterMapOutput { + return o +} + +func (o WorkstationClusterMapOutput) MapIndex(k pulumi.StringInput) WorkstationClusterOutput { + return pulumi.All(o, k).ApplyT(func(vs []interface{}) *WorkstationCluster { + return vs[0].(map[string]*WorkstationCluster)[vs[1].(string)] + }).(WorkstationClusterOutput) +} + +func init() { + pulumi.RegisterInputType(reflect.TypeOf((*WorkstationClusterInput)(nil)).Elem(), &WorkstationCluster{}) + pulumi.RegisterInputType(reflect.TypeOf((*WorkstationClusterArrayInput)(nil)).Elem(), WorkstationClusterArray{}) + pulumi.RegisterInputType(reflect.TypeOf((*WorkstationClusterMapInput)(nil)).Elem(), WorkstationClusterMap{}) + pulumi.RegisterOutputType(WorkstationClusterOutput{}) + pulumi.RegisterOutputType(WorkstationClusterArrayOutput{}) + pulumi.RegisterOutputType(WorkstationClusterMapOutput{}) +} 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 f3f2988417..68abfe9441 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/Config.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/Config.java @@ -125,6 +125,9 @@ public Optional cloudSchedulerCustomEndpoint() { public Optional cloudTasksCustomEndpoint() { return Codegen.stringProp("cloudTasksCustomEndpoint").config(config).get(); } + public Optional cloudbuildv2CustomEndpoint() { + return Codegen.stringProp("cloudbuildv2CustomEndpoint").config(config).get(); + } public Optional clouddeployCustomEndpoint() { return Codegen.stringProp("clouddeployCustomEndpoint").config(config).get(); } @@ -194,9 +197,6 @@ public Optional dialogflowCustomEndpoint() { public Optional dialogflowCxCustomEndpoint() { return Codegen.stringProp("dialogflowCxCustomEndpoint").config(config).get(); } - public Optional disableGooglePartnerName() { - return Codegen.booleanProp("disableGooglePartnerName").config(config).get(); - } public Optional dnsCustomEndpoint() { return Codegen.stringProp("dnsCustomEndpoint").config(config).get(); } @@ -242,9 +242,6 @@ public Optional gkeHubCustomEndpoint() { public Optional gkehubFeatureCustomEndpoint() { return Codegen.stringProp("gkehubFeatureCustomEndpoint").config(config).get(); } - public Optional googlePartnerName() { - return Codegen.stringProp("googlePartnerName").config(config).get(); - } public Optional healthcareCustomEndpoint() { return Codegen.stringProp("healthcareCustomEndpoint").config(config).get(); } @@ -392,6 +389,9 @@ public Optional storageTransferCustomEndpoint() { public Optional tagsCustomEndpoint() { return Codegen.stringProp("tagsCustomEndpoint").config(config).get(); } + public Optional tagsLocationCustomEndpoint() { + return Codegen.stringProp("tagsLocationCustomEndpoint").config(config).get(); + } public Optional tpuCustomEndpoint() { return Codegen.stringProp("tpuCustomEndpoint").config(config).get(); } @@ -407,6 +407,9 @@ public Optional vpcAccessCustomEndpoint() { public Optional workflowsCustomEndpoint() { return Codegen.stringProp("workflowsCustomEndpoint").config(config).get(); } + public Optional workstationsCustomEndpoint() { + return Codegen.stringProp("workstationsCustomEndpoint").config(config).get(); + } public Optional zone() { return Codegen.stringProp("zone").config(config).env("GOOGLE_ZONE", "GCLOUD_ZONE", "CLOUDSDK_COMPUTE_ZONE").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 184183bcdb..5573ae01be 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/Provider.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/Provider.java @@ -238,6 +238,12 @@ public Output> cloudSchedulerCustomEndpoint() { public Output> cloudTasksCustomEndpoint() { return Codegen.optional(this.cloudTasksCustomEndpoint); } + @Export(name="cloudbuildv2CustomEndpoint", type=String.class, parameters={}) + private Output cloudbuildv2CustomEndpoint; + + public Output> cloudbuildv2CustomEndpoint() { + return Codegen.optional(this.cloudbuildv2CustomEndpoint); + } @Export(name="clouddeployCustomEndpoint", type=String.class, parameters={}) private Output clouddeployCustomEndpoint; @@ -466,12 +472,6 @@ public Output> gkeHubCustomEndpoint() { public Output> gkehubFeatureCustomEndpoint() { return Codegen.optional(this.gkehubFeatureCustomEndpoint); } - @Export(name="googlePartnerName", type=String.class, parameters={}) - private Output googlePartnerName; - - public Output> googlePartnerName() { - return Codegen.optional(this.googlePartnerName); - } @Export(name="healthcareCustomEndpoint", type=String.class, parameters={}) private Output healthcareCustomEndpoint; @@ -754,6 +754,12 @@ public Output> storageTransferCustomEndpoint() { public Output> tagsCustomEndpoint() { return Codegen.optional(this.tagsCustomEndpoint); } + @Export(name="tagsLocationCustomEndpoint", type=String.class, parameters={}) + private Output tagsLocationCustomEndpoint; + + public Output> tagsLocationCustomEndpoint() { + return Codegen.optional(this.tagsLocationCustomEndpoint); + } @Export(name="tpuCustomEndpoint", type=String.class, parameters={}) private Output tpuCustomEndpoint; @@ -778,6 +784,12 @@ public Output> vpcAccessCustomEndpoint() { public Output> workflowsCustomEndpoint() { return Codegen.optional(this.workflowsCustomEndpoint); } + @Export(name="workstationsCustomEndpoint", type=String.class, parameters={}) + private Output workstationsCustomEndpoint; + + public Output> workstationsCustomEndpoint() { + return Codegen.optional(this.workstationsCustomEndpoint); + } @Export(name="zone", type=String.class, parameters={}) private Output zone; 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 d5d87dc216..abc184cff0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/ProviderArgs.java @@ -278,6 +278,13 @@ public Optional> cloudTasksCustomEndpoint() { return Optional.ofNullable(this.cloudTasksCustomEndpoint); } + @Import(name="cloudbuildv2CustomEndpoint") + private @Nullable Output cloudbuildv2CustomEndpoint; + + public Optional> cloudbuildv2CustomEndpoint() { + return Optional.ofNullable(this.cloudbuildv2CustomEndpoint); + } + @Import(name="clouddeployCustomEndpoint") private @Nullable Output clouddeployCustomEndpoint; @@ -439,13 +446,6 @@ public Optional> dialogflowCxCustomEndpoint() { return Optional.ofNullable(this.dialogflowCxCustomEndpoint); } - @Import(name="disableGooglePartnerName", json=true) - private @Nullable Output disableGooglePartnerName; - - public Optional> disableGooglePartnerName() { - return Optional.ofNullable(this.disableGooglePartnerName); - } - @Import(name="dnsCustomEndpoint") private @Nullable Output dnsCustomEndpoint; @@ -551,13 +551,6 @@ public Optional> gkehubFeatureCustomEndpoint() { return Optional.ofNullable(this.gkehubFeatureCustomEndpoint); } - @Import(name="googlePartnerName") - private @Nullable Output googlePartnerName; - - public Optional> googlePartnerName() { - return Optional.ofNullable(this.googlePartnerName); - } - @Import(name="healthcareCustomEndpoint") private @Nullable Output healthcareCustomEndpoint; @@ -901,6 +894,13 @@ public Optional> tagsCustomEndpoint() { return Optional.ofNullable(this.tagsCustomEndpoint); } + @Import(name="tagsLocationCustomEndpoint") + private @Nullable Output tagsLocationCustomEndpoint; + + public Optional> tagsLocationCustomEndpoint() { + return Optional.ofNullable(this.tagsLocationCustomEndpoint); + } + @Import(name="tpuCustomEndpoint") private @Nullable Output tpuCustomEndpoint; @@ -936,6 +936,13 @@ public Optional> workflowsCustomEndpoint() { return Optional.ofNullable(this.workflowsCustomEndpoint); } + @Import(name="workstationsCustomEndpoint") + private @Nullable Output workstationsCustomEndpoint; + + public Optional> workstationsCustomEndpoint() { + return Optional.ofNullable(this.workstationsCustomEndpoint); + } + @Import(name="zone") private @Nullable Output zone; @@ -983,6 +990,7 @@ private ProviderArgs(ProviderArgs $) { this.cloudRunV2CustomEndpoint = $.cloudRunV2CustomEndpoint; this.cloudSchedulerCustomEndpoint = $.cloudSchedulerCustomEndpoint; this.cloudTasksCustomEndpoint = $.cloudTasksCustomEndpoint; + this.cloudbuildv2CustomEndpoint = $.cloudbuildv2CustomEndpoint; this.clouddeployCustomEndpoint = $.clouddeployCustomEndpoint; this.cloudfunctions2CustomEndpoint = $.cloudfunctions2CustomEndpoint; this.composerCustomEndpoint = $.composerCustomEndpoint; @@ -1006,7 +1014,6 @@ private ProviderArgs(ProviderArgs $) { this.deploymentManagerCustomEndpoint = $.deploymentManagerCustomEndpoint; this.dialogflowCustomEndpoint = $.dialogflowCustomEndpoint; this.dialogflowCxCustomEndpoint = $.dialogflowCxCustomEndpoint; - this.disableGooglePartnerName = $.disableGooglePartnerName; this.dnsCustomEndpoint = $.dnsCustomEndpoint; this.documentAiCustomEndpoint = $.documentAiCustomEndpoint; this.essentialContactsCustomEndpoint = $.essentialContactsCustomEndpoint; @@ -1022,7 +1029,6 @@ private ProviderArgs(ProviderArgs $) { this.gkeBackupCustomEndpoint = $.gkeBackupCustomEndpoint; this.gkeHubCustomEndpoint = $.gkeHubCustomEndpoint; this.gkehubFeatureCustomEndpoint = $.gkehubFeatureCustomEndpoint; - this.googlePartnerName = $.googlePartnerName; this.healthcareCustomEndpoint = $.healthcareCustomEndpoint; this.iam2CustomEndpoint = $.iam2CustomEndpoint; this.iamBetaCustomEndpoint = $.iamBetaCustomEndpoint; @@ -1072,11 +1078,13 @@ private ProviderArgs(ProviderArgs $) { this.storageCustomEndpoint = $.storageCustomEndpoint; this.storageTransferCustomEndpoint = $.storageTransferCustomEndpoint; this.tagsCustomEndpoint = $.tagsCustomEndpoint; + this.tagsLocationCustomEndpoint = $.tagsLocationCustomEndpoint; this.tpuCustomEndpoint = $.tpuCustomEndpoint; this.userProjectOverride = $.userProjectOverride; this.vertexAiCustomEndpoint = $.vertexAiCustomEndpoint; this.vpcAccessCustomEndpoint = $.vpcAccessCustomEndpoint; this.workflowsCustomEndpoint = $.workflowsCustomEndpoint; + this.workstationsCustomEndpoint = $.workstationsCustomEndpoint; this.zone = $.zone; } @@ -1431,6 +1439,15 @@ public Builder cloudTasksCustomEndpoint(String cloudTasksCustomEndpoint) { return cloudTasksCustomEndpoint(Output.of(cloudTasksCustomEndpoint)); } + public Builder cloudbuildv2CustomEndpoint(@Nullable Output cloudbuildv2CustomEndpoint) { + $.cloudbuildv2CustomEndpoint = cloudbuildv2CustomEndpoint; + return this; + } + + public Builder cloudbuildv2CustomEndpoint(String cloudbuildv2CustomEndpoint) { + return cloudbuildv2CustomEndpoint(Output.of(cloudbuildv2CustomEndpoint)); + } + public Builder clouddeployCustomEndpoint(@Nullable Output clouddeployCustomEndpoint) { $.clouddeployCustomEndpoint = clouddeployCustomEndpoint; return this; @@ -1638,15 +1655,6 @@ public Builder dialogflowCxCustomEndpoint(String dialogflowCxCustomEndpoint) { return dialogflowCxCustomEndpoint(Output.of(dialogflowCxCustomEndpoint)); } - public Builder disableGooglePartnerName(@Nullable Output disableGooglePartnerName) { - $.disableGooglePartnerName = disableGooglePartnerName; - return this; - } - - public Builder disableGooglePartnerName(Boolean disableGooglePartnerName) { - return disableGooglePartnerName(Output.of(disableGooglePartnerName)); - } - public Builder dnsCustomEndpoint(@Nullable Output dnsCustomEndpoint) { $.dnsCustomEndpoint = dnsCustomEndpoint; return this; @@ -1782,15 +1790,6 @@ public Builder gkehubFeatureCustomEndpoint(String gkehubFeatureCustomEndpoint) { return gkehubFeatureCustomEndpoint(Output.of(gkehubFeatureCustomEndpoint)); } - public Builder googlePartnerName(@Nullable Output googlePartnerName) { - $.googlePartnerName = googlePartnerName; - return this; - } - - public Builder googlePartnerName(String googlePartnerName) { - return googlePartnerName(Output.of(googlePartnerName)); - } - public Builder healthcareCustomEndpoint(@Nullable Output healthcareCustomEndpoint) { $.healthcareCustomEndpoint = healthcareCustomEndpoint; return this; @@ -2240,6 +2239,15 @@ public Builder tagsCustomEndpoint(String tagsCustomEndpoint) { return tagsCustomEndpoint(Output.of(tagsCustomEndpoint)); } + public Builder tagsLocationCustomEndpoint(@Nullable Output tagsLocationCustomEndpoint) { + $.tagsLocationCustomEndpoint = tagsLocationCustomEndpoint; + return this; + } + + public Builder tagsLocationCustomEndpoint(String tagsLocationCustomEndpoint) { + return tagsLocationCustomEndpoint(Output.of(tagsLocationCustomEndpoint)); + } + public Builder tpuCustomEndpoint(@Nullable Output tpuCustomEndpoint) { $.tpuCustomEndpoint = tpuCustomEndpoint; return this; @@ -2285,6 +2293,15 @@ public Builder workflowsCustomEndpoint(String workflowsCustomEndpoint) { return workflowsCustomEndpoint(Output.of(workflowsCustomEndpoint)); } + public Builder workstationsCustomEndpoint(@Nullable Output workstationsCustomEndpoint) { + $.workstationsCustomEndpoint = workstationsCustomEndpoint; + return this; + } + + public Builder workstationsCustomEndpoint(String workstationsCustomEndpoint) { + return workstationsCustomEndpoint(Output.of(workstationsCustomEndpoint)); + } + public Builder zone(@Nullable Output zone) { $.zone = zone; 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 fcbeb9953a..0572373733 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 @@ -40,88 +40,6 @@ * `billing_project` you defined. * * ## Example Usage - * ### Access Context Manager Access Level Condition Basic - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.accesscontextmanager.AccessPolicy; - * import com.pulumi.gcp.accesscontextmanager.AccessPolicyArgs; - * import com.pulumi.gcp.accesscontextmanager.AccessLevel; - * import com.pulumi.gcp.accesscontextmanager.AccessLevelArgs; - * import com.pulumi.gcp.accesscontextmanager.inputs.AccessLevelBasicArgs; - * import com.pulumi.gcp.serviceAccount.Account; - * import com.pulumi.gcp.serviceAccount.AccountArgs; - * import com.pulumi.gcp.accesscontextmanager.AccessLevelCondition; - * import com.pulumi.gcp.accesscontextmanager.AccessLevelConditionArgs; - * import com.pulumi.gcp.accesscontextmanager.inputs.AccessLevelConditionDevicePolicyArgs; - * 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 access_policy = new AccessPolicy("access-policy", AccessPolicyArgs.builder() - * .parent("organizations/123456789") - * .title("my policy") - * .build()); - * - * var access_level_service_account = new AccessLevel("access-level-service-account", AccessLevelArgs.builder() - * .parent(access_policy.name().applyValue(name -> String.format("accessPolicies/%s", name))) - * .title("tf_test_chromeos_no_lock") - * .basic(AccessLevelBasicArgs.builder() - * .conditions(AccessLevelBasicConditionArgs.builder() - * .devicePolicy(AccessLevelBasicConditionDevicePolicyArgs.builder() - * .requireScreenLock(true) - * .osConstraints(AccessLevelBasicConditionDevicePolicyOsConstraintArgs.builder() - * .osType("DESKTOP_CHROME_OS") - * .build()) - * .build()) - * .regions( - * "CH", - * "IT", - * "US") - * .build()) - * .build()) - * .build()); - * - * var created_later = new Account("created-later", AccountArgs.builder() - * .accountId("tf-test") - * .build()); - * - * var access_level_conditions = new AccessLevelCondition("access-level-conditions", AccessLevelConditionArgs.builder() - * .accessLevel(access_level_service_account.name()) - * .ipSubnetworks("192.0.4.0/24") - * .members( - * "user:test@google.com", - * "user:test2@google.com", - * created_later.email().applyValue(email -> String.format("serviceAccount:%s", email))) - * .negate(false) - * .devicePolicy(AccessLevelConditionDevicePolicyArgs.builder() - * .requireScreenLock(false) - * .requireAdminApproval(false) - * .requireCorpOwned(true) - * .osConstraints(AccessLevelConditionDevicePolicyOsConstraintArgs.builder() - * .osType("DESKTOP_CHROME_OS") - * .build()) - * .build()) - * .regions( - * "IT", - * "US") - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/Api.java b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/Api.java index 4a984140aa..a12040d0a4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/Api.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/Api.java @@ -16,14 +16,6 @@ import javax.annotation.Nullable; /** - * A consumable API that can be used by multiple Gateways. - * - * To get more information about Api, see: - * - * * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart) - * * ## Example Usage * ### Apigateway Api Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfig.java index 64ac331ad7..04a4873da4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfig.java @@ -21,14 +21,6 @@ import javax.annotation.Nullable; /** - * An API Configuration is an association of an API Controller Config and a Gateway Config - * - * To get more information about ApiConfig, see: - * - * * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis.configs) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/api-gateway/docs/creating-api-config) - * * ## Example Usage * ### Apigateway Api Config Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfigIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfigIamBinding.java index 1bcb853ce6..a5a5558ee5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfigIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfigIamBinding.java @@ -17,132 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - * - * * `gcp.apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - * * `gcp.apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - * * `gcp.apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - * - * > **Note:** `gcp.apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiConfigIamBinding` and `gcp.apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_api\_config\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.apigateway.ApiConfigIamPolicy; - * import com.pulumi.gcp.apigateway.ApiConfigIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new ApiConfigIamPolicy("policy", ApiConfigIamPolicyArgs.builder() - * .api(google_api_gateway_api_config.api_cfg().api()) - * .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_api\_config\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.ApiConfigIamBinding; - * import com.pulumi.gcp.apigateway.ApiConfigIamBindingArgs; - * 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 binding = new ApiConfigIamBinding("binding", ApiConfigIamBindingArgs.builder() - * .api(google_api_gateway_api_config.api_cfg().api()) - * .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id()) - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_api\_config\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.ApiConfigIamMember; - * import com.pulumi.gcp.apigateway.ApiConfigIamMemberArgs; - * 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 member = new ApiConfigIamMember("member", ApiConfigIamMemberArgs.builder() - * .api(google_api_gateway_api_config.api_cfg().api()) - * .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id()) - * .role("roles/apigateway.viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfigIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfigIamMember.java index cc48e73d57..a1223d137e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfigIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfigIamMember.java @@ -16,132 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - * - * * `gcp.apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - * * `gcp.apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - * * `gcp.apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - * - * > **Note:** `gcp.apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiConfigIamBinding` and `gcp.apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_api\_config\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.apigateway.ApiConfigIamPolicy; - * import com.pulumi.gcp.apigateway.ApiConfigIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new ApiConfigIamPolicy("policy", ApiConfigIamPolicyArgs.builder() - * .api(google_api_gateway_api_config.api_cfg().api()) - * .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_api\_config\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.ApiConfigIamBinding; - * import com.pulumi.gcp.apigateway.ApiConfigIamBindingArgs; - * 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 binding = new ApiConfigIamBinding("binding", ApiConfigIamBindingArgs.builder() - * .api(google_api_gateway_api_config.api_cfg().api()) - * .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id()) - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_api\_config\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.ApiConfigIamMember; - * import com.pulumi.gcp.apigateway.ApiConfigIamMemberArgs; - * 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 member = new ApiConfigIamMember("member", ApiConfigIamMemberArgs.builder() - * .api(google_api_gateway_api_config.api_cfg().api()) - * .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id()) - * .role("roles/apigateway.viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfigIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfigIamPolicy.java index b5f751b167..97e5bbd9da 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfigIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiConfigIamPolicy.java @@ -14,132 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - * - * * `gcp.apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - * * `gcp.apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - * * `gcp.apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - * - * > **Note:** `gcp.apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiConfigIamBinding` and `gcp.apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_api\_config\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.apigateway.ApiConfigIamPolicy; - * import com.pulumi.gcp.apigateway.ApiConfigIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new ApiConfigIamPolicy("policy", ApiConfigIamPolicyArgs.builder() - * .api(google_api_gateway_api_config.api_cfg().api()) - * .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_api\_config\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.ApiConfigIamBinding; - * import com.pulumi.gcp.apigateway.ApiConfigIamBindingArgs; - * 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 binding = new ApiConfigIamBinding("binding", ApiConfigIamBindingArgs.builder() - * .api(google_api_gateway_api_config.api_cfg().api()) - * .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id()) - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_api\_config\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.ApiConfigIamMember; - * import com.pulumi.gcp.apigateway.ApiConfigIamMemberArgs; - * 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 member = new ApiConfigIamMember("member", ApiConfigIamMemberArgs.builder() - * .api(google_api_gateway_api_config.api_cfg().api()) - * .apiConfig(google_api_gateway_api_config.api_cfg().api_config_id()) - * .role("roles/apigateway.viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiIamBinding.java index d8cc1a42c9..0e4294bef5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiIamBinding.java @@ -17,132 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - * - * * `gcp.apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - * * `gcp.apigateway.ApiIamBinding`: 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 api are preserved. - * * `gcp.apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - * - * > **Note:** `gcp.apigateway.ApiIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiIamBinding` and `gcp.apigateway.ApiIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.ApiIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_api\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.apigateway.ApiIamPolicy; - * import com.pulumi.gcp.apigateway.ApiIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new ApiIamPolicy("policy", ApiIamPolicyArgs.builder() - * .project(google_api_gateway_api.api().project()) - * .api(google_api_gateway_api.api().api_id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_api\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.ApiIamBinding; - * import com.pulumi.gcp.apigateway.ApiIamBindingArgs; - * 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 binding = new ApiIamBinding("binding", ApiIamBindingArgs.builder() - * .project(google_api_gateway_api.api().project()) - * .api(google_api_gateway_api.api().api_id()) - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_api\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.ApiIamMember; - * import com.pulumi.gcp.apigateway.ApiIamMemberArgs; - * 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 member = new ApiIamMember("member", ApiIamMemberArgs.builder() - * .project(google_api_gateway_api.api().project()) - * .api(google_api_gateway_api.api().api_id()) - * .role("roles/apigateway.viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiIamMember.java index 30485b8b6d..ebde44bcab 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiIamMember.java @@ -16,132 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - * - * * `gcp.apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - * * `gcp.apigateway.ApiIamBinding`: 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 api are preserved. - * * `gcp.apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - * - * > **Note:** `gcp.apigateway.ApiIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiIamBinding` and `gcp.apigateway.ApiIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.ApiIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_api\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.apigateway.ApiIamPolicy; - * import com.pulumi.gcp.apigateway.ApiIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new ApiIamPolicy("policy", ApiIamPolicyArgs.builder() - * .project(google_api_gateway_api.api().project()) - * .api(google_api_gateway_api.api().api_id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_api\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.ApiIamBinding; - * import com.pulumi.gcp.apigateway.ApiIamBindingArgs; - * 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 binding = new ApiIamBinding("binding", ApiIamBindingArgs.builder() - * .project(google_api_gateway_api.api().project()) - * .api(google_api_gateway_api.api().api_id()) - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_api\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.ApiIamMember; - * import com.pulumi.gcp.apigateway.ApiIamMemberArgs; - * 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 member = new ApiIamMember("member", ApiIamMemberArgs.builder() - * .project(google_api_gateway_api.api().project()) - * .api(google_api_gateway_api.api().api_id()) - * .role("roles/apigateway.viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiIamPolicy.java index c37d50a9c4..0d916c16af 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/ApiIamPolicy.java @@ -14,132 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - * - * * `gcp.apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - * * `gcp.apigateway.ApiIamBinding`: 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 api are preserved. - * * `gcp.apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - * - * > **Note:** `gcp.apigateway.ApiIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiIamBinding` and `gcp.apigateway.ApiIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.ApiIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_api\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.apigateway.ApiIamPolicy; - * import com.pulumi.gcp.apigateway.ApiIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new ApiIamPolicy("policy", ApiIamPolicyArgs.builder() - * .project(google_api_gateway_api.api().project()) - * .api(google_api_gateway_api.api().api_id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_api\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.ApiIamBinding; - * import com.pulumi.gcp.apigateway.ApiIamBindingArgs; - * 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 binding = new ApiIamBinding("binding", ApiIamBindingArgs.builder() - * .project(google_api_gateway_api.api().project()) - * .api(google_api_gateway_api.api().api_id()) - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_api\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.ApiIamMember; - * import com.pulumi.gcp.apigateway.ApiIamMemberArgs; - * 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 member = new ApiIamMember("member", ApiIamMemberArgs.builder() - * .project(google_api_gateway_api.api().project()) - * .api(google_api_gateway_api.api().api_id()) - * .role("roles/apigateway.viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/Gateway.java b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/Gateway.java index 0660347e1f..e191ddb707 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/Gateway.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/Gateway.java @@ -16,14 +16,6 @@ import javax.annotation.Nullable; /** - * A consumable API that can be used by multiple Gateways. - * - * To get more information about Gateway, see: - * - * * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart) - * * ## Example Usage * ### Apigateway Gateway Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/GatewayIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/GatewayIamBinding.java index ebbdb639d7..435cb3b763 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/GatewayIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/GatewayIamBinding.java @@ -17,135 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - * - * * `gcp.apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - * * `gcp.apigateway.GatewayIamBinding`: 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 gateway are preserved. - * * `gcp.apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - * - * > **Note:** `gcp.apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.GatewayIamBinding` and `gcp.apigateway.GatewayIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.GatewayIamBinding` resources **can be** used in conjunction with `gcp.apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_gateway\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.apigateway.GatewayIamPolicy; - * import com.pulumi.gcp.apigateway.GatewayIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new GatewayIamPolicy("policy", GatewayIamPolicyArgs.builder() - * .project(google_api_gateway_gateway.api_gw().project()) - * .region(google_api_gateway_gateway.api_gw().region()) - * .gateway(google_api_gateway_gateway.api_gw().gateway_id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_gateway\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.GatewayIamBinding; - * import com.pulumi.gcp.apigateway.GatewayIamBindingArgs; - * 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 binding = new GatewayIamBinding("binding", GatewayIamBindingArgs.builder() - * .project(google_api_gateway_gateway.api_gw().project()) - * .region(google_api_gateway_gateway.api_gw().region()) - * .gateway(google_api_gateway_gateway.api_gw().gateway_id()) - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_gateway\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.GatewayIamMember; - * import com.pulumi.gcp.apigateway.GatewayIamMemberArgs; - * 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 member = new GatewayIamMember("member", GatewayIamMemberArgs.builder() - * .project(google_api_gateway_gateway.api_gw().project()) - * .region(google_api_gateway_gateway.api_gw().region()) - * .gateway(google_api_gateway_gateway.api_gw().gateway_id()) - * .role("roles/apigateway.viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/GatewayIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/GatewayIamMember.java index 23d2db850a..afeb00520d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/GatewayIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/GatewayIamMember.java @@ -16,135 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - * - * * `gcp.apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - * * `gcp.apigateway.GatewayIamBinding`: 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 gateway are preserved. - * * `gcp.apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - * - * > **Note:** `gcp.apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.GatewayIamBinding` and `gcp.apigateway.GatewayIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.GatewayIamBinding` resources **can be** used in conjunction with `gcp.apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_gateway\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.apigateway.GatewayIamPolicy; - * import com.pulumi.gcp.apigateway.GatewayIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new GatewayIamPolicy("policy", GatewayIamPolicyArgs.builder() - * .project(google_api_gateway_gateway.api_gw().project()) - * .region(google_api_gateway_gateway.api_gw().region()) - * .gateway(google_api_gateway_gateway.api_gw().gateway_id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_gateway\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.GatewayIamBinding; - * import com.pulumi.gcp.apigateway.GatewayIamBindingArgs; - * 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 binding = new GatewayIamBinding("binding", GatewayIamBindingArgs.builder() - * .project(google_api_gateway_gateway.api_gw().project()) - * .region(google_api_gateway_gateway.api_gw().region()) - * .gateway(google_api_gateway_gateway.api_gw().gateway_id()) - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_gateway\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.GatewayIamMember; - * import com.pulumi.gcp.apigateway.GatewayIamMemberArgs; - * 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 member = new GatewayIamMember("member", GatewayIamMemberArgs.builder() - * .project(google_api_gateway_gateway.api_gw().project()) - * .region(google_api_gateway_gateway.api_gw().region()) - * .gateway(google_api_gateway_gateway.api_gw().gateway_id()) - * .role("roles/apigateway.viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/GatewayIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/GatewayIamPolicy.java index df8dd4cc07..f489935e26 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigateway/GatewayIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigateway/GatewayIamPolicy.java @@ -14,135 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - * - * * `gcp.apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - * * `gcp.apigateway.GatewayIamBinding`: 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 gateway are preserved. - * * `gcp.apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - * - * > **Note:** `gcp.apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.GatewayIamBinding` and `gcp.apigateway.GatewayIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.GatewayIamBinding` resources **can be** used in conjunction with `gcp.apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_gateway\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.apigateway.GatewayIamPolicy; - * import com.pulumi.gcp.apigateway.GatewayIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new GatewayIamPolicy("policy", GatewayIamPolicyArgs.builder() - * .project(google_api_gateway_gateway.api_gw().project()) - * .region(google_api_gateway_gateway.api_gw().region()) - * .gateway(google_api_gateway_gateway.api_gw().gateway_id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_gateway\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.GatewayIamBinding; - * import com.pulumi.gcp.apigateway.GatewayIamBindingArgs; - * 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 binding = new GatewayIamBinding("binding", GatewayIamBindingArgs.builder() - * .project(google_api_gateway_gateway.api_gw().project()) - * .region(google_api_gateway_gateway.api_gw().region()) - * .gateway(google_api_gateway_gateway.api_gw().gateway_id()) - * .role("roles/apigateway.viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_api\_gateway\_gateway\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.apigateway.GatewayIamMember; - * import com.pulumi.gcp.apigateway.GatewayIamMemberArgs; - * 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 member = new GatewayIamMember("member", GatewayIamMemberArgs.builder() - * .project(google_api_gateway_gateway.api_gw().project()) - * .region(google_api_gateway_gateway.api_gw().region()) - * .gateway(google_api_gateway_gateway.api_gw().gateway_id()) - * .role("roles/apigateway.viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvGroup.java b/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvGroup.java index 2f858a0f48..6b8c635f04 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvGroup.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvGroup.java @@ -25,70 +25,6 @@ * * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) * * ## Example Usage - * ### Apigee Environment Group Basic - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.compute.Network; - * import com.pulumi.gcp.compute.GlobalAddress; - * import com.pulumi.gcp.compute.GlobalAddressArgs; - * import com.pulumi.gcp.servicenetworking.Connection; - * import com.pulumi.gcp.servicenetworking.ConnectionArgs; - * import com.pulumi.gcp.apigee.Organization; - * import com.pulumi.gcp.apigee.OrganizationArgs; - * import com.pulumi.gcp.apigee.EnvGroup; - * import com.pulumi.gcp.apigee.EnvGroupArgs; - * 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) { - * final var current = OrganizationsFunctions.getClientConfig(); - * - * var apigeeNetwork = new Network("apigeeNetwork"); - * - * var apigeeRange = new GlobalAddress("apigeeRange", GlobalAddressArgs.builder() - * .purpose("VPC_PEERING") - * .addressType("INTERNAL") - * .prefixLength(16) - * .network(apigeeNetwork.id()) - * .build()); - * - * var apigeeVpcConnection = new Connection("apigeeVpcConnection", ConnectionArgs.builder() - * .network(apigeeNetwork.id()) - * .service("servicenetworking.googleapis.com") - * .reservedPeeringRanges(apigeeRange.name()) - * .build()); - * - * var apigeeOrg = new Organization("apigeeOrg", OrganizationArgs.builder() - * .analyticsRegion("us-central1") - * .projectId(current.applyValue(getClientConfigResult -> getClientConfigResult.project())) - * .authorizedNetwork(apigeeNetwork.id()) - * .build(), CustomResourceOptions.builder() - * .dependsOn(apigeeVpcConnection) - * .build()); - * - * var envGrp = new EnvGroup("envGrp", EnvGroupArgs.builder() - * .hostnames("abc.foo.com") - * .orgId(apigeeOrg.id()) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvGroupAttachment.java b/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvGroupAttachment.java index b0d1923706..a818db1fb1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvGroupAttachment.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigee/EnvGroupAttachment.java @@ -23,117 +23,6 @@ * * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) * * ## Example Usage - * ### Apigee Environment Group Attachment Basic - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.Project; - * import com.pulumi.gcp.organizations.ProjectArgs; - * import com.pulumi.gcp.projects.Service; - * import com.pulumi.gcp.projects.ServiceArgs; - * import com.pulumi.gcp.compute.Network; - * import com.pulumi.gcp.compute.NetworkArgs; - * import com.pulumi.gcp.compute.GlobalAddress; - * import com.pulumi.gcp.compute.GlobalAddressArgs; - * import com.pulumi.gcp.servicenetworking.Connection; - * import com.pulumi.gcp.servicenetworking.ConnectionArgs; - * import com.pulumi.gcp.apigee.Organization; - * import com.pulumi.gcp.apigee.OrganizationArgs; - * import com.pulumi.gcp.apigee.EnvGroup; - * import com.pulumi.gcp.apigee.EnvGroupArgs; - * import com.pulumi.gcp.apigee.Environment; - * import com.pulumi.gcp.apigee.EnvironmentArgs; - * import com.pulumi.gcp.apigee.EnvGroupAttachment; - * import com.pulumi.gcp.apigee.EnvGroupAttachmentArgs; - * 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 project = new Project("project", ProjectArgs.builder() - * .projectId("tf-test") - * .orgId("") - * .billingAccount("") - * .build()); - * - * var apigee = new Service("apigee", ServiceArgs.builder() - * .project(project.projectId()) - * .service("apigee.googleapis.com") - * .build()); - * - * var compute = new Service("compute", ServiceArgs.builder() - * .project(project.projectId()) - * .service("compute.googleapis.com") - * .build()); - * - * var servicenetworking = new Service("servicenetworking", ServiceArgs.builder() - * .project(project.projectId()) - * .service("servicenetworking.googleapis.com") - * .build()); - * - * var apigeeNetwork = new Network("apigeeNetwork", NetworkArgs.builder() - * .project(project.projectId()) - * .build(), CustomResourceOptions.builder() - * .dependsOn(compute) - * .build()); - * - * var apigeeRange = new GlobalAddress("apigeeRange", GlobalAddressArgs.builder() - * .purpose("VPC_PEERING") - * .addressType("INTERNAL") - * .prefixLength(16) - * .network(apigeeNetwork.id()) - * .project(project.projectId()) - * .build()); - * - * var apigeeVpcConnection = new Connection("apigeeVpcConnection", ConnectionArgs.builder() - * .network(apigeeNetwork.id()) - * .service("servicenetworking.googleapis.com") - * .reservedPeeringRanges(apigeeRange.name()) - * .build(), CustomResourceOptions.builder() - * .dependsOn(servicenetworking) - * .build()); - * - * var apigeeOrg = new Organization("apigeeOrg", OrganizationArgs.builder() - * .analyticsRegion("us-central1") - * .projectId(project.projectId()) - * .authorizedNetwork(apigeeNetwork.id()) - * .build(), CustomResourceOptions.builder() - * .dependsOn( - * apigeeVpcConnection, - * apigee) - * .build()); - * - * var apigeeEnvgroup = new EnvGroup("apigeeEnvgroup", EnvGroupArgs.builder() - * .orgId(apigeeOrg.id()) - * .hostnames("abc.foo.com") - * .build()); - * - * var apigeeEnv = new Environment("apigeeEnv", EnvironmentArgs.builder() - * .orgId(apigeeOrg.id()) - * .description("Apigee Environment") - * .displayName("tf-test") - * .build()); - * - * var envGroupAttachment = new EnvGroupAttachment("envGroupAttachment", EnvGroupAttachmentArgs.builder() - * .envgroupId(apigeeEnvgroup.id()) - * .environment(apigeeEnv.name()) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigee/Environment.java b/sdk/java/src/main/java/com/pulumi/gcp/apigee/Environment.java index 253c4c05d2..d838d81a5d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigee/Environment.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigee/Environment.java @@ -25,71 +25,6 @@ * * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) * * ## Example Usage - * ### Apigee Environment Basic - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.compute.Network; - * import com.pulumi.gcp.compute.GlobalAddress; - * import com.pulumi.gcp.compute.GlobalAddressArgs; - * import com.pulumi.gcp.servicenetworking.Connection; - * import com.pulumi.gcp.servicenetworking.ConnectionArgs; - * import com.pulumi.gcp.apigee.Organization; - * import com.pulumi.gcp.apigee.OrganizationArgs; - * import com.pulumi.gcp.apigee.Environment; - * import com.pulumi.gcp.apigee.EnvironmentArgs; - * 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) { - * final var current = OrganizationsFunctions.getClientConfig(); - * - * var apigeeNetwork = new Network("apigeeNetwork"); - * - * var apigeeRange = new GlobalAddress("apigeeRange", GlobalAddressArgs.builder() - * .purpose("VPC_PEERING") - * .addressType("INTERNAL") - * .prefixLength(16) - * .network(apigeeNetwork.id()) - * .build()); - * - * var apigeeVpcConnection = new Connection("apigeeVpcConnection", ConnectionArgs.builder() - * .network(apigeeNetwork.id()) - * .service("servicenetworking.googleapis.com") - * .reservedPeeringRanges(apigeeRange.name()) - * .build()); - * - * var apigeeOrg = new Organization("apigeeOrg", OrganizationArgs.builder() - * .analyticsRegion("us-central1") - * .projectId(current.applyValue(getClientConfigResult -> getClientConfigResult.project())) - * .authorizedNetwork(apigeeNetwork.id()) - * .build(), CustomResourceOptions.builder() - * .dependsOn(apigeeVpcConnection) - * .build()); - * - * var env = new Environment("env", EnvironmentArgs.builder() - * .description("Apigee Environment") - * .displayName("environment-1") - * .orgId(apigeeOrg.id()) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigee/Instance.java b/sdk/java/src/main/java/com/pulumi/gcp/apigee/Instance.java index 8b89f13476..40c32f997a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigee/Instance.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigee/Instance.java @@ -25,301 +25,6 @@ * * [Creating a runtime instance](https://cloud.google.com/apigee/docs/api-platform/get-started/create-instance) * * ## Example Usage - * ### Apigee Instance Basic - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.compute.Network; - * import com.pulumi.gcp.compute.GlobalAddress; - * import com.pulumi.gcp.compute.GlobalAddressArgs; - * import com.pulumi.gcp.servicenetworking.Connection; - * import com.pulumi.gcp.servicenetworking.ConnectionArgs; - * import com.pulumi.gcp.apigee.Organization; - * import com.pulumi.gcp.apigee.OrganizationArgs; - * import com.pulumi.gcp.apigee.Instance; - * import com.pulumi.gcp.apigee.InstanceArgs; - * 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) { - * final var current = OrganizationsFunctions.getClientConfig(); - * - * var apigeeNetwork = new Network("apigeeNetwork"); - * - * var apigeeRange = new GlobalAddress("apigeeRange", GlobalAddressArgs.builder() - * .purpose("VPC_PEERING") - * .addressType("INTERNAL") - * .prefixLength(16) - * .network(apigeeNetwork.id()) - * .build()); - * - * var apigeeVpcConnection = new Connection("apigeeVpcConnection", ConnectionArgs.builder() - * .network(apigeeNetwork.id()) - * .service("servicenetworking.googleapis.com") - * .reservedPeeringRanges(apigeeRange.name()) - * .build()); - * - * var apigeeOrg = new Organization("apigeeOrg", OrganizationArgs.builder() - * .analyticsRegion("us-central1") - * .projectId(current.applyValue(getClientConfigResult -> getClientConfigResult.project())) - * .authorizedNetwork(apigeeNetwork.id()) - * .build(), CustomResourceOptions.builder() - * .dependsOn(apigeeVpcConnection) - * .build()); - * - * var apigeeInstance = new Instance("apigeeInstance", InstanceArgs.builder() - * .location("us-central1") - * .orgId(apigeeOrg.id()) - * .build()); - * - * } - * } - * ``` - * ### Apigee Instance Cidr Range - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.compute.Network; - * import com.pulumi.gcp.compute.GlobalAddress; - * import com.pulumi.gcp.compute.GlobalAddressArgs; - * import com.pulumi.gcp.servicenetworking.Connection; - * import com.pulumi.gcp.servicenetworking.ConnectionArgs; - * import com.pulumi.gcp.apigee.Organization; - * import com.pulumi.gcp.apigee.OrganizationArgs; - * import com.pulumi.gcp.apigee.Instance; - * import com.pulumi.gcp.apigee.InstanceArgs; - * 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) { - * final var current = OrganizationsFunctions.getClientConfig(); - * - * var apigeeNetwork = new Network("apigeeNetwork"); - * - * var apigeeRange = new GlobalAddress("apigeeRange", GlobalAddressArgs.builder() - * .purpose("VPC_PEERING") - * .addressType("INTERNAL") - * .prefixLength(22) - * .network(apigeeNetwork.id()) - * .build()); - * - * var apigeeVpcConnection = new Connection("apigeeVpcConnection", ConnectionArgs.builder() - * .network(apigeeNetwork.id()) - * .service("servicenetworking.googleapis.com") - * .reservedPeeringRanges(apigeeRange.name()) - * .build()); - * - * var apigeeOrg = new Organization("apigeeOrg", OrganizationArgs.builder() - * .analyticsRegion("us-central1") - * .projectId(current.applyValue(getClientConfigResult -> getClientConfigResult.project())) - * .authorizedNetwork(apigeeNetwork.id()) - * .build(), CustomResourceOptions.builder() - * .dependsOn(apigeeVpcConnection) - * .build()); - * - * var apigeeInstance = new Instance("apigeeInstance", InstanceArgs.builder() - * .location("us-central1") - * .orgId(apigeeOrg.id()) - * .peeringCidrRange("SLASH_22") - * .build()); - * - * } - * } - * ``` - * ### Apigee Instance Ip Range - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.compute.Network; - * import com.pulumi.gcp.compute.GlobalAddress; - * import com.pulumi.gcp.compute.GlobalAddressArgs; - * import com.pulumi.gcp.servicenetworking.Connection; - * import com.pulumi.gcp.servicenetworking.ConnectionArgs; - * import com.pulumi.gcp.apigee.Organization; - * import com.pulumi.gcp.apigee.OrganizationArgs; - * import com.pulumi.gcp.apigee.Instance; - * import com.pulumi.gcp.apigee.InstanceArgs; - * 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) { - * final var current = OrganizationsFunctions.getClientConfig(); - * - * var apigeeNetwork = new Network("apigeeNetwork"); - * - * var apigeeRange = new GlobalAddress("apigeeRange", GlobalAddressArgs.builder() - * .purpose("VPC_PEERING") - * .addressType("INTERNAL") - * .prefixLength(22) - * .network(apigeeNetwork.id()) - * .build()); - * - * var apigeeVpcConnection = new Connection("apigeeVpcConnection", ConnectionArgs.builder() - * .network(apigeeNetwork.id()) - * .service("servicenetworking.googleapis.com") - * .reservedPeeringRanges(apigeeRange.name()) - * .build()); - * - * var apigeeOrg = new Organization("apigeeOrg", OrganizationArgs.builder() - * .analyticsRegion("us-central1") - * .projectId(current.applyValue(getClientConfigResult -> getClientConfigResult.project())) - * .authorizedNetwork(apigeeNetwork.id()) - * .build(), CustomResourceOptions.builder() - * .dependsOn(apigeeVpcConnection) - * .build()); - * - * var apigeeInstance = new Instance("apigeeInstance", InstanceArgs.builder() - * .location("us-central1") - * .orgId(apigeeOrg.id()) - * .ipRange("10.87.8.0/22") - * .build()); - * - * } - * } - * ``` - * ### Apigee Instance Full - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.compute.Network; - * import com.pulumi.gcp.compute.GlobalAddress; - * import com.pulumi.gcp.compute.GlobalAddressArgs; - * import com.pulumi.gcp.servicenetworking.Connection; - * import com.pulumi.gcp.servicenetworking.ConnectionArgs; - * import com.pulumi.gcp.kms.KeyRing; - * import com.pulumi.gcp.kms.KeyRingArgs; - * import com.pulumi.gcp.kms.CryptoKey; - * import com.pulumi.gcp.kms.CryptoKeyArgs; - * import com.pulumi.gcp.projects.ServiceIdentity; - * import com.pulumi.gcp.projects.ServiceIdentityArgs; - * import com.pulumi.gcp.kms.CryptoKeyIAMBinding; - * import com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs; - * import com.pulumi.gcp.apigee.Organization; - * import com.pulumi.gcp.apigee.OrganizationArgs; - * import com.pulumi.gcp.apigee.Instance; - * import com.pulumi.gcp.apigee.InstanceArgs; - * 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) { - * final var current = OrganizationsFunctions.getClientConfig(); - * - * var apigeeNetwork = new Network("apigeeNetwork"); - * - * var apigeeRange = new GlobalAddress("apigeeRange", GlobalAddressArgs.builder() - * .purpose("VPC_PEERING") - * .addressType("INTERNAL") - * .prefixLength(16) - * .network(apigeeNetwork.id()) - * .build()); - * - * var apigeeVpcConnection = new Connection("apigeeVpcConnection", ConnectionArgs.builder() - * .network(apigeeNetwork.id()) - * .service("servicenetworking.googleapis.com") - * .reservedPeeringRanges(apigeeRange.name()) - * .build()); - * - * var apigeeKeyring = new KeyRing("apigeeKeyring", KeyRingArgs.builder() - * .location("us-central1") - * .build()); - * - * var apigeeKey = new CryptoKey("apigeeKey", CryptoKeyArgs.builder() - * .keyRing(apigeeKeyring.id()) - * .build()); - * - * var apigeeSa = new ServiceIdentity("apigeeSa", ServiceIdentityArgs.builder() - * .project(google_project.project().project_id()) - * .service(google_project_service.apigee().service()) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * var apigeeSaKeyuser = new CryptoKeyIAMBinding("apigeeSaKeyuser", CryptoKeyIAMBindingArgs.builder() - * .cryptoKeyId(apigeeKey.id()) - * .role("roles/cloudkms.cryptoKeyEncrypterDecrypter") - * .members(apigeeSa.email().applyValue(email -> String.format("serviceAccount:%s", email))) - * .build()); - * - * var apigeeOrg = new Organization("apigeeOrg", OrganizationArgs.builder() - * .analyticsRegion("us-central1") - * .displayName("apigee-org") - * .description("Auto-provisioned Apigee Org.") - * .projectId(current.applyValue(getClientConfigResult -> getClientConfigResult.project())) - * .authorizedNetwork(apigeeNetwork.id()) - * .runtimeDatabaseEncryptionKeyName(apigeeKey.id()) - * .build(), CustomResourceOptions.builder() - * .dependsOn( - * apigeeVpcConnection, - * apigeeSaKeyuser) - * .build()); - * - * var apigeeInstance = new Instance("apigeeInstance", InstanceArgs.builder() - * .location("us-central1") - * .description("Auto-managed Apigee Runtime Instance") - * .displayName("tf-test") - * .orgId(apigeeOrg.id()) - * .diskEncryptionKeyName(apigeeKey.id()) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigee/InstanceAttachment.java b/sdk/java/src/main/java/com/pulumi/gcp/apigee/InstanceAttachment.java index 3c9eaa3c70..88e6d6f3d1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigee/InstanceAttachment.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigee/InstanceAttachment.java @@ -23,117 +23,6 @@ * * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) * * ## Example Usage - * ### Apigee Instance Attachment Basic - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.Project; - * import com.pulumi.gcp.organizations.ProjectArgs; - * import com.pulumi.gcp.projects.Service; - * import com.pulumi.gcp.projects.ServiceArgs; - * import com.pulumi.gcp.compute.Network; - * import com.pulumi.gcp.compute.NetworkArgs; - * import com.pulumi.gcp.compute.GlobalAddress; - * import com.pulumi.gcp.compute.GlobalAddressArgs; - * import com.pulumi.gcp.servicenetworking.Connection; - * import com.pulumi.gcp.servicenetworking.ConnectionArgs; - * import com.pulumi.gcp.apigee.Organization; - * import com.pulumi.gcp.apigee.OrganizationArgs; - * import com.pulumi.gcp.apigee.Instance; - * import com.pulumi.gcp.apigee.InstanceArgs; - * import com.pulumi.gcp.apigee.Environment; - * import com.pulumi.gcp.apigee.EnvironmentArgs; - * import com.pulumi.gcp.apigee.InstanceAttachment; - * import com.pulumi.gcp.apigee.InstanceAttachmentArgs; - * 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 project = new Project("project", ProjectArgs.builder() - * .projectId("tf-test") - * .orgId("") - * .billingAccount("") - * .build()); - * - * var apigee = new Service("apigee", ServiceArgs.builder() - * .project(project.projectId()) - * .service("apigee.googleapis.com") - * .build()); - * - * var compute = new Service("compute", ServiceArgs.builder() - * .project(project.projectId()) - * .service("compute.googleapis.com") - * .build()); - * - * var servicenetworking = new Service("servicenetworking", ServiceArgs.builder() - * .project(project.projectId()) - * .service("servicenetworking.googleapis.com") - * .build()); - * - * var apigeeNetwork = new Network("apigeeNetwork", NetworkArgs.builder() - * .project(project.projectId()) - * .build(), CustomResourceOptions.builder() - * .dependsOn(compute) - * .build()); - * - * var apigeeRange = new GlobalAddress("apigeeRange", GlobalAddressArgs.builder() - * .purpose("VPC_PEERING") - * .addressType("INTERNAL") - * .prefixLength(16) - * .network(apigeeNetwork.id()) - * .project(project.projectId()) - * .build()); - * - * var apigeeVpcConnection = new Connection("apigeeVpcConnection", ConnectionArgs.builder() - * .network(apigeeNetwork.id()) - * .service("servicenetworking.googleapis.com") - * .reservedPeeringRanges(apigeeRange.name()) - * .build(), CustomResourceOptions.builder() - * .dependsOn(servicenetworking) - * .build()); - * - * var apigeeOrg = new Organization("apigeeOrg", OrganizationArgs.builder() - * .analyticsRegion("us-central1") - * .projectId(project.projectId()) - * .authorizedNetwork(apigeeNetwork.id()) - * .build(), CustomResourceOptions.builder() - * .dependsOn( - * apigeeVpcConnection, - * apigee) - * .build()); - * - * var apigeeIns = new Instance("apigeeIns", InstanceArgs.builder() - * .location("us-central1") - * .orgId(apigeeOrg.id()) - * .build()); - * - * var apigeeEnv = new Environment("apigeeEnv", EnvironmentArgs.builder() - * .orgId(apigeeOrg.id()) - * .description("Apigee Environment") - * .displayName("environment-1") - * .build()); - * - * var instanceAttachment = new InstanceAttachment("instanceAttachment", InstanceAttachmentArgs.builder() - * .instanceId(google_apigee_instance.apigee_instance().id()) - * .environment(apigeeEnv.name()) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/apigee/Organization.java b/sdk/java/src/main/java/com/pulumi/gcp/apigee/Organization.java index 9c347e3b43..368d6410c5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/apigee/Organization.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/apigee/Organization.java @@ -160,7 +160,7 @@ * var org = new Organization("org", OrganizationArgs.builder() * .analyticsRegion("us-central1") * .displayName("apigee-org") - * .description("Auto-provisioned Apigee Org.") + * .description("Terraform-provisioned Apigee Org.") * .projectId(current.applyValue(getClientConfigResult -> getClientConfigResult.project())) * .authorizedNetwork(apigeeNetwork.id()) * .runtimeDatabaseEncryptionKeyName(apigeeKey.id()) diff --git a/sdk/java/src/main/java/com/pulumi/gcp/appengine/FlexibleAppVersion.java b/sdk/java/src/main/java/com/pulumi/gcp/appengine/FlexibleAppVersion.java index 90bae80e9c..8810487184 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/appengine/FlexibleAppVersion.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/appengine/FlexibleAppVersion.java @@ -334,14 +334,16 @@ public Output> entrypoint() { return Codegen.optional(this.entrypoint); } /** - * Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + * Environment variables available to the application. As these are not returned in the API request, Terraform will not + * detect any changes made outside of the Terraform config. * */ @Export(name="envVariables", type=Map.class, parameters={String.class, String.class}) private Output> envVariables; /** - * @return Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + * @return Environment variables available to the application. As these are not returned in the API request, Terraform will not + * detect any changes made outside of the Terraform config. * */ public Output>> envVariables() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/appengine/FlexibleAppVersionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/appengine/FlexibleAppVersionArgs.java index aea163024a..1f6ba75d53 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/appengine/FlexibleAppVersionArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/appengine/FlexibleAppVersionArgs.java @@ -163,14 +163,16 @@ public Optional> entrypoint() { } /** - * Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + * Environment variables available to the application. As these are not returned in the API request, Terraform will not + * detect any changes made outside of the Terraform config. * */ @Import(name="envVariables") private @Nullable Output> envVariables; /** - * @return Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + * @return Environment variables available to the application. As these are not returned in the API request, Terraform will not + * detect any changes made outside of the Terraform config. * */ public Optional>> envVariables() { @@ -748,7 +750,8 @@ public Builder entrypoint(FlexibleAppVersionEntrypointArgs entrypoint) { } /** - * @param envVariables Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + * @param envVariables Environment variables available to the application. As these are not returned in the API request, Terraform will not + * detect any changes made outside of the Terraform config. * * @return builder * @@ -759,7 +762,8 @@ public Builder envVariables(@Nullable Output> envVariables) { } /** - * @param envVariables Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + * @param envVariables Environment variables available to the application. As these are not returned in the API request, Terraform will not + * detect any changes made outside of the Terraform config. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/appengine/inputs/FlexibleAppVersionState.java b/sdk/java/src/main/java/com/pulumi/gcp/appengine/inputs/FlexibleAppVersionState.java index 21a1155344..b18d40b0bb 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/appengine/inputs/FlexibleAppVersionState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/appengine/inputs/FlexibleAppVersionState.java @@ -163,14 +163,16 @@ public Optional> entrypoint() { } /** - * Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + * Environment variables available to the application. As these are not returned in the API request, Terraform will not + * detect any changes made outside of the Terraform config. * */ @Import(name="envVariables") private @Nullable Output> envVariables; /** - * @return Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + * @return Environment variables available to the application. As these are not returned in the API request, Terraform will not + * detect any changes made outside of the Terraform config. * */ public Optional>> envVariables() { @@ -778,7 +780,8 @@ public Builder entrypoint(FlexibleAppVersionEntrypointArgs entrypoint) { } /** - * @param envVariables Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + * @param envVariables Environment variables available to the application. As these are not returned in the API request, Terraform will not + * detect any changes made outside of the Terraform config. * * @return builder * @@ -789,7 +792,8 @@ public Builder envVariables(@Nullable Output> envVariables) { } /** - * @param envVariables Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + * @param envVariables Environment variables available to the application. As these are not returned in the API request, Terraform will not + * detect any changes made outside of the Terraform config. * * @return 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 6c3fc9373f..be56baa255 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 @@ -270,6 +270,7 @@ * var connection = new Connection("connection", ConnectionArgs.builder() * .azure(ConnectionAzureArgs.builder() * .customerTenantId("customer-tenant-id") + * .federatedApplicationClientId("b43eeeee-eeee-eeee-eeee-a480155501ce") * .build()) * .connectionId("my-connection") * .description("a riveting description") @@ -401,7 +402,7 @@ public Output> cloudSpanner() { return Codegen.optional(this.cloudSpanner); } /** - * A nested object resource + * Connection properties specific to the Cloud SQL. * Structure is documented below. * */ @@ -409,7 +410,7 @@ public Output> cloudSpanner() { private Output cloudSql; /** - * @return A nested object resource + * @return Connection properties specific to the Cloud SQL. * Structure is documented below. * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/ConnectionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/ConnectionArgs.java index 618d067405..588d284e05 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/ConnectionArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/ConnectionArgs.java @@ -89,7 +89,7 @@ public Optional> cloudSpanner() { } /** - * A nested object resource + * Connection properties specific to the Cloud SQL. * Structure is documented below. * */ @@ -97,7 +97,7 @@ public Optional> cloudSpanner() { private @Nullable Output cloudSql; /** - * @return A nested object resource + * @return Connection properties specific to the Cloud SQL. * Structure is documented below. * */ @@ -320,7 +320,7 @@ public Builder cloudSpanner(ConnectionCloudSpannerArgs cloudSpanner) { } /** - * @param cloudSql A nested object resource + * @param cloudSql Connection properties specific to the Cloud SQL. * Structure is documented below. * * @return builder @@ -332,7 +332,7 @@ public Builder cloudSql(@Nullable Output cloudSql) { } /** - * @param cloudSql A nested object resource + * @param cloudSql Connection properties specific to the Cloud SQL. * Structure is documented below. * * @return builder diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/ReservationAssignment.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/ReservationAssignment.java index 0d63701eb4..5faa28960c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/ReservationAssignment.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/ReservationAssignment.java @@ -17,46 +17,6 @@ * The BigqueryReservation Assignment resource * * ## Example Usage - * ### Basic - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.bigquery.Reservation; - * import com.pulumi.gcp.bigquery.ReservationArgs; - * import com.pulumi.gcp.bigquery.ReservationAssignment; - * import com.pulumi.gcp.bigquery.ReservationAssignmentArgs; - * 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 basic = new Reservation("basic", ReservationArgs.builder() - * .project("my-project-name") - * .location("us-central1") - * .slotCapacity(0) - * .ignoreIdleSlots(false) - * .build()); - * - * var primary = new ReservationAssignment("primary", ReservationAssignmentArgs.builder() - * .assignee("projects/my-project-name") - * .jobType("PIPELINE") - * .reservation(basic.id()) - * .build()); - * - * } - * } - * ``` * * ## Import * 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 56c568638d..ea7bde6658 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 @@ -66,116 +66,6 @@ * } * } * ``` - * ### Big Query Routine Json - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.bigquery.Dataset; - * import com.pulumi.gcp.bigquery.DatasetArgs; - * import com.pulumi.gcp.bigquery.Routine; - * import com.pulumi.gcp.bigquery.RoutineArgs; - * import com.pulumi.gcp.bigquery.inputs.RoutineArgumentArgs; - * 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 test = new Dataset("test", DatasetArgs.builder() - * .datasetId("dataset_id") - * .build()); - * - * var sproc = new Routine("sproc", RoutineArgs.builder() - * .datasetId(test.datasetId()) - * .routineId("tf_test_routine_id") - * .routineType("SCALAR_FUNCTION") - * .language("JAVASCRIPT") - * .definitionBody("CREATE FUNCTION multiplyInputs return x*y;") - * .arguments( - * RoutineArgumentArgs.builder() - * .name("x") - * .dataType("{\"typeKind\" : \"FLOAT64\"}") - * .build(), - * RoutineArgumentArgs.builder() - * .name("y") - * .dataType("{\"typeKind\" : \"FLOAT64\"}") - * .build()) - * .returnType("{\"typeKind\" : \"FLOAT64\"}") - * .build()); - * - * } - * } - * ``` - * ### Big Query Routine Tvf - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.bigquery.Dataset; - * import com.pulumi.gcp.bigquery.DatasetArgs; - * import com.pulumi.gcp.bigquery.Routine; - * import com.pulumi.gcp.bigquery.RoutineArgs; - * import com.pulumi.gcp.bigquery.inputs.RoutineArgumentArgs; - * import static com.pulumi.codegen.internal.Serialization.*; - * 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 test = new Dataset("test", DatasetArgs.builder() - * .datasetId("dataset_id") - * .build()); - * - * var sproc = new Routine("sproc", RoutineArgs.builder() - * .datasetId(test.datasetId()) - * .routineId("tf_test_routine_id") - * .routineType("TABLE_VALUED_FUNCTION") - * .language("SQL") - * .definitionBody(""" - * SELECT 1 + value AS value - * """) - * .arguments(RoutineArgumentArgs.builder() - * .name("value") - * .argumentKind("FIXED_TYPE") - * .dataType(serializeJson( - * jsonObject( - * jsonProperty("typeKind", "INT64") - * ))) - * .build()) - * .returnTableType(serializeJson( - * jsonObject( - * jsonProperty("columns", jsonArray(jsonObject( - * jsonProperty("name", "value"), - * jsonProperty("type", jsonObject( - * jsonProperty("typeKind", "INT64") - * )) - * ))) - * ))) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Table.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Table.java index 3e8bac0f50..1dbc93fdc3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Table.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/Table.java @@ -25,14 +25,6 @@ import javax.annotation.Nullable; /** - * Creates a table resource in a dataset for Google BigQuery. For more information see - * [the official documentation](https://cloud.google.com/bigquery/docs/) and - * [API](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables). - * - * > **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false` - * (and run `pulumi update` to write the field to state) in order to destroy an instance. - * It is recommended to not set this field (or set it to true) until you're ready to destroy. - * * ## Example Usage * ```java * package generated_program; @@ -179,16 +171,16 @@ public Output datasetId() { return this.datasetId; } /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `=destroy` or `=update` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * */ @Export(name="deletionProtection", type=Boolean.class, parameters={}) private Output deletionProtection; /** - * @return Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `=destroy` or `=update` that would delete the instance will fail. + * @return Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * */ public Output> deletionProtection() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/TableArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/TableArgs.java index 85ffdd11e7..a7c775b7c8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/TableArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/TableArgs.java @@ -62,16 +62,16 @@ public Output datasetId() { } /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `=destroy` or `=update` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * */ @Import(name="deletionProtection") private @Nullable Output deletionProtection; /** - * @return Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `=destroy` or `=update` that would delete the instance will fail. + * @return Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * */ public Optional> deletionProtection() { @@ -401,8 +401,8 @@ public Builder datasetId(String datasetId) { } /** - * @param deletionProtection Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `=destroy` or `=update` that would delete the instance will fail. + * @param deletionProtection Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * * @return builder * @@ -413,8 +413,8 @@ public Builder deletionProtection(@Nullable Output deletionProtection) } /** - * @param deletionProtection Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `=destroy` or `=update` that would delete the instance will fail. + * @param deletionProtection Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionAzureArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionAzureArgs.java index 0a5d775d27..24523046ae 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionAzureArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionAzureArgs.java @@ -60,6 +60,36 @@ public Output customerTenantId() { return this.customerTenantId; } + /** + * The Azure Application (client) ID where the federated credentials will be hosted. + * + */ + @Import(name="federatedApplicationClientId") + private @Nullable Output federatedApplicationClientId; + + /** + * @return The Azure Application (client) ID where the federated credentials will be hosted. + * + */ + public Optional> federatedApplicationClientId() { + return Optional.ofNullable(this.federatedApplicationClientId); + } + + /** + * A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + * + */ + @Import(name="identity") + private @Nullable Output identity; + + /** + * @return A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + * + */ + public Optional> identity() { + return Optional.ofNullable(this.identity); + } + /** * The object id of the Azure Active Directory Application. * @@ -96,6 +126,8 @@ private ConnectionAzureArgs(ConnectionAzureArgs $) { this.application = $.application; this.clientId = $.clientId; this.customerTenantId = $.customerTenantId; + this.federatedApplicationClientId = $.federatedApplicationClientId; + this.identity = $.identity; this.objectId = $.objectId; this.redirectUri = $.redirectUri; } @@ -181,6 +213,48 @@ public Builder customerTenantId(String customerTenantId) { return customerTenantId(Output.of(customerTenantId)); } + /** + * @param federatedApplicationClientId The Azure Application (client) ID where the federated credentials will be hosted. + * + * @return builder + * + */ + public Builder federatedApplicationClientId(@Nullable Output federatedApplicationClientId) { + $.federatedApplicationClientId = federatedApplicationClientId; + return this; + } + + /** + * @param federatedApplicationClientId The Azure Application (client) ID where the federated credentials will be hosted. + * + * @return builder + * + */ + public Builder federatedApplicationClientId(String federatedApplicationClientId) { + return federatedApplicationClientId(Output.of(federatedApplicationClientId)); + } + + /** + * @param identity A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + * + * @return builder + * + */ + public Builder identity(@Nullable Output identity) { + $.identity = identity; + return this; + } + + /** + * @param identity A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + * + * @return builder + * + */ + public Builder identity(String identity) { + return identity(Output.of(identity)); + } + /** * @param objectId The object id of the Azure Active Directory Application. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionCloudSpannerArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionCloudSpannerArgs.java index ba26c1c92e..3237cd9caa 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionCloudSpannerArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionCloudSpannerArgs.java @@ -46,11 +46,27 @@ public Optional> useParallelism() { return Optional.ofNullable(this.useParallelism); } + /** + * If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + * + */ + @Import(name="useServerlessAnalytics") + private @Nullable Output useServerlessAnalytics; + + /** + * @return If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + * + */ + public Optional> useServerlessAnalytics() { + return Optional.ofNullable(this.useServerlessAnalytics); + } + private ConnectionCloudSpannerArgs() {} private ConnectionCloudSpannerArgs(ConnectionCloudSpannerArgs $) { this.database = $.database; this.useParallelism = $.useParallelism; + this.useServerlessAnalytics = $.useServerlessAnalytics; } public static Builder builder() { @@ -113,6 +129,27 @@ public Builder useParallelism(Boolean useParallelism) { return useParallelism(Output.of(useParallelism)); } + /** + * @param useServerlessAnalytics If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + * + * @return builder + * + */ + public Builder useServerlessAnalytics(@Nullable Output useServerlessAnalytics) { + $.useServerlessAnalytics = useServerlessAnalytics; + return this; + } + + /** + * @param useServerlessAnalytics If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + * + * @return builder + * + */ + public Builder useServerlessAnalytics(Boolean useServerlessAnalytics) { + return useServerlessAnalytics(Output.of(useServerlessAnalytics)); + } + public ConnectionCloudSpannerArgs build() { $.database = Objects.requireNonNull($.database, "expected parameter 'database' to be non-null"); return $; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionCloudSqlArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionCloudSqlArgs.java index da1096edc3..95caa325c2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionCloudSqlArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionCloudSqlArgs.java @@ -8,6 +8,8 @@ import com.pulumi.gcp.bigquery.inputs.ConnectionCloudSqlCredentialArgs; import java.lang.String; import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; public final class ConnectionCloudSqlArgs extends com.pulumi.resources.ResourceArgs { @@ -61,6 +63,21 @@ public Output instanceId() { return this.instanceId; } + /** + * When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + * + */ + @Import(name="serviceAccountId") + private @Nullable Output serviceAccountId; + + /** + * @return When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + * + */ + public Optional> serviceAccountId() { + return Optional.ofNullable(this.serviceAccountId); + } + /** * Type of the Cloud SQL database. * Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. @@ -84,6 +101,7 @@ private ConnectionCloudSqlArgs(ConnectionCloudSqlArgs $) { this.credential = $.credential; this.database = $.database; this.instanceId = $.instanceId; + this.serviceAccountId = $.serviceAccountId; this.type = $.type; } @@ -170,6 +188,27 @@ public Builder instanceId(String instanceId) { return instanceId(Output.of(instanceId)); } + /** + * @param serviceAccountId When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + * + * @return builder + * + */ + public Builder serviceAccountId(@Nullable Output serviceAccountId) { + $.serviceAccountId = serviceAccountId; + return this; + } + + /** + * @param serviceAccountId When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + * + * @return builder + * + */ + public Builder serviceAccountId(String serviceAccountId) { + return serviceAccountId(Output.of(serviceAccountId)); + } + /** * @param type Type of the Cloud SQL database. * Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionState.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionState.java index 27fa85c02b..59ba5d6d51 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/ConnectionState.java @@ -90,7 +90,7 @@ public Optional> cloudSpanner() { } /** - * A nested object resource + * Connection properties specific to the Cloud SQL. * Structure is documented below. * */ @@ -98,7 +98,7 @@ public Optional> cloudSpanner() { private @Nullable Output cloudSql; /** - * @return A nested object resource + * @return Connection properties specific to the Cloud SQL. * Structure is documented below. * */ @@ -355,7 +355,7 @@ public Builder cloudSpanner(ConnectionCloudSpannerArgs cloudSpanner) { } /** - * @param cloudSql A nested object resource + * @param cloudSql Connection properties specific to the Cloud SQL. * Structure is documented below. * * @return builder @@ -367,7 +367,7 @@ public Builder cloudSql(@Nullable Output cloudSql) { } /** - * @param cloudSql A nested object resource + * @param cloudSql Connection properties specific to the Cloud SQL. * Structure is documented below. * * @return builder diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/JobLoadArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/JobLoadArgs.java index 3b03f3e52e..af70d76b73 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/JobLoadArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/JobLoadArgs.java @@ -235,8 +235,8 @@ public Optional> maxBadRecords() { } /** - * Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - * property to a custom value, BigQuery throws an error if an + * Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value + * when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an * empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as * an empty value. * @@ -245,8 +245,8 @@ public Optional> maxBadRecords() { private @Nullable Output nullMarker; /** - * @return Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - * property to a custom value, BigQuery throws an error if an + * @return Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value + * when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an * empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as * an empty value. * @@ -764,8 +764,8 @@ public Builder maxBadRecords(Integer maxBadRecords) { } /** - * @param nullMarker Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - * property to a custom value, BigQuery throws an error if an + * @param nullMarker Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value + * when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an * empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as * an empty value. * @@ -778,8 +778,8 @@ public Builder nullMarker(@Nullable Output nullMarker) { } /** - * @param nullMarker Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - * property to a custom value, BigQuery throws an error if an + * @param nullMarker Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value + * when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an * empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as * an empty value. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/TableExternalDataConfigurationCsvOptionsArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/TableExternalDataConfigurationCsvOptionsArgs.java index 51d074df13..1e62e5c4c7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/TableExternalDataConfigurationCsvOptionsArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/TableExternalDataConfigurationCsvOptionsArgs.java @@ -85,29 +85,9 @@ public Optional> fieldDelimiter() { return Optional.ofNullable(this.fieldDelimiter); } - /** - * The value that is used to quote data sections in a - * CSV file. If your data does not contain quoted sections, set the - * property value to an empty string. If your data contains quoted newline - * characters, you must also set the `allow_quoted_newlines` property to true. - * The API-side default is `"`, specified in the provider escaped as `\"`. Due to - * limitations with default values, this value is required to be - * explicitly set. - * - */ @Import(name="quote", required=true) private Output quote; - /** - * @return The value that is used to quote data sections in a - * CSV file. If your data does not contain quoted sections, set the - * property value to an empty string. If your data contains quoted newline - * characters, you must also set the `allow_quoted_newlines` property to true. - * The API-side default is `"`, specified in the provider escaped as `\"`. Due to - * limitations with default values, this value is required to be - * explicitly set. - * - */ public Output quote() { return this.quote; } @@ -250,35 +230,11 @@ public Builder fieldDelimiter(String fieldDelimiter) { return fieldDelimiter(Output.of(fieldDelimiter)); } - /** - * @param quote The value that is used to quote data sections in a - * CSV file. If your data does not contain quoted sections, set the - * property value to an empty string. If your data contains quoted newline - * characters, you must also set the `allow_quoted_newlines` property to true. - * The API-side default is `"`, specified in the provider escaped as `\"`. Due to - * limitations with default values, this value is required to be - * explicitly set. - * - * @return builder - * - */ public Builder quote(Output quote) { $.quote = quote; return this; } - /** - * @param quote The value that is used to quote data sections in a - * CSV file. If your data does not contain quoted sections, set the - * property value to an empty string. If your data contains quoted newline - * characters, you must also set the `allow_quoted_newlines` property to true. - * The API-side default is `"`, specified in the provider escaped as `\"`. Due to - * limitations with default values, this value is required to be - * explicitly set. - * - * @return builder - * - */ public Builder quote(String quote) { return quote(Output.of(quote)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/TableState.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/TableState.java index d1c14bc628..b61a24b46b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/TableState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/inputs/TableState.java @@ -77,16 +77,16 @@ public Optional> datasetId() { } /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `=destroy` or `=update` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * */ @Import(name="deletionProtection") private @Nullable Output deletionProtection; /** - * @return Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `=destroy` or `=update` that would delete the instance will fail. + * @return Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * */ public Optional> deletionProtection() { @@ -568,8 +568,8 @@ public Builder datasetId(String datasetId) { } /** - * @param deletionProtection Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `=destroy` or `=update` that would delete the instance will fail. + * @param deletionProtection Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * * @return builder * @@ -580,8 +580,8 @@ public Builder deletionProtection(@Nullable Output deletionProtection) } /** - * @param deletionProtection Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `=destroy` or `=update` that would delete the instance will fail. + * @param deletionProtection Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/ConnectionAzure.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/ConnectionAzure.java index 2530ec249d..a54153a1e5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/ConnectionAzure.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/ConnectionAzure.java @@ -26,6 +26,16 @@ public final class ConnectionAzure { * */ private String customerTenantId; + /** + * @return The Azure Application (client) ID where the federated credentials will be hosted. + * + */ + private @Nullable String federatedApplicationClientId; + /** + * @return A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + * + */ + private @Nullable String identity; /** * @return The object id of the Azure Active Directory Application. * @@ -59,6 +69,20 @@ public Optional clientId() { public String customerTenantId() { return this.customerTenantId; } + /** + * @return The Azure Application (client) ID where the federated credentials will be hosted. + * + */ + public Optional federatedApplicationClientId() { + return Optional.ofNullable(this.federatedApplicationClientId); + } + /** + * @return A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + * + */ + public Optional identity() { + return Optional.ofNullable(this.identity); + } /** * @return The object id of the Azure Active Directory Application. * @@ -86,6 +110,8 @@ public static final class Builder { private @Nullable String application; private @Nullable String clientId; private String customerTenantId; + private @Nullable String federatedApplicationClientId; + private @Nullable String identity; private @Nullable String objectId; private @Nullable String redirectUri; public Builder() {} @@ -94,6 +120,8 @@ public Builder(ConnectionAzure defaults) { this.application = defaults.application; this.clientId = defaults.clientId; this.customerTenantId = defaults.customerTenantId; + this.federatedApplicationClientId = defaults.federatedApplicationClientId; + this.identity = defaults.identity; this.objectId = defaults.objectId; this.redirectUri = defaults.redirectUri; } @@ -114,6 +142,16 @@ public Builder customerTenantId(String customerTenantId) { return this; } @CustomType.Setter + public Builder federatedApplicationClientId(@Nullable String federatedApplicationClientId) { + this.federatedApplicationClientId = federatedApplicationClientId; + return this; + } + @CustomType.Setter + public Builder identity(@Nullable String identity) { + this.identity = identity; + return this; + } + @CustomType.Setter public Builder objectId(@Nullable String objectId) { this.objectId = objectId; return this; @@ -128,6 +166,8 @@ public ConnectionAzure build() { o.application = application; o.clientId = clientId; o.customerTenantId = customerTenantId; + o.federatedApplicationClientId = federatedApplicationClientId; + o.identity = identity; o.objectId = objectId; o.redirectUri = redirectUri; return o; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/ConnectionCloudSpanner.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/ConnectionCloudSpanner.java index 61b78da532..ec3065c5a6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/ConnectionCloudSpanner.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/ConnectionCloudSpanner.java @@ -22,6 +22,11 @@ public final class ConnectionCloudSpanner { * */ private @Nullable Boolean useParallelism; + /** + * @return If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + * + */ + private @Nullable Boolean useServerlessAnalytics; private ConnectionCloudSpanner() {} /** @@ -38,6 +43,13 @@ public String database() { public Optional useParallelism() { return Optional.ofNullable(this.useParallelism); } + /** + * @return If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + * + */ + public Optional useServerlessAnalytics() { + return Optional.ofNullable(this.useServerlessAnalytics); + } public static Builder builder() { return new Builder(); @@ -50,11 +62,13 @@ public static Builder builder(ConnectionCloudSpanner defaults) { public static final class Builder { private String database; private @Nullable Boolean useParallelism; + private @Nullable Boolean useServerlessAnalytics; public Builder() {} public Builder(ConnectionCloudSpanner defaults) { Objects.requireNonNull(defaults); this.database = defaults.database; this.useParallelism = defaults.useParallelism; + this.useServerlessAnalytics = defaults.useServerlessAnalytics; } @CustomType.Setter @@ -67,10 +81,16 @@ public Builder useParallelism(@Nullable Boolean useParallelism) { this.useParallelism = useParallelism; return this; } + @CustomType.Setter + public Builder useServerlessAnalytics(@Nullable Boolean useServerlessAnalytics) { + this.useServerlessAnalytics = useServerlessAnalytics; + return this; + } public ConnectionCloudSpanner build() { final var o = new ConnectionCloudSpanner(); o.database = database; o.useParallelism = useParallelism; + o.useServerlessAnalytics = useServerlessAnalytics; return o; } } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/ConnectionCloudSql.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/ConnectionCloudSql.java index ff1d068890..d78bfa154a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/ConnectionCloudSql.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/ConnectionCloudSql.java @@ -7,6 +7,8 @@ import com.pulumi.gcp.bigquery.outputs.ConnectionCloudSqlCredential; import java.lang.String; import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; @CustomType public final class ConnectionCloudSql { @@ -26,6 +28,11 @@ public final class ConnectionCloudSql { * */ private String instanceId; + /** + * @return When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + * + */ + private @Nullable String serviceAccountId; /** * @return Type of the Cloud SQL database. * Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. @@ -56,6 +63,13 @@ public String database() { public String instanceId() { return this.instanceId; } + /** + * @return When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + * + */ + public Optional serviceAccountId() { + return Optional.ofNullable(this.serviceAccountId); + } /** * @return Type of the Cloud SQL database. * Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. @@ -77,6 +91,7 @@ public static final class Builder { private ConnectionCloudSqlCredential credential; private String database; private String instanceId; + private @Nullable String serviceAccountId; private String type; public Builder() {} public Builder(ConnectionCloudSql defaults) { @@ -84,6 +99,7 @@ public Builder(ConnectionCloudSql defaults) { this.credential = defaults.credential; this.database = defaults.database; this.instanceId = defaults.instanceId; + this.serviceAccountId = defaults.serviceAccountId; this.type = defaults.type; } @@ -103,6 +119,11 @@ public Builder instanceId(String instanceId) { return this; } @CustomType.Setter + public Builder serviceAccountId(@Nullable String serviceAccountId) { + this.serviceAccountId = serviceAccountId; + return this; + } + @CustomType.Setter public Builder type(String type) { this.type = Objects.requireNonNull(type); return this; @@ -112,6 +133,7 @@ public ConnectionCloudSql build() { o.credential = credential; o.database = database; o.instanceId = instanceId; + o.serviceAccountId = serviceAccountId; o.type = type; return o; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/JobLoad.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/JobLoad.java index 3341a087e2..e78676a42d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/JobLoad.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/JobLoad.java @@ -97,8 +97,8 @@ public final class JobLoad { */ private @Nullable Integer maxBadRecords; /** - * @return Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - * property to a custom value, BigQuery throws an error if an + * @return Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value + * when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an * empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as * an empty value. * @@ -281,8 +281,8 @@ public Optional maxBadRecords() { return Optional.ofNullable(this.maxBadRecords); } /** - * @return Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - * property to a custom value, BigQuery throws an error if an + * @return Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value + * when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an * empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as * an empty value. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/TableExternalDataConfigurationCsvOptions.java b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/TableExternalDataConfigurationCsvOptions.java index f7fc670060..02e3b4027c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/TableExternalDataConfigurationCsvOptions.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigquery/outputs/TableExternalDataConfigurationCsvOptions.java @@ -37,16 +37,6 @@ public final class TableExternalDataConfigurationCsvOptions { * */ private @Nullable String fieldDelimiter; - /** - * @return The value that is used to quote data sections in a - * CSV file. If your data does not contain quoted sections, set the - * property value to an empty string. If your data contains quoted newline - * characters, you must also set the `allow_quoted_newlines` property to true. - * The API-side default is `"`, specified in the provider escaped as `\"`. Due to - * limitations with default values, this value is required to be - * explicitly set. - * - */ private String quote; /** * @return The number of rows at the top of a CSV @@ -88,16 +78,6 @@ public Optional encoding() { public Optional fieldDelimiter() { return Optional.ofNullable(this.fieldDelimiter); } - /** - * @return The value that is used to quote data sections in a - * CSV file. If your data does not contain quoted sections, set the - * property value to an empty string. If your data contains quoted newline - * characters, you must also set the `allow_quoted_newlines` property to true. - * The API-side default is `"`, specified in the provider escaped as `\"`. Due to - * limitations with default values, this value is required to be - * explicitly set. - * - */ public String quote() { return this.quote; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/Instance.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/Instance.java index acc658309a..be5e364c49 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/Instance.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/Instance.java @@ -19,22 +19,6 @@ import javax.annotation.Nullable; /** - * ## +--- - * - * subcategory: "Cloud Bigtable" - * page_title: "Google: gcp.bigtable.Instance" - * description: |- - * Creates a Google Bigtable instance. - * --- - * - * # gcp.bigtable.Instance - * - * Creates a Google Bigtable instance. For more information see: - * - * * [API documentation](https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/bigtable/docs) - * * ## Example Usage * ### Simple Instance * ```java @@ -158,16 +142,16 @@ public Output> clusters() { return this.clusters; } /** - * Whether or not to allow this provider to destroy the instance. Unless this field is set to false - * in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * */ @Export(name="deletionProtection", type=Boolean.class, parameters={}) private Output deletionProtection; /** - * @return Whether or not to allow this provider to destroy the instance. Unless this field is set to false - * in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + * @return Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * */ public Output> deletionProtection() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceArgs.java index 3e1873b6e3..bc84951762 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceArgs.java @@ -39,16 +39,16 @@ public Optional>> clusters() { } /** - * Whether or not to allow this provider to destroy the instance. Unless this field is set to false - * in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * */ @Import(name="deletionProtection") private @Nullable Output deletionProtection; /** - * @return Whether or not to allow this provider to destroy the instance. Unless this field is set to false - * in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + * @return Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * */ public Optional> deletionProtection() { @@ -216,8 +216,8 @@ public Builder clusters(InstanceClusterArgs... clusters) { } /** - * @param deletionProtection Whether or not to allow this provider to destroy the instance. Unless this field is set to false - * in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + * @param deletionProtection Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * * @return builder * @@ -228,8 +228,8 @@ public Builder deletionProtection(@Nullable Output deletionProtection) } /** - * @param deletionProtection Whether or not to allow this provider to destroy the instance. Unless this field is set to false - * in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + * @param deletionProtection Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamBinding.java index 3a8cebdae2..b0b70c8bbc 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamBinding.java @@ -195,19 +195,9 @@ public Output instance() { public Output> members() { return this.members; } - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ @Export(name="project", type=String.class, parameters={}) private Output project; - /** - * @return The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ public Output project() { return this.project; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamBindingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamBindingArgs.java index ce4cd246d8..c136879890 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamBindingArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamBindingArgs.java @@ -46,19 +46,9 @@ public Output> members() { return this.members; } - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } @@ -153,25 +143,11 @@ public Builder members(String... members) { return members(List.of(members)); } - /** - * @param project The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamMember.java index b9505fd7b6..56dda6d8a6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamMember.java @@ -194,19 +194,9 @@ public Output instance() { public Output member() { return this.member; } - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ @Export(name="project", type=String.class, parameters={}) private Output project; - /** - * @return The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ public Output project() { return this.project; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamMemberArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamMemberArgs.java index baa8f8839e..016e4b4030 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamMemberArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamMemberArgs.java @@ -45,19 +45,9 @@ public Output member() { return this.member; } - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } @@ -148,25 +138,11 @@ public Builder member(String member) { return member(Output.of(member)); } - /** - * @param project The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamPolicy.java index bc6b92157b..64155b5088 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamPolicy.java @@ -194,19 +194,9 @@ public Output instance() { public Output policyData() { return this.policyData; } - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ @Export(name="project", type=String.class, parameters={}) private Output project; - /** - * @return The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ public Output project() { return this.project; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamPolicyArgs.java index 575bb0ad00..6a04030268 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamPolicyArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/InstanceIamPolicyArgs.java @@ -45,19 +45,9 @@ public Output policyData() { return this.policyData; } - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } @@ -130,25 +120,11 @@ public Builder policyData(String policyData) { return policyData(Output.of(policyData)); } - /** - * @param project The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/Table.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/Table.java index 61a769a455..ff725de236 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/Table.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/Table.java @@ -17,10 +17,6 @@ import javax.annotation.Nullable; /** - * Creates a Google Cloud Bigtable table inside an instance. For more information see - * [the official documentation](https://cloud.google.com/bigtable/) and - * [API](https://cloud.google.com/bigtable/docs/go/reference). - * * ## Example Usage * ```java * package generated_program; @@ -169,18 +165,16 @@ public Output project() { return this.project; } /** - * A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. * */ @Export(name="splitKeys", type=List.class, parameters={String.class}) private Output> splitKeys; /** - * @return A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * @return A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. * */ public Output>> splitKeys() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableArgs.java index 881f2e9cca..ba52c56d9c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableArgs.java @@ -95,18 +95,16 @@ public Optional> project() { } /** - * A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. * */ @Import(name="splitKeys") private @Nullable Output> splitKeys; /** - * @return A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * @return A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. * */ public Optional>> splitKeys() { @@ -260,9 +258,8 @@ public Builder project(String project) { } /** - * @param splitKeys A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * @param splitKeys A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. * * @return builder * @@ -273,9 +270,8 @@ public Builder splitKeys(@Nullable Output> splitKeys) { } /** - * @param splitKeys A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * @param splitKeys A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. * * @return builder * @@ -285,9 +281,8 @@ public Builder splitKeys(List splitKeys) { } /** - * @param splitKeys A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * @param splitKeys A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamBinding.java index 81b53545df..aab7a14bb4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamBinding.java @@ -198,19 +198,9 @@ public Output instance() { public Output> members() { return this.members; } - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ @Export(name="project", type=String.class, parameters={}) private Output project; - /** - * @return The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ public Output project() { return this.project; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamBindingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamBindingArgs.java index c55b3df3f3..cd3476068f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamBindingArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamBindingArgs.java @@ -46,19 +46,9 @@ public Output> members() { return this.members; } - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } @@ -169,25 +159,11 @@ public Builder members(String... members) { return members(List.of(members)); } - /** - * @param project The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamMember.java index 290ce51d67..be01a894f4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamMember.java @@ -197,19 +197,9 @@ public Output instance() { public Output member() { return this.member; } - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ @Export(name="project", type=String.class, parameters={}) private Output project; - /** - * @return The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ public Output project() { return this.project; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamMemberArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamMemberArgs.java index 494be0f772..46ba88323f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamMemberArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamMemberArgs.java @@ -45,19 +45,9 @@ public Output member() { return this.member; } - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } @@ -164,25 +154,11 @@ public Builder member(String member) { return member(Output.of(member)); } - /** - * @param project The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamPolicy.java index 5492d75887..501bb487d1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamPolicy.java @@ -197,19 +197,9 @@ public Output instance() { public Output policyData() { return this.policyData; } - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ @Export(name="project", type=String.class, parameters={}) private Output project; - /** - * @return The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ public Output project() { return this.project; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamPolicyArgs.java index e746b7d6cc..f3decff01b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamPolicyArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/TableIamPolicyArgs.java @@ -45,19 +45,9 @@ public Output policyData() { return this.policyData; } - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } @@ -146,25 +136,11 @@ public Builder policyData(String policyData) { return policyData(Output.of(policyData)); } - /** - * @param project The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceIamBindingState.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceIamBindingState.java index 01909fb0cc..b667444570 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceIamBindingState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceIamBindingState.java @@ -61,19 +61,9 @@ public Optional>> members() { return Optional.ofNullable(this.members); } - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } @@ -190,25 +180,11 @@ public Builder members(String... members) { return members(List.of(members)); } - /** - * @param project The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceIamMemberState.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceIamMemberState.java index eb168e7f57..a21e70cbef 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceIamMemberState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceIamMemberState.java @@ -60,19 +60,9 @@ public Optional> member() { return Optional.ofNullable(this.member); } - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } @@ -185,25 +175,11 @@ public Builder member(String member) { return member(Output.of(member)); } - /** - * @param project The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceIamPolicyState.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceIamPolicyState.java index 7395dcbedb..058ee25118 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceIamPolicyState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceIamPolicyState.java @@ -60,19 +60,9 @@ public Optional> policyData() { return Optional.ofNullable(this.policyData); } - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } @@ -167,25 +157,11 @@ public Builder policyData(String policyData) { return policyData(Output.of(policyData)); } - /** - * @param project The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the instance belongs. If it - * is not provided, a default will be supplied. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceState.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceState.java index f3a631be63..6c2e53b2a5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/InstanceState.java @@ -39,16 +39,16 @@ public Optional>> clusters() { } /** - * Whether or not to allow this provider to destroy the instance. Unless this field is set to false - * in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * */ @Import(name="deletionProtection") private @Nullable Output deletionProtection; /** - * @return Whether or not to allow this provider to destroy the instance. Unless this field is set to false - * in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + * @return Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * */ public Optional> deletionProtection() { @@ -216,8 +216,8 @@ public Builder clusters(InstanceClusterArgs... clusters) { } /** - * @param deletionProtection Whether or not to allow this provider to destroy the instance. Unless this field is set to false - * in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + * @param deletionProtection Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * * @return builder * @@ -228,8 +228,8 @@ public Builder deletionProtection(@Nullable Output deletionProtection) } /** - * @param deletionProtection Whether or not to allow this provider to destroy the instance. Unless this field is set to false - * in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + * @param deletionProtection Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableIamBindingState.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableIamBindingState.java index bd5f5ba789..9e1c3afb9b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableIamBindingState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableIamBindingState.java @@ -61,19 +61,9 @@ public Optional>> members() { return Optional.ofNullable(this.members); } - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } @@ -206,25 +196,11 @@ public Builder members(String... members) { return members(List.of(members)); } - /** - * @param project The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableIamMemberState.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableIamMemberState.java index 0dd4c66413..ff41313318 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableIamMemberState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableIamMemberState.java @@ -60,19 +60,9 @@ public Optional> member() { return Optional.ofNullable(this.member); } - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } @@ -201,25 +191,11 @@ public Builder member(String member) { return member(Output.of(member)); } - /** - * @param project The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableIamPolicyState.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableIamPolicyState.java index d8dac896ea..27405e3977 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableIamPolicyState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableIamPolicyState.java @@ -60,19 +60,9 @@ public Optional> policyData() { return Optional.ofNullable(this.policyData); } - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } @@ -183,25 +173,11 @@ public Builder policyData(String policyData) { return policyData(Output.of(policyData)); } - /** - * @param project The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableState.java b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableState.java index 14b934e296..cf242d42a5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/bigtable/inputs/TableState.java @@ -95,18 +95,16 @@ public Optional> project() { } /** - * A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. * */ @Import(name="splitKeys") private @Nullable Output> splitKeys; /** - * @return A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * @return A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. * */ public Optional>> splitKeys() { @@ -260,9 +258,8 @@ public Builder project(String project) { } /** - * @param splitKeys A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * @param splitKeys A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. * * @return builder * @@ -273,9 +270,8 @@ public Builder splitKeys(@Nullable Output> splitKeys) { } /** - * @param splitKeys A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * @param splitKeys A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. * * @return builder * @@ -285,9 +281,8 @@ public Builder splitKeys(List splitKeys) { } /** - * @param splitKeys A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * @param splitKeys A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/billing/SubAccount.java b/sdk/java/src/main/java/com/pulumi/gcp/billing/SubAccount.java index dc127c8ec9..79d3092651 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/billing/SubAccount.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/billing/SubAccount.java @@ -16,39 +16,6 @@ import javax.annotation.Nullable; /** - * Allows creation and management of a Google Cloud Billing Subaccount. - * - * !> **WARNING:** Deleting this resource will not delete or close the billing subaccount. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.billing.SubAccount; - * import com.pulumi.gcp.billing.SubAccountArgs; - * 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 subaccount = new SubAccount("subaccount", SubAccountArgs.builder() - * .displayName("My Billing Account") - * .masterBillingAccount("012345-567890-ABCDEF") - * .build()); - * - * } - * } - * ``` - * * ## Import * * Billing Subaccounts can be imported using any of these accepted formats @@ -74,21 +41,9 @@ public class SubAccount extends com.pulumi.resources.CustomResource { public Output billingAccountId() { return this.billingAccountId; } - /** - * If set to "RENAME_ON_DESTROY" the billing account display_name - * will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - * Default is "". - * - */ @Export(name="deletionPolicy", type=String.class, parameters={}) private Output deletionPolicy; - /** - * @return If set to "RENAME_ON_DESTROY" the billing account display_name - * will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - * Default is "". - * - */ public Output> deletionPolicy() { return Codegen.optional(this.deletionPolicy); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/billing/SubAccountArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/billing/SubAccountArgs.java index 2ab5e65efc..7333739f4c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/billing/SubAccountArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/billing/SubAccountArgs.java @@ -15,21 +15,9 @@ public final class SubAccountArgs extends com.pulumi.resources.ResourceArgs { public static final SubAccountArgs Empty = new SubAccountArgs(); - /** - * If set to "RENAME_ON_DESTROY" the billing account display_name - * will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - * Default is "". - * - */ @Import(name="deletionPolicy") private @Nullable Output deletionPolicy; - /** - * @return If set to "RENAME_ON_DESTROY" the billing account display_name - * will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - * Default is "". - * - */ public Optional> deletionPolicy() { return Optional.ofNullable(this.deletionPolicy); } @@ -92,27 +80,11 @@ public Builder(SubAccountArgs defaults) { $ = new SubAccountArgs(Objects.requireNonNull(defaults)); } - /** - * @param deletionPolicy If set to "RENAME_ON_DESTROY" the billing account display_name - * will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - * Default is "". - * - * @return builder - * - */ public Builder deletionPolicy(@Nullable Output deletionPolicy) { $.deletionPolicy = deletionPolicy; return this; } - /** - * @param deletionPolicy If set to "RENAME_ON_DESTROY" the billing account display_name - * will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - * Default is "". - * - * @return builder - * - */ public Builder deletionPolicy(String deletionPolicy) { return deletionPolicy(Output.of(deletionPolicy)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/billing/inputs/SubAccountState.java b/sdk/java/src/main/java/com/pulumi/gcp/billing/inputs/SubAccountState.java index 8a42580fed..344854858f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/billing/inputs/SubAccountState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/billing/inputs/SubAccountState.java @@ -31,21 +31,9 @@ public Optional> billingAccountId() { return Optional.ofNullable(this.billingAccountId); } - /** - * If set to "RENAME_ON_DESTROY" the billing account display_name - * will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - * Default is "". - * - */ @Import(name="deletionPolicy") private @Nullable Output deletionPolicy; - /** - * @return If set to "RENAME_ON_DESTROY" the billing account display_name - * will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - * Default is "". - * - */ public Optional> deletionPolicy() { return Optional.ofNullable(this.deletionPolicy); } @@ -162,27 +150,11 @@ public Builder billingAccountId(String billingAccountId) { return billingAccountId(Output.of(billingAccountId)); } - /** - * @param deletionPolicy If set to "RENAME_ON_DESTROY" the billing account display_name - * will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - * Default is "". - * - * @return builder - * - */ public Builder deletionPolicy(@Nullable Output deletionPolicy) { $.deletionPolicy = deletionPolicy; return this; } - /** - * @param deletionPolicy If set to "RENAME_ON_DESTROY" the billing account display_name - * will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - * Default is "". - * - * @return builder - * - */ public Builder deletionPolicy(String deletionPolicy) { return deletionPolicy(Output.of(deletionPolicy)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/certificatemanager/Certificate.java b/sdk/java/src/main/java/com/pulumi/gcp/certificatemanager/Certificate.java index f91f7289a2..f037e61ac9 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/certificatemanager/Certificate.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/certificatemanager/Certificate.java @@ -19,18 +19,16 @@ /** * ## Example Usage - * ### Certificate Manager Certificate Basic + * ### Certificate Manager Self Managed Certificate * ```java * package generated_program; * * import com.pulumi.Context; * import com.pulumi.Pulumi; * import com.pulumi.core.Output; - * import com.pulumi.gcp.certificatemanager.DnsAuthorization; - * import com.pulumi.gcp.certificatemanager.DnsAuthorizationArgs; * import com.pulumi.gcp.certificatemanager.Certificate; * import com.pulumi.gcp.certificatemanager.CertificateArgs; - * import com.pulumi.gcp.certificatemanager.inputs.CertificateManagedArgs; + * import com.pulumi.gcp.certificatemanager.inputs.CertificateSelfManagedArgs; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -44,26 +42,12 @@ * } * * public static void stack(Context ctx) { - * var instance = new DnsAuthorization("instance", DnsAuthorizationArgs.builder() - * .description("The default dnss") - * .domain("subdomain.hashicorptest.com") - * .build()); - * - * var instance2 = new DnsAuthorization("instance2", DnsAuthorizationArgs.builder() - * .description("The default dnss") - * .domain("subdomain2.hashicorptest.com") - * .build()); - * * var default_ = new Certificate("default", CertificateArgs.builder() * .description("The default cert") * .scope("EDGE_CACHE") - * .managed(CertificateManagedArgs.builder() - * .domains( - * instance.domain(), - * instance2.domain()) - * .dnsAuthorizations( - * instance.id(), - * instance2.id()) + * .selfManaged(CertificateSelfManagedArgs.builder() + * .pemCertificate(Files.readString(Paths.get("test-fixtures/certificatemanager/cert.pem"))) + * .pemPrivateKey(Files.readString(Paths.get("test-fixtures/certificatemanager/private-key.pem"))) * .build()) * .build()); * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/certificatemanager/inputs/CertificateSelfManagedArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/certificatemanager/inputs/CertificateSelfManagedArgs.java index a7d78db08c..33a216af5f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/certificatemanager/inputs/CertificateSelfManagedArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/certificatemanager/inputs/CertificateSelfManagedArgs.java @@ -47,7 +47,6 @@ public Optional> certificatePem() { /** * The certificate chain in PEM-encoded form. * Leaf certificate comes first, followed by intermediate ones if any. - * **Note**: This property is sensitive and will not be displayed in the plan. * */ @Import(name="pemCertificate") @@ -56,7 +55,6 @@ public Optional> certificatePem() { /** * @return The certificate chain in PEM-encoded form. * Leaf certificate comes first, followed by intermediate ones if any. - * **Note**: This property is sensitive and will not be displayed in the plan. * */ public Optional> pemCertificate() { @@ -172,7 +170,6 @@ public Builder certificatePem(String certificatePem) { /** * @param pemCertificate The certificate chain in PEM-encoded form. * Leaf certificate comes first, followed by intermediate ones if any. - * **Note**: This property is sensitive and will not be displayed in the plan. * * @return builder * @@ -185,7 +182,6 @@ public Builder pemCertificate(@Nullable Output pemCertificate) { /** * @param pemCertificate The certificate chain in PEM-encoded form. * Leaf certificate comes first, followed by intermediate ones if any. - * **Note**: This property is sensitive and will not be displayed in the plan. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/certificatemanager/outputs/CertificateSelfManaged.java b/sdk/java/src/main/java/com/pulumi/gcp/certificatemanager/outputs/CertificateSelfManaged.java index 049e9b6d0f..b11843474f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/certificatemanager/outputs/CertificateSelfManaged.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/certificatemanager/outputs/CertificateSelfManaged.java @@ -26,7 +26,6 @@ public final class CertificateSelfManaged { /** * @return The certificate chain in PEM-encoded form. * Leaf certificate comes first, followed by intermediate ones if any. - * **Note**: This property is sensitive and will not be displayed in the plan. * */ private @Nullable String pemCertificate; @@ -66,7 +65,6 @@ public Optional certificatePem() { /** * @return The certificate chain in PEM-encoded form. * Leaf certificate comes first, followed by intermediate ones if any. - * **Note**: This property is sensitive and will not be displayed in the plan. * */ public Optional pemCertificate() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/Trigger.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/Trigger.java index ac2ce379e7..6bcfff2c66 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/Trigger.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/Trigger.java @@ -15,6 +15,7 @@ import com.pulumi.gcp.cloudbuild.outputs.TriggerGitFileSource; import com.pulumi.gcp.cloudbuild.outputs.TriggerGithub; import com.pulumi.gcp.cloudbuild.outputs.TriggerPubsubConfig; +import com.pulumi.gcp.cloudbuild.outputs.TriggerRepositoryEventConfig; import com.pulumi.gcp.cloudbuild.outputs.TriggerSourceToBuild; import com.pulumi.gcp.cloudbuild.outputs.TriggerTriggerTemplate; import com.pulumi.gcp.cloudbuild.outputs.TriggerWebhookConfig; @@ -469,6 +470,115 @@ * } * } * ``` + * ### Cloudbuild Trigger Manual Github Enterprise + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.gcp.cloudbuild.Trigger; + * import com.pulumi.gcp.cloudbuild.TriggerArgs; + * import com.pulumi.gcp.cloudbuild.inputs.TriggerGitFileSourceArgs; + * import com.pulumi.gcp.cloudbuild.inputs.TriggerSourceToBuildArgs; + * 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 manual_ghe_trigger = new Trigger("manual-ghe-trigger", TriggerArgs.builder() + * .gitFileSource(TriggerGitFileSourceArgs.builder() + * .githubEnterpriseConfig("projects/myProject/locations/global/githubEnterpriseConfigs/configID") + * .path("cloudbuild.yaml") + * .repoType("GITHUB") + * .revision("refs/heads/main") + * .uri("https://hashicorp/terraform-provider-google-beta") + * .build()) + * .sourceToBuild(TriggerSourceToBuildArgs.builder() + * .githubEnterpriseConfig("projects/myProject/locations/global/githubEnterpriseConfigs/configID") + * .ref("refs/heads/main") + * .repoType("GITHUB") + * .uri("https://hashicorp/terraform-provider-google-beta") + * .build()) + * .build()); + * + * } + * } + * ``` + * ### Cloudbuild Trigger Repo + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.gcp.cloudbuildv2.Connection; + * import com.pulumi.gcp.cloudbuildv2.ConnectionArgs; + * import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigArgs; + * import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigAuthorizerCredentialArgs; + * import com.pulumi.gcp.cloudbuildv2.Repository; + * import com.pulumi.gcp.cloudbuildv2.RepositoryArgs; + * import com.pulumi.gcp.cloudbuild.Trigger; + * import com.pulumi.gcp.cloudbuild.TriggerArgs; + * import com.pulumi.gcp.cloudbuild.inputs.TriggerRepositoryEventConfigArgs; + * import com.pulumi.gcp.cloudbuild.inputs.TriggerRepositoryEventConfigPushArgs; + * 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 my_connection = new Connection("my-connection", ConnectionArgs.builder() + * .location("us-central1") + * .githubConfig(ConnectionGithubConfigArgs.builder() + * .appInstallationId(123123) + * .authorizerCredential(ConnectionGithubConfigAuthorizerCredentialArgs.builder() + * .oauthTokenSecretVersion("projects/my-project/secrets/github-pat-secret/versions/latest") + * .build()) + * .build()) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * var my_repository = new Repository("my-repository", RepositoryArgs.builder() + * .parentConnection(my_connection.id()) + * .remoteUri("https://github.com/myuser/my-repo.git") + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * var repo_trigger = new Trigger("repo-trigger", TriggerArgs.builder() + * .location("us-central1") + * .repositoryEventConfig(TriggerRepositoryEventConfigArgs.builder() + * .repository(my_repository.id()) + * .push(TriggerRepositoryEventConfigPushArgs.builder() + * .branch("feature-.*") + * .build()) + * .build()) + * .filename("cloudbuild.yaml") + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * } + * } + * ``` * * ## Import * @@ -779,6 +889,20 @@ public Output project() { public Output> pubsubConfig() { return Codegen.optional(this.pubsubConfig); } + /** + * The configuration of a trigger that creates a build whenever an event from Repo API is received. + * + */ + @Export(name="repositoryEventConfig", type=TriggerRepositoryEventConfig.class, parameters={}) + private Output repositoryEventConfig; + + /** + * @return The configuration of a trigger that creates a build whenever an event from Repo API is received. + * + */ + public Output> repositoryEventConfig() { + return Codegen.optional(this.repositoryEventConfig); + } /** * The service account used for all user-controlled operations including * triggers.patch, triggers.run, builds.create, and builds.cancel. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/TriggerArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/TriggerArgs.java index 99e30690e3..7f1421a253 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/TriggerArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/TriggerArgs.java @@ -10,6 +10,7 @@ import com.pulumi.gcp.cloudbuild.inputs.TriggerGitFileSourceArgs; import com.pulumi.gcp.cloudbuild.inputs.TriggerGithubArgs; import com.pulumi.gcp.cloudbuild.inputs.TriggerPubsubConfigArgs; +import com.pulumi.gcp.cloudbuild.inputs.TriggerRepositoryEventConfigArgs; import com.pulumi.gcp.cloudbuild.inputs.TriggerSourceToBuildArgs; import com.pulumi.gcp.cloudbuild.inputs.TriggerTriggerTemplateArgs; import com.pulumi.gcp.cloudbuild.inputs.TriggerWebhookConfigArgs; @@ -313,6 +314,21 @@ public Optional> pubsubConfig() { return Optional.ofNullable(this.pubsubConfig); } + /** + * The configuration of a trigger that creates a build whenever an event from Repo API is received. + * + */ + @Import(name="repositoryEventConfig") + private @Nullable Output repositoryEventConfig; + + /** + * @return The configuration of a trigger that creates a build whenever an event from Repo API is received. + * + */ + public Optional> repositoryEventConfig() { + return Optional.ofNullable(this.repositoryEventConfig); + } + /** * The service account used for all user-controlled operations including * triggers.patch, triggers.run, builds.create, and builds.cancel. @@ -455,6 +471,7 @@ private TriggerArgs(TriggerArgs $) { this.name = $.name; this.project = $.project; this.pubsubConfig = $.pubsubConfig; + this.repositoryEventConfig = $.repositoryEventConfig; this.serviceAccount = $.serviceAccount; this.sourceToBuild = $.sourceToBuild; this.substitutions = $.substitutions; @@ -892,6 +909,27 @@ public Builder pubsubConfig(TriggerPubsubConfigArgs pubsubConfig) { return pubsubConfig(Output.of(pubsubConfig)); } + /** + * @param repositoryEventConfig The configuration of a trigger that creates a build whenever an event from Repo API is received. + * + * @return builder + * + */ + public Builder repositoryEventConfig(@Nullable Output repositoryEventConfig) { + $.repositoryEventConfig = repositoryEventConfig; + return this; + } + + /** + * @param repositoryEventConfig The configuration of a trigger that creates a build whenever an event from Repo API is received. + * + * @return builder + * + */ + public Builder repositoryEventConfig(TriggerRepositoryEventConfigArgs repositoryEventConfig) { + return repositoryEventConfig(Output.of(repositoryEventConfig)); + } + /** * @param serviceAccount The service account used for all user-controlled operations including * triggers.patch, triggers.run, builds.create, and builds.cancel. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerGitFileSourceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerGitFileSourceArgs.java index cff49e0fc5..12910b79ab 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerGitFileSourceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerGitFileSourceArgs.java @@ -15,6 +15,23 @@ public final class TriggerGitFileSourceArgs extends com.pulumi.resources.Resourc public static final TriggerGitFileSourceArgs Empty = new TriggerGitFileSourceArgs(); + /** + * The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + * + */ + @Import(name="githubEnterpriseConfig") + private @Nullable Output githubEnterpriseConfig; + + /** + * @return The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + * + */ + public Optional> githubEnterpriseConfig() { + return Optional.ofNullable(this.githubEnterpriseConfig); + } + /** * The path of the file, with the repo root as the root of the path. * @@ -88,6 +105,7 @@ public Optional> uri() { private TriggerGitFileSourceArgs() {} private TriggerGitFileSourceArgs(TriggerGitFileSourceArgs $) { + this.githubEnterpriseConfig = $.githubEnterpriseConfig; this.path = $.path; this.repoType = $.repoType; this.revision = $.revision; @@ -112,6 +130,29 @@ public Builder(TriggerGitFileSourceArgs defaults) { $ = new TriggerGitFileSourceArgs(Objects.requireNonNull(defaults)); } + /** + * @param githubEnterpriseConfig The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + * + * @return builder + * + */ + public Builder githubEnterpriseConfig(@Nullable Output githubEnterpriseConfig) { + $.githubEnterpriseConfig = githubEnterpriseConfig; + return this; + } + + /** + * @param githubEnterpriseConfig The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + * + * @return builder + * + */ + public Builder githubEnterpriseConfig(String githubEnterpriseConfig) { + return githubEnterpriseConfig(Output.of(githubEnterpriseConfig)); + } + /** * @param path The path of the file, with the repo root as the root of the path. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerRepositoryEventConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerRepositoryEventConfigArgs.java new file mode 100644 index 0000000000..4973530238 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerRepositoryEventConfigArgs.java @@ -0,0 +1,167 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.cloudbuild.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.cloudbuild.inputs.TriggerRepositoryEventConfigPullRequestArgs; +import com.pulumi.gcp.cloudbuild.inputs.TriggerRepositoryEventConfigPushArgs; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class TriggerRepositoryEventConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final TriggerRepositoryEventConfigArgs Empty = new TriggerRepositoryEventConfigArgs(); + + /** + * Contains filter properties for matching Pull Requests. + * Structure is documented below. + * + */ + @Import(name="pullRequest") + private @Nullable Output pullRequest; + + /** + * @return Contains filter properties for matching Pull Requests. + * Structure is documented below. + * + */ + public Optional> pullRequest() { + return Optional.ofNullable(this.pullRequest); + } + + /** + * Contains filter properties for matching git pushes. + * Structure is documented below. + * + */ + @Import(name="push") + private @Nullable Output push; + + /** + * @return Contains filter properties for matching git pushes. + * Structure is documented below. + * + */ + public Optional> push() { + return Optional.ofNullable(this.push); + } + + /** + * The resource name of the Repo API resource. + * + */ + @Import(name="repository") + private @Nullable Output repository; + + /** + * @return The resource name of the Repo API resource. + * + */ + public Optional> repository() { + return Optional.ofNullable(this.repository); + } + + private TriggerRepositoryEventConfigArgs() {} + + private TriggerRepositoryEventConfigArgs(TriggerRepositoryEventConfigArgs $) { + this.pullRequest = $.pullRequest; + this.push = $.push; + this.repository = $.repository; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(TriggerRepositoryEventConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private TriggerRepositoryEventConfigArgs $; + + public Builder() { + $ = new TriggerRepositoryEventConfigArgs(); + } + + public Builder(TriggerRepositoryEventConfigArgs defaults) { + $ = new TriggerRepositoryEventConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param pullRequest Contains filter properties for matching Pull Requests. + * Structure is documented below. + * + * @return builder + * + */ + public Builder pullRequest(@Nullable Output pullRequest) { + $.pullRequest = pullRequest; + return this; + } + + /** + * @param pullRequest Contains filter properties for matching Pull Requests. + * Structure is documented below. + * + * @return builder + * + */ + public Builder pullRequest(TriggerRepositoryEventConfigPullRequestArgs pullRequest) { + return pullRequest(Output.of(pullRequest)); + } + + /** + * @param push Contains filter properties for matching git pushes. + * Structure is documented below. + * + * @return builder + * + */ + public Builder push(@Nullable Output push) { + $.push = push; + return this; + } + + /** + * @param push Contains filter properties for matching git pushes. + * Structure is documented below. + * + * @return builder + * + */ + public Builder push(TriggerRepositoryEventConfigPushArgs push) { + return push(Output.of(push)); + } + + /** + * @param repository The resource name of the Repo API resource. + * + * @return builder + * + */ + public Builder repository(@Nullable Output repository) { + $.repository = repository; + return this; + } + + /** + * @param repository The resource name of the Repo API resource. + * + * @return builder + * + */ + public Builder repository(String repository) { + return repository(Output.of(repository)); + } + + public TriggerRepositoryEventConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerRepositoryEventConfigPullRequestArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerRepositoryEventConfigPullRequestArgs.java new file mode 100644 index 0000000000..fa4c1497a7 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerRepositoryEventConfigPullRequestArgs.java @@ -0,0 +1,162 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.cloudbuild.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class TriggerRepositoryEventConfigPullRequestArgs extends com.pulumi.resources.ResourceArgs { + + public static final TriggerRepositoryEventConfigPullRequestArgs Empty = new TriggerRepositoryEventConfigPullRequestArgs(); + + /** + * Regex of branches to match. + * + */ + @Import(name="branch") + private @Nullable Output branch; + + /** + * @return Regex of branches to match. + * + */ + public Optional> branch() { + return Optional.ofNullable(this.branch); + } + + /** + * Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + * Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + * + */ + @Import(name="commentControl") + private @Nullable Output commentControl; + + /** + * @return Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + * Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + * + */ + public Optional> commentControl() { + return Optional.ofNullable(this.commentControl); + } + + /** + * If true, branches that do NOT match the git_ref will trigger a build. + * + */ + @Import(name="invertRegex") + private @Nullable Output invertRegex; + + /** + * @return If true, branches that do NOT match the git_ref will trigger a build. + * + */ + public Optional> invertRegex() { + return Optional.ofNullable(this.invertRegex); + } + + private TriggerRepositoryEventConfigPullRequestArgs() {} + + private TriggerRepositoryEventConfigPullRequestArgs(TriggerRepositoryEventConfigPullRequestArgs $) { + this.branch = $.branch; + this.commentControl = $.commentControl; + this.invertRegex = $.invertRegex; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(TriggerRepositoryEventConfigPullRequestArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private TriggerRepositoryEventConfigPullRequestArgs $; + + public Builder() { + $ = new TriggerRepositoryEventConfigPullRequestArgs(); + } + + public Builder(TriggerRepositoryEventConfigPullRequestArgs defaults) { + $ = new TriggerRepositoryEventConfigPullRequestArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param branch Regex of branches to match. + * + * @return builder + * + */ + public Builder branch(@Nullable Output branch) { + $.branch = branch; + return this; + } + + /** + * @param branch Regex of branches to match. + * + * @return builder + * + */ + public Builder branch(String branch) { + return branch(Output.of(branch)); + } + + /** + * @param commentControl Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + * Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + * + * @return builder + * + */ + public Builder commentControl(@Nullable Output commentControl) { + $.commentControl = commentControl; + return this; + } + + /** + * @param commentControl Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + * Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + * + * @return builder + * + */ + public Builder commentControl(String commentControl) { + return commentControl(Output.of(commentControl)); + } + + /** + * @param invertRegex If true, branches that do NOT match the git_ref will trigger a build. + * + * @return builder + * + */ + public Builder invertRegex(@Nullable Output invertRegex) { + $.invertRegex = invertRegex; + return this; + } + + /** + * @param invertRegex If true, branches that do NOT match the git_ref will trigger a build. + * + * @return builder + * + */ + public Builder invertRegex(Boolean invertRegex) { + return invertRegex(Output.of(invertRegex)); + } + + public TriggerRepositoryEventConfigPullRequestArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerRepositoryEventConfigPushArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerRepositoryEventConfigPushArgs.java new file mode 100644 index 0000000000..40defc9a89 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerRepositoryEventConfigPushArgs.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.cloudbuild.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 TriggerRepositoryEventConfigPushArgs extends com.pulumi.resources.ResourceArgs { + + public static final TriggerRepositoryEventConfigPushArgs Empty = new TriggerRepositoryEventConfigPushArgs(); + + /** + * Regex of branches to match. Specify only one of branch or tag. + * + */ + @Import(name="branch") + private @Nullable Output branch; + + /** + * @return Regex of branches to match. Specify only one of branch or tag. + * + */ + public Optional> branch() { + return Optional.ofNullable(this.branch); + } + + /** + * When true, only trigger a build if the revision regex does NOT match the git_ref regex. + * + */ + @Import(name="invertRegex") + private @Nullable Output invertRegex; + + /** + * @return When true, only trigger a build if the revision regex does NOT match the git_ref regex. + * + */ + public Optional> invertRegex() { + return Optional.ofNullable(this.invertRegex); + } + + /** + * Regex of tags to match. Specify only one of branch or tag. + * + */ + @Import(name="tag") + private @Nullable Output tag; + + /** + * @return Regex of tags to match. Specify only one of branch or tag. + * + */ + public Optional> tag() { + return Optional.ofNullable(this.tag); + } + + private TriggerRepositoryEventConfigPushArgs() {} + + private TriggerRepositoryEventConfigPushArgs(TriggerRepositoryEventConfigPushArgs $) { + this.branch = $.branch; + this.invertRegex = $.invertRegex; + this.tag = $.tag; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(TriggerRepositoryEventConfigPushArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private TriggerRepositoryEventConfigPushArgs $; + + public Builder() { + $ = new TriggerRepositoryEventConfigPushArgs(); + } + + public Builder(TriggerRepositoryEventConfigPushArgs defaults) { + $ = new TriggerRepositoryEventConfigPushArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param branch Regex of branches to match. Specify only one of branch or tag. + * + * @return builder + * + */ + public Builder branch(@Nullable Output branch) { + $.branch = branch; + return this; + } + + /** + * @param branch Regex of branches to match. Specify only one of branch or tag. + * + * @return builder + * + */ + public Builder branch(String branch) { + return branch(Output.of(branch)); + } + + /** + * @param invertRegex When true, only trigger a build if the revision regex does NOT match the git_ref regex. + * + * @return builder + * + */ + public Builder invertRegex(@Nullable Output invertRegex) { + $.invertRegex = invertRegex; + return this; + } + + /** + * @param invertRegex When true, only trigger a build if the revision regex does NOT match the git_ref regex. + * + * @return builder + * + */ + public Builder invertRegex(Boolean invertRegex) { + return invertRegex(Output.of(invertRegex)); + } + + /** + * @param tag Regex of tags to match. Specify only one of branch or tag. + * + * @return builder + * + */ + public Builder tag(@Nullable Output tag) { + $.tag = tag; + return this; + } + + /** + * @param tag Regex of tags to match. Specify only one of branch or tag. + * + * @return builder + * + */ + public Builder tag(String tag) { + return tag(Output.of(tag)); + } + + public TriggerRepositoryEventConfigPushArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerSourceToBuildArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerSourceToBuildArgs.java index a55128c80f..6ada8502cf 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerSourceToBuildArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerSourceToBuildArgs.java @@ -7,12 +7,31 @@ 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 TriggerSourceToBuildArgs extends com.pulumi.resources.ResourceArgs { public static final TriggerSourceToBuildArgs Empty = new TriggerSourceToBuildArgs(); + /** + * The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + * + */ + @Import(name="githubEnterpriseConfig") + private @Nullable Output githubEnterpriseConfig; + + /** + * @return The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + * + */ + public Optional> githubEnterpriseConfig() { + return Optional.ofNullable(this.githubEnterpriseConfig); + } + /** * The branch or tag to use. Must start with "refs/" (required). * @@ -65,6 +84,7 @@ public Output uri() { private TriggerSourceToBuildArgs() {} private TriggerSourceToBuildArgs(TriggerSourceToBuildArgs $) { + this.githubEnterpriseConfig = $.githubEnterpriseConfig; this.ref = $.ref; this.repoType = $.repoType; this.uri = $.uri; @@ -88,6 +108,29 @@ public Builder(TriggerSourceToBuildArgs defaults) { $ = new TriggerSourceToBuildArgs(Objects.requireNonNull(defaults)); } + /** + * @param githubEnterpriseConfig The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + * + * @return builder + * + */ + public Builder githubEnterpriseConfig(@Nullable Output githubEnterpriseConfig) { + $.githubEnterpriseConfig = githubEnterpriseConfig; + return this; + } + + /** + * @param githubEnterpriseConfig The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + * + * @return builder + * + */ + public Builder githubEnterpriseConfig(String githubEnterpriseConfig) { + return githubEnterpriseConfig(Output.of(githubEnterpriseConfig)); + } + /** * @param ref The branch or tag to use. Must start with "refs/" (required). * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerState.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerState.java index 68a3643e65..ad072d5634 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/inputs/TriggerState.java @@ -10,6 +10,7 @@ import com.pulumi.gcp.cloudbuild.inputs.TriggerGitFileSourceArgs; import com.pulumi.gcp.cloudbuild.inputs.TriggerGithubArgs; import com.pulumi.gcp.cloudbuild.inputs.TriggerPubsubConfigArgs; +import com.pulumi.gcp.cloudbuild.inputs.TriggerRepositoryEventConfigArgs; import com.pulumi.gcp.cloudbuild.inputs.TriggerSourceToBuildArgs; import com.pulumi.gcp.cloudbuild.inputs.TriggerTriggerTemplateArgs; import com.pulumi.gcp.cloudbuild.inputs.TriggerWebhookConfigArgs; @@ -328,6 +329,21 @@ public Optional> pubsubConfig() { return Optional.ofNullable(this.pubsubConfig); } + /** + * The configuration of a trigger that creates a build whenever an event from Repo API is received. + * + */ + @Import(name="repositoryEventConfig") + private @Nullable Output repositoryEventConfig; + + /** + * @return The configuration of a trigger that creates a build whenever an event from Repo API is received. + * + */ + public Optional> repositoryEventConfig() { + return Optional.ofNullable(this.repositoryEventConfig); + } + /** * The service account used for all user-controlled operations including * triggers.patch, triggers.run, builds.create, and builds.cancel. @@ -486,6 +502,7 @@ private TriggerState(TriggerState $) { this.name = $.name; this.project = $.project; this.pubsubConfig = $.pubsubConfig; + this.repositoryEventConfig = $.repositoryEventConfig; this.serviceAccount = $.serviceAccount; this.sourceToBuild = $.sourceToBuild; this.substitutions = $.substitutions; @@ -945,6 +962,27 @@ public Builder pubsubConfig(TriggerPubsubConfigArgs pubsubConfig) { return pubsubConfig(Output.of(pubsubConfig)); } + /** + * @param repositoryEventConfig The configuration of a trigger that creates a build whenever an event from Repo API is received. + * + * @return builder + * + */ + public Builder repositoryEventConfig(@Nullable Output repositoryEventConfig) { + $.repositoryEventConfig = repositoryEventConfig; + return this; + } + + /** + * @param repositoryEventConfig The configuration of a trigger that creates a build whenever an event from Repo API is received. + * + * @return builder + * + */ + public Builder repositoryEventConfig(TriggerRepositoryEventConfigArgs repositoryEventConfig) { + return repositoryEventConfig(Output.of(repositoryEventConfig)); + } + /** * @param serviceAccount The service account used for all user-controlled operations including * triggers.patch, triggers.run, builds.create, and builds.cancel. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerGitFileSource.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerGitFileSource.java index ac342a9ffb..b8aa40883c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerGitFileSource.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerGitFileSource.java @@ -9,12 +9,16 @@ @CustomType public final class GetTriggerGitFileSource { + private String githubEnterpriseConfig; private String path; private String repoType; private String revision; private String uri; private GetTriggerGitFileSource() {} + public String githubEnterpriseConfig() { + return this.githubEnterpriseConfig; + } public String path() { return this.path; } @@ -37,6 +41,7 @@ public static Builder builder(GetTriggerGitFileSource defaults) { } @CustomType.Builder public static final class Builder { + private String githubEnterpriseConfig; private String path; private String repoType; private String revision; @@ -44,12 +49,18 @@ public static final class Builder { public Builder() {} public Builder(GetTriggerGitFileSource defaults) { Objects.requireNonNull(defaults); + this.githubEnterpriseConfig = defaults.githubEnterpriseConfig; this.path = defaults.path; this.repoType = defaults.repoType; this.revision = defaults.revision; this.uri = defaults.uri; } + @CustomType.Setter + public Builder githubEnterpriseConfig(String githubEnterpriseConfig) { + this.githubEnterpriseConfig = Objects.requireNonNull(githubEnterpriseConfig); + return this; + } @CustomType.Setter public Builder path(String path) { this.path = Objects.requireNonNull(path); @@ -72,6 +83,7 @@ public Builder uri(String uri) { } public GetTriggerGitFileSource build() { final var o = new GetTriggerGitFileSource(); + o.githubEnterpriseConfig = githubEnterpriseConfig; o.path = path; o.repoType = repoType; o.revision = revision; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerRepositoryEventConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerRepositoryEventConfig.java new file mode 100644 index 0000000000..2bfff03ee1 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerRepositoryEventConfig.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.cloudbuild.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.cloudbuild.outputs.GetTriggerRepositoryEventConfigPullRequest; +import com.pulumi.gcp.cloudbuild.outputs.GetTriggerRepositoryEventConfigPush; +import java.lang.String; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetTriggerRepositoryEventConfig { + private List pullRequests; + private List pushes; + private String repository; + + private GetTriggerRepositoryEventConfig() {} + public List pullRequests() { + return this.pullRequests; + } + public List pushes() { + return this.pushes; + } + public String repository() { + return this.repository; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetTriggerRepositoryEventConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List pullRequests; + private List pushes; + private String repository; + public Builder() {} + public Builder(GetTriggerRepositoryEventConfig defaults) { + Objects.requireNonNull(defaults); + this.pullRequests = defaults.pullRequests; + this.pushes = defaults.pushes; + this.repository = defaults.repository; + } + + @CustomType.Setter + public Builder pullRequests(List pullRequests) { + this.pullRequests = Objects.requireNonNull(pullRequests); + return this; + } + public Builder pullRequests(GetTriggerRepositoryEventConfigPullRequest... pullRequests) { + return pullRequests(List.of(pullRequests)); + } + @CustomType.Setter + public Builder pushes(List pushes) { + this.pushes = Objects.requireNonNull(pushes); + return this; + } + public Builder pushes(GetTriggerRepositoryEventConfigPush... pushes) { + return pushes(List.of(pushes)); + } + @CustomType.Setter + public Builder repository(String repository) { + this.repository = Objects.requireNonNull(repository); + return this; + } + public GetTriggerRepositoryEventConfig build() { + final var o = new GetTriggerRepositoryEventConfig(); + o.pullRequests = pullRequests; + o.pushes = pushes; + o.repository = repository; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerRepositoryEventConfigPullRequest.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerRepositoryEventConfigPullRequest.java new file mode 100644 index 0000000000..3266bf0fd8 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerRepositoryEventConfigPullRequest.java @@ -0,0 +1,71 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.cloudbuild.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetTriggerRepositoryEventConfigPullRequest { + private String branch; + private String commentControl; + private Boolean invertRegex; + + private GetTriggerRepositoryEventConfigPullRequest() {} + public String branch() { + return this.branch; + } + public String commentControl() { + return this.commentControl; + } + public Boolean invertRegex() { + return this.invertRegex; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetTriggerRepositoryEventConfigPullRequest defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String branch; + private String commentControl; + private Boolean invertRegex; + public Builder() {} + public Builder(GetTriggerRepositoryEventConfigPullRequest defaults) { + Objects.requireNonNull(defaults); + this.branch = defaults.branch; + this.commentControl = defaults.commentControl; + this.invertRegex = defaults.invertRegex; + } + + @CustomType.Setter + public Builder branch(String branch) { + this.branch = Objects.requireNonNull(branch); + return this; + } + @CustomType.Setter + public Builder commentControl(String commentControl) { + this.commentControl = Objects.requireNonNull(commentControl); + return this; + } + @CustomType.Setter + public Builder invertRegex(Boolean invertRegex) { + this.invertRegex = Objects.requireNonNull(invertRegex); + return this; + } + public GetTriggerRepositoryEventConfigPullRequest build() { + final var o = new GetTriggerRepositoryEventConfigPullRequest(); + o.branch = branch; + o.commentControl = commentControl; + o.invertRegex = invertRegex; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerRepositoryEventConfigPush.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerRepositoryEventConfigPush.java new file mode 100644 index 0000000000..fe74731f6f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerRepositoryEventConfigPush.java @@ -0,0 +1,71 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.cloudbuild.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetTriggerRepositoryEventConfigPush { + private String branch; + private Boolean invertRegex; + private String tag; + + private GetTriggerRepositoryEventConfigPush() {} + public String branch() { + return this.branch; + } + public Boolean invertRegex() { + return this.invertRegex; + } + public String tag() { + return this.tag; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetTriggerRepositoryEventConfigPush defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String branch; + private Boolean invertRegex; + private String tag; + public Builder() {} + public Builder(GetTriggerRepositoryEventConfigPush defaults) { + Objects.requireNonNull(defaults); + this.branch = defaults.branch; + this.invertRegex = defaults.invertRegex; + this.tag = defaults.tag; + } + + @CustomType.Setter + public Builder branch(String branch) { + this.branch = Objects.requireNonNull(branch); + return this; + } + @CustomType.Setter + public Builder invertRegex(Boolean invertRegex) { + this.invertRegex = Objects.requireNonNull(invertRegex); + return this; + } + @CustomType.Setter + public Builder tag(String tag) { + this.tag = Objects.requireNonNull(tag); + return this; + } + public GetTriggerRepositoryEventConfigPush build() { + final var o = new GetTriggerRepositoryEventConfigPush(); + o.branch = branch; + o.invertRegex = invertRegex; + o.tag = tag; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerResult.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerResult.java index 5c96ba969b..bb5995bdcc 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerResult.java @@ -9,6 +9,7 @@ import com.pulumi.gcp.cloudbuild.outputs.GetTriggerGitFileSource; import com.pulumi.gcp.cloudbuild.outputs.GetTriggerGithub; import com.pulumi.gcp.cloudbuild.outputs.GetTriggerPubsubConfig; +import com.pulumi.gcp.cloudbuild.outputs.GetTriggerRepositoryEventConfig; import com.pulumi.gcp.cloudbuild.outputs.GetTriggerSourceToBuild; import com.pulumi.gcp.cloudbuild.outputs.GetTriggerTriggerTemplate; import com.pulumi.gcp.cloudbuild.outputs.GetTriggerWebhookConfig; @@ -43,6 +44,7 @@ public final class GetTriggerResult { private String name; private @Nullable String project; private List pubsubConfigs; + private List repositoryEventConfigs; private String serviceAccount; private List sourceToBuilds; private Map substitutions; @@ -107,6 +109,9 @@ public Optional project() { public List pubsubConfigs() { return this.pubsubConfigs; } + public List repositoryEventConfigs() { + return this.repositoryEventConfigs; + } public String serviceAccount() { return this.serviceAccount; } @@ -155,6 +160,7 @@ public static final class Builder { private String name; private @Nullable String project; private List pubsubConfigs; + private List repositoryEventConfigs; private String serviceAccount; private List sourceToBuilds; private Map substitutions; @@ -182,6 +188,7 @@ public Builder(GetTriggerResult defaults) { this.name = defaults.name; this.project = defaults.project; this.pubsubConfigs = defaults.pubsubConfigs; + this.repositoryEventConfigs = defaults.repositoryEventConfigs; this.serviceAccount = defaults.serviceAccount; this.sourceToBuilds = defaults.sourceToBuilds; this.substitutions = defaults.substitutions; @@ -298,6 +305,14 @@ public Builder pubsubConfigs(GetTriggerPubsubConfig... pubsubConfigs) { return pubsubConfigs(List.of(pubsubConfigs)); } @CustomType.Setter + public Builder repositoryEventConfigs(List repositoryEventConfigs) { + this.repositoryEventConfigs = Objects.requireNonNull(repositoryEventConfigs); + return this; + } + public Builder repositoryEventConfigs(GetTriggerRepositoryEventConfig... repositoryEventConfigs) { + return repositoryEventConfigs(List.of(repositoryEventConfigs)); + } + @CustomType.Setter public Builder serviceAccount(String serviceAccount) { this.serviceAccount = Objects.requireNonNull(serviceAccount); return this; @@ -363,6 +378,7 @@ public GetTriggerResult build() { o.name = name; o.project = project; o.pubsubConfigs = pubsubConfigs; + o.repositoryEventConfigs = repositoryEventConfigs; o.serviceAccount = serviceAccount; o.sourceToBuilds = sourceToBuilds; o.substitutions = substitutions; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerSourceToBuild.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerSourceToBuild.java index 8224223a27..e32394a051 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerSourceToBuild.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/GetTriggerSourceToBuild.java @@ -9,11 +9,15 @@ @CustomType public final class GetTriggerSourceToBuild { + private String githubEnterpriseConfig; private String ref; private String repoType; private String uri; private GetTriggerSourceToBuild() {} + public String githubEnterpriseConfig() { + return this.githubEnterpriseConfig; + } public String ref() { return this.ref; } @@ -33,17 +37,24 @@ public static Builder builder(GetTriggerSourceToBuild defaults) { } @CustomType.Builder public static final class Builder { + private String githubEnterpriseConfig; private String ref; private String repoType; private String uri; public Builder() {} public Builder(GetTriggerSourceToBuild defaults) { Objects.requireNonNull(defaults); + this.githubEnterpriseConfig = defaults.githubEnterpriseConfig; this.ref = defaults.ref; this.repoType = defaults.repoType; this.uri = defaults.uri; } + @CustomType.Setter + public Builder githubEnterpriseConfig(String githubEnterpriseConfig) { + this.githubEnterpriseConfig = Objects.requireNonNull(githubEnterpriseConfig); + return this; + } @CustomType.Setter public Builder ref(String ref) { this.ref = Objects.requireNonNull(ref); @@ -61,6 +72,7 @@ public Builder uri(String uri) { } public GetTriggerSourceToBuild build() { final var o = new GetTriggerSourceToBuild(); + o.githubEnterpriseConfig = githubEnterpriseConfig; o.ref = ref; o.repoType = repoType; o.uri = uri; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerGitFileSource.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerGitFileSource.java index da7bdcf6e6..efaa2877ff 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerGitFileSource.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerGitFileSource.java @@ -11,6 +11,12 @@ @CustomType public final class TriggerGitFileSource { + /** + * @return The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + * + */ + private @Nullable String githubEnterpriseConfig; /** * @return The path of the file, with the repo root as the root of the path. * @@ -38,6 +44,14 @@ public final class TriggerGitFileSource { private @Nullable String uri; private TriggerGitFileSource() {} + /** + * @return The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + * + */ + public Optional githubEnterpriseConfig() { + return Optional.ofNullable(this.githubEnterpriseConfig); + } /** * @return The path of the file, with the repo root as the root of the path. * @@ -81,6 +95,7 @@ public static Builder builder(TriggerGitFileSource defaults) { } @CustomType.Builder public static final class Builder { + private @Nullable String githubEnterpriseConfig; private String path; private String repoType; private @Nullable String revision; @@ -88,12 +103,18 @@ public static final class Builder { public Builder() {} public Builder(TriggerGitFileSource defaults) { Objects.requireNonNull(defaults); + this.githubEnterpriseConfig = defaults.githubEnterpriseConfig; this.path = defaults.path; this.repoType = defaults.repoType; this.revision = defaults.revision; this.uri = defaults.uri; } + @CustomType.Setter + public Builder githubEnterpriseConfig(@Nullable String githubEnterpriseConfig) { + this.githubEnterpriseConfig = githubEnterpriseConfig; + return this; + } @CustomType.Setter public Builder path(String path) { this.path = Objects.requireNonNull(path); @@ -116,6 +137,7 @@ public Builder uri(@Nullable String uri) { } public TriggerGitFileSource build() { final var o = new TriggerGitFileSource(); + o.githubEnterpriseConfig = githubEnterpriseConfig; o.path = path; o.repoType = repoType; o.revision = revision; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerRepositoryEventConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerRepositoryEventConfig.java new file mode 100644 index 0000000000..ea4e35a99d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerRepositoryEventConfig.java @@ -0,0 +1,102 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.cloudbuild.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.cloudbuild.outputs.TriggerRepositoryEventConfigPullRequest; +import com.pulumi.gcp.cloudbuild.outputs.TriggerRepositoryEventConfigPush; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class TriggerRepositoryEventConfig { + /** + * @return Contains filter properties for matching Pull Requests. + * Structure is documented below. + * + */ + private @Nullable TriggerRepositoryEventConfigPullRequest pullRequest; + /** + * @return Contains filter properties for matching git pushes. + * Structure is documented below. + * + */ + private @Nullable TriggerRepositoryEventConfigPush push; + /** + * @return The resource name of the Repo API resource. + * + */ + private @Nullable String repository; + + private TriggerRepositoryEventConfig() {} + /** + * @return Contains filter properties for matching Pull Requests. + * Structure is documented below. + * + */ + public Optional pullRequest() { + return Optional.ofNullable(this.pullRequest); + } + /** + * @return Contains filter properties for matching git pushes. + * Structure is documented below. + * + */ + public Optional push() { + return Optional.ofNullable(this.push); + } + /** + * @return The resource name of the Repo API resource. + * + */ + public Optional repository() { + return Optional.ofNullable(this.repository); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(TriggerRepositoryEventConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable TriggerRepositoryEventConfigPullRequest pullRequest; + private @Nullable TriggerRepositoryEventConfigPush push; + private @Nullable String repository; + public Builder() {} + public Builder(TriggerRepositoryEventConfig defaults) { + Objects.requireNonNull(defaults); + this.pullRequest = defaults.pullRequest; + this.push = defaults.push; + this.repository = defaults.repository; + } + + @CustomType.Setter + public Builder pullRequest(@Nullable TriggerRepositoryEventConfigPullRequest pullRequest) { + this.pullRequest = pullRequest; + return this; + } + @CustomType.Setter + public Builder push(@Nullable TriggerRepositoryEventConfigPush push) { + this.push = push; + return this; + } + @CustomType.Setter + public Builder repository(@Nullable String repository) { + this.repository = repository; + return this; + } + public TriggerRepositoryEventConfig build() { + final var o = new TriggerRepositoryEventConfig(); + o.pullRequest = pullRequest; + o.push = push; + o.repository = repository; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerRepositoryEventConfigPullRequest.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerRepositoryEventConfigPullRequest.java new file mode 100644 index 0000000000..037d07cf25 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerRepositoryEventConfigPullRequest.java @@ -0,0 +1,99 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.cloudbuild.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 TriggerRepositoryEventConfigPullRequest { + /** + * @return Regex of branches to match. + * + */ + private @Nullable String branch; + /** + * @return Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + * Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + * + */ + private @Nullable String commentControl; + /** + * @return If true, branches that do NOT match the git_ref will trigger a build. + * + */ + private @Nullable Boolean invertRegex; + + private TriggerRepositoryEventConfigPullRequest() {} + /** + * @return Regex of branches to match. + * + */ + public Optional branch() { + return Optional.ofNullable(this.branch); + } + /** + * @return Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + * Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + * + */ + public Optional commentControl() { + return Optional.ofNullable(this.commentControl); + } + /** + * @return If true, branches that do NOT match the git_ref will trigger a build. + * + */ + public Optional invertRegex() { + return Optional.ofNullable(this.invertRegex); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(TriggerRepositoryEventConfigPullRequest defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String branch; + private @Nullable String commentControl; + private @Nullable Boolean invertRegex; + public Builder() {} + public Builder(TriggerRepositoryEventConfigPullRequest defaults) { + Objects.requireNonNull(defaults); + this.branch = defaults.branch; + this.commentControl = defaults.commentControl; + this.invertRegex = defaults.invertRegex; + } + + @CustomType.Setter + public Builder branch(@Nullable String branch) { + this.branch = branch; + return this; + } + @CustomType.Setter + public Builder commentControl(@Nullable String commentControl) { + this.commentControl = commentControl; + return this; + } + @CustomType.Setter + public Builder invertRegex(@Nullable Boolean invertRegex) { + this.invertRegex = invertRegex; + return this; + } + public TriggerRepositoryEventConfigPullRequest build() { + final var o = new TriggerRepositoryEventConfigPullRequest(); + o.branch = branch; + o.commentControl = commentControl; + o.invertRegex = invertRegex; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerRepositoryEventConfigPush.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerRepositoryEventConfigPush.java new file mode 100644 index 0000000000..c54543e191 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerRepositoryEventConfigPush.java @@ -0,0 +1,97 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.cloudbuild.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class TriggerRepositoryEventConfigPush { + /** + * @return Regex of branches to match. Specify only one of branch or tag. + * + */ + private @Nullable String branch; + /** + * @return When true, only trigger a build if the revision regex does NOT match the git_ref regex. + * + */ + private @Nullable Boolean invertRegex; + /** + * @return Regex of tags to match. Specify only one of branch or tag. + * + */ + private @Nullable String tag; + + private TriggerRepositoryEventConfigPush() {} + /** + * @return Regex of branches to match. Specify only one of branch or tag. + * + */ + public Optional branch() { + return Optional.ofNullable(this.branch); + } + /** + * @return When true, only trigger a build if the revision regex does NOT match the git_ref regex. + * + */ + public Optional invertRegex() { + return Optional.ofNullable(this.invertRegex); + } + /** + * @return Regex of tags to match. Specify only one of branch or tag. + * + */ + public Optional tag() { + return Optional.ofNullable(this.tag); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(TriggerRepositoryEventConfigPush defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String branch; + private @Nullable Boolean invertRegex; + private @Nullable String tag; + public Builder() {} + public Builder(TriggerRepositoryEventConfigPush defaults) { + Objects.requireNonNull(defaults); + this.branch = defaults.branch; + this.invertRegex = defaults.invertRegex; + this.tag = defaults.tag; + } + + @CustomType.Setter + public Builder branch(@Nullable String branch) { + this.branch = branch; + return this; + } + @CustomType.Setter + public Builder invertRegex(@Nullable Boolean invertRegex) { + this.invertRegex = invertRegex; + return this; + } + @CustomType.Setter + public Builder tag(@Nullable String tag) { + this.tag = tag; + return this; + } + public TriggerRepositoryEventConfigPush build() { + final var o = new TriggerRepositoryEventConfigPush(); + o.branch = branch; + o.invertRegex = invertRegex; + o.tag = tag; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerSourceToBuild.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerSourceToBuild.java index 8af664a4ed..557cc9cca4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerSourceToBuild.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuild/outputs/TriggerSourceToBuild.java @@ -6,9 +6,17 @@ 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 TriggerSourceToBuild { + /** + * @return The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + * + */ + private @Nullable String githubEnterpriseConfig; /** * @return The branch or tag to use. Must start with "refs/" (required). * @@ -28,6 +36,14 @@ public final class TriggerSourceToBuild { private String uri; private TriggerSourceToBuild() {} + /** + * @return The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + * + */ + public Optional githubEnterpriseConfig() { + return Optional.ofNullable(this.githubEnterpriseConfig); + } /** * @return The branch or tag to use. Must start with "refs/" (required). * @@ -61,17 +77,24 @@ public static Builder builder(TriggerSourceToBuild defaults) { } @CustomType.Builder public static final class Builder { + private @Nullable String githubEnterpriseConfig; private String ref; private String repoType; private String uri; public Builder() {} public Builder(TriggerSourceToBuild defaults) { Objects.requireNonNull(defaults); + this.githubEnterpriseConfig = defaults.githubEnterpriseConfig; this.ref = defaults.ref; this.repoType = defaults.repoType; this.uri = defaults.uri; } + @CustomType.Setter + public Builder githubEnterpriseConfig(@Nullable String githubEnterpriseConfig) { + this.githubEnterpriseConfig = githubEnterpriseConfig; + return this; + } @CustomType.Setter public Builder ref(String ref) { this.ref = Objects.requireNonNull(ref); @@ -89,6 +112,7 @@ public Builder uri(String uri) { } public TriggerSourceToBuild build() { final var o = new TriggerSourceToBuild(); + o.githubEnterpriseConfig = githubEnterpriseConfig; o.ref = ref; o.repoType = repoType; o.uri = uri; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/Connection.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/Connection.java new file mode 100644 index 0000000000..210ff49611 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/Connection.java @@ -0,0 +1,344 @@ +// *** 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.cloudbuildv2; + +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.cloudbuildv2.ConnectionArgs; +import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionState; +import com.pulumi.gcp.cloudbuildv2.outputs.ConnectionGithubConfig; +import com.pulumi.gcp.cloudbuildv2.outputs.ConnectionGithubEnterpriseConfig; +import com.pulumi.gcp.cloudbuildv2.outputs.ConnectionInstallationState; +import java.lang.Boolean; +import java.lang.String; +import java.util.List; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * Beta only: The Cloudbuildv2 Connection resource + * + * ## Example Usage + * ### GitHub Connection + * Creates a Connection to github.com + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.gcp.secretmanager.Secret; + * import com.pulumi.gcp.secretmanager.SecretArgs; + * import com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs; + * import com.pulumi.gcp.secretmanager.SecretVersion; + * import com.pulumi.gcp.secretmanager.SecretVersionArgs; + * import com.pulumi.gcp.organizations.OrganizationsFunctions; + * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; + * import com.pulumi.gcp.secretmanager.SecretIamPolicy; + * import com.pulumi.gcp.secretmanager.SecretIamPolicyArgs; + * import com.pulumi.gcp.cloudbuildv2.Connection; + * import com.pulumi.gcp.cloudbuildv2.ConnectionArgs; + * import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigArgs; + * import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigAuthorizerCredentialArgs; + * 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 github_token_secret = new Secret("github-token-secret", SecretArgs.builder() + * .secretId("github-token-secret") + * .replication(SecretReplicationArgs.builder() + * .automatic(true) + * .build()) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * var github_token_secret_version = new SecretVersion("github-token-secret-version", SecretVersionArgs.builder() + * .secret(github_token_secret.id()) + * .secretData(Files.readString(Paths.get("my-github-token.txt"))) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * final var p4sa-secretAccessor = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() + * .bindings(GetIAMPolicyBindingArgs.builder() + * .role("roles/secretmanager.secretAccessor") + * .members("serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com") + * .build()) + * .build()); + * + * var policy = new SecretIamPolicy("policy", SecretIamPolicyArgs.builder() + * .secretId(github_token_secret.secretId()) + * .policyData(p4sa_secretAccessor.policyData()) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * var my_connection = new Connection("my-connection", ConnectionArgs.builder() + * .location("us-west1") + * .githubConfig(ConnectionGithubConfigArgs.builder() + * .appInstallationId(123123) + * .authorizerCredential(ConnectionGithubConfigAuthorizerCredentialArgs.builder() + * .oauthTokenSecretVersion(github_token_secret_version.id()) + * .build()) + * .build()) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * } + * } + * ``` + * + * ## Import + * + * Connection can be imported using any of these accepted formats + * + * ```sh + * $ pulumi import gcp:cloudbuildv2/connection:Connection default projects/{{project}}/locations/{{location}}/connections/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:cloudbuildv2/connection:Connection default {{project}}/{{location}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:cloudbuildv2/connection:Connection default {{location}}/{{name}} + * ``` + * + */ +@ResourceType(type="gcp:cloudbuildv2/connection:Connection") +public class Connection extends com.pulumi.resources.CustomResource { + /** + * Allows clients to store small amounts of arbitrary data. + * + */ + @Export(name="annotations", type=Map.class, parameters={String.class, String.class}) + private Output> annotations; + + /** + * @return Allows clients to store small amounts of arbitrary data. + * + */ + public Output>> annotations() { + return Codegen.optional(this.annotations); + } + /** + * Output only. Server assigned timestamp for when the connection was created. + * + */ + @Export(name="createTime", type=String.class, parameters={}) + private Output createTime; + + /** + * @return Output only. Server assigned timestamp for when the connection was created. + * + */ + public Output createTime() { + return this.createTime; + } + /** + * If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + * + */ + @Export(name="disabled", type=Boolean.class, parameters={}) + private Output disabled; + + /** + * @return If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + * + */ + public Output> disabled() { + return Codegen.optional(this.disabled); + } + /** + * This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + * + */ + @Export(name="etag", type=String.class, parameters={}) + private Output etag; + + /** + * @return This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + * + */ + public Output etag() { + return this.etag; + } + /** + * Configuration for connections to github.com. + * + */ + @Export(name="githubConfig", type=ConnectionGithubConfig.class, parameters={}) + private Output githubConfig; + + /** + * @return Configuration for connections to github.com. + * + */ + public Output> githubConfig() { + return Codegen.optional(this.githubConfig); + } + /** + * Configuration for connections to an instance of GitHub Enterprise. + * + */ + @Export(name="githubEnterpriseConfig", type=ConnectionGithubEnterpriseConfig.class, parameters={}) + private Output githubEnterpriseConfig; + + /** + * @return Configuration for connections to an instance of GitHub Enterprise. + * + */ + public Output> githubEnterpriseConfig() { + return Codegen.optional(this.githubEnterpriseConfig); + } + /** + * Output only. Installation state of the Connection. + * + */ + @Export(name="installationStates", type=List.class, parameters={ConnectionInstallationState.class}) + private Output> installationStates; + + /** + * @return Output only. Installation state of the Connection. + * + */ + public Output> installationStates() { + return this.installationStates; + } + /** + * The location for the resource + * + */ + @Export(name="location", type=String.class, parameters={}) + private Output location; + + /** + * @return The location for the resource + * + */ + public Output location() { + return this.location; + } + /** + * Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + * + */ + @Export(name="name", type=String.class, parameters={}) + private Output name; + + /** + * @return Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + * + */ + public Output name() { + return this.name; + } + /** + * The project for the resource + * + */ + @Export(name="project", type=String.class, parameters={}) + private Output project; + + /** + * @return The project for the resource + * + */ + public Output project() { + return this.project; + } + /** + * Output only. Set to true when the connection is being set up or updated in the background. + * + */ + @Export(name="reconciling", type=Boolean.class, parameters={}) + private Output reconciling; + + /** + * @return Output only. Set to true when the connection is being set up or updated in the background. + * + */ + public Output reconciling() { + return this.reconciling; + } + /** + * Output only. Server assigned timestamp for when the connection was updated. + * + */ + @Export(name="updateTime", type=String.class, parameters={}) + private Output updateTime; + + /** + * @return Output only. Server assigned timestamp for when the connection was updated. + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public Connection(String name) { + this(name, ConnectionArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Connection(String name, ConnectionArgs 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 Connection(String name, ConnectionArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:cloudbuildv2/connection:Connection", name, args == null ? ConnectionArgs.Empty : args, makeResourceOptions(options, Codegen.empty())); + } + + private Connection(String name, Output id, @Nullable ConnectionState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:cloudbuildv2/connection:Connection", name, state, makeResourceOptions(options, id)); + } + + 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 Connection get(String name, Output id, @Nullable ConnectionState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new Connection(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/ConnectionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/ConnectionArgs.java new file mode 100644 index 0000000000..6cc3cf2a68 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/ConnectionArgs.java @@ -0,0 +1,310 @@ +// *** 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.cloudbuildv2; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigArgs; +import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubEnterpriseConfigArgs; +import java.lang.Boolean; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ConnectionArgs extends com.pulumi.resources.ResourceArgs { + + public static final ConnectionArgs Empty = new ConnectionArgs(); + + /** + * Allows clients to store small amounts of arbitrary data. + * + */ + @Import(name="annotations") + private @Nullable Output> annotations; + + /** + * @return Allows clients to store small amounts of arbitrary data. + * + */ + public Optional>> annotations() { + return Optional.ofNullable(this.annotations); + } + + /** + * If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + * + */ + @Import(name="disabled") + private @Nullable Output disabled; + + /** + * @return If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + * + */ + public Optional> disabled() { + return Optional.ofNullable(this.disabled); + } + + /** + * Configuration for connections to github.com. + * + */ + @Import(name="githubConfig") + private @Nullable Output githubConfig; + + /** + * @return Configuration for connections to github.com. + * + */ + public Optional> githubConfig() { + return Optional.ofNullable(this.githubConfig); + } + + /** + * Configuration for connections to an instance of GitHub Enterprise. + * + */ + @Import(name="githubEnterpriseConfig") + private @Nullable Output githubEnterpriseConfig; + + /** + * @return Configuration for connections to an instance of GitHub Enterprise. + * + */ + public Optional> githubEnterpriseConfig() { + return Optional.ofNullable(this.githubEnterpriseConfig); + } + + /** + * The location for the resource + * + */ + @Import(name="location", required=true) + private Output location; + + /** + * @return The location for the resource + * + */ + public Output location() { + return this.location; + } + + /** + * Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The project for the resource + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The project for the resource + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + private ConnectionArgs() {} + + private ConnectionArgs(ConnectionArgs $) { + this.annotations = $.annotations; + this.disabled = $.disabled; + this.githubConfig = $.githubConfig; + this.githubEnterpriseConfig = $.githubEnterpriseConfig; + this.location = $.location; + this.name = $.name; + this.project = $.project; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ConnectionArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ConnectionArgs $; + + public Builder() { + $ = new ConnectionArgs(); + } + + public Builder(ConnectionArgs defaults) { + $ = new ConnectionArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param annotations Allows clients to store small amounts of arbitrary data. + * + * @return builder + * + */ + public Builder annotations(@Nullable Output> annotations) { + $.annotations = annotations; + return this; + } + + /** + * @param annotations Allows clients to store small amounts of arbitrary data. + * + * @return builder + * + */ + public Builder annotations(Map annotations) { + return annotations(Output.of(annotations)); + } + + /** + * @param disabled If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + * + * @return builder + * + */ + public Builder disabled(@Nullable Output disabled) { + $.disabled = disabled; + return this; + } + + /** + * @param disabled If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + * + * @return builder + * + */ + public Builder disabled(Boolean disabled) { + return disabled(Output.of(disabled)); + } + + /** + * @param githubConfig Configuration for connections to github.com. + * + * @return builder + * + */ + public Builder githubConfig(@Nullable Output githubConfig) { + $.githubConfig = githubConfig; + return this; + } + + /** + * @param githubConfig Configuration for connections to github.com. + * + * @return builder + * + */ + public Builder githubConfig(ConnectionGithubConfigArgs githubConfig) { + return githubConfig(Output.of(githubConfig)); + } + + /** + * @param githubEnterpriseConfig Configuration for connections to an instance of GitHub Enterprise. + * + * @return builder + * + */ + public Builder githubEnterpriseConfig(@Nullable Output githubEnterpriseConfig) { + $.githubEnterpriseConfig = githubEnterpriseConfig; + return this; + } + + /** + * @param githubEnterpriseConfig Configuration for connections to an instance of GitHub Enterprise. + * + * @return builder + * + */ + public Builder githubEnterpriseConfig(ConnectionGithubEnterpriseConfigArgs githubEnterpriseConfig) { + return githubEnterpriseConfig(Output.of(githubEnterpriseConfig)); + } + + /** + * @param location The location for the resource + * + * @return builder + * + */ + public Builder location(Output location) { + $.location = location; + return this; + } + + /** + * @param location The location for the resource + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param project The project for the resource + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The project for the resource + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + public ConnectionArgs build() { + $.location = Objects.requireNonNull($.location, "expected parameter 'location' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/Repository.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/Repository.java new file mode 100644 index 0000000000..31d72f4a96 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/Repository.java @@ -0,0 +1,307 @@ +// *** 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.cloudbuildv2; + +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.cloudbuildv2.RepositoryArgs; +import com.pulumi.gcp.cloudbuildv2.inputs.RepositoryState; +import java.lang.String; +import java.util.Map; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * Beta only: The Cloudbuildv2 Repository resource + * + * ## Example Usage + * ### Repository In GitHub Connection + * Creates a Repository resource inside a Connection to github.com + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.gcp.secretmanager.Secret; + * import com.pulumi.gcp.secretmanager.SecretArgs; + * import com.pulumi.gcp.secretmanager.inputs.SecretReplicationArgs; + * import com.pulumi.gcp.secretmanager.SecretVersion; + * import com.pulumi.gcp.secretmanager.SecretVersionArgs; + * import com.pulumi.gcp.organizations.OrganizationsFunctions; + * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; + * import com.pulumi.gcp.secretmanager.SecretIamPolicy; + * import com.pulumi.gcp.secretmanager.SecretIamPolicyArgs; + * import com.pulumi.gcp.cloudbuildv2.Connection; + * import com.pulumi.gcp.cloudbuildv2.ConnectionArgs; + * import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigArgs; + * import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigAuthorizerCredentialArgs; + * import com.pulumi.gcp.cloudbuildv2.Repository; + * import com.pulumi.gcp.cloudbuildv2.RepositoryArgs; + * 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 github_token_secret = new Secret("github-token-secret", SecretArgs.builder() + * .secretId("github-token-secret") + * .replication(SecretReplicationArgs.builder() + * .automatic(true) + * .build()) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * var github_token_secret_version = new SecretVersion("github-token-secret-version", SecretVersionArgs.builder() + * .secret(github_token_secret.id()) + * .secretData(Files.readString(Paths.get("my-github-token.txt"))) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * final var p4sa-secretAccessor = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() + * .bindings(GetIAMPolicyBindingArgs.builder() + * .role("roles/secretmanager.secretAccessor") + * .members("serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com") + * .build()) + * .build()); + * + * var policy = new SecretIamPolicy("policy", SecretIamPolicyArgs.builder() + * .secretId(github_token_secret.secretId()) + * .policyData(p4sa_secretAccessor.policyData()) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * var my_connection = new Connection("my-connection", ConnectionArgs.builder() + * .location("us-west1") + * .githubConfig(ConnectionGithubConfigArgs.builder() + * .appInstallationId(123123) + * .authorizerCredential(ConnectionGithubConfigAuthorizerCredentialArgs.builder() + * .oauthTokenSecretVersion(github_token_secret_version.id()) + * .build()) + * .build()) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * var my_repository = new Repository("my-repository", RepositoryArgs.builder() + * .location("us-west1") + * .parentConnection(my_connection.name()) + * .remoteUri("https://github.com/myuser/myrepo.git") + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * } + * } + * ``` + * + * ## Import + * + * Repository can be imported using any of these accepted formats + * + * ```sh + * $ pulumi import gcp:cloudbuildv2/repository:Repository default projects/{{project}}/locations/{{location}}/connections/{{parent_connection}}/repositories/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:cloudbuildv2/repository:Repository default {{project}}/{{location}}/{{parent_connection}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:cloudbuildv2/repository:Repository default {{location}}/{{parent_connection}}/{{name}} + * ``` + * + */ +@ResourceType(type="gcp:cloudbuildv2/repository:Repository") +public class Repository extends com.pulumi.resources.CustomResource { + /** + * Allows clients to store small amounts of arbitrary data. + * + */ + @Export(name="annotations", type=Map.class, parameters={String.class, String.class}) + private Output> annotations; + + /** + * @return Allows clients to store small amounts of arbitrary data. + * + */ + public Output>> annotations() { + return Codegen.optional(this.annotations); + } + /** + * Output only. Server assigned timestamp for when the connection was created. + * + */ + @Export(name="createTime", type=String.class, parameters={}) + private Output createTime; + + /** + * @return Output only. Server assigned timestamp for when the connection was created. + * + */ + public Output createTime() { + return this.createTime; + } + /** + * This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + * + */ + @Export(name="etag", type=String.class, parameters={}) + private Output etag; + + /** + * @return This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + * + */ + public Output etag() { + return this.etag; + } + /** + * The location for the resource + * + */ + @Export(name="location", type=String.class, parameters={}) + private Output location; + + /** + * @return The location for the resource + * + */ + public Output location() { + return this.location; + } + /** + * Name of the repository. + * + */ + @Export(name="name", type=String.class, parameters={}) + private Output name; + + /** + * @return Name of the repository. + * + */ + public Output name() { + return this.name; + } + /** + * The connection for the resource + * + */ + @Export(name="parentConnection", type=String.class, parameters={}) + private Output parentConnection; + + /** + * @return The connection for the resource + * + */ + public Output parentConnection() { + return this.parentConnection; + } + /** + * The project for the resource + * + */ + @Export(name="project", type=String.class, parameters={}) + private Output project; + + /** + * @return The project for the resource + * + */ + public Output project() { + return this.project; + } + /** + * Required. Git Clone HTTPS URI. + * + */ + @Export(name="remoteUri", type=String.class, parameters={}) + private Output remoteUri; + + /** + * @return Required. Git Clone HTTPS URI. + * + */ + public Output remoteUri() { + return this.remoteUri; + } + /** + * Output only. Server assigned timestamp for when the connection was updated. + * + */ + @Export(name="updateTime", type=String.class, parameters={}) + private Output updateTime; + + /** + * @return Output only. Server assigned timestamp for when the connection was updated. + * + */ + public Output updateTime() { + return this.updateTime; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public Repository(String name) { + this(name, RepositoryArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public Repository(String name, RepositoryArgs 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 Repository(String name, RepositoryArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:cloudbuildv2/repository:Repository", name, args == null ? RepositoryArgs.Empty : args, makeResourceOptions(options, Codegen.empty())); + } + + private Repository(String name, Output id, @Nullable RepositoryState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:cloudbuildv2/repository:Repository", name, state, makeResourceOptions(options, id)); + } + + 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 Repository get(String name, Output id, @Nullable RepositoryState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new Repository(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/RepositoryArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/RepositoryArgs.java new file mode 100644 index 0000000000..48df700e44 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/RepositoryArgs.java @@ -0,0 +1,271 @@ +// *** 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.cloudbuildv2; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RepositoryArgs extends com.pulumi.resources.ResourceArgs { + + public static final RepositoryArgs Empty = new RepositoryArgs(); + + /** + * Allows clients to store small amounts of arbitrary data. + * + */ + @Import(name="annotations") + private @Nullable Output> annotations; + + /** + * @return Allows clients to store small amounts of arbitrary data. + * + */ + public Optional>> annotations() { + return Optional.ofNullable(this.annotations); + } + + /** + * The location for the resource + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location for the resource + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Name of the repository. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Name of the repository. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The connection for the resource + * + */ + @Import(name="parentConnection", required=true) + private Output parentConnection; + + /** + * @return The connection for the resource + * + */ + public Output parentConnection() { + return this.parentConnection; + } + + /** + * The project for the resource + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The project for the resource + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * Required. Git Clone HTTPS URI. + * + */ + @Import(name="remoteUri", required=true) + private Output remoteUri; + + /** + * @return Required. Git Clone HTTPS URI. + * + */ + public Output remoteUri() { + return this.remoteUri; + } + + private RepositoryArgs() {} + + private RepositoryArgs(RepositoryArgs $) { + this.annotations = $.annotations; + this.location = $.location; + this.name = $.name; + this.parentConnection = $.parentConnection; + this.project = $.project; + this.remoteUri = $.remoteUri; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RepositoryArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RepositoryArgs $; + + public Builder() { + $ = new RepositoryArgs(); + } + + public Builder(RepositoryArgs defaults) { + $ = new RepositoryArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param annotations Allows clients to store small amounts of arbitrary data. + * + * @return builder + * + */ + public Builder annotations(@Nullable Output> annotations) { + $.annotations = annotations; + return this; + } + + /** + * @param annotations Allows clients to store small amounts of arbitrary data. + * + * @return builder + * + */ + public Builder annotations(Map annotations) { + return annotations(Output.of(annotations)); + } + + /** + * @param location The location for the resource + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location for the resource + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name Name of the repository. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Name of the repository. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param parentConnection The connection for the resource + * + * @return builder + * + */ + public Builder parentConnection(Output parentConnection) { + $.parentConnection = parentConnection; + return this; + } + + /** + * @param parentConnection The connection for the resource + * + * @return builder + * + */ + public Builder parentConnection(String parentConnection) { + return parentConnection(Output.of(parentConnection)); + } + + /** + * @param project The project for the resource + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The project for the resource + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param remoteUri Required. Git Clone HTTPS URI. + * + * @return builder + * + */ + public Builder remoteUri(Output remoteUri) { + $.remoteUri = remoteUri; + return this; + } + + /** + * @param remoteUri Required. Git Clone HTTPS URI. + * + * @return builder + * + */ + public Builder remoteUri(String remoteUri) { + return remoteUri(Output.of(remoteUri)); + } + + public RepositoryArgs build() { + $.parentConnection = Objects.requireNonNull($.parentConnection, "expected parameter 'parentConnection' to be non-null"); + $.remoteUri = Objects.requireNonNull($.remoteUri, "expected parameter 'remoteUri' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubConfigArgs.java new file mode 100644 index 0000000000..c366664af9 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubConfigArgs.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.cloudbuildv2.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigAuthorizerCredentialArgs; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ConnectionGithubConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final ConnectionGithubConfigArgs Empty = new ConnectionGithubConfigArgs(); + + /** + * GitHub App installation id. + * + */ + @Import(name="appInstallationId") + private @Nullable Output appInstallationId; + + /** + * @return GitHub App installation id. + * + */ + public Optional> appInstallationId() { + return Optional.ofNullable(this.appInstallationId); + } + + /** + * OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + * + */ + @Import(name="authorizerCredential") + private @Nullable Output authorizerCredential; + + /** + * @return OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + * + */ + public Optional> authorizerCredential() { + return Optional.ofNullable(this.authorizerCredential); + } + + private ConnectionGithubConfigArgs() {} + + private ConnectionGithubConfigArgs(ConnectionGithubConfigArgs $) { + this.appInstallationId = $.appInstallationId; + this.authorizerCredential = $.authorizerCredential; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ConnectionGithubConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ConnectionGithubConfigArgs $; + + public Builder() { + $ = new ConnectionGithubConfigArgs(); + } + + public Builder(ConnectionGithubConfigArgs defaults) { + $ = new ConnectionGithubConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param appInstallationId GitHub App installation id. + * + * @return builder + * + */ + public Builder appInstallationId(@Nullable Output appInstallationId) { + $.appInstallationId = appInstallationId; + return this; + } + + /** + * @param appInstallationId GitHub App installation id. + * + * @return builder + * + */ + public Builder appInstallationId(Integer appInstallationId) { + return appInstallationId(Output.of(appInstallationId)); + } + + /** + * @param authorizerCredential OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + * + * @return builder + * + */ + public Builder authorizerCredential(@Nullable Output authorizerCredential) { + $.authorizerCredential = authorizerCredential; + return this; + } + + /** + * @param authorizerCredential OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + * + * @return builder + * + */ + public Builder authorizerCredential(ConnectionGithubConfigAuthorizerCredentialArgs authorizerCredential) { + return authorizerCredential(Output.of(authorizerCredential)); + } + + public ConnectionGithubConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubConfigAuthorizerCredentialArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubConfigAuthorizerCredentialArgs.java new file mode 100644 index 0000000000..6f4f959c2f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubConfigAuthorizerCredentialArgs.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.cloudbuildv2.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 ConnectionGithubConfigAuthorizerCredentialArgs extends com.pulumi.resources.ResourceArgs { + + public static final ConnectionGithubConfigAuthorizerCredentialArgs Empty = new ConnectionGithubConfigAuthorizerCredentialArgs(); + + /** + * A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + */ + @Import(name="oauthTokenSecretVersion") + private @Nullable Output oauthTokenSecretVersion; + + /** + * @return A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + */ + public Optional> oauthTokenSecretVersion() { + return Optional.ofNullable(this.oauthTokenSecretVersion); + } + + /** + * The username associated to this token. + * + */ + @Import(name="username") + private @Nullable Output username; + + /** + * @return The username associated to this token. + * + */ + public Optional> username() { + return Optional.ofNullable(this.username); + } + + private ConnectionGithubConfigAuthorizerCredentialArgs() {} + + private ConnectionGithubConfigAuthorizerCredentialArgs(ConnectionGithubConfigAuthorizerCredentialArgs $) { + this.oauthTokenSecretVersion = $.oauthTokenSecretVersion; + this.username = $.username; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ConnectionGithubConfigAuthorizerCredentialArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ConnectionGithubConfigAuthorizerCredentialArgs $; + + public Builder() { + $ = new ConnectionGithubConfigAuthorizerCredentialArgs(); + } + + public Builder(ConnectionGithubConfigAuthorizerCredentialArgs defaults) { + $ = new ConnectionGithubConfigAuthorizerCredentialArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param oauthTokenSecretVersion A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + * @return builder + * + */ + public Builder oauthTokenSecretVersion(@Nullable Output oauthTokenSecretVersion) { + $.oauthTokenSecretVersion = oauthTokenSecretVersion; + return this; + } + + /** + * @param oauthTokenSecretVersion A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + * @return builder + * + */ + public Builder oauthTokenSecretVersion(String oauthTokenSecretVersion) { + return oauthTokenSecretVersion(Output.of(oauthTokenSecretVersion)); + } + + /** + * @param username The username associated to this token. + * + * @return builder + * + */ + public Builder username(@Nullable Output username) { + $.username = username; + return this; + } + + /** + * @param username The username associated to this token. + * + * @return builder + * + */ + public Builder username(String username) { + return username(Output.of(username)); + } + + public ConnectionGithubConfigAuthorizerCredentialArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubEnterpriseConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubEnterpriseConfigArgs.java new file mode 100644 index 0000000000..598394e1a5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubEnterpriseConfigArgs.java @@ -0,0 +1,345 @@ +// *** 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.cloudbuildv2.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ConnectionGithubEnterpriseConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final ConnectionGithubEnterpriseConfigArgs Empty = new ConnectionGithubEnterpriseConfigArgs(); + + /** + * Id of the GitHub App created from the manifest. + * + */ + @Import(name="appId") + private @Nullable Output appId; + + /** + * @return Id of the GitHub App created from the manifest. + * + */ + public Optional> appId() { + return Optional.ofNullable(this.appId); + } + + /** + * ID of the installation of the GitHub App. + * + */ + @Import(name="appInstallationId") + private @Nullable Output appInstallationId; + + /** + * @return ID of the installation of the GitHub App. + * + */ + public Optional> appInstallationId() { + return Optional.ofNullable(this.appInstallationId); + } + + /** + * The URL-friendly name of the GitHub App. + * + */ + @Import(name="appSlug") + private @Nullable Output appSlug; + + /** + * @return The URL-friendly name of the GitHub App. + * + */ + public Optional> appSlug() { + return Optional.ofNullable(this.appSlug); + } + + /** + * Required. The URI of the GitHub Enterprise host this connection is for. + * + */ + @Import(name="hostUri", required=true) + private Output hostUri; + + /** + * @return Required. The URI of the GitHub Enterprise host this connection is for. + * + */ + public Output hostUri() { + return this.hostUri; + } + + /** + * SecretManager resource containing the private key of the GitHub App, formatted as `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + */ + @Import(name="privateKeySecretVersion") + private @Nullable Output privateKeySecretVersion; + + /** + * @return SecretManager resource containing the private key of the GitHub App, formatted as `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + */ + public Optional> privateKeySecretVersion() { + return Optional.ofNullable(this.privateKeySecretVersion); + } + + /** + * Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + * + */ + @Import(name="serviceDirectoryConfig") + private @Nullable Output serviceDirectoryConfig; + + /** + * @return Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + * + */ + public Optional> serviceDirectoryConfig() { + return Optional.ofNullable(this.serviceDirectoryConfig); + } + + /** + * SSL certificate to use for requests to GitHub Enterprise. + * + */ + @Import(name="sslCa") + private @Nullable Output sslCa; + + /** + * @return SSL certificate to use for requests to GitHub Enterprise. + * + */ + public Optional> sslCa() { + return Optional.ofNullable(this.sslCa); + } + + /** + * SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + */ + @Import(name="webhookSecretSecretVersion") + private @Nullable Output webhookSecretSecretVersion; + + /** + * @return SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + */ + public Optional> webhookSecretSecretVersion() { + return Optional.ofNullable(this.webhookSecretSecretVersion); + } + + private ConnectionGithubEnterpriseConfigArgs() {} + + private ConnectionGithubEnterpriseConfigArgs(ConnectionGithubEnterpriseConfigArgs $) { + this.appId = $.appId; + this.appInstallationId = $.appInstallationId; + this.appSlug = $.appSlug; + this.hostUri = $.hostUri; + this.privateKeySecretVersion = $.privateKeySecretVersion; + this.serviceDirectoryConfig = $.serviceDirectoryConfig; + this.sslCa = $.sslCa; + this.webhookSecretSecretVersion = $.webhookSecretSecretVersion; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ConnectionGithubEnterpriseConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ConnectionGithubEnterpriseConfigArgs $; + + public Builder() { + $ = new ConnectionGithubEnterpriseConfigArgs(); + } + + public Builder(ConnectionGithubEnterpriseConfigArgs defaults) { + $ = new ConnectionGithubEnterpriseConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param appId Id of the GitHub App created from the manifest. + * + * @return builder + * + */ + public Builder appId(@Nullable Output appId) { + $.appId = appId; + return this; + } + + /** + * @param appId Id of the GitHub App created from the manifest. + * + * @return builder + * + */ + public Builder appId(Integer appId) { + return appId(Output.of(appId)); + } + + /** + * @param appInstallationId ID of the installation of the GitHub App. + * + * @return builder + * + */ + public Builder appInstallationId(@Nullable Output appInstallationId) { + $.appInstallationId = appInstallationId; + return this; + } + + /** + * @param appInstallationId ID of the installation of the GitHub App. + * + * @return builder + * + */ + public Builder appInstallationId(Integer appInstallationId) { + return appInstallationId(Output.of(appInstallationId)); + } + + /** + * @param appSlug The URL-friendly name of the GitHub App. + * + * @return builder + * + */ + public Builder appSlug(@Nullable Output appSlug) { + $.appSlug = appSlug; + return this; + } + + /** + * @param appSlug The URL-friendly name of the GitHub App. + * + * @return builder + * + */ + public Builder appSlug(String appSlug) { + return appSlug(Output.of(appSlug)); + } + + /** + * @param hostUri Required. The URI of the GitHub Enterprise host this connection is for. + * + * @return builder + * + */ + public Builder hostUri(Output hostUri) { + $.hostUri = hostUri; + return this; + } + + /** + * @param hostUri Required. The URI of the GitHub Enterprise host this connection is for. + * + * @return builder + * + */ + public Builder hostUri(String hostUri) { + return hostUri(Output.of(hostUri)); + } + + /** + * @param privateKeySecretVersion SecretManager resource containing the private key of the GitHub App, formatted as `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + * @return builder + * + */ + public Builder privateKeySecretVersion(@Nullable Output privateKeySecretVersion) { + $.privateKeySecretVersion = privateKeySecretVersion; + return this; + } + + /** + * @param privateKeySecretVersion SecretManager resource containing the private key of the GitHub App, formatted as `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + * @return builder + * + */ + public Builder privateKeySecretVersion(String privateKeySecretVersion) { + return privateKeySecretVersion(Output.of(privateKeySecretVersion)); + } + + /** + * @param serviceDirectoryConfig Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + * + * @return builder + * + */ + public Builder serviceDirectoryConfig(@Nullable Output serviceDirectoryConfig) { + $.serviceDirectoryConfig = serviceDirectoryConfig; + return this; + } + + /** + * @param serviceDirectoryConfig Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + * + * @return builder + * + */ + public Builder serviceDirectoryConfig(ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs serviceDirectoryConfig) { + return serviceDirectoryConfig(Output.of(serviceDirectoryConfig)); + } + + /** + * @param sslCa SSL certificate to use for requests to GitHub Enterprise. + * + * @return builder + * + */ + public Builder sslCa(@Nullable Output sslCa) { + $.sslCa = sslCa; + return this; + } + + /** + * @param sslCa SSL certificate to use for requests to GitHub Enterprise. + * + * @return builder + * + */ + public Builder sslCa(String sslCa) { + return sslCa(Output.of(sslCa)); + } + + /** + * @param webhookSecretSecretVersion SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + * @return builder + * + */ + public Builder webhookSecretSecretVersion(@Nullable Output webhookSecretSecretVersion) { + $.webhookSecretSecretVersion = webhookSecretSecretVersion; + return this; + } + + /** + * @param webhookSecretSecretVersion SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + * @return builder + * + */ + public Builder webhookSecretSecretVersion(String webhookSecretSecretVersion) { + return webhookSecretSecretVersion(Output.of(webhookSecretSecretVersion)); + } + + public ConnectionGithubEnterpriseConfigArgs build() { + $.hostUri = Objects.requireNonNull($.hostUri, "expected parameter 'hostUri' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs.java new file mode 100644 index 0000000000..b29efe5a01 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs.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.cloudbuildv2.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; + + +public final class ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs Empty = new ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs(); + + /** + * Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + * + */ + @Import(name="service", required=true) + private Output service; + + /** + * @return Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + * + */ + public Output service() { + return this.service; + } + + private ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs() {} + + private ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs(ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs $) { + this.service = $.service; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs $; + + public Builder() { + $ = new ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs(); + } + + public Builder(ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs defaults) { + $ = new ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param service Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + * + * @return builder + * + */ + public Builder service(Output service) { + $.service = service; + return this; + } + + /** + * @param service Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + * + * @return builder + * + */ + public Builder service(String service) { + return service(Output.of(service)); + } + + public ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs build() { + $.service = Objects.requireNonNull($.service, "expected parameter 'service' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionInstallationStateArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionInstallationStateArgs.java new file mode 100644 index 0000000000..a56002687f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionInstallationStateArgs.java @@ -0,0 +1,97 @@ +// *** 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.cloudbuildv2.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 ConnectionInstallationStateArgs extends com.pulumi.resources.ResourceArgs { + + public static final ConnectionInstallationStateArgs Empty = new ConnectionInstallationStateArgs(); + + @Import(name="actionUri") + private @Nullable Output actionUri; + + public Optional> actionUri() { + return Optional.ofNullable(this.actionUri); + } + + @Import(name="message") + private @Nullable Output message; + + public Optional> message() { + return Optional.ofNullable(this.message); + } + + @Import(name="stage") + private @Nullable Output stage; + + public Optional> stage() { + return Optional.ofNullable(this.stage); + } + + private ConnectionInstallationStateArgs() {} + + private ConnectionInstallationStateArgs(ConnectionInstallationStateArgs $) { + this.actionUri = $.actionUri; + this.message = $.message; + this.stage = $.stage; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ConnectionInstallationStateArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ConnectionInstallationStateArgs $; + + public Builder() { + $ = new ConnectionInstallationStateArgs(); + } + + public Builder(ConnectionInstallationStateArgs defaults) { + $ = new ConnectionInstallationStateArgs(Objects.requireNonNull(defaults)); + } + + public Builder actionUri(@Nullable Output actionUri) { + $.actionUri = actionUri; + return this; + } + + public Builder actionUri(String actionUri) { + return actionUri(Output.of(actionUri)); + } + + public Builder message(@Nullable Output message) { + $.message = message; + return this; + } + + public Builder message(String message) { + return message(Output.of(message)); + } + + public Builder stage(@Nullable Output stage) { + $.stage = stage; + return this; + } + + public Builder stage(String stage) { + return stage(Output.of(stage)); + } + + public ConnectionInstallationStateArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionState.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionState.java new file mode 100644 index 0000000000..81baa75c09 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/ConnectionState.java @@ -0,0 +1,506 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.cloudbuildv2.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubConfigArgs; +import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionGithubEnterpriseConfigArgs; +import com.pulumi.gcp.cloudbuildv2.inputs.ConnectionInstallationStateArgs; +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 ConnectionState extends com.pulumi.resources.ResourceArgs { + + public static final ConnectionState Empty = new ConnectionState(); + + /** + * Allows clients to store small amounts of arbitrary data. + * + */ + @Import(name="annotations") + private @Nullable Output> annotations; + + /** + * @return Allows clients to store small amounts of arbitrary data. + * + */ + public Optional>> annotations() { + return Optional.ofNullable(this.annotations); + } + + /** + * Output only. Server assigned timestamp for when the connection was created. + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return Output only. Server assigned timestamp for when the connection was created. + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + * + */ + @Import(name="disabled") + private @Nullable Output disabled; + + /** + * @return If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + * + */ + public Optional> disabled() { + return Optional.ofNullable(this.disabled); + } + + /** + * This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + * + */ + public Optional> etag() { + return Optional.ofNullable(this.etag); + } + + /** + * Configuration for connections to github.com. + * + */ + @Import(name="githubConfig") + private @Nullable Output githubConfig; + + /** + * @return Configuration for connections to github.com. + * + */ + public Optional> githubConfig() { + return Optional.ofNullable(this.githubConfig); + } + + /** + * Configuration for connections to an instance of GitHub Enterprise. + * + */ + @Import(name="githubEnterpriseConfig") + private @Nullable Output githubEnterpriseConfig; + + /** + * @return Configuration for connections to an instance of GitHub Enterprise. + * + */ + public Optional> githubEnterpriseConfig() { + return Optional.ofNullable(this.githubEnterpriseConfig); + } + + /** + * Output only. Installation state of the Connection. + * + */ + @Import(name="installationStates") + private @Nullable Output> installationStates; + + /** + * @return Output only. Installation state of the Connection. + * + */ + public Optional>> installationStates() { + return Optional.ofNullable(this.installationStates); + } + + /** + * The location for the resource + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location for the resource + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The project for the resource + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The project for the resource + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * Output only. Set to true when the connection is being set up or updated in the background. + * + */ + @Import(name="reconciling") + private @Nullable Output reconciling; + + /** + * @return Output only. Set to true when the connection is being set up or updated in the background. + * + */ + public Optional> reconciling() { + return Optional.ofNullable(this.reconciling); + } + + /** + * Output only. Server assigned timestamp for when the connection was updated. + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return Output only. Server assigned timestamp for when the connection was updated. + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private ConnectionState() {} + + private ConnectionState(ConnectionState $) { + this.annotations = $.annotations; + this.createTime = $.createTime; + this.disabled = $.disabled; + this.etag = $.etag; + this.githubConfig = $.githubConfig; + this.githubEnterpriseConfig = $.githubEnterpriseConfig; + this.installationStates = $.installationStates; + this.location = $.location; + this.name = $.name; + this.project = $.project; + this.reconciling = $.reconciling; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ConnectionState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ConnectionState $; + + public Builder() { + $ = new ConnectionState(); + } + + public Builder(ConnectionState defaults) { + $ = new ConnectionState(Objects.requireNonNull(defaults)); + } + + /** + * @param annotations Allows clients to store small amounts of arbitrary data. + * + * @return builder + * + */ + public Builder annotations(@Nullable Output> annotations) { + $.annotations = annotations; + return this; + } + + /** + * @param annotations Allows clients to store small amounts of arbitrary data. + * + * @return builder + * + */ + public Builder annotations(Map annotations) { + return annotations(Output.of(annotations)); + } + + /** + * @param createTime Output only. Server assigned timestamp for when the connection was created. + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime Output only. Server assigned timestamp for when the connection was created. + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param disabled If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + * + * @return builder + * + */ + public Builder disabled(@Nullable Output disabled) { + $.disabled = disabled; + return this; + } + + /** + * @param disabled If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + * + * @return builder + * + */ + public Builder disabled(Boolean disabled) { + return disabled(Output.of(disabled)); + } + + /** + * @param etag This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + + /** + * @param githubConfig Configuration for connections to github.com. + * + * @return builder + * + */ + public Builder githubConfig(@Nullable Output githubConfig) { + $.githubConfig = githubConfig; + return this; + } + + /** + * @param githubConfig Configuration for connections to github.com. + * + * @return builder + * + */ + public Builder githubConfig(ConnectionGithubConfigArgs githubConfig) { + return githubConfig(Output.of(githubConfig)); + } + + /** + * @param githubEnterpriseConfig Configuration for connections to an instance of GitHub Enterprise. + * + * @return builder + * + */ + public Builder githubEnterpriseConfig(@Nullable Output githubEnterpriseConfig) { + $.githubEnterpriseConfig = githubEnterpriseConfig; + return this; + } + + /** + * @param githubEnterpriseConfig Configuration for connections to an instance of GitHub Enterprise. + * + * @return builder + * + */ + public Builder githubEnterpriseConfig(ConnectionGithubEnterpriseConfigArgs githubEnterpriseConfig) { + return githubEnterpriseConfig(Output.of(githubEnterpriseConfig)); + } + + /** + * @param installationStates Output only. Installation state of the Connection. + * + * @return builder + * + */ + public Builder installationStates(@Nullable Output> installationStates) { + $.installationStates = installationStates; + return this; + } + + /** + * @param installationStates Output only. Installation state of the Connection. + * + * @return builder + * + */ + public Builder installationStates(List installationStates) { + return installationStates(Output.of(installationStates)); + } + + /** + * @param installationStates Output only. Installation state of the Connection. + * + * @return builder + * + */ + public Builder installationStates(ConnectionInstallationStateArgs... installationStates) { + return installationStates(List.of(installationStates)); + } + + /** + * @param location The location for the resource + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location for the resource + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param project The project for the resource + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The project for the resource + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param reconciling Output only. Set to true when the connection is being set up or updated in the background. + * + * @return builder + * + */ + public Builder reconciling(@Nullable Output reconciling) { + $.reconciling = reconciling; + return this; + } + + /** + * @param reconciling Output only. Set to true when the connection is being set up or updated in the background. + * + * @return builder + * + */ + public Builder reconciling(Boolean reconciling) { + return reconciling(Output.of(reconciling)); + } + + /** + * @param updateTime Output only. Server assigned timestamp for when the connection was updated. + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime Output only. Server assigned timestamp for when the connection was updated. + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public ConnectionState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/RepositoryState.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/RepositoryState.java new file mode 100644 index 0000000000..0c2f65f62b --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/inputs/RepositoryState.java @@ -0,0 +1,380 @@ +// *** 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.cloudbuildv2.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class RepositoryState extends com.pulumi.resources.ResourceArgs { + + public static final RepositoryState Empty = new RepositoryState(); + + /** + * Allows clients to store small amounts of arbitrary data. + * + */ + @Import(name="annotations") + private @Nullable Output> annotations; + + /** + * @return Allows clients to store small amounts of arbitrary data. + * + */ + public Optional>> annotations() { + return Optional.ofNullable(this.annotations); + } + + /** + * Output only. Server assigned timestamp for when the connection was created. + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return Output only. Server assigned timestamp for when the connection was created. + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + * + */ + public Optional> etag() { + return Optional.ofNullable(this.etag); + } + + /** + * The location for the resource + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location for the resource + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Name of the repository. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return Name of the repository. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The connection for the resource + * + */ + @Import(name="parentConnection") + private @Nullable Output parentConnection; + + /** + * @return The connection for the resource + * + */ + public Optional> parentConnection() { + return Optional.ofNullable(this.parentConnection); + } + + /** + * The project for the resource + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The project for the resource + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * Required. Git Clone HTTPS URI. + * + */ + @Import(name="remoteUri") + private @Nullable Output remoteUri; + + /** + * @return Required. Git Clone HTTPS URI. + * + */ + public Optional> remoteUri() { + return Optional.ofNullable(this.remoteUri); + } + + /** + * Output only. Server assigned timestamp for when the connection was updated. + * + */ + @Import(name="updateTime") + private @Nullable Output updateTime; + + /** + * @return Output only. Server assigned timestamp for when the connection was updated. + * + */ + public Optional> updateTime() { + return Optional.ofNullable(this.updateTime); + } + + private RepositoryState() {} + + private RepositoryState(RepositoryState $) { + this.annotations = $.annotations; + this.createTime = $.createTime; + this.etag = $.etag; + this.location = $.location; + this.name = $.name; + this.parentConnection = $.parentConnection; + this.project = $.project; + this.remoteUri = $.remoteUri; + this.updateTime = $.updateTime; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(RepositoryState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private RepositoryState $; + + public Builder() { + $ = new RepositoryState(); + } + + public Builder(RepositoryState defaults) { + $ = new RepositoryState(Objects.requireNonNull(defaults)); + } + + /** + * @param annotations Allows clients to store small amounts of arbitrary data. + * + * @return builder + * + */ + public Builder annotations(@Nullable Output> annotations) { + $.annotations = annotations; + return this; + } + + /** + * @param annotations Allows clients to store small amounts of arbitrary data. + * + * @return builder + * + */ + public Builder annotations(Map annotations) { + return annotations(Output.of(annotations)); + } + + /** + * @param createTime Output only. Server assigned timestamp for when the connection was created. + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime Output only. Server assigned timestamp for when the connection was created. + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param etag This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + + /** + * @param location The location for the resource + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location for the resource + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name Name of the repository. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name Name of the repository. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param parentConnection The connection for the resource + * + * @return builder + * + */ + public Builder parentConnection(@Nullable Output parentConnection) { + $.parentConnection = parentConnection; + return this; + } + + /** + * @param parentConnection The connection for the resource + * + * @return builder + * + */ + public Builder parentConnection(String parentConnection) { + return parentConnection(Output.of(parentConnection)); + } + + /** + * @param project The project for the resource + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The project for the resource + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param remoteUri Required. Git Clone HTTPS URI. + * + * @return builder + * + */ + public Builder remoteUri(@Nullable Output remoteUri) { + $.remoteUri = remoteUri; + return this; + } + + /** + * @param remoteUri Required. Git Clone HTTPS URI. + * + * @return builder + * + */ + public Builder remoteUri(String remoteUri) { + return remoteUri(Output.of(remoteUri)); + } + + /** + * @param updateTime Output only. Server assigned timestamp for when the connection was updated. + * + * @return builder + * + */ + public Builder updateTime(@Nullable Output updateTime) { + $.updateTime = updateTime; + return this; + } + + /** + * @param updateTime Output only. Server assigned timestamp for when the connection was updated. + * + * @return builder + * + */ + public Builder updateTime(String updateTime) { + return updateTime(Output.of(updateTime)); + } + + public RepositoryState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubConfig.java new file mode 100644 index 0000000000..ca0eb348e0 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubConfig.java @@ -0,0 +1,77 @@ +// *** 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.cloudbuildv2.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.cloudbuildv2.outputs.ConnectionGithubConfigAuthorizerCredential; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ConnectionGithubConfig { + /** + * @return GitHub App installation id. + * + */ + private @Nullable Integer appInstallationId; + /** + * @return OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + * + */ + private @Nullable ConnectionGithubConfigAuthorizerCredential authorizerCredential; + + private ConnectionGithubConfig() {} + /** + * @return GitHub App installation id. + * + */ + public Optional appInstallationId() { + return Optional.ofNullable(this.appInstallationId); + } + /** + * @return OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + * + */ + public Optional authorizerCredential() { + return Optional.ofNullable(this.authorizerCredential); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ConnectionGithubConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Integer appInstallationId; + private @Nullable ConnectionGithubConfigAuthorizerCredential authorizerCredential; + public Builder() {} + public Builder(ConnectionGithubConfig defaults) { + Objects.requireNonNull(defaults); + this.appInstallationId = defaults.appInstallationId; + this.authorizerCredential = defaults.authorizerCredential; + } + + @CustomType.Setter + public Builder appInstallationId(@Nullable Integer appInstallationId) { + this.appInstallationId = appInstallationId; + return this; + } + @CustomType.Setter + public Builder authorizerCredential(@Nullable ConnectionGithubConfigAuthorizerCredential authorizerCredential) { + this.authorizerCredential = authorizerCredential; + return this; + } + public ConnectionGithubConfig build() { + final var o = new ConnectionGithubConfig(); + o.appInstallationId = appInstallationId; + o.authorizerCredential = authorizerCredential; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubConfigAuthorizerCredential.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubConfigAuthorizerCredential.java new file mode 100644 index 0000000000..41a97eea47 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubConfigAuthorizerCredential.java @@ -0,0 +1,76 @@ +// *** 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.cloudbuildv2.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 ConnectionGithubConfigAuthorizerCredential { + /** + * @return A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + */ + private @Nullable String oauthTokenSecretVersion; + /** + * @return The username associated to this token. + * + */ + private @Nullable String username; + + private ConnectionGithubConfigAuthorizerCredential() {} + /** + * @return A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + */ + public Optional oauthTokenSecretVersion() { + return Optional.ofNullable(this.oauthTokenSecretVersion); + } + /** + * @return The username associated to this token. + * + */ + public Optional username() { + return Optional.ofNullable(this.username); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ConnectionGithubConfigAuthorizerCredential defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String oauthTokenSecretVersion; + private @Nullable String username; + public Builder() {} + public Builder(ConnectionGithubConfigAuthorizerCredential defaults) { + Objects.requireNonNull(defaults); + this.oauthTokenSecretVersion = defaults.oauthTokenSecretVersion; + this.username = defaults.username; + } + + @CustomType.Setter + public Builder oauthTokenSecretVersion(@Nullable String oauthTokenSecretVersion) { + this.oauthTokenSecretVersion = oauthTokenSecretVersion; + return this; + } + @CustomType.Setter + public Builder username(@Nullable String username) { + this.username = username; + return this; + } + public ConnectionGithubConfigAuthorizerCredential build() { + final var o = new ConnectionGithubConfigAuthorizerCredential(); + o.oauthTokenSecretVersion = oauthTokenSecretVersion; + o.username = username; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubEnterpriseConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubEnterpriseConfig.java new file mode 100644 index 0000000000..e050da11e7 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubEnterpriseConfig.java @@ -0,0 +1,198 @@ +// *** 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.cloudbuildv2.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.cloudbuildv2.outputs.ConnectionGithubEnterpriseConfigServiceDirectoryConfig; +import java.lang.Integer; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ConnectionGithubEnterpriseConfig { + /** + * @return Id of the GitHub App created from the manifest. + * + */ + private @Nullable Integer appId; + /** + * @return ID of the installation of the GitHub App. + * + */ + private @Nullable Integer appInstallationId; + /** + * @return The URL-friendly name of the GitHub App. + * + */ + private @Nullable String appSlug; + /** + * @return Required. The URI of the GitHub Enterprise host this connection is for. + * + */ + private String hostUri; + /** + * @return SecretManager resource containing the private key of the GitHub App, formatted as `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + */ + private @Nullable String privateKeySecretVersion; + /** + * @return Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + * + */ + private @Nullable ConnectionGithubEnterpriseConfigServiceDirectoryConfig serviceDirectoryConfig; + /** + * @return SSL certificate to use for requests to GitHub Enterprise. + * + */ + private @Nullable String sslCa; + /** + * @return SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + */ + private @Nullable String webhookSecretSecretVersion; + + private ConnectionGithubEnterpriseConfig() {} + /** + * @return Id of the GitHub App created from the manifest. + * + */ + public Optional appId() { + return Optional.ofNullable(this.appId); + } + /** + * @return ID of the installation of the GitHub App. + * + */ + public Optional appInstallationId() { + return Optional.ofNullable(this.appInstallationId); + } + /** + * @return The URL-friendly name of the GitHub App. + * + */ + public Optional appSlug() { + return Optional.ofNullable(this.appSlug); + } + /** + * @return Required. The URI of the GitHub Enterprise host this connection is for. + * + */ + public String hostUri() { + return this.hostUri; + } + /** + * @return SecretManager resource containing the private key of the GitHub App, formatted as `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + */ + public Optional privateKeySecretVersion() { + return Optional.ofNullable(this.privateKeySecretVersion); + } + /** + * @return Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + * + */ + public Optional serviceDirectoryConfig() { + return Optional.ofNullable(this.serviceDirectoryConfig); + } + /** + * @return SSL certificate to use for requests to GitHub Enterprise. + * + */ + public Optional sslCa() { + return Optional.ofNullable(this.sslCa); + } + /** + * @return SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*{@literal /}secrets/*{@literal /}versions/*`. + * + */ + public Optional webhookSecretSecretVersion() { + return Optional.ofNullable(this.webhookSecretSecretVersion); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ConnectionGithubEnterpriseConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Integer appId; + private @Nullable Integer appInstallationId; + private @Nullable String appSlug; + private String hostUri; + private @Nullable String privateKeySecretVersion; + private @Nullable ConnectionGithubEnterpriseConfigServiceDirectoryConfig serviceDirectoryConfig; + private @Nullable String sslCa; + private @Nullable String webhookSecretSecretVersion; + public Builder() {} + public Builder(ConnectionGithubEnterpriseConfig defaults) { + Objects.requireNonNull(defaults); + this.appId = defaults.appId; + this.appInstallationId = defaults.appInstallationId; + this.appSlug = defaults.appSlug; + this.hostUri = defaults.hostUri; + this.privateKeySecretVersion = defaults.privateKeySecretVersion; + this.serviceDirectoryConfig = defaults.serviceDirectoryConfig; + this.sslCa = defaults.sslCa; + this.webhookSecretSecretVersion = defaults.webhookSecretSecretVersion; + } + + @CustomType.Setter + public Builder appId(@Nullable Integer appId) { + this.appId = appId; + return this; + } + @CustomType.Setter + public Builder appInstallationId(@Nullable Integer appInstallationId) { + this.appInstallationId = appInstallationId; + return this; + } + @CustomType.Setter + public Builder appSlug(@Nullable String appSlug) { + this.appSlug = appSlug; + return this; + } + @CustomType.Setter + public Builder hostUri(String hostUri) { + this.hostUri = Objects.requireNonNull(hostUri); + return this; + } + @CustomType.Setter + public Builder privateKeySecretVersion(@Nullable String privateKeySecretVersion) { + this.privateKeySecretVersion = privateKeySecretVersion; + return this; + } + @CustomType.Setter + public Builder serviceDirectoryConfig(@Nullable ConnectionGithubEnterpriseConfigServiceDirectoryConfig serviceDirectoryConfig) { + this.serviceDirectoryConfig = serviceDirectoryConfig; + return this; + } + @CustomType.Setter + public Builder sslCa(@Nullable String sslCa) { + this.sslCa = sslCa; + return this; + } + @CustomType.Setter + public Builder webhookSecretSecretVersion(@Nullable String webhookSecretSecretVersion) { + this.webhookSecretSecretVersion = webhookSecretSecretVersion; + return this; + } + public ConnectionGithubEnterpriseConfig build() { + final var o = new ConnectionGithubEnterpriseConfig(); + o.appId = appId; + o.appInstallationId = appInstallationId; + o.appSlug = appSlug; + o.hostUri = hostUri; + o.privateKeySecretVersion = privateKeySecretVersion; + o.serviceDirectoryConfig = serviceDirectoryConfig; + o.sslCa = sslCa; + o.webhookSecretSecretVersion = webhookSecretSecretVersion; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfig.java new file mode 100644 index 0000000000..cd19be666e --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionGithubEnterpriseConfigServiceDirectoryConfig.java @@ -0,0 +1,54 @@ +// *** 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.cloudbuildv2.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class ConnectionGithubEnterpriseConfigServiceDirectoryConfig { + /** + * @return Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + * + */ + private String service; + + private ConnectionGithubEnterpriseConfigServiceDirectoryConfig() {} + /** + * @return Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + * + */ + public String service() { + return this.service; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ConnectionGithubEnterpriseConfigServiceDirectoryConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String service; + public Builder() {} + public Builder(ConnectionGithubEnterpriseConfigServiceDirectoryConfig defaults) { + Objects.requireNonNull(defaults); + this.service = defaults.service; + } + + @CustomType.Setter + public Builder service(String service) { + this.service = Objects.requireNonNull(service); + return this; + } + public ConnectionGithubEnterpriseConfigServiceDirectoryConfig build() { + final var o = new ConnectionGithubEnterpriseConfigServiceDirectoryConfig(); + o.service = service; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionInstallationState.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionInstallationState.java new file mode 100644 index 0000000000..c98dcaf8a9 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudbuildv2/outputs/ConnectionInstallationState.java @@ -0,0 +1,72 @@ +// *** 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.cloudbuildv2.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 ConnectionInstallationState { + private @Nullable String actionUri; + private @Nullable String message; + private @Nullable String stage; + + private ConnectionInstallationState() {} + public Optional actionUri() { + return Optional.ofNullable(this.actionUri); + } + public Optional message() { + return Optional.ofNullable(this.message); + } + public Optional stage() { + return Optional.ofNullable(this.stage); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ConnectionInstallationState defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String actionUri; + private @Nullable String message; + private @Nullable String stage; + public Builder() {} + public Builder(ConnectionInstallationState defaults) { + Objects.requireNonNull(defaults); + this.actionUri = defaults.actionUri; + this.message = defaults.message; + this.stage = defaults.stage; + } + + @CustomType.Setter + public Builder actionUri(@Nullable String actionUri) { + this.actionUri = actionUri; + return this; + } + @CustomType.Setter + public Builder message(@Nullable String message) { + this.message = message; + return this; + } + @CustomType.Setter + public Builder stage(@Nullable String stage) { + this.stage = stage; + return this; + } + public ConnectionInstallationState build() { + final var o = new ConnectionInstallationState(); + o.actionUri = actionUri; + o.message = message; + o.stage = stage; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctions/Function.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctions/Function.java index e9bb4d4750..6c32e5fc2a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctions/Function.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctions/Function.java @@ -378,14 +378,14 @@ public Output>> labels() { * */ @Export(name="maxInstances", type=Integer.class, parameters={}) - private Output maxInstances; + private Output maxInstances; /** * @return The limit on the maximum number of function instances that may coexist at a given time. * */ - public Output> maxInstances() { - return Codegen.optional(this.maxInstances); + public Output maxInstances() { + return this.maxInstances; } /** * The limit on the minimum number of function instances that may coexist at a given time. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctions/outputs/GetFunctionResult.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctions/outputs/GetFunctionResult.java index 1eeaa22504..49378f98be 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctions/outputs/GetFunctionResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudfunctions/outputs/GetFunctionResult.java @@ -68,7 +68,7 @@ public final class GetFunctionResult { */ private Map labels; /** - * @return The limit on the maximum number of function instances that may coexist at a given time. + * @return The limit on the maximum number of function instances that may coexist at a given time. If unset or set to `0`, the API default will be used. * */ private Integer maxInstances; @@ -207,7 +207,7 @@ public Map labels() { return this.labels; } /** - * @return The limit on the maximum number of function instances that may coexist at a given time. + * @return The limit on the maximum number of function instances that may coexist at a given time. If unset or set to `0`, the API default will be used. * */ public Integer maxInstances() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudidentity/GroupMembership.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudidentity/GroupMembership.java index 18730aa823..1e1b5ad2f8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudidentity/GroupMembership.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudidentity/GroupMembership.java @@ -186,7 +186,6 @@ public Output group() { } /** * EntityKey of the member. - * Structure is documented below. * */ @Export(name="memberKey", type=GroupMembershipMemberKey.class, parameters={}) @@ -194,7 +193,6 @@ public Output group() { /** * @return EntityKey of the member. - * Structure is documented below. * */ public Output memberKey() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudidentity/GroupMembershipArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudidentity/GroupMembershipArgs.java index d1ba909955..94066ed81e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudidentity/GroupMembershipArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudidentity/GroupMembershipArgs.java @@ -36,7 +36,6 @@ public Output group() { /** * EntityKey of the member. - * Structure is documented below. * */ @Import(name="memberKey") @@ -44,7 +43,6 @@ public Output group() { /** * @return EntityKey of the member. - * Structure is documented below. * */ public Optional> memberKey() { @@ -137,7 +135,6 @@ public Builder group(String group) { /** * @param memberKey EntityKey of the member. - * Structure is documented below. * * @return builder * @@ -149,7 +146,6 @@ public Builder memberKey(@Nullable Output memberKe /** * @param memberKey EntityKey of the member. - * Structure is documented below. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudidentity/inputs/GroupMembershipState.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudidentity/inputs/GroupMembershipState.java index 9a86be86f5..7ad222d1d6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudidentity/inputs/GroupMembershipState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudidentity/inputs/GroupMembershipState.java @@ -51,7 +51,6 @@ public Optional> group() { /** * EntityKey of the member. - * Structure is documented below. * */ @Import(name="memberKey") @@ -59,7 +58,6 @@ public Optional> group() { /** * @return EntityKey of the member. - * Structure is documented below. * */ public Optional> memberKey() { @@ -224,7 +222,6 @@ public Builder group(String group) { /** * @param memberKey EntityKey of the member. - * Structure is documented below. * * @return builder * @@ -236,7 +233,6 @@ public Builder memberKey(@Nullable Output memberKe /** * @param memberKey EntityKey of the member. - * Structure is documented below. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/Service.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/Service.java index 1af089a3b4..7848c0c8e8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/Service.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/Service.java @@ -46,90 +46,6 @@ * Have a look at the Cloud Run Anthos example below. * * ## Example Usage - * ### Cloud Run Service Pubsub - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.cloudrun.Service; - * import com.pulumi.gcp.cloudrun.ServiceArgs; - * import com.pulumi.gcp.cloudrun.inputs.ServiceTemplateArgs; - * import com.pulumi.gcp.cloudrun.inputs.ServiceTemplateSpecArgs; - * import com.pulumi.gcp.cloudrun.inputs.ServiceTrafficArgs; - * import com.pulumi.gcp.serviceAccount.Account; - * import com.pulumi.gcp.serviceAccount.AccountArgs; - * import com.pulumi.gcp.cloudrun.IamBinding; - * import com.pulumi.gcp.cloudrun.IamBindingArgs; - * import com.pulumi.gcp.projects.IAMBinding; - * import com.pulumi.gcp.projects.IAMBindingArgs; - * import com.pulumi.gcp.pubsub.Topic; - * import com.pulumi.gcp.pubsub.Subscription; - * import com.pulumi.gcp.pubsub.SubscriptionArgs; - * import com.pulumi.gcp.pubsub.inputs.SubscriptionPushConfigArgs; - * import com.pulumi.gcp.pubsub.inputs.SubscriptionPushConfigOidcTokenArgs; - * 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 Service("default", ServiceArgs.builder() - * .location("us-central1") - * .template(ServiceTemplateArgs.builder() - * .spec(ServiceTemplateSpecArgs.builder() - * .containers(ServiceTemplateSpecContainerArgs.builder() - * .image("gcr.io/cloudrun/hello") - * .build()) - * .build()) - * .build()) - * .traffics(ServiceTrafficArgs.builder() - * .percent(100) - * .latestRevision(true) - * .build()) - * .build()); - * - * var sa = new Account("sa", AccountArgs.builder() - * .accountId("cloud-run-pubsub-invoker") - * .displayName("Cloud Run Pub/Sub Invoker") - * .build()); - * - * var binding = new IamBinding("binding", IamBindingArgs.builder() - * .location(default_.location()) - * .service(default_.name()) - * .role("roles/run.invoker") - * .members(sa.email().applyValue(email -> String.format("serviceAccount:%s", email))) - * .build()); - * - * var project = new IAMBinding("project", IAMBindingArgs.builder() - * .role("roles/iam.serviceAccountTokenCreator") - * .members(sa.email().applyValue(email -> String.format("serviceAccount:%s", email))) - * .build()); - * - * var topic = new Topic("topic"); - * - * var subscription = new Subscription("subscription", SubscriptionArgs.builder() - * .topic(topic.name()) - * .pushConfig(SubscriptionPushConfigArgs.builder() - * .pushEndpoint(default_.statuses().applyValue(statuses -> statuses[0].url())) - * .oidcToken(SubscriptionPushConfigOidcTokenArgs.builder() - * .serviceAccountEmail(sa.email()) - * .build()) - * .attributes(Map.of("x-goog-version", "v1")) - * .build()) - * .build()); - * - * } - * } - * ``` * ### Cloud Run Service Basic * ```java * package generated_program; @@ -222,7 +138,7 @@ * .annotations(Map.ofEntries( * Map.entry("autoscaling.knative.dev/maxScale", "1000"), * Map.entry("run.googleapis.com/cloudsql-instances", instance.connectionName()), - * Map.entry("run.googleapis.com/client-name", "demo") + * Map.entry("run.googleapis.com/client-name", "terraform") * )) * .build()) * .build()) diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/DomainMappingMetadataArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/DomainMappingMetadataArgs.java index ef2484d18b..2467e8f86b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/DomainMappingMetadataArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/DomainMappingMetadataArgs.java @@ -17,27 +17,9 @@ public final class DomainMappingMetadataArgs extends com.pulumi.resources.Resour public static final DomainMappingMetadataArgs Empty = new DomainMappingMetadataArgs(); - /** - * Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * - */ @Import(name="annotations") private @Nullable Output> annotations; - /** - * @return Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * - */ public Optional>> annotations() { return Optional.ofNullable(this.annotations); } @@ -186,33 +168,11 @@ public Builder(DomainMappingMetadataArgs defaults) { $ = new DomainMappingMetadataArgs(Objects.requireNonNull(defaults)); } - /** - * @param annotations Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * - * @return builder - * - */ public Builder annotations(@Nullable Output> annotations) { $.annotations = annotations; return this; } - /** - * @param annotations Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * - * @return builder - * - */ public Builder annotations(Map annotations) { return annotations(Output.of(annotations)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/ServiceMetadataArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/ServiceMetadataArgs.java index 89c22b6d16..7f4ab657d9 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/ServiceMetadataArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/ServiceMetadataArgs.java @@ -17,33 +17,9 @@ public final class ServiceMetadataArgs extends com.pulumi.resources.ResourceArgs public static final ServiceMetadataArgs Empty = new ServiceMetadataArgs(); - /** - * Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - * - */ @Import(name="annotations") private @Nullable Output> annotations; - /** - * @return Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - * - */ public Optional>> annotations() { return Optional.ofNullable(this.annotations); } @@ -192,39 +168,11 @@ public Builder(ServiceMetadataArgs defaults) { $ = new ServiceMetadataArgs(Objects.requireNonNull(defaults)); } - /** - * @param annotations Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - * - * @return builder - * - */ public Builder annotations(@Nullable Output> annotations) { $.annotations = annotations; return this; } - /** - * @param annotations Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - * - * @return builder - * - */ public Builder annotations(Map annotations) { return annotations(Output.of(annotations)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/ServiceTemplateMetadataArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/ServiceTemplateMetadataArgs.java index 08f04e3471..befae7542d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/ServiceTemplateMetadataArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/ServiceTemplateMetadataArgs.java @@ -17,33 +17,9 @@ public final class ServiceTemplateMetadataArgs extends com.pulumi.resources.Reso public static final ServiceTemplateMetadataArgs Empty = new ServiceTemplateMetadataArgs(); - /** - * Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - * - */ @Import(name="annotations") private @Nullable Output> annotations; - /** - * @return Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - * - */ public Optional>> annotations() { return Optional.ofNullable(this.annotations); } @@ -214,39 +190,11 @@ public Builder(ServiceTemplateMetadataArgs defaults) { $ = new ServiceTemplateMetadataArgs(Objects.requireNonNull(defaults)); } - /** - * @param annotations Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - * - * @return builder - * - */ public Builder annotations(@Nullable Output> annotations) { $.annotations = annotations; return this; } - /** - * @param annotations Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - * - * @return builder - * - */ public Builder annotations(Map annotations) { return annotations(Output.of(annotations)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/ServiceTemplateSpecContainerArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/ServiceTemplateSpecContainerArgs.java index 078bff68c8..3bbea046d2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/ServiceTemplateSpecContainerArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/inputs/ServiceTemplateSpecContainerArgs.java @@ -156,21 +156,9 @@ public Output image() { return this.image; } - /** - * Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - * https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - * Structure is documented below. - * - */ @Import(name="livenessProbe") private @Nullable Output livenessProbe; - /** - * @return Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - * https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - * Structure is documented below. - * - */ public Optional> livenessProbe() { return Optional.ofNullable(this.livenessProbe); } @@ -536,27 +524,11 @@ public Builder image(String image) { return image(Output.of(image)); } - /** - * @param livenessProbe Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - * https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - * Structure is documented below. - * - * @return builder - * - */ public Builder livenessProbe(@Nullable Output livenessProbe) { $.livenessProbe = livenessProbe; return this; } - /** - * @param livenessProbe Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - * https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - * Structure is documented below. - * - * @return builder - * - */ public Builder livenessProbe(ServiceTemplateSpecContainerLivenessProbeArgs livenessProbe) { return livenessProbe(Output.of(livenessProbe)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/DomainMappingMetadata.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/DomainMappingMetadata.java index 08ac78c923..9d0b8f199b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/DomainMappingMetadata.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/DomainMappingMetadata.java @@ -13,15 +13,6 @@ @CustomType public final class DomainMappingMetadata { - /** - * @return Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * - */ private @Nullable Map annotations; /** * @return A sequence number representing a specific generation of the desired state. @@ -67,15 +58,6 @@ public final class DomainMappingMetadata { private @Nullable String uid; private DomainMappingMetadata() {} - /** - * @return Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * - */ public Map annotations() { return this.annotations == null ? Map.of() : this.annotations; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/ServiceMetadata.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/ServiceMetadata.java index 3ba5dc68d8..90526eaa99 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/ServiceMetadata.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/ServiceMetadata.java @@ -13,18 +13,6 @@ @CustomType public final class ServiceMetadata { - /** - * @return Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - * - */ private @Nullable Map annotations; /** * @return A sequence number representing a specific generation of the desired state. @@ -70,18 +58,6 @@ public final class ServiceMetadata { private @Nullable String uid; private ServiceMetadata() {} - /** - * @return Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - * - */ public Map annotations() { return this.annotations == null ? Map.of() : this.annotations; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/ServiceTemplateMetadata.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/ServiceTemplateMetadata.java index b6dfa81c07..020a90ade2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/ServiceTemplateMetadata.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/ServiceTemplateMetadata.java @@ -13,18 +13,6 @@ @CustomType public final class ServiceTemplateMetadata { - /** - * @return Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - * - */ private @Nullable Map annotations; /** * @return A sequence number representing a specific generation of the desired state. @@ -78,18 +66,6 @@ public final class ServiceTemplateMetadata { private @Nullable String uid; private ServiceTemplateMetadata() {} - /** - * @return Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - * - */ public Map annotations() { return this.annotations == null ? Map.of() : this.annotations; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/ServiceTemplateSpecContainer.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/ServiceTemplateSpecContainer.java index 9690af1b05..544af1a8cf 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/ServiceTemplateSpecContainer.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrun/outputs/ServiceTemplateSpecContainer.java @@ -73,12 +73,6 @@ public final class ServiceTemplateSpecContainer { * */ private String image; - /** - * @return Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - * https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - * Structure is documented below. - * - */ private @Nullable ServiceTemplateSpecContainerLivenessProbe livenessProbe; /** * @return List of open ports in the container. @@ -182,12 +176,6 @@ public List envs() { public String image() { return this.image; } - /** - * @return Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - * https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - * Structure is documented below. - * - */ public Optional livenessProbe() { return Optional.ofNullable(this.livenessProbe); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Job.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Job.java index a00ce573ca..c8a7ecf8cb 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Job.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/Job.java @@ -250,59 +250,6 @@ * } * } * ``` - * ### Cloudrunv2 Job Probes - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.cloudrunv2.Job; - * import com.pulumi.gcp.cloudrunv2.JobArgs; - * import com.pulumi.gcp.cloudrunv2.inputs.JobTemplateArgs; - * import com.pulumi.gcp.cloudrunv2.inputs.JobTemplateTemplateArgs; - * 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 Job("default", JobArgs.builder() - * .launchStage("BETA") - * .location("us-central1") - * .template(JobTemplateArgs.builder() - * .template(JobTemplateTemplateArgs.builder() - * .containers(JobTemplateTemplateContainerArgs.builder() - * .image("us-docker.pkg.dev/cloudrun/container/hello") - * .livenessProbe(JobTemplateTemplateContainerLivenessProbeArgs.builder() - * .httpGet(JobTemplateTemplateContainerLivenessProbeHttpGetArgs.builder() - * .path("/") - * .build()) - * .build()) - * .startupProbe(JobTemplateTemplateContainerStartupProbeArgs.builder() - * .failureThreshold(1) - * .initialDelaySeconds(0) - * .periodSeconds(3) - * .tcpSocket(JobTemplateTemplateContainerStartupProbeTcpSocketArgs.builder() - * .port(8080) - * .build()) - * .timeoutSeconds(1) - * .build()) - * .build()) - * .build()) - * .build()) - * .build()); - * - * } - * } - * ``` * ### Cloudrunv2 Job Secret * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/JobTemplateTemplateContainerArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/JobTemplateTemplateContainerArgs.java index dcbac28654..3b50bac52d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/JobTemplateTemplateContainerArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/JobTemplateTemplateContainerArgs.java @@ -85,18 +85,30 @@ public Output image() { } /** + * (Optional, Deprecated) * Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. * + * @deprecated + * Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. */ @Import(name="livenessProbe") private @Nullable Output livenessProbe; /** - * @return Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * @return (Optional, Deprecated) + * Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. * + * @deprecated + * Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. */ public Optional> livenessProbe() { return Optional.ofNullable(this.livenessProbe); } @@ -153,18 +165,30 @@ public Optional> resources() { } /** + * (Optional, Deprecated) * Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. * + * @deprecated + * Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. */ @Import(name="startupProbe") private @Nullable Output startupProbe; /** - * @return Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * @return (Optional, Deprecated) + * Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. * + * @deprecated + * Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. */ public Optional> startupProbe() { return Optional.ofNullable(this.startupProbe); } @@ -353,24 +377,36 @@ public Builder image(String image) { } /** - * @param livenessProbe Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * @param livenessProbe (Optional, Deprecated) + * Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. * * @return builder * + * @deprecated + * Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. */ public Builder livenessProbe(@Nullable Output livenessProbe) { $.livenessProbe = livenessProbe; return this; } /** - * @param livenessProbe Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * @param livenessProbe (Optional, Deprecated) + * Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. * * @return builder * + * @deprecated + * Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. */ public Builder livenessProbe(JobTemplateTemplateContainerLivenessProbeArgs livenessProbe) { return livenessProbe(Output.of(livenessProbe)); } @@ -457,24 +493,36 @@ public Builder resources(JobTemplateTemplateContainerResourcesArgs resources) { } /** - * @param startupProbe Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * @param startupProbe (Optional, Deprecated) + * Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. * * @return builder * + * @deprecated + * Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. */ public Builder startupProbe(@Nullable Output startupProbe) { $.startupProbe = startupProbe; return this; } /** - * @param startupProbe Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * @param startupProbe (Optional, Deprecated) + * Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. * * @return builder * + * @deprecated + * Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. */ public Builder startupProbe(JobTemplateTemplateContainerStartupProbeArgs startupProbe) { return startupProbe(Output.of(startupProbe)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/ServiceTemplateContainerLivenessProbeArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/ServiceTemplateContainerLivenessProbeArgs.java index c700a897cc..fa6c098c47 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/ServiceTemplateContainerLivenessProbeArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/inputs/ServiceTemplateContainerLivenessProbeArgs.java @@ -33,7 +33,7 @@ public Optional> failureThreshold() { } /** - * HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + * HTTPGet specifies the http request to perform. * Structure is documented below. * */ @@ -41,7 +41,7 @@ public Optional> failureThreshold() { private @Nullable Output httpGet; /** - * @return HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + * @return HTTPGet specifies the http request to perform. * Structure is documented below. * */ @@ -80,18 +80,28 @@ public Optional> periodSeconds() { } /** - * TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + * (Optional, Deprecated) + * TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. * Structure is documented below. * + * @deprecated + * Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. */ @Import(name="tcpSocket") private @Nullable Output tcpSocket; /** - * @return TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + * @return (Optional, Deprecated) + * TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. * Structure is documented below. * + * @deprecated + * Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. */ public Optional> tcpSocket() { return Optional.ofNullable(this.tcpSocket); } @@ -162,7 +172,7 @@ public Builder failureThreshold(Integer failureThreshold) { } /** - * @param httpGet HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + * @param httpGet HTTPGet specifies the http request to perform. * Structure is documented below. * * @return builder @@ -174,7 +184,7 @@ public Builder httpGet(@Nullable Output tcpSocket) { $.tcpSocket = tcpSocket; return this; } /** - * @param tcpSocket TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + * @param tcpSocket (Optional, Deprecated) + * TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. * Structure is documented below. * * @return builder * + * @deprecated + * Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. */ public Builder tcpSocket(ServiceTemplateContainerLivenessProbeTcpSocketArgs tcpSocket) { return tcpSocket(Output.of(tcpSocket)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/outputs/JobTemplateTemplateContainer.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/outputs/JobTemplateTemplateContainer.java index 94edcca211..1daa7b6148 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/outputs/JobTemplateTemplateContainer.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/outputs/JobTemplateTemplateContainer.java @@ -40,10 +40,16 @@ public final class JobTemplateTemplateContainer { */ private String image; /** - * @return Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * @return (Optional, Deprecated) + * Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. * + * @deprecated + * Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. */ private @Nullable JobTemplateTemplateContainerLivenessProbe livenessProbe; /** * @return Name of the container specified as a DNS_LABEL. @@ -64,10 +70,16 @@ public final class JobTemplateTemplateContainer { */ private @Nullable JobTemplateTemplateContainerResources resources; /** - * @return Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * @return (Optional, Deprecated) + * Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. * + * @deprecated + * Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. */ private @Nullable JobTemplateTemplateContainerStartupProbe startupProbe; /** * @return Volume to mount into the container's filesystem. @@ -112,10 +124,16 @@ public String image() { return this.image; } /** - * @return Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * @return (Optional, Deprecated) + * Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. * + * @deprecated + * Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. */ public Optional livenessProbe() { return Optional.ofNullable(this.livenessProbe); } @@ -144,10 +162,16 @@ public Optional resources() { return Optional.ofNullable(this.resources); } /** - * @return Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * @return (Optional, Deprecated) + * Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. * + * @deprecated + * Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. */ public Optional startupProbe() { return Optional.ofNullable(this.startupProbe); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/outputs/ServiceTemplateContainerLivenessProbe.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/outputs/ServiceTemplateContainerLivenessProbe.java index ae78d2d9a8..b747aac4a4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/outputs/ServiceTemplateContainerLivenessProbe.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudrunv2/outputs/ServiceTemplateContainerLivenessProbe.java @@ -19,7 +19,7 @@ public final class ServiceTemplateContainerLivenessProbe { */ private @Nullable Integer failureThreshold; /** - * @return HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + * @return HTTPGet specifies the http request to perform. * Structure is documented below. * */ @@ -35,10 +35,15 @@ public final class ServiceTemplateContainerLivenessProbe { */ private @Nullable Integer periodSeconds; /** - * @return TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + * @return (Optional, Deprecated) + * TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. * Structure is documented below. * + * @deprecated + * Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. */ private @Nullable ServiceTemplateContainerLivenessProbeTcpSocket tcpSocket; /** * @return Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. Maximum value is 3600. Must be smaller than periodSeconds. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes @@ -55,7 +60,7 @@ public Optional failureThreshold() { return Optional.ofNullable(this.failureThreshold); } /** - * @return HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + * @return HTTPGet specifies the http request to perform. * Structure is documented below. * */ @@ -77,10 +82,15 @@ public Optional periodSeconds() { return Optional.ofNullable(this.periodSeconds); } /** - * @return TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + * @return (Optional, Deprecated) + * TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. * Structure is documented below. * + * @deprecated + * Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. + * */ + @Deprecated /* Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. */ public Optional tcpSocket() { return Optional.ofNullable(this.tcpSocket); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudscheduler/Job.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudscheduler/Job.java index d4fe8ea51b..d8f2597aea 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudscheduler/Job.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudscheduler/Job.java @@ -343,14 +343,14 @@ public Output> pubsubTarget() { return Codegen.optional(this.pubsubTarget); } /** - * Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + * Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. * */ @Export(name="region", type=String.class, parameters={}) private Output region; /** - * @return Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + * @return Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. * */ public Output region() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudscheduler/JobArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudscheduler/JobArgs.java index cd5a99b052..2884580b5e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudscheduler/JobArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudscheduler/JobArgs.java @@ -177,14 +177,14 @@ public Optional> pubsubTarget() { } /** - * Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + * Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. * */ @Import(name="region") private @Nullable Output region; /** - * @return Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + * @return Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. * */ public Optional> region() { @@ -484,7 +484,7 @@ public Builder pubsubTarget(JobPubsubTargetArgs pubsubTarget) { } /** - * @param region Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + * @param region Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. * * @return builder * @@ -495,7 +495,7 @@ public Builder region(@Nullable Output region) { } /** - * @param region Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + * @param region Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/cloudscheduler/inputs/JobState.java b/sdk/java/src/main/java/com/pulumi/gcp/cloudscheduler/inputs/JobState.java index cbc1a2ef36..bb12c83dd6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/cloudscheduler/inputs/JobState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/cloudscheduler/inputs/JobState.java @@ -177,14 +177,14 @@ public Optional> pubsubTarget() { } /** - * Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + * Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. * */ @Import(name="region") private @Nullable Output region; /** - * @return Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + * @return Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. * */ public Optional> region() { @@ -500,7 +500,7 @@ public Builder pubsubTarget(JobPubsubTargetArgs pubsubTarget) { } /** - * @param region Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + * @param region Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. * * @return builder * @@ -511,7 +511,7 @@ public Builder region(@Nullable Output region) { } /** - * @param region Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + * @param region Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/composer/inputs/EnvironmentConfigSoftwareConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/composer/inputs/EnvironmentConfigSoftwareConfigArgs.java index df4ab86f0c..a994f4b019 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/composer/inputs/EnvironmentConfigSoftwareConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/composer/inputs/EnvironmentConfigSoftwareConfigArgs.java @@ -5,6 +5,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.composer.inputs.EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs; import java.lang.Integer; import java.lang.String; import java.util.Map; @@ -24,6 +25,13 @@ public Optional>> airflowConfigOverrides() { return Optional.ofNullable(this.airflowConfigOverrides); } + @Import(name="cloudDataLineageIntegration") + private @Nullable Output cloudDataLineageIntegration; + + public Optional> cloudDataLineageIntegration() { + return Optional.ofNullable(this.cloudDataLineageIntegration); + } + @Import(name="envVariables") private @Nullable Output> envVariables; @@ -63,6 +71,7 @@ private EnvironmentConfigSoftwareConfigArgs() {} private EnvironmentConfigSoftwareConfigArgs(EnvironmentConfigSoftwareConfigArgs $) { this.airflowConfigOverrides = $.airflowConfigOverrides; + this.cloudDataLineageIntegration = $.cloudDataLineageIntegration; this.envVariables = $.envVariables; this.imageVersion = $.imageVersion; this.pypiPackages = $.pypiPackages; @@ -97,6 +106,15 @@ public Builder airflowConfigOverrides(Map airflowConfigOverrides) return airflowConfigOverrides(Output.of(airflowConfigOverrides)); } + public Builder cloudDataLineageIntegration(@Nullable Output cloudDataLineageIntegration) { + $.cloudDataLineageIntegration = cloudDataLineageIntegration; + return this; + } + + public Builder cloudDataLineageIntegration(EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs cloudDataLineageIntegration) { + return cloudDataLineageIntegration(Output.of(cloudDataLineageIntegration)); + } + public Builder envVariables(@Nullable Output> envVariables) { $.envVariables = envVariables; return this; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/composer/inputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/composer/inputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs.java new file mode 100644 index 0000000000..8f2e16f791 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/composer/inputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs.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.composer.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Boolean; +import java.util.Objects; + + +public final class EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs extends com.pulumi.resources.ResourceArgs { + + public static final EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs Empty = new EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs(); + + @Import(name="enabled", required=true) + private Output enabled; + + public Output enabled() { + return this.enabled; + } + + private EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs() {} + + private EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs(EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs $) { + this.enabled = $.enabled; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs $; + + public Builder() { + $ = new EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs(); + } + + public Builder(EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs defaults) { + $ = new EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs(Objects.requireNonNull(defaults)); + } + + public Builder enabled(Output enabled) { + $.enabled = enabled; + return this; + } + + public Builder enabled(Boolean enabled) { + return enabled(Output.of(enabled)); + } + + public EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs build() { + $.enabled = Objects.requireNonNull($.enabled, "expected parameter 'enabled' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/EnvironmentConfigSoftwareConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/EnvironmentConfigSoftwareConfig.java index 97dbbae079..bc77a24b2a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/EnvironmentConfigSoftwareConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/EnvironmentConfigSoftwareConfig.java @@ -4,6 +4,7 @@ package com.pulumi.gcp.composer.outputs; import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.composer.outputs.EnvironmentConfigSoftwareConfigCloudDataLineageIntegration; import java.lang.Integer; import java.lang.String; import java.util.Map; @@ -14,6 +15,7 @@ @CustomType public final class EnvironmentConfigSoftwareConfig { private @Nullable Map airflowConfigOverrides; + private @Nullable EnvironmentConfigSoftwareConfigCloudDataLineageIntegration cloudDataLineageIntegration; private @Nullable Map envVariables; private @Nullable String imageVersion; private @Nullable Map pypiPackages; @@ -24,6 +26,9 @@ private EnvironmentConfigSoftwareConfig() {} public Map airflowConfigOverrides() { return this.airflowConfigOverrides == null ? Map.of() : this.airflowConfigOverrides; } + public Optional cloudDataLineageIntegration() { + return Optional.ofNullable(this.cloudDataLineageIntegration); + } public Map envVariables() { return this.envVariables == null ? Map.of() : this.envVariables; } @@ -50,6 +55,7 @@ public static Builder builder(EnvironmentConfigSoftwareConfig defaults) { @CustomType.Builder public static final class Builder { private @Nullable Map airflowConfigOverrides; + private @Nullable EnvironmentConfigSoftwareConfigCloudDataLineageIntegration cloudDataLineageIntegration; private @Nullable Map envVariables; private @Nullable String imageVersion; private @Nullable Map pypiPackages; @@ -59,6 +65,7 @@ public Builder() {} public Builder(EnvironmentConfigSoftwareConfig defaults) { Objects.requireNonNull(defaults); this.airflowConfigOverrides = defaults.airflowConfigOverrides; + this.cloudDataLineageIntegration = defaults.cloudDataLineageIntegration; this.envVariables = defaults.envVariables; this.imageVersion = defaults.imageVersion; this.pypiPackages = defaults.pypiPackages; @@ -72,6 +79,11 @@ public Builder airflowConfigOverrides(@Nullable Map airflowConfig return this; } @CustomType.Setter + public Builder cloudDataLineageIntegration(@Nullable EnvironmentConfigSoftwareConfigCloudDataLineageIntegration cloudDataLineageIntegration) { + this.cloudDataLineageIntegration = cloudDataLineageIntegration; + return this; + } + @CustomType.Setter public Builder envVariables(@Nullable Map envVariables) { this.envVariables = envVariables; return this; @@ -99,6 +111,7 @@ public Builder schedulerCount(@Nullable Integer schedulerCount) { public EnvironmentConfigSoftwareConfig build() { final var o = new EnvironmentConfigSoftwareConfig(); o.airflowConfigOverrides = airflowConfigOverrides; + o.cloudDataLineageIntegration = cloudDataLineageIntegration; o.envVariables = envVariables; o.imageVersion = imageVersion; o.pypiPackages = pypiPackages; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegration.java b/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegration.java new file mode 100644 index 0000000000..33bb436705 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/EnvironmentConfigSoftwareConfigCloudDataLineageIntegration.java @@ -0,0 +1,46 @@ +// *** 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.composer.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.util.Objects; + +@CustomType +public final class EnvironmentConfigSoftwareConfigCloudDataLineageIntegration { + private Boolean enabled; + + private EnvironmentConfigSoftwareConfigCloudDataLineageIntegration() {} + public Boolean enabled() { + return this.enabled; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(EnvironmentConfigSoftwareConfigCloudDataLineageIntegration defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Boolean enabled; + public Builder() {} + public Builder(EnvironmentConfigSoftwareConfigCloudDataLineageIntegration defaults) { + Objects.requireNonNull(defaults); + this.enabled = defaults.enabled; + } + + @CustomType.Setter + public Builder enabled(Boolean enabled) { + this.enabled = Objects.requireNonNull(enabled); + return this; + } + public EnvironmentConfigSoftwareConfigCloudDataLineageIntegration build() { + final var o = new EnvironmentConfigSoftwareConfigCloudDataLineageIntegration(); + o.enabled = enabled; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/GetEnvironmentConfigSoftwareConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/GetEnvironmentConfigSoftwareConfig.java index f5e318d1b9..4b89f4a524 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/GetEnvironmentConfigSoftwareConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/GetEnvironmentConfigSoftwareConfig.java @@ -4,14 +4,17 @@ package com.pulumi.gcp.composer.outputs; import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.composer.outputs.GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration; import java.lang.Integer; import java.lang.String; +import java.util.List; import java.util.Map; import java.util.Objects; @CustomType public final class GetEnvironmentConfigSoftwareConfig { private Map airflowConfigOverrides; + private List cloudDataLineageIntegrations; private Map envVariables; private String imageVersion; private Map pypiPackages; @@ -22,6 +25,9 @@ private GetEnvironmentConfigSoftwareConfig() {} public Map airflowConfigOverrides() { return this.airflowConfigOverrides; } + public List cloudDataLineageIntegrations() { + return this.cloudDataLineageIntegrations; + } public Map envVariables() { return this.envVariables; } @@ -48,6 +54,7 @@ public static Builder builder(GetEnvironmentConfigSoftwareConfig defaults) { @CustomType.Builder public static final class Builder { private Map airflowConfigOverrides; + private List cloudDataLineageIntegrations; private Map envVariables; private String imageVersion; private Map pypiPackages; @@ -57,6 +64,7 @@ public Builder() {} public Builder(GetEnvironmentConfigSoftwareConfig defaults) { Objects.requireNonNull(defaults); this.airflowConfigOverrides = defaults.airflowConfigOverrides; + this.cloudDataLineageIntegrations = defaults.cloudDataLineageIntegrations; this.envVariables = defaults.envVariables; this.imageVersion = defaults.imageVersion; this.pypiPackages = defaults.pypiPackages; @@ -70,6 +78,14 @@ public Builder airflowConfigOverrides(Map airflowConfigOverrides) return this; } @CustomType.Setter + public Builder cloudDataLineageIntegrations(List cloudDataLineageIntegrations) { + this.cloudDataLineageIntegrations = Objects.requireNonNull(cloudDataLineageIntegrations); + return this; + } + public Builder cloudDataLineageIntegrations(GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration... cloudDataLineageIntegrations) { + return cloudDataLineageIntegrations(List.of(cloudDataLineageIntegrations)); + } + @CustomType.Setter public Builder envVariables(Map envVariables) { this.envVariables = Objects.requireNonNull(envVariables); return this; @@ -97,6 +113,7 @@ public Builder schedulerCount(Integer schedulerCount) { public GetEnvironmentConfigSoftwareConfig build() { final var o = new GetEnvironmentConfigSoftwareConfig(); o.airflowConfigOverrides = airflowConfigOverrides; + o.cloudDataLineageIntegrations = cloudDataLineageIntegrations; o.envVariables = envVariables; o.imageVersion = imageVersion; o.pypiPackages = pypiPackages; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration.java b/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration.java new file mode 100644 index 0000000000..64944ec4bd --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration.java @@ -0,0 +1,46 @@ +// *** 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.composer.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Boolean; +import java.util.Objects; + +@CustomType +public final class GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration { + private Boolean enabled; + + private GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration() {} + public Boolean enabled() { + return this.enabled; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private Boolean enabled; + public Builder() {} + public Builder(GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration defaults) { + Objects.requireNonNull(defaults); + this.enabled = defaults.enabled; + } + + @CustomType.Setter + public Builder enabled(Boolean enabled) { + this.enabled = Objects.requireNonNull(enabled); + return this; + } + public GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration build() { + final var o = new GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration(); + o.enabled = enabled; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/GetEnvironmentResult.java b/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/GetEnvironmentResult.java index 2818225ef3..0444e5cf11 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/GetEnvironmentResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/composer/outputs/GetEnvironmentResult.java @@ -14,10 +14,6 @@ @CustomType public final class GetEnvironmentResult { - /** - * @return Configuration parameters for the environment. - * - */ private List configs; /** * @return The provider-assigned unique ID for this managed resource. @@ -30,10 +26,6 @@ public final class GetEnvironmentResult { private @Nullable String region; private GetEnvironmentResult() {} - /** - * @return Configuration parameters for the environment. - * - */ public List configs() { return this.configs; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/Address.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/Address.java index 038748748f..5ecd23d097 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/Address.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/Address.java @@ -337,14 +337,14 @@ public Output labelFingerprint() { return this.labelFingerprint; } /** - * Labels to apply to this address. A list of key->value pairs. + * Labels to apply to this address. A list of key->value pairs. * */ @Export(name="labels", type=Map.class, parameters={String.class, String.class}) private Output> labels; /** - * @return Labels to apply to this address. A list of key->value pairs. + * @return Labels to apply to this address. A list of key->value pairs. * */ public Output>> labels() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/AddressArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/AddressArgs.java index 5ba54cd9a2..cbf64cdde4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/AddressArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/AddressArgs.java @@ -73,14 +73,14 @@ public Optional> description() { } /** - * Labels to apply to this address. A list of key->value pairs. + * Labels to apply to this address. A list of key->value pairs. * */ @Import(name="labels") private @Nullable Output> labels; /** - * @return Labels to apply to this address. A list of key->value pairs. + * @return Labels to apply to this address. A list of key->value pairs. * */ public Optional>> labels() { @@ -368,7 +368,7 @@ public Builder description(String description) { } /** - * @param labels Labels to apply to this address. A list of key->value pairs. + * @param labels Labels to apply to this address. A list of key->value pairs. * * @return builder * @@ -379,7 +379,7 @@ public Builder labels(@Nullable Output> labels) { } /** - * @param labels Labels to apply to this address. A list of key->value pairs. + * @param labels Labels to apply to this address. A list of key->value pairs. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/AttachedDisk.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/AttachedDisk.java index c3590b2de6..28a2dabee8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/AttachedDisk.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/AttachedDisk.java @@ -15,20 +15,6 @@ import javax.annotation.Nullable; /** - * Persistent disks can be attached to a compute instance using the `attached_disk` - * section within the compute instance configuration. - * However there may be situations where managing the attached disks via the compute - * instance config isn't preferable or possible, such as attaching dynamic - * numbers of disks using the `count` variable. - * - * To get more information about attaching disks, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/instances/attachDisk) - * * How-to Guides - * * [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk) - * - * **Note:** When using `gcp.compute.AttachedDisk` you **must** use `lifecycle.ignore_changes = ["attached_disk"]` on the `gcp.compute.Instance` resource that has the disks attached. Otherwise the two resources will fight for control of the attached disk block. - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendBucketSignedUrlKey.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendBucketSignedUrlKey.java index 1532c2ac42..33e3e336af 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendBucketSignedUrlKey.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendBucketSignedUrlKey.java @@ -15,17 +15,6 @@ import javax.annotation.Nullable; /** - * A key for signing Cloud CDN signed URLs for BackendBuckets. - * - * To get more information about BackendBucketSignedUrlKey, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendBuckets) - * * How-to Guides - * * [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/) - * - * > **Warning:** All arguments including `key_value` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Backend Bucket Signed Url Key * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendService.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendService.java index 64a8ccdd5c..b99abbec28 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendService.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendService.java @@ -15,6 +15,7 @@ import com.pulumi.gcp.compute.outputs.BackendServiceCircuitBreakers; import com.pulumi.gcp.compute.outputs.BackendServiceConsistentHash; import com.pulumi.gcp.compute.outputs.BackendServiceIap; +import com.pulumi.gcp.compute.outputs.BackendServiceLocalityLbPolicy; import com.pulumi.gcp.compute.outputs.BackendServiceLogConfig; import com.pulumi.gcp.compute.outputs.BackendServiceOutlierDetection; import com.pulumi.gcp.compute.outputs.BackendServiceSecuritySettings; @@ -26,22 +27,6 @@ import javax.annotation.Nullable; /** - * A Backend Service defines a group of virtual machines that will serve - * traffic for load balancing. This resource is a global backend service, - * appropriate for external load balancing or self-managed internal load balancing. - * For managed internal load balancing, use a regional backend service instead. - * - * Currently self-managed internal load balancing is only available in beta. - * - * To get more information about BackendService, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/v1/backendServices) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/compute/docs/load-balancing/http/backend-service) - * - * > **Warning:** All arguments including `iap.oauth2_client_secret` and `iap.oauth2_client_secret_sha256` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Backend Service Basic * @@ -805,6 +790,32 @@ public Output> iap() { public Output> loadBalancingScheme() { return Codegen.optional(this.loadBalancingScheme); } + /** + * A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + * + */ + @Export(name="localityLbPolicies", type=List.class, parameters={BackendServiceLocalityLbPolicy.class}) + private Output> localityLbPolicies; + + /** + * @return A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + * + */ + public Output>> localityLbPolicies() { + return Codegen.optional(this.localityLbPolicies); + } /** * The load balancing algorithm used within the scope of the locality. * The possible values are: diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendServiceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendServiceArgs.java index 98c9a17595..9e8f55e5d1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendServiceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendServiceArgs.java @@ -10,6 +10,7 @@ import com.pulumi.gcp.compute.inputs.BackendServiceCircuitBreakersArgs; import com.pulumi.gcp.compute.inputs.BackendServiceConsistentHashArgs; import com.pulumi.gcp.compute.inputs.BackendServiceIapArgs; +import com.pulumi.gcp.compute.inputs.BackendServiceLocalityLbPolicyArgs; import com.pulumi.gcp.compute.inputs.BackendServiceLogConfigArgs; import com.pulumi.gcp.compute.inputs.BackendServiceOutlierDetectionArgs; import com.pulumi.gcp.compute.inputs.BackendServiceSecuritySettingsArgs; @@ -313,6 +314,33 @@ public Optional> loadBalancingScheme() { return Optional.ofNullable(this.loadBalancingScheme); } + /** + * A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + * + */ + @Import(name="localityLbPolicies") + private @Nullable Output> localityLbPolicies; + + /** + * @return A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + * + */ + public Optional>> localityLbPolicies() { + return Optional.ofNullable(this.localityLbPolicies); + } + /** * The load balancing algorithm used within the scope of the locality. * The possible values are: @@ -546,6 +574,7 @@ private BackendServiceArgs(BackendServiceArgs $) { this.healthChecks = $.healthChecks; this.iap = $.iap; this.loadBalancingScheme = $.loadBalancingScheme; + this.localityLbPolicies = $.localityLbPolicies; this.localityLbPolicy = $.localityLbPolicy; this.logConfig = $.logConfig; this.name = $.name; @@ -987,6 +1016,55 @@ public Builder loadBalancingScheme(String loadBalancingScheme) { return loadBalancingScheme(Output.of(loadBalancingScheme)); } + /** + * @param localityLbPolicies A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + * + * @return builder + * + */ + public Builder localityLbPolicies(@Nullable Output> localityLbPolicies) { + $.localityLbPolicies = localityLbPolicies; + return this; + } + + /** + * @param localityLbPolicies A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + * + * @return builder + * + */ + public Builder localityLbPolicies(List localityLbPolicies) { + return localityLbPolicies(Output.of(localityLbPolicies)); + } + + /** + * @param localityLbPolicies A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + * + * @return builder + * + */ + public Builder localityLbPolicies(BackendServiceLocalityLbPolicyArgs... localityLbPolicies) { + return localityLbPolicies(List.of(localityLbPolicies)); + } + /** * @param localityLbPolicy The load balancing algorithm used within the scope of the locality. * The possible values are: diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendServiceSignedUrlKey.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendServiceSignedUrlKey.java index 1b5d620394..5fac26b3f1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendServiceSignedUrlKey.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/BackendServiceSignedUrlKey.java @@ -15,17 +15,6 @@ import javax.annotation.Nullable; /** - * A key for signing Cloud CDN signed URLs for Backend Services. - * - * To get more information about BackendServiceSignedUrlKey, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendServices) - * * How-to Guides - * * [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/) - * - * > **Warning:** All arguments including `key_value` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Backend Service Signed Url Key * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/ComputeFunctions.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/ComputeFunctions.java index 641e58c796..6b144ff9ce 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/ComputeFunctions.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/ComputeFunctions.java @@ -6150,147 +6150,15 @@ public static Output getRegions(GetRegionsArgs args, InvokeOpt public static CompletableFuture getRegionsPlain(GetRegionsPlainArgs args, InvokeOptions options) { return Deployment.getInstance().invokeAsync("gcp:compute/getRegions:getRegions", TypeShape.of(GetRegionsResult.class), args, Utilities.withVersion(options)); } - /** - * Provide access to a Resource Policy's attributes. For more information see [the official documentation](https://cloud.google.com/compute/docs/disks/scheduled-snapshots) or the [API](https://cloud.google.com/compute/docs/reference/rest/beta/resourcePolicies). - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.ComputeFunctions; - * import com.pulumi.gcp.compute.inputs.GetResourcePolicyArgs; - * 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 daily = ComputeFunctions.getResourcePolicy(GetResourcePolicyArgs.builder() - * .name("daily") - * .region("us-central1") - * .build()); - * - * } - * } - * ``` - * - */ public static Output getResourcePolicy(GetResourcePolicyArgs args) { return getResourcePolicy(args, InvokeOptions.Empty); } - /** - * Provide access to a Resource Policy's attributes. For more information see [the official documentation](https://cloud.google.com/compute/docs/disks/scheduled-snapshots) or the [API](https://cloud.google.com/compute/docs/reference/rest/beta/resourcePolicies). - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.ComputeFunctions; - * import com.pulumi.gcp.compute.inputs.GetResourcePolicyArgs; - * 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 daily = ComputeFunctions.getResourcePolicy(GetResourcePolicyArgs.builder() - * .name("daily") - * .region("us-central1") - * .build()); - * - * } - * } - * ``` - * - */ public static CompletableFuture getResourcePolicyPlain(GetResourcePolicyPlainArgs args) { return getResourcePolicyPlain(args, InvokeOptions.Empty); } - /** - * Provide access to a Resource Policy's attributes. For more information see [the official documentation](https://cloud.google.com/compute/docs/disks/scheduled-snapshots) or the [API](https://cloud.google.com/compute/docs/reference/rest/beta/resourcePolicies). - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.ComputeFunctions; - * import com.pulumi.gcp.compute.inputs.GetResourcePolicyArgs; - * 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 daily = ComputeFunctions.getResourcePolicy(GetResourcePolicyArgs.builder() - * .name("daily") - * .region("us-central1") - * .build()); - * - * } - * } - * ``` - * - */ public static Output getResourcePolicy(GetResourcePolicyArgs args, InvokeOptions options) { return Deployment.getInstance().invoke("gcp:compute/getResourcePolicy:getResourcePolicy", TypeShape.of(GetResourcePolicyResult.class), args, Utilities.withVersion(options)); } - /** - * Provide access to a Resource Policy's attributes. For more information see [the official documentation](https://cloud.google.com/compute/docs/disks/scheduled-snapshots) or the [API](https://cloud.google.com/compute/docs/reference/rest/beta/resourcePolicies). - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.ComputeFunctions; - * import com.pulumi.gcp.compute.inputs.GetResourcePolicyArgs; - * 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 daily = ComputeFunctions.getResourcePolicy(GetResourcePolicyArgs.builder() - * .name("daily") - * .region("us-central1") - * .build()); - * - * } - * } - * ``` - * - */ public static CompletableFuture getResourcePolicyPlain(GetResourcePolicyPlainArgs args, InvokeOptions options) { return Deployment.getInstance().invokeAsync("gcp:compute/getResourcePolicy:getResourcePolicy", TypeShape.of(GetResourcePolicyResult.class), args, Utilities.withVersion(options)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/Disk.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/Disk.java index 5a3fb0a993..5689cf6dbf 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/Disk.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/Disk.java @@ -22,31 +22,6 @@ import javax.annotation.Nullable; /** - * Persistent disks are durable storage devices that function similarly to - * the physical disks in a desktop or a server. Compute Engine manages the - * hardware behind these devices to ensure data redundancy and optimize - * performance for you. Persistent disks are available as either standard - * hard disk drives (HDD) or solid-state drives (SSD). - * - * Persistent disks are located independently from your virtual machine - * instances, so you can detach or move persistent disks to keep your data - * even after you delete your instances. Persistent disk performance scales - * automatically with size, so you can resize your existing persistent disks - * or add more persistent disks to an instance to meet your performance and - * storage space requirements. - * - * Add a persistent disk to your instance when you need reliable and - * affordable storage with consistent performance characteristics. - * - * To get more information about Disk, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/v1/disks) - * * How-to Guides - * * [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk) - * - * > **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Disk Basic * ```java @@ -366,11 +341,9 @@ public Output provisionedIops() { return this.provisionedIops; } /** - * Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. * */ @@ -378,11 +351,9 @@ public Output provisionedIops() { private Output> resourcePolicies; /** - * @return Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * @return Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. * */ @@ -404,34 +375,22 @@ public Output selfLink() { return this.selfLink; } /** - * Size of the persistent disk, specified in GB. You can specify this - * field when creating a persistent disk using the `image` or - * `snapshot` parameter, or specify it alone to create an empty - * persistent disk. - * If you specify this field along with `image` or `snapshot`, - * the value must not be less than the size of the image - * or the size of the snapshot. - * ~>**NOTE** If you change the size, the provider updates the disk size - * if upsizing is detected but recreates the disk if downsizing is requested. - * You can add `lifecycle.prevent_destroy` in the config to prevent destroying - * and recreating. + * Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + * 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + * with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + * ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + * downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. * */ @Export(name="size", type=Integer.class, parameters={}) private Output size; /** - * @return Size of the persistent disk, specified in GB. You can specify this - * field when creating a persistent disk using the `image` or - * `snapshot` parameter, or specify it alone to create an empty - * persistent disk. - * If you specify this field along with `image` or `snapshot`, - * the value must not be less than the size of the image - * or the size of the snapshot. - * ~>**NOTE** If you change the size, the provider updates the disk size - * if upsizing is detected but recreates the disk if downsizing is requested. - * You can add `lifecycle.prevent_destroy` in the config to prevent destroying - * and recreating. + * @return Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + * 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + * with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + * ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + * downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. * */ public Output size() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/DiskArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/DiskArgs.java index 6a091331d4..8e1a5dfa86 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/DiskArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/DiskArgs.java @@ -239,11 +239,9 @@ public Optional> provisionedIops() { } /** - * Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. * */ @@ -251,11 +249,9 @@ public Optional> provisionedIops() { private @Nullable Output> resourcePolicies; /** - * @return Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * @return Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. * */ @@ -264,34 +260,22 @@ public Optional>> resourcePolicies() { } /** - * Size of the persistent disk, specified in GB. You can specify this - * field when creating a persistent disk using the `image` or - * `snapshot` parameter, or specify it alone to create an empty - * persistent disk. - * If you specify this field along with `image` or `snapshot`, - * the value must not be less than the size of the image - * or the size of the snapshot. - * ~>**NOTE** If you change the size, the provider updates the disk size - * if upsizing is detected but recreates the disk if downsizing is requested. - * You can add `lifecycle.prevent_destroy` in the config to prevent destroying - * and recreating. + * Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + * 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + * with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + * ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + * downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. * */ @Import(name="size") private @Nullable Output size; /** - * @return Size of the persistent disk, specified in GB. You can specify this - * field when creating a persistent disk using the `image` or - * `snapshot` parameter, or specify it alone to create an empty - * persistent disk. - * If you specify this field along with `image` or `snapshot`, - * the value must not be less than the size of the image - * or the size of the snapshot. - * ~>**NOTE** If you change the size, the provider updates the disk size - * if upsizing is detected but recreates the disk if downsizing is requested. - * You can add `lifecycle.prevent_destroy` in the config to prevent destroying - * and recreating. + * @return Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + * 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + * with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + * ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + * downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. * */ public Optional> size() { @@ -738,11 +722,9 @@ public Builder provisionedIops(Integer provisionedIops) { } /** - * @param resourcePolicies Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * @param resourcePolicies Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. * * @return builder @@ -754,11 +736,9 @@ public Builder resourcePolicies(@Nullable Output> resourcePolicies) } /** - * @param resourcePolicies Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * @param resourcePolicies Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. * * @return builder @@ -769,11 +749,9 @@ public Builder resourcePolicies(List resourcePolicies) { } /** - * @param resourcePolicies Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * @param resourcePolicies Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. * * @return builder @@ -784,17 +762,11 @@ public Builder resourcePolicies(String... resourcePolicies) { } /** - * @param size Size of the persistent disk, specified in GB. You can specify this - * field when creating a persistent disk using the `image` or - * `snapshot` parameter, or specify it alone to create an empty - * persistent disk. - * If you specify this field along with `image` or `snapshot`, - * the value must not be less than the size of the image - * or the size of the snapshot. - * ~>**NOTE** If you change the size, the provider updates the disk size - * if upsizing is detected but recreates the disk if downsizing is requested. - * You can add `lifecycle.prevent_destroy` in the config to prevent destroying - * and recreating. + * @param size Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + * 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + * with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + * ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + * downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. * * @return builder * @@ -805,17 +777,11 @@ public Builder size(@Nullable Output size) { } /** - * @param size Size of the persistent disk, specified in GB. You can specify this - * field when creating a persistent disk using the `image` or - * `snapshot` parameter, or specify it alone to create an empty - * persistent disk. - * If you specify this field along with `image` or `snapshot`, - * the value must not be less than the size of the image - * or the size of the snapshot. - * ~>**NOTE** If you change the size, the provider updates the disk size - * if upsizing is detected but recreates the disk if downsizing is requested. - * You can add `lifecycle.prevent_destroy` in the config to prevent destroying - * and recreating. + * @param size Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + * 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + * with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + * ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + * downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/DiskResourcePolicyAttachment.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/DiskResourcePolicyAttachment.java index e26de76a70..4e6b9c255f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/DiskResourcePolicyAttachment.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/DiskResourcePolicyAttachment.java @@ -14,11 +14,6 @@ import javax.annotation.Nullable; /** - * Adds existing resource policies to a disk. You can only add one policy - * which will be applied to this disk for scheduling snapshot creation. - * - * > **Note:** This resource does not support regional disks (`gcp.compute.RegionDisk`). For regional disks, please refer to the `gcp.compute.RegionDiskResourcePolicyAttachment` resource. - * * ## Example Usage * ### Disk Resource Policy Attachment Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/ForwardingRule.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/ForwardingRule.java index dbed1c8c38..9190fbbede 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/ForwardingRule.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/ForwardingRule.java @@ -1580,14 +1580,14 @@ public Output labelFingerprint() { return this.labelFingerprint; } /** - * Labels to apply to this forwarding rule. A list of key->value pairs. + * Labels to apply to this rule. * */ @Export(name="labels", type=Map.class, parameters={String.class, String.class}) private Output> labels; /** - * @return Labels to apply to this forwarding rule. A list of key->value pairs. + * @return Labels to apply to this rule. * */ public Output>> labels() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/ForwardingRuleArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/ForwardingRuleArgs.java index b24c3d4443..5305310294 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/ForwardingRuleArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/ForwardingRuleArgs.java @@ -183,14 +183,14 @@ public Optional> isMirroringCollector() { } /** - * Labels to apply to this forwarding rule. A list of key->value pairs. + * Labels to apply to this rule. * */ @Import(name="labels") private @Nullable Output> labels; /** - * @return Labels to apply to this forwarding rule. A list of key->value pairs. + * @return Labels to apply to this rule. * */ public Optional>> labels() { @@ -746,7 +746,7 @@ public Builder isMirroringCollector(Boolean isMirroringCollector) { } /** - * @param labels Labels to apply to this forwarding rule. A list of key->value pairs. + * @param labels Labels to apply to this rule. * * @return builder * @@ -757,7 +757,7 @@ public Builder labels(@Nullable Output> labels) { } /** - * @param labels Labels to apply to this forwarding rule. A list of key->value pairs. + * @param labels Labels to apply to this rule. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalAddress.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalAddress.java index 83f198843e..f47db26916 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalAddress.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalAddress.java @@ -53,49 +53,6 @@ * } * } * ``` - * ### Global Address Private Services Connect - * ```java - * 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.GlobalAddress; - * import com.pulumi.gcp.compute.GlobalAddressArgs; - * 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 network = new Network("network", NetworkArgs.builder() - * .autoCreateSubnetworks(false) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * var default_ = new GlobalAddress("default", GlobalAddressArgs.builder() - * .addressType("INTERNAL") - * .purpose("PRIVATE_SERVICE_CONNECT") - * .network(network.id()) - * .address("100.100.100.105") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` * * ## Import * @@ -215,14 +172,14 @@ public Output labelFingerprint() { return this.labelFingerprint; } /** - * Labels to apply to this address. A list of key->value pairs. + * Labels to apply to this address. A list of key->value pairs. * */ @Export(name="labels", type=Map.class, parameters={String.class, String.class}) private Output> labels; /** - * @return Labels to apply to this address. A list of key->value pairs. + * @return Labels to apply to this address. A list of key->value pairs. * */ public Output>> labels() { @@ -311,18 +268,16 @@ public Output project() { return this.project; } /** - * The purpose of the resource. Possible values include: - * * VPC_PEERING - for peer networks - * * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + * The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + * ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks * */ @Export(name="purpose", type=String.class, parameters={}) private Output purpose; /** - * @return The purpose of the resource. Possible values include: - * * VPC_PEERING - for peer networks - * * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + * @return The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + * ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks * */ public Output> purpose() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalAddressArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalAddressArgs.java index 1509580e92..da711ac61e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalAddressArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalAddressArgs.java @@ -92,14 +92,14 @@ public Optional> ipVersion() { } /** - * Labels to apply to this address. A list of key->value pairs. + * Labels to apply to this address. A list of key->value pairs. * */ @Import(name="labels") private @Nullable Output> labels; /** - * @return Labels to apply to this address. A list of key->value pairs. + * @return Labels to apply to this address. A list of key->value pairs. * */ public Optional>> labels() { @@ -193,18 +193,16 @@ public Optional> project() { } /** - * The purpose of the resource. Possible values include: - * * VPC_PEERING - for peer networks - * * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + * The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + * ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks * */ @Import(name="purpose") private @Nullable Output purpose; /** - * @return The purpose of the resource. Possible values include: - * * VPC_PEERING - for peer networks - * * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + * @return The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + * ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks * */ public Optional> purpose() { @@ -343,7 +341,7 @@ public Builder ipVersion(String ipVersion) { } /** - * @param labels Labels to apply to this address. A list of key->value pairs. + * @param labels Labels to apply to this address. A list of key->value pairs. * * @return builder * @@ -354,7 +352,7 @@ public Builder labels(@Nullable Output> labels) { } /** - * @param labels Labels to apply to this address. A list of key->value pairs. + * @param labels Labels to apply to this address. A list of key->value pairs. * * @return builder * @@ -474,9 +472,8 @@ public Builder project(String project) { } /** - * @param purpose The purpose of the resource. Possible values include: - * * VPC_PEERING - for peer networks - * * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + * @param purpose The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + * ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks * * @return builder * @@ -487,9 +484,8 @@ public Builder purpose(@Nullable Output purpose) { } /** - * @param purpose The purpose of the resource. Possible values include: - * * VPC_PEERING - for peer networks - * * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + * @param purpose The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + * ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalForwardingRule.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalForwardingRule.java index cfd1da8b64..dd9f757d06 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalForwardingRule.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalForwardingRule.java @@ -24,7 +24,7 @@ * balancing. * * For more information, see - * <https://cloud.google.com/compute/docs/load-balancing/http/> + * https://cloud.google.com/compute/docs/load-balancing/http/ * * ## Example Usage * ### External Ssl Proxy Lb Mig Backend @@ -1040,7 +1040,6 @@ * } * ``` * ### Private Service Connect Google Apis - * ### Private Service Connect Google Apis * ```java * package generated_program; * @@ -1236,50 +1235,40 @@ public Output labelFingerprint() { return this.labelFingerprint; } /** - * Labels to apply to this forwarding rule. A list of key->value pairs. + * Labels to apply to this rule. * */ @Export(name="labels", type=Map.class, parameters={String.class, String.class}) private Output> labels; /** - * @return Labels to apply to this forwarding rule. A list of key->value pairs. + * @return Labels to apply to this rule. * */ public Output>> labels() { return Codegen.optional(this.labels); } /** - * This signifies what the GlobalForwardingRule will be used for. - * The value of INTERNAL_SELF_MANAGED means that this will be used for - * Internal Global HTTP(S) LB. The value of EXTERNAL means that this - * will be used for External Global Load Balancing (HTTP(S) LB, - * External TCP/UDP LB, SSL Proxy) - * Note: This field must be set "" if the global address is - * External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - * that this will be used for Global external HTTP(S) load balancers. - * Note: This field must be set "" if the global address is - * configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - * Default value is `EXTERNAL`. - * Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + * Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + * from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + * `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + * Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + * forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + * INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED * */ @Export(name="loadBalancingScheme", type=String.class, parameters={}) private Output loadBalancingScheme; /** - * @return This signifies what the GlobalForwardingRule will be used for. - * The value of INTERNAL_SELF_MANAGED means that this will be used for - * Internal Global HTTP(S) LB. The value of EXTERNAL means that this - * will be used for External Global Load Balancing (HTTP(S) LB, - * External TCP/UDP LB, SSL Proxy) - * Note: This field must be set "" if the global address is - * External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - * that this will be used for Global external HTTP(S) load balancers. - * Note: This field must be set "" if the global address is - * configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - * Default value is `EXTERNAL`. - * Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + * @return Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + * from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + * `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + * Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + * forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + * INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED * */ public Output> loadBalancingScheme() { @@ -1354,22 +1343,18 @@ public Output name() { return this.name; } /** - * This field is not used for external load balancing. - * For INTERNAL_SELF_MANAGED load balancing, this field - * identifies the network that the load balanced IP should belong to - * for this global forwarding rule. If this field is not specified, - * the default network will be used. + * This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + * field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + * specified, the default network will be used. * */ @Export(name="network", type=String.class, parameters={}) private Output network; /** - * @return This field is not used for external load balancing. - * For INTERNAL_SELF_MANAGED load balancing, this field - * identifies the network that the load balanced IP should belong to - * for this global forwarding rule. If this field is not specified, - * the default network will be used. + * @return This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + * field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + * specified, the default network will be used. * */ public Output network() { @@ -1480,24 +1465,20 @@ public Output selfLink() { return this.selfLink; } /** - * The URL of the target resource to receive the matched traffic. - * The forwarded traffic must be of a type appropriate to the target object. - * For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - * are valid. - * For global address with a purpose of PRIVATE_SERVICE_CONNECT and - * addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + * The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + * the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + * resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + * balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. * */ @Export(name="target", type=String.class, parameters={}) private Output target; /** - * @return The URL of the target resource to receive the matched traffic. - * The forwarded traffic must be of a type appropriate to the target object. - * For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - * are valid. - * For global address with a purpose of PRIVATE_SERVICE_CONNECT and - * addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + * @return The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + * the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + * resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + * balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. * */ public Output target() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalForwardingRuleArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalForwardingRuleArgs.java index 598a00ff60..2bfd171517 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalForwardingRuleArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/GlobalForwardingRuleArgs.java @@ -115,14 +115,14 @@ public Optional> ipVersion() { } /** - * Labels to apply to this forwarding rule. A list of key->value pairs. + * Labels to apply to this rule. * */ @Import(name="labels") private @Nullable Output> labels; /** - * @return Labels to apply to this forwarding rule. A list of key->value pairs. + * @return Labels to apply to this rule. * */ public Optional>> labels() { @@ -130,36 +130,26 @@ public Optional>> labels() { } /** - * This signifies what the GlobalForwardingRule will be used for. - * The value of INTERNAL_SELF_MANAGED means that this will be used for - * Internal Global HTTP(S) LB. The value of EXTERNAL means that this - * will be used for External Global Load Balancing (HTTP(S) LB, - * External TCP/UDP LB, SSL Proxy) - * Note: This field must be set "" if the global address is - * External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - * that this will be used for Global external HTTP(S) load balancers. - * Note: This field must be set "" if the global address is - * configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - * Default value is `EXTERNAL`. - * Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + * Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + * from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + * `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + * Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + * forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + * INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED * */ @Import(name="loadBalancingScheme") private @Nullable Output loadBalancingScheme; /** - * @return This signifies what the GlobalForwardingRule will be used for. - * The value of INTERNAL_SELF_MANAGED means that this will be used for - * Internal Global HTTP(S) LB. The value of EXTERNAL means that this - * will be used for External Global Load Balancing (HTTP(S) LB, - * External TCP/UDP LB, SSL Proxy) - * Note: This field must be set "" if the global address is - * External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - * that this will be used for Global external HTTP(S) load balancers. - * Note: This field must be set "" if the global address is - * configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - * Default value is `EXTERNAL`. - * Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + * @return Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + * from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + * `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + * Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + * forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + * INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED * */ public Optional> loadBalancingScheme() { @@ -237,22 +227,18 @@ public Optional> name() { } /** - * This field is not used for external load balancing. - * For INTERNAL_SELF_MANAGED load balancing, this field - * identifies the network that the load balanced IP should belong to - * for this global forwarding rule. If this field is not specified, - * the default network will be used. + * This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + * field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + * specified, the default network will be used. * */ @Import(name="network") private @Nullable Output network; /** - * @return This field is not used for external load balancing. - * For INTERNAL_SELF_MANAGED load balancing, this field - * identifies the network that the load balanced IP should belong to - * for this global forwarding rule. If this field is not specified, - * the default network will be used. + * @return This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + * field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + * specified, the default network will be used. * */ public Optional> network() { @@ -322,24 +308,20 @@ public Optional> project() { } /** - * The URL of the target resource to receive the matched traffic. - * The forwarded traffic must be of a type appropriate to the target object. - * For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - * are valid. - * For global address with a purpose of PRIVATE_SERVICE_CONNECT and - * addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + * The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + * the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + * resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + * balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. * */ @Import(name="target", required=true) private Output target; /** - * @return The URL of the target resource to receive the matched traffic. - * The forwarded traffic must be of a type appropriate to the target object. - * For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - * are valid. - * For global address with a purpose of PRIVATE_SERVICE_CONNECT and - * addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + * @return The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + * the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + * resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + * balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. * */ public Output target() { @@ -502,7 +484,7 @@ public Builder ipVersion(String ipVersion) { } /** - * @param labels Labels to apply to this forwarding rule. A list of key->value pairs. + * @param labels Labels to apply to this rule. * * @return builder * @@ -513,7 +495,7 @@ public Builder labels(@Nullable Output> labels) { } /** - * @param labels Labels to apply to this forwarding rule. A list of key->value pairs. + * @param labels Labels to apply to this rule. * * @return builder * @@ -523,18 +505,13 @@ public Builder labels(Map labels) { } /** - * @param loadBalancingScheme This signifies what the GlobalForwardingRule will be used for. - * The value of INTERNAL_SELF_MANAGED means that this will be used for - * Internal Global HTTP(S) LB. The value of EXTERNAL means that this - * will be used for External Global Load Balancing (HTTP(S) LB, - * External TCP/UDP LB, SSL Proxy) - * Note: This field must be set "" if the global address is - * External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - * that this will be used for Global external HTTP(S) load balancers. - * Note: This field must be set "" if the global address is - * configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - * Default value is `EXTERNAL`. - * Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + * @param loadBalancingScheme Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + * from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + * `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + * Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + * forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + * INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED * * @return builder * @@ -545,18 +522,13 @@ public Builder loadBalancingScheme(@Nullable Output loadBalancingScheme) } /** - * @param loadBalancingScheme This signifies what the GlobalForwardingRule will be used for. - * The value of INTERNAL_SELF_MANAGED means that this will be used for - * Internal Global HTTP(S) LB. The value of EXTERNAL means that this - * will be used for External Global Load Balancing (HTTP(S) LB, - * External TCP/UDP LB, SSL Proxy) - * Note: This field must be set "" if the global address is - * External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - * that this will be used for Global external HTTP(S) load balancers. - * Note: This field must be set "" if the global address is - * configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - * Default value is `EXTERNAL`. - * Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + * @param loadBalancingScheme Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + * from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + * `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + * Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + * forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + * INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED * * @return builder * @@ -672,11 +644,9 @@ public Builder name(String name) { } /** - * @param network This field is not used for external load balancing. - * For INTERNAL_SELF_MANAGED load balancing, this field - * identifies the network that the load balanced IP should belong to - * for this global forwarding rule. If this field is not specified, - * the default network will be used. + * @param network This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + * field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + * specified, the default network will be used. * * @return builder * @@ -687,11 +657,9 @@ public Builder network(@Nullable Output network) { } /** - * @param network This field is not used for external load balancing. - * For INTERNAL_SELF_MANAGED load balancing, this field - * identifies the network that the load balanced IP should belong to - * for this global forwarding rule. If this field is not specified, - * the default network will be used. + * @param network This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + * field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + * specified, the default network will be used. * * @return builder * @@ -775,12 +743,10 @@ public Builder project(String project) { } /** - * @param target The URL of the target resource to receive the matched traffic. - * The forwarded traffic must be of a type appropriate to the target object. - * For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - * are valid. - * For global address with a purpose of PRIVATE_SERVICE_CONNECT and - * addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + * @param target The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + * the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + * resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + * balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. * * @return builder * @@ -791,12 +757,10 @@ public Builder target(Output target) { } /** - * @param target The URL of the target resource to receive the matched traffic. - * The forwarded traffic must be of a type appropriate to the target object. - * For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - * are valid. - * For global address with a purpose of PRIVATE_SERVICE_CONNECT and - * addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + * @param target The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + * the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + * resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + * balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/Instance.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/Instance.java index f4387fde7a..0b0306b826 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/Instance.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/Instance.java @@ -136,16 +136,16 @@ public Output> advancedMachineFeatures return Codegen.optional(this.advancedMachineFeatures); } /** - * If true, allows this prvider to stop the instance to update its properties. - * If you try to update a property that requires stopping the instance without setting this field, the update will fail. + * If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + * stopping the instance without setting this field, the update will fail. * */ @Export(name="allowStoppingForUpdate", type=Boolean.class, parameters={}) private Output allowStoppingForUpdate; /** - * @return If true, allows this prvider to stop the instance to update its properties. - * If you try to update a property that requires stopping the instance without setting this field, the update will fail. + * @return If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + * stopping the instance without setting this field, the update will fail. * */ public Output> allowStoppingForUpdate() { @@ -242,16 +242,14 @@ public Output currentStatus() { return this.currentStatus; } /** - * Enable deletion protection on this instance. Defaults to false. - * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + * Whether deletion protection is enabled on this instance. * */ @Export(name="deletionProtection", type=Boolean.class, parameters={}) private Output deletionProtection; /** - * @return Enable deletion protection on this instance. Defaults to false. - * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + * @return Whether deletion protection is enabled on this instance. * */ public Output> deletionProtection() { @@ -304,16 +302,14 @@ public Output> enableDisplay() { return Codegen.optional(this.enableDisplay); } /** - * List of the type and count of accelerator cards attached to the instance. Structure documented below. - * **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + * List of the type and count of accelerator cards attached to the instance. * */ @Export(name="guestAccelerators", type=List.class, parameters={InstanceGuestAccelerator.class}) private Output> guestAccelerators; /** - * @return List of the type and count of accelerator cards attached to the instance. Structure documented below. - * **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + * @return List of the type and count of accelerator cards attached to the instance. * */ public Output> guestAccelerators() { @@ -428,32 +424,14 @@ public Output metadataFingerprint() { return this.metadataFingerprint; } /** - * An alternative to using the - * startup-script metadata key, except this one forces the instance to be recreated - * (thus re-running the script) if it is changed. This replaces the startup-script - * metadata key on the created instance and thus the two mechanisms are not - * allowed to be used simultaneously. Users are free to use either mechanism - the - * only distinction is that this separate attribute will cause a recreate on - * modification. On import, `metadata_startup_script` will not be set - if you - * choose to specify it you will see a diff immediately after import causing a - * destroy/recreate operation. If importing an instance and specifying this value - * is desired, you will need to modify your state file. + * Metadata startup scripts made available within the instance. * */ @Export(name="metadataStartupScript", type=String.class, parameters={}) private Output metadataStartupScript; /** - * @return An alternative to using the - * startup-script metadata key, except this one forces the instance to be recreated - * (thus re-running the script) if it is changed. This replaces the startup-script - * metadata key on the created instance and thus the two mechanisms are not - * allowed to be used simultaneously. Users are free to use either mechanism - the - * only distinction is that this separate attribute will cause a recreate on - * modification. On import, `metadata_startup_script` will not be set - if you - * choose to specify it you will see a diff immediately after import causing a - * destroy/recreate operation. If importing an instance and specifying this value - * is desired, you will need to modify your state file. + * @return Metadata startup scripts made available within the instance. * */ public Output> metadataStartupScript() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceArgs.java index e56002d68a..bdda789b38 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceArgs.java @@ -46,16 +46,16 @@ public Optional> advancedMachineFeat } /** - * If true, allows this prvider to stop the instance to update its properties. - * If you try to update a property that requires stopping the instance without setting this field, the update will fail. + * If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + * stopping the instance without setting this field, the update will fail. * */ @Import(name="allowStoppingForUpdate") private @Nullable Output allowStoppingForUpdate; /** - * @return If true, allows this prvider to stop the instance to update its properties. - * If you try to update a property that requires stopping the instance without setting this field, the update will fail. + * @return If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + * stopping the instance without setting this field, the update will fail. * */ public Optional> allowStoppingForUpdate() { @@ -129,16 +129,14 @@ public Optional> confidentialInst } /** - * Enable deletion protection on this instance. Defaults to false. - * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + * Whether deletion protection is enabled on this instance. * */ @Import(name="deletionProtection") private @Nullable Output deletionProtection; /** - * @return Enable deletion protection on this instance. Defaults to false. - * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + * @return Whether deletion protection is enabled on this instance. * */ public Optional> deletionProtection() { @@ -195,16 +193,14 @@ public Optional> enableDisplay() { } /** - * List of the type and count of accelerator cards attached to the instance. Structure documented below. - * **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + * List of the type and count of accelerator cards attached to the instance. * */ @Import(name="guestAccelerators") private @Nullable Output> guestAccelerators; /** - * @return List of the type and count of accelerator cards attached to the instance. Structure documented below. - * **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + * @return List of the type and count of accelerator cards attached to the instance. * */ public Optional>> guestAccelerators() { @@ -282,32 +278,14 @@ public Optional>> metadata() { } /** - * An alternative to using the - * startup-script metadata key, except this one forces the instance to be recreated - * (thus re-running the script) if it is changed. This replaces the startup-script - * metadata key on the created instance and thus the two mechanisms are not - * allowed to be used simultaneously. Users are free to use either mechanism - the - * only distinction is that this separate attribute will cause a recreate on - * modification. On import, `metadata_startup_script` will not be set - if you - * choose to specify it you will see a diff immediately after import causing a - * destroy/recreate operation. If importing an instance and specifying this value - * is desired, you will need to modify your state file. + * Metadata startup scripts made available within the instance. * */ @Import(name="metadataStartupScript") private @Nullable Output metadataStartupScript; /** - * @return An alternative to using the - * startup-script metadata key, except this one forces the instance to be recreated - * (thus re-running the script) if it is changed. This replaces the startup-script - * metadata key on the created instance and thus the two mechanisms are not - * allowed to be used simultaneously. Users are free to use either mechanism - the - * only distinction is that this separate attribute will cause a recreate on - * modification. On import, `metadata_startup_script` will not be set - if you - * choose to specify it you will see a diff immediately after import causing a - * destroy/recreate operation. If importing an instance and specifying this value - * is desired, you will need to modify your state file. + * @return Metadata startup scripts made available within the instance. * */ public Optional> metadataStartupScript() { @@ -615,8 +593,8 @@ public Builder advancedMachineFeatures(InstanceAdvancedMachineFeaturesArgs advan } /** - * @param allowStoppingForUpdate If true, allows this prvider to stop the instance to update its properties. - * If you try to update a property that requires stopping the instance without setting this field, the update will fail. + * @param allowStoppingForUpdate If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + * stopping the instance without setting this field, the update will fail. * * @return builder * @@ -627,8 +605,8 @@ public Builder allowStoppingForUpdate(@Nullable Output allowStoppingFor } /** - * @param allowStoppingForUpdate If true, allows this prvider to stop the instance to update its properties. - * If you try to update a property that requires stopping the instance without setting this field, the update will fail. + * @param allowStoppingForUpdate If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + * stopping the instance without setting this field, the update will fail. * * @return builder * @@ -738,8 +716,7 @@ public Builder confidentialInstanceConfig(InstanceConfidentialInstanceConfigArgs } /** - * @param deletionProtection Enable deletion protection on this instance. Defaults to false. - * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + * @param deletionProtection Whether deletion protection is enabled on this instance. * * @return builder * @@ -750,8 +727,7 @@ public Builder deletionProtection(@Nullable Output deletionProtection) } /** - * @param deletionProtection Enable deletion protection on this instance. Defaults to false. - * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + * @param deletionProtection Whether deletion protection is enabled on this instance. * * @return builder * @@ -828,8 +804,7 @@ public Builder enableDisplay(Boolean enableDisplay) { } /** - * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. Structure documented below. - * **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. * * @return builder * @@ -840,8 +815,7 @@ public Builder guestAccelerators(@Nullable Output guestAcceler } /** - * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. Structure documented below. - * **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. * * @return builder * @@ -956,16 +929,7 @@ public Builder metadata(Map metadata) { } /** - * @param metadataStartupScript An alternative to using the - * startup-script metadata key, except this one forces the instance to be recreated - * (thus re-running the script) if it is changed. This replaces the startup-script - * metadata key on the created instance and thus the two mechanisms are not - * allowed to be used simultaneously. Users are free to use either mechanism - the - * only distinction is that this separate attribute will cause a recreate on - * modification. On import, `metadata_startup_script` will not be set - if you - * choose to specify it you will see a diff immediately after import causing a - * destroy/recreate operation. If importing an instance and specifying this value - * is desired, you will need to modify your state file. + * @param metadataStartupScript Metadata startup scripts made available within the instance. * * @return builder * @@ -976,16 +940,7 @@ public Builder metadataStartupScript(@Nullable Output metadataStartupScr } /** - * @param metadataStartupScript An alternative to using the - * startup-script metadata key, except this one forces the instance to be recreated - * (thus re-running the script) if it is changed. This replaces the startup-script - * metadata key on the created instance and thus the two mechanisms are not - * allowed to be used simultaneously. Users are free to use either mechanism - the - * only distinction is that this separate attribute will cause a recreate on - * modification. On import, `metadata_startup_script` will not be set - if you - * choose to specify it you will see a diff immediately after import causing a - * destroy/recreate operation. If importing an instance and specifying this value - * is desired, you will need to modify your state file. + * @param metadataStartupScript Metadata startup scripts made available within the instance. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromMachineImage.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromMachineImage.java index cc860e9976..8a97549b29 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromMachineImage.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromMachineImage.java @@ -29,15 +29,6 @@ import javax.annotation.Nullable; /** - * Manages a VM instance resource within GCE. For more information see - * [the official documentation](https://cloud.google.com/compute/docs/instances) - * and - * [API](https://cloud.google.com/compute/docs/reference/latest/instances). - * - * This resource is specifically to create a compute instance from a given - * `source_machine_image`. To create an instance without a machine image, use the - * `gcp.compute.Instance` resource. - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromTemplate.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromTemplate.java index d14b0281d8..fc06108736 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromTemplate.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromTemplate.java @@ -518,14 +518,16 @@ public Output scheduling() { return this.scheduling; } /** - * The scratch disks attached to the instance. + * * `network_interface.alias_ip_range` + * * `network_interface.access_config` * */ @Export(name="scratchDisks", type=List.class, parameters={InstanceFromTemplateScratchDisk.class}) private Output> scratchDisks; /** - * @return The scratch disks attached to the instance. + * @return * `network_interface.alias_ip_range` + * * `network_interface.access_config` * */ public Output> scratchDisks() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromTemplateArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromTemplateArgs.java index 709b852c82..2fdb2256d3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromTemplateArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceFromTemplateArgs.java @@ -405,14 +405,16 @@ public Optional> scheduling() { } /** - * The scratch disks attached to the instance. + * * `network_interface.alias_ip_range` + * * `network_interface.access_config` * */ @Import(name="scratchDisks") private @Nullable Output> scratchDisks; /** - * @return The scratch disks attached to the instance. + * @return * `network_interface.alias_ip_range` + * * `network_interface.access_config` * */ public Optional>> scratchDisks() { @@ -1100,7 +1102,8 @@ public Builder scheduling(InstanceFromTemplateSchedulingArgs scheduling) { } /** - * @param scratchDisks The scratch disks attached to the instance. + * @param scratchDisks * `network_interface.alias_ip_range` + * * `network_interface.access_config` * * @return builder * @@ -1111,7 +1114,8 @@ public Builder scratchDisks(@Nullable Output scratchDis } /** - * @param scratchDisks The scratch disks attached to the instance. + * @param scratchDisks * `network_interface.alias_ip_range` + * * `network_interface.access_config` * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroup.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroup.java index 4cf9b5fe4a..d58f4acfb3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroup.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroup.java @@ -18,173 +18,6 @@ import javax.annotation.Nullable; /** - * Creates a group of dissimilar Compute Engine virtual machine instances. - * For more information, see [the official documentation](https://cloud.google.com/compute/docs/instance-groups/#unmanaged_instance_groups) - * and [API](https://cloud.google.com/compute/docs/reference/latest/instanceGroups) - * - * ## Example Usage - * ### Empty Instance Group - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.InstanceGroup; - * import com.pulumi.gcp.compute.InstanceGroupArgs; - * 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 test = new InstanceGroup("test", InstanceGroupArgs.builder() - * .description("Test instance group") - * .zone("us-central1-a") - * .network(google_compute_network.default().id()) - * .build()); - * - * } - * } - * ``` - * ### Example Usage - With instances and named ports - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.InstanceGroup; - * import com.pulumi.gcp.compute.InstanceGroupArgs; - * import com.pulumi.gcp.compute.inputs.InstanceGroupNamedPortArgs; - * 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 webservers = new InstanceGroup("webservers", InstanceGroupArgs.builder() - * .description("Test instance group") - * .instances( - * google_compute_instance.test().id(), - * google_compute_instance.test2().id()) - * .namedPorts( - * InstanceGroupNamedPortArgs.builder() - * .name("http") - * .port("8080") - * .build(), - * InstanceGroupNamedPortArgs.builder() - * .name("https") - * .port("8443") - * .build()) - * .zone("us-central1-a") - * .build()); - * - * } - * } - * ``` - * ### Example Usage - Recreating an instance group in use - * Recreating an instance group that's in use by another resource will give a - * `resourceInUseByAnotherResource` error. Use `lifecycle.create_before_destroy` - * as shown in this example to avoid this type of error. - * - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.ComputeFunctions; - * import com.pulumi.gcp.compute.inputs.GetImageArgs; - * import com.pulumi.gcp.compute.Instance; - * import com.pulumi.gcp.compute.InstanceArgs; - * import com.pulumi.gcp.compute.inputs.InstanceBootDiskArgs; - * import com.pulumi.gcp.compute.inputs.InstanceBootDiskInitializeParamsArgs; - * import com.pulumi.gcp.compute.inputs.InstanceNetworkInterfaceArgs; - * import com.pulumi.gcp.compute.InstanceGroup; - * import com.pulumi.gcp.compute.InstanceGroupArgs; - * import com.pulumi.gcp.compute.inputs.InstanceGroupNamedPortArgs; - * import com.pulumi.gcp.compute.HttpsHealthCheck; - * import com.pulumi.gcp.compute.HttpsHealthCheckArgs; - * import com.pulumi.gcp.compute.BackendService; - * import com.pulumi.gcp.compute.BackendServiceArgs; - * import com.pulumi.gcp.compute.inputs.BackendServiceBackendArgs; - * 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 debianImage = ComputeFunctions.getImage(GetImageArgs.builder() - * .family("debian-11") - * .project("debian-cloud") - * .build()); - * - * var stagingVm = new Instance("stagingVm", InstanceArgs.builder() - * .machineType("e2-medium") - * .zone("us-central1-c") - * .bootDisk(InstanceBootDiskArgs.builder() - * .initializeParams(InstanceBootDiskInitializeParamsArgs.builder() - * .image(debianImage.applyValue(getImageResult -> getImageResult.selfLink())) - * .build()) - * .build()) - * .networkInterfaces(InstanceNetworkInterfaceArgs.builder() - * .network("default") - * .build()) - * .build()); - * - * var stagingGroup = new InstanceGroup("stagingGroup", InstanceGroupArgs.builder() - * .zone("us-central1-c") - * .instances(stagingVm.id()) - * .namedPorts( - * InstanceGroupNamedPortArgs.builder() - * .name("http") - * .port("8080") - * .build(), - * InstanceGroupNamedPortArgs.builder() - * .name("https") - * .port("8443") - * .build()) - * .build()); - * - * var stagingHealth = new HttpsHealthCheck("stagingHealth", HttpsHealthCheckArgs.builder() - * .requestPath("/health_check") - * .build()); - * - * var stagingService = new BackendService("stagingService", BackendServiceArgs.builder() - * .portName("https") - * .protocol("HTTPS") - * .backends(BackendServiceBackendArgs.builder() - * .group(stagingGroup.id()) - * .build()) - * .healthChecks(stagingHealth.id()) - * .build()); - * - * } - * } - * ``` - * * ## Import * * Instance group can be imported using the `zone` and `name` with an optional `project`, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroupManager.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroupManager.java index 60a200ccac..a76270e5d5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroupManager.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroupManager.java @@ -497,18 +497,16 @@ public Output> versions() { return this.versions; } /** - * Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, this provider will - * continue trying until it times out. + * Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * */ @Export(name="waitForInstances", type=Boolean.class, parameters={}) private Output waitForInstances; /** - * @return Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, this provider will - * continue trying until it times out. + * @return Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * */ public Output> waitForInstances() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroupManagerArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroupManagerArgs.java index d9130f644c..fce0b2b1ca 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroupManagerArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceGroupManagerArgs.java @@ -304,18 +304,16 @@ public Output> versions() { } /** - * Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, this provider will - * continue trying until it times out. + * Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * */ @Import(name="waitForInstances") private @Nullable Output waitForInstances; /** - * @return Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, this provider will - * continue trying until it times out. + * @return Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * */ public Optional> waitForInstances() { @@ -834,9 +832,8 @@ public Builder versions(InstanceGroupManagerVersionArgs... versions) { } /** - * @param waitForInstances Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, this provider will - * continue trying until it times out. + * @param waitForInstances Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * * @return builder * @@ -847,9 +844,8 @@ public Builder waitForInstances(@Nullable Output waitForInstances) { } /** - * @param waitForInstances Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, this provider will - * continue trying until it times out. + * @param waitForInstances Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceTemplate.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceTemplate.java index 5a33b06b8e..9462b5d283 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceTemplate.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceTemplate.java @@ -29,368 +29,6 @@ import javax.annotation.Nullable; /** - * Manages a VM instance template resource within GCE. For more information see - * [the official documentation](https://cloud.google.com/compute/docs/instance-templates) - * and - * [API](https://cloud.google.com/compute/docs/reference/latest/instanceTemplates). - * - * ## Example Usage - * - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.serviceAccount.Account; - * import com.pulumi.gcp.serviceAccount.AccountArgs; - * import com.pulumi.gcp.compute.ComputeFunctions; - * import com.pulumi.gcp.compute.inputs.GetImageArgs; - * import com.pulumi.gcp.compute.Disk; - * import com.pulumi.gcp.compute.DiskArgs; - * import com.pulumi.gcp.compute.ResourcePolicy; - * import com.pulumi.gcp.compute.ResourcePolicyArgs; - * import com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyArgs; - * import com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyScheduleArgs; - * import com.pulumi.gcp.compute.inputs.ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs; - * import com.pulumi.gcp.compute.InstanceTemplate; - * import com.pulumi.gcp.compute.InstanceTemplateArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateSchedulingArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateServiceAccountArgs; - * 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 defaultAccount = new Account("defaultAccount", AccountArgs.builder() - * .accountId("service-account-id") - * .displayName("Service Account") - * .build()); - * - * final var myImage = ComputeFunctions.getImage(GetImageArgs.builder() - * .family("debian-11") - * .project("debian-cloud") - * .build()); - * - * var foobar = new Disk("foobar", DiskArgs.builder() - * .image(myImage.applyValue(getImageResult -> getImageResult.selfLink())) - * .size(10) - * .type("pd-ssd") - * .zone("us-central1-a") - * .build()); - * - * var dailyBackup = new ResourcePolicy("dailyBackup", ResourcePolicyArgs.builder() - * .region("us-central1") - * .snapshotSchedulePolicy(ResourcePolicySnapshotSchedulePolicyArgs.builder() - * .schedule(ResourcePolicySnapshotSchedulePolicyScheduleArgs.builder() - * .dailySchedule(ResourcePolicySnapshotSchedulePolicyScheduleDailyScheduleArgs.builder() - * .daysInCycle(1) - * .startTime("04:00") - * .build()) - * .build()) - * .build()) - * .build()); - * - * var defaultInstanceTemplate = new InstanceTemplate("defaultInstanceTemplate", InstanceTemplateArgs.builder() - * .description("This template is used to create app server instances.") - * .tags( - * "foo", - * "bar") - * .labels(Map.of("environment", "dev")) - * .instanceDescription("description assigned to instances") - * .machineType("e2-medium") - * .canIpForward(false) - * .scheduling(InstanceTemplateSchedulingArgs.builder() - * .automaticRestart(true) - * .onHostMaintenance("MIGRATE") - * .build()) - * .disks( - * InstanceTemplateDiskArgs.builder() - * .sourceImage("debian-cloud/debian-11") - * .autoDelete(true) - * .boot(true) - * .resourcePolicies(dailyBackup.id()) - * .build(), - * InstanceTemplateDiskArgs.builder() - * .source(foobar.name()) - * .autoDelete(false) - * .boot(false) - * .build()) - * .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder() - * .network("default") - * .build()) - * .metadata(Map.of("foo", "bar")) - * .serviceAccount(InstanceTemplateServiceAccountArgs.builder() - * .email(defaultAccount.email()) - * .scopes("cloud-platform") - * .build()) - * .build()); - * - * } - * } - * ``` - * ### Automatic Envoy Deployment - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.ComputeFunctions; - * import com.pulumi.gcp.compute.inputs.GetDefaultServiceAccountArgs; - * import com.pulumi.gcp.compute.inputs.GetImageArgs; - * import com.pulumi.gcp.compute.InstanceTemplate; - * import com.pulumi.gcp.compute.InstanceTemplateArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateSchedulingArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateServiceAccountArgs; - * 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 default = ComputeFunctions.getDefaultServiceAccount(); - * - * final var myImage = ComputeFunctions.getImage(GetImageArgs.builder() - * .family("debian-11") - * .project("debian-cloud") - * .build()); - * - * var foobar = new InstanceTemplate("foobar", InstanceTemplateArgs.builder() - * .machineType("e2-medium") - * .canIpForward(false) - * .tags( - * "foo", - * "bar") - * .disks(InstanceTemplateDiskArgs.builder() - * .sourceImage(myImage.applyValue(getImageResult -> getImageResult.selfLink())) - * .autoDelete(true) - * .boot(true) - * .build()) - * .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder() - * .network("default") - * .build()) - * .scheduling(InstanceTemplateSchedulingArgs.builder() - * .preemptible(false) - * .automaticRestart(true) - * .build()) - * .metadata(Map.ofEntries( - * Map.entry("gce-software-declaration", """ - * { - * "softwareRecipes": [{ - * "name": "install-gce-service-proxy-agent", - * "desired_state": "INSTALLED", - * "installSteps": [{ - * "scriptRun": { - * "script": "#! /bin/bash\nZONE=$(curl --silent http://metadata.google.internal/computeMetadata/v1/instance/zone -H Metadata-Flavor:Google | cut -d/ -f4 )\nexport SERVICE_PROXY_AGENT_DIRECTORY=$(mktemp -d)\nsudo gsutil cp gs://gce-service-proxy-"$ZONE"/service-proxy-agent/releases/service-proxy-agent-0.2.tgz "$SERVICE_PROXY_AGENT_DIRECTORY" || sudo gsutil cp gs://gce-service-proxy/service-proxy-agent/releases/service-proxy-agent-0.2.tgz "$SERVICE_PROXY_AGENT_DIRECTORY"\nsudo tar -xzf "$SERVICE_PROXY_AGENT_DIRECTORY"/service-proxy-agent-0.2.tgz -C "$SERVICE_PROXY_AGENT_DIRECTORY"\n"$SERVICE_PROXY_AGENT_DIRECTORY"/service-proxy-agent/service-proxy-agent-bootstrap.sh" - * } - * }] - * }] - * } - * """), - * Map.entry("gce-service-proxy", """ - * { - * "api-version": "0.2", - * "proxy-spec": { - * "proxy-port": 15001, - * "network": "my-network", - * "tracing": "ON", - * "access-log": "/var/log/envoy/access.log" - * } - * "service": { - * "serving-ports": [80, 81] - * }, - * "labels": { - * "app_name": "bookserver_app", - * "app_version": "STABLE" - * } - * } - * """), - * Map.entry("enable-guest-attributes", "true"), - * Map.entry("enable-osconfig", "true") - * )) - * .serviceAccount(InstanceTemplateServiceAccountArgs.builder() - * .email(default_.email()) - * .scopes("cloud-platform") - * .build()) - * .labels(Map.of("gce-service-proxy", "on")) - * .build()); - * - * } - * } - * ``` - * ## Using with Instance Group Manager - * - * Instance Templates cannot be updated after creation with the Google - * Cloud Platform API. In order to update an Instance Template, this provider will - * create a replacement. In order to effectively - * use an Instance Template resource with an [Instance Group Manager resource](https://www.terraform.io/docs/providers/google/r/compute_instance_group_manager.html). - * Either omit the Instance Template `name` attribute, or specify a partial name - * with `name_prefix`. Example: - * - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.InstanceTemplate; - * import com.pulumi.gcp.compute.InstanceTemplateArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs; - * import com.pulumi.gcp.compute.InstanceGroupManager; - * import com.pulumi.gcp.compute.InstanceGroupManagerArgs; - * 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 instanceTemplate = new InstanceTemplate("instanceTemplate", InstanceTemplateArgs.builder() - * .namePrefix("instance-template-") - * .machineType("e2-medium") - * .region("us-central1") - * .disks() - * .networkInterfaces() - * .build()); - * - * var instanceGroupManager = new InstanceGroupManager("instanceGroupManager", InstanceGroupManagerArgs.builder() - * .instanceTemplate(instanceTemplate.id()) - * .baseInstanceName("instance-group-manager") - * .zone("us-central1-f") - * .targetSize("1") - * .build()); - * - * } - * } - * ``` - * - * With this setup, this provider generates a unique name for your Instance - * Template and can then update the Instance Group manager without conflict before - * destroying the previous Instance Template. - * - * ## Deploying the Latest Image - * - * A common way to use instance templates and managed instance groups is to deploy the - * latest image in a family, usually the latest build of your application. There are two - * ways to do this in the provider, and they have their pros and cons. The difference ends - * up being in how "latest" is interpreted. You can either deploy the latest image available - * when the provider runs, or you can have each instance check what the latest image is when - * it's being created, either as part of a scaling event or being rebuilt by the instance - * group manager. - * - * If you're not sure, we recommend deploying the latest image available when the provider runs, - * because this means all the instances in your group will be based on the same image, always, - * and means that no upgrades or changes to your instances happen outside of a `pulumi up`. - * You can achieve this by using the `gcp.compute.Image` - * data source, which will retrieve the latest image on every `pulumi apply`, and will update - * the template to use that specific image: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.ComputeFunctions; - * import com.pulumi.gcp.compute.inputs.GetImageArgs; - * import com.pulumi.gcp.compute.InstanceTemplate; - * import com.pulumi.gcp.compute.InstanceTemplateArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs; - * 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 myImage = ComputeFunctions.getImage(GetImageArgs.builder() - * .family("debian-11") - * .project("debian-cloud") - * .build()); - * - * var instanceTemplate = new InstanceTemplate("instanceTemplate", InstanceTemplateArgs.builder() - * .namePrefix("instance-template-") - * .machineType("e2-medium") - * .region("us-central1") - * .disks(InstanceTemplateDiskArgs.builder() - * .sourceImage(myImage.applyValue(getImageResult -> getImageResult.selfLink())) - * .build()) - * .build()); - * - * } - * } - * ``` - * - * To have instances update to the latest on every scaling event or instance re-creation, - * use the family as the image for the disk, and it will use GCP's default behavior, setting - * the image for the template to the family: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.InstanceTemplate; - * import com.pulumi.gcp.compute.InstanceTemplateArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs; - * 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 instanceTemplate = new InstanceTemplate("instanceTemplate", InstanceTemplateArgs.builder() - * .disks(InstanceTemplateDiskArgs.builder() - * .sourceImage("debian-cloud/debian-11") - * .build()) - * .machineType("e2-medium") - * .namePrefix("instance-template-") - * .region("us-central1") - * .build()); - * - * } - * } - * ``` - * * ## Import * * Instance templates can be imported using any of these accepted formats @@ -631,16 +269,14 @@ public Output> minCpuPlatform() { return Codegen.optional(this.minCpuPlatform); } /** - * The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. + * The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. * */ @Export(name="name", type=String.class, parameters={}) private Output name; /** - * @return The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. + * @return The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. * */ public Output name() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceTemplateArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceTemplateArgs.java index d16a9b392b..61b0ab0b49 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceTemplateArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/InstanceTemplateArgs.java @@ -247,16 +247,14 @@ public Optional> minCpuPlatform() { } /** - * The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. + * The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. * */ @Import(name="name") private @Nullable Output name; /** - * @return The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. + * @return The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. * */ public Optional> name() { @@ -812,8 +810,7 @@ public Builder minCpuPlatform(String minCpuPlatform) { } /** - * @param name The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. + * @param name The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. * * @return builder * @@ -824,8 +821,7 @@ public Builder name(@Nullable Output name) { } /** - * @param name The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. + * @param name The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImage.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImage.java index afe614c059..d96a501385 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImage.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImage.java @@ -18,16 +18,6 @@ import javax.annotation.Nullable; /** - * Represents a Machine Image resource. Machine images store all the configuration, - * metadata, permissions, and data from one or more disks required to create a - * Virtual machine (VM) instance. - * - * To get more information about MachineImage, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/machineImages) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/compute/docs/machine-images) - * * ## Example Usage * ### Machine Image Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImageIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImageIamBinding.java index ca9b8163bb..84fb08fd19 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImageIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImageIamBinding.java @@ -17,264 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - * - * * `gcp.compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - * * `gcp.compute.MachineImageIamBinding`: 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 machineimage are preserved. - * * `gcp.compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - * - * > **Note:** `gcp.compute.MachineImageIamPolicy` **cannot** be used in conjunction with `gcp.compute.MachineImageIamBinding` and `gcp.compute.MachineImageIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.compute.MachineImageIamBinding` resources **can be** used in conjunction with `gcp.compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - * ## google\_compute\_machine\_image\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.compute.MachineImageIamPolicy; - * import com.pulumi.gcp.compute.MachineImageIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/compute.admin") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new MachineImageIamPolicy("policy", MachineImageIamPolicyArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.compute.MachineImageIamPolicy; - * import com.pulumi.gcp.compute.MachineImageIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/compute.admin") - * .members("user:jane@example.com") - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build()) - * .build()); - * - * var policy = new MachineImageIamPolicy("policy", MachineImageIamPolicyArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * ## google\_compute\_machine\_image\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.MachineImageIamBinding; - * import com.pulumi.gcp.compute.MachineImageIamBindingArgs; - * 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 binding = new MachineImageIamBinding("binding", MachineImageIamBindingArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .role("roles/compute.admin") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.MachineImageIamBinding; - * import com.pulumi.gcp.compute.MachineImageIamBindingArgs; - * import com.pulumi.gcp.compute.inputs.MachineImageIamBindingConditionArgs; - * 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 binding = new MachineImageIamBinding("binding", MachineImageIamBindingArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .role("roles/compute.admin") - * .members("user:jane@example.com") - * .condition(MachineImageIamBindingConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * ## google\_compute\_machine\_image\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.MachineImageIamMember; - * import com.pulumi.gcp.compute.MachineImageIamMemberArgs; - * 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 member = new MachineImageIamMember("member", MachineImageIamMemberArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .role("roles/compute.admin") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.MachineImageIamMember; - * import com.pulumi.gcp.compute.MachineImageIamMemberArgs; - * import com.pulumi.gcp.compute.inputs.MachineImageIamMemberConditionArgs; - * 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 member = new MachineImageIamMember("member", MachineImageIamMemberArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .role("roles/compute.admin") - * .member("user:jane@example.com") - * .condition(MachineImageIamMemberConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImageIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImageIamMember.java index c9332efbec..f149f23e30 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImageIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImageIamMember.java @@ -16,264 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - * - * * `gcp.compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - * * `gcp.compute.MachineImageIamBinding`: 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 machineimage are preserved. - * * `gcp.compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - * - * > **Note:** `gcp.compute.MachineImageIamPolicy` **cannot** be used in conjunction with `gcp.compute.MachineImageIamBinding` and `gcp.compute.MachineImageIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.compute.MachineImageIamBinding` resources **can be** used in conjunction with `gcp.compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - * ## google\_compute\_machine\_image\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.compute.MachineImageIamPolicy; - * import com.pulumi.gcp.compute.MachineImageIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/compute.admin") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new MachineImageIamPolicy("policy", MachineImageIamPolicyArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.compute.MachineImageIamPolicy; - * import com.pulumi.gcp.compute.MachineImageIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/compute.admin") - * .members("user:jane@example.com") - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build()) - * .build()); - * - * var policy = new MachineImageIamPolicy("policy", MachineImageIamPolicyArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * ## google\_compute\_machine\_image\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.MachineImageIamBinding; - * import com.pulumi.gcp.compute.MachineImageIamBindingArgs; - * 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 binding = new MachineImageIamBinding("binding", MachineImageIamBindingArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .role("roles/compute.admin") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.MachineImageIamBinding; - * import com.pulumi.gcp.compute.MachineImageIamBindingArgs; - * import com.pulumi.gcp.compute.inputs.MachineImageIamBindingConditionArgs; - * 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 binding = new MachineImageIamBinding("binding", MachineImageIamBindingArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .role("roles/compute.admin") - * .members("user:jane@example.com") - * .condition(MachineImageIamBindingConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * ## google\_compute\_machine\_image\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.MachineImageIamMember; - * import com.pulumi.gcp.compute.MachineImageIamMemberArgs; - * 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 member = new MachineImageIamMember("member", MachineImageIamMemberArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .role("roles/compute.admin") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.MachineImageIamMember; - * import com.pulumi.gcp.compute.MachineImageIamMemberArgs; - * import com.pulumi.gcp.compute.inputs.MachineImageIamMemberConditionArgs; - * 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 member = new MachineImageIamMember("member", MachineImageIamMemberArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .role("roles/compute.admin") - * .member("user:jane@example.com") - * .condition(MachineImageIamMemberConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImageIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImageIamPolicy.java index a2eebb5358..0b54890585 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImageIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/MachineImageIamPolicy.java @@ -14,264 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - * - * * `gcp.compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - * * `gcp.compute.MachineImageIamBinding`: 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 machineimage are preserved. - * * `gcp.compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - * - * > **Note:** `gcp.compute.MachineImageIamPolicy` **cannot** be used in conjunction with `gcp.compute.MachineImageIamBinding` and `gcp.compute.MachineImageIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.compute.MachineImageIamBinding` resources **can be** used in conjunction with `gcp.compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - * ## google\_compute\_machine\_image\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.compute.MachineImageIamPolicy; - * import com.pulumi.gcp.compute.MachineImageIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/compute.admin") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new MachineImageIamPolicy("policy", MachineImageIamPolicyArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.compute.MachineImageIamPolicy; - * import com.pulumi.gcp.compute.MachineImageIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/compute.admin") - * .members("user:jane@example.com") - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build()) - * .build()); - * - * var policy = new MachineImageIamPolicy("policy", MachineImageIamPolicyArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * ## google\_compute\_machine\_image\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.MachineImageIamBinding; - * import com.pulumi.gcp.compute.MachineImageIamBindingArgs; - * 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 binding = new MachineImageIamBinding("binding", MachineImageIamBindingArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .role("roles/compute.admin") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.MachineImageIamBinding; - * import com.pulumi.gcp.compute.MachineImageIamBindingArgs; - * import com.pulumi.gcp.compute.inputs.MachineImageIamBindingConditionArgs; - * 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 binding = new MachineImageIamBinding("binding", MachineImageIamBindingArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .role("roles/compute.admin") - * .members("user:jane@example.com") - * .condition(MachineImageIamBindingConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * ## google\_compute\_machine\_image\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.MachineImageIamMember; - * import com.pulumi.gcp.compute.MachineImageIamMemberArgs; - * 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 member = new MachineImageIamMember("member", MachineImageIamMemberArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .role("roles/compute.admin") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.MachineImageIamMember; - * import com.pulumi.gcp.compute.MachineImageIamMemberArgs; - * import com.pulumi.gcp.compute.inputs.MachineImageIamMemberConditionArgs; - * 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 member = new MachineImageIamMember("member", MachineImageIamMemberArgs.builder() - * .project(google_compute_machine_image.image().project()) - * .machineImage(google_compute_machine_image.image().name()) - * .role("roles/compute.admin") - * .member("user:jane@example.com") - * .condition(MachineImageIamMemberConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/NodeGroup.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/NodeGroup.java index 5a59f1e121..db0676811c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/NodeGroup.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/NodeGroup.java @@ -12,25 +12,13 @@ import com.pulumi.gcp.compute.inputs.NodeGroupState; import com.pulumi.gcp.compute.outputs.NodeGroupAutoscalingPolicy; import com.pulumi.gcp.compute.outputs.NodeGroupMaintenanceWindow; +import com.pulumi.gcp.compute.outputs.NodeGroupShareSettings; import java.lang.Integer; import java.lang.String; import java.util.Optional; import javax.annotation.Nullable; /** - * Represents a NodeGroup resource to manage a group of sole-tenant nodes. - * - * To get more information about NodeGroup, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups) - * * How-to Guides - * * [Sole-Tenant Nodes](https://cloud.google.com/compute/docs/nodes/) - * - * > **Warning:** Due to limitations of the API, this provider cannot update the - * number of nodes in a node group and changes to node group size either - * through provider config or through external changes will cause - * the provider to delete and recreate the node group. - * * ## Example Usage * ### Node Group Basic * ```java @@ -62,8 +50,8 @@ * .build()); * * var nodes = new NodeGroup("nodes", NodeGroupArgs.builder() - * .zone("us-central1-a") - * .description("example google_compute_node_group for the Google Provider") + * .zone("us-central1-f") + * .description("example google_compute_node_group for Terraform Google Provider") * .size(1) * .nodeTemplate(soletenant_tmpl.id()) * .build()); @@ -103,8 +91,8 @@ * .build()); * * var nodes = new NodeGroup("nodes", NodeGroupArgs.builder() - * .zone("us-central1-a") - * .description("example google_compute_node_group for Google Provider") + * .zone("us-central1-f") + * .description("example google_compute_node_group for Terraform Google Provider") * .maintenancePolicy("RESTART_IN_PLACE") * .maintenanceWindow(NodeGroupMaintenanceWindowArgs.builder() * .startTime("08:00") @@ -121,6 +109,60 @@ * } * } * ``` + * ### Node Group Share Settings + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.gcp.organizations.Project; + * import com.pulumi.gcp.organizations.ProjectArgs; + * import com.pulumi.gcp.compute.NodeTemplate; + * import com.pulumi.gcp.compute.NodeTemplateArgs; + * import com.pulumi.gcp.compute.NodeGroup; + * import com.pulumi.gcp.compute.NodeGroupArgs; + * import com.pulumi.gcp.compute.inputs.NodeGroupShareSettingsArgs; + * 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 guestProject = new Project("guestProject", ProjectArgs.builder() + * .projectId("project-id") + * .orgId("123456789") + * .build()); + * + * var soletenant_tmpl = new NodeTemplate("soletenant-tmpl", NodeTemplateArgs.builder() + * .region("us-central1") + * .nodeType("n1-node-96-624") + * .build()); + * + * var nodes = new NodeGroup("nodes", NodeGroupArgs.builder() + * .zone("us-central1-f") + * .description("example google_compute_node_group for Terraform Google Provider") + * .size(1) + * .nodeTemplate(soletenant_tmpl.id()) + * .shareSettings(NodeGroupShareSettingsArgs.builder() + * .shareType("SPECIFIC_PROJECTS") + * .projectMaps(NodeGroupShareSettingsProjectMapArgs.builder() + * .id(guestProject.projectId()) + * .projectId(guestProject.projectId()) + * .build()) + * .build()) + * .build()); + * + * } + * } + * ``` * * ## Import * @@ -293,6 +335,22 @@ public Output project() { public Output selfLink() { return this.selfLink; } + /** + * Share settings for the node group. + * Structure is documented below. + * + */ + @Export(name="shareSettings", type=NodeGroupShareSettings.class, parameters={}) + private Output shareSettings; + + /** + * @return Share settings for the node group. + * Structure is documented below. + * + */ + public Output shareSettings() { + return this.shareSettings; + } /** * The total number of nodes in the node group. One of `initial_size` or `size` must be specified. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/NodeGroupArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/NodeGroupArgs.java index da58a22734..831d9c7dd2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/NodeGroupArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/NodeGroupArgs.java @@ -7,6 +7,7 @@ import com.pulumi.core.annotations.Import; import com.pulumi.gcp.compute.inputs.NodeGroupAutoscalingPolicyArgs; import com.pulumi.gcp.compute.inputs.NodeGroupMaintenanceWindowArgs; +import com.pulumi.gcp.compute.inputs.NodeGroupShareSettingsArgs; import java.lang.Integer; import java.lang.String; import java.util.Objects; @@ -146,6 +147,23 @@ public Optional> project() { return Optional.ofNullable(this.project); } + /** + * Share settings for the node group. + * Structure is documented below. + * + */ + @Import(name="shareSettings") + private @Nullable Output shareSettings; + + /** + * @return Share settings for the node group. + * Structure is documented below. + * + */ + public Optional> shareSettings() { + return Optional.ofNullable(this.shareSettings); + } + /** * The total number of nodes in the node group. One of `initial_size` or `size` must be specified. * @@ -187,6 +205,7 @@ private NodeGroupArgs(NodeGroupArgs $) { this.name = $.name; this.nodeTemplate = $.nodeTemplate; this.project = $.project; + this.shareSettings = $.shareSettings; this.size = $.size; this.zone = $.zone; } @@ -385,6 +404,29 @@ public Builder project(String project) { return project(Output.of(project)); } + /** + * @param shareSettings Share settings for the node group. + * Structure is documented below. + * + * @return builder + * + */ + public Builder shareSettings(@Nullable Output shareSettings) { + $.shareSettings = shareSettings; + return this; + } + + /** + * @param shareSettings Share settings for the node group. + * Structure is documented below. + * + * @return builder + * + */ + public Builder shareSettings(NodeGroupShareSettingsArgs shareSettings) { + return shareSettings(Output.of(shareSettings)); + } + /** * @param size The total number of nodes in the node group. One of `initial_size` or `size` must be specified. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/OrganizationSecurityPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/OrganizationSecurityPolicy.java index ee744e9a21..c2637ef363 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/OrganizationSecurityPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/OrganizationSecurityPolicy.java @@ -15,48 +15,7 @@ import javax.annotation.Nullable; /** - * Organization security policies are used to control incoming/outgoing traffic. - * - * To get more information about OrganizationSecurityPolicy, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies) - * * How-to Guides - * * [Creating a firewall policy](https://cloud.google.com/vpc/docs/using-firewall-policies#create-policy) - * * ## Example Usage - * ### Organization Security Policy Basic - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.OrganizationSecurityPolicy; - * import com.pulumi.gcp.compute.OrganizationSecurityPolicyArgs; - * 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 policy = new OrganizationSecurityPolicy("policy", OrganizationSecurityPolicyArgs.builder() - * .displayName("tf-test") - * .parent("organizations/123456789") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/OrganizationSecurityPolicyAssociation.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/OrganizationSecurityPolicyAssociation.java index 46a05efb81..988455102d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/OrganizationSecurityPolicyAssociation.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/OrganizationSecurityPolicyAssociation.java @@ -14,95 +14,7 @@ import javax.annotation.Nullable; /** - * An association for the OrganizationSecurityPolicy. - * - * To get more information about OrganizationSecurityPolicyAssociation, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addAssociation) - * * How-to Guides - * * [Associating a policy with the organization or folder](https://cloud.google.com/vpc/docs/using-firewall-policies#associate) - * * ## Example Usage - * ### Organization Security Policy Association Basic - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.Folder; - * import com.pulumi.gcp.organizations.FolderArgs; - * import com.pulumi.gcp.compute.OrganizationSecurityPolicy; - * import com.pulumi.gcp.compute.OrganizationSecurityPolicyArgs; - * import com.pulumi.gcp.compute.OrganizationSecurityPolicyRule; - * import com.pulumi.gcp.compute.OrganizationSecurityPolicyRuleArgs; - * import com.pulumi.gcp.compute.inputs.OrganizationSecurityPolicyRuleMatchArgs; - * import com.pulumi.gcp.compute.inputs.OrganizationSecurityPolicyRuleMatchConfigArgs; - * import com.pulumi.gcp.compute.OrganizationSecurityPolicyAssociation; - * import com.pulumi.gcp.compute.OrganizationSecurityPolicyAssociationArgs; - * 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 securityPolicyTarget = new Folder("securityPolicyTarget", FolderArgs.builder() - * .displayName("tf-test-secpol") - * .parent("organizations/123456789") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * var policyOrganizationSecurityPolicy = new OrganizationSecurityPolicy("policyOrganizationSecurityPolicy", OrganizationSecurityPolicyArgs.builder() - * .displayName("tf-test") - * .parent(securityPolicyTarget.name()) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * var policyOrganizationSecurityPolicyRule = new OrganizationSecurityPolicyRule("policyOrganizationSecurityPolicyRule", OrganizationSecurityPolicyRuleArgs.builder() - * .policyId(policyOrganizationSecurityPolicy.id()) - * .action("allow") - * .direction("INGRESS") - * .enableLogging(true) - * .match(OrganizationSecurityPolicyRuleMatchArgs.builder() - * .config(OrganizationSecurityPolicyRuleMatchConfigArgs.builder() - * .srcIpRanges( - * "192.168.0.0/16", - * "10.0.0.0/8") - * .layer4Configs( - * OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs.builder() - * .ipProtocol("tcp") - * .ports("22") - * .build(), - * OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs.builder() - * .ipProtocol("icmp") - * .build()) - * .build()) - * .build()) - * .priority(100) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * var policyOrganizationSecurityPolicyAssociation = new OrganizationSecurityPolicyAssociation("policyOrganizationSecurityPolicyAssociation", OrganizationSecurityPolicyAssociationArgs.builder() - * .attachmentId(policyOrganizationSecurityPolicy.parent()) - * .policyId(policyOrganizationSecurityPolicy.id()) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/OrganizationSecurityPolicyRule.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/OrganizationSecurityPolicyRule.java index 641191eea9..cb0b4ab893 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/OrganizationSecurityPolicyRule.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/OrganizationSecurityPolicyRule.java @@ -19,77 +19,7 @@ import javax.annotation.Nullable; /** - * A rule for the OrganizationSecurityPolicy. - * - * To get more information about OrganizationSecurityPolicyRule, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addRule) - * * How-to Guides - * * [Creating firewall rules](https://cloud.google.com/vpc/docs/using-firewall-policies#create-rules) - * * ## Example Usage - * ### Organization Security Policy Rule Basic - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.OrganizationSecurityPolicy; - * import com.pulumi.gcp.compute.OrganizationSecurityPolicyArgs; - * import com.pulumi.gcp.compute.OrganizationSecurityPolicyRule; - * import com.pulumi.gcp.compute.OrganizationSecurityPolicyRuleArgs; - * import com.pulumi.gcp.compute.inputs.OrganizationSecurityPolicyRuleMatchArgs; - * import com.pulumi.gcp.compute.inputs.OrganizationSecurityPolicyRuleMatchConfigArgs; - * 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 policyOrganizationSecurityPolicy = new OrganizationSecurityPolicy("policyOrganizationSecurityPolicy", OrganizationSecurityPolicyArgs.builder() - * .displayName("tf-test") - * .parent("organizations/123456789") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * var policyOrganizationSecurityPolicyRule = new OrganizationSecurityPolicyRule("policyOrganizationSecurityPolicyRule", OrganizationSecurityPolicyRuleArgs.builder() - * .policyId(policyOrganizationSecurityPolicy.id()) - * .action("allow") - * .direction("INGRESS") - * .enableLogging(true) - * .match(OrganizationSecurityPolicyRuleMatchArgs.builder() - * .config(OrganizationSecurityPolicyRuleMatchConfigArgs.builder() - * .srcIpRanges( - * "192.168.0.0/16", - * "10.0.0.0/8") - * .layer4Configs( - * OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs.builder() - * .ipProtocol("tcp") - * .ports("22") - * .build(), - * OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs.builder() - * .ipProtocol("icmp") - * .build()) - * .build()) - * .build()) - * .priority(100) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/PerInstanceConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/PerInstanceConfig.java index e2cf86f219..899ad061f7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/PerInstanceConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/PerInstanceConfig.java @@ -27,105 +27,6 @@ * * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs) * * ## Example Usage - * ### Stateful Igm - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.ComputeFunctions; - * import com.pulumi.gcp.compute.inputs.GetImageArgs; - * import com.pulumi.gcp.compute.InstanceTemplate; - * import com.pulumi.gcp.compute.InstanceTemplateArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateServiceAccountArgs; - * import com.pulumi.gcp.compute.InstanceGroupManager; - * import com.pulumi.gcp.compute.InstanceGroupManagerArgs; - * import com.pulumi.gcp.compute.inputs.InstanceGroupManagerVersionArgs; - * import com.pulumi.gcp.compute.Disk; - * import com.pulumi.gcp.compute.DiskArgs; - * import com.pulumi.gcp.compute.PerInstanceConfig; - * import com.pulumi.gcp.compute.PerInstanceConfigArgs; - * import com.pulumi.gcp.compute.inputs.PerInstanceConfigPreservedStateArgs; - * 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 myImage = ComputeFunctions.getImage(GetImageArgs.builder() - * .family("debian-11") - * .project("debian-cloud") - * .build()); - * - * var igm_basic = new InstanceTemplate("igm-basic", InstanceTemplateArgs.builder() - * .machineType("e2-medium") - * .canIpForward(false) - * .tags( - * "foo", - * "bar") - * .disks(InstanceTemplateDiskArgs.builder() - * .sourceImage(myImage.applyValue(getImageResult -> getImageResult.selfLink())) - * .autoDelete(true) - * .boot(true) - * .build()) - * .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder() - * .network("default") - * .build()) - * .serviceAccount(InstanceTemplateServiceAccountArgs.builder() - * .scopes( - * "userinfo-email", - * "compute-ro", - * "storage-ro") - * .build()) - * .build()); - * - * var igm_no_tp = new InstanceGroupManager("igm-no-tp", InstanceGroupManagerArgs.builder() - * .description("Test instance group manager") - * .versions(InstanceGroupManagerVersionArgs.builder() - * .name("prod") - * .instanceTemplate(igm_basic.selfLink()) - * .build()) - * .baseInstanceName("igm-no-tp") - * .zone("us-central1-c") - * .targetSize(2) - * .build()); - * - * var default_ = new Disk("default", DiskArgs.builder() - * .type("pd-ssd") - * .zone(google_compute_instance_group_manager.igm().zone()) - * .image("debian-11-bullseye-v20220719") - * .physicalBlockSizeBytes(4096) - * .build()); - * - * var withDisk = new PerInstanceConfig("withDisk", PerInstanceConfigArgs.builder() - * .zone(google_compute_instance_group_manager.igm().zone()) - * .instanceGroupManager(google_compute_instance_group_manager.igm().name()) - * .preservedState(PerInstanceConfigPreservedStateArgs.builder() - * .metadata(Map.ofEntries( - * Map.entry("foo", "bar"), - * Map.entry("instance_template", igm_basic.selfLink()) - * )) - * .disks(PerInstanceConfigPreservedStateDiskArgs.builder() - * .deviceName("my-stateful-disk") - * .source(default_.id()) - * .mode("READ_ONLY") - * .build()) - * .build()) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/ProjectMetadataItem.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/ProjectMetadataItem.java index 952a466681..c85c295431 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/ProjectMetadataItem.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/ProjectMetadataItem.java @@ -14,11 +14,6 @@ import javax.annotation.Nullable; /** - * Manages a single key/value pair on metadata common to all instances for - * a project in GCE. Using `gcp.compute.ProjectMetadataItem` lets you - * manage a single key/value setting in the provider rather than the entire - * project metadata map. - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionBackendService.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionBackendService.java index 24be1449fe..428164e1e0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionBackendService.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionBackendService.java @@ -562,20 +562,16 @@ public Output> connectionDrainingTimeoutSec() { return Codegen.optional(this.connectionDrainingTimeoutSec); } /** - * Connection Tracking configuration for this BackendService. - * This is available only for Layer 4 Internal Load Balancing and - * Network Load Balancing. - * Structure is documented below. + * Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + * and Network Load Balancing. * */ @Export(name="connectionTrackingPolicy", type=RegionBackendServiceConnectionTrackingPolicy.class, parameters={}) private Output connectionTrackingPolicy; /** - * @return Connection Tracking configuration for this BackendService. - * This is available only for Layer 4 Internal Load Balancing and - * Network Load Balancing. - * Structure is documented below. + * @return Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + * and Network Load Balancing. * */ public Output> connectionTrackingPolicy() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionBackendServiceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionBackendServiceArgs.java index 2ca0f0c24e..36a4ac4d35 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionBackendServiceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionBackendServiceArgs.java @@ -124,20 +124,16 @@ public Optional> connectionDrainingTimeoutSec() { } /** - * Connection Tracking configuration for this BackendService. - * This is available only for Layer 4 Internal Load Balancing and - * Network Load Balancing. - * Structure is documented below. + * Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + * and Network Load Balancing. * */ @Import(name="connectionTrackingPolicy") private @Nullable Output connectionTrackingPolicy; /** - * @return Connection Tracking configuration for this BackendService. - * This is available only for Layer 4 Internal Load Balancing and - * Network Load Balancing. - * Structure is documented below. + * @return Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + * and Network Load Balancing. * */ public Optional> connectionTrackingPolicy() { @@ -704,10 +700,8 @@ public Builder connectionDrainingTimeoutSec(Integer connectionDrainingTimeoutSec } /** - * @param connectionTrackingPolicy Connection Tracking configuration for this BackendService. - * This is available only for Layer 4 Internal Load Balancing and - * Network Load Balancing. - * Structure is documented below. + * @param connectionTrackingPolicy Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + * and Network Load Balancing. * * @return builder * @@ -718,10 +712,8 @@ public Builder connectionTrackingPolicy(@Nullable Output> versions() { return this.versions; } /** - * Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, the provider will - * continue trying until it times out. + * Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * */ @Export(name="waitForInstances", type=Boolean.class, parameters={}) private Output waitForInstances; /** - * @return Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, the provider will - * continue trying until it times out. + * @return Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * */ public Output> waitForInstances() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceGroupManagerArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceGroupManagerArgs.java index 29539b38df..2076ae8dbd 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceGroupManagerArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionInstanceGroupManagerArgs.java @@ -351,18 +351,16 @@ public Output> versions() { } /** - * Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, the provider will - * continue trying until it times out. + * Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * */ @Import(name="waitForInstances") private @Nullable Output waitForInstances; /** - * @return Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, the provider will - * continue trying until it times out. + * @return Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * */ public Optional> waitForInstances() { @@ -942,9 +940,8 @@ public Builder versions(RegionInstanceGroupManagerVersionArgs... versions) { } /** - * @param waitForInstances Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, the provider will - * continue trying until it times out. + * @param waitForInstances Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * * @return builder * @@ -955,9 +952,8 @@ public Builder waitForInstances(@Nullable Output waitForInstances) { } /** - * @param waitForInstances Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, the provider will - * continue trying until it times out. + * @param waitForInstances Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpointGroup.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpointGroup.java index 6639a6c4b1..1e25b0e8a2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpointGroup.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionNetworkEndpointGroup.java @@ -21,6 +21,10 @@ /** * A regional NEG that can support Serverless Products. * + * Recreating a region network endpoint group that's in use by another resource will give a + * `resourceInUseByAnotherResource` error. Use `lifecycle.create_before_destroy` + * to avoid this type of error. + * * To get more information about RegionNetworkEndpointGroup, see: * * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/regionNetworkEndpointGroups) diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionPerInstanceConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionPerInstanceConfig.java index 8a2f6c72bd..034e8319c3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionPerInstanceConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionPerInstanceConfig.java @@ -28,111 +28,6 @@ * * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs) * * ## Example Usage - * ### Stateful Rigm - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.compute.ComputeFunctions; - * import com.pulumi.gcp.compute.inputs.GetImageArgs; - * import com.pulumi.gcp.compute.InstanceTemplate; - * import com.pulumi.gcp.compute.InstanceTemplateArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateDiskArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateNetworkInterfaceArgs; - * import com.pulumi.gcp.compute.inputs.InstanceTemplateServiceAccountArgs; - * import com.pulumi.gcp.compute.RegionInstanceGroupManager; - * import com.pulumi.gcp.compute.RegionInstanceGroupManagerArgs; - * import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerVersionArgs; - * import com.pulumi.gcp.compute.inputs.RegionInstanceGroupManagerUpdatePolicyArgs; - * import com.pulumi.gcp.compute.Disk; - * import com.pulumi.gcp.compute.DiskArgs; - * import com.pulumi.gcp.compute.RegionPerInstanceConfig; - * import com.pulumi.gcp.compute.RegionPerInstanceConfigArgs; - * import com.pulumi.gcp.compute.inputs.RegionPerInstanceConfigPreservedStateArgs; - * 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 myImage = ComputeFunctions.getImage(GetImageArgs.builder() - * .family("debian-11") - * .project("debian-cloud") - * .build()); - * - * var igm_basic = new InstanceTemplate("igm-basic", InstanceTemplateArgs.builder() - * .machineType("e2-medium") - * .canIpForward(false) - * .tags( - * "foo", - * "bar") - * .disks(InstanceTemplateDiskArgs.builder() - * .sourceImage(myImage.applyValue(getImageResult -> getImageResult.selfLink())) - * .autoDelete(true) - * .boot(true) - * .build()) - * .networkInterfaces(InstanceTemplateNetworkInterfaceArgs.builder() - * .network("default") - * .build()) - * .serviceAccount(InstanceTemplateServiceAccountArgs.builder() - * .scopes( - * "userinfo-email", - * "compute-ro", - * "storage-ro") - * .build()) - * .build()); - * - * var rigm = new RegionInstanceGroupManager("rigm", RegionInstanceGroupManagerArgs.builder() - * .description("Demo test instance group manager") - * .versions(RegionInstanceGroupManagerVersionArgs.builder() - * .name("prod") - * .instanceTemplate(igm_basic.selfLink()) - * .build()) - * .updatePolicy(RegionInstanceGroupManagerUpdatePolicyArgs.builder() - * .type("OPPORTUNISTIC") - * .instanceRedistributionType("NONE") - * .minimalAction("RESTART") - * .build()) - * .baseInstanceName("rigm") - * .region("us-central1") - * .targetSize(2) - * .build()); - * - * var default_ = new Disk("default", DiskArgs.builder() - * .type("pd-ssd") - * .zone("us-central1-a") - * .image("debian-11-bullseye-v20220719") - * .physicalBlockSizeBytes(4096) - * .build()); - * - * var withDisk = new RegionPerInstanceConfig("withDisk", RegionPerInstanceConfigArgs.builder() - * .region(google_compute_region_instance_group_manager.igm().region()) - * .regionInstanceGroupManager(rigm.name()) - * .preservedState(RegionPerInstanceConfigPreservedStateArgs.builder() - * .metadata(Map.ofEntries( - * Map.entry("foo", "bar"), - * Map.entry("instance_template", igm_basic.selfLink()) - * )) - * .disks(RegionPerInstanceConfigPreservedStateDiskArgs.builder() - * .deviceName("my-stateful-disk") - * .source(default_.id()) - * .mode("READ_ONLY") - * .build()) - * .build()) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionSslCertificate.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionSslCertificate.java index 05c10bd6d8..84a809268f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionSslCertificate.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RegionSslCertificate.java @@ -17,19 +17,6 @@ import javax.annotation.Nullable; /** - * A RegionSslCertificate resource, used for HTTPS load balancing. This resource - * provides a mechanism to upload an SSL key and certificate to - * the load balancer to serve secure connections from the user. - * - * To get more information about RegionSslCertificate, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionSslCertificates) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates) - * - * > **Warning:** All arguments including `certificate` and `private_key` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Region Ssl Certificate Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterNat.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterNat.java index 51da1bec50..c91cfbc761 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterNat.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterNat.java @@ -561,6 +561,22 @@ public Output>> subnetworks() { public Output> tcpEstablishedIdleTimeoutSec() { return Codegen.optional(this.tcpEstablishedIdleTimeoutSec); } + /** + * Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + * Defaults to 120s if not set. + * + */ + @Export(name="tcpTimeWaitTimeoutSec", type=Integer.class, parameters={}) + private Output tcpTimeWaitTimeoutSec; + + /** + * @return Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + * Defaults to 120s if not set. + * + */ + public Output> tcpTimeWaitTimeoutSec() { + return Codegen.optional(this.tcpTimeWaitTimeoutSec); + } /** * Timeout (in seconds) for TCP transitory connections. * Defaults to 30s if not set. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterNatArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterNatArgs.java index dea2725f08..06fef800b0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterNatArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/RouterNatArgs.java @@ -334,6 +334,23 @@ public Optional> tcpEstablishedIdleTimeoutSec() { return Optional.ofNullable(this.tcpEstablishedIdleTimeoutSec); } + /** + * Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + * Defaults to 120s if not set. + * + */ + @Import(name="tcpTimeWaitTimeoutSec") + private @Nullable Output tcpTimeWaitTimeoutSec; + + /** + * @return Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + * Defaults to 120s if not set. + * + */ + public Optional> tcpTimeWaitTimeoutSec() { + return Optional.ofNullable(this.tcpTimeWaitTimeoutSec); + } + /** * Timeout (in seconds) for TCP transitory connections. * Defaults to 30s if not set. @@ -386,6 +403,7 @@ private RouterNatArgs(RouterNatArgs $) { this.sourceSubnetworkIpRangesToNat = $.sourceSubnetworkIpRangesToNat; this.subnetworks = $.subnetworks; this.tcpEstablishedIdleTimeoutSec = $.tcpEstablishedIdleTimeoutSec; + this.tcpTimeWaitTimeoutSec = $.tcpTimeWaitTimeoutSec; this.tcpTransitoryIdleTimeoutSec = $.tcpTransitoryIdleTimeoutSec; this.udpIdleTimeoutSec = $.udpIdleTimeoutSec; } @@ -868,6 +886,29 @@ public Builder tcpEstablishedIdleTimeoutSec(Integer tcpEstablishedIdleTimeoutSec return tcpEstablishedIdleTimeoutSec(Output.of(tcpEstablishedIdleTimeoutSec)); } + /** + * @param tcpTimeWaitTimeoutSec Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + * Defaults to 120s if not set. + * + * @return builder + * + */ + public Builder tcpTimeWaitTimeoutSec(@Nullable Output tcpTimeWaitTimeoutSec) { + $.tcpTimeWaitTimeoutSec = tcpTimeWaitTimeoutSec; + return this; + } + + /** + * @param tcpTimeWaitTimeoutSec Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + * Defaults to 120s if not set. + * + * @return builder + * + */ + public Builder tcpTimeWaitTimeoutSec(Integer tcpTimeWaitTimeoutSec) { + return tcpTimeWaitTimeoutSec(Output.of(tcpTimeWaitTimeoutSec)); + } + /** * @param tcpTransitoryIdleTimeoutSec Timeout (in seconds) for TCP transitory connections. * Defaults to 30s if not set. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/SSLCertificate.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/SSLCertificate.java index ae6335917d..1fbad78edf 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/SSLCertificate.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/SSLCertificate.java @@ -17,19 +17,6 @@ import javax.annotation.Nullable; /** - * An SslCertificate resource, used for HTTPS load balancing. This resource - * provides a mechanism to upload an SSL key and certificate to - * the load balancer to serve secure connections from the user. - * - * To get more information about SslCertificate, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/sslCertificates) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates) - * - * > **Warning:** All arguments including `certificate` and `private_key` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Ssl Certificate Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/SecurityPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/SecurityPolicy.java index 9eb556c177..a42c81d903 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/SecurityPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/SecurityPolicy.java @@ -20,12 +20,6 @@ import javax.annotation.Nullable; /** - * A Security Policy defines an IP blacklist or whitelist that protects load balanced Google Cloud services by denying or permitting traffic from specified IP ranges. For more information - * see the [official documentation](https://cloud.google.com/armor/docs/configure-security-policies) - * and the [API](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies). - * - * Security Policy is used by google_compute_backend_service. - * * ## Example Usage * ```java * package generated_program; @@ -194,6 +188,22 @@ * } * ``` * + * ## Import + * + * Security policies can be imported using any of the following formats + * + * ```sh + * $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy projects/{{project}}/global/securityPolicies/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{project}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{name}} + * ``` + * */ @ResourceType(type="gcp:compute/securityPolicy:SecurityPolicy") public class SecurityPolicy extends com.pulumi.resources.CustomResource { @@ -318,14 +328,14 @@ public Output> rules() { return this.rules; } /** - * The URI of the created resourc + * The URI of the created resource. * */ @Export(name="selfLink", type=String.class, parameters={}) private Output selfLink; /** - * @return The URI of the created resourc + * @return The URI of the created resource. * */ public Output selfLink() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/SecurityScanConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/SecurityScanConfig.java index 96e9aa2d40..d41ca06443 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/SecurityScanConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/SecurityScanConfig.java @@ -19,16 +19,6 @@ import javax.annotation.Nullable; /** - * A ScanConfig resource contains the configurations to launch a scan. - * - * To get more information about ScanConfig, see: - * - * * [API documentation](https://cloud.google.com/security-scanner/docs/reference/rest/v1beta/projects.scanConfigs) - * * How-to Guides - * * [Using Cloud Security Scanner](https://cloud.google.com/security-scanner/docs/scanning) - * - * > **Warning:** All arguments including `authentication.google_account.password` and `authentication.custom_account.password` will be stored in the raw state as plain-text. - * * ## Example Usage * ### Scan Config Basic * ```java @@ -60,7 +50,7 @@ * .build()); * * var scan_config = new SecurityScanConfig("scan-config", SecurityScanConfigArgs.builder() - * .displayName("scan-config") + * .displayName("terraform-scan-config") * .startingUrls(scannerStaticIp.address().applyValue(address -> String.format("http://%s", address))) * .targetPlatforms("COMPUTE") * .build(), CustomResourceOptions.builder() diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/Snapshot.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/Snapshot.java index 356a14af5a..100f8ffcac 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/Snapshot.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/Snapshot.java @@ -20,28 +20,6 @@ import javax.annotation.Nullable; /** - * Represents a Persistent Disk Snapshot resource. - * - * Use snapshots to back up data from your persistent disks. Snapshots are - * different from public images and custom images, which are used primarily - * to create instances or configure instance templates. Snapshots are useful - * for periodic backup of the data on your persistent disks. You can create - * snapshots from persistent disks even while they are attached to running - * instances. - * - * Snapshots are incremental, so you can create regular snapshots on a - * persistent disk faster and at a much lower cost than if you regularly - * created a full image of the disk. - * - * To get more information about Snapshot, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/snapshots) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/compute/docs/disks/create-snapshots) - * - * > **Warning:** All arguments including `snapshot_encryption_key.raw_key` and `source_disk_encryption_key.raw_key` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Snapshot Basic * ```java 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 f30ea440bb..ae3d0c6df3 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 @@ -583,22 +583,24 @@ public Output> role() { return Codegen.optional(this.role); } /** - * An array of configurations for secondary IP ranges for VM instances - * contained in this subnetwork. The primary IP of such VM must belong - * to the primary ipCidrRange of the subnetwork. The alias IPs may belong - * to either primary or secondary ranges. - * Structure is documented below. + * An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + * VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + * ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + * to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + * syntax: 'example=[]' For more details about this behavior, see [this + * section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). * */ @Export(name="secondaryIpRanges", type=List.class, parameters={SubnetworkSecondaryIpRange.class}) private Output> secondaryIpRanges; /** - * @return An array of configurations for secondary IP ranges for VM instances - * contained in this subnetwork. The primary IP of such VM must belong - * to the primary ipCidrRange of the subnetwork. The alias IPs may belong - * to either primary or secondary ranges. - * Structure is documented below. + * @return An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + * VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + * ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + * to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + * syntax: 'example=[]' For more details about this behavior, see [this + * section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). * */ public Output> secondaryIpRanges() { 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 b25ee673ce..4ab39a97dc 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 @@ -256,22 +256,24 @@ public Optional> role() { } /** - * An array of configurations for secondary IP ranges for VM instances - * contained in this subnetwork. The primary IP of such VM must belong - * to the primary ipCidrRange of the subnetwork. The alias IPs may belong - * to either primary or secondary ranges. - * Structure is documented below. + * An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + * VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + * ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + * to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + * syntax: 'example=[]' For more details about this behavior, see [this + * section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). * */ @Import(name="secondaryIpRanges") private @Nullable Output> secondaryIpRanges; /** - * @return An array of configurations for secondary IP ranges for VM instances - * contained in this subnetwork. The primary IP of such VM must belong - * to the primary ipCidrRange of the subnetwork. The alias IPs may belong - * to either primary or secondary ranges. - * Structure is documented below. + * @return An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + * VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + * ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + * to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + * syntax: 'example=[]' For more details about this behavior, see [this + * section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). * */ public Optional>> secondaryIpRanges() { @@ -643,11 +645,12 @@ public Builder role(String role) { } /** - * @param secondaryIpRanges An array of configurations for secondary IP ranges for VM instances - * contained in this subnetwork. The primary IP of such VM must belong - * to the primary ipCidrRange of the subnetwork. The alias IPs may belong - * to either primary or secondary ranges. - * Structure is documented below. + * @param secondaryIpRanges An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + * VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + * ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + * to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + * syntax: 'example=[]' For more details about this behavior, see [this + * section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). * * @return builder * @@ -658,11 +661,12 @@ public Builder secondaryIpRanges(@Nullable Output secondaryI } /** - * @param secondaryIpRanges An array of configurations for secondary IP ranges for VM instances - * contained in this subnetwork. The primary IP of such VM must belong - * to the primary ipCidrRange of the subnetwork. The alias IPs may belong - * to either primary or secondary ranges. - * Structure is documented below. + * @param secondaryIpRanges An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + * VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + * ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + * to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + * syntax: 'example=[]' For more details about this behavior, see [this + * section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). * * @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 87064dc18b..bf6e651dd4 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 @@ -271,14 +271,16 @@ public Output> natPolicy() { return Codegen.optional(this.natPolicy); } /** - * The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + * The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + * the network that the default network interface belongs to. * */ @Export(name="network", type=String.class, parameters={}) private Output network; /** - * @return The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + * @return The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + * the network that the default network interface belongs to. * */ public Output> network() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetInstanceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetInstanceArgs.java index 69cf648e0d..07d46dc11a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetInstanceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetInstanceArgs.java @@ -104,14 +104,16 @@ public Optional> natPolicy() { } /** - * The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + * The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + * the network that the default network interface belongs to. * */ @Import(name="network") private @Nullable Output network; /** - * @return The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + * @return The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + * the network that the default network interface belongs to. * */ public Optional> network() { @@ -293,7 +295,8 @@ public Builder natPolicy(String natPolicy) { } /** - * @param network The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + * @param network The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + * the network that the default network interface belongs to. * * @return builder * @@ -304,7 +307,8 @@ public Builder network(@Nullable Output network) { } /** - * @param network The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + * @param network The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + * the network that the default network interface belongs to. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetPool.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetPool.java index 057263330a..d14db9fd2a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetPool.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetPool.java @@ -151,22 +151,18 @@ public Output> healthChecks() { return Codegen.optional(this.healthChecks); } /** - * List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. * */ @Export(name="instances", type=List.class, parameters={String.class}) private Output> instances; /** - * @return List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * @return List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. * */ public Output> instances() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetPoolArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetPoolArgs.java index 01cf65e310..65c2a0b4e3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetPoolArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/TargetPoolArgs.java @@ -84,22 +84,18 @@ public Optional> healthChecks() { } /** - * List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. * */ @Import(name="instances") private @Nullable Output> instances; /** - * @return List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * @return List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. * */ public Optional>> instances() { @@ -299,11 +295,9 @@ public Builder healthChecks(String healthChecks) { } /** - * @param instances List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * @param instances List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. * * @return builder * @@ -314,11 +308,9 @@ public Builder instances(@Nullable Output> instances) { } /** - * @param instances List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * @param instances List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. * * @return builder * @@ -328,11 +320,9 @@ public Builder instances(List instances) { } /** - * @param instances List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * @param instances List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/VPNTunnel.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/VPNTunnel.java index f323cc6b11..4abaf4cebf 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/VPNTunnel.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/VPNTunnel.java @@ -18,18 +18,6 @@ import javax.annotation.Nullable; /** - * VPN tunnel resource. - * - * To get more information about VpnTunnel, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/vpnTunnels) - * * How-to Guides - * * [Cloud VPN Overview](https://cloud.google.com/vpn/docs/concepts/overview) - * * [Networks and Tunnel Routing](https://cloud.google.com/vpn/docs/concepts/choosing-networks-routing) - * - * > **Warning:** All arguments including `shared_secret` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Vpn Tunnel Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AddressState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AddressState.java index 7270ea48ab..32b6c8d012 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AddressState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AddressState.java @@ -104,14 +104,14 @@ public Optional> labelFingerprint() { } /** - * Labels to apply to this address. A list of key->value pairs. + * Labels to apply to this address. A list of key->value pairs. * */ @Import(name="labels") private @Nullable Output> labels; /** - * @return Labels to apply to this address. A list of key->value pairs. + * @return Labels to apply to this address. A list of key->value pairs. * */ public Optional>> labels() { @@ -475,7 +475,7 @@ public Builder labelFingerprint(String labelFingerprint) { } /** - * @param labels Labels to apply to this address. A list of key->value pairs. + * @param labels Labels to apply to this address. A list of key->value pairs. * * @return builder * @@ -486,7 +486,7 @@ public Builder labels(@Nullable Output> labels) { } /** - * @param labels Labels to apply to this address. A list of key->value pairs. + * @param labels Labels to apply to this address. A list of key->value pairs. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalarAutoscalingPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalarAutoscalingPolicyArgs.java index 98f4c11bc3..e0ff111952 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalarAutoscalingPolicyArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalarAutoscalingPolicyArgs.java @@ -170,21 +170,9 @@ public Optional> mode() { return Optional.ofNullable(this.mode); } - /** - * Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - */ @Import(name="scaleDownControl") private @Nullable Output scaleDownControl; - /** - * @return Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - */ public Optional> scaleDownControl() { return Optional.ofNullable(this.scaleDownControl); } @@ -458,27 +446,11 @@ public Builder mode(String mode) { return mode(Output.of(mode)); } - /** - * @param scaleDownControl Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - * @return builder - * - */ public Builder scaleDownControl(@Nullable Output scaleDownControl) { $.scaleDownControl = scaleDownControl; return this; } - /** - * @param scaleDownControl Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - * @return builder - * - */ public Builder scaleDownControl(AutoscalarAutoscalingPolicyScaleDownControlArgs scaleDownControl) { return scaleDownControl(Output.of(scaleDownControl)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalarAutoscalingPolicyMetricArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalarAutoscalingPolicyMetricArgs.java index 27c0b8b219..d799c169e7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalarAutoscalingPolicyMetricArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalarAutoscalingPolicyMetricArgs.java @@ -16,69 +16,9 @@ public final class AutoscalarAutoscalingPolicyMetricArgs extends com.pulumi.reso public static final AutoscalarAutoscalingPolicyMetricArgs Empty = new AutoscalarAutoscalingPolicyMetricArgs(); - /** - * A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - */ @Import(name="filter") private @Nullable Output filter; - /** - * @return A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - */ public Optional> filter() { return Optional.ofNullable(this.filter); } @@ -102,43 +42,9 @@ public Output name() { return this.name; } - /** - * If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - */ @Import(name="singleInstanceAssignment") private @Nullable Output singleInstanceAssignment; - /** - * @return If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - */ public Optional> singleInstanceAssignment() { return Optional.ofNullable(this.singleInstanceAssignment); } @@ -219,75 +125,11 @@ public Builder(AutoscalarAutoscalingPolicyMetricArgs defaults) { $ = new AutoscalarAutoscalingPolicyMetricArgs(Objects.requireNonNull(defaults)); } - /** - * @param filter A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - * @return builder - * - */ public Builder filter(@Nullable Output filter) { $.filter = filter; return this; } - /** - * @param filter A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - * @return builder - * - */ public Builder filter(String filter) { return filter(Output.of(filter)); } @@ -317,49 +159,11 @@ public Builder name(String name) { return name(Output.of(name)); } - /** - * @param singleInstanceAssignment If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - * @return builder - * - */ public Builder singleInstanceAssignment(@Nullable Output singleInstanceAssignment) { $.singleInstanceAssignment = singleInstanceAssignment; return this; } - /** - * @param singleInstanceAssignment If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - * @return builder - * - */ public Builder singleInstanceAssignment(Double singleInstanceAssignment) { return singleInstanceAssignment(Output.of(singleInstanceAssignment)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalerAutoscalingPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalerAutoscalingPolicyArgs.java index d612eb0518..d977a2276b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalerAutoscalingPolicyArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalerAutoscalingPolicyArgs.java @@ -170,21 +170,9 @@ public Optional> mode() { return Optional.ofNullable(this.mode); } - /** - * Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - */ @Import(name="scaleDownControl") private @Nullable Output scaleDownControl; - /** - * @return Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - */ public Optional> scaleDownControl() { return Optional.ofNullable(this.scaleDownControl); } @@ -458,27 +446,11 @@ public Builder mode(String mode) { return mode(Output.of(mode)); } - /** - * @param scaleDownControl Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - * @return builder - * - */ public Builder scaleDownControl(@Nullable Output scaleDownControl) { $.scaleDownControl = scaleDownControl; return this; } - /** - * @param scaleDownControl Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - * @return builder - * - */ public Builder scaleDownControl(AutoscalerAutoscalingPolicyScaleDownControlArgs scaleDownControl) { return scaleDownControl(Output.of(scaleDownControl)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalerAutoscalingPolicyMetricArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalerAutoscalingPolicyMetricArgs.java index 00a3eb040a..44982d7b0f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalerAutoscalingPolicyMetricArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/AutoscalerAutoscalingPolicyMetricArgs.java @@ -16,69 +16,9 @@ public final class AutoscalerAutoscalingPolicyMetricArgs extends com.pulumi.reso public static final AutoscalerAutoscalingPolicyMetricArgs Empty = new AutoscalerAutoscalingPolicyMetricArgs(); - /** - * A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - */ @Import(name="filter") private @Nullable Output filter; - /** - * @return A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - */ public Optional> filter() { return Optional.ofNullable(this.filter); } @@ -102,43 +42,9 @@ public Output name() { return this.name; } - /** - * If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - */ @Import(name="singleInstanceAssignment") private @Nullable Output singleInstanceAssignment; - /** - * @return If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - */ public Optional> singleInstanceAssignment() { return Optional.ofNullable(this.singleInstanceAssignment); } @@ -219,75 +125,11 @@ public Builder(AutoscalerAutoscalingPolicyMetricArgs defaults) { $ = new AutoscalerAutoscalingPolicyMetricArgs(Objects.requireNonNull(defaults)); } - /** - * @param filter A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - * @return builder - * - */ public Builder filter(@Nullable Output filter) { $.filter = filter; return this; } - /** - * @param filter A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - * @return builder - * - */ public Builder filter(String filter) { return filter(Output.of(filter)); } @@ -317,49 +159,11 @@ public Builder name(String name) { return name(Output.of(name)); } - /** - * @param singleInstanceAssignment If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - * @return builder - * - */ public Builder singleInstanceAssignment(@Nullable Output singleInstanceAssignment) { $.singleInstanceAssignment = singleInstanceAssignment; return this; } - /** - * @param singleInstanceAssignment If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - * @return builder - * - */ public Builder singleInstanceAssignment(Double singleInstanceAssignment) { return singleInstanceAssignment(Output.of(singleInstanceAssignment)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceCircuitBreakersArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceCircuitBreakersArgs.java index f6b4c0ab6d..c7df9a3f0b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceCircuitBreakersArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceCircuitBreakersArgs.java @@ -16,19 +16,9 @@ public final class BackendServiceCircuitBreakersArgs extends com.pulumi.resource public static final BackendServiceCircuitBreakersArgs Empty = new BackendServiceCircuitBreakersArgs(); - /** - * The timeout for new network connections to hosts. - * Structure is documented below. - * - */ @Import(name="connectTimeout") private @Nullable Output connectTimeout; - /** - * @return The timeout for new network connections to hosts. - * Structure is documented below. - * - */ public Optional> connectTimeout() { return Optional.ofNullable(this.connectTimeout); } @@ -151,25 +141,11 @@ public Builder(BackendServiceCircuitBreakersArgs defaults) { $ = new BackendServiceCircuitBreakersArgs(Objects.requireNonNull(defaults)); } - /** - * @param connectTimeout The timeout for new network connections to hosts. - * Structure is documented below. - * - * @return builder - * - */ public Builder connectTimeout(@Nullable Output connectTimeout) { $.connectTimeout = connectTimeout; return this; } - /** - * @param connectTimeout The timeout for new network connections to hosts. - * Structure is documented below. - * - * @return builder - * - */ public Builder connectTimeout(BackendServiceCircuitBreakersConnectTimeoutArgs connectTimeout) { return connectTimeout(Output.of(connectTimeout)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceLocalityLbPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceLocalityLbPolicyArgs.java new file mode 100644 index 0000000000..fd20996258 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceLocalityLbPolicyArgs.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.compute.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.compute.inputs.BackendServiceLocalityLbPolicyCustomPolicyArgs; +import com.pulumi.gcp.compute.inputs.BackendServiceLocalityLbPolicyPolicyArgs; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class BackendServiceLocalityLbPolicyArgs extends com.pulumi.resources.ResourceArgs { + + public static final BackendServiceLocalityLbPolicyArgs Empty = new BackendServiceLocalityLbPolicyArgs(); + + /** + * The configuration for a custom policy implemented by the user and + * deployed with the client. + * Structure is documented below. + * + */ + @Import(name="customPolicy") + private @Nullable Output customPolicy; + + /** + * @return The configuration for a custom policy implemented by the user and + * deployed with the client. + * Structure is documented below. + * + */ + public Optional> customPolicy() { + return Optional.ofNullable(this.customPolicy); + } + + /** + * The configuration for a built-in load balancing policy. + * Structure is documented below. + * + */ + @Import(name="policy") + private @Nullable Output policy; + + /** + * @return The configuration for a built-in load balancing policy. + * Structure is documented below. + * + */ + public Optional> policy() { + return Optional.ofNullable(this.policy); + } + + private BackendServiceLocalityLbPolicyArgs() {} + + private BackendServiceLocalityLbPolicyArgs(BackendServiceLocalityLbPolicyArgs $) { + this.customPolicy = $.customPolicy; + this.policy = $.policy; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(BackendServiceLocalityLbPolicyArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private BackendServiceLocalityLbPolicyArgs $; + + public Builder() { + $ = new BackendServiceLocalityLbPolicyArgs(); + } + + public Builder(BackendServiceLocalityLbPolicyArgs defaults) { + $ = new BackendServiceLocalityLbPolicyArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param customPolicy The configuration for a custom policy implemented by the user and + * deployed with the client. + * Structure is documented below. + * + * @return builder + * + */ + public Builder customPolicy(@Nullable Output customPolicy) { + $.customPolicy = customPolicy; + return this; + } + + /** + * @param customPolicy The configuration for a custom policy implemented by the user and + * deployed with the client. + * Structure is documented below. + * + * @return builder + * + */ + public Builder customPolicy(BackendServiceLocalityLbPolicyCustomPolicyArgs customPolicy) { + return customPolicy(Output.of(customPolicy)); + } + + /** + * @param policy The configuration for a built-in load balancing policy. + * Structure is documented below. + * + * @return builder + * + */ + public Builder policy(@Nullable Output policy) { + $.policy = policy; + return this; + } + + /** + * @param policy The configuration for a built-in load balancing policy. + * Structure is documented below. + * + * @return builder + * + */ + public Builder policy(BackendServiceLocalityLbPolicyPolicyArgs policy) { + return policy(Output.of(policy)); + } + + public BackendServiceLocalityLbPolicyArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceLocalityLbPolicyCustomPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceLocalityLbPolicyCustomPolicyArgs.java new file mode 100644 index 0000000000..784a8156e1 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceLocalityLbPolicyCustomPolicyArgs.java @@ -0,0 +1,149 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class BackendServiceLocalityLbPolicyCustomPolicyArgs extends com.pulumi.resources.ResourceArgs { + + public static final BackendServiceLocalityLbPolicyCustomPolicyArgs Empty = new BackendServiceLocalityLbPolicyCustomPolicyArgs(); + + /** + * An optional, arbitrary JSON object with configuration data, understood + * by a locally installed custom policy implementation. + * + */ + @Import(name="data") + private @Nullable Output data; + + /** + * @return An optional, arbitrary JSON object with configuration data, understood + * by a locally installed custom policy implementation. + * + */ + public Optional> data() { + return Optional.ofNullable(this.data); + } + + /** + * Identifies the custom policy. + * The value should match the type the custom implementation is registered + * with on the gRPC clients. It should follow protocol buffer + * message naming conventions and include the full path (e.g. + * myorg.CustomLbPolicy). The maximum length is 256 characters. + * Note that specifying the same custom policy more than once for a + * backend is not a valid configuration and will be rejected. + * + */ + @Import(name="name", required=true) + private Output name; + + /** + * @return Identifies the custom policy. + * The value should match the type the custom implementation is registered + * with on the gRPC clients. It should follow protocol buffer + * message naming conventions and include the full path (e.g. + * myorg.CustomLbPolicy). The maximum length is 256 characters. + * Note that specifying the same custom policy more than once for a + * backend is not a valid configuration and will be rejected. + * + */ + public Output name() { + return this.name; + } + + private BackendServiceLocalityLbPolicyCustomPolicyArgs() {} + + private BackendServiceLocalityLbPolicyCustomPolicyArgs(BackendServiceLocalityLbPolicyCustomPolicyArgs $) { + this.data = $.data; + this.name = $.name; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(BackendServiceLocalityLbPolicyCustomPolicyArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private BackendServiceLocalityLbPolicyCustomPolicyArgs $; + + public Builder() { + $ = new BackendServiceLocalityLbPolicyCustomPolicyArgs(); + } + + public Builder(BackendServiceLocalityLbPolicyCustomPolicyArgs defaults) { + $ = new BackendServiceLocalityLbPolicyCustomPolicyArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param data An optional, arbitrary JSON object with configuration data, understood + * by a locally installed custom policy implementation. + * + * @return builder + * + */ + public Builder data(@Nullable Output data) { + $.data = data; + return this; + } + + /** + * @param data An optional, arbitrary JSON object with configuration data, understood + * by a locally installed custom policy implementation. + * + * @return builder + * + */ + public Builder data(String data) { + return data(Output.of(data)); + } + + /** + * @param name Identifies the custom policy. + * The value should match the type the custom implementation is registered + * with on the gRPC clients. It should follow protocol buffer + * message naming conventions and include the full path (e.g. + * myorg.CustomLbPolicy). The maximum length is 256 characters. + * Note that specifying the same custom policy more than once for a + * backend is not a valid configuration and will be rejected. + * + * @return builder + * + */ + public Builder name(Output name) { + $.name = name; + return this; + } + + /** + * @param name Identifies the custom policy. + * The value should match the type the custom implementation is registered + * with on the gRPC clients. It should follow protocol buffer + * message naming conventions and include the full path (e.g. + * myorg.CustomLbPolicy). The maximum length is 256 characters. + * Note that specifying the same custom policy more than once for a + * backend is not a valid configuration and will be rejected. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + public BackendServiceLocalityLbPolicyCustomPolicyArgs build() { + $.name = Objects.requireNonNull($.name, "expected parameter 'name' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceLocalityLbPolicyPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceLocalityLbPolicyPolicyArgs.java new file mode 100644 index 0000000000..545bf07a47 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceLocalityLbPolicyPolicyArgs.java @@ -0,0 +1,110 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; + + +public final class BackendServiceLocalityLbPolicyPolicyArgs extends com.pulumi.resources.ResourceArgs { + + public static final BackendServiceLocalityLbPolicyPolicyArgs Empty = new BackendServiceLocalityLbPolicyPolicyArgs(); + + /** + * The name of a locality load balancer policy to be used. The value + * should be one of the predefined ones as supported by localityLbPolicy, + * although at the moment only ROUND_ROBIN is supported. + * This field should only be populated when the customPolicy field is not + * used. + * Note that specifying the same policy more than once for a backend is + * not a valid configuration and will be rejected. + * The possible values are: + * + */ + @Import(name="name", required=true) + private Output name; + + /** + * @return The name of a locality load balancer policy to be used. The value + * should be one of the predefined ones as supported by localityLbPolicy, + * although at the moment only ROUND_ROBIN is supported. + * This field should only be populated when the customPolicy field is not + * used. + * Note that specifying the same policy more than once for a backend is + * not a valid configuration and will be rejected. + * The possible values are: + * + */ + public Output name() { + return this.name; + } + + private BackendServiceLocalityLbPolicyPolicyArgs() {} + + private BackendServiceLocalityLbPolicyPolicyArgs(BackendServiceLocalityLbPolicyPolicyArgs $) { + this.name = $.name; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(BackendServiceLocalityLbPolicyPolicyArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private BackendServiceLocalityLbPolicyPolicyArgs $; + + public Builder() { + $ = new BackendServiceLocalityLbPolicyPolicyArgs(); + } + + public Builder(BackendServiceLocalityLbPolicyPolicyArgs defaults) { + $ = new BackendServiceLocalityLbPolicyPolicyArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param name The name of a locality load balancer policy to be used. The value + * should be one of the predefined ones as supported by localityLbPolicy, + * although at the moment only ROUND_ROBIN is supported. + * This field should only be populated when the customPolicy field is not + * used. + * Note that specifying the same policy more than once for a backend is + * not a valid configuration and will be rejected. + * The possible values are: + * + * @return builder + * + */ + public Builder name(Output name) { + $.name = name; + return this; + } + + /** + * @param name The name of a locality load balancer policy to be used. The value + * should be one of the predefined ones as supported by localityLbPolicy, + * although at the moment only ROUND_ROBIN is supported. + * This field should only be populated when the customPolicy field is not + * used. + * Note that specifying the same policy more than once for a backend is + * not a valid configuration and will be rejected. + * The possible values are: + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + public BackendServiceLocalityLbPolicyPolicyArgs build() { + $.name = Objects.requireNonNull($.name, "expected parameter 'name' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceState.java index dde8eb32eb..e561f10774 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/BackendServiceState.java @@ -10,6 +10,7 @@ import com.pulumi.gcp.compute.inputs.BackendServiceCircuitBreakersArgs; import com.pulumi.gcp.compute.inputs.BackendServiceConsistentHashArgs; import com.pulumi.gcp.compute.inputs.BackendServiceIapArgs; +import com.pulumi.gcp.compute.inputs.BackendServiceLocalityLbPolicyArgs; import com.pulumi.gcp.compute.inputs.BackendServiceLogConfigArgs; import com.pulumi.gcp.compute.inputs.BackendServiceOutlierDetectionArgs; import com.pulumi.gcp.compute.inputs.BackendServiceSecuritySettingsArgs; @@ -360,6 +361,33 @@ public Optional> loadBalancingScheme() { return Optional.ofNullable(this.loadBalancingScheme); } + /** + * A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + * + */ + @Import(name="localityLbPolicies") + private @Nullable Output> localityLbPolicies; + + /** + * @return A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + * + */ + public Optional>> localityLbPolicies() { + return Optional.ofNullable(this.localityLbPolicies); + } + /** * The load balancing algorithm used within the scope of the locality. * The possible values are: @@ -611,6 +639,7 @@ private BackendServiceState(BackendServiceState $) { this.healthChecks = $.healthChecks; this.iap = $.iap; this.loadBalancingScheme = $.loadBalancingScheme; + this.localityLbPolicies = $.localityLbPolicies; this.localityLbPolicy = $.localityLbPolicy; this.logConfig = $.logConfig; this.name = $.name; @@ -1118,6 +1147,55 @@ public Builder loadBalancingScheme(String loadBalancingScheme) { return loadBalancingScheme(Output.of(loadBalancingScheme)); } + /** + * @param localityLbPolicies A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + * + * @return builder + * + */ + public Builder localityLbPolicies(@Nullable Output> localityLbPolicies) { + $.localityLbPolicies = localityLbPolicies; + return this; + } + + /** + * @param localityLbPolicies A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + * + * @return builder + * + */ + public Builder localityLbPolicies(List localityLbPolicies) { + return localityLbPolicies(Output.of(localityLbPolicies)); + } + + /** + * @param localityLbPolicies A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + * + * @return builder + * + */ + public Builder localityLbPolicies(BackendServiceLocalityLbPolicyArgs... localityLbPolicies) { + return localityLbPolicies(List.of(localityLbPolicies)); + } + /** * @param localityLbPolicy The load balancing algorithm used within the scope of the locality. * The possible values are: diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/DiskState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/DiskState.java index dec7af29f0..1471ee77d5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/DiskState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/DiskState.java @@ -301,11 +301,9 @@ public Optional> provisionedIops() { } /** - * Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. * */ @@ -313,11 +311,9 @@ public Optional> provisionedIops() { private @Nullable Output> resourcePolicies; /** - * @return Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * @return Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. * */ @@ -341,34 +337,22 @@ public Optional> selfLink() { } /** - * Size of the persistent disk, specified in GB. You can specify this - * field when creating a persistent disk using the `image` or - * `snapshot` parameter, or specify it alone to create an empty - * persistent disk. - * If you specify this field along with `image` or `snapshot`, - * the value must not be less than the size of the image - * or the size of the snapshot. - * ~>**NOTE** If you change the size, the provider updates the disk size - * if upsizing is detected but recreates the disk if downsizing is requested. - * You can add `lifecycle.prevent_destroy` in the config to prevent destroying - * and recreating. + * Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + * 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + * with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + * ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + * downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. * */ @Import(name="size") private @Nullable Output size; /** - * @return Size of the persistent disk, specified in GB. You can specify this - * field when creating a persistent disk using the `image` or - * `snapshot` parameter, or specify it alone to create an empty - * persistent disk. - * If you specify this field along with `image` or `snapshot`, - * the value must not be less than the size of the image - * or the size of the snapshot. - * ~>**NOTE** If you change the size, the provider updates the disk size - * if upsizing is detected but recreates the disk if downsizing is requested. - * You can add `lifecycle.prevent_destroy` in the config to prevent destroying - * and recreating. + * @return Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + * 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + * with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + * ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + * downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. * */ public Optional> size() { @@ -994,11 +978,9 @@ public Builder provisionedIops(Integer provisionedIops) { } /** - * @param resourcePolicies Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * @param resourcePolicies Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. * * @return builder @@ -1010,11 +992,9 @@ public Builder resourcePolicies(@Nullable Output> resourcePolicies) } /** - * @param resourcePolicies Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * @param resourcePolicies Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. * * @return builder @@ -1025,11 +1005,9 @@ public Builder resourcePolicies(List resourcePolicies) { } /** - * @param resourcePolicies Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * @param resourcePolicies Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. * * @return builder @@ -1061,17 +1039,11 @@ public Builder selfLink(String selfLink) { } /** - * @param size Size of the persistent disk, specified in GB. You can specify this - * field when creating a persistent disk using the `image` or - * `snapshot` parameter, or specify it alone to create an empty - * persistent disk. - * If you specify this field along with `image` or `snapshot`, - * the value must not be less than the size of the image - * or the size of the snapshot. - * ~>**NOTE** If you change the size, the provider updates the disk size - * if upsizing is detected but recreates the disk if downsizing is requested. - * You can add `lifecycle.prevent_destroy` in the config to prevent destroying - * and recreating. + * @param size Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + * 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + * with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + * ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + * downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. * * @return builder * @@ -1082,17 +1054,11 @@ public Builder size(@Nullable Output size) { } /** - * @param size Size of the persistent disk, specified in GB. You can specify this - * field when creating a persistent disk using the `image` or - * `snapshot` parameter, or specify it alone to create an empty - * persistent disk. - * If you specify this field along with `image` or `snapshot`, - * the value must not be less than the size of the image - * or the size of the snapshot. - * ~>**NOTE** If you change the size, the provider updates the disk size - * if upsizing is detected but recreates the disk if downsizing is requested. - * You can add `lifecycle.prevent_destroy` in the config to prevent destroying - * and recreating. + * @param size Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + * 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + * with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + * ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + * downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/ForwardingRuleState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/ForwardingRuleState.java index 6185d7074f..e54af26f98 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/ForwardingRuleState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/ForwardingRuleState.java @@ -213,14 +213,14 @@ public Optional> labelFingerprint() { } /** - * Labels to apply to this forwarding rule. A list of key->value pairs. + * Labels to apply to this rule. * */ @Import(name="labels") private @Nullable Output> labels; /** - * @return Labels to apply to this forwarding rule. A list of key->value pairs. + * @return Labels to apply to this rule. * */ public Optional>> labels() { @@ -886,7 +886,7 @@ public Builder labelFingerprint(String labelFingerprint) { } /** - * @param labels Labels to apply to this forwarding rule. A list of key->value pairs. + * @param labels Labels to apply to this rule. * * @return builder * @@ -897,7 +897,7 @@ public Builder labels(@Nullable Output> labels) { } /** - * @param labels Labels to apply to this forwarding rule. A list of key->value pairs. + * @param labels Labels to apply to this rule. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GlobalAddressState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GlobalAddressState.java index 73fe562354..3c61e9726a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GlobalAddressState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GlobalAddressState.java @@ -122,14 +122,14 @@ public Optional> labelFingerprint() { } /** - * Labels to apply to this address. A list of key->value pairs. + * Labels to apply to this address. A list of key->value pairs. * */ @Import(name="labels") private @Nullable Output> labels; /** - * @return Labels to apply to this address. A list of key->value pairs. + * @return Labels to apply to this address. A list of key->value pairs. * */ public Optional>> labels() { @@ -223,18 +223,16 @@ public Optional> project() { } /** - * The purpose of the resource. Possible values include: - * * VPC_PEERING - for peer networks - * * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + * The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + * ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks * */ @Import(name="purpose") private @Nullable Output purpose; /** - * @return The purpose of the resource. Possible values include: - * * VPC_PEERING - for peer networks - * * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + * @return The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + * ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks * */ public Optional> purpose() { @@ -433,7 +431,7 @@ public Builder labelFingerprint(String labelFingerprint) { } /** - * @param labels Labels to apply to this address. A list of key->value pairs. + * @param labels Labels to apply to this address. A list of key->value pairs. * * @return builder * @@ -444,7 +442,7 @@ public Builder labels(@Nullable Output> labels) { } /** - * @param labels Labels to apply to this address. A list of key->value pairs. + * @param labels Labels to apply to this address. A list of key->value pairs. * * @return builder * @@ -564,9 +562,8 @@ public Builder project(String project) { } /** - * @param purpose The purpose of the resource. Possible values include: - * * VPC_PEERING - for peer networks - * * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + * @param purpose The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + * ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks * * @return builder * @@ -577,9 +574,8 @@ public Builder purpose(@Nullable Output purpose) { } /** - * @param purpose The purpose of the resource. Possible values include: - * * VPC_PEERING - for peer networks - * * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + * @param purpose The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + * ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GlobalForwardingRuleState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GlobalForwardingRuleState.java index 84267774b8..15c0099cae 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GlobalForwardingRuleState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/GlobalForwardingRuleState.java @@ -130,14 +130,14 @@ public Optional> labelFingerprint() { } /** - * Labels to apply to this forwarding rule. A list of key->value pairs. + * Labels to apply to this rule. * */ @Import(name="labels") private @Nullable Output> labels; /** - * @return Labels to apply to this forwarding rule. A list of key->value pairs. + * @return Labels to apply to this rule. * */ public Optional>> labels() { @@ -145,36 +145,26 @@ public Optional>> labels() { } /** - * This signifies what the GlobalForwardingRule will be used for. - * The value of INTERNAL_SELF_MANAGED means that this will be used for - * Internal Global HTTP(S) LB. The value of EXTERNAL means that this - * will be used for External Global Load Balancing (HTTP(S) LB, - * External TCP/UDP LB, SSL Proxy) - * Note: This field must be set "" if the global address is - * External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - * that this will be used for Global external HTTP(S) load balancers. - * Note: This field must be set "" if the global address is - * configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - * Default value is `EXTERNAL`. - * Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + * Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + * from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + * `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + * Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + * forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + * INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED * */ @Import(name="loadBalancingScheme") private @Nullable Output loadBalancingScheme; /** - * @return This signifies what the GlobalForwardingRule will be used for. - * The value of INTERNAL_SELF_MANAGED means that this will be used for - * Internal Global HTTP(S) LB. The value of EXTERNAL means that this - * will be used for External Global Load Balancing (HTTP(S) LB, - * External TCP/UDP LB, SSL Proxy) - * Note: This field must be set "" if the global address is - * External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - * that this will be used for Global external HTTP(S) load balancers. - * Note: This field must be set "" if the global address is - * configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - * Default value is `EXTERNAL`. - * Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + * @return Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + * from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + * `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + * Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + * forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + * INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED * */ public Optional> loadBalancingScheme() { @@ -252,22 +242,18 @@ public Optional> name() { } /** - * This field is not used for external load balancing. - * For INTERNAL_SELF_MANAGED load balancing, this field - * identifies the network that the load balanced IP should belong to - * for this global forwarding rule. If this field is not specified, - * the default network will be used. + * This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + * field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + * specified, the default network will be used. * */ @Import(name="network") private @Nullable Output network; /** - * @return This field is not used for external load balancing. - * For INTERNAL_SELF_MANAGED load balancing, this field - * identifies the network that the load balanced IP should belong to - * for this global forwarding rule. If this field is not specified, - * the default network will be used. + * @return This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + * field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + * specified, the default network will be used. * */ public Optional> network() { @@ -384,24 +370,20 @@ public Optional> selfLink() { } /** - * The URL of the target resource to receive the matched traffic. - * The forwarded traffic must be of a type appropriate to the target object. - * For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - * are valid. - * For global address with a purpose of PRIVATE_SERVICE_CONNECT and - * addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + * The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + * the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + * resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + * balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. * */ @Import(name="target") private @Nullable Output target; /** - * @return The URL of the target resource to receive the matched traffic. - * The forwarded traffic must be of a type appropriate to the target object. - * For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - * are valid. - * For global address with a purpose of PRIVATE_SERVICE_CONNECT and - * addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + * @return The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + * the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + * resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + * balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. * */ public Optional> target() { @@ -589,7 +571,7 @@ public Builder labelFingerprint(String labelFingerprint) { } /** - * @param labels Labels to apply to this forwarding rule. A list of key->value pairs. + * @param labels Labels to apply to this rule. * * @return builder * @@ -600,7 +582,7 @@ public Builder labels(@Nullable Output> labels) { } /** - * @param labels Labels to apply to this forwarding rule. A list of key->value pairs. + * @param labels Labels to apply to this rule. * * @return builder * @@ -610,18 +592,13 @@ public Builder labels(Map labels) { } /** - * @param loadBalancingScheme This signifies what the GlobalForwardingRule will be used for. - * The value of INTERNAL_SELF_MANAGED means that this will be used for - * Internal Global HTTP(S) LB. The value of EXTERNAL means that this - * will be used for External Global Load Balancing (HTTP(S) LB, - * External TCP/UDP LB, SSL Proxy) - * Note: This field must be set "" if the global address is - * External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - * that this will be used for Global external HTTP(S) load balancers. - * Note: This field must be set "" if the global address is - * configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - * Default value is `EXTERNAL`. - * Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + * @param loadBalancingScheme Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + * from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + * `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + * Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + * forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + * INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED * * @return builder * @@ -632,18 +609,13 @@ public Builder loadBalancingScheme(@Nullable Output loadBalancingScheme) } /** - * @param loadBalancingScheme This signifies what the GlobalForwardingRule will be used for. - * The value of INTERNAL_SELF_MANAGED means that this will be used for - * Internal Global HTTP(S) LB. The value of EXTERNAL means that this - * will be used for External Global Load Balancing (HTTP(S) LB, - * External TCP/UDP LB, SSL Proxy) - * Note: This field must be set "" if the global address is - * External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - * that this will be used for Global external HTTP(S) load balancers. - * Note: This field must be set "" if the global address is - * configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - * Default value is `EXTERNAL`. - * Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + * @param loadBalancingScheme Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + * from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + * `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + * Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + * forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + * INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED * * @return builder * @@ -759,11 +731,9 @@ public Builder name(String name) { } /** - * @param network This field is not used for external load balancing. - * For INTERNAL_SELF_MANAGED load balancing, this field - * identifies the network that the load balanced IP should belong to - * for this global forwarding rule. If this field is not specified, - * the default network will be used. + * @param network This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + * field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + * specified, the default network will be used. * * @return builder * @@ -774,11 +744,9 @@ public Builder network(@Nullable Output network) { } /** - * @param network This field is not used for external load balancing. - * For INTERNAL_SELF_MANAGED load balancing, this field - * identifies the network that the load balanced IP should belong to - * for this global forwarding rule. If this field is not specified, - * the default network will be used. + * @param network This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + * field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + * specified, the default network will be used. * * @return builder * @@ -927,12 +895,10 @@ public Builder selfLink(String selfLink) { } /** - * @param target The URL of the target resource to receive the matched traffic. - * The forwarded traffic must be of a type appropriate to the target object. - * For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - * are valid. - * For global address with a purpose of PRIVATE_SERVICE_CONNECT and - * addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + * @param target The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + * the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + * resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + * balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. * * @return builder * @@ -943,12 +909,10 @@ public Builder target(@Nullable Output target) { } /** - * @param target The URL of the target resource to receive the matched traffic. - * The forwarded traffic must be of a type appropriate to the target object. - * For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - * are valid. - * For global address with a purpose of PRIVATE_SERVICE_CONNECT and - * addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + * @param target The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + * the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + * resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + * balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceAttachedDiskArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceAttachedDiskArgs.java index 196f576aad..e27f1734f3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceAttachedDiskArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceAttachedDiskArgs.java @@ -34,7 +34,7 @@ public Optional> deviceName() { /** * A 256-bit [customer-supplied encryption key] - * (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. * @@ -44,7 +44,7 @@ public Optional> deviceName() { /** * @return A 256-bit [customer-supplied encryption key] - * (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. * @@ -169,7 +169,7 @@ public Builder deviceName(String deviceName) { /** * @param diskEncryptionKeyRaw A 256-bit [customer-supplied encryption key] - * (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. * @@ -183,7 +183,7 @@ public Builder diskEncryptionKeyRaw(@Nullable Output diskEncryptionKeyRa /** * @param diskEncryptionKeyRaw A 256-bit [customer-supplied encryption key] - * (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceBootDiskArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceBootDiskArgs.java index 3301430fb0..664ac2480d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceBootDiskArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceBootDiskArgs.java @@ -53,7 +53,7 @@ public Optional> deviceName() { /** * A 256-bit [customer-supplied encryption key] - * (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` * may be set. @@ -64,7 +64,7 @@ public Optional> deviceName() { /** * @return A 256-bit [customer-supplied encryption key] - * (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` * may be set. @@ -234,7 +234,7 @@ public Builder deviceName(String deviceName) { /** * @param diskEncryptionKeyRaw A 256-bit [customer-supplied encryption key] - * (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` * may be set. @@ -249,7 +249,7 @@ public Builder diskEncryptionKeyRaw(@Nullable Output diskEncryptionKeyRa /** * @param diskEncryptionKeyRaw A 256-bit [customer-supplied encryption key] - * (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` * may be set. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromTemplateState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromTemplateState.java index db9d6b6fa3..efc989a2d8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromTemplateState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceFromTemplateState.java @@ -480,14 +480,16 @@ public Optional> scheduling() { } /** - * The scratch disks attached to the instance. + * * `network_interface.alias_ip_range` + * * `network_interface.access_config` * */ @Import(name="scratchDisks") private @Nullable Output> scratchDisks; /** - * @return The scratch disks attached to the instance. + * @return * `network_interface.alias_ip_range` + * * `network_interface.access_config` * */ public Optional>> scratchDisks() { @@ -1317,7 +1319,8 @@ public Builder scheduling(InstanceFromTemplateSchedulingArgs scheduling) { } /** - * @param scratchDisks The scratch disks attached to the instance. + * @param scratchDisks * `network_interface.alias_ip_range` + * * `network_interface.access_config` * * @return builder * @@ -1328,7 +1331,8 @@ public Builder scratchDisks(@Nullable Output scratchDis } /** - * @param scratchDisks The scratch disks attached to the instance. + * @param scratchDisks * `network_interface.alias_ip_range` + * * `network_interface.access_config` * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceGroupManagerState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceGroupManagerState.java index 3258204a53..2fd9b0b3ed 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceGroupManagerState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceGroupManagerState.java @@ -372,18 +372,16 @@ public Optional>> versions() { } /** - * Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, this provider will - * continue trying until it times out. + * Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * */ @Import(name="waitForInstances") private @Nullable Output waitForInstances; /** - * @return Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, this provider will - * continue trying until it times out. + * @return Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * */ public Optional> waitForInstances() { @@ -1010,9 +1008,8 @@ public Builder versions(InstanceGroupManagerVersionArgs... versions) { } /** - * @param waitForInstances Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, this provider will - * continue trying until it times out. + * @param waitForInstances Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * * @return builder * @@ -1023,9 +1020,8 @@ public Builder waitForInstances(@Nullable Output waitForInstances) { } /** - * @param waitForInstances Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, this provider will - * continue trying until it times out. + * @param waitForInstances Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * * @return builder * 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 6d5739bf82..528d9e1376 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 @@ -20,27 +20,9 @@ public final class InstanceNetworkInterfaceArgs extends com.pulumi.resources.Res public static final InstanceNetworkInterfaceArgs Empty = new InstanceNetworkInterfaceArgs(); - /** - * Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet. If omitted, ssh will not - * work unless this provider can send traffic to the instance's network (e.g. via - * tunnel or because it is running on another cloud instance on that network). - * This block can be repeated multiple times. Structure documented below. - * - */ @Import(name="accessConfigs") private @Nullable Output> accessConfigs; - /** - * @return Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet. If omitted, ssh will not - * work unless this provider can send traffic to the instance's network (e.g. via - * tunnel or because it is running on another cloud instance on that network). - * This block can be repeated multiple times. Structure documented below. - * - */ public Optional>> accessConfigs() { return Optional.ofNullable(this.accessConfigs); } @@ -281,48 +263,15 @@ public Builder(InstanceNetworkInterfaceArgs defaults) { $ = new InstanceNetworkInterfaceArgs(Objects.requireNonNull(defaults)); } - /** - * @param accessConfigs Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet. If omitted, ssh will not - * work unless this provider can send traffic to the instance's network (e.g. via - * tunnel or because it is running on another cloud instance on that network). - * This block can be repeated multiple times. Structure documented below. - * - * @return builder - * - */ public Builder accessConfigs(@Nullable Output> accessConfigs) { $.accessConfigs = accessConfigs; return this; } - /** - * @param accessConfigs Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet. If omitted, ssh will not - * work unless this provider can send traffic to the instance's network (e.g. via - * tunnel or because it is running on another cloud instance on that network). - * This block can be repeated multiple times. Structure documented below. - * - * @return builder - * - */ public Builder accessConfigs(List accessConfigs) { return accessConfigs(Output.of(accessConfigs)); } - /** - * @param accessConfigs Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet. If omitted, ssh will not - * work unless this provider can send traffic to the instance's network (e.g. via - * tunnel or because it is running on another cloud instance on that network). - * This block can be repeated multiple times. Structure documented below. - * - * @return builder - * - */ public Builder accessConfigs(InstanceNetworkInterfaceAccessConfigArgs... accessConfigs) { return accessConfigs(List.of(accessConfigs)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceState.java index 6dc7cdbad4..941a569f71 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceState.java @@ -46,16 +46,16 @@ public Optional> advancedMachineFeat } /** - * If true, allows this prvider to stop the instance to update its properties. - * If you try to update a property that requires stopping the instance without setting this field, the update will fail. + * If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + * stopping the instance without setting this field, the update will fail. * */ @Import(name="allowStoppingForUpdate") private @Nullable Output allowStoppingForUpdate; /** - * @return If true, allows this prvider to stop the instance to update its properties. - * If you try to update a property that requires stopping the instance without setting this field, the update will fail. + * @return If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + * stopping the instance without setting this field, the update will fail. * */ public Optional> allowStoppingForUpdate() { @@ -159,16 +159,14 @@ public Optional> currentStatus() { } /** - * Enable deletion protection on this instance. Defaults to false. - * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + * Whether deletion protection is enabled on this instance. * */ @Import(name="deletionProtection") private @Nullable Output deletionProtection; /** - * @return Enable deletion protection on this instance. Defaults to false. - * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + * @return Whether deletion protection is enabled on this instance. * */ public Optional> deletionProtection() { @@ -225,16 +223,14 @@ public Optional> enableDisplay() { } /** - * List of the type and count of accelerator cards attached to the instance. Structure documented below. - * **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + * List of the type and count of accelerator cards attached to the instance. * */ @Import(name="guestAccelerators") private @Nullable Output> guestAccelerators; /** - * @return List of the type and count of accelerator cards attached to the instance. Structure documented below. - * **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + * @return List of the type and count of accelerator cards attached to the instance. * */ public Optional>> guestAccelerators() { @@ -357,32 +353,14 @@ public Optional> metadataFingerprint() { } /** - * An alternative to using the - * startup-script metadata key, except this one forces the instance to be recreated - * (thus re-running the script) if it is changed. This replaces the startup-script - * metadata key on the created instance and thus the two mechanisms are not - * allowed to be used simultaneously. Users are free to use either mechanism - the - * only distinction is that this separate attribute will cause a recreate on - * modification. On import, `metadata_startup_script` will not be set - if you - * choose to specify it you will see a diff immediately after import causing a - * destroy/recreate operation. If importing an instance and specifying this value - * is desired, you will need to modify your state file. + * Metadata startup scripts made available within the instance. * */ @Import(name="metadataStartupScript") private @Nullable Output metadataStartupScript; /** - * @return An alternative to using the - * startup-script metadata key, except this one forces the instance to be recreated - * (thus re-running the script) if it is changed. This replaces the startup-script - * metadata key on the created instance and thus the two mechanisms are not - * allowed to be used simultaneously. Users are free to use either mechanism - the - * only distinction is that this separate attribute will cause a recreate on - * modification. On import, `metadata_startup_script` will not be set - if you - * choose to specify it you will see a diff immediately after import causing a - * destroy/recreate operation. If importing an instance and specifying this value - * is desired, you will need to modify your state file. + * @return Metadata startup scripts made available within the instance. * */ public Optional> metadataStartupScript() { @@ -727,8 +705,8 @@ public Builder advancedMachineFeatures(InstanceAdvancedMachineFeaturesArgs advan } /** - * @param allowStoppingForUpdate If true, allows this prvider to stop the instance to update its properties. - * If you try to update a property that requires stopping the instance without setting this field, the update will fail. + * @param allowStoppingForUpdate If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + * stopping the instance without setting this field, the update will fail. * * @return builder * @@ -739,8 +717,8 @@ public Builder allowStoppingForUpdate(@Nullable Output allowStoppingFor } /** - * @param allowStoppingForUpdate If true, allows this prvider to stop the instance to update its properties. - * If you try to update a property that requires stopping the instance without setting this field, the update will fail. + * @param allowStoppingForUpdate If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + * stopping the instance without setting this field, the update will fail. * * @return builder * @@ -892,8 +870,7 @@ public Builder currentStatus(String currentStatus) { } /** - * @param deletionProtection Enable deletion protection on this instance. Defaults to false. - * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + * @param deletionProtection Whether deletion protection is enabled on this instance. * * @return builder * @@ -904,8 +881,7 @@ public Builder deletionProtection(@Nullable Output deletionProtection) } /** - * @param deletionProtection Enable deletion protection on this instance. Defaults to false. - * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + * @param deletionProtection Whether deletion protection is enabled on this instance. * * @return builder * @@ -982,8 +958,7 @@ public Builder enableDisplay(Boolean enableDisplay) { } /** - * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. Structure documented below. - * **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. * * @return builder * @@ -994,8 +969,7 @@ public Builder guestAccelerators(@Nullable Output guestAcceler } /** - * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. Structure documented below. - * **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. * * @return builder * @@ -1173,16 +1146,7 @@ public Builder metadataFingerprint(String metadataFingerprint) { } /** - * @param metadataStartupScript An alternative to using the - * startup-script metadata key, except this one forces the instance to be recreated - * (thus re-running the script) if it is changed. This replaces the startup-script - * metadata key on the created instance and thus the two mechanisms are not - * allowed to be used simultaneously. Users are free to use either mechanism - the - * only distinction is that this separate attribute will cause a recreate on - * modification. On import, `metadata_startup_script` will not be set - if you - * choose to specify it you will see a diff immediately after import causing a - * destroy/recreate operation. If importing an instance and specifying this value - * is desired, you will need to modify your state file. + * @param metadataStartupScript Metadata startup scripts made available within the instance. * * @return builder * @@ -1193,16 +1157,7 @@ public Builder metadataStartupScript(@Nullable Output metadataStartupScr } /** - * @param metadataStartupScript An alternative to using the - * startup-script metadata key, except this one forces the instance to be recreated - * (thus re-running the script) if it is changed. This replaces the startup-script - * metadata key on the created instance and thus the two mechanisms are not - * allowed to be used simultaneously. Users are free to use either mechanism - the - * only distinction is that this separate attribute will cause a recreate on - * modification. On import, `metadata_startup_script` will not be set - if you - * choose to specify it you will see a diff immediately after import causing a - * destroy/recreate operation. If importing an instance and specifying this value - * is desired, you will need to modify your state file. + * @param metadataStartupScript Metadata startup scripts made available within the instance. * * @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 9a3c84bd36..261aa6bb8c 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 @@ -20,27 +20,9 @@ public final class InstanceTemplateNetworkInterfaceArgs extends com.pulumi.resou public static final InstanceTemplateNetworkInterfaceArgs Empty = new InstanceTemplateNetworkInterfaceArgs(); - /** - * Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet (this means that ssh provisioners will - * not work unless you can send traffic to the instance's - * network (e.g. via tunnel or because it is running on another cloud instance - * on that network). This block can be repeated multiple times. Structure documented below. - * - */ @Import(name="accessConfigs") private @Nullable Output> accessConfigs; - /** - * @return Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet (this means that ssh provisioners will - * not work unless you can send traffic to the instance's - * network (e.g. via tunnel or because it is running on another cloud instance - * on that network). This block can be repeated multiple times. Structure documented below. - * - */ public Optional>> accessConfigs() { return Optional.ofNullable(this.accessConfigs); } @@ -90,19 +72,9 @@ public Optional> ipv6AccessType() { return Optional.ofNullable(this.ipv6AccessType); } - /** - * The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. - * - */ @Import(name="name") private @Nullable Output name; - /** - * @return The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. - * - */ public Optional> name() { return Optional.ofNullable(this.name); } @@ -259,48 +231,15 @@ public Builder(InstanceTemplateNetworkInterfaceArgs defaults) { $ = new InstanceTemplateNetworkInterfaceArgs(Objects.requireNonNull(defaults)); } - /** - * @param accessConfigs Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet (this means that ssh provisioners will - * not work unless you can send traffic to the instance's - * network (e.g. via tunnel or because it is running on another cloud instance - * on that network). This block can be repeated multiple times. Structure documented below. - * - * @return builder - * - */ public Builder accessConfigs(@Nullable Output> accessConfigs) { $.accessConfigs = accessConfigs; return this; } - /** - * @param accessConfigs Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet (this means that ssh provisioners will - * not work unless you can send traffic to the instance's - * network (e.g. via tunnel or because it is running on another cloud instance - * on that network). This block can be repeated multiple times. Structure documented below. - * - * @return builder - * - */ public Builder accessConfigs(List accessConfigs) { return accessConfigs(Output.of(accessConfigs)); } - /** - * @param accessConfigs Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet (this means that ssh provisioners will - * not work unless you can send traffic to the instance's - * network (e.g. via tunnel or because it is running on another cloud instance - * on that network). This block can be repeated multiple times. Structure documented below. - * - * @return builder - * - */ public Builder accessConfigs(InstanceTemplateNetworkInterfaceAccessConfigArgs... accessConfigs) { return accessConfigs(List.of(accessConfigs)); } @@ -388,25 +327,11 @@ public Builder ipv6AccessType(String ipv6AccessType) { return ipv6AccessType(Output.of(ipv6AccessType)); } - /** - * @param name The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. - * - * @return builder - * - */ public Builder name(@Nullable Output name) { $.name = name; return this; } - /** - * @param name The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. - * - * @return builder - * - */ public Builder name(String name) { return name(Output.of(name)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateSchedulingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateSchedulingArgs.java index e69868cc40..76272ac084 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateSchedulingArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateSchedulingArgs.java @@ -54,17 +54,9 @@ public Optional> instanceTerminationAction() { return Optional.ofNullable(this.instanceTerminationAction); } - /** - * Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below. - * - */ @Import(name="maxRunDuration") private @Nullable Output maxRunDuration; - /** - * @return Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below. - * - */ public Optional> maxRunDuration() { return Optional.ofNullable(this.maxRunDuration); } @@ -233,23 +225,11 @@ public Builder instanceTerminationAction(String instanceTerminationAction) { return instanceTerminationAction(Output.of(instanceTerminationAction)); } - /** - * @param maxRunDuration Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below. - * - * @return builder - * - */ public Builder maxRunDuration(@Nullable Output maxRunDuration) { $.maxRunDuration = maxRunDuration; return this; } - /** - * @param maxRunDuration Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below. - * - * @return builder - * - */ public Builder maxRunDuration(InstanceTemplateSchedulingMaxRunDurationArgs maxRunDuration) { return maxRunDuration(Output.of(maxRunDuration)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateState.java index ab4bfa5c9f..7d0c74caac 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/InstanceTemplateState.java @@ -262,16 +262,14 @@ public Optional> minCpuPlatform() { } /** - * The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. + * The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. * */ @Import(name="name") private @Nullable Output name; /** - * @return The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. + * @return The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. * */ public Optional> name() { @@ -881,8 +879,7 @@ public Builder minCpuPlatform(String minCpuPlatform) { } /** - * @param name The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. + * @param name The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. * * @return builder * @@ -893,8 +890,7 @@ public Builder name(@Nullable Output name) { } /** - * @param name The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. + * @param name The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NodeGroupShareSettingsArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NodeGroupShareSettingsArgs.java new file mode 100644 index 0000000000..48eb725723 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NodeGroupShareSettingsArgs.java @@ -0,0 +1,142 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.compute.inputs.NodeGroupShareSettingsProjectMapArgs; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class NodeGroupShareSettingsArgs extends com.pulumi.resources.ResourceArgs { + + public static final NodeGroupShareSettingsArgs Empty = new NodeGroupShareSettingsArgs(); + + /** + * A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + * Structure is documented below. + * + */ + @Import(name="projectMaps") + private @Nullable Output> projectMaps; + + /** + * @return A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + * Structure is documented below. + * + */ + public Optional>> projectMaps() { + return Optional.ofNullable(this.projectMaps); + } + + /** + * Node group sharing type. + * Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + * + */ + @Import(name="shareType", required=true) + private Output shareType; + + /** + * @return Node group sharing type. + * Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + * + */ + public Output shareType() { + return this.shareType; + } + + private NodeGroupShareSettingsArgs() {} + + private NodeGroupShareSettingsArgs(NodeGroupShareSettingsArgs $) { + this.projectMaps = $.projectMaps; + this.shareType = $.shareType; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(NodeGroupShareSettingsArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private NodeGroupShareSettingsArgs $; + + public Builder() { + $ = new NodeGroupShareSettingsArgs(); + } + + public Builder(NodeGroupShareSettingsArgs defaults) { + $ = new NodeGroupShareSettingsArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param projectMaps A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + * Structure is documented below. + * + * @return builder + * + */ + public Builder projectMaps(@Nullable Output> projectMaps) { + $.projectMaps = projectMaps; + return this; + } + + /** + * @param projectMaps A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + * Structure is documented below. + * + * @return builder + * + */ + public Builder projectMaps(List projectMaps) { + return projectMaps(Output.of(projectMaps)); + } + + /** + * @param projectMaps A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + * Structure is documented below. + * + * @return builder + * + */ + public Builder projectMaps(NodeGroupShareSettingsProjectMapArgs... projectMaps) { + return projectMaps(List.of(projectMaps)); + } + + /** + * @param shareType Node group sharing type. + * Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + * + * @return builder + * + */ + public Builder shareType(Output shareType) { + $.shareType = shareType; + return this; + } + + /** + * @param shareType Node group sharing type. + * Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + * + * @return builder + * + */ + public Builder shareType(String shareType) { + return shareType(Output.of(shareType)); + } + + public NodeGroupShareSettingsArgs build() { + $.shareType = Objects.requireNonNull($.shareType, "expected parameter 'shareType' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NodeGroupShareSettingsProjectMapArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NodeGroupShareSettingsProjectMapArgs.java new file mode 100644 index 0000000000..cbc8b3e2b4 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NodeGroupShareSettingsProjectMapArgs.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.compute.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; + + +public final class NodeGroupShareSettingsProjectMapArgs extends com.pulumi.resources.ResourceArgs { + + public static final NodeGroupShareSettingsProjectMapArgs Empty = new NodeGroupShareSettingsProjectMapArgs(); + + /** + * The identifier for this object. Format specified above. + * + */ + @Import(name="id", required=true) + private Output id; + + /** + * @return The identifier for this object. Format specified above. + * + */ + public Output id() { + return this.id; + } + + /** + * The project id/number should be the same as the key of this project config in the project map. + * + */ + @Import(name="projectId", required=true) + private Output projectId; + + /** + * @return The project id/number should be the same as the key of this project config in the project map. + * + */ + public Output projectId() { + return this.projectId; + } + + private NodeGroupShareSettingsProjectMapArgs() {} + + private NodeGroupShareSettingsProjectMapArgs(NodeGroupShareSettingsProjectMapArgs $) { + this.id = $.id; + this.projectId = $.projectId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(NodeGroupShareSettingsProjectMapArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private NodeGroupShareSettingsProjectMapArgs $; + + public Builder() { + $ = new NodeGroupShareSettingsProjectMapArgs(); + } + + public Builder(NodeGroupShareSettingsProjectMapArgs defaults) { + $ = new NodeGroupShareSettingsProjectMapArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param id The identifier for this object. Format specified above. + * + * @return builder + * + */ + public Builder id(Output id) { + $.id = id; + return this; + } + + /** + * @param id The identifier for this object. Format specified above. + * + * @return builder + * + */ + public Builder id(String id) { + return id(Output.of(id)); + } + + /** + * @param projectId The project id/number should be the same as the key of this project config in the project map. + * + * @return builder + * + */ + public Builder projectId(Output projectId) { + $.projectId = projectId; + return this; + } + + /** + * @param projectId The project id/number should be the same as the key of this project config in the project map. + * + * @return builder + * + */ + public Builder projectId(String projectId) { + return projectId(Output.of(projectId)); + } + + public NodeGroupShareSettingsProjectMapArgs build() { + $.id = Objects.requireNonNull($.id, "expected parameter 'id' to be non-null"); + $.projectId = Objects.requireNonNull($.projectId, "expected parameter 'projectId' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NodeGroupState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NodeGroupState.java index d4633a78b3..1743aaefac 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NodeGroupState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/NodeGroupState.java @@ -7,6 +7,7 @@ import com.pulumi.core.annotations.Import; import com.pulumi.gcp.compute.inputs.NodeGroupAutoscalingPolicyArgs; import com.pulumi.gcp.compute.inputs.NodeGroupMaintenanceWindowArgs; +import com.pulumi.gcp.compute.inputs.NodeGroupShareSettingsArgs; import java.lang.Integer; import java.lang.String; import java.util.Objects; @@ -176,6 +177,23 @@ public Optional> selfLink() { return Optional.ofNullable(this.selfLink); } + /** + * Share settings for the node group. + * Structure is documented below. + * + */ + @Import(name="shareSettings") + private @Nullable Output shareSettings; + + /** + * @return Share settings for the node group. + * Structure is documented below. + * + */ + public Optional> shareSettings() { + return Optional.ofNullable(this.shareSettings); + } + /** * The total number of nodes in the node group. One of `initial_size` or `size` must be specified. * @@ -219,6 +237,7 @@ private NodeGroupState(NodeGroupState $) { this.nodeTemplate = $.nodeTemplate; this.project = $.project; this.selfLink = $.selfLink; + this.shareSettings = $.shareSettings; this.size = $.size; this.zone = $.zone; } @@ -459,6 +478,29 @@ public Builder selfLink(String selfLink) { return selfLink(Output.of(selfLink)); } + /** + * @param shareSettings Share settings for the node group. + * Structure is documented below. + * + * @return builder + * + */ + public Builder shareSettings(@Nullable Output shareSettings) { + $.shareSettings = shareSettings; + return this; + } + + /** + * @param shareSettings Share settings for the node group. + * Structure is documented below. + * + * @return builder + * + */ + public Builder shareSettings(NodeGroupShareSettingsArgs shareSettings) { + return shareSettings(Output.of(shareSettings)); + } + /** * @param size The total number of nodes in the node group. One of `initial_size` or `size` must be specified. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionAutoscalerAutoscalingPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionAutoscalerAutoscalingPolicyArgs.java index b9c3b10986..2ddcc7db4b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionAutoscalerAutoscalingPolicyArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionAutoscalerAutoscalingPolicyArgs.java @@ -170,21 +170,9 @@ public Optional> mode() { return Optional.ofNullable(this.mode); } - /** - * Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - */ @Import(name="scaleDownControl") private @Nullable Output scaleDownControl; - /** - * @return Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - */ public Optional> scaleDownControl() { return Optional.ofNullable(this.scaleDownControl); } @@ -458,27 +446,11 @@ public Builder mode(String mode) { return mode(Output.of(mode)); } - /** - * @param scaleDownControl Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - * @return builder - * - */ public Builder scaleDownControl(@Nullable Output scaleDownControl) { $.scaleDownControl = scaleDownControl; return this; } - /** - * @param scaleDownControl Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - * @return builder - * - */ public Builder scaleDownControl(RegionAutoscalerAutoscalingPolicyScaleDownControlArgs scaleDownControl) { return scaleDownControl(Output.of(scaleDownControl)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionAutoscalerAutoscalingPolicyMetricArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionAutoscalerAutoscalingPolicyMetricArgs.java index f240f99efd..ca56b8b79b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionAutoscalerAutoscalingPolicyMetricArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionAutoscalerAutoscalingPolicyMetricArgs.java @@ -16,69 +16,9 @@ public final class RegionAutoscalerAutoscalingPolicyMetricArgs extends com.pulum public static final RegionAutoscalerAutoscalingPolicyMetricArgs Empty = new RegionAutoscalerAutoscalingPolicyMetricArgs(); - /** - * A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - */ @Import(name="filter") private @Nullable Output filter; - /** - * @return A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - */ public Optional> filter() { return Optional.ofNullable(this.filter); } @@ -102,43 +42,9 @@ public Output name() { return this.name; } - /** - * If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - */ @Import(name="singleInstanceAssignment") private @Nullable Output singleInstanceAssignment; - /** - * @return If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - */ public Optional> singleInstanceAssignment() { return Optional.ofNullable(this.singleInstanceAssignment); } @@ -219,75 +125,11 @@ public Builder(RegionAutoscalerAutoscalingPolicyMetricArgs defaults) { $ = new RegionAutoscalerAutoscalingPolicyMetricArgs(Objects.requireNonNull(defaults)); } - /** - * @param filter A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - * @return builder - * - */ public Builder filter(@Nullable Output filter) { $.filter = filter; return this; } - /** - * @param filter A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - * @return builder - * - */ public Builder filter(String filter) { return filter(Output.of(filter)); } @@ -317,49 +159,11 @@ public Builder name(String name) { return name(Output.of(name)); } - /** - * @param singleInstanceAssignment If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - * @return builder - * - */ public Builder singleInstanceAssignment(@Nullable Output singleInstanceAssignment) { $.singleInstanceAssignment = singleInstanceAssignment; return this; } - /** - * @param singleInstanceAssignment If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - * @return builder - * - */ public Builder singleInstanceAssignment(Double singleInstanceAssignment) { return singleInstanceAssignment(Output.of(singleInstanceAssignment)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionBackendServiceCdnPolicyNegativeCachingPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionBackendServiceCdnPolicyNegativeCachingPolicyArgs.java index 55d321790a..0183f4398f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionBackendServiceCdnPolicyNegativeCachingPolicyArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionBackendServiceCdnPolicyNegativeCachingPolicyArgs.java @@ -32,19 +32,9 @@ public Optional> code() { return Optional.ofNullable(this.code); } - /** - * The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - * (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - * - */ @Import(name="ttl") private @Nullable Output ttl; - /** - * @return The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - * (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - * - */ public Optional> ttl() { return Optional.ofNullable(this.ttl); } @@ -97,25 +87,11 @@ public Builder code(Integer code) { return code(Output.of(code)); } - /** - * @param ttl The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - * (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - * - * @return builder - * - */ public Builder ttl(@Nullable Output ttl) { $.ttl = ttl; return this; } - /** - * @param ttl The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - * (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - * - * @return builder - * - */ public Builder ttl(Integer ttl) { return ttl(Output.of(ttl)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionBackendServiceCircuitBreakersArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionBackendServiceCircuitBreakersArgs.java index 2b70c2348a..5b679f27b0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionBackendServiceCircuitBreakersArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionBackendServiceCircuitBreakersArgs.java @@ -16,19 +16,9 @@ public final class RegionBackendServiceCircuitBreakersArgs extends com.pulumi.re public static final RegionBackendServiceCircuitBreakersArgs Empty = new RegionBackendServiceCircuitBreakersArgs(); - /** - * The timeout for new network connections to hosts. - * Structure is documented below. - * - */ @Import(name="connectTimeout") private @Nullable Output connectTimeout; - /** - * @return The timeout for new network connections to hosts. - * Structure is documented below. - * - */ public Optional> connectTimeout() { return Optional.ofNullable(this.connectTimeout); } @@ -151,25 +141,11 @@ public Builder(RegionBackendServiceCircuitBreakersArgs defaults) { $ = new RegionBackendServiceCircuitBreakersArgs(Objects.requireNonNull(defaults)); } - /** - * @param connectTimeout The timeout for new network connections to hosts. - * Structure is documented below. - * - * @return builder - * - */ public Builder connectTimeout(@Nullable Output connectTimeout) { $.connectTimeout = connectTimeout; return this; } - /** - * @param connectTimeout The timeout for new network connections to hosts. - * Structure is documented below. - * - * @return builder - * - */ public Builder connectTimeout(RegionBackendServiceCircuitBreakersConnectTimeoutArgs connectTimeout) { return connectTimeout(Output.of(connectTimeout)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionBackendServiceState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionBackendServiceState.java index 27ac47fe67..f2952707bf 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionBackendServiceState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionBackendServiceState.java @@ -124,20 +124,16 @@ public Optional> connectionDrainingTimeoutSec() { } /** - * Connection Tracking configuration for this BackendService. - * This is available only for Layer 4 Internal Load Balancing and - * Network Load Balancing. - * Structure is documented below. + * Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + * and Network Load Balancing. * */ @Import(name="connectionTrackingPolicy") private @Nullable Output connectionTrackingPolicy; /** - * @return Connection Tracking configuration for this BackendService. - * This is available only for Layer 4 Internal Load Balancing and - * Network Load Balancing. - * Structure is documented below. + * @return Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + * and Network Load Balancing. * */ public Optional> connectionTrackingPolicy() { @@ -754,10 +750,8 @@ public Builder connectionDrainingTimeoutSec(Integer connectionDrainingTimeoutSec } /** - * @param connectionTrackingPolicy Connection Tracking configuration for this BackendService. - * This is available only for Layer 4 Internal Load Balancing and - * Network Load Balancing. - * Structure is documented below. + * @param connectionTrackingPolicy Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + * and Network Load Balancing. * * @return builder * @@ -768,10 +762,8 @@ public Builder connectionTrackingPolicy(@Nullable Output kmsKeyName; - /** - * @return The name of the encryption key that is stored in Google Cloud KMS. - * - */ public Optional> kmsKeyName() { return Optional.ofNullable(this.kmsKeyName); } @@ -90,23 +82,11 @@ public Builder(RegionDiskSourceSnapshotEncryptionKeyArgs defaults) { $ = new RegionDiskSourceSnapshotEncryptionKeyArgs(Objects.requireNonNull(defaults)); } - /** - * @param kmsKeyName The name of the encryption key that is stored in Google Cloud KMS. - * - * @return builder - * - */ public Builder kmsKeyName(@Nullable Output kmsKeyName) { $.kmsKeyName = kmsKeyName; return this; } - /** - * @param kmsKeyName The name of the encryption key that is stored in Google Cloud KMS. - * - * @return builder - * - */ public Builder kmsKeyName(String kmsKeyName) { return kmsKeyName(Output.of(kmsKeyName)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceGroupManagerState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceGroupManagerState.java index 93e8512e46..65aa7901f3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceGroupManagerState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RegionInstanceGroupManagerState.java @@ -412,18 +412,16 @@ public Optional>> versions() } /** - * Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, the provider will - * continue trying until it times out. + * Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * */ @Import(name="waitForInstances") private @Nullable Output waitForInstances; /** - * @return Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, the provider will - * continue trying until it times out. + * @return Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * */ public Optional> waitForInstances() { @@ -1101,9 +1099,8 @@ public Builder versions(RegionInstanceGroupManagerVersionArgs... versions) { } /** - * @param waitForInstances Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, the provider will - * continue trying until it times out. + * @param waitForInstances Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * * @return builder * @@ -1114,9 +1111,8 @@ public Builder waitForInstances(@Nullable Output waitForInstances) { } /** - * @param waitForInstances Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, the provider will - * continue trying until it times out. + * @param waitForInstances Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RouterNatState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RouterNatState.java index 4a50bc8851..3c2369841d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RouterNatState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/RouterNatState.java @@ -334,6 +334,23 @@ public Optional> tcpEstablishedIdleTimeoutSec() { return Optional.ofNullable(this.tcpEstablishedIdleTimeoutSec); } + /** + * Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + * Defaults to 120s if not set. + * + */ + @Import(name="tcpTimeWaitTimeoutSec") + private @Nullable Output tcpTimeWaitTimeoutSec; + + /** + * @return Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + * Defaults to 120s if not set. + * + */ + public Optional> tcpTimeWaitTimeoutSec() { + return Optional.ofNullable(this.tcpTimeWaitTimeoutSec); + } + /** * Timeout (in seconds) for TCP transitory connections. * Defaults to 30s if not set. @@ -386,6 +403,7 @@ private RouterNatState(RouterNatState $) { this.sourceSubnetworkIpRangesToNat = $.sourceSubnetworkIpRangesToNat; this.subnetworks = $.subnetworks; this.tcpEstablishedIdleTimeoutSec = $.tcpEstablishedIdleTimeoutSec; + this.tcpTimeWaitTimeoutSec = $.tcpTimeWaitTimeoutSec; this.tcpTransitoryIdleTimeoutSec = $.tcpTransitoryIdleTimeoutSec; this.udpIdleTimeoutSec = $.udpIdleTimeoutSec; } @@ -868,6 +886,29 @@ public Builder tcpEstablishedIdleTimeoutSec(Integer tcpEstablishedIdleTimeoutSec return tcpEstablishedIdleTimeoutSec(Output.of(tcpEstablishedIdleTimeoutSec)); } + /** + * @param tcpTimeWaitTimeoutSec Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + * Defaults to 120s if not set. + * + * @return builder + * + */ + public Builder tcpTimeWaitTimeoutSec(@Nullable Output tcpTimeWaitTimeoutSec) { + $.tcpTimeWaitTimeoutSec = tcpTimeWaitTimeoutSec; + return this; + } + + /** + * @param tcpTimeWaitTimeoutSec Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + * Defaults to 120s if not set. + * + * @return builder + * + */ + public Builder tcpTimeWaitTimeoutSec(Integer tcpTimeWaitTimeoutSec) { + return tcpTimeWaitTimeoutSec(Output.of(tcpTimeWaitTimeoutSec)); + } + /** * @param tcpTransitoryIdleTimeoutSec Timeout (in seconds) for TCP transitory connections. * Defaults to 30s if not set. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigArgs.java index 051755db32..55a231b7c8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigArgs.java @@ -5,6 +5,7 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.compute.inputs.SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs; import com.pulumi.gcp.compute.inputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs; import java.util.Objects; import java.util.Optional; @@ -15,6 +16,21 @@ public final class SecurityPolicyAdaptiveProtectionConfigArgs extends com.pulumi public static final SecurityPolicyAdaptiveProtectionConfigArgs Empty = new SecurityPolicyAdaptiveProtectionConfigArgs(); + /** + * ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + * + */ + @Import(name="autoDeployConfig") + private @Nullable Output autoDeployConfig; + + /** + * @return ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + * + */ + public Optional> autoDeployConfig() { + return Optional.ofNullable(this.autoDeployConfig); + } + /** * Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. * @@ -33,6 +49,7 @@ public Optional autoDeployConfig) { + $.autoDeployConfig = autoDeployConfig; + return this; + } + + /** + * @param autoDeployConfig ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + * + * @return builder + * + */ + public Builder autoDeployConfig(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs autoDeployConfig) { + return autoDeployConfig(Output.of(autoDeployConfig)); + } + /** * @param layer7DdosDefenseConfig Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs.java new file mode 100644 index 0000000000..09bdb47e1d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs.java @@ -0,0 +1,195 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Double; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs Empty = new SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs(); + + /** + * Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + * + */ + @Import(name="confidenceThreshold") + private @Nullable Output confidenceThreshold; + + /** + * @return Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + * + */ + public Optional> confidenceThreshold() { + return Optional.ofNullable(this.confidenceThreshold); + } + + /** + * Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + * + */ + @Import(name="expirationSec") + private @Nullable Output expirationSec; + + /** + * @return Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + * + */ + public Optional> expirationSec() { + return Optional.ofNullable(this.expirationSec); + } + + /** + * Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + * + */ + @Import(name="impactedBaselineThreshold") + private @Nullable Output impactedBaselineThreshold; + + /** + * @return Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + * + */ + public Optional> impactedBaselineThreshold() { + return Optional.ofNullable(this.impactedBaselineThreshold); + } + + /** + * Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + * + */ + @Import(name="loadThreshold") + private @Nullable Output loadThreshold; + + /** + * @return Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + * + */ + public Optional> loadThreshold() { + return Optional.ofNullable(this.loadThreshold); + } + + private SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs() {} + + private SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs $) { + this.confidenceThreshold = $.confidenceThreshold; + this.expirationSec = $.expirationSec; + this.impactedBaselineThreshold = $.impactedBaselineThreshold; + this.loadThreshold = $.loadThreshold; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs $; + + public Builder() { + $ = new SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs(); + } + + public Builder(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs defaults) { + $ = new SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param confidenceThreshold Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + * + * @return builder + * + */ + public Builder confidenceThreshold(@Nullable Output confidenceThreshold) { + $.confidenceThreshold = confidenceThreshold; + return this; + } + + /** + * @param confidenceThreshold Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + * + * @return builder + * + */ + public Builder confidenceThreshold(Double confidenceThreshold) { + return confidenceThreshold(Output.of(confidenceThreshold)); + } + + /** + * @param expirationSec Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + * + * @return builder + * + */ + public Builder expirationSec(@Nullable Output expirationSec) { + $.expirationSec = expirationSec; + return this; + } + + /** + * @param expirationSec Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + * + * @return builder + * + */ + public Builder expirationSec(Integer expirationSec) { + return expirationSec(Output.of(expirationSec)); + } + + /** + * @param impactedBaselineThreshold Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + * + * @return builder + * + */ + public Builder impactedBaselineThreshold(@Nullable Output impactedBaselineThreshold) { + $.impactedBaselineThreshold = impactedBaselineThreshold; + return this; + } + + /** + * @param impactedBaselineThreshold Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + * + * @return builder + * + */ + public Builder impactedBaselineThreshold(Double impactedBaselineThreshold) { + return impactedBaselineThreshold(Output.of(impactedBaselineThreshold)); + } + + /** + * @param loadThreshold Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + * + * @return builder + * + */ + public Builder loadThreshold(@Nullable Output loadThreshold) { + $.loadThreshold = loadThreshold; + return this; + } + + /** + * @param loadThreshold Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + * + * @return builder + * + */ + public Builder loadThreshold(Double loadThreshold) { + return loadThreshold(Output.of(loadThreshold)); + } + + public SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyState.java index 0b0a4093d7..d866c4460d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/SecurityPolicyState.java @@ -149,14 +149,14 @@ public Optional>> rules() { } /** - * The URI of the created resourc + * The URI of the created resource. * */ @Import(name="selfLink") private @Nullable Output selfLink; /** - * @return The URI of the created resourc + * @return The URI of the created resource. * */ public Optional> selfLink() { @@ -414,7 +414,7 @@ public Builder rules(SecurityPolicyRuleArgs... rules) { } /** - * @param selfLink The URI of the created resourc + * @param selfLink The URI of the created resource. * * @return builder * @@ -425,7 +425,7 @@ public Builder selfLink(@Nullable Output selfLink) { } /** - * @param selfLink The URI of the created resourc + * @param selfLink The URI of the created resource. * * @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 7487130b92..7321ca03ae 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 @@ -341,22 +341,24 @@ public Optional> role() { } /** - * An array of configurations for secondary IP ranges for VM instances - * contained in this subnetwork. The primary IP of such VM must belong - * to the primary ipCidrRange of the subnetwork. The alias IPs may belong - * to either primary or secondary ranges. - * Structure is documented below. + * An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + * VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + * ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + * to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + * syntax: 'example=[]' For more details about this behavior, see [this + * section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). * */ @Import(name="secondaryIpRanges") private @Nullable Output> secondaryIpRanges; /** - * @return An array of configurations for secondary IP ranges for VM instances - * contained in this subnetwork. The primary IP of such VM must belong - * to the primary ipCidrRange of the subnetwork. The alias IPs may belong - * to either primary or secondary ranges. - * Structure is documented below. + * @return An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + * VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + * ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + * to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + * syntax: 'example=[]' For more details about this behavior, see [this + * section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). * */ public Optional>> secondaryIpRanges() { @@ -864,11 +866,12 @@ public Builder role(String role) { } /** - * @param secondaryIpRanges An array of configurations for secondary IP ranges for VM instances - * contained in this subnetwork. The primary IP of such VM must belong - * to the primary ipCidrRange of the subnetwork. The alias IPs may belong - * to either primary or secondary ranges. - * Structure is documented below. + * @param secondaryIpRanges An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + * VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + * ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + * to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + * syntax: 'example=[]' For more details about this behavior, see [this + * section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). * * @return builder * @@ -879,11 +882,12 @@ public Builder secondaryIpRanges(@Nullable Output secondaryI } /** - * @param secondaryIpRanges An array of configurations for secondary IP ranges for VM instances - * contained in this subnetwork. The primary IP of such VM must belong - * to the primary ipCidrRange of the subnetwork. The alias IPs may belong - * to either primary or secondary ranges. - * Structure is documented below. + * @param secondaryIpRanges An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + * VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + * ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + * to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + * syntax: 'example=[]' For more details about this behavior, see [this + * section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/TargetInstanceState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/TargetInstanceState.java index e73fc864cd..64f91ce34e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/TargetInstanceState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/TargetInstanceState.java @@ -119,14 +119,16 @@ public Optional> natPolicy() { } /** - * The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + * The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + * the network that the default network interface belongs to. * */ @Import(name="network") private @Nullable Output network; /** - * @return The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + * @return The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + * the network that the default network interface belongs to. * */ public Optional> network() { @@ -346,7 +348,8 @@ public Builder natPolicy(String natPolicy) { } /** - * @param network The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + * @param network The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + * the network that the default network interface belongs to. * * @return builder * @@ -357,7 +360,8 @@ public Builder network(@Nullable Output network) { } /** - * @param network The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + * @param network The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + * the network that the default network interface belongs to. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/TargetPoolState.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/TargetPoolState.java index 1d514029e2..ecd81dba8b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/TargetPoolState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/inputs/TargetPoolState.java @@ -84,22 +84,18 @@ public Optional> healthChecks() { } /** - * List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. * */ @Import(name="instances") private @Nullable Output> instances; /** - * @return List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * @return List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. * */ public Optional>> instances() { @@ -315,11 +311,9 @@ public Builder healthChecks(String healthChecks) { } /** - * @param instances List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * @param instances List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. * * @return builder * @@ -330,11 +324,9 @@ public Builder instances(@Nullable Output> instances) { } /** - * @param instances List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * @param instances List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. * * @return builder * @@ -344,11 +336,9 @@ public Builder instances(List instances) { } /** - * @param instances List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * @param instances List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalarAutoscalingPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalarAutoscalingPolicy.java index b1140ee7cb..7dfa5ae246 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalarAutoscalingPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalarAutoscalingPolicy.java @@ -75,12 +75,6 @@ public final class AutoscalarAutoscalingPolicy { * */ private @Nullable String mode; - /** - * @return Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - */ private @Nullable AutoscalarAutoscalingPolicyScaleDownControl scaleDownControl; /** * @return Defines scale in controls to reduce the risk of response latency @@ -167,12 +161,6 @@ public Integer minReplicas() { public Optional mode() { return Optional.ofNullable(this.mode); } - /** - * @return Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - */ public Optional scaleDownControl() { return Optional.ofNullable(this.scaleDownControl); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalarAutoscalingPolicyMetric.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalarAutoscalingPolicyMetric.java index 05639c4edb..b4565bbbc2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalarAutoscalingPolicyMetric.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalarAutoscalingPolicyMetric.java @@ -12,36 +12,6 @@ @CustomType public final class AutoscalarAutoscalingPolicyMetric { - /** - * @return A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - */ private @Nullable String filter; /** * @return The identifier (type) of the Stackdriver Monitoring metric. @@ -50,23 +20,6 @@ public final class AutoscalarAutoscalingPolicyMetric { * */ private String name; - /** - * @return If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - */ private @Nullable Double singleInstanceAssignment; /** * @return The target value of the metric that autoscaler should @@ -89,36 +42,6 @@ public final class AutoscalarAutoscalingPolicyMetric { private @Nullable String type; private AutoscalarAutoscalingPolicyMetric() {} - /** - * @return A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - */ public Optional filter() { return Optional.ofNullable(this.filter); } @@ -131,23 +54,6 @@ public Optional filter() { public String name() { return this.name; } - /** - * @return If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - */ public Optional singleInstanceAssignment() { return Optional.ofNullable(this.singleInstanceAssignment); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalerAutoscalingPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalerAutoscalingPolicy.java index b40724f085..5192dbdd54 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalerAutoscalingPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalerAutoscalingPolicy.java @@ -75,12 +75,6 @@ public final class AutoscalerAutoscalingPolicy { * */ private @Nullable String mode; - /** - * @return Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - */ private @Nullable AutoscalerAutoscalingPolicyScaleDownControl scaleDownControl; /** * @return Defines scale in controls to reduce the risk of response latency @@ -167,12 +161,6 @@ public Integer minReplicas() { public Optional mode() { return Optional.ofNullable(this.mode); } - /** - * @return Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - */ public Optional scaleDownControl() { return Optional.ofNullable(this.scaleDownControl); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalerAutoscalingPolicyMetric.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalerAutoscalingPolicyMetric.java index 496361a775..8f9cf572f7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalerAutoscalingPolicyMetric.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/AutoscalerAutoscalingPolicyMetric.java @@ -12,36 +12,6 @@ @CustomType public final class AutoscalerAutoscalingPolicyMetric { - /** - * @return A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - */ private @Nullable String filter; /** * @return The identifier (type) of the Stackdriver Monitoring metric. @@ -50,23 +20,6 @@ public final class AutoscalerAutoscalingPolicyMetric { * */ private String name; - /** - * @return If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - */ private @Nullable Double singleInstanceAssignment; /** * @return The target value of the metric that autoscaler should @@ -89,36 +42,6 @@ public final class AutoscalerAutoscalingPolicyMetric { private @Nullable String type; private AutoscalerAutoscalingPolicyMetric() {} - /** - * @return A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - */ public Optional filter() { return Optional.ofNullable(this.filter); } @@ -131,23 +54,6 @@ public Optional filter() { public String name() { return this.name; } - /** - * @return If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - */ public Optional singleInstanceAssignment() { return Optional.ofNullable(this.singleInstanceAssignment); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceCircuitBreakers.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceCircuitBreakers.java index c2489e0744..96c6b7491e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceCircuitBreakers.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceCircuitBreakers.java @@ -12,11 +12,6 @@ @CustomType public final class BackendServiceCircuitBreakers { - /** - * @return The timeout for new network connections to hosts. - * Structure is documented below. - * - */ private @Nullable BackendServiceCircuitBreakersConnectTimeout connectTimeout; /** * @return The maximum number of connections to the backend cluster. @@ -52,11 +47,6 @@ public final class BackendServiceCircuitBreakers { private @Nullable Integer maxRetries; private BackendServiceCircuitBreakers() {} - /** - * @return The timeout for new network connections to hosts. - * Structure is documented below. - * - */ public Optional connectTimeout() { return Optional.ofNullable(this.connectTimeout); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceLocalityLbPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceLocalityLbPolicy.java new file mode 100644 index 0000000000..9b6840b7c6 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceLocalityLbPolicy.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.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.compute.outputs.BackendServiceLocalityLbPolicyCustomPolicy; +import com.pulumi.gcp.compute.outputs.BackendServiceLocalityLbPolicyPolicy; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class BackendServiceLocalityLbPolicy { + /** + * @return The configuration for a custom policy implemented by the user and + * deployed with the client. + * Structure is documented below. + * + */ + private @Nullable BackendServiceLocalityLbPolicyCustomPolicy customPolicy; + /** + * @return The configuration for a built-in load balancing policy. + * Structure is documented below. + * + */ + private @Nullable BackendServiceLocalityLbPolicyPolicy policy; + + private BackendServiceLocalityLbPolicy() {} + /** + * @return The configuration for a custom policy implemented by the user and + * deployed with the client. + * Structure is documented below. + * + */ + public Optional customPolicy() { + return Optional.ofNullable(this.customPolicy); + } + /** + * @return The configuration for a built-in load balancing policy. + * Structure is documented below. + * + */ + public Optional policy() { + return Optional.ofNullable(this.policy); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(BackendServiceLocalityLbPolicy defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable BackendServiceLocalityLbPolicyCustomPolicy customPolicy; + private @Nullable BackendServiceLocalityLbPolicyPolicy policy; + public Builder() {} + public Builder(BackendServiceLocalityLbPolicy defaults) { + Objects.requireNonNull(defaults); + this.customPolicy = defaults.customPolicy; + this.policy = defaults.policy; + } + + @CustomType.Setter + public Builder customPolicy(@Nullable BackendServiceLocalityLbPolicyCustomPolicy customPolicy) { + this.customPolicy = customPolicy; + return this; + } + @CustomType.Setter + public Builder policy(@Nullable BackendServiceLocalityLbPolicyPolicy policy) { + this.policy = policy; + return this; + } + public BackendServiceLocalityLbPolicy build() { + final var o = new BackendServiceLocalityLbPolicy(); + o.customPolicy = customPolicy; + o.policy = policy; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceLocalityLbPolicyCustomPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceLocalityLbPolicyCustomPolicy.java new file mode 100644 index 0000000000..66c857e236 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceLocalityLbPolicyCustomPolicy.java @@ -0,0 +1,90 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class BackendServiceLocalityLbPolicyCustomPolicy { + /** + * @return An optional, arbitrary JSON object with configuration data, understood + * by a locally installed custom policy implementation. + * + */ + private @Nullable String data; + /** + * @return Identifies the custom policy. + * The value should match the type the custom implementation is registered + * with on the gRPC clients. It should follow protocol buffer + * message naming conventions and include the full path (e.g. + * myorg.CustomLbPolicy). The maximum length is 256 characters. + * Note that specifying the same custom policy more than once for a + * backend is not a valid configuration and will be rejected. + * + */ + private String name; + + private BackendServiceLocalityLbPolicyCustomPolicy() {} + /** + * @return An optional, arbitrary JSON object with configuration data, understood + * by a locally installed custom policy implementation. + * + */ + public Optional data() { + return Optional.ofNullable(this.data); + } + /** + * @return Identifies the custom policy. + * The value should match the type the custom implementation is registered + * with on the gRPC clients. It should follow protocol buffer + * message naming conventions and include the full path (e.g. + * myorg.CustomLbPolicy). The maximum length is 256 characters. + * Note that specifying the same custom policy more than once for a + * backend is not a valid configuration and will be rejected. + * + */ + public String name() { + return this.name; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(BackendServiceLocalityLbPolicyCustomPolicy defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String data; + private String name; + public Builder() {} + public Builder(BackendServiceLocalityLbPolicyCustomPolicy defaults) { + Objects.requireNonNull(defaults); + this.data = defaults.data; + this.name = defaults.name; + } + + @CustomType.Setter + public Builder data(@Nullable String data) { + this.data = data; + return this; + } + @CustomType.Setter + public Builder name(String name) { + this.name = Objects.requireNonNull(name); + return this; + } + public BackendServiceLocalityLbPolicyCustomPolicy build() { + final var o = new BackendServiceLocalityLbPolicyCustomPolicy(); + o.data = data; + o.name = name; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceLocalityLbPolicyPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceLocalityLbPolicyPolicy.java new file mode 100644 index 0000000000..b9f1ca19f1 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/BackendServiceLocalityLbPolicyPolicy.java @@ -0,0 +1,68 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class BackendServiceLocalityLbPolicyPolicy { + /** + * @return The name of a locality load balancer policy to be used. The value + * should be one of the predefined ones as supported by localityLbPolicy, + * although at the moment only ROUND_ROBIN is supported. + * This field should only be populated when the customPolicy field is not + * used. + * Note that specifying the same policy more than once for a backend is + * not a valid configuration and will be rejected. + * The possible values are: + * + */ + private String name; + + private BackendServiceLocalityLbPolicyPolicy() {} + /** + * @return The name of a locality load balancer policy to be used. The value + * should be one of the predefined ones as supported by localityLbPolicy, + * although at the moment only ROUND_ROBIN is supported. + * This field should only be populated when the customPolicy field is not + * used. + * Note that specifying the same policy more than once for a backend is + * not a valid configuration and will be rejected. + * The possible values are: + * + */ + public String name() { + return this.name; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(BackendServiceLocalityLbPolicyPolicy defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String name; + public Builder() {} + public Builder(BackendServiceLocalityLbPolicyPolicy defaults) { + Objects.requireNonNull(defaults); + this.name = defaults.name; + } + + @CustomType.Setter + public Builder name(String name) { + this.name = Objects.requireNonNull(name); + return this; + } + public BackendServiceLocalityLbPolicyPolicy build() { + final var o = new BackendServiceLocalityLbPolicyPolicy(); + o.name = name; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceLocalityLbPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceLocalityLbPolicy.java new file mode 100644 index 0000000000..9aeda3cf85 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceLocalityLbPolicy.java @@ -0,0 +1,66 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.compute.outputs.GetBackendServiceLocalityLbPolicyCustomPolicy; +import com.pulumi.gcp.compute.outputs.GetBackendServiceLocalityLbPolicyPolicy; +import java.util.List; +import java.util.Objects; + +@CustomType +public final class GetBackendServiceLocalityLbPolicy { + private List customPolicies; + private List policies; + + private GetBackendServiceLocalityLbPolicy() {} + public List customPolicies() { + return this.customPolicies; + } + public List policies() { + return this.policies; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetBackendServiceLocalityLbPolicy defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private List customPolicies; + private List policies; + public Builder() {} + public Builder(GetBackendServiceLocalityLbPolicy defaults) { + Objects.requireNonNull(defaults); + this.customPolicies = defaults.customPolicies; + this.policies = defaults.policies; + } + + @CustomType.Setter + public Builder customPolicies(List customPolicies) { + this.customPolicies = Objects.requireNonNull(customPolicies); + return this; + } + public Builder customPolicies(GetBackendServiceLocalityLbPolicyCustomPolicy... customPolicies) { + return customPolicies(List.of(customPolicies)); + } + @CustomType.Setter + public Builder policies(List policies) { + this.policies = Objects.requireNonNull(policies); + return this; + } + public Builder policies(GetBackendServiceLocalityLbPolicyPolicy... policies) { + return policies(List.of(policies)); + } + public GetBackendServiceLocalityLbPolicy build() { + final var o = new GetBackendServiceLocalityLbPolicy(); + o.customPolicies = customPolicies; + o.policies = policies; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceLocalityLbPolicyCustomPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceLocalityLbPolicyCustomPolicy.java new file mode 100644 index 0000000000..2659a8518b --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceLocalityLbPolicyCustomPolicy.java @@ -0,0 +1,66 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetBackendServiceLocalityLbPolicyCustomPolicy { + private String data; + /** + * @return The name of the Backend Service. + * + */ + private String name; + + private GetBackendServiceLocalityLbPolicyCustomPolicy() {} + public String data() { + return this.data; + } + /** + * @return The name of the Backend Service. + * + */ + public String name() { + return this.name; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetBackendServiceLocalityLbPolicyCustomPolicy defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String data; + private String name; + public Builder() {} + public Builder(GetBackendServiceLocalityLbPolicyCustomPolicy defaults) { + Objects.requireNonNull(defaults); + this.data = defaults.data; + this.name = defaults.name; + } + + @CustomType.Setter + public Builder data(String data) { + this.data = Objects.requireNonNull(data); + return this; + } + @CustomType.Setter + public Builder name(String name) { + this.name = Objects.requireNonNull(name); + return this; + } + public GetBackendServiceLocalityLbPolicyCustomPolicy build() { + final var o = new GetBackendServiceLocalityLbPolicyCustomPolicy(); + o.data = data; + o.name = name; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceLocalityLbPolicyPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceLocalityLbPolicyPolicy.java new file mode 100644 index 0000000000..f7ceabad75 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceLocalityLbPolicyPolicy.java @@ -0,0 +1,54 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetBackendServiceLocalityLbPolicyPolicy { + /** + * @return The name of the Backend Service. + * + */ + private String name; + + private GetBackendServiceLocalityLbPolicyPolicy() {} + /** + * @return The name of the Backend Service. + * + */ + public String name() { + return this.name; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetBackendServiceLocalityLbPolicyPolicy defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String name; + public Builder() {} + public Builder(GetBackendServiceLocalityLbPolicyPolicy defaults) { + Objects.requireNonNull(defaults); + this.name = defaults.name; + } + + @CustomType.Setter + public Builder name(String name) { + this.name = Objects.requireNonNull(name); + return this; + } + public GetBackendServiceLocalityLbPolicyPolicy build() { + final var o = new GetBackendServiceLocalityLbPolicyPolicy(); + o.name = name; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceResult.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceResult.java index 2ac61d3d3d..c32be77982 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetBackendServiceResult.java @@ -9,6 +9,7 @@ import com.pulumi.gcp.compute.outputs.GetBackendServiceCircuitBreaker; import com.pulumi.gcp.compute.outputs.GetBackendServiceConsistentHash; import com.pulumi.gcp.compute.outputs.GetBackendServiceIap; +import com.pulumi.gcp.compute.outputs.GetBackendServiceLocalityLbPolicy; import com.pulumi.gcp.compute.outputs.GetBackendServiceLogConfig; import com.pulumi.gcp.compute.outputs.GetBackendServiceOutlierDetection; import com.pulumi.gcp.compute.outputs.GetBackendServiceSecuritySetting; @@ -73,6 +74,7 @@ public final class GetBackendServiceResult { */ private String id; private String loadBalancingScheme; + private List localityLbPolicies; private String localityLbPolicy; private List logConfigs; private String name; @@ -196,6 +198,9 @@ public String id() { public String loadBalancingScheme() { return this.loadBalancingScheme; } + public List localityLbPolicies() { + return this.localityLbPolicies; + } public String localityLbPolicy() { return this.localityLbPolicy; } @@ -281,6 +286,7 @@ public static final class Builder { private List iaps; private String id; private String loadBalancingScheme; + private List localityLbPolicies; private String localityLbPolicy; private List logConfigs; private String name; @@ -315,6 +321,7 @@ public Builder(GetBackendServiceResult defaults) { this.iaps = defaults.iaps; this.id = defaults.id; this.loadBalancingScheme = defaults.loadBalancingScheme; + this.localityLbPolicies = defaults.localityLbPolicies; this.localityLbPolicy = defaults.localityLbPolicy; this.logConfigs = defaults.logConfigs; this.name = defaults.name; @@ -449,6 +456,14 @@ public Builder loadBalancingScheme(String loadBalancingScheme) { return this; } @CustomType.Setter + public Builder localityLbPolicies(List localityLbPolicies) { + this.localityLbPolicies = Objects.requireNonNull(localityLbPolicies); + return this; + } + public Builder localityLbPolicies(GetBackendServiceLocalityLbPolicy... localityLbPolicies) { + return localityLbPolicies(List.of(localityLbPolicies)); + } + @CustomType.Setter public Builder localityLbPolicy(String localityLbPolicy) { this.localityLbPolicy = Objects.requireNonNull(localityLbPolicy); return this; @@ -538,6 +553,7 @@ public GetBackendServiceResult build() { o.iaps = iaps; o.id = id; o.loadBalancingScheme = loadBalancingScheme; + o.localityLbPolicies = localityLbPolicies; o.localityLbPolicy = localityLbPolicy; o.logConfigs = logConfigs; o.name = name; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateNetworkInterface.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateNetworkInterface.java index 29ce942d71..fb07030048 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateNetworkInterface.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateNetworkInterface.java @@ -14,15 +14,6 @@ @CustomType public final class GetInstanceTemplateNetworkInterface { - /** - * @return Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet (this means that ssh provisioners will - * not work unless you are running the prvovider can send traffic to the instance's - * network (e.g. via tunnel or because it is running on another cloud instance - * on that network). This block can be repeated multiple times. Structure documented below. - * - */ private List accessConfigs; /** * @return An @@ -69,15 +60,6 @@ public final class GetInstanceTemplateNetworkInterface { private String subnetworkProject; private GetInstanceTemplateNetworkInterface() {} - /** - * @return Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet (this means that ssh provisioners will - * not work unless you are running the prvovider can send traffic to the instance's - * network (e.g. via tunnel or because it is running on another cloud instance - * on that network). This block can be repeated multiple times. Structure documented below. - * - */ public List accessConfigs() { return this.accessConfigs; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateResult.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateResult.java index 284fb08cbe..0e020bc415 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetInstanceTemplateResult.java @@ -109,11 +109,6 @@ public final class GetInstanceTemplateResult { */ private String minCpuPlatform; private @Nullable Boolean mostRecent; - /** - * @return The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. - * - */ private @Nullable String name; /** * @return Creates a unique name beginning with the specified @@ -303,11 +298,6 @@ public String minCpuPlatform() { public Optional mostRecent() { return Optional.ofNullable(this.mostRecent); } - /** - * @return The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. - * - */ public Optional name() { return Optional.ofNullable(this.name); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRouterNatResult.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRouterNatResult.java index 0cb83c4652..54bcc4caa0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRouterNatResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/GetRouterNatResult.java @@ -39,6 +39,7 @@ public final class GetRouterNatResult { private String sourceSubnetworkIpRangesToNat; private List subnetworks; private Integer tcpEstablishedIdleTimeoutSec; + private Integer tcpTimeWaitTimeoutSec; private Integer tcpTransitoryIdleTimeoutSec; private Integer udpIdleTimeoutSec; @@ -101,6 +102,9 @@ public List subnetworks() { public Integer tcpEstablishedIdleTimeoutSec() { return this.tcpEstablishedIdleTimeoutSec; } + public Integer tcpTimeWaitTimeoutSec() { + return this.tcpTimeWaitTimeoutSec; + } public Integer tcpTransitoryIdleTimeoutSec() { return this.tcpTransitoryIdleTimeoutSec; } @@ -135,6 +139,7 @@ public static final class Builder { private String sourceSubnetworkIpRangesToNat; private List subnetworks; private Integer tcpEstablishedIdleTimeoutSec; + private Integer tcpTimeWaitTimeoutSec; private Integer tcpTransitoryIdleTimeoutSec; private Integer udpIdleTimeoutSec; public Builder() {} @@ -158,6 +163,7 @@ public Builder(GetRouterNatResult defaults) { this.sourceSubnetworkIpRangesToNat = defaults.sourceSubnetworkIpRangesToNat; this.subnetworks = defaults.subnetworks; this.tcpEstablishedIdleTimeoutSec = defaults.tcpEstablishedIdleTimeoutSec; + this.tcpTimeWaitTimeoutSec = defaults.tcpTimeWaitTimeoutSec; this.tcpTransitoryIdleTimeoutSec = defaults.tcpTransitoryIdleTimeoutSec; this.udpIdleTimeoutSec = defaults.udpIdleTimeoutSec; } @@ -268,6 +274,11 @@ public Builder tcpEstablishedIdleTimeoutSec(Integer tcpEstablishedIdleTimeoutSec return this; } @CustomType.Setter + public Builder tcpTimeWaitTimeoutSec(Integer tcpTimeWaitTimeoutSec) { + this.tcpTimeWaitTimeoutSec = Objects.requireNonNull(tcpTimeWaitTimeoutSec); + return this; + } + @CustomType.Setter public Builder tcpTransitoryIdleTimeoutSec(Integer tcpTransitoryIdleTimeoutSec) { this.tcpTransitoryIdleTimeoutSec = Objects.requireNonNull(tcpTransitoryIdleTimeoutSec); return this; @@ -297,6 +308,7 @@ public GetRouterNatResult build() { o.sourceSubnetworkIpRangesToNat = sourceSubnetworkIpRangesToNat; o.subnetworks = subnetworks; o.tcpEstablishedIdleTimeoutSec = tcpEstablishedIdleTimeoutSec; + o.tcpTimeWaitTimeoutSec = tcpTimeWaitTimeoutSec; o.tcpTransitoryIdleTimeoutSec = tcpTransitoryIdleTimeoutSec; o.udpIdleTimeoutSec = udpIdleTimeoutSec; return o; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceAttachedDisk.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceAttachedDisk.java index 3732969b78..afb01aa83f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceAttachedDisk.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceAttachedDisk.java @@ -19,7 +19,7 @@ public final class InstanceAttachedDisk { private @Nullable String deviceName; /** * @return A 256-bit [customer-supplied encryption key] - * (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. * @@ -58,7 +58,7 @@ public Optional deviceName() { } /** * @return A 256-bit [customer-supplied encryption key] - * (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceBootDisk.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceBootDisk.java index 9bf41e2783..60742c082b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceBootDisk.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceBootDisk.java @@ -27,7 +27,7 @@ public final class InstanceBootDisk { private @Nullable String deviceName; /** * @return A 256-bit [customer-supplied encryption key] - * (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` * may be set. @@ -82,7 +82,7 @@ public Optional deviceName() { } /** * @return A 256-bit [customer-supplied encryption key] - * (<https://cloud.google.com/compute/docs/disks/customer-supplied-encryption>), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` * may be set. 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 ceb9c7ddbf..3a79cf72fe 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 @@ -16,15 +16,6 @@ @CustomType public final class InstanceNetworkInterface { - /** - * @return Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet. If omitted, ssh will not - * work unless this provider can send traffic to the instance's network (e.g. via - * tunnel or because it is running on another cloud instance on that network). - * This block can be repeated multiple times. Structure documented below. - * - */ private @Nullable List accessConfigs; /** * @return An @@ -101,15 +92,6 @@ public final class InstanceNetworkInterface { private @Nullable String subnetworkProject; private InstanceNetworkInterface() {} - /** - * @return Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet. If omitted, ssh will not - * work unless this provider can send traffic to the instance's network (e.g. via - * tunnel or because it is running on another cloud instance on that network). - * This block can be repeated multiple times. Structure documented below. - * - */ public List accessConfigs() { return this.accessConfigs == null ? List.of() : this.accessConfigs; } 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 b3b345ebc0..cd787866cc 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 @@ -16,15 +16,6 @@ @CustomType public final class InstanceTemplateNetworkInterface { - /** - * @return Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet (this means that ssh provisioners will - * not work unless you can send traffic to the instance's - * network (e.g. via tunnel or because it is running on another cloud instance - * on that network). This block can be repeated multiple times. Structure documented below. - * - */ private @Nullable List accessConfigs; /** * @return An @@ -41,11 +32,6 @@ public final class InstanceTemplateNetworkInterface { */ private @Nullable List ipv6AccessConfigs; private @Nullable String ipv6AccessType; - /** - * @return The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. - * - */ private @Nullable String name; /** * @return The name or self_link of the network to attach this interface to. @@ -90,15 +76,6 @@ public final class InstanceTemplateNetworkInterface { private @Nullable String subnetworkProject; private InstanceTemplateNetworkInterface() {} - /** - * @return Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet (this means that ssh provisioners will - * not work unless you can send traffic to the instance's - * network (e.g. via tunnel or because it is running on another cloud instance - * on that network). This block can be repeated multiple times. Structure documented below. - * - */ public List accessConfigs() { return this.accessConfigs == null ? List.of() : this.accessConfigs; } @@ -123,11 +100,6 @@ public List ipv6AccessConfigs( public Optional ipv6AccessType() { return Optional.ofNullable(this.ipv6AccessType); } - /** - * @return The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. - * - */ public Optional name() { return Optional.ofNullable(this.name); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateScheduling.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateScheduling.java index e07afe0159..cba450cd5b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateScheduling.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/InstanceTemplateScheduling.java @@ -28,10 +28,6 @@ public final class InstanceTemplateScheduling { * */ private @Nullable String instanceTerminationAction; - /** - * @return Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below. - * - */ private @Nullable InstanceTemplateSchedulingMaxRunDuration maxRunDuration; private @Nullable Integer minNodeCpus; /** @@ -82,10 +78,6 @@ public Optional automaticRestart() { public Optional instanceTerminationAction() { return Optional.ofNullable(this.instanceTerminationAction); } - /** - * @return Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below. - * - */ public Optional maxRunDuration() { return Optional.ofNullable(this.maxRunDuration); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/NodeGroupShareSettings.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/NodeGroupShareSettings.java new file mode 100644 index 0000000000..2db774a100 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/NodeGroupShareSettings.java @@ -0,0 +1,84 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.compute.outputs.NodeGroupShareSettingsProjectMap; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import javax.annotation.Nullable; + +@CustomType +public final class NodeGroupShareSettings { + /** + * @return A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + * Structure is documented below. + * + */ + private @Nullable List projectMaps; + /** + * @return Node group sharing type. + * Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + * + */ + private String shareType; + + private NodeGroupShareSettings() {} + /** + * @return A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + * Structure is documented below. + * + */ + public List projectMaps() { + return this.projectMaps == null ? List.of() : this.projectMaps; + } + /** + * @return Node group sharing type. + * Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + * + */ + public String shareType() { + return this.shareType; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(NodeGroupShareSettings defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable List projectMaps; + private String shareType; + public Builder() {} + public Builder(NodeGroupShareSettings defaults) { + Objects.requireNonNull(defaults); + this.projectMaps = defaults.projectMaps; + this.shareType = defaults.shareType; + } + + @CustomType.Setter + public Builder projectMaps(@Nullable List projectMaps) { + this.projectMaps = projectMaps; + return this; + } + public Builder projectMaps(NodeGroupShareSettingsProjectMap... projectMaps) { + return projectMaps(List.of(projectMaps)); + } + @CustomType.Setter + public Builder shareType(String shareType) { + this.shareType = Objects.requireNonNull(shareType); + return this; + } + public NodeGroupShareSettings build() { + final var o = new NodeGroupShareSettings(); + o.projectMaps = projectMaps; + o.shareType = shareType; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/NodeGroupShareSettingsProjectMap.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/NodeGroupShareSettingsProjectMap.java new file mode 100644 index 0000000000..04cf289033 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/NodeGroupShareSettingsProjectMap.java @@ -0,0 +1,74 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class NodeGroupShareSettingsProjectMap { + /** + * @return The identifier for this object. Format specified above. + * + */ + private String id; + /** + * @return The project id/number should be the same as the key of this project config in the project map. + * + */ + private String projectId; + + private NodeGroupShareSettingsProjectMap() {} + /** + * @return The identifier for this object. Format specified above. + * + */ + public String id() { + return this.id; + } + /** + * @return The project id/number should be the same as the key of this project config in the project map. + * + */ + public String projectId() { + return this.projectId; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(NodeGroupShareSettingsProjectMap defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String id; + private String projectId; + public Builder() {} + public Builder(NodeGroupShareSettingsProjectMap defaults) { + Objects.requireNonNull(defaults); + this.id = defaults.id; + this.projectId = defaults.projectId; + } + + @CustomType.Setter + public Builder id(String id) { + this.id = Objects.requireNonNull(id); + return this; + } + @CustomType.Setter + public Builder projectId(String projectId) { + this.projectId = Objects.requireNonNull(projectId); + return this; + } + public NodeGroupShareSettingsProjectMap build() { + final var o = new NodeGroupShareSettingsProjectMap(); + o.id = id; + o.projectId = projectId; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionAutoscalerAutoscalingPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionAutoscalerAutoscalingPolicy.java index 162448289c..9f3effd253 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionAutoscalerAutoscalingPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionAutoscalerAutoscalingPolicy.java @@ -75,12 +75,6 @@ public final class RegionAutoscalerAutoscalingPolicy { * */ private @Nullable String mode; - /** - * @return Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - */ private @Nullable RegionAutoscalerAutoscalingPolicyScaleDownControl scaleDownControl; /** * @return Defines scale in controls to reduce the risk of response latency @@ -167,12 +161,6 @@ public Integer minReplicas() { public Optional mode() { return Optional.ofNullable(this.mode); } - /** - * @return Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - * - */ public Optional scaleDownControl() { return Optional.ofNullable(this.scaleDownControl); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionAutoscalerAutoscalingPolicyMetric.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionAutoscalerAutoscalingPolicyMetric.java index e092af8ace..39003eab8c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionAutoscalerAutoscalingPolicyMetric.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionAutoscalerAutoscalingPolicyMetric.java @@ -12,36 +12,6 @@ @CustomType public final class RegionAutoscalerAutoscalingPolicyMetric { - /** - * @return A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - */ private @Nullable String filter; /** * @return The identifier (type) of the Stackdriver Monitoring metric. @@ -50,23 +20,6 @@ public final class RegionAutoscalerAutoscalingPolicyMetric { * */ private String name; - /** - * @return If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - */ private @Nullable Double singleInstanceAssignment; /** * @return The target value of the metric that autoscaler should @@ -89,36 +42,6 @@ public final class RegionAutoscalerAutoscalingPolicyMetric { private @Nullable String type; private RegionAutoscalerAutoscalingPolicyMetric() {} - /** - * @return A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gce_instance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - * - */ public Optional filter() { return Optional.ofNullable(this.filter); } @@ -131,23 +54,6 @@ public Optional filter() { public String name() { return this.name; } - /** - * @return If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilization_target - * instead. - * - */ public Optional singleInstanceAssignment() { return Optional.ofNullable(this.singleInstanceAssignment); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionBackendServiceCdnPolicyNegativeCachingPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionBackendServiceCdnPolicyNegativeCachingPolicy.java index 3b2d1cc047..e03725fa8d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionBackendServiceCdnPolicyNegativeCachingPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionBackendServiceCdnPolicyNegativeCachingPolicy.java @@ -17,11 +17,6 @@ public final class RegionBackendServiceCdnPolicyNegativeCachingPolicy { * */ private @Nullable Integer code; - /** - * @return The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - * (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - * - */ private @Nullable Integer ttl; private RegionBackendServiceCdnPolicyNegativeCachingPolicy() {} @@ -33,11 +28,6 @@ private RegionBackendServiceCdnPolicyNegativeCachingPolicy() {} public Optional code() { return Optional.ofNullable(this.code); } - /** - * @return The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - * (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - * - */ public Optional ttl() { return Optional.ofNullable(this.ttl); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionBackendServiceCircuitBreakers.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionBackendServiceCircuitBreakers.java index cf38f2832f..39c0cf3340 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionBackendServiceCircuitBreakers.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionBackendServiceCircuitBreakers.java @@ -12,11 +12,6 @@ @CustomType public final class RegionBackendServiceCircuitBreakers { - /** - * @return The timeout for new network connections to hosts. - * Structure is documented below. - * - */ private @Nullable RegionBackendServiceCircuitBreakersConnectTimeout connectTimeout; /** * @return The maximum number of connections to the backend cluster. @@ -52,11 +47,6 @@ public final class RegionBackendServiceCircuitBreakers { private @Nullable Integer maxRetries; private RegionBackendServiceCircuitBreakers() {} - /** - * @return The timeout for new network connections to hosts. - * Structure is documented below. - * - */ public Optional connectTimeout() { return Optional.ofNullable(this.connectTimeout); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionDiskSourceSnapshotEncryptionKey.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionDiskSourceSnapshotEncryptionKey.java index a85afe95b0..e03647557f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionDiskSourceSnapshotEncryptionKey.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/RegionDiskSourceSnapshotEncryptionKey.java @@ -11,10 +11,6 @@ @CustomType public final class RegionDiskSourceSnapshotEncryptionKey { - /** - * @return The name of the encryption key that is stored in Google Cloud KMS. - * - */ private @Nullable String kmsKeyName; /** * @return Specifies a 256-bit customer-supplied encryption key, encoded in @@ -30,10 +26,6 @@ public final class RegionDiskSourceSnapshotEncryptionKey { private @Nullable String sha256; private RegionDiskSourceSnapshotEncryptionKey() {} - /** - * @return The name of the encryption key that is stored in Google Cloud KMS. - * - */ public Optional kmsKeyName() { return Optional.ofNullable(this.kmsKeyName); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfig.java index 98dc308391..90cb74990e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfig.java @@ -4,6 +4,7 @@ package com.pulumi.gcp.compute.outputs; import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.compute.outputs.SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig; import com.pulumi.gcp.compute.outputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig; import java.util.Objects; import java.util.Optional; @@ -11,6 +12,11 @@ @CustomType public final class SecurityPolicyAdaptiveProtectionConfig { + /** + * @return ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + * + */ + private @Nullable SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig autoDeployConfig; /** * @return Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. * @@ -18,6 +24,13 @@ public final class SecurityPolicyAdaptiveProtectionConfig { private @Nullable SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig layer7DdosDefenseConfig; private SecurityPolicyAdaptiveProtectionConfig() {} + /** + * @return ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + * + */ + public Optional autoDeployConfig() { + return Optional.ofNullable(this.autoDeployConfig); + } /** * @return Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. * @@ -35,13 +48,20 @@ public static Builder builder(SecurityPolicyAdaptiveProtectionConfig defaults) { } @CustomType.Builder public static final class Builder { + private @Nullable SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig autoDeployConfig; private @Nullable SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig layer7DdosDefenseConfig; public Builder() {} public Builder(SecurityPolicyAdaptiveProtectionConfig defaults) { Objects.requireNonNull(defaults); + this.autoDeployConfig = defaults.autoDeployConfig; this.layer7DdosDefenseConfig = defaults.layer7DdosDefenseConfig; } + @CustomType.Setter + public Builder autoDeployConfig(@Nullable SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig autoDeployConfig) { + this.autoDeployConfig = autoDeployConfig; + return this; + } @CustomType.Setter public Builder layer7DdosDefenseConfig(@Nullable SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig layer7DdosDefenseConfig) { this.layer7DdosDefenseConfig = layer7DdosDefenseConfig; @@ -49,6 +69,7 @@ public Builder layer7DdosDefenseConfig(@Nullable SecurityPolicyAdaptiveProtectio } public SecurityPolicyAdaptiveProtectionConfig build() { final var o = new SecurityPolicyAdaptiveProtectionConfig(); + o.autoDeployConfig = autoDeployConfig; o.layer7DdosDefenseConfig = layer7DdosDefenseConfig; return o; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.java new file mode 100644 index 0000000000..3ded1429b1 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/compute/outputs/SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.java @@ -0,0 +1,117 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.compute.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Double; +import java.lang.Integer; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig { + /** + * @return Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + * + */ + private @Nullable Double confidenceThreshold; + /** + * @return Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + * + */ + private @Nullable Integer expirationSec; + /** + * @return Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + * + */ + private @Nullable Double impactedBaselineThreshold; + /** + * @return Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + * + */ + private @Nullable Double loadThreshold; + + private SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig() {} + /** + * @return Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + * + */ + public Optional confidenceThreshold() { + return Optional.ofNullable(this.confidenceThreshold); + } + /** + * @return Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + * + */ + public Optional expirationSec() { + return Optional.ofNullable(this.expirationSec); + } + /** + * @return Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + * + */ + public Optional impactedBaselineThreshold() { + return Optional.ofNullable(this.impactedBaselineThreshold); + } + /** + * @return Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + * + */ + public Optional loadThreshold() { + return Optional.ofNullable(this.loadThreshold); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Double confidenceThreshold; + private @Nullable Integer expirationSec; + private @Nullable Double impactedBaselineThreshold; + private @Nullable Double loadThreshold; + public Builder() {} + public Builder(SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig defaults) { + Objects.requireNonNull(defaults); + this.confidenceThreshold = defaults.confidenceThreshold; + this.expirationSec = defaults.expirationSec; + this.impactedBaselineThreshold = defaults.impactedBaselineThreshold; + this.loadThreshold = defaults.loadThreshold; + } + + @CustomType.Setter + public Builder confidenceThreshold(@Nullable Double confidenceThreshold) { + this.confidenceThreshold = confidenceThreshold; + return this; + } + @CustomType.Setter + public Builder expirationSec(@Nullable Integer expirationSec) { + this.expirationSec = expirationSec; + return this; + } + @CustomType.Setter + public Builder impactedBaselineThreshold(@Nullable Double impactedBaselineThreshold) { + this.impactedBaselineThreshold = impactedBaselineThreshold; + return this; + } + @CustomType.Setter + public Builder loadThreshold(@Nullable Double loadThreshold) { + this.loadThreshold = loadThreshold; + return this; + } + public SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig build() { + final var o = new SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig(); + o.confidenceThreshold = confidenceThreshold; + o.expirationSec = expirationSec; + o.impactedBaselineThreshold = impactedBaselineThreshold; + o.loadThreshold = loadThreshold; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/AttachedCluster.java b/sdk/java/src/main/java/com/pulumi/gcp/container/AttachedCluster.java index 2181a09269..4fddb98207 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/AttachedCluster.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/AttachedCluster.java @@ -87,6 +87,59 @@ * } * } * ``` + * ### Container Attached Cluster Ignore Errors + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.gcp.organizations.OrganizationsFunctions; + * import com.pulumi.gcp.organizations.inputs.GetProjectArgs; + * import com.pulumi.gcp.container.ContainerFunctions; + * import com.pulumi.gcp.container.inputs.GetAttachedVersionsArgs; + * import com.pulumi.gcp.container.AttachedCluster; + * import com.pulumi.gcp.container.AttachedClusterArgs; + * import com.pulumi.gcp.container.inputs.AttachedClusterOidcConfigArgs; + * import com.pulumi.gcp.container.inputs.AttachedClusterFleetArgs; + * import java.util.List; + * import java.util.ArrayList; + * import java.util.Map; + * import java.io.File; + * import java.nio.file.Files; + * import java.nio.file.Paths; + * + * public class App { + * public static void main(String[] args) { + * Pulumi.run(App::stack); + * } + * + * public static void stack(Context ctx) { + * final var project = OrganizationsFunctions.getProject(); + * + * final var versions = ContainerFunctions.getAttachedVersions(GetAttachedVersionsArgs.builder() + * .location("us-west1") + * .project(project.applyValue(getProjectResult -> getProjectResult.projectId())) + * .build()); + * + * var primary = new AttachedCluster("primary", AttachedClusterArgs.builder() + * .location("us-west1") + * .project(project.applyValue(getProjectResult -> getProjectResult.projectId())) + * .description("Test cluster") + * .distribution("aks") + * .oidcConfig(AttachedClusterOidcConfigArgs.builder() + * .issuerUrl("https://oidc.issuer.url") + * .build()) + * .platformVersion(versions.applyValue(getAttachedVersionsResult -> getAttachedVersionsResult.validVersions()[0])) + * .fleet(AttachedClusterFleetArgs.builder() + * .project(String.format("projects/%s", project.applyValue(getProjectResult -> getProjectResult.number()))) + * .build()) + * .deletionPolicy("DELETE_IGNORE_ERRORS") + * .build()); + * + * } + * } + * ``` * * ## Import * @@ -179,6 +232,20 @@ public Output clusterRegion() { public Output createTime() { return this.createTime; } + /** + * Policy to determine what flags to send on delete. + * + */ + @Export(name="deletionPolicy", type=String.class, parameters={}) + private Output deletionPolicy; + + /** + * @return Policy to determine what flags to send on delete. + * + */ + public Output> deletionPolicy() { + return Codegen.optional(this.deletionPolicy); + } /** * A human readable description of this attached cluster. Cannot be longer * than 255 UTF-8 encoded bytes. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/AttachedClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/AttachedClusterArgs.java index 46da6585a2..652a80dc34 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/AttachedClusterArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/AttachedClusterArgs.java @@ -63,6 +63,21 @@ public Optional> authorization() { return Optional.ofNullable(this.authorization); } + /** + * Policy to determine what flags to send on delete. + * + */ + @Import(name="deletionPolicy") + private @Nullable Output deletionPolicy; + + /** + * @return Policy to determine what flags to send on delete. + * + */ + public Optional> deletionPolicy() { + return Optional.ofNullable(this.deletionPolicy); + } + /** * A human readable description of this attached cluster. Cannot be longer * than 255 UTF-8 encoded bytes. @@ -248,6 +263,7 @@ private AttachedClusterArgs() {} private AttachedClusterArgs(AttachedClusterArgs $) { this.annotations = $.annotations; this.authorization = $.authorization; + this.deletionPolicy = $.deletionPolicy; this.description = $.description; this.distribution = $.distribution; this.fleet = $.fleet; @@ -332,6 +348,27 @@ public Builder authorization(AttachedClusterAuthorizationArgs authorization) { return authorization(Output.of(authorization)); } + /** + * @param deletionPolicy Policy to determine what flags to send on delete. + * + * @return builder + * + */ + public Builder deletionPolicy(@Nullable Output deletionPolicy) { + $.deletionPolicy = deletionPolicy; + return this; + } + + /** + * @param deletionPolicy Policy to determine what flags to send on delete. + * + * @return builder + * + */ + public Builder deletionPolicy(String deletionPolicy) { + return deletionPolicy(Output.of(deletionPolicy)); + } + /** * @param description A human readable description of this attached cluster. Cannot be longer * than 255 UTF-8 encoded bytes. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/Cluster.java b/sdk/java/src/main/java/com/pulumi/gcp/container/Cluster.java index 1dad62b279..85b355a5f2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/Cluster.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/Cluster.java @@ -52,14 +52,6 @@ import javax.annotation.Nullable; /** - * Manages a Google Kubernetes Engine (GKE) cluster. For more information see - * [the official documentation](https://cloud.google.com/container-engine/docs/clusters) - * and [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters). - * - * > **Warning:** All arguments and attributes, including basic auth username and - * passwords as well as certificate outputs will be stored in the raw state as - * plaintext. [Read more about secrets in state](https://www.pulumi.com/docs/intro/concepts/programming-model/#secrets). - * * ## Example Usage * ### With A Separately Managed Node Pool (Recommended) * ```java @@ -166,43 +158,6 @@ * } * } * ``` - * ### Autopilot - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.serviceAccount.Account; - * import com.pulumi.gcp.serviceAccount.AccountArgs; - * import com.pulumi.gcp.container.Cluster; - * import com.pulumi.gcp.container.ClusterArgs; - * 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 Account("default", AccountArgs.builder() - * .accountId("service-account-id") - * .displayName("Service Account") - * .build()); - * - * var primary = new Cluster("primary", ClusterArgs.builder() - * .enableAutopilot(true) - * .location("us-central1-a") - * .build()); - * - * } - * } - * ``` * * ## Import * @@ -220,7 +175,7 @@ * $ pulumi import gcp:container/cluster:Cluster mycluster us-east1-a/my-cluster * ``` * - * For example, the following fields will show diffs if set in config* `min_master_version` * `remove_default_node_pool` + * For example, the following fields will show diffs if set in config- `min_master_version` - `remove_default_node_pool` * */ @ResourceType(type="gcp:container/cluster:Cluster") @@ -318,7 +273,7 @@ public Output clusterIpv4Cidr() { return this.clusterIpv4Cidr; } /** - * Configuration for + * ) Configuration for * [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, * Structure is documented below. * @@ -327,7 +282,7 @@ public Output clusterIpv4Cidr() { private Output clusterTelemetry; /** - * @return Configuration for + * @return ) Configuration for * [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, * Structure is documented below. * @@ -532,6 +487,7 @@ public Output> enableKubernetesAlpha() { return Codegen.optional(this.enableKubernetesAlpha); } /** + * ) * Whether L4ILB Subsetting is enabled for this cluster. * */ @@ -539,7 +495,8 @@ public Output> enableKubernetesAlpha() { private Output enableL4IlbSubsetting; /** - * @return Whether L4ILB Subsetting is enabled for this cluster. + * @return ) + * Whether L4ILB Subsetting is enabled for this cluster. * */ public Output> enableL4IlbSubsetting() { @@ -624,14 +581,14 @@ public Output> gatewayApiConfig() { return Codegen.optional(this.gatewayApiConfig); } /** - * . Structure is documented below. + * ). Structure is documented below. * */ @Export(name="identityServiceConfig", type=ClusterIdentityServiceConfig.class, parameters={}) private Output identityServiceConfig; /** - * @return . Structure is documented below. + * @return ). Structure is documented below. * */ public Output identityServiceConfig() { @@ -848,30 +805,18 @@ public Output meshCertificates() { return this.meshCertificates; } /** - * The minimum version of the master. GKE - * will auto-update the master to new versions, so this does not guarantee the - * current master version--use the read-only `master_version` field to obtain that. - * If unset, the cluster's version will be set by GKE to the version of the most recent - * official release (which is not necessarily the latest version). Most users will find - * the `gcp.container.getEngineVersions` data source useful - it indicates which versions - * are available. If you intend to specify versions manually, - * [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - * describe the various acceptable formats for this field. + * The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + * current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + * set by GKE to the version of the most recent official release (which is not necessarily the latest version). * */ @Export(name="minMasterVersion", type=String.class, parameters={}) private Output minMasterVersion; /** - * @return The minimum version of the master. GKE - * will auto-update the master to new versions, so this does not guarantee the - * current master version--use the read-only `master_version` field to obtain that. - * If unset, the cluster's version will be set by GKE to the version of the most recent - * official release (which is not necessarily the latest version). Most users will find - * the `gcp.container.getEngineVersions` data source useful - it indicates which versions - * are available. If you intend to specify versions manually, - * [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - * describe the various acceptable formats for this field. + * @return The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + * current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + * set by GKE to the version of the most recent official release (which is not necessarily the latest version). * */ public Output> minMasterVersion() { @@ -990,22 +935,14 @@ public Output networkingMode() { return this.networkingMode; } /** - * Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. + * The configuration of the nodepool * */ @Export(name="nodeConfig", type=ClusterNodeConfig.class, parameters={}) private Output nodeConfig; /** - * @return Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. + * @return The configuration of the nodepool * */ public Output nodeConfig() { @@ -1088,28 +1025,24 @@ public Output> nodePools() { return this.nodePools; } /** - * The Kubernetes version on the nodes. Must either be unset - * or set to the same value as `min_master_version` on create. Defaults to the default - * version set by GKE which is not necessarily the latest version. This only affects - * nodes in the default node pool. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions. - * To update nodes in other node pools, use the `version` attribute on the node pool. + * The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + * Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + * default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + * Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + * version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + * use the version attribute on the node pool. * */ @Export(name="nodeVersion", type=String.class, parameters={}) private Output nodeVersion; /** - * @return The Kubernetes version on the nodes. Must either be unset - * or set to the same value as `min_master_version` on create. Defaults to the default - * version set by GKE which is not necessarily the latest version. This only affects - * nodes in the default node pool. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions. - * To update nodes in other node pools, use the `version` attribute on the node pool. + * @return The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + * Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + * default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + * Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + * version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + * use the version attribute on the node pool. * */ public Output nodeVersion() { @@ -1200,30 +1133,16 @@ public Output project() { return this.project; } /** - * Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - * feature, which provide more control over automatic upgrades of your GKE clusters. - * When updating this field, GKE imposes specific version requirements. See - * [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - * for more details; the `gcp.container.getEngineVersions` datasource can provide - * the default version for a channel. Note that removing the `release_channel` - * field from your config will cause the provider to stop managing your cluster's - * release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - * channel. Structure is documented below. + * Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + * clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. * */ @Export(name="releaseChannel", type=ClusterReleaseChannel.class, parameters={}) private Output releaseChannel; /** - * @return Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - * feature, which provide more control over automatic upgrades of your GKE clusters. - * When updating this field, GKE imposes specific version requirements. See - * [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - * for more details; the `gcp.container.getEngineVersions` datasource can provide - * the default version for a channel. Note that removing the `release_channel` - * field from your config will cause the provider to stop managing your cluster's - * release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - * channel. Structure is documented below. + * @return Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + * clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. * */ public Output releaseChannel() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/ClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/ClusterArgs.java index b406cfb8dd..764d33d23c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/ClusterArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/ClusterArgs.java @@ -150,7 +150,7 @@ public Optional> clusterIpv4Cidr() { } /** - * Configuration for + * ) Configuration for * [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, * Structure is documented below. * @@ -159,7 +159,7 @@ public Optional> clusterIpv4Cidr() { private @Nullable Output clusterTelemetry; /** - * @return Configuration for + * @return ) Configuration for * [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, * Structure is documented below. * @@ -381,6 +381,7 @@ public Optional> enableKubernetesAlpha() { } /** + * ) * Whether L4ILB Subsetting is enabled for this cluster. * */ @@ -388,7 +389,8 @@ public Optional> enableKubernetesAlpha() { private @Nullable Output enableL4IlbSubsetting; /** - * @return Whether L4ILB Subsetting is enabled for this cluster. + * @return ) + * Whether L4ILB Subsetting is enabled for this cluster. * */ public Optional> enableL4IlbSubsetting() { @@ -464,14 +466,14 @@ public Optional> gatewayApiConfig() { } /** - * . Structure is documented below. + * ). Structure is documented below. * */ @Import(name="identityServiceConfig") private @Nullable Output identityServiceConfig; /** - * @return . Structure is documented below. + * @return ). Structure is documented below. * */ public Optional> identityServiceConfig() { @@ -666,30 +668,18 @@ public Optional> meshCertificates() { } /** - * The minimum version of the master. GKE - * will auto-update the master to new versions, so this does not guarantee the - * current master version--use the read-only `master_version` field to obtain that. - * If unset, the cluster's version will be set by GKE to the version of the most recent - * official release (which is not necessarily the latest version). Most users will find - * the `gcp.container.getEngineVersions` data source useful - it indicates which versions - * are available. If you intend to specify versions manually, - * [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - * describe the various acceptable formats for this field. + * The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + * current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + * set by GKE to the version of the most recent official release (which is not necessarily the latest version). * */ @Import(name="minMasterVersion") private @Nullable Output minMasterVersion; /** - * @return The minimum version of the master. GKE - * will auto-update the master to new versions, so this does not guarantee the - * current master version--use the read-only `master_version` field to obtain that. - * If unset, the cluster's version will be set by GKE to the version of the most recent - * official release (which is not necessarily the latest version). Most users will find - * the `gcp.container.getEngineVersions` data source useful - it indicates which versions - * are available. If you intend to specify versions manually, - * [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - * describe the various acceptable formats for this field. + * @return The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + * current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + * set by GKE to the version of the most recent official release (which is not necessarily the latest version). * */ public Optional> minMasterVersion() { @@ -815,22 +805,14 @@ public Optional> networkingMode() { } /** - * Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. + * The configuration of the nodepool * */ @Import(name="nodeConfig") private @Nullable Output nodeConfig; /** - * @return Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. + * @return The configuration of the nodepool * */ public Optional> nodeConfig() { @@ -918,28 +900,24 @@ public Optional>> nodePools() { } /** - * The Kubernetes version on the nodes. Must either be unset - * or set to the same value as `min_master_version` on create. Defaults to the default - * version set by GKE which is not necessarily the latest version. This only affects - * nodes in the default node pool. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions. - * To update nodes in other node pools, use the `version` attribute on the node pool. + * The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + * Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + * default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + * Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + * version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + * use the version attribute on the node pool. * */ @Import(name="nodeVersion") private @Nullable Output nodeVersion; /** - * @return The Kubernetes version on the nodes. Must either be unset - * or set to the same value as `min_master_version` on create. Defaults to the default - * version set by GKE which is not necessarily the latest version. This only affects - * nodes in the default node pool. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions. - * To update nodes in other node pools, use the `version` attribute on the node pool. + * @return The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + * Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + * default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + * Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + * version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + * use the version attribute on the node pool. * */ public Optional> nodeVersion() { @@ -1030,30 +1008,16 @@ public Optional> project() { } /** - * Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - * feature, which provide more control over automatic upgrades of your GKE clusters. - * When updating this field, GKE imposes specific version requirements. See - * [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - * for more details; the `gcp.container.getEngineVersions` datasource can provide - * the default version for a channel. Note that removing the `release_channel` - * field from your config will cause the provider to stop managing your cluster's - * release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - * channel. Structure is documented below. + * Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + * clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. * */ @Import(name="releaseChannel") private @Nullable Output releaseChannel; /** - * @return Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - * feature, which provide more control over automatic upgrades of your GKE clusters. - * When updating this field, GKE imposes specific version requirements. See - * [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - * for more details; the `gcp.container.getEngineVersions` datasource can provide - * the default version for a channel. Note that removing the `release_channel` - * field from your config will cause the provider to stop managing your cluster's - * release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - * channel. Structure is documented below. + * @return Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + * clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. * */ public Optional> releaseChannel() { @@ -1409,7 +1373,7 @@ public Builder clusterIpv4Cidr(String clusterIpv4Cidr) { } /** - * @param clusterTelemetry Configuration for + * @param clusterTelemetry ) Configuration for * [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, * Structure is documented below. * @@ -1422,7 +1386,7 @@ public Builder clusterTelemetry(@Nullable Output cl } /** - * @param clusterTelemetry Configuration for + * @param clusterTelemetry ) Configuration for * [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, * Structure is documented below. * @@ -1718,7 +1682,8 @@ public Builder enableKubernetesAlpha(Boolean enableKubernetesAlpha) { } /** - * @param enableL4IlbSubsetting Whether L4ILB Subsetting is enabled for this cluster. + * @param enableL4IlbSubsetting ) + * Whether L4ILB Subsetting is enabled for this cluster. * * @return builder * @@ -1729,7 +1694,8 @@ public Builder enableL4IlbSubsetting(@Nullable Output enableL4IlbSubset } /** - * @param enableL4IlbSubsetting Whether L4ILB Subsetting is enabled for this cluster. + * @param enableL4IlbSubsetting ) + * Whether L4ILB Subsetting is enabled for this cluster. * * @return builder * @@ -1831,7 +1797,7 @@ public Builder gatewayApiConfig(ClusterGatewayApiConfigArgs gatewayApiConfig) { } /** - * @param identityServiceConfig . Structure is documented below. + * @param identityServiceConfig ). Structure is documented below. * * @return builder * @@ -1842,7 +1808,7 @@ public Builder identityServiceConfig(@Nullable Output minMasterVersion) { } /** - * @param minMasterVersion The minimum version of the master. GKE - * will auto-update the master to new versions, so this does not guarantee the - * current master version--use the read-only `master_version` field to obtain that. - * If unset, the cluster's version will be set by GKE to the version of the most recent - * official release (which is not necessarily the latest version). Most users will find - * the `gcp.container.getEngineVersions` data source useful - it indicates which versions - * are available. If you intend to specify versions manually, - * [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - * describe the various acceptable formats for this field. + * @param minMasterVersion The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + * current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + * set by GKE to the version of the most recent official release (which is not necessarily the latest version). * * @return builder * @@ -2284,11 +2238,7 @@ public Builder networkingMode(String networkingMode) { } /** - * @param nodeConfig Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. + * @param nodeConfig The configuration of the nodepool * * @return builder * @@ -2299,11 +2249,7 @@ public Builder nodeConfig(@Nullable Output nodeConfig) { } /** - * @param nodeConfig Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. + * @param nodeConfig The configuration of the nodepool * * @return builder * @@ -2445,14 +2391,12 @@ public Builder nodePools(ClusterNodePoolArgs... nodePools) { } /** - * @param nodeVersion The Kubernetes version on the nodes. Must either be unset - * or set to the same value as `min_master_version` on create. Defaults to the default - * version set by GKE which is not necessarily the latest version. This only affects - * nodes in the default node pool. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions. - * To update nodes in other node pools, use the `version` attribute on the node pool. + * @param nodeVersion The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + * Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + * default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + * Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + * version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + * use the version attribute on the node pool. * * @return builder * @@ -2463,14 +2407,12 @@ public Builder nodeVersion(@Nullable Output nodeVersion) { } /** - * @param nodeVersion The Kubernetes version on the nodes. Must either be unset - * or set to the same value as `min_master_version` on create. Defaults to the default - * version set by GKE which is not necessarily the latest version. This only affects - * nodes in the default node pool. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions. - * To update nodes in other node pools, use the `version` attribute on the node pool. + * @param nodeVersion The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + * Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + * default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + * Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + * version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + * use the version attribute on the node pool. * * @return builder * @@ -2593,15 +2535,8 @@ public Builder project(String project) { } /** - * @param releaseChannel Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - * feature, which provide more control over automatic upgrades of your GKE clusters. - * When updating this field, GKE imposes specific version requirements. See - * [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - * for more details; the `gcp.container.getEngineVersions` datasource can provide - * the default version for a channel. Note that removing the `release_channel` - * field from your config will cause the provider to stop managing your cluster's - * release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - * channel. Structure is documented below. + * @param releaseChannel Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + * clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. * * @return builder * @@ -2612,15 +2547,8 @@ public Builder releaseChannel(@Nullable Output releas } /** - * @param releaseChannel Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - * feature, which provide more control over automatic upgrades of your GKE clusters. - * When updating this field, GKE imposes specific version requirements. See - * [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - * for more details; the `gcp.container.getEngineVersions` datasource can provide - * the default version for a channel. Note that removing the `release_channel` - * field from your config will cause the provider to stop managing your cluster's - * release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - * channel. Structure is documented below. + * @param releaseChannel Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + * clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/NodePool.java b/sdk/java/src/main/java/com/pulumi/gcp/container/NodePool.java index 26da96cc4b..f865c19d2e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/NodePool.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/NodePool.java @@ -23,125 +23,6 @@ import javax.annotation.Nullable; /** - * Manages a node pool in a Google Kubernetes Engine (GKE) cluster separately from - * the cluster control plane. For more information see [the official documentation](https://cloud.google.com/container-engine/docs/node-pools) - * and [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters.nodePools). - * - * ## Example Usage - * ### Using A Separately Managed Node Pool (Recommended) - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.serviceAccount.Account; - * import com.pulumi.gcp.serviceAccount.AccountArgs; - * import com.pulumi.gcp.container.Cluster; - * import com.pulumi.gcp.container.ClusterArgs; - * import com.pulumi.gcp.container.NodePool; - * import com.pulumi.gcp.container.NodePoolArgs; - * import com.pulumi.gcp.container.inputs.NodePoolNodeConfigArgs; - * 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 Account("default", AccountArgs.builder() - * .accountId("service-account-id") - * .displayName("Service Account") - * .build()); - * - * var primary = new Cluster("primary", ClusterArgs.builder() - * .location("us-central1") - * .removeDefaultNodePool(true) - * .initialNodeCount(1) - * .build()); - * - * var primaryPreemptibleNodes = new NodePool("primaryPreemptibleNodes", NodePoolArgs.builder() - * .cluster(primary.id()) - * .nodeCount(1) - * .nodeConfig(NodePoolNodeConfigArgs.builder() - * .preemptible(true) - * .machineType("e2-medium") - * .serviceAccount(default_.email()) - * .oauthScopes("https://www.googleapis.com/auth/cloud-platform") - * .build()) - * .build()); - * - * } - * } - * ``` - * ### 2 Node Pools, 1 Separately Managed + The Default Node Pool - * - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.serviceAccount.Account; - * import com.pulumi.gcp.serviceAccount.AccountArgs; - * import com.pulumi.gcp.container.Cluster; - * import com.pulumi.gcp.container.ClusterArgs; - * import com.pulumi.gcp.container.inputs.ClusterNodeConfigArgs; - * import com.pulumi.gcp.container.NodePool; - * import com.pulumi.gcp.container.NodePoolArgs; - * import com.pulumi.gcp.container.inputs.NodePoolNodeConfigArgs; - * 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 Account("default", AccountArgs.builder() - * .accountId("service-account-id") - * .displayName("Service Account") - * .build()); - * - * var primary = new Cluster("primary", ClusterArgs.builder() - * .location("us-central1-a") - * .initialNodeCount(3) - * .nodeLocations("us-central1-c") - * .nodeConfig(ClusterNodeConfigArgs.builder() - * .serviceAccount(default_.email()) - * .oauthScopes("https://www.googleapis.com/auth/cloud-platform") - * .guestAccelerators(ClusterNodeConfigGuestAcceleratorArgs.builder() - * .type("nvidia-tesla-k80") - * .count(1) - * .build()) - * .build()) - * .build()); - * - * var np = new NodePool("np", NodePoolArgs.builder() - * .cluster(primary.id()) - * .nodeConfig(NodePoolNodeConfigArgs.builder() - * .machineType("e2-medium") - * .serviceAccount(default_.email()) - * .oauthScopes("https://www.googleapis.com/auth/cloud-platform") - * .build()) - * .timeouts(%!v(PANIC=Format method: runtime error: invalid memory address or nil pointer dereference)) - * .build()); - * - * } - * } - * ``` - * * ## Import * * Node pools can be imported using the `project`, `location`, `cluster` and `name`. If the project is omitted, the project value in the provider configuration will be used. Examples @@ -188,26 +69,16 @@ public Output cluster() { return this.cluster; } /** - * The initial number of nodes for the pool. In - * regional or multi-zonal clusters, this is the number of nodes per zone. Changing - * this will force recreation of the resource. WARNING: Resizing your node pool manually - * may change this value in your existing cluster, which will trigger destruction - * and recreation on the next provider run (to rectify the discrepancy). If you don't - * need this value, don't set it. If you do need it, you can use a lifecycle block to - * ignore subsqeuent changes to this field. + * The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + * Changing this will force recreation of the resource. * */ @Export(name="initialNodeCount", type=Integer.class, parameters={}) private Output initialNodeCount; /** - * @return The initial number of nodes for the pool. In - * regional or multi-zonal clusters, this is the number of nodes per zone. Changing - * this will force recreation of the resource. WARNING: Resizing your node pool manually - * may change this value in your existing cluster, which will trigger destruction - * and recreation on the next provider run (to rectify the discrepancy). If you don't - * need this value, don't set it. If you do need it, you can use a lifecycle block to - * ignore subsqeuent changes to this field. + * @return The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + * Changing this will force recreation of the resource. * */ public Output initialNodeCount() { @@ -294,16 +165,14 @@ public Output maxPodsPerNode() { return this.maxPodsPerNode; } /** - * The name of the node pool. If left blank, the provider will - * auto-generate a unique name. + * The name of the node pool. If left blank, Terraform will auto-generate a unique name. * */ @Export(name="name", type=String.class, parameters={}) private Output name; /** - * @return The name of the node pool. If left blank, the provider will - * auto-generate a unique name. + * @return The name of the node pool. If left blank, Terraform will auto-generate a unique name. * */ public Output name() { @@ -450,24 +319,22 @@ public Output upgradeSettings() { return this.upgradeSettings; } /** - * The Kubernetes version for the nodes in this pool. Note that if this field - * and `auto_upgrade` are both specified, they will fight each other for what the node version should - * be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + * The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + * will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + * can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + * versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + * versions in a Terraform-compatible way. * */ @Export(name="version", type=String.class, parameters={}) private Output version; /** - * @return The Kubernetes version for the nodes in this pool. Note that if this field - * and `auto_upgrade` are both specified, they will fight each other for what the node version should - * be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + * @return The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + * will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + * can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + * versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + * versions in a Terraform-compatible way. * */ public Output version() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/NodePoolArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/NodePoolArgs.java index 2118fc4dfb..077efc0fd5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/NodePoolArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/NodePoolArgs.java @@ -56,26 +56,16 @@ public Output cluster() { } /** - * The initial number of nodes for the pool. In - * regional or multi-zonal clusters, this is the number of nodes per zone. Changing - * this will force recreation of the resource. WARNING: Resizing your node pool manually - * may change this value in your existing cluster, which will trigger destruction - * and recreation on the next provider run (to rectify the discrepancy). If you don't - * need this value, don't set it. If you do need it, you can use a lifecycle block to - * ignore subsqeuent changes to this field. + * The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + * Changing this will force recreation of the resource. * */ @Import(name="initialNodeCount") private @Nullable Output initialNodeCount; /** - * @return The initial number of nodes for the pool. In - * regional or multi-zonal clusters, this is the number of nodes per zone. Changing - * this will force recreation of the resource. WARNING: Resizing your node pool manually - * may change this value in your existing cluster, which will trigger destruction - * and recreation on the next provider run (to rectify the discrepancy). If you don't - * need this value, don't set it. If you do need it, you can use a lifecycle block to - * ignore subsqeuent changes to this field. + * @return The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + * Changing this will force recreation of the resource. * */ public Optional> initialNodeCount() { @@ -138,16 +128,14 @@ public Optional> maxPodsPerNode() { } /** - * The name of the node pool. If left blank, the provider will - * auto-generate a unique name. + * The name of the node pool. If left blank, Terraform will auto-generate a unique name. * */ @Import(name="name") private @Nullable Output name; /** - * @return The name of the node pool. If left blank, the provider will - * auto-generate a unique name. + * @return The name of the node pool. If left blank, Terraform will auto-generate a unique name. * */ public Optional> name() { @@ -297,24 +285,22 @@ public Optional> upgradeSettings() { } /** - * The Kubernetes version for the nodes in this pool. Note that if this field - * and `auto_upgrade` are both specified, they will fight each other for what the node version should - * be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + * The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + * will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + * can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + * versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + * versions in a Terraform-compatible way. * */ @Import(name="version") private @Nullable Output version; /** - * @return The Kubernetes version for the nodes in this pool. Note that if this field - * and `auto_upgrade` are both specified, they will fight each other for what the node version should - * be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + * @return The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + * will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + * can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + * versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + * versions in a Terraform-compatible way. * */ public Optional> version() { @@ -405,13 +391,8 @@ public Builder cluster(String cluster) { } /** - * @param initialNodeCount The initial number of nodes for the pool. In - * regional or multi-zonal clusters, this is the number of nodes per zone. Changing - * this will force recreation of the resource. WARNING: Resizing your node pool manually - * may change this value in your existing cluster, which will trigger destruction - * and recreation on the next provider run (to rectify the discrepancy). If you don't - * need this value, don't set it. If you do need it, you can use a lifecycle block to - * ignore subsqeuent changes to this field. + * @param initialNodeCount The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + * Changing this will force recreation of the resource. * * @return builder * @@ -422,13 +403,8 @@ public Builder initialNodeCount(@Nullable Output initialNodeCount) { } /** - * @param initialNodeCount The initial number of nodes for the pool. In - * regional or multi-zonal clusters, this is the number of nodes per zone. Changing - * this will force recreation of the resource. WARNING: Resizing your node pool manually - * may change this value in your existing cluster, which will trigger destruction - * and recreation on the next provider run (to rectify the discrepancy). If you don't - * need this value, don't set it. If you do need it, you can use a lifecycle block to - * ignore subsqeuent changes to this field. + * @param initialNodeCount The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + * Changing this will force recreation of the resource. * * @return builder * @@ -511,8 +487,7 @@ public Builder maxPodsPerNode(Integer maxPodsPerNode) { } /** - * @param name The name of the node pool. If left blank, the provider will - * auto-generate a unique name. + * @param name The name of the node pool. If left blank, Terraform will auto-generate a unique name. * * @return builder * @@ -523,8 +498,7 @@ public Builder name(@Nullable Output name) { } /** - * @param name The name of the node pool. If left blank, the provider will - * auto-generate a unique name. + * @param name The name of the node pool. If left blank, Terraform will auto-generate a unique name. * * @return builder * @@ -737,12 +711,11 @@ public Builder upgradeSettings(NodePoolUpgradeSettingsArgs upgradeSettings) { } /** - * @param version The Kubernetes version for the nodes in this pool. Note that if this field - * and `auto_upgrade` are both specified, they will fight each other for what the node version should - * be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + * @param version The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + * will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + * can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + * versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + * versions in a Terraform-compatible way. * * @return builder * @@ -753,12 +726,11 @@ public Builder version(@Nullable Output version) { } /** - * @param version The Kubernetes version for the nodes in this pool. Note that if this field - * and `auto_upgrade` are both specified, they will fight each other for what the node version should - * be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + * @param version The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + * will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + * can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + * versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + * versions in a Terraform-compatible way. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/AttachedClusterState.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/AttachedClusterState.java index 1dc2d6d957..78e662c1c2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/AttachedClusterState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/AttachedClusterState.java @@ -101,6 +101,21 @@ public Optional> createTime() { return Optional.ofNullable(this.createTime); } + /** + * Policy to determine what flags to send on delete. + * + */ + @Import(name="deletionPolicy") + private @Nullable Output deletionPolicy; + + /** + * @return Policy to determine what flags to send on delete. + * + */ + public Optional> deletionPolicy() { + return Optional.ofNullable(this.deletionPolicy); + } + /** * A human readable description of this attached cluster. Cannot be longer * than 255 UTF-8 encoded bytes. @@ -401,6 +416,7 @@ private AttachedClusterState(AttachedClusterState $) { this.authorization = $.authorization; this.clusterRegion = $.clusterRegion; this.createTime = $.createTime; + this.deletionPolicy = $.deletionPolicy; this.description = $.description; this.distribution = $.distribution; this.errors = $.errors; @@ -538,6 +554,27 @@ public Builder createTime(String createTime) { return createTime(Output.of(createTime)); } + /** + * @param deletionPolicy Policy to determine what flags to send on delete. + * + * @return builder + * + */ + public Builder deletionPolicy(@Nullable Output deletionPolicy) { + $.deletionPolicy = deletionPolicy; + return this; + } + + /** + * @param deletionPolicy Policy to determine what flags to send on delete. + * + * @return builder + * + */ + public Builder deletionPolicy(String deletionPolicy) { + return deletionPolicy(Output.of(deletionPolicy)); + } + /** * @param description A human readable description of this attached cluster. Cannot be longer * than 255 UTF-8 encoded bytes. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterAddonsConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterAddonsConfigArgs.java index 1b725a91c6..36d35018b1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterAddonsConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterAddonsConfigArgs.java @@ -172,7 +172,7 @@ public Optional> httpLoadBalanc } /** - * . + * ). * Structure is documented below. * */ @@ -180,7 +180,7 @@ public Optional> httpLoadBalanc private @Nullable Output istioConfig; /** - * @return . + * @return ). * Structure is documented below. * */ @@ -189,7 +189,7 @@ public Optional> istioConfig() { } /** - * . + * ). * Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. * */ @@ -197,7 +197,7 @@ public Optional> istioConfig() { private @Nullable Output kalmConfig; /** - * @return . + * @return ). * Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. * */ @@ -459,7 +459,7 @@ public Builder httpLoadBalancing(ClusterAddonsConfigHttpLoadBalancingArgs httpLo } /** - * @param istioConfig . + * @param istioConfig ). * Structure is documented below. * * @return builder @@ -471,7 +471,7 @@ public Builder istioConfig(@Nullable Output } /** - * @param istioConfig . + * @param istioConfig ). * Structure is documented below. * * @return builder @@ -482,7 +482,7 @@ public Builder istioConfig(ClusterAddonsConfigIstioConfigArgs istioConfig) { } /** - * @param kalmConfig . + * @param kalmConfig ). * Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. * * @return builder @@ -494,7 +494,7 @@ public Builder kalmConfig(@Nullable Output ka } /** - * @param kalmConfig . + * @param kalmConfig ). * Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. * * @return builder diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsArgs.java index eda4292b46..e5506ed321 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterClusterAutoscalingAutoProvisioningDefaultsArgs.java @@ -96,6 +96,7 @@ public Optional minCpuPlatform; /** - * @return Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the + * @return ) + * Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the * specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such * as "Intel Haswell" or "Intel Sandy Bridge". * @@ -313,7 +315,8 @@ public Builder management(ClusterClusterAutoscalingAutoProvisioningDefaultsManag } /** - * @param minCpuPlatform Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the + * @param minCpuPlatform ) + * Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the * specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such * as "Intel Haswell" or "Intel Sandy Bridge". * @@ -326,7 +329,8 @@ public Builder minCpuPlatform(@Nullable Output minCpuPlatform) { } /** - * @param minCpuPlatform Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the + * @param minCpuPlatform ) + * Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the * specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such * as "Intel Haswell" or "Intel Sandy Bridge". * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigArgs.java index b681e1c9ce..9de408f444 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigArgs.java @@ -31,14 +31,14 @@ public final class ClusterNodeConfigArgs extends com.pulumi.resources.ResourceAr public static final ClusterNodeConfigArgs Empty = new ClusterNodeConfigArgs(); /** - * The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + * The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption * */ @Import(name="bootDiskKmsKey") private @Nullable Output bootDiskKmsKey; /** - * @return The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + * @return The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption * */ public Optional> bootDiskKmsKey() { @@ -119,19 +119,9 @@ public Optional> gcfsConfig() { return Optional.ofNullable(this.gcfsConfig); } - /** - * List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - */ @Import(name="guestAccelerators") private @Nullable Output> guestAccelerators; - /** - * @return List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - */ public Optional>> guestAccelerators() { return Optional.ofNullable(this.guestAccelerators); } @@ -280,25 +270,9 @@ public Optional> machineType() { return Optional.ofNullable(this.machineType); } - /** - * The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - * - */ @Import(name="metadata") private @Nullable Output> metadata; - /** - * @return The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - * - */ public Optional>> metadata() { return Optional.ofNullable(this.metadata); } @@ -411,9 +385,19 @@ public Optional>> resourceLabels() { return Optional.ofNullable(this.resourceLabels); } + /** + * ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + * + */ @Import(name="sandboxConfig") private @Nullable Output sandboxConfig; + /** + * @return ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + * + */ public Optional> sandboxConfig() { return Optional.ofNullable(this.sandboxConfig); } @@ -486,31 +470,9 @@ public Optional>> tags() { return Optional.ofNullable(this.tags); } - /** - * A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - */ @Import(name="taints") private @Nullable Output> taints; - /** - * @return A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - */ public Optional>> taints() { return Optional.ofNullable(this.taints); } @@ -584,7 +546,7 @@ public Builder(ClusterNodeConfigArgs defaults) { } /** - * @param bootDiskKmsKey The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + * @param bootDiskKmsKey The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption * * @return builder * @@ -595,7 +557,7 @@ public Builder bootDiskKmsKey(@Nullable Output bootDiskKmsKey) { } /** - * @param bootDiskKmsKey The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + * @param bootDiskKmsKey The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption * * @return builder * @@ -702,36 +664,15 @@ public Builder gcfsConfig(ClusterNodeConfigGcfsConfigArgs gcfsConfig) { return gcfsConfig(Output.of(gcfsConfig)); } - /** - * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - * @return builder - * - */ public Builder guestAccelerators(@Nullable Output> guestAccelerators) { $.guestAccelerators = guestAccelerators; return this; } - /** - * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - * @return builder - * - */ public Builder guestAccelerators(List guestAccelerators) { return guestAccelerators(Output.of(guestAccelerators)); } - /** - * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - * @return builder - * - */ public Builder guestAccelerators(ClusterNodeConfigGuestAcceleratorArgs... guestAccelerators) { return guestAccelerators(List.of(guestAccelerators)); } @@ -928,31 +869,11 @@ public Builder machineType(String machineType) { return machineType(Output.of(machineType)); } - /** - * @param metadata The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - * - * @return builder - * - */ public Builder metadata(@Nullable Output> metadata) { $.metadata = metadata; return this; } - /** - * @param metadata The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - * - * @return builder - * - */ public Builder metadata(Map metadata) { return metadata(Output.of(metadata)); } @@ -1113,11 +1034,25 @@ public Builder resourceLabels(Map resourceLabels) { return resourceLabels(Output.of(resourceLabels)); } + /** + * @param sandboxConfig ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + * + * @return builder + * + */ public Builder sandboxConfig(@Nullable Output sandboxConfig) { $.sandboxConfig = sandboxConfig; return this; } + /** + * @param sandboxConfig ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + * + * @return builder + * + */ public Builder sandboxConfig(ClusterNodeConfigSandboxConfigArgs sandboxConfig) { return sandboxConfig(Output.of(sandboxConfig)); } @@ -1225,54 +1160,15 @@ public Builder tags(String... tags) { return tags(List.of(tags)); } - /** - * @param taints A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - * @return builder - * - */ public Builder taints(@Nullable Output> taints) { $.taints = taints; return this; } - /** - * @param taints A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - * @return builder - * - */ public Builder taints(List taints) { return taints(Output.of(taints)); } - /** - * @param taints A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - * @return builder - * - */ public Builder taints(ClusterNodeConfigTaintArgs... taints) { return taints(List.of(taints)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigWorkloadMetadataConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigWorkloadMetadataConfigArgs.java index 50a93dd2b6..a225fb1a13 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigWorkloadMetadataConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodeConfigWorkloadMetadataConfigArgs.java @@ -16,7 +16,7 @@ public final class ClusterNodeConfigWorkloadMetadataConfigArgs extends com.pulum /** * How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. * @@ -27,7 +27,7 @@ public final class ClusterNodeConfigWorkloadMetadataConfigArgs extends com.pulum /** * @return How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. * @@ -63,7 +63,7 @@ public Builder(ClusterNodeConfigWorkloadMetadataConfigArgs defaults) { /** * @param mode How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. * @@ -78,7 +78,7 @@ public Builder mode(Output mode) { /** * @param mode How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolArgs.java index f5cd4b18b3..01cfb25419 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolArgs.java @@ -115,42 +115,16 @@ public Optional> namePrefix() { return Optional.ofNullable(this.namePrefix); } - /** - * Configuration for - * [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - * - */ @Import(name="networkConfig") private @Nullable Output networkConfig; - /** - * @return Configuration for - * [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - * - */ public Optional> networkConfig() { return Optional.ofNullable(this.networkConfig); } - /** - * Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. - * - */ @Import(name="nodeConfig") private @Nullable Output nodeConfig; - /** - * @return Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. - * - */ public Optional> nodeConfig() { return Optional.ofNullable(this.nodeConfig); } @@ -378,54 +352,20 @@ public Builder namePrefix(String namePrefix) { return namePrefix(Output.of(namePrefix)); } - /** - * @param networkConfig Configuration for - * [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - * - * @return builder - * - */ public Builder networkConfig(@Nullable Output networkConfig) { $.networkConfig = networkConfig; return this; } - /** - * @param networkConfig Configuration for - * [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - * - * @return builder - * - */ public Builder networkConfig(ClusterNodePoolNetworkConfigArgs networkConfig) { return networkConfig(Output.of(networkConfig)); } - /** - * @param nodeConfig Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. - * - * @return builder - * - */ public Builder nodeConfig(@Nullable Output nodeConfig) { $.nodeConfig = nodeConfig; return this; } - /** - * @param nodeConfig Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. - * - * @return builder - * - */ public Builder nodeConfig(ClusterNodePoolNodeConfigArgs nodeConfig) { return nodeConfig(Output.of(nodeConfig)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNetworkConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNetworkConfigArgs.java index 58dc9c9d40..27a40e874a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNetworkConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNetworkConfigArgs.java @@ -16,17 +16,9 @@ public final class ClusterNodePoolNetworkConfigArgs extends com.pulumi.resources public static final ClusterNodePoolNetworkConfigArgs Empty = new ClusterNodePoolNetworkConfigArgs(); - /** - * Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. - * - */ @Import(name="createPodRange") private @Nullable Output createPodRange; - /** - * @return Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. - * - */ public Optional> createPodRange() { return Optional.ofNullable(this.createPodRange); } @@ -52,32 +44,16 @@ public Optional> enablePrivateNodes() { return Optional.ofNullable(this.enablePrivateNodes); } - /** - * The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - * - */ @Import(name="podIpv4CidrBlock") private @Nullable Output podIpv4CidrBlock; - /** - * @return The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - * - */ public Optional> podIpv4CidrBlock() { return Optional.ofNullable(this.podIpv4CidrBlock); } - /** - * The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. - * - */ @Import(name="podRange") private @Nullable Output podRange; - /** - * @return The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. - * - */ public Optional> podRange() { return Optional.ofNullable(this.podRange); } @@ -109,23 +85,11 @@ public Builder(ClusterNodePoolNetworkConfigArgs defaults) { $ = new ClusterNodePoolNetworkConfigArgs(Objects.requireNonNull(defaults)); } - /** - * @param createPodRange Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. - * - * @return builder - * - */ public Builder createPodRange(@Nullable Output createPodRange) { $.createPodRange = createPodRange; return this; } - /** - * @param createPodRange Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. - * - * @return builder - * - */ public Builder createPodRange(Boolean createPodRange) { return createPodRange(Output.of(createPodRange)); } @@ -157,44 +121,20 @@ public Builder enablePrivateNodes(Boolean enablePrivateNodes) { return enablePrivateNodes(Output.of(enablePrivateNodes)); } - /** - * @param podIpv4CidrBlock The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - * - * @return builder - * - */ public Builder podIpv4CidrBlock(@Nullable Output podIpv4CidrBlock) { $.podIpv4CidrBlock = podIpv4CidrBlock; return this; } - /** - * @param podIpv4CidrBlock The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - * - * @return builder - * - */ public Builder podIpv4CidrBlock(String podIpv4CidrBlock) { return podIpv4CidrBlock(Output.of(podIpv4CidrBlock)); } - /** - * @param podRange The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. - * - * @return builder - * - */ public Builder podRange(@Nullable Output podRange) { $.podRange = podRange; return this; } - /** - * @param podRange The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. - * - * @return builder - * - */ public Builder podRange(String podRange) { return podRange(Output.of(podRange)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigArgs.java index 58f12aed70..073123594a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigArgs.java @@ -31,14 +31,14 @@ public final class ClusterNodePoolNodeConfigArgs extends com.pulumi.resources.Re public static final ClusterNodePoolNodeConfigArgs Empty = new ClusterNodePoolNodeConfigArgs(); /** - * The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + * The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption * */ @Import(name="bootDiskKmsKey") private @Nullable Output bootDiskKmsKey; /** - * @return The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + * @return The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption * */ public Optional> bootDiskKmsKey() { @@ -119,19 +119,9 @@ public Optional> gcfsConfig() { return Optional.ofNullable(this.gcfsConfig); } - /** - * List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - */ @Import(name="guestAccelerators") private @Nullable Output> guestAccelerators; - /** - * @return List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - */ public Optional>> guestAccelerators() { return Optional.ofNullable(this.guestAccelerators); } @@ -280,25 +270,9 @@ public Optional> machineType() { return Optional.ofNullable(this.machineType); } - /** - * The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - * - */ @Import(name="metadata") private @Nullable Output> metadata; - /** - * @return The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - * - */ public Optional>> metadata() { return Optional.ofNullable(this.metadata); } @@ -411,9 +385,19 @@ public Optional>> resourceLabels() { return Optional.ofNullable(this.resourceLabels); } + /** + * ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + * + */ @Import(name="sandboxConfig") private @Nullable Output sandboxConfig; + /** + * @return ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + * + */ public Optional> sandboxConfig() { return Optional.ofNullable(this.sandboxConfig); } @@ -486,31 +470,9 @@ public Optional>> tags() { return Optional.ofNullable(this.tags); } - /** - * A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - */ @Import(name="taints") private @Nullable Output> taints; - /** - * @return A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - */ public Optional>> taints() { return Optional.ofNullable(this.taints); } @@ -584,7 +546,7 @@ public Builder(ClusterNodePoolNodeConfigArgs defaults) { } /** - * @param bootDiskKmsKey The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + * @param bootDiskKmsKey The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption * * @return builder * @@ -595,7 +557,7 @@ public Builder bootDiskKmsKey(@Nullable Output bootDiskKmsKey) { } /** - * @param bootDiskKmsKey The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + * @param bootDiskKmsKey The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption * * @return builder * @@ -702,36 +664,15 @@ public Builder gcfsConfig(ClusterNodePoolNodeConfigGcfsConfigArgs gcfsConfig) { return gcfsConfig(Output.of(gcfsConfig)); } - /** - * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - * @return builder - * - */ public Builder guestAccelerators(@Nullable Output> guestAccelerators) { $.guestAccelerators = guestAccelerators; return this; } - /** - * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - * @return builder - * - */ public Builder guestAccelerators(List guestAccelerators) { return guestAccelerators(Output.of(guestAccelerators)); } - /** - * @param guestAccelerators List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - * @return builder - * - */ public Builder guestAccelerators(ClusterNodePoolNodeConfigGuestAcceleratorArgs... guestAccelerators) { return guestAccelerators(List.of(guestAccelerators)); } @@ -928,31 +869,11 @@ public Builder machineType(String machineType) { return machineType(Output.of(machineType)); } - /** - * @param metadata The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - * - * @return builder - * - */ public Builder metadata(@Nullable Output> metadata) { $.metadata = metadata; return this; } - /** - * @param metadata The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - * - * @return builder - * - */ public Builder metadata(Map metadata) { return metadata(Output.of(metadata)); } @@ -1113,11 +1034,25 @@ public Builder resourceLabels(Map resourceLabels) { return resourceLabels(Output.of(resourceLabels)); } + /** + * @param sandboxConfig ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + * + * @return builder + * + */ public Builder sandboxConfig(@Nullable Output sandboxConfig) { $.sandboxConfig = sandboxConfig; return this; } + /** + * @param sandboxConfig ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + * + * @return builder + * + */ public Builder sandboxConfig(ClusterNodePoolNodeConfigSandboxConfigArgs sandboxConfig) { return sandboxConfig(Output.of(sandboxConfig)); } @@ -1225,54 +1160,15 @@ public Builder tags(String... tags) { return tags(List.of(tags)); } - /** - * @param taints A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - * @return builder - * - */ public Builder taints(@Nullable Output> taints) { $.taints = taints; return this; } - /** - * @param taints A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - * @return builder - * - */ public Builder taints(List taints) { return taints(Output.of(taints)); } - /** - * @param taints A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - * @return builder - * - */ public Builder taints(ClusterNodePoolNodeConfigTaintArgs... taints) { return taints(List.of(taints)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs.java index 524046ac4d..5a05821e52 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs.java @@ -16,7 +16,7 @@ public final class ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs extends c /** * How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. * @@ -27,7 +27,7 @@ public final class ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs extends c /** * @return How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. * @@ -63,7 +63,7 @@ public Builder(ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs defaults) { /** * @param mode How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. * @@ -78,7 +78,7 @@ public Builder mode(Output mode) { /** * @param mode How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterPrivateClusterConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterPrivateClusterConfigArgs.java index 35f0b5c497..536c09aee1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterPrivateClusterConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterPrivateClusterConfigArgs.java @@ -59,21 +59,9 @@ public Optional> enablePrivateNodes() { return Optional.ofNullable(this.enablePrivateNodes); } - /** - * Controls cluster master global - * access settings. If unset, the provider will no longer manage this field and will - * not modify the previously-set value. Structure is documented below. - * - */ @Import(name="masterGlobalAccessConfig") private @Nullable Output masterGlobalAccessConfig; - /** - * @return Controls cluster master global - * access settings. If unset, the provider will no longer manage this field and will - * not modify the previously-set value. Structure is documented below. - * - */ public Optional> masterGlobalAccessConfig() { return Optional.ofNullable(this.masterGlobalAccessConfig); } @@ -250,27 +238,11 @@ public Builder enablePrivateNodes(Boolean enablePrivateNodes) { return enablePrivateNodes(Output.of(enablePrivateNodes)); } - /** - * @param masterGlobalAccessConfig Controls cluster master global - * access settings. If unset, the provider will no longer manage this field and will - * not modify the previously-set value. Structure is documented below. - * - * @return builder - * - */ public Builder masterGlobalAccessConfig(@Nullable Output masterGlobalAccessConfig) { $.masterGlobalAccessConfig = masterGlobalAccessConfig; return this; } - /** - * @param masterGlobalAccessConfig Controls cluster master global - * access settings. If unset, the provider will no longer manage this field and will - * not modify the previously-set value. Structure is documented below. - * - * @return builder - * - */ public Builder masterGlobalAccessConfig(ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs masterGlobalAccessConfig) { return masterGlobalAccessConfig(Output.of(masterGlobalAccessConfig)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterState.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterState.java index 71904cac74..f543d0449b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/ClusterState.java @@ -150,7 +150,7 @@ public Optional> clusterIpv4Cidr() { } /** - * Configuration for + * ) Configuration for * [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, * Structure is documented below. * @@ -159,7 +159,7 @@ public Optional> clusterIpv4Cidr() { private @Nullable Output clusterTelemetry; /** - * @return Configuration for + * @return ) Configuration for * [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, * Structure is documented below. * @@ -381,6 +381,7 @@ public Optional> enableKubernetesAlpha() { } /** + * ) * Whether L4ILB Subsetting is enabled for this cluster. * */ @@ -388,7 +389,8 @@ public Optional> enableKubernetesAlpha() { private @Nullable Output enableL4IlbSubsetting; /** - * @return Whether L4ILB Subsetting is enabled for this cluster. + * @return ) + * Whether L4ILB Subsetting is enabled for this cluster. * */ public Optional> enableL4IlbSubsetting() { @@ -479,14 +481,14 @@ public Optional> gatewayApiConfig() { } /** - * . Structure is documented below. + * ). Structure is documented below. * */ @Import(name="identityServiceConfig") private @Nullable Output identityServiceConfig; /** - * @return . Structure is documented below. + * @return ). Structure is documented below. * */ public Optional> identityServiceConfig() { @@ -715,30 +717,18 @@ public Optional> meshCertificates() { } /** - * The minimum version of the master. GKE - * will auto-update the master to new versions, so this does not guarantee the - * current master version--use the read-only `master_version` field to obtain that. - * If unset, the cluster's version will be set by GKE to the version of the most recent - * official release (which is not necessarily the latest version). Most users will find - * the `gcp.container.getEngineVersions` data source useful - it indicates which versions - * are available. If you intend to specify versions manually, - * [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - * describe the various acceptable formats for this field. + * The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + * current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + * set by GKE to the version of the most recent official release (which is not necessarily the latest version). * */ @Import(name="minMasterVersion") private @Nullable Output minMasterVersion; /** - * @return The minimum version of the master. GKE - * will auto-update the master to new versions, so this does not guarantee the - * current master version--use the read-only `master_version` field to obtain that. - * If unset, the cluster's version will be set by GKE to the version of the most recent - * official release (which is not necessarily the latest version). Most users will find - * the `gcp.container.getEngineVersions` data source useful - it indicates which versions - * are available. If you intend to specify versions manually, - * [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - * describe the various acceptable formats for this field. + * @return The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + * current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + * set by GKE to the version of the most recent official release (which is not necessarily the latest version). * */ public Optional> minMasterVersion() { @@ -864,22 +854,14 @@ public Optional> networkingMode() { } /** - * Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. + * The configuration of the nodepool * */ @Import(name="nodeConfig") private @Nullable Output nodeConfig; /** - * @return Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. + * @return The configuration of the nodepool * */ public Optional> nodeConfig() { @@ -967,28 +949,24 @@ public Optional>> nodePools() { } /** - * The Kubernetes version on the nodes. Must either be unset - * or set to the same value as `min_master_version` on create. Defaults to the default - * version set by GKE which is not necessarily the latest version. This only affects - * nodes in the default node pool. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions. - * To update nodes in other node pools, use the `version` attribute on the node pool. + * The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + * Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + * default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + * Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + * version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + * use the version attribute on the node pool. * */ @Import(name="nodeVersion") private @Nullable Output nodeVersion; /** - * @return The Kubernetes version on the nodes. Must either be unset - * or set to the same value as `min_master_version` on create. Defaults to the default - * version set by GKE which is not necessarily the latest version. This only affects - * nodes in the default node pool. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions. - * To update nodes in other node pools, use the `version` attribute on the node pool. + * @return The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + * Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + * default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + * Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + * version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + * use the version attribute on the node pool. * */ public Optional> nodeVersion() { @@ -1086,30 +1064,16 @@ public Optional> project() { } /** - * Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - * feature, which provide more control over automatic upgrades of your GKE clusters. - * When updating this field, GKE imposes specific version requirements. See - * [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - * for more details; the `gcp.container.getEngineVersions` datasource can provide - * the default version for a channel. Note that removing the `release_channel` - * field from your config will cause the provider to stop managing your cluster's - * release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - * channel. Structure is documented below. + * Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + * clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. * */ @Import(name="releaseChannel") private @Nullable Output releaseChannel; /** - * @return Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - * feature, which provide more control over automatic upgrades of your GKE clusters. - * When updating this field, GKE imposes specific version requirements. See - * [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - * for more details; the `gcp.container.getEngineVersions` datasource can provide - * the default version for a channel. Note that removing the `release_channel` - * field from your config will cause the provider to stop managing your cluster's - * release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - * channel. Structure is documented below. + * @return Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + * clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. * */ public Optional> releaseChannel() { @@ -1527,7 +1491,7 @@ public Builder clusterIpv4Cidr(String clusterIpv4Cidr) { } /** - * @param clusterTelemetry Configuration for + * @param clusterTelemetry ) Configuration for * [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, * Structure is documented below. * @@ -1540,7 +1504,7 @@ public Builder clusterTelemetry(@Nullable Output cl } /** - * @param clusterTelemetry Configuration for + * @param clusterTelemetry ) Configuration for * [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, * Structure is documented below. * @@ -1836,7 +1800,8 @@ public Builder enableKubernetesAlpha(Boolean enableKubernetesAlpha) { } /** - * @param enableL4IlbSubsetting Whether L4ILB Subsetting is enabled for this cluster. + * @param enableL4IlbSubsetting ) + * Whether L4ILB Subsetting is enabled for this cluster. * * @return builder * @@ -1847,7 +1812,8 @@ public Builder enableL4IlbSubsetting(@Nullable Output enableL4IlbSubset } /** - * @param enableL4IlbSubsetting Whether L4ILB Subsetting is enabled for this cluster. + * @param enableL4IlbSubsetting ) + * Whether L4ILB Subsetting is enabled for this cluster. * * @return builder * @@ -1970,7 +1936,7 @@ public Builder gatewayApiConfig(ClusterGatewayApiConfigArgs gatewayApiConfig) { } /** - * @param identityServiceConfig . Structure is documented below. + * @param identityServiceConfig ). Structure is documented below. * * @return builder * @@ -1981,7 +1947,7 @@ public Builder identityServiceConfig(@Nullable Output minMasterVersion) { } /** - * @param minMasterVersion The minimum version of the master. GKE - * will auto-update the master to new versions, so this does not guarantee the - * current master version--use the read-only `master_version` field to obtain that. - * If unset, the cluster's version will be set by GKE to the version of the most recent - * official release (which is not necessarily the latest version). Most users will find - * the `gcp.container.getEngineVersions` data source useful - it indicates which versions - * are available. If you intend to specify versions manually, - * [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - * describe the various acceptable formats for this field. + * @param minMasterVersion The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + * current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + * set by GKE to the version of the most recent official release (which is not necessarily the latest version). * * @return builder * @@ -2469,11 +2423,7 @@ public Builder networkingMode(String networkingMode) { } /** - * @param nodeConfig Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. + * @param nodeConfig The configuration of the nodepool * * @return builder * @@ -2484,11 +2434,7 @@ public Builder nodeConfig(@Nullable Output nodeConfig) { } /** - * @param nodeConfig Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. + * @param nodeConfig The configuration of the nodepool * * @return builder * @@ -2630,14 +2576,12 @@ public Builder nodePools(ClusterNodePoolArgs... nodePools) { } /** - * @param nodeVersion The Kubernetes version on the nodes. Must either be unset - * or set to the same value as `min_master_version` on create. Defaults to the default - * version set by GKE which is not necessarily the latest version. This only affects - * nodes in the default node pool. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions. - * To update nodes in other node pools, use the `version` attribute on the node pool. + * @param nodeVersion The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + * Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + * default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + * Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + * version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + * use the version attribute on the node pool. * * @return builder * @@ -2648,14 +2592,12 @@ public Builder nodeVersion(@Nullable Output nodeVersion) { } /** - * @param nodeVersion The Kubernetes version on the nodes. Must either be unset - * or set to the same value as `min_master_version` on create. Defaults to the default - * version set by GKE which is not necessarily the latest version. This only affects - * nodes in the default node pool. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions. - * To update nodes in other node pools, use the `version` attribute on the node pool. + * @param nodeVersion The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + * Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + * default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + * Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + * version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + * use the version attribute on the node pool. * * @return builder * @@ -2787,15 +2729,8 @@ public Builder project(String project) { } /** - * @param releaseChannel Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - * feature, which provide more control over automatic upgrades of your GKE clusters. - * When updating this field, GKE imposes specific version requirements. See - * [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - * for more details; the `gcp.container.getEngineVersions` datasource can provide - * the default version for a channel. Note that removing the `release_channel` - * field from your config will cause the provider to stop managing your cluster's - * release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - * channel. Structure is documented below. + * @param releaseChannel Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + * clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. * * @return builder * @@ -2806,15 +2741,8 @@ public Builder releaseChannel(@Nullable Output releas } /** - * @param releaseChannel Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - * feature, which provide more control over automatic upgrades of your GKE clusters. - * When updating this field, GKE imposes specific version requirements. See - * [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - * for more details; the `gcp.container.getEngineVersions` datasource can provide - * the default version for a channel. Note that removing the `release_channel` - * field from your config will cause the provider to stop managing your cluster's - * release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - * channel. Structure is documented below. + * @param releaseChannel Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + * clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/GetEngineVersionsArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/GetEngineVersionsArgs.java index 83b20dc7e6..06a2a56152 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/GetEngineVersionsArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/GetEngineVersionsArgs.java @@ -53,27 +53,9 @@ public Optional> project() { return Optional.ofNullable(this.project); } - /** - * If provided, the provider will only return versions - * that match the string prefix. For example, `1.11.` will match all `1.11` series - * releases. Since this is just a string match, it's recommended that you append a - * `.` after minor versions to ensure that prefixes such as `1.1` don't match - * versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - * for full details on how version strings are formatted. - * - */ @Import(name="versionPrefix") private @Nullable Output versionPrefix; - /** - * @return If provided, the provider will only return versions - * that match the string prefix. For example, `1.11.` will match all `1.11` series - * releases. Since this is just a string match, it's recommended that you append a - * `.` after minor versions to ensure that prefixes such as `1.1` don't match - * versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - * for full details on how version strings are formatted. - * - */ public Optional> versionPrefix() { return Optional.ofNullable(this.versionPrefix); } @@ -154,33 +136,11 @@ public Builder project(String project) { return project(Output.of(project)); } - /** - * @param versionPrefix If provided, the provider will only return versions - * that match the string prefix. For example, `1.11.` will match all `1.11` series - * releases. Since this is just a string match, it's recommended that you append a - * `.` after minor versions to ensure that prefixes such as `1.1` don't match - * versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - * for full details on how version strings are formatted. - * - * @return builder - * - */ public Builder versionPrefix(@Nullable Output versionPrefix) { $.versionPrefix = versionPrefix; return this; } - /** - * @param versionPrefix If provided, the provider will only return versions - * that match the string prefix. For example, `1.11.` will match all `1.11` series - * releases. Since this is just a string match, it's recommended that you append a - * `.` after minor versions to ensure that prefixes such as `1.1` don't match - * versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - * for full details on how version strings are formatted. - * - * @return builder - * - */ public Builder versionPrefix(String versionPrefix) { return versionPrefix(Output.of(versionPrefix)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/GetEngineVersionsPlainArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/GetEngineVersionsPlainArgs.java index db6fee7664..908bbbb3e1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/GetEngineVersionsPlainArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/GetEngineVersionsPlainArgs.java @@ -52,27 +52,9 @@ public Optional project() { return Optional.ofNullable(this.project); } - /** - * If provided, the provider will only return versions - * that match the string prefix. For example, `1.11.` will match all `1.11` series - * releases. Since this is just a string match, it's recommended that you append a - * `.` after minor versions to ensure that prefixes such as `1.1` don't match - * versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - * for full details on how version strings are formatted. - * - */ @Import(name="versionPrefix") private @Nullable String versionPrefix; - /** - * @return If provided, the provider will only return versions - * that match the string prefix. For example, `1.11.` will match all `1.11` series - * releases. Since this is just a string match, it's recommended that you append a - * `.` after minor versions to ensure that prefixes such as `1.1` don't match - * versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - * for full details on how version strings are formatted. - * - */ public Optional versionPrefix() { return Optional.ofNullable(this.versionPrefix); } @@ -129,17 +111,6 @@ public Builder project(@Nullable String project) { return this; } - /** - * @param versionPrefix If provided, the provider will only return versions - * that match the string prefix. For example, `1.11.` will match all `1.11` series - * releases. Since this is just a string match, it's recommended that you append a - * `.` after minor versions to ensure that prefixes such as `1.1` don't match - * versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - * for full details on how version strings are formatted. - * - * @return builder - * - */ public Builder versionPrefix(@Nullable String versionPrefix) { $.versionPrefix = versionPrefix; return this; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolState.java b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolState.java index 41d8e9bf38..a9da3a5f53 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/inputs/NodePoolState.java @@ -56,26 +56,16 @@ public Optional> cluster() { } /** - * The initial number of nodes for the pool. In - * regional or multi-zonal clusters, this is the number of nodes per zone. Changing - * this will force recreation of the resource. WARNING: Resizing your node pool manually - * may change this value in your existing cluster, which will trigger destruction - * and recreation on the next provider run (to rectify the discrepancy). If you don't - * need this value, don't set it. If you do need it, you can use a lifecycle block to - * ignore subsqeuent changes to this field. + * The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + * Changing this will force recreation of the resource. * */ @Import(name="initialNodeCount") private @Nullable Output initialNodeCount; /** - * @return The initial number of nodes for the pool. In - * regional or multi-zonal clusters, this is the number of nodes per zone. Changing - * this will force recreation of the resource. WARNING: Resizing your node pool manually - * may change this value in your existing cluster, which will trigger destruction - * and recreation on the next provider run (to rectify the discrepancy). If you don't - * need this value, don't set it. If you do need it, you can use a lifecycle block to - * ignore subsqeuent changes to this field. + * @return The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + * Changing this will force recreation of the resource. * */ public Optional> initialNodeCount() { @@ -168,16 +158,14 @@ public Optional> maxPodsPerNode() { } /** - * The name of the node pool. If left blank, the provider will - * auto-generate a unique name. + * The name of the node pool. If left blank, Terraform will auto-generate a unique name. * */ @Import(name="name") private @Nullable Output name; /** - * @return The name of the node pool. If left blank, the provider will - * auto-generate a unique name. + * @return The name of the node pool. If left blank, Terraform will auto-generate a unique name. * */ public Optional> name() { @@ -334,24 +322,22 @@ public Optional> upgradeSettings() { } /** - * The Kubernetes version for the nodes in this pool. Note that if this field - * and `auto_upgrade` are both specified, they will fight each other for what the node version should - * be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + * The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + * will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + * can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + * versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + * versions in a Terraform-compatible way. * */ @Import(name="version") private @Nullable Output version; /** - * @return The Kubernetes version for the nodes in this pool. Note that if this field - * and `auto_upgrade` are both specified, they will fight each other for what the node version should - * be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + * @return The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + * will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + * can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + * versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + * versions in a Terraform-compatible way. * */ public Optional> version() { @@ -445,13 +431,8 @@ public Builder cluster(String cluster) { } /** - * @param initialNodeCount The initial number of nodes for the pool. In - * regional or multi-zonal clusters, this is the number of nodes per zone. Changing - * this will force recreation of the resource. WARNING: Resizing your node pool manually - * may change this value in your existing cluster, which will trigger destruction - * and recreation on the next provider run (to rectify the discrepancy). If you don't - * need this value, don't set it. If you do need it, you can use a lifecycle block to - * ignore subsqeuent changes to this field. + * @param initialNodeCount The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + * Changing this will force recreation of the resource. * * @return builder * @@ -462,13 +443,8 @@ public Builder initialNodeCount(@Nullable Output initialNodeCount) { } /** - * @param initialNodeCount The initial number of nodes for the pool. In - * regional or multi-zonal clusters, this is the number of nodes per zone. Changing - * this will force recreation of the resource. WARNING: Resizing your node pool manually - * may change this value in your existing cluster, which will trigger destruction - * and recreation on the next provider run (to rectify the discrepancy). If you don't - * need this value, don't set it. If you do need it, you can use a lifecycle block to - * ignore subsqeuent changes to this field. + * @param initialNodeCount The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + * Changing this will force recreation of the resource. * * @return builder * @@ -613,8 +589,7 @@ public Builder maxPodsPerNode(Integer maxPodsPerNode) { } /** - * @param name The name of the node pool. If left blank, the provider will - * auto-generate a unique name. + * @param name The name of the node pool. If left blank, Terraform will auto-generate a unique name. * * @return builder * @@ -625,8 +600,7 @@ public Builder name(@Nullable Output name) { } /** - * @param name The name of the node pool. If left blank, the provider will - * auto-generate a unique name. + * @param name The name of the node pool. If left blank, Terraform will auto-generate a unique name. * * @return builder * @@ -848,12 +822,11 @@ public Builder upgradeSettings(NodePoolUpgradeSettingsArgs upgradeSettings) { } /** - * @param version The Kubernetes version for the nodes in this pool. Note that if this field - * and `auto_upgrade` are both specified, they will fight each other for what the node version should - * be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + * @param version The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + * will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + * can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + * versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + * versions in a Terraform-compatible way. * * @return builder * @@ -864,12 +837,11 @@ public Builder version(@Nullable Output version) { } /** - * @param version The Kubernetes version for the nodes in this pool. Note that if this field - * and `auto_upgrade` are both specified, they will fight each other for what the node version should - * be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + * @param version The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + * will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + * can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + * versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + * versions in a Terraform-compatible way. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterAddonsConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterAddonsConfig.java index 0967eb32f7..d6f0405cd0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterAddonsConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterAddonsConfig.java @@ -75,13 +75,13 @@ public final class ClusterAddonsConfig { */ private @Nullable ClusterAddonsConfigHttpLoadBalancing httpLoadBalancing; /** - * @return . + * @return ). * Structure is documented below. * */ private @Nullable ClusterAddonsConfigIstioConfig istioConfig; /** - * @return . + * @return ). * Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. * */ @@ -168,7 +168,7 @@ public Optional httpLoadBalancing() { return Optional.ofNullable(this.httpLoadBalancing); } /** - * @return . + * @return ). * Structure is documented below. * */ @@ -176,7 +176,7 @@ public Optional istioConfig() { return Optional.ofNullable(this.istioConfig); } /** - * @return . + * @return ). * Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.java index 218df6e141..94d5ea3096 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterClusterAutoscalingAutoProvisioningDefaults.java @@ -42,7 +42,8 @@ public final class ClusterClusterAutoscalingAutoProvisioningDefaults { */ private @Nullable ClusterClusterAutoscalingAutoProvisioningDefaultsManagement management; /** - * @return Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the + * @return ) + * Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the * specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such * as "Intel Haswell" or "Intel Sandy Bridge". * @@ -106,7 +107,8 @@ public Optional man return Optional.ofNullable(this.management); } /** - * @return Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the + * @return ) + * Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the * specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such * as "Intel Haswell" or "Intel Sandy Bridge". * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfig.java index ddc90114ac..a4bc827b18 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfig.java @@ -27,7 +27,7 @@ @CustomType public final class ClusterNodeConfig { /** - * @return The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + * @return The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption * */ private @Nullable String bootDiskKmsKey; @@ -58,11 +58,6 @@ public final class ClusterNodeConfig { * */ private @Nullable ClusterNodeConfigGcfsConfig gcfsConfig; - /** - * @return List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - */ private @Nullable List guestAccelerators; /** * @return Google Virtual NIC (gVNIC) is a virtual network interface. @@ -116,14 +111,6 @@ public final class ClusterNodeConfig { * */ private @Nullable String machineType; - /** - * @return The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - * - */ private @Nullable Map metadata; /** * @return Minimum CPU platform to be used by this instance. @@ -164,6 +151,11 @@ public final class ClusterNodeConfig { * */ private @Nullable Map resourceLabels; + /** + * @return ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + * + */ private @Nullable ClusterNodeConfigSandboxConfig sandboxConfig; /** * @return The service account to be used by the Node VMs. @@ -189,17 +181,6 @@ public final class ClusterNodeConfig { * */ private @Nullable List tags; - /** - * @return A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - */ private @Nullable List taints; /** * @return Metadata configuration to expose to workloads on the node pool. @@ -210,7 +191,7 @@ public final class ClusterNodeConfig { private ClusterNodeConfig() {} /** - * @return The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + * @return The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption * */ public Optional bootDiskKmsKey() { @@ -251,11 +232,6 @@ public Optional ephemeralStorageConfig( public Optional gcfsConfig() { return Optional.ofNullable(this.gcfsConfig); } - /** - * @return List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - */ public List guestAccelerators() { return this.guestAccelerators == null ? List.of() : this.guestAccelerators; } @@ -327,14 +303,6 @@ public Optional loggingVariant() { public Optional machineType() { return Optional.ofNullable(this.machineType); } - /** - * @return The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - * - */ public Map metadata() { return this.metadata == null ? Map.of() : this.metadata; } @@ -389,6 +357,11 @@ public Optional reservationAffinity() { public Map resourceLabels() { return this.resourceLabels == null ? Map.of() : this.resourceLabels; } + /** + * @return ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + * + */ public Optional sandboxConfig() { return Optional.ofNullable(this.sandboxConfig); } @@ -424,17 +397,6 @@ public Optional spot() { public List tags() { return this.tags == null ? List.of() : this.tags; } - /** - * @return A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - */ public List taints() { return this.taints == null ? List.of() : this.taints; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfigWorkloadMetadataConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfigWorkloadMetadataConfig.java index b384527116..84520b9c8c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfigWorkloadMetadataConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodeConfigWorkloadMetadataConfig.java @@ -12,7 +12,7 @@ public final class ClusterNodeConfigWorkloadMetadataConfig { /** * @return How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. * @@ -23,7 +23,7 @@ private ClusterNodeConfigWorkloadMetadataConfig() {} /** * @return How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePool.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePool.java index 5d2160a3ab..3ab9a87e41 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePool.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePool.java @@ -45,20 +45,7 @@ public final class ClusterNodePool { */ private @Nullable String name; private @Nullable String namePrefix; - /** - * @return Configuration for - * [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - * - */ private @Nullable ClusterNodePoolNetworkConfig networkConfig; - /** - * @return Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. - * - */ private @Nullable ClusterNodePoolNodeConfig nodeConfig; private @Nullable Integer nodeCount; /** @@ -120,22 +107,9 @@ public Optional name() { public Optional namePrefix() { return Optional.ofNullable(this.namePrefix); } - /** - * @return Configuration for - * [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - * - */ public Optional networkConfig() { return Optional.ofNullable(this.networkConfig); } - /** - * @return Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `node_pool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. - * - */ public Optional nodeConfig() { return Optional.ofNullable(this.nodeConfig); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNetworkConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNetworkConfig.java index 7c225e5413..f4f09059c3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNetworkConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNetworkConfig.java @@ -12,10 +12,6 @@ @CustomType public final class ClusterNodePoolNetworkConfig { - /** - * @return Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. - * - */ private @Nullable Boolean createPodRange; /** * @return Enables the private cluster feature, @@ -25,22 +21,10 @@ public final class ClusterNodePoolNetworkConfig { * */ private @Nullable Boolean enablePrivateNodes; - /** - * @return The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - * - */ private @Nullable String podIpv4CidrBlock; - /** - * @return The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. - * - */ private @Nullable String podRange; private ClusterNodePoolNetworkConfig() {} - /** - * @return Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. - * - */ public Optional createPodRange() { return Optional.ofNullable(this.createPodRange); } @@ -54,17 +38,9 @@ public Optional createPodRange() { public Optional enablePrivateNodes() { return Optional.ofNullable(this.enablePrivateNodes); } - /** - * @return The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - * - */ public Optional podIpv4CidrBlock() { return Optional.ofNullable(this.podIpv4CidrBlock); } - /** - * @return The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. - * - */ public Optional podRange() { return Optional.ofNullable(this.podRange); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfig.java index 6d45913eed..56ce84d5aa 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfig.java @@ -27,7 +27,7 @@ @CustomType public final class ClusterNodePoolNodeConfig { /** - * @return The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + * @return The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption * */ private @Nullable String bootDiskKmsKey; @@ -58,11 +58,6 @@ public final class ClusterNodePoolNodeConfig { * */ private @Nullable ClusterNodePoolNodeConfigGcfsConfig gcfsConfig; - /** - * @return List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - */ private @Nullable List guestAccelerators; /** * @return Google Virtual NIC (gVNIC) is a virtual network interface. @@ -116,14 +111,6 @@ public final class ClusterNodePoolNodeConfig { * */ private @Nullable String machineType; - /** - * @return The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - * - */ private @Nullable Map metadata; /** * @return Minimum CPU platform to be used by this instance. @@ -164,6 +151,11 @@ public final class ClusterNodePoolNodeConfig { * */ private @Nullable Map resourceLabels; + /** + * @return ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + * + */ private @Nullable ClusterNodePoolNodeConfigSandboxConfig sandboxConfig; /** * @return The service account to be used by the Node VMs. @@ -189,17 +181,6 @@ public final class ClusterNodePoolNodeConfig { * */ private @Nullable List tags; - /** - * @return A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - */ private @Nullable List taints; /** * @return Metadata configuration to expose to workloads on the node pool. @@ -210,7 +191,7 @@ public final class ClusterNodePoolNodeConfig { private ClusterNodePoolNodeConfig() {} /** - * @return The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: <https://cloud.google.com/compute/docs/disks/customer-managed-encryption> + * @return The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption * */ public Optional bootDiskKmsKey() { @@ -251,11 +232,6 @@ public Optional ephemeralStorag public Optional gcfsConfig() { return Optional.ofNullable(this.gcfsConfig); } - /** - * @return List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - * - */ public List guestAccelerators() { return this.guestAccelerators == null ? List.of() : this.guestAccelerators; } @@ -327,14 +303,6 @@ public Optional loggingVariant() { public Optional machineType() { return Optional.ofNullable(this.machineType); } - /** - * @return The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - * - */ public Map metadata() { return this.metadata == null ? Map.of() : this.metadata; } @@ -389,6 +357,11 @@ public Optional reservationAffinit public Map resourceLabels() { return this.resourceLabels == null ? Map.of() : this.resourceLabels; } + /** + * @return ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + * + */ public Optional sandboxConfig() { return Optional.ofNullable(this.sandboxConfig); } @@ -424,17 +397,6 @@ public Optional spot() { public List tags() { return this.tags == null ? List.of() : this.tags; } - /** - * @return A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - * - */ public List taints() { return this.taints == null ? List.of() : this.taints; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfigWorkloadMetadataConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfigWorkloadMetadataConfig.java index 6e42cf64ef..c35e155542 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfigWorkloadMetadataConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterNodePoolNodeConfigWorkloadMetadataConfig.java @@ -12,7 +12,7 @@ public final class ClusterNodePoolNodeConfigWorkloadMetadataConfig { /** * @return How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. * @@ -23,7 +23,7 @@ private ClusterNodePoolNodeConfigWorkloadMetadataConfig() {} /** * @return How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterPrivateClusterConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterPrivateClusterConfig.java index 88d937d583..86e2e50f3c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterPrivateClusterConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/container/outputs/ClusterPrivateClusterConfig.java @@ -29,12 +29,6 @@ public final class ClusterPrivateClusterConfig { * */ private @Nullable Boolean enablePrivateNodes; - /** - * @return Controls cluster master global - * access settings. If unset, the provider will no longer manage this field and will - * not modify the previously-set value. Structure is documented below. - * - */ private @Nullable ClusterPrivateClusterConfigMasterGlobalAccessConfig masterGlobalAccessConfig; /** * @return The IP range in CIDR notation to use for @@ -89,12 +83,6 @@ public Optional enablePrivateEndpoint() { public Optional enablePrivateNodes() { return Optional.ofNullable(this.enablePrivateNodes); } - /** - * @return Controls cluster master global - * access settings. If unset, the provider will no longer manage this field and will - * not modify the previously-set value. Structure is documented below. - * - */ public Optional masterGlobalAccessConfig() { return Optional.ofNullable(this.masterGlobalAccessConfig); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/EntryGroup.java b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/EntryGroup.java index 14a6d5333a..8e84642864 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/EntryGroup.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/EntryGroup.java @@ -76,8 +76,8 @@ * * public static void stack(Context ctx) { * var basicEntryGroup = new EntryGroup("basicEntryGroup", EntryGroupArgs.builder() - * .description("example entry group") - * .displayName("entry group") + * .description("entry group created by Terraform") + * .displayName("terraform entry group") * .entryGroupId("my_group") * .build()); * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTag.java b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTag.java index cebca8f928..54f0b24bf8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTag.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTag.java @@ -16,14 +16,6 @@ import javax.annotation.Nullable; /** - * Denotes one policy tag in a taxonomy. - * - * To get more information about PolicyTag, see: - * - * * [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies.policyTags) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/data-catalog/docs) - * * ## Example Usage * ### Data Catalog Taxonomies Policy Tag Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTagIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTagIamBinding.java index 52d2b35718..3e9b5c7aaf 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTagIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTagIamBinding.java @@ -17,129 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - * - * * `gcp.datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - * * `gcp.datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - * * `gcp.datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - * - * > **Note:** `gcp.datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.PolicyTagIamBinding` and `gcp.datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_data\_catalog\_policy\_tag\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.datacatalog.PolicyTagIamPolicy; - * import com.pulumi.gcp.datacatalog.PolicyTagIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new PolicyTagIamPolicy("policy", PolicyTagIamPolicyArgs.builder() - * .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_data\_catalog\_policy\_tag\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.datacatalog.PolicyTagIamBinding; - * import com.pulumi.gcp.datacatalog.PolicyTagIamBindingArgs; - * 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 binding = new PolicyTagIamBinding("binding", PolicyTagIamBindingArgs.builder() - * .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name()) - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_data\_catalog\_policy\_tag\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.datacatalog.PolicyTagIamMember; - * import com.pulumi.gcp.datacatalog.PolicyTagIamMemberArgs; - * 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 member = new PolicyTagIamMember("member", PolicyTagIamMemberArgs.builder() - * .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name()) - * .role("roles/viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTagIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTagIamMember.java index 91d977c5f0..308a7dda27 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTagIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTagIamMember.java @@ -16,129 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - * - * * `gcp.datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - * * `gcp.datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - * * `gcp.datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - * - * > **Note:** `gcp.datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.PolicyTagIamBinding` and `gcp.datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_data\_catalog\_policy\_tag\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.datacatalog.PolicyTagIamPolicy; - * import com.pulumi.gcp.datacatalog.PolicyTagIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new PolicyTagIamPolicy("policy", PolicyTagIamPolicyArgs.builder() - * .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_data\_catalog\_policy\_tag\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.datacatalog.PolicyTagIamBinding; - * import com.pulumi.gcp.datacatalog.PolicyTagIamBindingArgs; - * 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 binding = new PolicyTagIamBinding("binding", PolicyTagIamBindingArgs.builder() - * .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name()) - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_data\_catalog\_policy\_tag\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.datacatalog.PolicyTagIamMember; - * import com.pulumi.gcp.datacatalog.PolicyTagIamMemberArgs; - * 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 member = new PolicyTagIamMember("member", PolicyTagIamMemberArgs.builder() - * .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name()) - * .role("roles/viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTagIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTagIamPolicy.java index a5d0b89834..abf5d49a1c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTagIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/PolicyTagIamPolicy.java @@ -14,129 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - * - * * `gcp.datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - * * `gcp.datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - * * `gcp.datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - * - * > **Note:** `gcp.datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.PolicyTagIamBinding` and `gcp.datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_data\_catalog\_policy\_tag\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.datacatalog.PolicyTagIamPolicy; - * import com.pulumi.gcp.datacatalog.PolicyTagIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new PolicyTagIamPolicy("policy", PolicyTagIamPolicyArgs.builder() - * .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_data\_catalog\_policy\_tag\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.datacatalog.PolicyTagIamBinding; - * import com.pulumi.gcp.datacatalog.PolicyTagIamBindingArgs; - * 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 binding = new PolicyTagIamBinding("binding", PolicyTagIamBindingArgs.builder() - * .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name()) - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_data\_catalog\_policy\_tag\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.datacatalog.PolicyTagIamMember; - * import com.pulumi.gcp.datacatalog.PolicyTagIamMemberArgs; - * 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 member = new PolicyTagIamMember("member", PolicyTagIamMemberArgs.builder() - * .policyTag(google_data_catalog_policy_tag.basic_policy_tag().name()) - * .role("roles/viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/Taxonomy.java b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/Taxonomy.java index 76f832ccb8..1db41a6c12 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/Taxonomy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/Taxonomy.java @@ -16,14 +16,6 @@ import javax.annotation.Nullable; /** - * A collection of policy tags that classify data along a common axis. - * - * To get more information about Taxonomy, see: - * - * * [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/data-catalog/docs) - * * ## Example Usage * ### Data Catalog Taxonomy Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/TaxonomyIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/TaxonomyIamBinding.java index bf3460ba6e..deadbe10aa 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/TaxonomyIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/TaxonomyIamBinding.java @@ -17,129 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - * - * * `gcp.datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - * * `gcp.datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - * * `gcp.datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - * - * > **Note:** `gcp.datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.TaxonomyIamBinding` and `gcp.datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_data\_catalog\_taxonomy\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.datacatalog.TaxonomyIamPolicy; - * import com.pulumi.gcp.datacatalog.TaxonomyIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new TaxonomyIamPolicy("policy", TaxonomyIamPolicyArgs.builder() - * .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_data\_catalog\_taxonomy\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.datacatalog.TaxonomyIamBinding; - * import com.pulumi.gcp.datacatalog.TaxonomyIamBindingArgs; - * 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 binding = new TaxonomyIamBinding("binding", TaxonomyIamBindingArgs.builder() - * .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name()) - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_data\_catalog\_taxonomy\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.datacatalog.TaxonomyIamMember; - * import com.pulumi.gcp.datacatalog.TaxonomyIamMemberArgs; - * 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 member = new TaxonomyIamMember("member", TaxonomyIamMemberArgs.builder() - * .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name()) - * .role("roles/viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/TaxonomyIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/TaxonomyIamMember.java index dd975d3690..57525cf1c5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/TaxonomyIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/TaxonomyIamMember.java @@ -16,129 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - * - * * `gcp.datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - * * `gcp.datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - * * `gcp.datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - * - * > **Note:** `gcp.datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.TaxonomyIamBinding` and `gcp.datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_data\_catalog\_taxonomy\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.datacatalog.TaxonomyIamPolicy; - * import com.pulumi.gcp.datacatalog.TaxonomyIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new TaxonomyIamPolicy("policy", TaxonomyIamPolicyArgs.builder() - * .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_data\_catalog\_taxonomy\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.datacatalog.TaxonomyIamBinding; - * import com.pulumi.gcp.datacatalog.TaxonomyIamBindingArgs; - * 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 binding = new TaxonomyIamBinding("binding", TaxonomyIamBindingArgs.builder() - * .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name()) - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_data\_catalog\_taxonomy\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.datacatalog.TaxonomyIamMember; - * import com.pulumi.gcp.datacatalog.TaxonomyIamMemberArgs; - * 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 member = new TaxonomyIamMember("member", TaxonomyIamMemberArgs.builder() - * .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name()) - * .role("roles/viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/TaxonomyIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/TaxonomyIamPolicy.java index d210449368..b8ab4dc54d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/TaxonomyIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datacatalog/TaxonomyIamPolicy.java @@ -14,129 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - * - * * `gcp.datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - * * `gcp.datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - * * `gcp.datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - * - * > **Note:** `gcp.datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.TaxonomyIamBinding` and `gcp.datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_data\_catalog\_taxonomy\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.datacatalog.TaxonomyIamPolicy; - * import com.pulumi.gcp.datacatalog.TaxonomyIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new TaxonomyIamPolicy("policy", TaxonomyIamPolicyArgs.builder() - * .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_data\_catalog\_taxonomy\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.datacatalog.TaxonomyIamBinding; - * import com.pulumi.gcp.datacatalog.TaxonomyIamBindingArgs; - * 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 binding = new TaxonomyIamBinding("binding", TaxonomyIamBindingArgs.builder() - * .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name()) - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_data\_catalog\_taxonomy\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.datacatalog.TaxonomyIamMember; - * import com.pulumi.gcp.datacatalog.TaxonomyIamMemberArgs; - * 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 member = new TaxonomyIamMember("member", TaxonomyIamMemberArgs.builder() - * .taxonomy(google_data_catalog_taxonomy.basic_taxonomy().name()) - * .role("roles/viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJob.java b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJob.java index da0b9e87cb..eb37f08d22 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJob.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJob.java @@ -58,8 +58,7 @@ public Output jobId() { /** * User labels to be specified for the job. Keys and values * should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - * page. **Note**: This field is marked as deprecated as the API does not currently - * support adding labels. + * page. * **NOTE**: Google-provided Dataflow templates often provide default labels * that begin with `goog-dataflow-provided`. Unless explicitly set in config, these * labels will be ignored to prevent diffs on re-apply. @@ -71,8 +70,7 @@ public Output jobId() { /** * @return User labels to be specified for the job. Keys and values * should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - * page. **Note**: This field is marked as deprecated as the API does not currently - * support adding labels. + * page. * **NOTE**: Google-provided Dataflow templates often provide default labels * that begin with `goog-dataflow-provided`. Unless explicitly set in config, these * labels will be ignored to prevent diffs on re-apply. @@ -95,19 +93,9 @@ public Output>> labels() { public Output name() { return this.name; } - /** - * One of "drain" or "cancel". Specifies behavior of - * deletion during `pulumi destroy`. See above note. - * - */ @Export(name="onDelete", type=String.class, parameters={}) private Output onDelete; - /** - * @return One of "drain" or "cancel". Specifies behavior of - * deletion during `pulumi destroy`. See above note. - * - */ public Output> onDelete() { return Codegen.optional(this.onDelete); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJobArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJobArgs.java index 459643e0d1..30efd318d3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJobArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/FlexTemplateJobArgs.java @@ -38,8 +38,7 @@ public Output containerSpecGcsPath() { /** * User labels to be specified for the job. Keys and values * should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - * page. **Note**: This field is marked as deprecated as the API does not currently - * support adding labels. + * page. * **NOTE**: Google-provided Dataflow templates often provide default labels * that begin with `goog-dataflow-provided`. Unless explicitly set in config, these * labels will be ignored to prevent diffs on re-apply. @@ -51,8 +50,7 @@ public Output containerSpecGcsPath() { /** * @return User labels to be specified for the job. Keys and values * should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - * page. **Note**: This field is marked as deprecated as the API does not currently - * support adding labels. + * page. * **NOTE**: Google-provided Dataflow templates often provide default labels * that begin with `goog-dataflow-provided`. Unless explicitly set in config, these * labels will be ignored to prevent diffs on re-apply. @@ -77,19 +75,9 @@ public Optional> name() { return Optional.ofNullable(this.name); } - /** - * One of "drain" or "cancel". Specifies behavior of - * deletion during `pulumi destroy`. See above note. - * - */ @Import(name="onDelete") private @Nullable Output onDelete; - /** - * @return One of "drain" or "cancel". Specifies behavior of - * deletion during `pulumi destroy`. See above note. - * - */ public Optional> onDelete() { return Optional.ofNullable(this.onDelete); } @@ -221,8 +209,7 @@ public Builder containerSpecGcsPath(String containerSpecGcsPath) { /** * @param labels User labels to be specified for the job. Keys and values * should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - * page. **Note**: This field is marked as deprecated as the API does not currently - * support adding labels. + * page. * **NOTE**: Google-provided Dataflow templates often provide default labels * that begin with `goog-dataflow-provided`. Unless explicitly set in config, these * labels will be ignored to prevent diffs on re-apply. @@ -238,8 +225,7 @@ public Builder labels(@Nullable Output> labels) { /** * @param labels User labels to be specified for the job. Keys and values * should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - * page. **Note**: This field is marked as deprecated as the API does not currently - * support adding labels. + * page. * **NOTE**: Google-provided Dataflow templates often provide default labels * that begin with `goog-dataflow-provided`. Unless explicitly set in config, these * labels will be ignored to prevent diffs on re-apply. @@ -272,25 +258,11 @@ public Builder name(String name) { return name(Output.of(name)); } - /** - * @param onDelete One of "drain" or "cancel". Specifies behavior of - * deletion during `pulumi destroy`. See above note. - * - * @return builder - * - */ public Builder onDelete(@Nullable Output onDelete) { $.onDelete = onDelete; return this; } - /** - * @param onDelete One of "drain" or "cancel". Specifies behavior of - * deletion during `pulumi destroy`. See above note. - * - * @return builder - * - */ public Builder onDelete(String onDelete) { return onDelete(Output.of(onDelete)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/Job.java b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/Job.java index 54e600f174..2630bf62f9 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/Job.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/Job.java @@ -178,14 +178,14 @@ public Output> network() { return Codegen.optional(this.network); } /** - * One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + * One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. * */ @Export(name="onDelete", type=String.class, parameters={}) private Output onDelete; /** - * @return One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + * @return One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. * */ public Output> onDelete() { @@ -248,14 +248,18 @@ public Output> serviceAccountEmail() { return Codegen.optional(this.serviceAccountEmail); } /** - * If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + * If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + * terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + * different, e.g. by embedding a release ID or by using a random_id. * */ @Export(name="skipWaitOnJobTermination", type=Boolean.class, parameters={}) private Output skipWaitOnJobTermination; /** - * @return If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + * @return If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + * terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + * different, e.g. by embedding a release ID or by using a random_id. * */ public Output> skipWaitOnJobTermination() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/JobArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/JobArgs.java index d72b0244f2..0272f82492 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/JobArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/JobArgs.java @@ -162,14 +162,14 @@ public Optional> network() { } /** - * One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + * One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. * */ @Import(name="onDelete") private @Nullable Output onDelete; /** - * @return One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + * @return One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. * */ public Optional> onDelete() { @@ -237,14 +237,18 @@ public Optional> serviceAccountEmail() { } /** - * If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + * If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + * terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + * different, e.g. by embedding a release ID or by using a random_id. * */ @Import(name="skipWaitOnJobTermination") private @Nullable Output skipWaitOnJobTermination; /** - * @return If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + * @return If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + * terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + * different, e.g. by embedding a release ID or by using a random_id. * */ public Optional> skipWaitOnJobTermination() { @@ -575,7 +579,7 @@ public Builder network(String network) { } /** - * @param onDelete One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + * @param onDelete One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. * * @return builder * @@ -586,7 +590,7 @@ public Builder onDelete(@Nullable Output onDelete) { } /** - * @param onDelete One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + * @param onDelete One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. * * @return builder * @@ -680,7 +684,9 @@ public Builder serviceAccountEmail(String serviceAccountEmail) { } /** - * @param skipWaitOnJobTermination If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + * @param skipWaitOnJobTermination If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + * terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + * different, e.g. by embedding a release ID or by using a random_id. * * @return builder * @@ -691,7 +697,9 @@ public Builder skipWaitOnJobTermination(@Nullable Output skipWaitOnJobT } /** - * @param skipWaitOnJobTermination If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + * @param skipWaitOnJobTermination If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + * terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + * different, e.g. by embedding a release ID or by using a random_id. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/FlexTemplateJobState.java b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/FlexTemplateJobState.java index 6d96467733..e69b0ed158 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/FlexTemplateJobState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/FlexTemplateJobState.java @@ -53,8 +53,7 @@ public Optional> jobId() { /** * User labels to be specified for the job. Keys and values * should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - * page. **Note**: This field is marked as deprecated as the API does not currently - * support adding labels. + * page. * **NOTE**: Google-provided Dataflow templates often provide default labels * that begin with `goog-dataflow-provided`. Unless explicitly set in config, these * labels will be ignored to prevent diffs on re-apply. @@ -66,8 +65,7 @@ public Optional> jobId() { /** * @return User labels to be specified for the job. Keys and values * should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - * page. **Note**: This field is marked as deprecated as the API does not currently - * support adding labels. + * page. * **NOTE**: Google-provided Dataflow templates often provide default labels * that begin with `goog-dataflow-provided`. Unless explicitly set in config, these * labels will be ignored to prevent diffs on re-apply. @@ -92,19 +90,9 @@ public Optional> name() { return Optional.ofNullable(this.name); } - /** - * One of "drain" or "cancel". Specifies behavior of - * deletion during `pulumi destroy`. See above note. - * - */ @Import(name="onDelete") private @Nullable Output onDelete; - /** - * @return One of "drain" or "cancel". Specifies behavior of - * deletion during `pulumi destroy`. See above note. - * - */ public Optional> onDelete() { return Optional.ofNullable(this.onDelete); } @@ -274,8 +262,7 @@ public Builder jobId(String jobId) { /** * @param labels User labels to be specified for the job. Keys and values * should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - * page. **Note**: This field is marked as deprecated as the API does not currently - * support adding labels. + * page. * **NOTE**: Google-provided Dataflow templates often provide default labels * that begin with `goog-dataflow-provided`. Unless explicitly set in config, these * labels will be ignored to prevent diffs on re-apply. @@ -291,8 +278,7 @@ public Builder labels(@Nullable Output> labels) { /** * @param labels User labels to be specified for the job. Keys and values * should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - * page. **Note**: This field is marked as deprecated as the API does not currently - * support adding labels. + * page. * **NOTE**: Google-provided Dataflow templates often provide default labels * that begin with `goog-dataflow-provided`. Unless explicitly set in config, these * labels will be ignored to prevent diffs on re-apply. @@ -325,25 +311,11 @@ public Builder name(String name) { return name(Output.of(name)); } - /** - * @param onDelete One of "drain" or "cancel". Specifies behavior of - * deletion during `pulumi destroy`. See above note. - * - * @return builder - * - */ public Builder onDelete(@Nullable Output onDelete) { $.onDelete = onDelete; return this; } - /** - * @param onDelete One of "drain" or "cancel". Specifies behavior of - * deletion during `pulumi destroy`. See above note. - * - * @return builder - * - */ public Builder onDelete(String onDelete) { return onDelete(Output.of(onDelete)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/JobState.java b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/JobState.java index aefe02ae16..8b2ed1b554 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/JobState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataflow/inputs/JobState.java @@ -177,14 +177,14 @@ public Optional> network() { } /** - * One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + * One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. * */ @Import(name="onDelete") private @Nullable Output onDelete; /** - * @return One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + * @return One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. * */ public Optional> onDelete() { @@ -252,14 +252,18 @@ public Optional> serviceAccountEmail() { } /** - * If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + * If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + * terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + * different, e.g. by embedding a release ID or by using a random_id. * */ @Import(name="skipWaitOnJobTermination") private @Nullable Output skipWaitOnJobTermination; /** - * @return If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + * @return If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + * terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + * different, e.g. by embedding a release ID or by using a random_id. * */ public Optional> skipWaitOnJobTermination() { @@ -644,7 +648,7 @@ public Builder network(String network) { } /** - * @param onDelete One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + * @param onDelete One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. * * @return builder * @@ -655,7 +659,7 @@ public Builder onDelete(@Nullable Output onDelete) { } /** - * @param onDelete One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + * @param onDelete One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. * * @return builder * @@ -749,7 +753,9 @@ public Builder serviceAccountEmail(String serviceAccountEmail) { } /** - * @param skipWaitOnJobTermination If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + * @param skipWaitOnJobTermination If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + * terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + * different, e.g. by embedding a release ID or by using a random_id. * * @return builder * @@ -760,7 +766,9 @@ public Builder skipWaitOnJobTermination(@Nullable Output skipWaitOnJobT } /** - * @param skipWaitOnJobTermination If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + * @param skipWaitOnJobTermination If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + * terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + * different, e.g. by embedding a release ID or by using a random_id. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datafusion/Instance.java b/sdk/java/src/main/java/com/pulumi/gcp/datafusion/Instance.java index 5caa90398c..dfc5141d56 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datafusion/Instance.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datafusion/Instance.java @@ -26,7 +26,7 @@ * * * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * * How-to Guides - * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) * * ## Example Usage * ### Data Fusion Instance Basic @@ -625,12 +625,12 @@ public Output serviceEndpoint() { } /** * The current state of this Data Fusion instance. - * * CREATING: Instance is being created - * * RUNNING: Instance is running and ready for requests - * * FAILED: Instance creation failed - * * DELETING: Instance is being deleted - * * UPGRADING: Instance is being upgraded - * * RESTARTING: Instance is being restarted + * - CREATING: Instance is being created + * - RUNNING: Instance is running and ready for requests + * - FAILED: Instance creation failed + * - DELETING: Instance is being deleted + * - UPGRADING: Instance is being upgraded + * - RESTARTING: Instance is being restarted * */ @Export(name="state", type=String.class, parameters={}) @@ -638,12 +638,12 @@ public Output serviceEndpoint() { /** * @return The current state of this Data Fusion instance. - * * CREATING: Instance is being created - * * RUNNING: Instance is running and ready for requests - * * FAILED: Instance creation failed - * * DELETING: Instance is being deleted - * * UPGRADING: Instance is being upgraded - * * RESTARTING: Instance is being restarted + * - CREATING: Instance is being created + * - RUNNING: Instance is running and ready for requests + * - FAILED: Instance creation failed + * - DELETING: Instance is being deleted + * - UPGRADING: Instance is being upgraded + * - RESTARTING: Instance is being restarted * */ public Output state() { @@ -680,12 +680,12 @@ public Output tenantProjectId() { /** * Represents the type of Data Fusion instance. Each type is configured with * the default settings for processing and memory. - * * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + * - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines * using point and click UI. However, there are certain limitations, such as fewer number * of concurrent pipelines, no support for streaming pipelines, etc. - * * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + * - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features * available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + * - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but * with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration * pipelines at low cost. * Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -697,12 +697,12 @@ public Output tenantProjectId() { /** * @return Represents the type of Data Fusion instance. Each type is configured with * the default settings for processing and memory. - * * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + * - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines * using point and click UI. However, there are certain limitations, such as fewer number * of concurrent pipelines, no support for streaming pipelines, etc. - * * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + * - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features * available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + * - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but * with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration * pipelines at low cost. * Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datafusion/InstanceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/datafusion/InstanceArgs.java index fb2e550db1..c3039ad09b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datafusion/InstanceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datafusion/InstanceArgs.java @@ -262,12 +262,12 @@ public Optional> region() { /** * Represents the type of Data Fusion instance. Each type is configured with * the default settings for processing and memory. - * * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + * - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines * using point and click UI. However, there are certain limitations, such as fewer number * of concurrent pipelines, no support for streaming pipelines, etc. - * * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + * - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features * available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + * - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but * with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration * pipelines at low cost. * Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -279,12 +279,12 @@ public Optional> region() { /** * @return Represents the type of Data Fusion instance. Each type is configured with * the default settings for processing and memory. - * * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + * - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines * using point and click UI. However, there are certain limitations, such as fewer number * of concurrent pipelines, no support for streaming pipelines, etc. - * * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + * - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features * available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + * - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but * with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration * pipelines at low cost. * Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -697,12 +697,12 @@ public Builder region(String region) { /** * @param type Represents the type of Data Fusion instance. Each type is configured with * the default settings for processing and memory. - * * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + * - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines * using point and click UI. However, there are certain limitations, such as fewer number * of concurrent pipelines, no support for streaming pipelines, etc. - * * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + * - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features * available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + * - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but * with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration * pipelines at low cost. * Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -718,12 +718,12 @@ public Builder type(Output type) { /** * @param type Represents the type of Data Fusion instance. Each type is configured with * the default settings for processing and memory. - * * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + * - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines * using point and click UI. However, there are certain limitations, such as fewer number * of concurrent pipelines, no support for streaming pipelines, etc. - * * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + * - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features * available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + * - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but * with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration * pipelines at low cost. * Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datafusion/inputs/InstanceState.java b/sdk/java/src/main/java/com/pulumi/gcp/datafusion/inputs/InstanceState.java index 42cf8444d0..b0a178cea6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datafusion/inputs/InstanceState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datafusion/inputs/InstanceState.java @@ -359,12 +359,12 @@ public Optional> serviceEndpoint() { /** * The current state of this Data Fusion instance. - * * CREATING: Instance is being created - * * RUNNING: Instance is running and ready for requests - * * FAILED: Instance creation failed - * * DELETING: Instance is being deleted - * * UPGRADING: Instance is being upgraded - * * RESTARTING: Instance is being restarted + * - CREATING: Instance is being created + * - RUNNING: Instance is running and ready for requests + * - FAILED: Instance creation failed + * - DELETING: Instance is being deleted + * - UPGRADING: Instance is being upgraded + * - RESTARTING: Instance is being restarted * */ @Import(name="state") @@ -372,12 +372,12 @@ public Optional> serviceEndpoint() { /** * @return The current state of this Data Fusion instance. - * * CREATING: Instance is being created - * * RUNNING: Instance is running and ready for requests - * * FAILED: Instance creation failed - * * DELETING: Instance is being deleted - * * UPGRADING: Instance is being upgraded - * * RESTARTING: Instance is being restarted + * - CREATING: Instance is being created + * - RUNNING: Instance is running and ready for requests + * - FAILED: Instance creation failed + * - DELETING: Instance is being deleted + * - UPGRADING: Instance is being upgraded + * - RESTARTING: Instance is being restarted * */ public Optional> state() { @@ -417,12 +417,12 @@ public Optional> tenantProjectId() { /** * Represents the type of Data Fusion instance. Each type is configured with * the default settings for processing and memory. - * * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + * - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines * using point and click UI. However, there are certain limitations, such as fewer number * of concurrent pipelines, no support for streaming pipelines, etc. - * * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + * - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features * available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + * - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but * with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration * pipelines at low cost. * Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -434,12 +434,12 @@ public Optional> tenantProjectId() { /** * @return Represents the type of Data Fusion instance. Each type is configured with * the default settings for processing and memory. - * * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + * - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines * using point and click UI. However, there are certain limitations, such as fewer number * of concurrent pipelines, no support for streaming pipelines, etc. - * * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + * - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features * available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + * - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but * with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration * pipelines at low cost. * Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -1010,12 +1010,12 @@ public Builder serviceEndpoint(String serviceEndpoint) { /** * @param state The current state of this Data Fusion instance. - * * CREATING: Instance is being created - * * RUNNING: Instance is running and ready for requests - * * FAILED: Instance creation failed - * * DELETING: Instance is being deleted - * * UPGRADING: Instance is being upgraded - * * RESTARTING: Instance is being restarted + * - CREATING: Instance is being created + * - RUNNING: Instance is running and ready for requests + * - FAILED: Instance creation failed + * - DELETING: Instance is being deleted + * - UPGRADING: Instance is being upgraded + * - RESTARTING: Instance is being restarted * * @return builder * @@ -1027,12 +1027,12 @@ public Builder state(@Nullable Output state) { /** * @param state The current state of this Data Fusion instance. - * * CREATING: Instance is being created - * * RUNNING: Instance is running and ready for requests - * * FAILED: Instance creation failed - * * DELETING: Instance is being deleted - * * UPGRADING: Instance is being upgraded - * * RESTARTING: Instance is being restarted + * - CREATING: Instance is being created + * - RUNNING: Instance is running and ready for requests + * - FAILED: Instance creation failed + * - DELETING: Instance is being deleted + * - UPGRADING: Instance is being upgraded + * - RESTARTING: Instance is being restarted * * @return builder * @@ -1086,12 +1086,12 @@ public Builder tenantProjectId(String tenantProjectId) { /** * @param type Represents the type of Data Fusion instance. Each type is configured with * the default settings for processing and memory. - * * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + * - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines * using point and click UI. However, there are certain limitations, such as fewer number * of concurrent pipelines, no support for streaming pipelines, etc. - * * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + * - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features * available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + * - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but * with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration * pipelines at low cost. * Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -1107,12 +1107,12 @@ public Builder type(@Nullable Output type) { /** * @param type Represents the type of Data Fusion instance. Each type is configured with * the default settings for processing and memory. - * * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + * - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines * using point and click UI. However, there are certain limitations, such as fewer number * of concurrent pipelines, no support for streaming pipelines, etc. - * * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + * - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features * available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + * - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but * with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration * pipelines at low cost. * Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionJobTriggerInspectJobActionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionJobTriggerInspectJobActionArgs.java index 8e6f1d97a0..99b26eca93 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionJobTriggerInspectJobActionArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/inputs/PreventionJobTriggerInspectJobActionArgs.java @@ -6,6 +6,8 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; import com.pulumi.gcp.dataloss.inputs.PreventionJobTriggerInspectJobActionPubSubArgs; +import com.pulumi.gcp.dataloss.inputs.PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs; +import com.pulumi.gcp.dataloss.inputs.PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs; import com.pulumi.gcp.dataloss.inputs.PreventionJobTriggerInspectJobActionSaveFindingsArgs; import java.util.Objects; import java.util.Optional; @@ -34,7 +36,37 @@ public Optional> pubSub() } /** - * Schedule for triggered jobs + * Publish findings of a DlpJob to Data Catalog. + * + */ + @Import(name="publishFindingsToCloudDataCatalog") + private @Nullable Output publishFindingsToCloudDataCatalog; + + /** + * @return Publish findings of a DlpJob to Data Catalog. + * + */ + public Optional> publishFindingsToCloudDataCatalog() { + return Optional.ofNullable(this.publishFindingsToCloudDataCatalog); + } + + /** + * Publish the result summary of a DlpJob to the Cloud Security Command Center. + * + */ + @Import(name="publishSummaryToCscc") + private @Nullable Output publishSummaryToCscc; + + /** + * @return Publish the result summary of a DlpJob to the Cloud Security Command Center. + * + */ + public Optional> publishSummaryToCscc() { + return Optional.ofNullable(this.publishSummaryToCscc); + } + + /** + * If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk * Structure is documented below. * */ @@ -42,7 +74,7 @@ public Optional> pubSub() private @Nullable Output saveFindings; /** - * @return Schedule for triggered jobs + * @return If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk * Structure is documented below. * */ @@ -54,6 +86,8 @@ private PreventionJobTriggerInspectJobActionArgs() {} private PreventionJobTriggerInspectJobActionArgs(PreventionJobTriggerInspectJobActionArgs $) { this.pubSub = $.pubSub; + this.publishFindingsToCloudDataCatalog = $.publishFindingsToCloudDataCatalog; + this.publishSummaryToCscc = $.publishSummaryToCscc; this.saveFindings = $.saveFindings; } @@ -99,7 +133,49 @@ public Builder pubSub(PreventionJobTriggerInspectJobActionPubSubArgs pubSub) { } /** - * @param saveFindings Schedule for triggered jobs + * @param publishFindingsToCloudDataCatalog Publish findings of a DlpJob to Data Catalog. + * + * @return builder + * + */ + public Builder publishFindingsToCloudDataCatalog(@Nullable Output publishFindingsToCloudDataCatalog) { + $.publishFindingsToCloudDataCatalog = publishFindingsToCloudDataCatalog; + return this; + } + + /** + * @param publishFindingsToCloudDataCatalog Publish findings of a DlpJob to Data Catalog. + * + * @return builder + * + */ + public Builder publishFindingsToCloudDataCatalog(PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs publishFindingsToCloudDataCatalog) { + return publishFindingsToCloudDataCatalog(Output.of(publishFindingsToCloudDataCatalog)); + } + + /** + * @param publishSummaryToCscc Publish the result summary of a DlpJob to the Cloud Security Command Center. + * + * @return builder + * + */ + public Builder publishSummaryToCscc(@Nullable Output publishSummaryToCscc) { + $.publishSummaryToCscc = publishSummaryToCscc; + return this; + } + + /** + * @param publishSummaryToCscc Publish the result summary of a DlpJob to the Cloud Security Command Center. + * + * @return builder + * + */ + public Builder publishSummaryToCscc(PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs publishSummaryToCscc) { + return publishSummaryToCscc(Output.of(publishSummaryToCscc)); + } + + /** + * @param saveFindings If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk * Structure is documented below. * * @return builder @@ -111,7 +187,7 @@ public Builder saveFindings(@Nullable Output pubSub() { return Optional.ofNullable(this.pubSub); } /** - * @return Schedule for triggered jobs + * @return Publish findings of a DlpJob to Data Catalog. + * + */ + public Optional publishFindingsToCloudDataCatalog() { + return Optional.ofNullable(this.publishFindingsToCloudDataCatalog); + } + /** + * @return Publish the result summary of a DlpJob to the Cloud Security Command Center. + * + */ + public Optional publishSummaryToCscc() { + return Optional.ofNullable(this.publishSummaryToCscc); + } + /** + * @return If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk * Structure is documented below. * */ @@ -53,11 +79,15 @@ public static Builder builder(PreventionJobTriggerInspectJobAction defaults) { @CustomType.Builder public static final class Builder { private @Nullable PreventionJobTriggerInspectJobActionPubSub pubSub; + private @Nullable PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog publishFindingsToCloudDataCatalog; + private @Nullable PreventionJobTriggerInspectJobActionPublishSummaryToCscc publishSummaryToCscc; private @Nullable PreventionJobTriggerInspectJobActionSaveFindings saveFindings; public Builder() {} public Builder(PreventionJobTriggerInspectJobAction defaults) { Objects.requireNonNull(defaults); this.pubSub = defaults.pubSub; + this.publishFindingsToCloudDataCatalog = defaults.publishFindingsToCloudDataCatalog; + this.publishSummaryToCscc = defaults.publishSummaryToCscc; this.saveFindings = defaults.saveFindings; } @@ -67,6 +97,16 @@ public Builder pubSub(@Nullable PreventionJobTriggerInspectJobActionPubSub pubSu return this; } @CustomType.Setter + public Builder publishFindingsToCloudDataCatalog(@Nullable PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog publishFindingsToCloudDataCatalog) { + this.publishFindingsToCloudDataCatalog = publishFindingsToCloudDataCatalog; + return this; + } + @CustomType.Setter + public Builder publishSummaryToCscc(@Nullable PreventionJobTriggerInspectJobActionPublishSummaryToCscc publishSummaryToCscc) { + this.publishSummaryToCscc = publishSummaryToCscc; + return this; + } + @CustomType.Setter public Builder saveFindings(@Nullable PreventionJobTriggerInspectJobActionSaveFindings saveFindings) { this.saveFindings = saveFindings; return this; @@ -74,6 +114,8 @@ public Builder saveFindings(@Nullable PreventionJobTriggerInspectJobActionSaveFi public PreventionJobTriggerInspectJobAction build() { final var o = new PreventionJobTriggerInspectJobAction(); o.pubSub = pubSub; + o.publishFindingsToCloudDataCatalog = publishFindingsToCloudDataCatalog; + o.publishSummaryToCscc = publishSummaryToCscc; o.saveFindings = saveFindings; return o; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog.java new file mode 100644 index 0000000000..8c1b0f4833 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog.java @@ -0,0 +1,32 @@ +// *** 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.dataloss.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.util.Objects; + +@CustomType +public final class PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog { + private PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog() {} + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + public Builder() {} + public Builder(PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog defaults) { + Objects.requireNonNull(defaults); + } + + public PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog build() { + final var o = new PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog(); + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionJobTriggerInspectJobActionPublishSummaryToCscc.java b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionJobTriggerInspectJobActionPublishSummaryToCscc.java new file mode 100644 index 0000000000..49c01ef66a --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataloss/outputs/PreventionJobTriggerInspectJobActionPublishSummaryToCscc.java @@ -0,0 +1,32 @@ +// *** 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.dataloss.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.util.Objects; + +@CustomType +public final class PreventionJobTriggerInspectJobActionPublishSummaryToCscc { + private PreventionJobTriggerInspectJobActionPublishSummaryToCscc() {} + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(PreventionJobTriggerInspectJobActionPublishSummaryToCscc defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + public Builder() {} + public Builder(PreventionJobTriggerInspectJobActionPublishSummaryToCscc defaults) { + Objects.requireNonNull(defaults); + } + + public PreventionJobTriggerInspectJobActionPublishSummaryToCscc build() { + final var o = new PreventionJobTriggerInspectJobActionPublishSummaryToCscc(); + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMBinding.java index 8442c777ea..5d2f5256bb 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMBinding.java @@ -196,35 +196,15 @@ public Output etag() { public Output> members() { return this.members; } - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Export(name="project", type=String.class, parameters={}) private Output project; - /** - * @return The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Output project() { return this.project; } - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Export(name="region", type=String.class, parameters={}) private Output region; - /** - * @return The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Output region() { return this.region; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMBindingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMBindingArgs.java index 402af02d74..f3def0d6cd 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMBindingArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMBindingArgs.java @@ -46,36 +46,16 @@ public Output> members() { return this.members; } - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="region") private @Nullable Output region; - /** - * @return The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> region() { return Optional.ofNullable(this.region); } @@ -171,48 +151,20 @@ public Builder members(String... members) { return members(List.of(members)); } - /** - * @param project The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } - /** - * @param region The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(@Nullable Output region) { $.region = region; return this; } - /** - * @param region The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(String region) { return region(Output.of(region)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMMember.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMMember.java index c20873afed..b8aa2ab3cf 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMMember.java @@ -195,35 +195,15 @@ public Output etag() { public Output member() { return this.member; } - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Export(name="project", type=String.class, parameters={}) private Output project; - /** - * @return The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Output project() { return this.project; } - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Export(name="region", type=String.class, parameters={}) private Output region; - /** - * @return The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Output region() { return this.region; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMMemberArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMMemberArgs.java index 7c0b480f67..0c8851109e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMMemberArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMMemberArgs.java @@ -45,36 +45,16 @@ public Output member() { return this.member; } - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="region") private @Nullable Output region; - /** - * @return The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> region() { return Optional.ofNullable(this.region); } @@ -166,48 +146,20 @@ public Builder member(String member) { return member(Output.of(member)); } - /** - * @param project The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } - /** - * @param region The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(@Nullable Output region) { $.region = region; return this; } - /** - * @param region The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(String region) { return region(Output.of(region)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMPolicy.java index bc855f493f..d9fe40ab8c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMPolicy.java @@ -195,35 +195,15 @@ public Output etag() { public Output policyData() { return this.policyData; } - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Export(name="project", type=String.class, parameters={}) private Output project; - /** - * @return The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Output project() { return this.project; } - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Export(name="region", type=String.class, parameters={}) private Output region; - /** - * @return The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Output region() { return this.region; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMPolicyArgs.java index e85dfb43c1..c57302b99c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMPolicyArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/ClusterIAMPolicyArgs.java @@ -45,36 +45,16 @@ public Output policyData() { return this.policyData; } - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="region") private @Nullable Output region; - /** - * @return The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> region() { return Optional.ofNullable(this.region); } @@ -148,48 +128,20 @@ public Builder policyData(String policyData) { return policyData(Output.of(policyData)); } - /** - * @param project The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } - /** - * @param region The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(@Nullable Output region) { $.region = region; return this; } - /** - * @param region The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(String region) { return region(Output.of(region)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMBinding.java index d1d1bc899c..05be94d152 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMBinding.java @@ -188,35 +188,15 @@ public Output jobId() { public Output> members() { return this.members; } - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Export(name="project", type=String.class, parameters={}) private Output project; - /** - * @return The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Output project() { return this.project; } - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Export(name="region", type=String.class, parameters={}) private Output region; - /** - * @return The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Output region() { return this.region; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMBindingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMBindingArgs.java index 2d59a4e916..cdd30d2e00 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMBindingArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMBindingArgs.java @@ -38,36 +38,16 @@ public Output> members() { return this.members; } - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="region") private @Nullable Output region; - /** - * @return The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> region() { return Optional.ofNullable(this.region); } @@ -151,48 +131,20 @@ public Builder members(String... members) { return members(List.of(members)); } - /** - * @param project The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } - /** - * @param region The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(@Nullable Output region) { $.region = region; return this; } - /** - * @param region The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(String region) { return region(Output.of(region)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMMember.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMMember.java index bedf93d7a5..d31125de4b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMMember.java @@ -187,35 +187,15 @@ public Output jobId() { public Output member() { return this.member; } - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Export(name="project", type=String.class, parameters={}) private Output project; - /** - * @return The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Output project() { return this.project; } - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Export(name="region", type=String.class, parameters={}) private Output region; - /** - * @return The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Output region() { return this.region; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMMemberArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMMemberArgs.java index db552bc698..4453d973a0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMMemberArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMMemberArgs.java @@ -37,36 +37,16 @@ public Output member() { return this.member; } - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="region") private @Nullable Output region; - /** - * @return The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> region() { return Optional.ofNullable(this.region); } @@ -146,48 +126,20 @@ public Builder member(String member) { return member(Output.of(member)); } - /** - * @param project The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } - /** - * @param region The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(@Nullable Output region) { $.region = region; return this; } - /** - * @param region The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(String region) { return region(Output.of(region)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMPolicy.java index d19e2878ff..f8bbb1bc28 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMPolicy.java @@ -187,35 +187,15 @@ public Output jobId() { public Output policyData() { return this.policyData; } - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Export(name="project", type=String.class, parameters={}) private Output project; - /** - * @return The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Output project() { return this.project; } - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Export(name="region", type=String.class, parameters={}) private Output region; - /** - * @return The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Output region() { return this.region; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMPolicyArgs.java index 2a9b7d26eb..8e56ad3e00 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMPolicyArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/JobIAMPolicyArgs.java @@ -37,36 +37,16 @@ public Output policyData() { return this.policyData; } - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="region") private @Nullable Output region; - /** - * @return The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> region() { return Optional.ofNullable(this.region); } @@ -128,48 +108,20 @@ public Builder policyData(String policyData) { return policyData(Output.of(policyData)); } - /** - * @param project The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } - /** - * @param region The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(@Nullable Output region) { $.region = region; return this; } - /** - * @param region The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(String region) { return region(Output.of(region)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigArgs.java index d924f7dbfa..3b7501c97a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigArgs.java @@ -5,6 +5,8 @@ import com.pulumi.core.Output; import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs; +import com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigGceClusterConfigReservationAffinityArgs; import com.pulumi.gcp.dataproc.inputs.ClusterClusterConfigGceClusterConfigShieldedInstanceConfigArgs; import java.lang.Boolean; import java.lang.String; @@ -78,6 +80,36 @@ public Optional> network() { return Optional.ofNullable(this.network); } + /** + * Node Group Affinity for sole-tenant clusters. + * + */ + @Import(name="nodeGroupAffinity") + private @Nullable Output nodeGroupAffinity; + + /** + * @return Node Group Affinity for sole-tenant clusters. + * + */ + public Optional> nodeGroupAffinity() { + return Optional.ofNullable(this.nodeGroupAffinity); + } + + /** + * Reservation Affinity for consuming zonal reservation. + * + */ + @Import(name="reservationAffinity") + private @Nullable Output reservationAffinity; + + /** + * @return Reservation Affinity for consuming zonal reservation. + * + */ + public Optional> reservationAffinity() { + return Optional.ofNullable(this.reservationAffinity); + } + /** * The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -200,6 +232,8 @@ private ClusterClusterConfigGceClusterConfigArgs(ClusterClusterConfigGceClusterC this.internalIpOnly = $.internalIpOnly; this.metadata = $.metadata; this.network = $.network; + this.nodeGroupAffinity = $.nodeGroupAffinity; + this.reservationAffinity = $.reservationAffinity; this.serviceAccount = $.serviceAccount; this.serviceAccountScopes = $.serviceAccountScopes; this.shieldedInstanceConfig = $.shieldedInstanceConfig; @@ -303,6 +337,48 @@ public Builder network(String network) { return network(Output.of(network)); } + /** + * @param nodeGroupAffinity Node Group Affinity for sole-tenant clusters. + * + * @return builder + * + */ + public Builder nodeGroupAffinity(@Nullable Output nodeGroupAffinity) { + $.nodeGroupAffinity = nodeGroupAffinity; + return this; + } + + /** + * @param nodeGroupAffinity Node Group Affinity for sole-tenant clusters. + * + * @return builder + * + */ + public Builder nodeGroupAffinity(ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs nodeGroupAffinity) { + return nodeGroupAffinity(Output.of(nodeGroupAffinity)); + } + + /** + * @param reservationAffinity Reservation Affinity for consuming zonal reservation. + * + * @return builder + * + */ + public Builder reservationAffinity(@Nullable Output reservationAffinity) { + $.reservationAffinity = reservationAffinity; + return this; + } + + /** + * @param reservationAffinity Reservation Affinity for consuming zonal reservation. + * + * @return builder + * + */ + public Builder reservationAffinity(ClusterClusterConfigGceClusterConfigReservationAffinityArgs reservationAffinity) { + return reservationAffinity(Output.of(reservationAffinity)); + } + /** * @param serviceAccount The service account to be used by the Node VMs. * If not specified, the "default" service account is used. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs.java new file mode 100644 index 0000000000..2265701e67 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs.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.dataproc.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; + + +public final class ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs Empty = new ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs(); + + /** + * The URI of a sole-tenant node group resource that the cluster will be created on. + * + */ + @Import(name="nodeGroupUri", required=true) + private Output nodeGroupUri; + + /** + * @return The URI of a sole-tenant node group resource that the cluster will be created on. + * + */ + public Output nodeGroupUri() { + return this.nodeGroupUri; + } + + private ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs() {} + + private ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs(ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs $) { + this.nodeGroupUri = $.nodeGroupUri; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs $; + + public Builder() { + $ = new ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs(); + } + + public Builder(ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs defaults) { + $ = new ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param nodeGroupUri The URI of a sole-tenant node group resource that the cluster will be created on. + * + * @return builder + * + */ + public Builder nodeGroupUri(Output nodeGroupUri) { + $.nodeGroupUri = nodeGroupUri; + return this; + } + + /** + * @param nodeGroupUri The URI of a sole-tenant node group resource that the cluster will be created on. + * + * @return builder + * + */ + public Builder nodeGroupUri(String nodeGroupUri) { + return nodeGroupUri(Output.of(nodeGroupUri)); + } + + public ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs build() { + $.nodeGroupUri = Objects.requireNonNull($.nodeGroupUri, "expected parameter 'nodeGroupUri' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigReservationAffinityArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigReservationAffinityArgs.java new file mode 100644 index 0000000000..26c127b73d --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigGceClusterConfigReservationAffinityArgs.java @@ -0,0 +1,168 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.dataproc.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class ClusterClusterConfigGceClusterConfigReservationAffinityArgs extends com.pulumi.resources.ResourceArgs { + + public static final ClusterClusterConfigGceClusterConfigReservationAffinityArgs Empty = new ClusterClusterConfigGceClusterConfigReservationAffinityArgs(); + + /** + * Corresponds to the type of reservation consumption. + * + */ + @Import(name="consumeReservationType") + private @Nullable Output consumeReservationType; + + /** + * @return Corresponds to the type of reservation consumption. + * + */ + public Optional> consumeReservationType() { + return Optional.ofNullable(this.consumeReservationType); + } + + /** + * Corresponds to the label key of reservation resource. + * + */ + @Import(name="key") + private @Nullable Output key; + + /** + * @return Corresponds to the label key of reservation resource. + * + */ + public Optional> key() { + return Optional.ofNullable(this.key); + } + + /** + * Corresponds to the label values of reservation resource. + * + */ + @Import(name="values") + private @Nullable Output> values; + + /** + * @return Corresponds to the label values of reservation resource. + * + */ + public Optional>> values() { + return Optional.ofNullable(this.values); + } + + private ClusterClusterConfigGceClusterConfigReservationAffinityArgs() {} + + private ClusterClusterConfigGceClusterConfigReservationAffinityArgs(ClusterClusterConfigGceClusterConfigReservationAffinityArgs $) { + this.consumeReservationType = $.consumeReservationType; + this.key = $.key; + this.values = $.values; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(ClusterClusterConfigGceClusterConfigReservationAffinityArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private ClusterClusterConfigGceClusterConfigReservationAffinityArgs $; + + public Builder() { + $ = new ClusterClusterConfigGceClusterConfigReservationAffinityArgs(); + } + + public Builder(ClusterClusterConfigGceClusterConfigReservationAffinityArgs defaults) { + $ = new ClusterClusterConfigGceClusterConfigReservationAffinityArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param consumeReservationType Corresponds to the type of reservation consumption. + * + * @return builder + * + */ + public Builder consumeReservationType(@Nullable Output consumeReservationType) { + $.consumeReservationType = consumeReservationType; + return this; + } + + /** + * @param consumeReservationType Corresponds to the type of reservation consumption. + * + * @return builder + * + */ + public Builder consumeReservationType(String consumeReservationType) { + return consumeReservationType(Output.of(consumeReservationType)); + } + + /** + * @param key Corresponds to the label key of reservation resource. + * + * @return builder + * + */ + public Builder key(@Nullable Output key) { + $.key = key; + return this; + } + + /** + * @param key Corresponds to the label key of reservation resource. + * + * @return builder + * + */ + public Builder key(String key) { + return key(Output.of(key)); + } + + /** + * @param values Corresponds to the label values of reservation resource. + * + * @return builder + * + */ + public Builder values(@Nullable Output> values) { + $.values = values; + return this; + } + + /** + * @param values Corresponds to the label values of reservation resource. + * + * @return builder + * + */ + public Builder values(List values) { + return values(Output.of(values)); + } + + /** + * @param values Corresponds to the label values of reservation resource. + * + * @return builder + * + */ + public Builder values(String... values) { + return values(List.of(values)); + } + + public ClusterClusterConfigGceClusterConfigReservationAffinityArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigPreemptibleWorkerConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigPreemptibleWorkerConfigArgs.java index 59e4c51122..72bff6fb6a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigPreemptibleWorkerConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterClusterConfigPreemptibleWorkerConfigArgs.java @@ -63,6 +63,7 @@ public Optional> numInstances() { * * PREEMPTIBILITY_UNSPECIFIED * * NON_PREEMPTIBLE * * PREEMPTIBLE + * * SPOT * */ @Import(name="preemptibility") @@ -74,6 +75,7 @@ public Optional> numInstances() { * * PREEMPTIBILITY_UNSPECIFIED * * NON_PREEMPTIBLE * * PREEMPTIBLE + * * SPOT * */ public Optional> preemptibility() { @@ -170,6 +172,7 @@ public Builder numInstances(Integer numInstances) { * * PREEMPTIBILITY_UNSPECIFIED * * NON_PREEMPTIBLE * * PREEMPTIBLE + * * SPOT * * @return builder * @@ -185,6 +188,7 @@ public Builder preemptibility(@Nullable Output preemptibility) { * * PREEMPTIBILITY_UNSPECIFIED * * NON_PREEMPTIBLE * * PREEMPTIBLE + * * SPOT * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterIAMBindingState.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterIAMBindingState.java index c722c24730..8c1403996e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterIAMBindingState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterIAMBindingState.java @@ -61,36 +61,16 @@ public Optional>> members() { return Optional.ofNullable(this.members); } - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="region") private @Nullable Output region; - /** - * @return The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> region() { return Optional.ofNullable(this.region); } @@ -208,48 +188,20 @@ public Builder members(String... members) { return members(List.of(members)); } - /** - * @param project The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } - /** - * @param region The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(@Nullable Output region) { $.region = region; return this; } - /** - * @param region The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(String region) { return region(Output.of(region)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterIAMMemberState.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterIAMMemberState.java index 347ded1dab..fe6d1848f2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterIAMMemberState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterIAMMemberState.java @@ -60,36 +60,16 @@ public Optional> member() { return Optional.ofNullable(this.member); } - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="region") private @Nullable Output region; - /** - * @return The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> region() { return Optional.ofNullable(this.region); } @@ -203,48 +183,20 @@ public Builder member(String member) { return member(Output.of(member)); } - /** - * @param project The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } - /** - * @param region The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(@Nullable Output region) { $.region = region; return this; } - /** - * @param region The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(String region) { return region(Output.of(region)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterIAMPolicyState.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterIAMPolicyState.java index 6719f6177f..788d3b8437 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterIAMPolicyState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/ClusterIAMPolicyState.java @@ -60,36 +60,16 @@ public Optional> policyData() { return Optional.ofNullable(this.policyData); } - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="region") private @Nullable Output region; - /** - * @return The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> region() { return Optional.ofNullable(this.region); } @@ -185,48 +165,20 @@ public Builder policyData(String policyData) { return policyData(Output.of(policyData)); } - /** - * @param project The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } - /** - * @param region The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(@Nullable Output region) { $.region = region; return this; } - /** - * @param region The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(String region) { return region(Output.of(region)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/JobIAMBindingState.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/JobIAMBindingState.java index e2aa01e11f..fb5daf7560 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/JobIAMBindingState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/JobIAMBindingState.java @@ -53,36 +53,16 @@ public Optional>> members() { return Optional.ofNullable(this.members); } - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="region") private @Nullable Output region; - /** - * @return The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> region() { return Optional.ofNullable(this.region); } @@ -188,48 +168,20 @@ public Builder members(String... members) { return members(List.of(members)); } - /** - * @param project The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } - /** - * @param region The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(@Nullable Output region) { $.region = region; return this; } - /** - * @param region The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(String region) { return region(Output.of(region)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/JobIAMMemberState.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/JobIAMMemberState.java index d8d01a8797..6a34f5a088 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/JobIAMMemberState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/JobIAMMemberState.java @@ -52,36 +52,16 @@ public Optional> member() { return Optional.ofNullable(this.member); } - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="region") private @Nullable Output region; - /** - * @return The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> region() { return Optional.ofNullable(this.region); } @@ -183,48 +163,20 @@ public Builder member(String member) { return member(Output.of(member)); } - /** - * @param project The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } - /** - * @param region The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(@Nullable Output region) { $.region = region; return this; } - /** - * @param region The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(String region) { return region(Output.of(region)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/JobIAMPolicyState.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/JobIAMPolicyState.java index cc842793e9..ed6cf626c0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/JobIAMPolicyState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/inputs/JobIAMPolicyState.java @@ -52,36 +52,16 @@ public Optional> policyData() { return Optional.ofNullable(this.policyData); } - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="project") private @Nullable Output project; - /** - * @return The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> project() { return Optional.ofNullable(this.project); } - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ @Import(name="region") private @Nullable Output region; - /** - * @return The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - */ public Optional> region() { return Optional.ofNullable(this.region); } @@ -165,48 +145,20 @@ public Builder policyData(String policyData) { return policyData(Output.of(policyData)); } - /** - * @param project The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(@Nullable Output project) { $.project = project; return this; } - /** - * @param project The project in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder project(String project) { return project(Output.of(project)); } - /** - * @param region The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(@Nullable Output region) { $.region = region; return this; } - /** - * @param region The region in which the job belongs. If it - * is not provided, the provider will use a default. - * - * @return builder - * - */ public Builder region(String region) { return region(Output.of(region)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfig.java index aef522b161..93ae88ddc0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfig.java @@ -4,6 +4,8 @@ package com.pulumi.gcp.dataproc.outputs; import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.dataproc.outputs.ClusterClusterConfigGceClusterConfigNodeGroupAffinity; +import com.pulumi.gcp.dataproc.outputs.ClusterClusterConfigGceClusterConfigReservationAffinity; import com.pulumi.gcp.dataproc.outputs.ClusterClusterConfigGceClusterConfigShieldedInstanceConfig; import java.lang.Boolean; import java.lang.String; @@ -37,6 +39,16 @@ public final class ClusterClusterConfigGceClusterConfig { * */ private @Nullable String network; + /** + * @return Node Group Affinity for sole-tenant clusters. + * + */ + private @Nullable ClusterClusterConfigGceClusterConfigNodeGroupAffinity nodeGroupAffinity; + /** + * @return Reservation Affinity for consuming zonal reservation. + * + */ + private @Nullable ClusterClusterConfigGceClusterConfigReservationAffinity reservationAffinity; /** * @return The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -110,6 +122,20 @@ public Map metadata() { public Optional network() { return Optional.ofNullable(this.network); } + /** + * @return Node Group Affinity for sole-tenant clusters. + * + */ + public Optional nodeGroupAffinity() { + return Optional.ofNullable(this.nodeGroupAffinity); + } + /** + * @return Reservation Affinity for consuming zonal reservation. + * + */ + public Optional reservationAffinity() { + return Optional.ofNullable(this.reservationAffinity); + } /** * @return The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -178,6 +204,8 @@ public static final class Builder { private @Nullable Boolean internalIpOnly; private @Nullable Map metadata; private @Nullable String network; + private @Nullable ClusterClusterConfigGceClusterConfigNodeGroupAffinity nodeGroupAffinity; + private @Nullable ClusterClusterConfigGceClusterConfigReservationAffinity reservationAffinity; private @Nullable String serviceAccount; private @Nullable List serviceAccountScopes; private @Nullable ClusterClusterConfigGceClusterConfigShieldedInstanceConfig shieldedInstanceConfig; @@ -190,6 +218,8 @@ public Builder(ClusterClusterConfigGceClusterConfig defaults) { this.internalIpOnly = defaults.internalIpOnly; this.metadata = defaults.metadata; this.network = defaults.network; + this.nodeGroupAffinity = defaults.nodeGroupAffinity; + this.reservationAffinity = defaults.reservationAffinity; this.serviceAccount = defaults.serviceAccount; this.serviceAccountScopes = defaults.serviceAccountScopes; this.shieldedInstanceConfig = defaults.shieldedInstanceConfig; @@ -214,6 +244,16 @@ public Builder network(@Nullable String network) { return this; } @CustomType.Setter + public Builder nodeGroupAffinity(@Nullable ClusterClusterConfigGceClusterConfigNodeGroupAffinity nodeGroupAffinity) { + this.nodeGroupAffinity = nodeGroupAffinity; + return this; + } + @CustomType.Setter + public Builder reservationAffinity(@Nullable ClusterClusterConfigGceClusterConfigReservationAffinity reservationAffinity) { + this.reservationAffinity = reservationAffinity; + return this; + } + @CustomType.Setter public Builder serviceAccount(@Nullable String serviceAccount) { this.serviceAccount = serviceAccount; return this; @@ -254,6 +294,8 @@ public ClusterClusterConfigGceClusterConfig build() { o.internalIpOnly = internalIpOnly; o.metadata = metadata; o.network = network; + o.nodeGroupAffinity = nodeGroupAffinity; + o.reservationAffinity = reservationAffinity; o.serviceAccount = serviceAccount; o.serviceAccountScopes = serviceAccountScopes; o.shieldedInstanceConfig = shieldedInstanceConfig; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinity.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinity.java new file mode 100644 index 0000000000..fe965e21f5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfigNodeGroupAffinity.java @@ -0,0 +1,54 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.dataproc.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class ClusterClusterConfigGceClusterConfigNodeGroupAffinity { + /** + * @return The URI of a sole-tenant node group resource that the cluster will be created on. + * + */ + private String nodeGroupUri; + + private ClusterClusterConfigGceClusterConfigNodeGroupAffinity() {} + /** + * @return The URI of a sole-tenant node group resource that the cluster will be created on. + * + */ + public String nodeGroupUri() { + return this.nodeGroupUri; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterClusterConfigGceClusterConfigNodeGroupAffinity defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String nodeGroupUri; + public Builder() {} + public Builder(ClusterClusterConfigGceClusterConfigNodeGroupAffinity defaults) { + Objects.requireNonNull(defaults); + this.nodeGroupUri = defaults.nodeGroupUri; + } + + @CustomType.Setter + public Builder nodeGroupUri(String nodeGroupUri) { + this.nodeGroupUri = Objects.requireNonNull(nodeGroupUri); + return this; + } + public ClusterClusterConfigGceClusterConfigNodeGroupAffinity build() { + final var o = new ClusterClusterConfigGceClusterConfigNodeGroupAffinity(); + o.nodeGroupUri = nodeGroupUri; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfigReservationAffinity.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfigReservationAffinity.java new file mode 100644 index 0000000000..5ce9710e2e --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigGceClusterConfigReservationAffinity.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.dataproc.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class ClusterClusterConfigGceClusterConfigReservationAffinity { + /** + * @return Corresponds to the type of reservation consumption. + * + */ + private @Nullable String consumeReservationType; + /** + * @return Corresponds to the label key of reservation resource. + * + */ + private @Nullable String key; + /** + * @return Corresponds to the label values of reservation resource. + * + */ + private @Nullable List values; + + private ClusterClusterConfigGceClusterConfigReservationAffinity() {} + /** + * @return Corresponds to the type of reservation consumption. + * + */ + public Optional consumeReservationType() { + return Optional.ofNullable(this.consumeReservationType); + } + /** + * @return Corresponds to the label key of reservation resource. + * + */ + public Optional key() { + return Optional.ofNullable(this.key); + } + /** + * @return Corresponds to the label values of reservation resource. + * + */ + public List values() { + return this.values == null ? List.of() : this.values; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(ClusterClusterConfigGceClusterConfigReservationAffinity defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String consumeReservationType; + private @Nullable String key; + private @Nullable List values; + public Builder() {} + public Builder(ClusterClusterConfigGceClusterConfigReservationAffinity defaults) { + Objects.requireNonNull(defaults); + this.consumeReservationType = defaults.consumeReservationType; + this.key = defaults.key; + this.values = defaults.values; + } + + @CustomType.Setter + public Builder consumeReservationType(@Nullable String consumeReservationType) { + this.consumeReservationType = consumeReservationType; + return this; + } + @CustomType.Setter + public Builder key(@Nullable String key) { + this.key = key; + return this; + } + @CustomType.Setter + public Builder values(@Nullable List values) { + this.values = values; + return this; + } + public Builder values(String... values) { + return values(List.of(values)); + } + public ClusterClusterConfigGceClusterConfigReservationAffinity build() { + final var o = new ClusterClusterConfigGceClusterConfigReservationAffinity(); + o.consumeReservationType = consumeReservationType; + o.key = key; + o.values = values; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigPreemptibleWorkerConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigPreemptibleWorkerConfig.java index e8dc3927a6..1e319235f6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigPreemptibleWorkerConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dataproc/outputs/ClusterClusterConfigPreemptibleWorkerConfig.java @@ -32,6 +32,7 @@ public final class ClusterClusterConfigPreemptibleWorkerConfig { * * PREEMPTIBILITY_UNSPECIFIED * * NON_PREEMPTIBLE * * PREEMPTIBLE + * * SPOT * */ private @Nullable String preemptibility; @@ -61,6 +62,7 @@ public Optional numInstances() { * * PREEMPTIBILITY_UNSPECIFIED * * NON_PREEMPTIBLE * * PREEMPTIBLE + * * SPOT * */ public Optional preemptibility() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datastream/Stream.java b/sdk/java/src/main/java/com/pulumi/gcp/datastream/Stream.java index 955219bcf5..9b6772ac39 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datastream/Stream.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datastream/Stream.java @@ -56,6 +56,8 @@ * import com.pulumi.gcp.storage.BucketArgs; * import com.pulumi.gcp.storage.BucketIAMMember; * import com.pulumi.gcp.storage.BucketIAMMemberArgs; + * import com.pulumi.gcp.kms.CryptoKeyIAMMember; + * import com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs; * import com.pulumi.gcp.datastream.inputs.ConnectionProfileGcsProfileArgs; * import com.pulumi.gcp.datastream.Stream; * import com.pulumi.gcp.datastream.StreamArgs; @@ -68,6 +70,7 @@ * import com.pulumi.gcp.datastream.inputs.StreamDestinationConfigGcsDestinationConfigJsonFileFormatArgs; * import com.pulumi.gcp.datastream.inputs.StreamBackfillAllArgs; * import com.pulumi.gcp.datastream.inputs.StreamBackfillAllMysqlExcludedObjectsArgs; + * import com.pulumi.resources.CustomResourceOptions; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -163,6 +166,12 @@ * .member(String.format("serviceAccount:service-%s@gcp-sa-datastream.iam.gserviceaccount.com", project.applyValue(getProjectResult -> getProjectResult.number()))) * .build()); * + * var keyUser = new CryptoKeyIAMMember("keyUser", CryptoKeyIAMMemberArgs.builder() + * .cryptoKeyId("kms-name") + * .role("roles/cloudkms.cryptoKeyEncrypterDecrypter") + * .member(String.format("serviceAccount:service-%s@gcp-sa-datastream.iam.gserviceaccount.com", project.applyValue(getProjectResult -> getProjectResult.number()))) + * .build()); + * * var destinationConnectionProfile = new ConnectionProfile("destinationConnectionProfile", ConnectionProfileArgs.builder() * .displayName("Connection profile") * .location("us-central1") @@ -247,8 +256,163 @@ * .build()) * .build()) * .build()) + * .customerManagedEncryptionKey("kms-name") + * .build(), CustomResourceOptions.builder() + * .dependsOn(keyUser) + * .build()); + * + * } + * } + * ``` + * ### Datastream Stream Bigquery + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.gcp.organizations.OrganizationsFunctions; + * import com.pulumi.gcp.organizations.inputs.GetProjectArgs; + * import com.pulumi.gcp.sql.DatabaseInstance; + * import com.pulumi.gcp.sql.DatabaseInstanceArgs; + * import com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsArgs; + * import com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsBackupConfigurationArgs; + * import com.pulumi.gcp.sql.inputs.DatabaseInstanceSettingsIpConfigurationArgs; + * import com.pulumi.gcp.sql.Database; + * import com.pulumi.gcp.sql.DatabaseArgs; + * import com.pulumi.random.RandomPassword; + * import com.pulumi.random.RandomPasswordArgs; + * import com.pulumi.gcp.sql.User; + * import com.pulumi.gcp.sql.UserArgs; + * import com.pulumi.gcp.datastream.ConnectionProfile; + * import com.pulumi.gcp.datastream.ConnectionProfileArgs; + * import com.pulumi.gcp.datastream.inputs.ConnectionProfileMysqlProfileArgs; + * import com.pulumi.gcp.bigquery.BigqueryFunctions; + * import com.pulumi.gcp.bigquery.inputs.GetDefaultServiceAccountArgs; + * import com.pulumi.gcp.kms.CryptoKeyIAMMember; + * import com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs; + * import com.pulumi.gcp.datastream.inputs.ConnectionProfileBigqueryProfileArgs; + * import com.pulumi.gcp.datastream.Stream; + * import com.pulumi.gcp.datastream.StreamArgs; + * import com.pulumi.gcp.datastream.inputs.StreamSourceConfigArgs; + * import com.pulumi.gcp.datastream.inputs.StreamSourceConfigMysqlSourceConfigArgs; + * import com.pulumi.gcp.datastream.inputs.StreamDestinationConfigArgs; + * import com.pulumi.gcp.datastream.inputs.StreamDestinationConfigBigqueryDestinationConfigArgs; + * import com.pulumi.gcp.datastream.inputs.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsArgs; + * import com.pulumi.gcp.datastream.inputs.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs; + * import com.pulumi.gcp.datastream.inputs.StreamBackfillNoneArgs; + * 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) { + * final var project = OrganizationsFunctions.getProject(); + * + * var instance = new DatabaseInstance("instance", DatabaseInstanceArgs.builder() + * .databaseVersion("MYSQL_8_0") + * .region("us-central1") + * .settings(DatabaseInstanceSettingsArgs.builder() + * .tier("db-f1-micro") + * .backupConfiguration(DatabaseInstanceSettingsBackupConfigurationArgs.builder() + * .enabled(true) + * .binaryLogEnabled(true) + * .build()) + * .ipConfiguration(DatabaseInstanceSettingsIpConfigurationArgs.builder() + * .authorizedNetworks( + * DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder() + * .value("34.71.242.81") + * .build(), + * DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder() + * .value("34.72.28.29") + * .build(), + * DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder() + * .value("34.67.6.157") + * .build(), + * DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder() + * .value("34.67.234.134") + * .build(), + * DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs.builder() + * .value("34.72.239.218") + * .build()) + * .build()) + * .build()) + * .deletionProtection(true) + * .build()); + * + * var db = new Database("db", DatabaseArgs.builder() + * .instance(instance.name()) + * .build()); + * + * var pwd = new RandomPassword("pwd", RandomPasswordArgs.builder() + * .length(16) + * .special(false) * .build()); * + * var user = new User("user", UserArgs.builder() + * .instance(instance.name()) + * .host("%") + * .password(pwd.result()) + * .build()); + * + * var sourceConnectionProfile = new ConnectionProfile("sourceConnectionProfile", ConnectionProfileArgs.builder() + * .displayName("Source connection profile") + * .location("us-central1") + * .connectionProfileId("source-profile") + * .mysqlProfile(ConnectionProfileMysqlProfileArgs.builder() + * .hostname(instance.publicIpAddress()) + * .username(user.name()) + * .password(user.password()) + * .build()) + * .build()); + * + * final var bqSa = BigqueryFunctions.getDefaultServiceAccount(); + * + * var bigqueryKeyUser = new CryptoKeyIAMMember("bigqueryKeyUser", CryptoKeyIAMMemberArgs.builder() + * .cryptoKeyId("bigquery-kms-name") + * .role("roles/cloudkms.cryptoKeyEncrypterDecrypter") + * .member(String.format("serviceAccount:%s", bqSa.applyValue(getDefaultServiceAccountResult -> getDefaultServiceAccountResult.email()))) + * .build()); + * + * var destinationConnectionProfile = new ConnectionProfile("destinationConnectionProfile", ConnectionProfileArgs.builder() + * .displayName("Connection profile") + * .location("us-central1") + * .connectionProfileId("destination-profile") + * .bigqueryProfile() + * .build()); + * + * var default_ = new Stream("default", StreamArgs.builder() + * .streamId("my-stream") + * .location("us-central1") + * .displayName("my stream") + * .sourceConfig(StreamSourceConfigArgs.builder() + * .sourceConnectionProfile(sourceConnectionProfile.id()) + * .mysqlSourceConfig() + * .build()) + * .destinationConfig(StreamDestinationConfigArgs.builder() + * .destinationConnectionProfile(destinationConnectionProfile.id()) + * .bigqueryDestinationConfig(StreamDestinationConfigBigqueryDestinationConfigArgs.builder() + * .sourceHierarchyDatasets(StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsArgs.builder() + * .datasetTemplate(StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs.builder() + * .location("us-central1") + * .kmsKeyName("bigquery-kms-name") + * .build()) + * .build()) + * .build()) + * .build()) + * .backfillNone() + * .build(), CustomResourceOptions.builder() + * .dependsOn(bigqueryKeyUser) + * .build()); + * * } * } * ``` @@ -302,6 +466,22 @@ public Output> backfillAll() { public Output> backfillNone() { return Codegen.optional(this.backfillNone); } + /** + * A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + * will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + * + */ + @Export(name="customerManagedEncryptionKey", type=String.class, parameters={}) + private Output customerManagedEncryptionKey; + + /** + * @return A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + * will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + * + */ + public Output> customerManagedEncryptionKey() { + return Codegen.optional(this.customerManagedEncryptionKey); + } /** * Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datastream/StreamArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/datastream/StreamArgs.java index 079817dc7f..f1590ead8e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datastream/StreamArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datastream/StreamArgs.java @@ -52,6 +52,23 @@ public Optional> backfillNone() { return Optional.ofNullable(this.backfillNone); } + /** + * A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + * will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + * + */ + @Import(name="customerManagedEncryptionKey") + private @Nullable Output customerManagedEncryptionKey; + + /** + * @return A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + * will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + * + */ + public Optional> customerManagedEncryptionKey() { + return Optional.ofNullable(this.customerManagedEncryptionKey); + } + /** * Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. * @@ -183,6 +200,7 @@ private StreamArgs() {} private StreamArgs(StreamArgs $) { this.backfillAll = $.backfillAll; this.backfillNone = $.backfillNone; + this.customerManagedEncryptionKey = $.customerManagedEncryptionKey; this.desiredState = $.desiredState; this.destinationConfig = $.destinationConfig; this.displayName = $.displayName; @@ -255,6 +273,29 @@ public Builder backfillNone(StreamBackfillNoneArgs backfillNone) { return backfillNone(Output.of(backfillNone)); } + /** + * @param customerManagedEncryptionKey A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + * will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + * + * @return builder + * + */ + public Builder customerManagedEncryptionKey(@Nullable Output customerManagedEncryptionKey) { + $.customerManagedEncryptionKey = customerManagedEncryptionKey; + return this; + } + + /** + * @param customerManagedEncryptionKey A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + * will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + * + * @return builder + * + */ + public Builder customerManagedEncryptionKey(String customerManagedEncryptionKey) { + return customerManagedEncryptionKey(Output.of(customerManagedEncryptionKey)); + } + /** * @param desiredState Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datastream/inputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/datastream/inputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs.java index 0e814f398c..7ff33e5883 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datastream/inputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datastream/inputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs.java @@ -32,6 +32,27 @@ public Optional> datasetIdPrefix() { return Optional.ofNullable(this.datasetIdPrefix); } + /** + * Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + * table. The BigQuery Service Account associated with your project requires access to this + * encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + * See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + * + */ + @Import(name="kmsKeyName") + private @Nullable Output kmsKeyName; + + /** + * @return Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + * table. The BigQuery Service Account associated with your project requires access to this + * encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + * See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + * + */ + public Optional> kmsKeyName() { + return Optional.ofNullable(this.kmsKeyName); + } + /** * The geographic location where the dataset should reside. * See https://cloud.google.com/bigquery/docs/locations for supported locations. @@ -53,6 +74,7 @@ private StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsD private StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs(StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs $) { this.datasetIdPrefix = $.datasetIdPrefix; + this.kmsKeyName = $.kmsKeyName; this.location = $.location; } @@ -97,6 +119,33 @@ public Builder datasetIdPrefix(String datasetIdPrefix) { return datasetIdPrefix(Output.of(datasetIdPrefix)); } + /** + * @param kmsKeyName Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + * table. The BigQuery Service Account associated with your project requires access to this + * encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + * See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + * + * @return builder + * + */ + public Builder kmsKeyName(@Nullable Output kmsKeyName) { + $.kmsKeyName = kmsKeyName; + return this; + } + + /** + * @param kmsKeyName Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + * table. The BigQuery Service Account associated with your project requires access to this + * encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + * See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + * + * @return builder + * + */ + public Builder kmsKeyName(String kmsKeyName) { + return kmsKeyName(Output.of(kmsKeyName)); + } + /** * @param location The geographic location where the dataset should reside. * See https://cloud.google.com/bigquery/docs/locations for supported locations. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datastream/inputs/StreamState.java b/sdk/java/src/main/java/com/pulumi/gcp/datastream/inputs/StreamState.java index 02dafc29fe..47a469670f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datastream/inputs/StreamState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datastream/inputs/StreamState.java @@ -52,6 +52,23 @@ public Optional> backfillNone() { return Optional.ofNullable(this.backfillNone); } + /** + * A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + * will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + * + */ + @Import(name="customerManagedEncryptionKey") + private @Nullable Output customerManagedEncryptionKey; + + /** + * @return A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + * will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + * + */ + public Optional> customerManagedEncryptionKey() { + return Optional.ofNullable(this.customerManagedEncryptionKey); + } + /** * Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. * @@ -213,6 +230,7 @@ private StreamState() {} private StreamState(StreamState $) { this.backfillAll = $.backfillAll; this.backfillNone = $.backfillNone; + this.customerManagedEncryptionKey = $.customerManagedEncryptionKey; this.desiredState = $.desiredState; this.destinationConfig = $.destinationConfig; this.displayName = $.displayName; @@ -287,6 +305,29 @@ public Builder backfillNone(StreamBackfillNoneArgs backfillNone) { return backfillNone(Output.of(backfillNone)); } + /** + * @param customerManagedEncryptionKey A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + * will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + * + * @return builder + * + */ + public Builder customerManagedEncryptionKey(@Nullable Output customerManagedEncryptionKey) { + $.customerManagedEncryptionKey = customerManagedEncryptionKey; + return this; + } + + /** + * @param customerManagedEncryptionKey A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + * will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + * + * @return builder + * + */ + public Builder customerManagedEncryptionKey(String customerManagedEncryptionKey) { + return customerManagedEncryptionKey(Output.of(customerManagedEncryptionKey)); + } + /** * @param desiredState Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/datastream/outputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate.java b/sdk/java/src/main/java/com/pulumi/gcp/datastream/outputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate.java index 19c9665d3d..736c89cdd2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/datastream/outputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/datastream/outputs/StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate.java @@ -17,6 +17,14 @@ public final class StreamDestinationConfigBigqueryDestinationConfigSourceHierarc * */ private @Nullable String datasetIdPrefix; + /** + * @return Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + * table. The BigQuery Service Account associated with your project requires access to this + * encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + * See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + * + */ + private @Nullable String kmsKeyName; /** * @return The geographic location where the dataset should reside. * See https://cloud.google.com/bigquery/docs/locations for supported locations. @@ -33,6 +41,16 @@ private StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsD public Optional datasetIdPrefix() { return Optional.ofNullable(this.datasetIdPrefix); } + /** + * @return Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + * table. The BigQuery Service Account associated with your project requires access to this + * encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + * See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + * + */ + public Optional kmsKeyName() { + return Optional.ofNullable(this.kmsKeyName); + } /** * @return The geographic location where the dataset should reside. * See https://cloud.google.com/bigquery/docs/locations for supported locations. @@ -52,11 +70,13 @@ public static Builder builder(StreamDestinationConfigBigqueryDestinationConfigSo @CustomType.Builder public static final class Builder { private @Nullable String datasetIdPrefix; + private @Nullable String kmsKeyName; private String location; public Builder() {} public Builder(StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate defaults) { Objects.requireNonNull(defaults); this.datasetIdPrefix = defaults.datasetIdPrefix; + this.kmsKeyName = defaults.kmsKeyName; this.location = defaults.location; } @@ -66,6 +86,11 @@ public Builder datasetIdPrefix(@Nullable String datasetIdPrefix) { return this; } @CustomType.Setter + public Builder kmsKeyName(@Nullable String kmsKeyName) { + this.kmsKeyName = kmsKeyName; + return this; + } + @CustomType.Setter public Builder location(String location) { this.location = Objects.requireNonNull(location); return this; @@ -73,6 +98,7 @@ public Builder location(String location) { public StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate build() { final var o = new StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate(); o.datasetIdPrefix = datasetIdPrefix; + o.kmsKeyName = kmsKeyName; o.location = location; return o; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/deploymentmanager/Deployment.java b/sdk/java/src/main/java/com/pulumi/gcp/deploymentmanager/Deployment.java index 9fd798d562..22c5e1bd34 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/deploymentmanager/Deployment.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/deploymentmanager/Deployment.java @@ -19,20 +19,6 @@ import javax.annotation.Nullable; /** - * A collection of resources that are deployed and managed together using - * a configuration file - * - * > **Warning:** This resource is intended only to manage a Deployment resource, - * and attempts to manage the Deployment's resources in the provider as well - * will likely result in errors or unexpected behavior as the two tools - * fight over ownership. We strongly discourage doing so unless you are an - * experienced user of both tools. - * - * In addition, due to limitations of the API, the provider will treat - * deployments in preview as recreate-only for any update operation other - * than actually deploying an in-preview deployment (i.e. `preview=true` to - * `preview=false`). - * * ## Example Usage * ### Deployment Manager Deployment Basic * ```java @@ -223,28 +209,20 @@ public Output name() { return this.name; } /** - * If set to true, a deployment is created with "shell" resources - * that are not actually instantiated. This allows you to preview a - * deployment. It can be updated to false to actually deploy - * with real resources. - * ~>**NOTE:** Deployment Manager does not allow update - * of a deployment in preview (unless updating to preview=false). Thus, - * the provider will force-recreate deployments if either preview is updated - * to true or if other fields are updated while preview is true. + * If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + * preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + * does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + * deployments if either preview is updated to true or if other fields are updated while preview is true. * */ @Export(name="preview", type=Boolean.class, parameters={}) private Output preview; /** - * @return If set to true, a deployment is created with "shell" resources - * that are not actually instantiated. This allows you to preview a - * deployment. It can be updated to false to actually deploy - * with real resources. - * ~>**NOTE:** Deployment Manager does not allow update - * of a deployment in preview (unless updating to preview=false). Thus, - * the provider will force-recreate deployments if either preview is updated - * to true or if other fields are updated while preview is true. + * @return If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + * preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + * does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + * deployments if either preview is updated to true or if other fields are updated while preview is true. * */ public Output> preview() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/deploymentmanager/DeploymentArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/deploymentmanager/DeploymentArgs.java index 1316933d5f..1d5329f857 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/deploymentmanager/DeploymentArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/deploymentmanager/DeploymentArgs.java @@ -123,28 +123,20 @@ public Optional> name() { } /** - * If set to true, a deployment is created with "shell" resources - * that are not actually instantiated. This allows you to preview a - * deployment. It can be updated to false to actually deploy - * with real resources. - * ~>**NOTE:** Deployment Manager does not allow update - * of a deployment in preview (unless updating to preview=false). Thus, - * the provider will force-recreate deployments if either preview is updated - * to true or if other fields are updated while preview is true. + * If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + * preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + * does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + * deployments if either preview is updated to true or if other fields are updated while preview is true. * */ @Import(name="preview") private @Nullable Output preview; /** - * @return If set to true, a deployment is created with "shell" resources - * that are not actually instantiated. This allows you to preview a - * deployment. It can be updated to false to actually deploy - * with real resources. - * ~>**NOTE:** Deployment Manager does not allow update - * of a deployment in preview (unless updating to preview=false). Thus, - * the provider will force-recreate deployments if either preview is updated - * to true or if other fields are updated while preview is true. + * @return If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + * preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + * does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + * deployments if either preview is updated to true or if other fields are updated while preview is true. * */ public Optional> preview() { @@ -363,14 +355,10 @@ public Builder name(String name) { } /** - * @param preview If set to true, a deployment is created with "shell" resources - * that are not actually instantiated. This allows you to preview a - * deployment. It can be updated to false to actually deploy - * with real resources. - * ~>**NOTE:** Deployment Manager does not allow update - * of a deployment in preview (unless updating to preview=false). Thus, - * the provider will force-recreate deployments if either preview is updated - * to true or if other fields are updated while preview is true. + * @param preview If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + * preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + * does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + * deployments if either preview is updated to true or if other fields are updated while preview is true. * * @return builder * @@ -381,14 +369,10 @@ public Builder preview(@Nullable Output preview) { } /** - * @param preview If set to true, a deployment is created with "shell" resources - * that are not actually instantiated. This allows you to preview a - * deployment. It can be updated to false to actually deploy - * with real resources. - * ~>**NOTE:** Deployment Manager does not allow update - * of a deployment in preview (unless updating to preview=false). Thus, - * the provider will force-recreate deployments if either preview is updated - * to true or if other fields are updated while preview is true. + * @param preview If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + * preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + * does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + * deployments if either preview is updated to true or if other fields are updated while preview is true. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/deploymentmanager/inputs/DeploymentState.java b/sdk/java/src/main/java/com/pulumi/gcp/deploymentmanager/inputs/DeploymentState.java index b2f83fc068..c5df8ff824 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/deploymentmanager/inputs/DeploymentState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/deploymentmanager/inputs/DeploymentState.java @@ -155,28 +155,20 @@ public Optional> name() { } /** - * If set to true, a deployment is created with "shell" resources - * that are not actually instantiated. This allows you to preview a - * deployment. It can be updated to false to actually deploy - * with real resources. - * ~>**NOTE:** Deployment Manager does not allow update - * of a deployment in preview (unless updating to preview=false). Thus, - * the provider will force-recreate deployments if either preview is updated - * to true or if other fields are updated while preview is true. + * If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + * preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + * does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + * deployments if either preview is updated to true or if other fields are updated while preview is true. * */ @Import(name="preview") private @Nullable Output preview; /** - * @return If set to true, a deployment is created with "shell" resources - * that are not actually instantiated. This allows you to preview a - * deployment. It can be updated to false to actually deploy - * with real resources. - * ~>**NOTE:** Deployment Manager does not allow update - * of a deployment in preview (unless updating to preview=false). Thus, - * the provider will force-recreate deployments if either preview is updated - * to true or if other fields are updated while preview is true. + * @return If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + * preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + * does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + * deployments if either preview is updated to true or if other fields are updated while preview is true. * */ public Optional> preview() { @@ -457,14 +449,10 @@ public Builder name(String name) { } /** - * @param preview If set to true, a deployment is created with "shell" resources - * that are not actually instantiated. This allows you to preview a - * deployment. It can be updated to false to actually deploy - * with real resources. - * ~>**NOTE:** Deployment Manager does not allow update - * of a deployment in preview (unless updating to preview=false). Thus, - * the provider will force-recreate deployments if either preview is updated - * to true or if other fields are updated while preview is true. + * @param preview If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + * preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + * does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + * deployments if either preview is updated to true or if other fields are updated while preview is true. * * @return builder * @@ -475,14 +463,10 @@ public Builder preview(@Nullable Output preview) { } /** - * @param preview If set to true, a deployment is created with "shell" resources - * that are not actually instantiated. This allows you to preview a - * deployment. It can be updated to false to actually deploy - * with real resources. - * ~>**NOTE:** Deployment Manager does not allow update - * of a deployment in preview (unless updating to preview=false). Thus, - * the provider will force-recreate deployments if either preview is updated - * to true or if other fields are updated while preview is true. + * @param preview If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + * preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + * does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + * deployments if either preview is updated to true or if other fields are updated while preview is true. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/diagflow/Agent.java b/sdk/java/src/main/java/com/pulumi/gcp/diagflow/Agent.java index 3fbdcfb965..fc1622c7fb 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/diagflow/Agent.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/diagflow/Agent.java @@ -279,24 +279,22 @@ public Output>> supportedLanguageCodes() { return Codegen.optional(this.supportedLanguageCodes); } /** - * The agent tier. If not specified, TIER_STANDARD is assumed. - * * TIER_STANDARD: Standard tier. - * * TIER_ENTERPRISE: Enterprise tier (Essentials). - * * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - * NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - * the the provider state and Dialogflow if the agent tier is changed outside of the provider. + * The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + * Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + * provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + * agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + * "TIER_ENTERPRISE_PLUS"] * */ @Export(name="tier", type=String.class, parameters={}) private Output tier; /** - * @return The agent tier. If not specified, TIER_STANDARD is assumed. - * * TIER_STANDARD: Standard tier. - * * TIER_ENTERPRISE: Enterprise tier (Essentials). - * * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - * NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - * the the provider state and Dialogflow if the agent tier is changed outside of the provider. + * @return The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + * Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + * provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + * agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + * "TIER_ENTERPRISE_PLUS"] * */ public Output> tier() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/diagflow/AgentArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/diagflow/AgentArgs.java index ce0772bff0..acc2a9f8bb 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/diagflow/AgentArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/diagflow/AgentArgs.java @@ -207,24 +207,22 @@ public Optional>> supportedLanguageCodes() { } /** - * The agent tier. If not specified, TIER_STANDARD is assumed. - * * TIER_STANDARD: Standard tier. - * * TIER_ENTERPRISE: Enterprise tier (Essentials). - * * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - * NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - * the the provider state and Dialogflow if the agent tier is changed outside of the provider. + * The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + * Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + * provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + * agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + * "TIER_ENTERPRISE_PLUS"] * */ @Import(name="tier") private @Nullable Output tier; /** - * @return The agent tier. If not specified, TIER_STANDARD is assumed. - * * TIER_STANDARD: Standard tier. - * * TIER_ENTERPRISE: Enterprise tier (Essentials). - * * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - * NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - * the the provider state and Dialogflow if the agent tier is changed outside of the provider. + * @return The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + * Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + * provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + * agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + * "TIER_ENTERPRISE_PLUS"] * */ public Optional> tier() { @@ -542,12 +540,11 @@ public Builder supportedLanguageCodes(String... supportedLanguageCodes) { } /** - * @param tier The agent tier. If not specified, TIER_STANDARD is assumed. - * * TIER_STANDARD: Standard tier. - * * TIER_ENTERPRISE: Enterprise tier (Essentials). - * * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - * NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - * the the provider state and Dialogflow if the agent tier is changed outside of the provider. + * @param tier The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + * Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + * provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + * agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + * "TIER_ENTERPRISE_PLUS"] * * @return builder * @@ -558,12 +555,11 @@ public Builder tier(@Nullable Output tier) { } /** - * @param tier The agent tier. If not specified, TIER_STANDARD is assumed. - * * TIER_STANDARD: Standard tier. - * * TIER_ENTERPRISE: Enterprise tier (Essentials). - * * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - * NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - * the the provider state and Dialogflow if the agent tier is changed outside of the provider. + * @param tier The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + * Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + * provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + * agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + * "TIER_ENTERPRISE_PLUS"] * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/diagflow/Intent.java b/sdk/java/src/main/java/com/pulumi/gcp/diagflow/Intent.java index 02ee7273d0..75dee1b936 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/diagflow/Intent.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/diagflow/Intent.java @@ -69,88 +69,6 @@ * } * } * ``` - * ### Dialogflow Intent Full - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.Project; - * import com.pulumi.gcp.organizations.ProjectArgs; - * import com.pulumi.gcp.projects.Service; - * import com.pulumi.gcp.projects.ServiceArgs; - * import com.pulumi.gcp.serviceAccount.Account; - * import com.pulumi.gcp.serviceAccount.AccountArgs; - * import com.pulumi.gcp.projects.IAMMember; - * import com.pulumi.gcp.projects.IAMMemberArgs; - * import com.pulumi.gcp.diagflow.Agent; - * import com.pulumi.gcp.diagflow.AgentArgs; - * import com.pulumi.gcp.diagflow.Intent; - * import com.pulumi.gcp.diagflow.IntentArgs; - * 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 agentProjectProject = new Project("agentProjectProject", ProjectArgs.builder() - * .projectId("tf-test-dialogflow") - * .orgId("123456789") - * .build()); - * - * var agentProjectService = new Service("agentProjectService", ServiceArgs.builder() - * .project(agentProjectProject.projectId()) - * .service("dialogflow.googleapis.com") - * .disableDependentServices(false) - * .build()); - * - * var dialogflowServiceAccount = new Account("dialogflowServiceAccount", AccountArgs.builder() - * .accountId("tf-test-dialogflow") - * .build()); - * - * var agentCreate = new IAMMember("agentCreate", IAMMemberArgs.builder() - * .project(agentProjectService.project()) - * .role("roles/dialogflow.admin") - * .member(dialogflowServiceAccount.email().applyValue(email -> String.format("serviceAccount:%s", email))) - * .build()); - * - * var basicAgent = new Agent("basicAgent", AgentArgs.builder() - * .project(agentProjectProject.projectId()) - * .displayName("example_agent") - * .defaultLanguageCode("en") - * .timeZone("America/New_York") - * .build()); - * - * var fullIntent = new Intent("fullIntent", IntentArgs.builder() - * .project(agentProjectProject.projectId()) - * .displayName("full-intent") - * .webhookState("WEBHOOK_STATE_ENABLED") - * .priority(1) - * .isFallback(false) - * .mlDisabled(true) - * .action("some_action") - * .resetContexts(true) - * .inputContextNames(agentProjectProject.projectId().applyValue(projectId -> String.format("projects/%s/agent/sessions/-/contexts/some_id", projectId))) - * .events("some_event") - * .defaultResponsePlatforms( - * "FACEBOOK", - * "SLACK") - * .build(), CustomResourceOptions.builder() - * .dependsOn(basicAgent) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/diagflow/inputs/AgentState.java b/sdk/java/src/main/java/com/pulumi/gcp/diagflow/inputs/AgentState.java index 07e41bad21..71bee0d795 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/diagflow/inputs/AgentState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/diagflow/inputs/AgentState.java @@ -224,24 +224,22 @@ public Optional>> supportedLanguageCodes() { } /** - * The agent tier. If not specified, TIER_STANDARD is assumed. - * * TIER_STANDARD: Standard tier. - * * TIER_ENTERPRISE: Enterprise tier (Essentials). - * * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - * NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - * the the provider state and Dialogflow if the agent tier is changed outside of the provider. + * The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + * Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + * provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + * agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + * "TIER_ENTERPRISE_PLUS"] * */ @Import(name="tier") private @Nullable Output tier; /** - * @return The agent tier. If not specified, TIER_STANDARD is assumed. - * * TIER_STANDARD: Standard tier. - * * TIER_ENTERPRISE: Enterprise tier (Essentials). - * * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - * NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - * the the provider state and Dialogflow if the agent tier is changed outside of the provider. + * @return The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + * Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + * provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + * agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + * "TIER_ENTERPRISE_PLUS"] * */ public Optional> tier() { @@ -583,12 +581,11 @@ public Builder supportedLanguageCodes(String... supportedLanguageCodes) { } /** - * @param tier The agent tier. If not specified, TIER_STANDARD is assumed. - * * TIER_STANDARD: Standard tier. - * * TIER_ENTERPRISE: Enterprise tier (Essentials). - * * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - * NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - * the the provider state and Dialogflow if the agent tier is changed outside of the provider. + * @param tier The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + * Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + * provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + * agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + * "TIER_ENTERPRISE_PLUS"] * * @return builder * @@ -599,12 +596,11 @@ public Builder tier(@Nullable Output tier) { } /** - * @param tier The agent tier. If not specified, TIER_STANDARD is assumed. - * * TIER_STANDARD: Standard tier. - * * TIER_ENTERPRISE: Enterprise tier (Essentials). - * * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - * NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - * the the provider state and Dialogflow if the agent tier is changed outside of the provider. + * @param tier The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + * Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + * provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + * agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + * "TIER_ENTERPRISE_PLUS"] * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dns/ManagedZone.java b/sdk/java/src/main/java/com/pulumi/gcp/dns/ManagedZone.java index 60258f52c1..91d7432407 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dns/ManagedZone.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dns/ManagedZone.java @@ -33,7 +33,7 @@ * * * [API documentation](https://cloud.google.com/dns/api/v1/managedZones) * * How-to Guides - * * [Managing Zones](https://cloud.google.com/dns/zones/) + * * [Managing Zones](https://cloud.google.com/dns/zones/) * * ## Example Usage * ### Dns Managed Zone Basic @@ -43,6 +43,8 @@ * import com.pulumi.Context; * import com.pulumi.Pulumi; * import com.pulumi.core.Output; + * import com.pulumi.random.RandomId; + * import com.pulumi.random.RandomIdArgs; * import com.pulumi.gcp.dns.ManagedZone; * import com.pulumi.gcp.dns.ManagedZoneArgs; * import java.util.List; @@ -58,9 +60,13 @@ * } * * public static void stack(Context ctx) { + * var rnd = new RandomId("rnd", RandomIdArgs.builder() + * .byteLength(4) + * .build()); + * * var example_zone = new ManagedZone("example-zone", ManagedZoneArgs.builder() * .description("Example DNS zone") - * .dnsName("my-domain.com.") + * .dnsName(rnd.hex().applyValue(hex -> String.format("example-%s.com.", hex))) * .labels(Map.of("foo", "bar")) * .build()); * @@ -478,14 +484,14 @@ public Output creationTime() { return this.creationTime; } /** - * A textual description field. Defaults to 'Managed by Pulumi'. + * A textual description field. Defaults to 'Managed by Terraform'. * */ @Export(name="description", type=String.class, parameters={}) private Output description; /** - * @return A textual description field. Defaults to 'Managed by Pulumi'. + * @return A textual description field. Defaults to 'Managed by Terraform'. * */ public Output description() { @@ -668,34 +674,34 @@ public Output project() { return this.project; } /** - * Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - * lookup queries using automatically configured records for VPC resources. This only applies - * to networks listed under `private_visibility_config`. + * Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + * automatically configured records for VPC resources. This only applies to networks listed under + * 'private_visibility_config'. * */ @Export(name="reverseLookup", type=Boolean.class, parameters={}) private Output reverseLookup; /** - * @return Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - * lookup queries using automatically configured records for VPC resources. This only applies - * to networks listed under `private_visibility_config`. + * @return Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + * automatically configured records for VPC resources. This only applies to networks listed under + * 'private_visibility_config'. * */ public Output> reverseLookup() { return Codegen.optional(this.reverseLookup); } /** - * The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - * Structure is documented below. + * The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + * information related to the namespace associated with the zone. * */ @Export(name="serviceDirectoryConfig", type=ManagedZoneServiceDirectoryConfig.class, parameters={}) private Output serviceDirectoryConfig; /** - * @return The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - * Structure is documented below. + * @return The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + * information related to the namespace associated with the zone. * */ public Output> serviceDirectoryConfig() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dns/ManagedZoneArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dns/ManagedZoneArgs.java index 4e9b2a9570..0cd906a300 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dns/ManagedZoneArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dns/ManagedZoneArgs.java @@ -42,14 +42,14 @@ public Optional> cloudLoggingConfig() } /** - * A textual description field. Defaults to 'Managed by Pulumi'. + * A textual description field. Defaults to 'Managed by Terraform'. * */ @Import(name="description") private @Nullable Output description; /** - * @return A textual description field. Defaults to 'Managed by Pulumi'. + * @return A textual description field. Defaults to 'Managed by Terraform'. * */ public Optional> description() { @@ -212,18 +212,18 @@ public Optional> project() { } /** - * Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - * lookup queries using automatically configured records for VPC resources. This only applies - * to networks listed under `private_visibility_config`. + * Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + * automatically configured records for VPC resources. This only applies to networks listed under + * 'private_visibility_config'. * */ @Import(name="reverseLookup") private @Nullable Output reverseLookup; /** - * @return Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - * lookup queries using automatically configured records for VPC resources. This only applies - * to networks listed under `private_visibility_config`. + * @return Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + * automatically configured records for VPC resources. This only applies to networks listed under + * 'private_visibility_config'. * */ public Optional> reverseLookup() { @@ -231,16 +231,16 @@ public Optional> reverseLookup() { } /** - * The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - * Structure is documented below. + * The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + * information related to the namespace associated with the zone. * */ @Import(name="serviceDirectoryConfig") private @Nullable Output serviceDirectoryConfig; /** - * @return The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - * Structure is documented below. + * @return The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + * information related to the namespace associated with the zone. * */ public Optional> serviceDirectoryConfig() { @@ -329,7 +329,7 @@ public Builder cloudLoggingConfig(ManagedZoneCloudLoggingConfigArgs cloudLogging } /** - * @param description A textual description field. Defaults to 'Managed by Pulumi'. + * @param description A textual description field. Defaults to 'Managed by Terraform'. * * @return builder * @@ -340,7 +340,7 @@ public Builder description(@Nullable Output description) { } /** - * @param description A textual description field. Defaults to 'Managed by Pulumi'. + * @param description A textual description field. Defaults to 'Managed by Terraform'. * * @return builder * @@ -559,9 +559,9 @@ public Builder project(String project) { } /** - * @param reverseLookup Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - * lookup queries using automatically configured records for VPC resources. This only applies - * to networks listed under `private_visibility_config`. + * @param reverseLookup Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + * automatically configured records for VPC resources. This only applies to networks listed under + * 'private_visibility_config'. * * @return builder * @@ -572,9 +572,9 @@ public Builder reverseLookup(@Nullable Output reverseLookup) { } /** - * @param reverseLookup Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - * lookup queries using automatically configured records for VPC resources. This only applies - * to networks listed under `private_visibility_config`. + * @param reverseLookup Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + * automatically configured records for VPC resources. This only applies to networks listed under + * 'private_visibility_config'. * * @return builder * @@ -584,8 +584,8 @@ public Builder reverseLookup(Boolean reverseLookup) { } /** - * @param serviceDirectoryConfig The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - * Structure is documented below. + * @param serviceDirectoryConfig The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + * information related to the namespace associated with the zone. * * @return builder * @@ -596,8 +596,8 @@ public Builder serviceDirectoryConfig(@Nullable Output> alternativeNameServer return Codegen.optional(this.alternativeNameServerConfig); } /** - * A textual description field. Defaults to 'Managed by Pulumi'. + * A textual description field. Defaults to 'Managed by Terraform'. * */ @Export(name="description", type=String.class, parameters={}) private Output description; /** - * @return A textual description field. Defaults to 'Managed by Pulumi'. + * @return A textual description field. Defaults to 'Managed by Terraform'. * */ public Output> description() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dns/PolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/dns/PolicyArgs.java index f31b02c515..edc08c8c25 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dns/PolicyArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dns/PolicyArgs.java @@ -41,14 +41,14 @@ public Optional> alternativeNameSe } /** - * A textual description field. Defaults to 'Managed by Pulumi'. + * A textual description field. Defaults to 'Managed by Terraform'. * */ @Import(name="description") private @Nullable Output description; /** - * @return A textual description field. Defaults to 'Managed by Pulumi'. + * @return A textual description field. Defaults to 'Managed by Terraform'. * */ public Optional> description() { @@ -200,7 +200,7 @@ public Builder alternativeNameServerConfig(PolicyAlternativeNameServerConfigArgs } /** - * @param description A textual description field. Defaults to 'Managed by Pulumi'. + * @param description A textual description field. Defaults to 'Managed by Terraform'. * * @return builder * @@ -211,7 +211,7 @@ public Builder description(@Nullable Output description) { } /** - * @param description A textual description field. Defaults to 'Managed by Pulumi'. + * @param description A textual description field. Defaults to 'Managed by Terraform'. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dns/inputs/ManagedZoneState.java b/sdk/java/src/main/java/com/pulumi/gcp/dns/inputs/ManagedZoneState.java index f65b46eb1b..233c594a0b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dns/inputs/ManagedZoneState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dns/inputs/ManagedZoneState.java @@ -61,14 +61,14 @@ public Optional> creationTime() { } /** - * A textual description field. Defaults to 'Managed by Pulumi'. + * A textual description field. Defaults to 'Managed by Terraform'. * */ @Import(name="description") private @Nullable Output description; /** - * @return A textual description field. Defaults to 'Managed by Pulumi'. + * @return A textual description field. Defaults to 'Managed by Terraform'. * */ public Optional> description() { @@ -263,18 +263,18 @@ public Optional> project() { } /** - * Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - * lookup queries using automatically configured records for VPC resources. This only applies - * to networks listed under `private_visibility_config`. + * Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + * automatically configured records for VPC resources. This only applies to networks listed under + * 'private_visibility_config'. * */ @Import(name="reverseLookup") private @Nullable Output reverseLookup; /** - * @return Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - * lookup queries using automatically configured records for VPC resources. This only applies - * to networks listed under `private_visibility_config`. + * @return Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + * automatically configured records for VPC resources. This only applies to networks listed under + * 'private_visibility_config'. * */ public Optional> reverseLookup() { @@ -282,16 +282,16 @@ public Optional> reverseLookup() { } /** - * The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - * Structure is documented below. + * The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + * information related to the namespace associated with the zone. * */ @Import(name="serviceDirectoryConfig") private @Nullable Output serviceDirectoryConfig; /** - * @return The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - * Structure is documented below. + * @return The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + * information related to the namespace associated with the zone. * */ public Optional> serviceDirectoryConfig() { @@ -406,7 +406,7 @@ public Builder creationTime(String creationTime) { } /** - * @param description A textual description field. Defaults to 'Managed by Pulumi'. + * @param description A textual description field. Defaults to 'Managed by Terraform'. * * @return builder * @@ -417,7 +417,7 @@ public Builder description(@Nullable Output description) { } /** - * @param description A textual description field. Defaults to 'Managed by Pulumi'. + * @param description A textual description field. Defaults to 'Managed by Terraform'. * * @return builder * @@ -691,9 +691,9 @@ public Builder project(String project) { } /** - * @param reverseLookup Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - * lookup queries using automatically configured records for VPC resources. This only applies - * to networks listed under `private_visibility_config`. + * @param reverseLookup Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + * automatically configured records for VPC resources. This only applies to networks listed under + * 'private_visibility_config'. * * @return builder * @@ -704,9 +704,9 @@ public Builder reverseLookup(@Nullable Output reverseLookup) { } /** - * @param reverseLookup Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - * lookup queries using automatically configured records for VPC resources. This only applies - * to networks listed under `private_visibility_config`. + * @param reverseLookup Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + * automatically configured records for VPC resources. This only applies to networks listed under + * 'private_visibility_config'. * * @return builder * @@ -716,8 +716,8 @@ public Builder reverseLookup(Boolean reverseLookup) { } /** - * @param serviceDirectoryConfig The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - * Structure is documented below. + * @param serviceDirectoryConfig The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + * information related to the namespace associated with the zone. * * @return builder * @@ -728,8 +728,8 @@ public Builder serviceDirectoryConfig(@Nullable Output> alternativeNameSe } /** - * A textual description field. Defaults to 'Managed by Pulumi'. + * A textual description field. Defaults to 'Managed by Terraform'. * */ @Import(name="description") private @Nullable Output description; /** - * @return A textual description field. Defaults to 'Managed by Pulumi'. + * @return A textual description field. Defaults to 'Managed by Terraform'. * */ public Optional> description() { @@ -200,7 +200,7 @@ public Builder alternativeNameServerConfig(PolicyAlternativeNameServerConfigArgs } /** - * @param description A textual description field. Defaults to 'Managed by Pulumi'. + * @param description A textual description field. Defaults to 'Managed by Terraform'. * * @return builder * @@ -211,7 +211,7 @@ public Builder description(@Nullable Output description) { } /** - * @param description A textual description field. Defaults to 'Managed by Pulumi'. + * @param description A textual description field. Defaults to 'Managed by Terraform'. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/dns/outputs/GetManagedZoneResult.java b/sdk/java/src/main/java/com/pulumi/gcp/dns/outputs/GetManagedZoneResult.java index 6fe38e9127..634645d4b5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/dns/outputs/GetManagedZoneResult.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/dns/outputs/GetManagedZoneResult.java @@ -18,10 +18,6 @@ public final class GetManagedZoneResult { * */ private String description; - /** - * @return The fully qualified DNS name of this zone, e.g. `example.io.`. - * - */ private String dnsName; /** * @return The provider-assigned unique ID for this managed resource. @@ -53,10 +49,6 @@ private GetManagedZoneResult() {} public String description() { return this.description; } - /** - * @return The fully qualified DNS name of this zone, e.g. `example.io.`. - * - */ public String dnsName() { return this.dnsName; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/firebase/FirebaseFunctions.java b/sdk/java/src/main/java/com/pulumi/gcp/firebase/FirebaseFunctions.java index 9331927538..20a2a3c993 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/firebase/FirebaseFunctions.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/firebase/FirebaseFunctions.java @@ -62,83 +62,27 @@ public static Output getAppleAppConfig(GetAppleAppConfi public static CompletableFuture getAppleAppConfigPlain(GetAppleAppConfigPlainArgs args, InvokeOptions options) { return Deployment.getInstance().invokeAsync("gcp:firebase/getAppleAppConfig:getAppleAppConfig", TypeShape.of(GetAppleAppConfigResult.class), args, Utilities.withVersion(options)); } - /** - * A Google Cloud Firebase web application instance - * - */ public static Output getWebApp(GetWebAppArgs args) { return getWebApp(args, InvokeOptions.Empty); } - /** - * A Google Cloud Firebase web application instance - * - */ public static CompletableFuture getWebAppPlain(GetWebAppPlainArgs args) { return getWebAppPlain(args, InvokeOptions.Empty); } - /** - * A Google Cloud Firebase web application instance - * - */ public static Output getWebApp(GetWebAppArgs args, InvokeOptions options) { return Deployment.getInstance().invoke("gcp:firebase/getWebApp:getWebApp", TypeShape.of(GetWebAppResult.class), args, Utilities.withVersion(options)); } - /** - * A Google Cloud Firebase web application instance - * - */ public static CompletableFuture getWebAppPlain(GetWebAppPlainArgs args, InvokeOptions options) { return Deployment.getInstance().invokeAsync("gcp:firebase/getWebApp:getWebApp", TypeShape.of(GetWebAppResult.class), args, Utilities.withVersion(options)); } - /** - * A Google Cloud Firebase web application configuration - * - * To get more information about WebApp, see: - * - * * [API documentation](https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects.webApps) - * * How-to Guides - * * [Official Documentation](https://firebase.google.com/) - * - */ public static Output getWebAppConfig(GetWebAppConfigArgs args) { return getWebAppConfig(args, InvokeOptions.Empty); } - /** - * A Google Cloud Firebase web application configuration - * - * To get more information about WebApp, see: - * - * * [API documentation](https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects.webApps) - * * How-to Guides - * * [Official Documentation](https://firebase.google.com/) - * - */ public static CompletableFuture getWebAppConfigPlain(GetWebAppConfigPlainArgs args) { return getWebAppConfigPlain(args, InvokeOptions.Empty); } - /** - * A Google Cloud Firebase web application configuration - * - * To get more information about WebApp, see: - * - * * [API documentation](https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects.webApps) - * * How-to Guides - * * [Official Documentation](https://firebase.google.com/) - * - */ public static Output getWebAppConfig(GetWebAppConfigArgs args, InvokeOptions options) { return Deployment.getInstance().invoke("gcp:firebase/getWebAppConfig:getWebAppConfig", TypeShape.of(GetWebAppConfigResult.class), args, Utilities.withVersion(options)); } - /** - * A Google Cloud Firebase web application configuration - * - * To get more information about WebApp, see: - * - * * [API documentation](https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects.webApps) - * * How-to Guides - * * [Official Documentation](https://firebase.google.com/) - * - */ public static CompletableFuture getWebAppConfigPlain(GetWebAppConfigPlainArgs args, InvokeOptions options) { return Deployment.getInstance().invokeAsync("gcp:firebase/getWebAppConfig:getWebAppConfig", TypeShape.of(GetWebAppConfigResult.class), args, Utilities.withVersion(options)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/firebase/Project.java b/sdk/java/src/main/java/com/pulumi/gcp/firebase/Project.java index d4089a3425..69467a0e48 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/firebase/Project.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/firebase/Project.java @@ -14,59 +14,7 @@ import javax.annotation.Nullable; /** - * A Google Cloud Firebase instance. This enables Firebase resources on a given google project. - * Since a FirebaseProject is actually also a GCP Project, a FirebaseProject uses underlying GCP - * identifiers (most importantly, the projectId) as its own for easy interop with GCP APIs. - * Once Firebase has been added to a Google Project it cannot be removed. - * - * To get more information about Project, see: - * - * * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects) - * * How-to Guides - * * [Official Documentation](https://firebase.google.com/) - * * ## Example Usage - * ### Firebase Project Basic - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.Project; - * import com.pulumi.gcp.organizations.ProjectArgs; - * import com.pulumi.gcp.firebase.Project; - * import com.pulumi.gcp.firebase.ProjectArgs; - * 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 defaultProject = new Project("defaultProject", ProjectArgs.builder() - * .projectId("tf-test") - * .orgId("123456789") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * var defaultFirebase_projectProject = new Project("defaultFirebase/projectProject", ProjectArgs.builder() - * .project(defaultProject.projectId()) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/firebase/ProjectLocation.java b/sdk/java/src/main/java/com/pulumi/gcp/firebase/ProjectLocation.java index dd6a82e073..8fa6672763 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/firebase/ProjectLocation.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/firebase/ProjectLocation.java @@ -14,72 +14,7 @@ import javax.annotation.Nullable; /** - * Sets the default Google Cloud Platform (GCP) resource location for the specified FirebaseProject. - * This method creates an App Engine application with a default Cloud Storage bucket, located in the specified - * locationId. This location must be one of the available GCP resource locations. - * After the default GCP resource location is finalized, or if it was already set, it cannot be changed. - * The default GCP resource location for the specified FirebaseProject might already be set because either the - * GCP Project already has an App Engine application or defaultLocation.finalize was previously called with a - * specified locationId. Any new calls to defaultLocation.finalize with a different specified locationId will - * return a 409 error. - * - * To get more information about ProjectLocation, see: - * - * * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.defaultLocation/finalize) - * * How-to Guides - * * [Official Documentation](https://firebase.google.com/) - * * ## Example Usage - * ### Firebase Project Location Basic - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.Project; - * import com.pulumi.gcp.organizations.ProjectArgs; - * import com.pulumi.gcp.firebase.Project; - * import com.pulumi.gcp.firebase.ProjectArgs; - * import com.pulumi.gcp.firebase.ProjectLocation; - * import com.pulumi.gcp.firebase.ProjectLocationArgs; - * 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 defaultProject = new Project("defaultProject", ProjectArgs.builder() - * .projectId("tf-test") - * .orgId("123456789") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * var defaultFirebase_projectProject = new Project("defaultFirebase/projectProject", ProjectArgs.builder() - * .project(defaultProject.projectId()) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * var basic = new ProjectLocation("basic", ProjectLocationArgs.builder() - * .project(defaultFirebase / projectProject.project()) - * .locationId("us-central") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/firebase/WebApp.java b/sdk/java/src/main/java/com/pulumi/gcp/firebase/WebApp.java index 89b0a985cd..402b6f89bd 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/firebase/WebApp.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/firebase/WebApp.java @@ -16,109 +16,7 @@ import javax.annotation.Nullable; /** - * A Google Cloud Firebase web application instance - * - * To get more information about WebApp, see: - * - * * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.webApps) - * * How-to Guides - * * [Official Documentation](https://firebase.google.com/) - * * ## Example Usage - * ### Firebase Web App Basic - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.Project; - * import com.pulumi.gcp.organizations.ProjectArgs; - * import com.pulumi.gcp.firebase.Project; - * import com.pulumi.gcp.firebase.ProjectArgs; - * import com.pulumi.gcp.firebase.WebApp; - * import com.pulumi.gcp.firebase.WebAppArgs; - * import com.pulumi.gcp.firebase.FirebaseFunctions; - * import com.pulumi.gcp.firebase.inputs.GetWebAppConfigArgs; - * import com.pulumi.gcp.storage.Bucket; - * import com.pulumi.gcp.storage.BucketArgs; - * import com.pulumi.gcp.storage.BucketObject; - * import com.pulumi.gcp.storage.BucketObjectArgs; - * import static com.pulumi.codegen.internal.Serialization.*; - * 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 defaultProject = new Project("defaultProject", ProjectArgs.builder() - * .projectId("tf-test") - * .orgId("123456789") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * var defaultFirebase_projectProject = new Project("defaultFirebase/projectProject", ProjectArgs.builder() - * .project(defaultProject.projectId()) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * var basicWebApp = new WebApp("basicWebApp", WebAppArgs.builder() - * .project(defaultProject.projectId()) - * .displayName("Display Name Basic") - * .deletionPolicy("DELETE") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .dependsOn(defaultFirebase / projectProject) - * .build()); - * - * final var basicWebAppConfig = FirebaseFunctions.getWebAppConfig(GetWebAppConfigArgs.builder() - * .webAppId(basicWebApp.appId()) - * .build()); - * - * var defaultBucket = new Bucket("defaultBucket", BucketArgs.builder() - * .location("US") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * var defaultBucketObject = new BucketObject("defaultBucketObject", BucketObjectArgs.builder() - * .bucket(defaultBucket.name()) - * .content(Output.tuple(basicWebApp.appId(), basicWebAppConfig.applyValue(getWebAppConfigResult -> getWebAppConfigResult), basicWebAppConfig.applyValue(getWebAppConfigResult -> getWebAppConfigResult), basicWebAppConfig.applyValue(getWebAppConfigResult -> getWebAppConfigResult)["database_url"], basicWebAppConfig.applyValue(getWebAppConfigResult -> getWebAppConfigResult)["storage_bucket"], basicWebAppConfig.applyValue(getWebAppConfigResult -> getWebAppConfigResult)["messaging_sender_id"], basicWebAppConfig.applyValue(getWebAppConfigResult -> getWebAppConfigResult)["measurement_id"]).applyValue(values -> { - * var appId = values.t1; - * var basicWebAppConfig = values.t2; - * var basicWebAppConfig1 = values.t3; - * var s = values.t4; - * var s1 = values.t5; - * var s2 = values.t6; - * var s3 = values.t7; - * return serializeJson( - * jsonObject( - * jsonProperty("appId", appId), - * jsonProperty("apiKey", basicWebAppConfig.applyValue(getWebAppConfigResult -> getWebAppConfigResult.apiKey())), - * jsonProperty("authDomain", basicWebAppConfig1.authDomain()), - * jsonProperty("databaseURL", s), - * jsonProperty("storageBucket", s1), - * jsonProperty("messagingSenderId", s2), - * jsonProperty("measurementId", s3) - * )); - * })) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/firestore/Document.java b/sdk/java/src/main/java/com/pulumi/gcp/firestore/Document.java index 418078e89b..ff874f8e56 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/firestore/Document.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/firestore/Document.java @@ -55,7 +55,7 @@ * public static void stack(Context ctx) { * var mydoc = new Document("mydoc", DocumentArgs.builder() * .collection("somenewcollection") - * .documentId("my-doc") + * .documentId("my-doc-%{random_suffix}") * .fields("{\"something\":{\"mapValue\":{\"fields\":{\"akey\":{\"stringValue\":\"avalue\"}}}}}") * .project("my-project-name") * .build()); @@ -87,7 +87,7 @@ * public static void stack(Context ctx) { * var mydoc = new Document("mydoc", DocumentArgs.builder() * .collection("somenewcollection") - * .documentId("my-doc") + * .documentId("my-doc-%{random_suffix}") * .fields("{\"something\":{\"mapValue\":{\"fields\":{\"akey\":{\"stringValue\":\"avalue\"}}}}}") * .project("my-project-name") * .build()); diff --git a/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMBinding.java index 36d19c670d..5d8d44d948 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMBinding.java @@ -17,76 +17,62 @@ import javax.annotation.Nullable; /** - * Allows creation and management of a single binding within IAM policy for - * an existing Google Cloud Platform folder. - * - * > **Note:** This resource _must not_ be used in conjunction with - * `gcp.folder.IAMPolicy` or they will fight over what your policy - * should be. - * - * > **Note:** On create, this resource will overwrite members of any existing roles. - * Use `pulumi import` and inspect the output to ensure - * your existing members are preserved. + * ## Import * - * ## Example Usage - * ```java - * package generated_program; + * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.Folder; - * import com.pulumi.gcp.organizations.FolderArgs; - * import com.pulumi.gcp.folder.IAMBinding; - * import com.pulumi.gcp.folder.IAMBindingArgs; - * 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; + * This member resource can be imported using the `folder`, role, and member e.g. * - * public class App { - * public static void main(String[] args) { - * Pulumi.run(App::stack); - * } + * ```sh + * $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder roles/viewer user:foo@example.com" + * ``` * - * public static void stack(Context ctx) { - * var department1 = new Folder("department1", FolderArgs.builder() - * .displayName("Department 1") - * .parent("organizations/1234567") - * .build()); + * IAM binding imports use space-delimited identifiers; the resource in question and the role. * - * var admin = new IAMBinding("admin", IAMBindingArgs.builder() - * .folder(department1.name()) - * .role("roles/editor") - * .members("user:alice@gmail.com") - * .build()); + * This binding resource can be imported using the `folder` and role, e.g. * - * } - * } + * ```sh + * $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder roles/viewer" * ``` * - * ## Import + * IAM policy imports use the identifier of the resource in question. * - * IAM binding imports use space-delimited identifiers; first the resource in question and then the role. + * This policy resource can be imported using the `folder`. * - * These bindings can be imported using the `folder` and role, e.g. + * ```sh + * $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder folder + * ``` + * + * IAM audit config imports use the identifier of the resource in question and the service, e.g. * * ```sh - * $ pulumi import gcp:folder/iAMBinding:IAMBinding viewer "folder-name roles/viewer" + * $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder foo.googleapis.com" * ``` * - * -> **Custom Roles**If you're importing a IAM binding with a custom role, make sure to use the + * -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the * - * full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. + * full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure + * + * ```sh + * $ pulumi import gcp:folder/iAMBinding:IAMBinding to include the title of condition, e.g. `google_folder_iam_binding.my_folder "folder roles/{{role_id}} condition-title"` + * ``` * */ @ResourceType(type="gcp:folder/iAMBinding:IAMBinding") public class IAMBinding extends com.pulumi.resources.CustomResource { + /** + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + */ @Export(name="condition", type=IAMBindingCondition.class, parameters={}) private Output condition; + /** + * @return An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + */ public Output> condition() { return Codegen.optional(this.condition); } @@ -118,36 +104,16 @@ public Output etag() { public Output folder() { return this.folder; } - /** - * An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - */ @Export(name="members", type=List.class, parameters={String.class}) private Output> members; - /** - * @return An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - */ public Output> members() { return this.members; } /** * The role that should be applied. Only one * `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * */ @Export(name="role", type=String.class, parameters={}) @@ -156,7 +122,7 @@ public Output> members() { /** * @return The role that should be applied. Only one * `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * */ public Output role() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMBindingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMBindingArgs.java index 2b3a8e03eb..84e613b64b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMBindingArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMBindingArgs.java @@ -17,9 +17,19 @@ public final class IAMBindingArgs extends com.pulumi.resources.ResourceArgs { public static final IAMBindingArgs Empty = new IAMBindingArgs(); + /** + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + */ @Import(name="condition") private @Nullable Output condition; + /** + * @return An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + */ public Optional> condition() { return Optional.ofNullable(this.condition); } @@ -39,29 +49,9 @@ public Output folder() { return this.folder; } - /** - * An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - */ @Import(name="members", required=true) private Output> members; - /** - * @return An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - */ public Output> members() { return this.members; } @@ -69,7 +59,7 @@ public Output> members() { /** * The role that should be applied. Only one * `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * */ @Import(name="role", required=true) @@ -78,7 +68,7 @@ public Output> members() { /** * @return The role that should be applied. Only one * `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * */ public Output role() { @@ -112,11 +102,25 @@ public Builder(IAMBindingArgs defaults) { $ = new IAMBindingArgs(Objects.requireNonNull(defaults)); } + /** + * @param condition An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + * @return builder + * + */ public Builder condition(@Nullable Output condition) { $.condition = condition; return this; } + /** + * @param condition An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + * @return builder + * + */ public Builder condition(IAMBindingConditionArgs condition) { return condition(Output.of(condition)); } @@ -142,51 +146,15 @@ public Builder folder(String folder) { return folder(Output.of(folder)); } - /** - * @param members An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - * @return builder - * - */ public Builder members(Output> members) { $.members = members; return this; } - /** - * @param members An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - * @return builder - * - */ public Builder members(List members) { return members(Output.of(members)); } - /** - * @param members An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - * @return builder - * - */ public Builder members(String... members) { return members(List.of(members)); } @@ -194,7 +162,7 @@ public Builder members(String... members) { /** * @param role The role that should be applied. Only one * `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * * @return builder * @@ -207,7 +175,7 @@ public Builder role(Output role) { /** * @param role The role that should be applied. Only one * `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMMember.java b/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMMember.java index d325b46e10..1d79198a2a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMMember.java @@ -16,293 +16,6 @@ import javax.annotation.Nullable; /** - * Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - * - * * `gcp.folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - * * `gcp.folder.IAMBinding`: 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 folder are preserved. - * * `gcp.folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - * * `gcp.folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.folder.IAMPolicy` **cannot** be used in conjunction with `gcp.folder.IAMBinding`, `gcp.folder.IAMMember`, or `gcp.folder.IamAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.folder.IAMBinding` resources **can be** used in conjunction with `gcp.folder.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_folder\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your folder - * using this resource. Deleting a `gcp.folder.IAMPolicy` removes access - * from anyone without permissions on its parent folder/organization. Proceed with caution. - * It's not recommended to use `gcp.folder.IAMPolicy` with your provider folder - * to avoid locking yourself out, and it should generally only be used with folders - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.folder.IAMPolicy; - * import com.pulumi.gcp.folder.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var folder = new IAMPolicy("folder", IAMPolicyArgs.builder() - * .folder("folders/1234567") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.folder.IAMPolicy; - * import com.pulumi.gcp.folder.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .role("roles/compute.admin") - * .build()) - * .build()); - * - * var folder = new IAMPolicy("folder", IAMPolicyArgs.builder() - * .folder("folders/1234567") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_folder\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IAMBinding; - * import com.pulumi.gcp.folder.IAMBindingArgs; - * 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 folder = new IAMBinding("folder", IAMBindingArgs.builder() - * .folder("folders/1234567") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IAMBinding; - * import com.pulumi.gcp.folder.IAMBindingArgs; - * import com.pulumi.gcp.folder.inputs.IAMBindingConditionArgs; - * 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 folder = new IAMBinding("folder", IAMBindingArgs.builder() - * .condition(IAMBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .folder("folders/1234567") - * .members("user:jane@example.com") - * .role("roles/container.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_folder\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IAMMember; - * import com.pulumi.gcp.folder.IAMMemberArgs; - * 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 folder = new IAMMember("folder", IAMMemberArgs.builder() - * .folder("folders/1234567") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IAMMember; - * import com.pulumi.gcp.folder.IAMMemberArgs; - * import com.pulumi.gcp.folder.inputs.IAMMemberConditionArgs; - * 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 folder = new IAMMember("folder", IAMMemberArgs.builder() - * .condition(IAMMemberConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .folder("folders/1234567") - * .member("user:jane@example.com") - * .role("roles/firebase.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_folder\_iam\_audit\_config - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IamAuditConfig; - * import com.pulumi.gcp.folder.IamAuditConfigArgs; - * import com.pulumi.gcp.folder.inputs.IamAuditConfigAuditLogConfigArgs; - * 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 folder = new IamAuditConfig("folder", IamAuditConfigArgs.builder() - * .auditLogConfigs( - * IamAuditConfigAuditLogConfigArgs.builder() - * .logType("ADMIN_READ") - * .build(), - * IamAuditConfigAuditLogConfigArgs.builder() - * .exemptedMembers("user:joebloggs@hashicorp.com") - * .logType("DATA_READ") - * .build()) - * .folder("folders/1234567") - * .service("allServices") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMPolicy.java index d7547b574f..bc1bda87a3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/folder/IAMPolicy.java @@ -14,293 +14,6 @@ import javax.annotation.Nullable; /** - * Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - * - * * `gcp.folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - * * `gcp.folder.IAMBinding`: 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 folder are preserved. - * * `gcp.folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - * * `gcp.folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.folder.IAMPolicy` **cannot** be used in conjunction with `gcp.folder.IAMBinding`, `gcp.folder.IAMMember`, or `gcp.folder.IamAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.folder.IAMBinding` resources **can be** used in conjunction with `gcp.folder.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_folder\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your folder - * using this resource. Deleting a `gcp.folder.IAMPolicy` removes access - * from anyone without permissions on its parent folder/organization. Proceed with caution. - * It's not recommended to use `gcp.folder.IAMPolicy` with your provider folder - * to avoid locking yourself out, and it should generally only be used with folders - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.folder.IAMPolicy; - * import com.pulumi.gcp.folder.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var folder = new IAMPolicy("folder", IAMPolicyArgs.builder() - * .folder("folders/1234567") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.folder.IAMPolicy; - * import com.pulumi.gcp.folder.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .role("roles/compute.admin") - * .build()) - * .build()); - * - * var folder = new IAMPolicy("folder", IAMPolicyArgs.builder() - * .folder("folders/1234567") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_folder\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IAMBinding; - * import com.pulumi.gcp.folder.IAMBindingArgs; - * 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 folder = new IAMBinding("folder", IAMBindingArgs.builder() - * .folder("folders/1234567") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IAMBinding; - * import com.pulumi.gcp.folder.IAMBindingArgs; - * import com.pulumi.gcp.folder.inputs.IAMBindingConditionArgs; - * 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 folder = new IAMBinding("folder", IAMBindingArgs.builder() - * .condition(IAMBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .folder("folders/1234567") - * .members("user:jane@example.com") - * .role("roles/container.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_folder\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IAMMember; - * import com.pulumi.gcp.folder.IAMMemberArgs; - * 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 folder = new IAMMember("folder", IAMMemberArgs.builder() - * .folder("folders/1234567") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IAMMember; - * import com.pulumi.gcp.folder.IAMMemberArgs; - * import com.pulumi.gcp.folder.inputs.IAMMemberConditionArgs; - * 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 folder = new IAMMember("folder", IAMMemberArgs.builder() - * .condition(IAMMemberConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .folder("folders/1234567") - * .member("user:jane@example.com") - * .role("roles/firebase.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_folder\_iam\_audit\_config - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IamAuditConfig; - * import com.pulumi.gcp.folder.IamAuditConfigArgs; - * import com.pulumi.gcp.folder.inputs.IamAuditConfigAuditLogConfigArgs; - * 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 folder = new IamAuditConfig("folder", IamAuditConfigArgs.builder() - * .auditLogConfigs( - * IamAuditConfigAuditLogConfigArgs.builder() - * .logType("ADMIN_READ") - * .build(), - * IamAuditConfigAuditLogConfigArgs.builder() - * .exemptedMembers("user:joebloggs@hashicorp.com") - * .logType("DATA_READ") - * .build()) - * .folder("folders/1234567") - * .service("allServices") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/folder/IamAuditConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/folder/IamAuditConfig.java index b115401254..be010c08e6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/folder/IamAuditConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/folder/IamAuditConfig.java @@ -16,293 +16,6 @@ import javax.annotation.Nullable; /** - * Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - * - * * `gcp.folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - * * `gcp.folder.IAMBinding`: 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 folder are preserved. - * * `gcp.folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - * * `gcp.folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.folder.IAMPolicy` **cannot** be used in conjunction with `gcp.folder.IAMBinding`, `gcp.folder.IAMMember`, or `gcp.folder.IamAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.folder.IAMBinding` resources **can be** used in conjunction with `gcp.folder.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_folder\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your folder - * using this resource. Deleting a `gcp.folder.IAMPolicy` removes access - * from anyone without permissions on its parent folder/organization. Proceed with caution. - * It's not recommended to use `gcp.folder.IAMPolicy` with your provider folder - * to avoid locking yourself out, and it should generally only be used with folders - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.folder.IAMPolicy; - * import com.pulumi.gcp.folder.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var folder = new IAMPolicy("folder", IAMPolicyArgs.builder() - * .folder("folders/1234567") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.folder.IAMPolicy; - * import com.pulumi.gcp.folder.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .role("roles/compute.admin") - * .build()) - * .build()); - * - * var folder = new IAMPolicy("folder", IAMPolicyArgs.builder() - * .folder("folders/1234567") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_folder\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IAMBinding; - * import com.pulumi.gcp.folder.IAMBindingArgs; - * 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 folder = new IAMBinding("folder", IAMBindingArgs.builder() - * .folder("folders/1234567") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IAMBinding; - * import com.pulumi.gcp.folder.IAMBindingArgs; - * import com.pulumi.gcp.folder.inputs.IAMBindingConditionArgs; - * 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 folder = new IAMBinding("folder", IAMBindingArgs.builder() - * .condition(IAMBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .folder("folders/1234567") - * .members("user:jane@example.com") - * .role("roles/container.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_folder\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IAMMember; - * import com.pulumi.gcp.folder.IAMMemberArgs; - * 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 folder = new IAMMember("folder", IAMMemberArgs.builder() - * .folder("folders/1234567") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IAMMember; - * import com.pulumi.gcp.folder.IAMMemberArgs; - * import com.pulumi.gcp.folder.inputs.IAMMemberConditionArgs; - * 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 folder = new IAMMember("folder", IAMMemberArgs.builder() - * .condition(IAMMemberConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .folder("folders/1234567") - * .member("user:jane@example.com") - * .role("roles/firebase.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_folder\_iam\_audit\_config - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.folder.IamAuditConfig; - * import com.pulumi.gcp.folder.IamAuditConfigArgs; - * import com.pulumi.gcp.folder.inputs.IamAuditConfigAuditLogConfigArgs; - * 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 folder = new IamAuditConfig("folder", IamAuditConfigArgs.builder() - * .auditLogConfigs( - * IamAuditConfigAuditLogConfigArgs.builder() - * .logType("ADMIN_READ") - * .build(), - * IamAuditConfigAuditLogConfigArgs.builder() - * .exemptedMembers("user:joebloggs@hashicorp.com") - * .logType("DATA_READ") - * .build()) - * .folder("folders/1234567") - * .service("allServices") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/folder/inputs/IAMBindingConditionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/folder/inputs/IAMBindingConditionArgs.java index 1e75e43ebf..b7ee82d409 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/folder/inputs/IAMBindingConditionArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/folder/inputs/IAMBindingConditionArgs.java @@ -15,23 +15,47 @@ public final class IAMBindingConditionArgs extends com.pulumi.resources.Resource public static final IAMBindingConditionArgs Empty = new IAMBindingConditionArgs(); + /** + * An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + */ @Import(name="description") private @Nullable Output description; + /** + * @return An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + */ public Optional> description() { return Optional.ofNullable(this.description); } + /** + * Textual representation of an expression in Common Expression Language syntax. + * + */ @Import(name="expression", required=true) private Output expression; + /** + * @return Textual representation of an expression in Common Expression Language syntax. + * + */ public Output expression() { return this.expression; } + /** + * A title for the expression, i.e. a short string describing its purpose. + * + */ @Import(name="title", required=true) private Output title; + /** + * @return A title for the expression, i.e. a short string describing its purpose. + * + */ public Output title() { return this.title; } @@ -62,29 +86,65 @@ public Builder(IAMBindingConditionArgs defaults) { $ = new IAMBindingConditionArgs(Objects.requireNonNull(defaults)); } + /** + * @param description An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + * @return builder + * + */ public Builder description(@Nullable Output description) { $.description = description; return this; } + /** + * @param description An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + * @return builder + * + */ public Builder description(String description) { return description(Output.of(description)); } + /** + * @param expression Textual representation of an expression in Common Expression Language syntax. + * + * @return builder + * + */ public Builder expression(Output expression) { $.expression = expression; return this; } + /** + * @param expression Textual representation of an expression in Common Expression Language syntax. + * + * @return builder + * + */ public Builder expression(String expression) { return expression(Output.of(expression)); } + /** + * @param title A title for the expression, i.e. a short string describing its purpose. + * + * @return builder + * + */ public Builder title(Output title) { $.title = title; return this; } + /** + * @param title A title for the expression, i.e. a short string describing its purpose. + * + * @return builder + * + */ public Builder title(String title) { return title(Output.of(title)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/folder/inputs/IAMBindingState.java b/sdk/java/src/main/java/com/pulumi/gcp/folder/inputs/IAMBindingState.java index 5fa58ab94c..4d4796bec6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/folder/inputs/IAMBindingState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/folder/inputs/IAMBindingState.java @@ -17,9 +17,19 @@ public final class IAMBindingState extends com.pulumi.resources.ResourceArgs { public static final IAMBindingState Empty = new IAMBindingState(); + /** + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + */ @Import(name="condition") private @Nullable Output condition; + /** + * @return An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + */ public Optional> condition() { return Optional.ofNullable(this.condition); } @@ -54,29 +64,9 @@ public Optional> folder() { return Optional.ofNullable(this.folder); } - /** - * An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - */ @Import(name="members") private @Nullable Output> members; - /** - * @return An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - */ public Optional>> members() { return Optional.ofNullable(this.members); } @@ -84,7 +74,7 @@ public Optional>> members() { /** * The role that should be applied. Only one * `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * */ @Import(name="role") @@ -93,7 +83,7 @@ public Optional>> members() { /** * @return The role that should be applied. Only one * `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * */ public Optional> role() { @@ -128,11 +118,25 @@ public Builder(IAMBindingState defaults) { $ = new IAMBindingState(Objects.requireNonNull(defaults)); } + /** + * @param condition An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + * @return builder + * + */ public Builder condition(@Nullable Output condition) { $.condition = condition; return this; } + /** + * @param condition An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + * @return builder + * + */ public Builder condition(IAMBindingConditionArgs condition) { return condition(Output.of(condition)); } @@ -179,51 +183,15 @@ public Builder folder(String folder) { return folder(Output.of(folder)); } - /** - * @param members An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - * @return builder - * - */ public Builder members(@Nullable Output> members) { $.members = members; return this; } - /** - * @param members An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - * @return builder - * - */ public Builder members(List members) { return members(Output.of(members)); } - /** - * @param members An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - * @return builder - * - */ public Builder members(String... members) { return members(List.of(members)); } @@ -231,7 +199,7 @@ public Builder members(String... members) { /** * @param role The role that should be applied. Only one * `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * * @return builder * @@ -244,7 +212,7 @@ public Builder role(@Nullable Output role) { /** * @param role The role that should be applied. Only one * `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/folder/outputs/IAMBindingCondition.java b/sdk/java/src/main/java/com/pulumi/gcp/folder/outputs/IAMBindingCondition.java index b48fc5434e..0543e64616 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/folder/outputs/IAMBindingCondition.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/folder/outputs/IAMBindingCondition.java @@ -11,17 +11,41 @@ @CustomType public final class IAMBindingCondition { + /** + * @return An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + */ private @Nullable String description; + /** + * @return Textual representation of an expression in Common Expression Language syntax. + * + */ private String expression; + /** + * @return A title for the expression, i.e. a short string describing its purpose. + * + */ private String title; private IAMBindingCondition() {} + /** + * @return An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + */ public Optional description() { return Optional.ofNullable(this.description); } + /** + * @return Textual representation of an expression in Common Expression Language syntax. + * + */ public String expression() { return this.expression; } + /** + * @return A title for the expression, i.e. a short string describing its purpose. + * + */ public String title() { return this.title; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DatasetIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DatasetIamBinding.java index 0047457514..35aa611583 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DatasetIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DatasetIamBinding.java @@ -17,120 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - * - * * `gcp.healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - * * `gcp.healthcare.DatasetIamBinding`: 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 dataset are preserved. - * * `gcp.healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - * - * > **Note:** `gcp.healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DatasetIamBinding` and `gcp.healthcare.DatasetIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.DatasetIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_dataset\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.healthcare.DatasetIamPolicy; - * import com.pulumi.gcp.healthcare.DatasetIamPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var dataset = new DatasetIamPolicy("dataset", DatasetIamPolicyArgs.builder() - * .datasetId("your-dataset-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_dataset\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.DatasetIamBinding; - * import com.pulumi.gcp.healthcare.DatasetIamBindingArgs; - * 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 dataset = new DatasetIamBinding("dataset", DatasetIamBindingArgs.builder() - * .datasetId("your-dataset-id") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_dataset\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.DatasetIamMember; - * import com.pulumi.gcp.healthcare.DatasetIamMemberArgs; - * 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 dataset = new DatasetIamMember("dataset", DatasetIamMemberArgs.builder() - * .datasetId("your-dataset-id") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DatasetIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DatasetIamMember.java index 87c5b72ee7..1c010f184b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DatasetIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DatasetIamMember.java @@ -16,120 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - * - * * `gcp.healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - * * `gcp.healthcare.DatasetIamBinding`: 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 dataset are preserved. - * * `gcp.healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - * - * > **Note:** `gcp.healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DatasetIamBinding` and `gcp.healthcare.DatasetIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.DatasetIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_dataset\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.healthcare.DatasetIamPolicy; - * import com.pulumi.gcp.healthcare.DatasetIamPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var dataset = new DatasetIamPolicy("dataset", DatasetIamPolicyArgs.builder() - * .datasetId("your-dataset-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_dataset\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.DatasetIamBinding; - * import com.pulumi.gcp.healthcare.DatasetIamBindingArgs; - * 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 dataset = new DatasetIamBinding("dataset", DatasetIamBindingArgs.builder() - * .datasetId("your-dataset-id") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_dataset\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.DatasetIamMember; - * import com.pulumi.gcp.healthcare.DatasetIamMemberArgs; - * 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 dataset = new DatasetIamMember("dataset", DatasetIamMemberArgs.builder() - * .datasetId("your-dataset-id") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DatasetIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DatasetIamPolicy.java index 789eeb38ed..55e43c044c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DatasetIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DatasetIamPolicy.java @@ -14,120 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - * - * * `gcp.healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - * * `gcp.healthcare.DatasetIamBinding`: 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 dataset are preserved. - * * `gcp.healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - * - * > **Note:** `gcp.healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DatasetIamBinding` and `gcp.healthcare.DatasetIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.DatasetIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_dataset\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.healthcare.DatasetIamPolicy; - * import com.pulumi.gcp.healthcare.DatasetIamPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var dataset = new DatasetIamPolicy("dataset", DatasetIamPolicyArgs.builder() - * .datasetId("your-dataset-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_dataset\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.DatasetIamBinding; - * import com.pulumi.gcp.healthcare.DatasetIamBindingArgs; - * 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 dataset = new DatasetIamBinding("dataset", DatasetIamBindingArgs.builder() - * .datasetId("your-dataset-id") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_dataset\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.DatasetIamMember; - * import com.pulumi.gcp.healthcare.DatasetIamMemberArgs; - * 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 dataset = new DatasetIamMember("dataset", DatasetIamMemberArgs.builder() - * .datasetId("your-dataset-id") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStore.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStore.java index 4b4d1d77df..11e5c84935 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStore.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStore.java @@ -264,18 +264,18 @@ public Output selfLink() { return this.selfLink; } /** - * To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. * */ @Export(name="streamConfigs", type=List.class, parameters={DicomStoreStreamConfig.class}) private Output> streamConfigs; /** - * @return To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * @return To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. * */ public Output>> streamConfigs() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreArgs.java index b66395f064..a0d2d30fbc 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreArgs.java @@ -100,18 +100,18 @@ public Optional> notificationConfig() { } /** - * To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. * */ @Import(name="streamConfigs") private @Nullable Output> streamConfigs; /** - * @return To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * @return To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. * */ public Optional>> streamConfigs() { @@ -251,9 +251,9 @@ public Builder notificationConfig(DicomStoreNotificationConfigArgs notificationC } /** - * @param streamConfigs To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * @param streamConfigs To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. * * @return builder * @@ -264,9 +264,9 @@ public Builder streamConfigs(@Nullable Output> } /** - * @param streamConfigs To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * @param streamConfigs To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. * * @return builder * @@ -276,9 +276,9 @@ public Builder streamConfigs(List streamConfigs) { } /** - * @param streamConfigs To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * @param streamConfigs To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreIamBinding.java index 3632c55aff..0cb5d18790 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreIamBinding.java @@ -17,120 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - * * `gcp.healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - * * `gcp.healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - * - * > **Note:** `gcp.healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DicomStoreIamBinding` and `gcp.healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_dicom\_store\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.healthcare.DicomStoreIamPolicy; - * import com.pulumi.gcp.healthcare.DicomStoreIamPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var dicomStore = new DicomStoreIamPolicy("dicomStore", DicomStoreIamPolicyArgs.builder() - * .dicomStoreId("your-dicom-store-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_dicom\_store\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.DicomStoreIamBinding; - * import com.pulumi.gcp.healthcare.DicomStoreIamBindingArgs; - * 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 dicomStore = new DicomStoreIamBinding("dicomStore", DicomStoreIamBindingArgs.builder() - * .dicomStoreId("your-dicom-store-id") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_dicom\_store\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.DicomStoreIamMember; - * import com.pulumi.gcp.healthcare.DicomStoreIamMemberArgs; - * 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 dicomStore = new DicomStoreIamMember("dicomStore", DicomStoreIamMemberArgs.builder() - * .dicomStoreId("your-dicom-store-id") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreIamMember.java index 856b6a2256..c75251a4ab 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreIamMember.java @@ -16,120 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - * * `gcp.healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - * * `gcp.healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - * - * > **Note:** `gcp.healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DicomStoreIamBinding` and `gcp.healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_dicom\_store\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.healthcare.DicomStoreIamPolicy; - * import com.pulumi.gcp.healthcare.DicomStoreIamPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var dicomStore = new DicomStoreIamPolicy("dicomStore", DicomStoreIamPolicyArgs.builder() - * .dicomStoreId("your-dicom-store-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_dicom\_store\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.DicomStoreIamBinding; - * import com.pulumi.gcp.healthcare.DicomStoreIamBindingArgs; - * 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 dicomStore = new DicomStoreIamBinding("dicomStore", DicomStoreIamBindingArgs.builder() - * .dicomStoreId("your-dicom-store-id") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_dicom\_store\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.DicomStoreIamMember; - * import com.pulumi.gcp.healthcare.DicomStoreIamMemberArgs; - * 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 dicomStore = new DicomStoreIamMember("dicomStore", DicomStoreIamMemberArgs.builder() - * .dicomStoreId("your-dicom-store-id") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreIamPolicy.java index 722383c015..2c9ad5e667 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/DicomStoreIamPolicy.java @@ -14,120 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - * * `gcp.healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - * * `gcp.healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - * - * > **Note:** `gcp.healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DicomStoreIamBinding` and `gcp.healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_dicom\_store\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.healthcare.DicomStoreIamPolicy; - * import com.pulumi.gcp.healthcare.DicomStoreIamPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var dicomStore = new DicomStoreIamPolicy("dicomStore", DicomStoreIamPolicyArgs.builder() - * .dicomStoreId("your-dicom-store-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_dicom\_store\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.DicomStoreIamBinding; - * import com.pulumi.gcp.healthcare.DicomStoreIamBindingArgs; - * 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 dicomStore = new DicomStoreIamBinding("dicomStore", DicomStoreIamBindingArgs.builder() - * .dicomStoreId("your-dicom-store-id") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_dicom\_store\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.DicomStoreIamMember; - * import com.pulumi.gcp.healthcare.DicomStoreIamMemberArgs; - * 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 dicomStore = new DicomStoreIamMember("dicomStore", DicomStoreIamMemberArgs.builder() - * .dicomStoreId("your-dicom-store-id") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStore.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStore.java index 79f3291b03..968fa00218 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStore.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStore.java @@ -85,6 +85,10 @@ * import com.pulumi.Context; * import com.pulumi.Pulumi; * import com.pulumi.core.Output; + * import com.pulumi.gcp.organizations.OrganizationsFunctions; + * import com.pulumi.gcp.organizations.inputs.GetProjectArgs; + * import com.pulumi.gcp.projects.IAMMember; + * import com.pulumi.gcp.projects.IAMMemberArgs; * import com.pulumi.gcp.healthcare.Dataset; * import com.pulumi.gcp.healthcare.DatasetArgs; * import com.pulumi.gcp.bigquery.Dataset; @@ -95,6 +99,7 @@ * import com.pulumi.gcp.healthcare.inputs.FhirStoreStreamConfigBigqueryDestinationArgs; * import com.pulumi.gcp.healthcare.inputs.FhirStoreStreamConfigBigqueryDestinationSchemaConfigArgs; * import com.pulumi.gcp.pubsub.Topic; + * import com.pulumi.resources.CustomResourceOptions; * import java.util.List; * import java.util.ArrayList; * import java.util.Map; @@ -108,6 +113,20 @@ * } * * public static void stack(Context ctx) { + * final var project = OrganizationsFunctions.getProject(); + * + * var bigqueryEditor = new IAMMember("bigqueryEditor", IAMMemberArgs.builder() + * .project(project.applyValue(getProjectResult -> getProjectResult.projectId())) + * .role("roles/bigquery.dataEditor") + * .member(String.format("serviceAccount:service-%s@gcp-sa-healthcare.iam.gserviceaccount.com", project.applyValue(getProjectResult -> getProjectResult.number()))) + * .build()); + * + * var bigqueryJobUser = new IAMMember("bigqueryJobUser", IAMMemberArgs.builder() + * .project(project.applyValue(getProjectResult -> getProjectResult.projectId())) + * .role("roles/bigquery.jobUser") + * .member(String.format("serviceAccount:service-%s@gcp-sa-healthcare.iam.gserviceaccount.com", project.applyValue(getProjectResult -> getProjectResult.number()))) + * .build()); + * * var dataset = new Dataset("dataset", DatasetArgs.builder() * .location("us-central1") * .build()); @@ -134,14 +153,18 @@ * .datasetUri(Output.tuple(bqDataset.project(), bqDataset.datasetId()).applyValue(values -> { * var project = values.t1; * var datasetId = values.t2; - * return String.format("bq://%s.%s", project,datasetId); + * return String.format("bq://%s.%s", project.applyValue(getProjectResult -> getProjectResult),datasetId); * })) * .schemaConfig(FhirStoreStreamConfigBigqueryDestinationSchemaConfigArgs.builder() * .recursiveStructureDepth(3) * .build()) * .build()) * .build()) - * .build()); + * .build(), CustomResourceOptions.builder() + * .dependsOn( + * bigqueryEditor, + * bigqueryJobUser) + * .build()); * * var topic = new Topic("topic"); * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreIamBinding.java index 04592d511a..47707c991e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreIamBinding.java @@ -17,120 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - * * `gcp.healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - * * `gcp.healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - * - * > **Note:** `gcp.healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.FhirStoreIamBinding` and `gcp.healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_fhir\_store\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.healthcare.FhirStoreIamPolicy; - * import com.pulumi.gcp.healthcare.FhirStoreIamPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var fhirStore = new FhirStoreIamPolicy("fhirStore", FhirStoreIamPolicyArgs.builder() - * .fhirStoreId("your-fhir-store-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_fhir\_store\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.FhirStoreIamBinding; - * import com.pulumi.gcp.healthcare.FhirStoreIamBindingArgs; - * 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 fhirStore = new FhirStoreIamBinding("fhirStore", FhirStoreIamBindingArgs.builder() - * .fhirStoreId("your-fhir-store-id") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_fhir\_store\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.FhirStoreIamMember; - * import com.pulumi.gcp.healthcare.FhirStoreIamMemberArgs; - * 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 fhirStore = new FhirStoreIamMember("fhirStore", FhirStoreIamMemberArgs.builder() - * .fhirStoreId("your-fhir-store-id") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreIamMember.java index a2df93612c..7f63c04a4f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreIamMember.java @@ -16,120 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - * * `gcp.healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - * * `gcp.healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - * - * > **Note:** `gcp.healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.FhirStoreIamBinding` and `gcp.healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_fhir\_store\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.healthcare.FhirStoreIamPolicy; - * import com.pulumi.gcp.healthcare.FhirStoreIamPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var fhirStore = new FhirStoreIamPolicy("fhirStore", FhirStoreIamPolicyArgs.builder() - * .fhirStoreId("your-fhir-store-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_fhir\_store\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.FhirStoreIamBinding; - * import com.pulumi.gcp.healthcare.FhirStoreIamBindingArgs; - * 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 fhirStore = new FhirStoreIamBinding("fhirStore", FhirStoreIamBindingArgs.builder() - * .fhirStoreId("your-fhir-store-id") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_fhir\_store\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.FhirStoreIamMember; - * import com.pulumi.gcp.healthcare.FhirStoreIamMemberArgs; - * 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 fhirStore = new FhirStoreIamMember("fhirStore", FhirStoreIamMemberArgs.builder() - * .fhirStoreId("your-fhir-store-id") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreIamPolicy.java index a54147429d..6407cf803c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/FhirStoreIamPolicy.java @@ -14,120 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - * * `gcp.healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - * * `gcp.healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - * - * > **Note:** `gcp.healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.FhirStoreIamBinding` and `gcp.healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_fhir\_store\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.healthcare.FhirStoreIamPolicy; - * import com.pulumi.gcp.healthcare.FhirStoreIamPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var fhirStore = new FhirStoreIamPolicy("fhirStore", FhirStoreIamPolicyArgs.builder() - * .fhirStoreId("your-fhir-store-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_fhir\_store\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.FhirStoreIamBinding; - * import com.pulumi.gcp.healthcare.FhirStoreIamBindingArgs; - * 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 fhirStore = new FhirStoreIamBinding("fhirStore", FhirStoreIamBindingArgs.builder() - * .fhirStoreId("your-fhir-store-id") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_fhir\_store\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.FhirStoreIamMember; - * import com.pulumi.gcp.healthcare.FhirStoreIamMemberArgs; - * 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 fhirStore = new FhirStoreIamMember("fhirStore", FhirStoreIamMemberArgs.builder() - * .fhirStoreId("your-fhir-store-id") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/Hl7StoreIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/Hl7StoreIamBinding.java index b9355da18c..950c2fe7f7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/Hl7StoreIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/Hl7StoreIamBinding.java @@ -17,120 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - * * `gcp.healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - * * `gcp.healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - * - * > **Note:** `gcp.healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.Hl7StoreIamBinding` and `gcp.healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.healthcare.Hl7StoreIamPolicy; - * import com.pulumi.gcp.healthcare.Hl7StoreIamPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var hl7V2Store = new Hl7StoreIamPolicy("hl7V2Store", Hl7StoreIamPolicyArgs.builder() - * .hl7V2StoreId("your-hl7-v2-store-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.Hl7StoreIamBinding; - * import com.pulumi.gcp.healthcare.Hl7StoreIamBindingArgs; - * 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 hl7V2Store = new Hl7StoreIamBinding("hl7V2Store", Hl7StoreIamBindingArgs.builder() - * .hl7V2StoreId("your-hl7-v2-store-id") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.Hl7StoreIamMember; - * import com.pulumi.gcp.healthcare.Hl7StoreIamMemberArgs; - * 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 hl7V2Store = new Hl7StoreIamMember("hl7V2Store", Hl7StoreIamMemberArgs.builder() - * .hl7V2StoreId("your-hl7-v2-store-id") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/Hl7StoreIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/Hl7StoreIamMember.java index 8d521140d2..9abe4f38f5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/Hl7StoreIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/Hl7StoreIamMember.java @@ -16,120 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - * * `gcp.healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - * * `gcp.healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - * - * > **Note:** `gcp.healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.Hl7StoreIamBinding` and `gcp.healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.healthcare.Hl7StoreIamPolicy; - * import com.pulumi.gcp.healthcare.Hl7StoreIamPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var hl7V2Store = new Hl7StoreIamPolicy("hl7V2Store", Hl7StoreIamPolicyArgs.builder() - * .hl7V2StoreId("your-hl7-v2-store-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.Hl7StoreIamBinding; - * import com.pulumi.gcp.healthcare.Hl7StoreIamBindingArgs; - * 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 hl7V2Store = new Hl7StoreIamBinding("hl7V2Store", Hl7StoreIamBindingArgs.builder() - * .hl7V2StoreId("your-hl7-v2-store-id") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.Hl7StoreIamMember; - * import com.pulumi.gcp.healthcare.Hl7StoreIamMemberArgs; - * 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 hl7V2Store = new Hl7StoreIamMember("hl7V2Store", Hl7StoreIamMemberArgs.builder() - * .hl7V2StoreId("your-hl7-v2-store-id") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/Hl7StoreIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/Hl7StoreIamPolicy.java index 138ee8b5a6..455cad3c03 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/Hl7StoreIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/Hl7StoreIamPolicy.java @@ -14,120 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - * * `gcp.healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - * * `gcp.healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - * - * > **Note:** `gcp.healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.Hl7StoreIamBinding` and `gcp.healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.healthcare.Hl7StoreIamPolicy; - * import com.pulumi.gcp.healthcare.Hl7StoreIamPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var hl7V2Store = new Hl7StoreIamPolicy("hl7V2Store", Hl7StoreIamPolicyArgs.builder() - * .hl7V2StoreId("your-hl7-v2-store-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.Hl7StoreIamBinding; - * import com.pulumi.gcp.healthcare.Hl7StoreIamBindingArgs; - * 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 hl7V2Store = new Hl7StoreIamBinding("hl7V2Store", Hl7StoreIamBindingArgs.builder() - * .hl7V2StoreId("your-hl7-v2-store-id") - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.healthcare.Hl7StoreIamMember; - * import com.pulumi.gcp.healthcare.Hl7StoreIamMemberArgs; - * 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 hl7V2Store = new Hl7StoreIamMember("hl7V2Store", Hl7StoreIamMemberArgs.builder() - * .hl7V2StoreId("your-hl7-v2-store-id") - * .member("user:jane@example.com") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/inputs/DicomStoreState.java b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/inputs/DicomStoreState.java index 2e29c71917..f23a2b2fdd 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/healthcare/inputs/DicomStoreState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/healthcare/inputs/DicomStoreState.java @@ -115,18 +115,18 @@ public Optional> selfLink() { } /** - * To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. * */ @Import(name="streamConfigs") private @Nullable Output> streamConfigs; /** - * @return To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * @return To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. * */ public Optional>> streamConfigs() { @@ -288,9 +288,9 @@ public Builder selfLink(String selfLink) { } /** - * @param streamConfigs To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * @param streamConfigs To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. * * @return builder * @@ -301,9 +301,9 @@ public Builder streamConfigs(@Nullable Output> } /** - * @param streamConfigs To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * @param streamConfigs To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. * * @return builder * @@ -313,9 +313,9 @@ public Builder streamConfigs(List streamConfigs) { } /** - * @param streamConfigs To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * @param streamConfigs To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/AccessBoundaryPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/AccessBoundaryPolicy.java new file mode 100644 index 0000000000..74ba6d5c91 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/AccessBoundaryPolicy.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.iam; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Export; +import com.pulumi.core.annotations.ResourceType; +import com.pulumi.core.internal.Codegen; +import com.pulumi.gcp.Utilities; +import com.pulumi.gcp.iam.AccessBoundaryPolicyArgs; +import com.pulumi.gcp.iam.inputs.AccessBoundaryPolicyState; +import com.pulumi.gcp.iam.outputs.AccessBoundaryPolicyRule; +import java.lang.String; +import java.util.List; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * Represents a collection of access boundary policies to apply to a given resource. + * **NOTE**: This is a private feature and users should contact GCP support + * if they would like to test it. + * + * ## Example Usage + * + * ## Import + * + * AccessBoundaryPolicy can be imported using any of these accepted formats + * + * ```sh + * $ pulumi import gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy default {{parent}}/{{name}} + * ``` + * + */ +@ResourceType(type="gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy") +public class AccessBoundaryPolicy extends com.pulumi.resources.CustomResource { + /** + * The display name of the rule. + * + */ + @Export(name="displayName", type=String.class, parameters={}) + private Output displayName; + + /** + * @return The display name of the rule. + * + */ + public Output> displayName() { + return Codegen.optional(this.displayName); + } + /** + * The hash of the resource. Used internally during updates. + * + */ + @Export(name="etag", type=String.class, parameters={}) + private Output etag; + + /** + * @return The hash of the resource. Used internally during updates. + * + */ + public Output etag() { + return this.etag; + } + /** + * The name of the policy. + * + */ + @Export(name="name", type=String.class, parameters={}) + private Output name; + + /** + * @return The name of the policy. + * + */ + public Output name() { + return this.name; + } + /** + * The attachment point is identified by its URL-encoded full resource name. + * + */ + @Export(name="parent", type=String.class, parameters={}) + private Output parent; + + /** + * @return The attachment point is identified by its URL-encoded full resource name. + * + */ + public Output parent() { + return this.parent; + } + /** + * Rules to be applied. + * Structure is documented below. + * + */ + @Export(name="rules", type=List.class, parameters={AccessBoundaryPolicyRule.class}) + private Output> rules; + + /** + * @return Rules to be applied. + * Structure is documented below. + * + */ + public Output> rules() { + return this.rules; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public AccessBoundaryPolicy(String name) { + this(name, AccessBoundaryPolicyArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public AccessBoundaryPolicy(String name, AccessBoundaryPolicyArgs 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 AccessBoundaryPolicy(String name, AccessBoundaryPolicyArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy", name, args == null ? AccessBoundaryPolicyArgs.Empty : args, makeResourceOptions(options, Codegen.empty())); + } + + private AccessBoundaryPolicy(String name, Output id, @Nullable AccessBoundaryPolicyState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy", name, state, makeResourceOptions(options, id)); + } + + 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 AccessBoundaryPolicy get(String name, Output id, @Nullable AccessBoundaryPolicyState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new AccessBoundaryPolicy(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/AccessBoundaryPolicyArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/AccessBoundaryPolicyArgs.java new file mode 100644 index 0000000000..92e8b4e182 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/AccessBoundaryPolicyArgs.java @@ -0,0 +1,213 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.iam.inputs.AccessBoundaryPolicyRuleArgs; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class AccessBoundaryPolicyArgs extends com.pulumi.resources.ResourceArgs { + + public static final AccessBoundaryPolicyArgs Empty = new AccessBoundaryPolicyArgs(); + + /** + * The display name of the rule. + * + */ + @Import(name="displayName") + private @Nullable Output displayName; + + /** + * @return The display name of the rule. + * + */ + public Optional> displayName() { + return Optional.ofNullable(this.displayName); + } + + /** + * The name of the policy. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The name of the policy. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The attachment point is identified by its URL-encoded full resource name. + * + */ + @Import(name="parent", required=true) + private Output parent; + + /** + * @return The attachment point is identified by its URL-encoded full resource name. + * + */ + public Output parent() { + return this.parent; + } + + /** + * Rules to be applied. + * Structure is documented below. + * + */ + @Import(name="rules", required=true) + private Output> rules; + + /** + * @return Rules to be applied. + * Structure is documented below. + * + */ + public Output> rules() { + return this.rules; + } + + private AccessBoundaryPolicyArgs() {} + + private AccessBoundaryPolicyArgs(AccessBoundaryPolicyArgs $) { + this.displayName = $.displayName; + this.name = $.name; + this.parent = $.parent; + this.rules = $.rules; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(AccessBoundaryPolicyArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private AccessBoundaryPolicyArgs $; + + public Builder() { + $ = new AccessBoundaryPolicyArgs(); + } + + public Builder(AccessBoundaryPolicyArgs defaults) { + $ = new AccessBoundaryPolicyArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param displayName The display name of the rule. + * + * @return builder + * + */ + public Builder displayName(@Nullable Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName The display name of the rule. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + /** + * @param name The name of the policy. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The name of the policy. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param parent The attachment point is identified by its URL-encoded full resource name. + * + * @return builder + * + */ + public Builder parent(Output parent) { + $.parent = parent; + return this; + } + + /** + * @param parent The attachment point is identified by its URL-encoded full resource name. + * + * @return builder + * + */ + public Builder parent(String parent) { + return parent(Output.of(parent)); + } + + /** + * @param rules Rules to be applied. + * Structure is documented below. + * + * @return builder + * + */ + public Builder rules(Output> rules) { + $.rules = rules; + return this; + } + + /** + * @param rules Rules to be applied. + * Structure is documented below. + * + * @return builder + * + */ + public Builder rules(List rules) { + return rules(Output.of(rules)); + } + + /** + * @param rules Rules to be applied. + * Structure is documented below. + * + * @return builder + * + */ + public Builder rules(AccessBoundaryPolicyRuleArgs... rules) { + return rules(List.of(rules)); + } + + public AccessBoundaryPolicyArgs build() { + $.parent = Objects.requireNonNull($.parent, "expected parameter 'parent' to be non-null"); + $.rules = Objects.requireNonNull($.rules, "expected parameter 'rules' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/IamFunctions.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/IamFunctions.java index 1af20a562d..1bc2f572ac 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/iam/IamFunctions.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/IamFunctions.java @@ -336,8 +336,6 @@ public static CompletableFuture getTestablePermiss return Deployment.getInstance().invokeAsync("gcp:iam/getTestablePermissions:getTestablePermissions", TypeShape.of(GetTestablePermissionsResult.class), args, Utilities.withVersion(options)); } /** - * Get a IAM workload identity pool from Google Cloud by its id. - * > **Note:** The following resource requires the Beta IAM role `roles/iam.workloadIdentityPoolAdmin` in order to succeed. `OWNER` and `EDITOR` roles do not include the necessary permissions. * ## Example Usage * ```java * package generated_program; @@ -373,8 +371,6 @@ public static Output getWorkloadIdentityPool(GetW return getWorkloadIdentityPool(args, InvokeOptions.Empty); } /** - * Get a IAM workload identity pool from Google Cloud by its id. - * > **Note:** The following resource requires the Beta IAM role `roles/iam.workloadIdentityPoolAdmin` in order to succeed. `OWNER` and `EDITOR` roles do not include the necessary permissions. * ## Example Usage * ```java * package generated_program; @@ -410,8 +406,6 @@ public static CompletableFuture getWorkloadIdenti return getWorkloadIdentityPoolPlain(args, InvokeOptions.Empty); } /** - * Get a IAM workload identity pool from Google Cloud by its id. - * > **Note:** The following resource requires the Beta IAM role `roles/iam.workloadIdentityPoolAdmin` in order to succeed. `OWNER` and `EDITOR` roles do not include the necessary permissions. * ## Example Usage * ```java * package generated_program; @@ -447,8 +441,6 @@ public static Output getWorkloadIdentityPool(GetW return Deployment.getInstance().invoke("gcp:iam/getWorkloadIdentityPool:getWorkloadIdentityPool", TypeShape.of(GetWorkloadIdentityPoolResult.class), args, Utilities.withVersion(options)); } /** - * Get a IAM workload identity pool from Google Cloud by its id. - * > **Note:** The following resource requires the Beta IAM role `roles/iam.workloadIdentityPoolAdmin` in order to succeed. `OWNER` and `EDITOR` roles do not include the necessary permissions. * ## Example Usage * ```java * package generated_program; @@ -484,8 +476,6 @@ public static CompletableFuture getWorkloadIdenti return Deployment.getInstance().invokeAsync("gcp:iam/getWorkloadIdentityPool:getWorkloadIdentityPool", TypeShape.of(GetWorkloadIdentityPoolResult.class), args, Utilities.withVersion(options)); } /** - * Get a IAM workload identity provider from Google Cloud by its id. - * * ## Example Usage * ```java * package generated_program; @@ -522,8 +512,6 @@ public static Output getWorkloadIdentityP return getWorkloadIdentityPoolProvider(args, InvokeOptions.Empty); } /** - * Get a IAM workload identity provider from Google Cloud by its id. - * * ## Example Usage * ```java * package generated_program; @@ -560,8 +548,6 @@ public static CompletableFuture getWorklo return getWorkloadIdentityPoolProviderPlain(args, InvokeOptions.Empty); } /** - * Get a IAM workload identity provider from Google Cloud by its id. - * * ## Example Usage * ```java * package generated_program; @@ -598,8 +584,6 @@ public static Output getWorkloadIdentityP return Deployment.getInstance().invoke("gcp:iam/getWorkloadIdentityPoolProvider:getWorkloadIdentityPoolProvider", TypeShape.of(GetWorkloadIdentityPoolProviderResult.class), args, Utilities.withVersion(options)); } /** - * Get a IAM workload identity provider from Google Cloud by its id. - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/WorkforcePoolProvider.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/WorkforcePoolProvider.java index 354edf661f..7184a1dca9 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/iam/WorkforcePoolProvider.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/WorkforcePoolProvider.java @@ -160,7 +160,7 @@ * .providerId("example-prvdr") * .attributeMapping(Map.of("google.subject", "assertion.sub")) * .oidc(WorkforcePoolProviderOidcArgs.builder() - * .issuerUri("https://accounts.google.com") + * .issuerUri("https://accounts.thirdparty.com") * .clientId("client-id") * .build()) * .build()); @@ -205,7 +205,7 @@ * .providerId("example-prvdr") * .attributeMapping(Map.of("google.subject", "assertion.sub")) * .oidc(WorkforcePoolProviderOidcArgs.builder() - * .issuerUri("https://accounts.google.com") + * .issuerUri("https://accounts.thirdparty.com") * .clientId("client-id") * .build()) * .displayName("Display name") diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleArgs.java new file mode 100644 index 0000000000..f7d55abfc2 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleArgs.java @@ -0,0 +1,173 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.iam.inputs.AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class AccessBoundaryPolicyRuleAccessBoundaryRuleArgs extends com.pulumi.resources.ResourceArgs { + + public static final AccessBoundaryPolicyRuleAccessBoundaryRuleArgs Empty = new AccessBoundaryPolicyRuleAccessBoundaryRuleArgs(); + + /** + * The availability condition further constrains the access allowed by the access boundary rule. + * Structure is documented below. + * + */ + @Import(name="availabilityCondition") + private @Nullable Output availabilityCondition; + + /** + * @return The availability condition further constrains the access allowed by the access boundary rule. + * Structure is documented below. + * + */ + public Optional> availabilityCondition() { + return Optional.ofNullable(this.availabilityCondition); + } + + /** + * A list of permissions that may be allowed for use on the specified resource. + * + */ + @Import(name="availablePermissions") + private @Nullable Output> availablePermissions; + + /** + * @return A list of permissions that may be allowed for use on the specified resource. + * + */ + public Optional>> availablePermissions() { + return Optional.ofNullable(this.availablePermissions); + } + + /** + * The full resource name of a Google Cloud resource entity. + * + */ + @Import(name="availableResource") + private @Nullable Output availableResource; + + /** + * @return The full resource name of a Google Cloud resource entity. + * + */ + public Optional> availableResource() { + return Optional.ofNullable(this.availableResource); + } + + private AccessBoundaryPolicyRuleAccessBoundaryRuleArgs() {} + + private AccessBoundaryPolicyRuleAccessBoundaryRuleArgs(AccessBoundaryPolicyRuleAccessBoundaryRuleArgs $) { + this.availabilityCondition = $.availabilityCondition; + this.availablePermissions = $.availablePermissions; + this.availableResource = $.availableResource; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(AccessBoundaryPolicyRuleAccessBoundaryRuleArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private AccessBoundaryPolicyRuleAccessBoundaryRuleArgs $; + + public Builder() { + $ = new AccessBoundaryPolicyRuleAccessBoundaryRuleArgs(); + } + + public Builder(AccessBoundaryPolicyRuleAccessBoundaryRuleArgs defaults) { + $ = new AccessBoundaryPolicyRuleAccessBoundaryRuleArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param availabilityCondition The availability condition further constrains the access allowed by the access boundary rule. + * Structure is documented below. + * + * @return builder + * + */ + public Builder availabilityCondition(@Nullable Output availabilityCondition) { + $.availabilityCondition = availabilityCondition; + return this; + } + + /** + * @param availabilityCondition The availability condition further constrains the access allowed by the access boundary rule. + * Structure is documented below. + * + * @return builder + * + */ + public Builder availabilityCondition(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs availabilityCondition) { + return availabilityCondition(Output.of(availabilityCondition)); + } + + /** + * @param availablePermissions A list of permissions that may be allowed for use on the specified resource. + * + * @return builder + * + */ + public Builder availablePermissions(@Nullable Output> availablePermissions) { + $.availablePermissions = availablePermissions; + return this; + } + + /** + * @param availablePermissions A list of permissions that may be allowed for use on the specified resource. + * + * @return builder + * + */ + public Builder availablePermissions(List availablePermissions) { + return availablePermissions(Output.of(availablePermissions)); + } + + /** + * @param availablePermissions A list of permissions that may be allowed for use on the specified resource. + * + * @return builder + * + */ + public Builder availablePermissions(String... availablePermissions) { + return availablePermissions(List.of(availablePermissions)); + } + + /** + * @param availableResource The full resource name of a Google Cloud resource entity. + * + * @return builder + * + */ + public Builder availableResource(@Nullable Output availableResource) { + $.availableResource = availableResource; + return this; + } + + /** + * @param availableResource The full resource name of a Google Cloud resource entity. + * + * @return builder + * + */ + public Builder availableResource(String availableResource) { + return availableResource(Output.of(availableResource)); + } + + public AccessBoundaryPolicyRuleAccessBoundaryRuleArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs.java new file mode 100644 index 0000000000..0a6875f8bb --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs.java @@ -0,0 +1,207 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs extends com.pulumi.resources.ResourceArgs { + + public static final AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs Empty = new AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs(); + + /** + * Description of the expression. This is a longer text which describes the expression, + * e.g. when hovered over it in a UI. + * + */ + @Import(name="description") + private @Nullable Output description; + + /** + * @return Description of the expression. This is a longer text which describes the expression, + * e.g. when hovered over it in a UI. + * + */ + public Optional> description() { + return Optional.ofNullable(this.description); + } + + /** + * Textual representation of an expression in Common Expression Language syntax. + * + */ + @Import(name="expression", required=true) + private Output expression; + + /** + * @return Textual representation of an expression in Common Expression Language syntax. + * + */ + public Output expression() { + return this.expression; + } + + /** + * String indicating the location of the expression for error reporting, + * e.g. a file name and a position in the file. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return String indicating the location of the expression for error reporting, + * e.g. a file name and a position in the file. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * Title for the expression, i.e. a short string describing its purpose. + * This can be used e.g. in UIs which allow to enter the expression. + * + */ + @Import(name="title") + private @Nullable Output title; + + /** + * @return Title for the expression, i.e. a short string describing its purpose. + * This can be used e.g. in UIs which allow to enter the expression. + * + */ + public Optional> title() { + return Optional.ofNullable(this.title); + } + + private AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs() {} + + private AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs $) { + this.description = $.description; + this.expression = $.expression; + this.location = $.location; + this.title = $.title; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs $; + + public Builder() { + $ = new AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs(); + } + + public Builder(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs defaults) { + $ = new AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param description Description of the expression. This is a longer text which describes the expression, + * e.g. when hovered over it in a UI. + * + * @return builder + * + */ + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + /** + * @param description Description of the expression. This is a longer text which describes the expression, + * e.g. when hovered over it in a UI. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + /** + * @param expression Textual representation of an expression in Common Expression Language syntax. + * + * @return builder + * + */ + public Builder expression(Output expression) { + $.expression = expression; + return this; + } + + /** + * @param expression Textual representation of an expression in Common Expression Language syntax. + * + * @return builder + * + */ + public Builder expression(String expression) { + return expression(Output.of(expression)); + } + + /** + * @param location String indicating the location of the expression for error reporting, + * e.g. a file name and a position in the file. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location String indicating the location of the expression for error reporting, + * e.g. a file name and a position in the file. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param title Title for the expression, i.e. a short string describing its purpose. + * This can be used e.g. in UIs which allow to enter the expression. + * + * @return builder + * + */ + public Builder title(@Nullable Output title) { + $.title = title; + return this; + } + + /** + * @param title Title for the expression, i.e. a short string describing its purpose. + * This can be used e.g. in UIs which allow to enter the expression. + * + * @return builder + * + */ + public Builder title(String title) { + return title(Output.of(title)); + } + + public AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs build() { + $.expression = Objects.requireNonNull($.expression, "expected parameter 'expression' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyRuleArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyRuleArgs.java new file mode 100644 index 0000000000..5c14ccc232 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyRuleArgs.java @@ -0,0 +1,125 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.iam.inputs.AccessBoundaryPolicyRuleAccessBoundaryRuleArgs; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class AccessBoundaryPolicyRuleArgs extends com.pulumi.resources.ResourceArgs { + + public static final AccessBoundaryPolicyRuleArgs Empty = new AccessBoundaryPolicyRuleArgs(); + + /** + * An access boundary rule in an IAM policy. + * Structure is documented below. + * + */ + @Import(name="accessBoundaryRule") + private @Nullable Output accessBoundaryRule; + + /** + * @return An access boundary rule in an IAM policy. + * Structure is documented below. + * + */ + public Optional> accessBoundaryRule() { + return Optional.ofNullable(this.accessBoundaryRule); + } + + /** + * The description of the rule. + * + */ + @Import(name="description") + private @Nullable Output description; + + /** + * @return The description of the rule. + * + */ + public Optional> description() { + return Optional.ofNullable(this.description); + } + + private AccessBoundaryPolicyRuleArgs() {} + + private AccessBoundaryPolicyRuleArgs(AccessBoundaryPolicyRuleArgs $) { + this.accessBoundaryRule = $.accessBoundaryRule; + this.description = $.description; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(AccessBoundaryPolicyRuleArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private AccessBoundaryPolicyRuleArgs $; + + public Builder() { + $ = new AccessBoundaryPolicyRuleArgs(); + } + + public Builder(AccessBoundaryPolicyRuleArgs defaults) { + $ = new AccessBoundaryPolicyRuleArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param accessBoundaryRule An access boundary rule in an IAM policy. + * Structure is documented below. + * + * @return builder + * + */ + public Builder accessBoundaryRule(@Nullable Output accessBoundaryRule) { + $.accessBoundaryRule = accessBoundaryRule; + return this; + } + + /** + * @param accessBoundaryRule An access boundary rule in an IAM policy. + * Structure is documented below. + * + * @return builder + * + */ + public Builder accessBoundaryRule(AccessBoundaryPolicyRuleAccessBoundaryRuleArgs accessBoundaryRule) { + return accessBoundaryRule(Output.of(accessBoundaryRule)); + } + + /** + * @param description The description of the rule. + * + * @return builder + * + */ + public Builder description(@Nullable Output description) { + $.description = description; + return this; + } + + /** + * @param description The description of the rule. + * + * @return builder + * + */ + public Builder description(String description) { + return description(Output.of(description)); + } + + public AccessBoundaryPolicyRuleArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyState.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyState.java new file mode 100644 index 0000000000..3bd93fdbce --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/inputs/AccessBoundaryPolicyState.java @@ -0,0 +1,248 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.iam.inputs.AccessBoundaryPolicyRuleArgs; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class AccessBoundaryPolicyState extends com.pulumi.resources.ResourceArgs { + + public static final AccessBoundaryPolicyState Empty = new AccessBoundaryPolicyState(); + + /** + * The display name of the rule. + * + */ + @Import(name="displayName") + private @Nullable Output displayName; + + /** + * @return The display name of the rule. + * + */ + public Optional> displayName() { + return Optional.ofNullable(this.displayName); + } + + /** + * The hash of the resource. Used internally during updates. + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return The hash of the resource. Used internally during updates. + * + */ + public Optional> etag() { + return Optional.ofNullable(this.etag); + } + + /** + * The name of the policy. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The name of the policy. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The attachment point is identified by its URL-encoded full resource name. + * + */ + @Import(name="parent") + private @Nullable Output parent; + + /** + * @return The attachment point is identified by its URL-encoded full resource name. + * + */ + public Optional> parent() { + return Optional.ofNullable(this.parent); + } + + /** + * Rules to be applied. + * Structure is documented below. + * + */ + @Import(name="rules") + private @Nullable Output> rules; + + /** + * @return Rules to be applied. + * Structure is documented below. + * + */ + public Optional>> rules() { + return Optional.ofNullable(this.rules); + } + + private AccessBoundaryPolicyState() {} + + private AccessBoundaryPolicyState(AccessBoundaryPolicyState $) { + this.displayName = $.displayName; + this.etag = $.etag; + this.name = $.name; + this.parent = $.parent; + this.rules = $.rules; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(AccessBoundaryPolicyState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private AccessBoundaryPolicyState $; + + public Builder() { + $ = new AccessBoundaryPolicyState(); + } + + public Builder(AccessBoundaryPolicyState defaults) { + $ = new AccessBoundaryPolicyState(Objects.requireNonNull(defaults)); + } + + /** + * @param displayName The display name of the rule. + * + * @return builder + * + */ + public Builder displayName(@Nullable Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName The display name of the rule. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + /** + * @param etag The hash of the resource. Used internally during updates. + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag The hash of the resource. Used internally during updates. + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + + /** + * @param name The name of the policy. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The name of the policy. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param parent The attachment point is identified by its URL-encoded full resource name. + * + * @return builder + * + */ + public Builder parent(@Nullable Output parent) { + $.parent = parent; + return this; + } + + /** + * @param parent The attachment point is identified by its URL-encoded full resource name. + * + * @return builder + * + */ + public Builder parent(String parent) { + return parent(Output.of(parent)); + } + + /** + * @param rules Rules to be applied. + * Structure is documented below. + * + * @return builder + * + */ + public Builder rules(@Nullable Output> rules) { + $.rules = rules; + return this; + } + + /** + * @param rules Rules to be applied. + * Structure is documented below. + * + * @return builder + * + */ + public Builder rules(List rules) { + return rules(Output.of(rules)); + } + + /** + * @param rules Rules to be applied. + * Structure is documented below. + * + * @return builder + * + */ + public Builder rules(AccessBoundaryPolicyRuleArgs... rules) { + return rules(List.of(rules)); + } + + public AccessBoundaryPolicyState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/AccessBoundaryPolicyRule.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/AccessBoundaryPolicyRule.java new file mode 100644 index 0000000000..957cfd51a3 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/AccessBoundaryPolicyRule.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.iam.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.iam.outputs.AccessBoundaryPolicyRuleAccessBoundaryRule; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class AccessBoundaryPolicyRule { + /** + * @return An access boundary rule in an IAM policy. + * Structure is documented below. + * + */ + private @Nullable AccessBoundaryPolicyRuleAccessBoundaryRule accessBoundaryRule; + /** + * @return The description of the rule. + * + */ + private @Nullable String description; + + private AccessBoundaryPolicyRule() {} + /** + * @return An access boundary rule in an IAM policy. + * Structure is documented below. + * + */ + public Optional accessBoundaryRule() { + return Optional.ofNullable(this.accessBoundaryRule); + } + /** + * @return The description of the rule. + * + */ + public Optional description() { + return Optional.ofNullable(this.description); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(AccessBoundaryPolicyRule defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable AccessBoundaryPolicyRuleAccessBoundaryRule accessBoundaryRule; + private @Nullable String description; + public Builder() {} + public Builder(AccessBoundaryPolicyRule defaults) { + Objects.requireNonNull(defaults); + this.accessBoundaryRule = defaults.accessBoundaryRule; + this.description = defaults.description; + } + + @CustomType.Setter + public Builder accessBoundaryRule(@Nullable AccessBoundaryPolicyRuleAccessBoundaryRule accessBoundaryRule) { + this.accessBoundaryRule = accessBoundaryRule; + return this; + } + @CustomType.Setter + public Builder description(@Nullable String description) { + this.description = description; + return this; + } + public AccessBoundaryPolicyRule build() { + final var o = new AccessBoundaryPolicyRule(); + o.accessBoundaryRule = accessBoundaryRule; + o.description = description; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/AccessBoundaryPolicyRuleAccessBoundaryRule.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/AccessBoundaryPolicyRuleAccessBoundaryRule.java new file mode 100644 index 0000000000..7f484d84db --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/AccessBoundaryPolicyRuleAccessBoundaryRule.java @@ -0,0 +1,103 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam.outputs; + +import com.pulumi.core.annotations.CustomType; +import com.pulumi.gcp.iam.outputs.AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition; +import java.lang.String; +import java.util.List; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class AccessBoundaryPolicyRuleAccessBoundaryRule { + /** + * @return The availability condition further constrains the access allowed by the access boundary rule. + * Structure is documented below. + * + */ + private @Nullable AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition availabilityCondition; + /** + * @return A list of permissions that may be allowed for use on the specified resource. + * + */ + private @Nullable List availablePermissions; + /** + * @return The full resource name of a Google Cloud resource entity. + * + */ + private @Nullable String availableResource; + + private AccessBoundaryPolicyRuleAccessBoundaryRule() {} + /** + * @return The availability condition further constrains the access allowed by the access boundary rule. + * Structure is documented below. + * + */ + public Optional availabilityCondition() { + return Optional.ofNullable(this.availabilityCondition); + } + /** + * @return A list of permissions that may be allowed for use on the specified resource. + * + */ + public List availablePermissions() { + return this.availablePermissions == null ? List.of() : this.availablePermissions; + } + /** + * @return The full resource name of a Google Cloud resource entity. + * + */ + public Optional availableResource() { + return Optional.ofNullable(this.availableResource); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(AccessBoundaryPolicyRuleAccessBoundaryRule defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition availabilityCondition; + private @Nullable List availablePermissions; + private @Nullable String availableResource; + public Builder() {} + public Builder(AccessBoundaryPolicyRuleAccessBoundaryRule defaults) { + Objects.requireNonNull(defaults); + this.availabilityCondition = defaults.availabilityCondition; + this.availablePermissions = defaults.availablePermissions; + this.availableResource = defaults.availableResource; + } + + @CustomType.Setter + public Builder availabilityCondition(@Nullable AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition availabilityCondition) { + this.availabilityCondition = availabilityCondition; + return this; + } + @CustomType.Setter + public Builder availablePermissions(@Nullable List availablePermissions) { + this.availablePermissions = availablePermissions; + return this; + } + public Builder availablePermissions(String... availablePermissions) { + return availablePermissions(List.of(availablePermissions)); + } + @CustomType.Setter + public Builder availableResource(@Nullable String availableResource) { + this.availableResource = availableResource; + return this; + } + public AccessBoundaryPolicyRuleAccessBoundaryRule build() { + final var o = new AccessBoundaryPolicyRuleAccessBoundaryRule(); + o.availabilityCondition = availabilityCondition; + o.availablePermissions = availablePermissions; + o.availableResource = availableResource; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition.java b/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition.java new file mode 100644 index 0000000000..0ab14b4f45 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/iam/outputs/AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition.java @@ -0,0 +1,122 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.iam.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + +@CustomType +public final class AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition { + /** + * @return Description of the expression. This is a longer text which describes the expression, + * e.g. when hovered over it in a UI. + * + */ + private @Nullable String description; + /** + * @return Textual representation of an expression in Common Expression Language syntax. + * + */ + private String expression; + /** + * @return String indicating the location of the expression for error reporting, + * e.g. a file name and a position in the file. + * + */ + private @Nullable String location; + /** + * @return Title for the expression, i.e. a short string describing its purpose. + * This can be used e.g. in UIs which allow to enter the expression. + * + */ + private @Nullable String title; + + private AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition() {} + /** + * @return Description of the expression. This is a longer text which describes the expression, + * e.g. when hovered over it in a UI. + * + */ + public Optional description() { + return Optional.ofNullable(this.description); + } + /** + * @return Textual representation of an expression in Common Expression Language syntax. + * + */ + public String expression() { + return this.expression; + } + /** + * @return String indicating the location of the expression for error reporting, + * e.g. a file name and a position in the file. + * + */ + public Optional location() { + return Optional.ofNullable(this.location); + } + /** + * @return Title for the expression, i.e. a short string describing its purpose. + * This can be used e.g. in UIs which allow to enter the expression. + * + */ + public Optional title() { + return Optional.ofNullable(this.title); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String description; + private String expression; + private @Nullable String location; + private @Nullable String title; + public Builder() {} + public Builder(AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition defaults) { + Objects.requireNonNull(defaults); + this.description = defaults.description; + this.expression = defaults.expression; + this.location = defaults.location; + this.title = defaults.title; + } + + @CustomType.Setter + public Builder description(@Nullable String description) { + this.description = description; + return this; + } + @CustomType.Setter + public Builder expression(String expression) { + this.expression = Objects.requireNonNull(expression); + return this; + } + @CustomType.Setter + public Builder location(@Nullable String location) { + this.location = location; + return this; + } + @CustomType.Setter + public Builder title(@Nullable String title) { + this.title = title; + return this; + } + public AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition build() { + final var o = new AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition(); + o.description = description; + o.expression = expression; + o.location = location; + o.title = title; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iap/Brand.java b/sdk/java/src/main/java/com/pulumi/gcp/iap/Brand.java index df96cd5f8c..c5508666f1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/iap/Brand.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/iap/Brand.java @@ -15,67 +15,7 @@ import javax.annotation.Nullable; /** - * OAuth brand data. Only "Organization Internal" brands can be created - * programmatically via API. To convert it into an external brands - * please use the GCP Console. - * - * > **Note:** Brands can only be created once for a Google Cloud - * project and the underlying Google API doesn't not support DELETE or PATCH methods. - * Destroying a provider-managed Brand will remove it from state - * but *will not delete it from Google Cloud.* - * - * To get more information about Brand, see: - * - * * [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands) - * * How-to Guides - * * [Setting up IAP Brand](https://cloud.google.com/iap/docs/tutorial-gce#set_up_iap) - * * ## Example Usage - * ### Iap Brand - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.Project; - * import com.pulumi.gcp.organizations.ProjectArgs; - * import com.pulumi.gcp.projects.Service; - * import com.pulumi.gcp.projects.ServiceArgs; - * import com.pulumi.gcp.iap.Brand; - * import com.pulumi.gcp.iap.BrandArgs; - * 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 project = new Project("project", ProjectArgs.builder() - * .projectId("tf-test") - * .orgId("123456789") - * .build()); - * - * var projectService = new Service("projectService", ServiceArgs.builder() - * .project(project.projectId()) - * .service("iap.googleapis.com") - * .build()); - * - * var projectBrand = new Brand("projectBrand", BrandArgs.builder() - * .supportEmail("support@example.com") - * .applicationTitle("Cloud IAP protected Application") - * .project(projectService.project()) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/iap/Client.java b/sdk/java/src/main/java/com/pulumi/gcp/iap/Client.java index 1479fdd840..52965b4940 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/iap/Client.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/iap/Client.java @@ -15,74 +15,7 @@ import javax.annotation.Nullable; /** - * Contains the data that describes an Identity Aware Proxy owned client. - * - * > **Note:** Only internal org clients can be created via declarative tools. External clients must be - * manually created via the GCP console. This restriction is due to the existing APIs and not lack of support - * in this tool. - * - * To get more information about Client, see: - * - * * [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands.identityAwareProxyClients) - * * How-to Guides - * * [Setting up IAP Client](https://cloud.google.com/iap/docs/authentication-howto) - * - * > **Warning:** All arguments including `secret` will be stored in the raw - * state as plain-text. - * * ## Example Usage - * ### Iap Client - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.Project; - * import com.pulumi.gcp.organizations.ProjectArgs; - * import com.pulumi.gcp.projects.Service; - * import com.pulumi.gcp.projects.ServiceArgs; - * import com.pulumi.gcp.iap.Brand; - * import com.pulumi.gcp.iap.BrandArgs; - * import com.pulumi.gcp.iap.Client; - * import com.pulumi.gcp.iap.ClientArgs; - * 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 project = new Project("project", ProjectArgs.builder() - * .projectId("tf-test") - * .orgId("123456789") - * .build()); - * - * var projectService = new Service("projectService", ServiceArgs.builder() - * .project(project.projectId()) - * .service("iap.googleapis.com") - * .build()); - * - * var projectBrand = new Brand("projectBrand", BrandArgs.builder() - * .supportEmail("support@example.com") - * .applicationTitle("Cloud IAP protected Application") - * .project(projectService.project()) - * .build()); - * - * var projectClient = new Client("projectClient", ClientArgs.builder() - * .displayName("Test Client") - * .brand(projectBrand.name()) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKey.java b/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKey.java index c38f13c417..baa3161694 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKey.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKey.java @@ -18,22 +18,6 @@ import javax.annotation.Nullable; /** - * A `CryptoKey` represents a logical key that can be used for cryptographic operations. - * - * > **Note:** CryptoKeys cannot be deleted from Google Cloud Platform. - * Destroying a provider-managed CryptoKey will remove it from state - * and delete all CryptoKeyVersions, rendering the key unusable, but *will - * not delete the resource from the project.* When the provider destroys these keys, - * any data previously encrypted with these keys will be irrecoverable. - * For this reason, it is strongly recommended that you add lifecycle hooks - * to the resource to prevent accidental destruction. - * - * To get more information about CryptoKey, see: - * - * * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys) - * * How-to Guides - * * [Creating a key](https://cloud.google.com/kms/docs/creating-keys#create_a_key) - * * ## Example Usage * ### Kms Crypto Key Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyIAMBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyIAMBinding.java index 906005e481..19ab3d38c3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyIAMBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyIAMBinding.java @@ -17,241 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - * - * * `gcp.kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - * * `gcp.kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - * * `gcp.kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - * - * > **Note:** `gcp.kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `gcp.kms.CryptoKeyIAMBinding` and `gcp.kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `gcp.kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRing; - * import com.pulumi.gcp.kms.KeyRingArgs; - * import com.pulumi.gcp.kms.CryptoKey; - * import com.pulumi.gcp.kms.CryptoKeyArgs; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.kms.CryptoKeyIAMPolicy; - * import com.pulumi.gcp.kms.CryptoKeyIAMPolicyArgs; - * 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 keyring = new KeyRing("keyring", KeyRingArgs.builder() - * .location("global") - * .build()); - * - * var key = new CryptoKey("key", CryptoKeyArgs.builder() - * .keyRing(keyring.id()) - * .rotationPeriod("100000s") - * .build()); - * - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var cryptoKey = new CryptoKeyIAMPolicy("cryptoKey", CryptoKeyIAMPolicyArgs.builder() - * .cryptoKeyId(key.id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .build()) - * .build()); - * - * } - * } - * ``` - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.CryptoKeyIAMBinding; - * import com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs; - * 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 cryptoKey = new CryptoKeyIAMBinding("cryptoKey", CryptoKeyIAMBindingArgs.builder() - * .cryptoKeyId(google_kms_crypto_key.key().id()) - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .members("user:jane@example.com") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.CryptoKeyIAMBinding; - * import com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs; - * import com.pulumi.gcp.kms.inputs.CryptoKeyIAMBindingConditionArgs; - * 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 cryptoKey = new CryptoKeyIAMBinding("cryptoKey", CryptoKeyIAMBindingArgs.builder() - * .cryptoKeyId(google_kms_crypto_key.key().id()) - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .members("user:jane@example.com") - * .condition(CryptoKeyIAMBindingConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build()); - * - * } - * } - * ``` - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.CryptoKeyIAMMember; - * import com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs; - * 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 cryptoKey = new CryptoKeyIAMMember("cryptoKey", CryptoKeyIAMMemberArgs.builder() - * .cryptoKeyId(google_kms_crypto_key.key().id()) - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .member("user:jane@example.com") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.CryptoKeyIAMMember; - * import com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs; - * import com.pulumi.gcp.kms.inputs.CryptoKeyIAMMemberConditionArgs; - * 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 cryptoKey = new CryptoKeyIAMMember("cryptoKey", CryptoKeyIAMMemberArgs.builder() - * .cryptoKeyId(google_kms_crypto_key.key().id()) - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .member("user:jane@example.com") - * .condition(CryptoKeyIAMMemberConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyIAMMember.java b/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyIAMMember.java index c52e5a42ae..8a7774b62d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyIAMMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyIAMMember.java @@ -16,241 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - * - * * `gcp.kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - * * `gcp.kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - * * `gcp.kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - * - * > **Note:** `gcp.kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `gcp.kms.CryptoKeyIAMBinding` and `gcp.kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `gcp.kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRing; - * import com.pulumi.gcp.kms.KeyRingArgs; - * import com.pulumi.gcp.kms.CryptoKey; - * import com.pulumi.gcp.kms.CryptoKeyArgs; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.kms.CryptoKeyIAMPolicy; - * import com.pulumi.gcp.kms.CryptoKeyIAMPolicyArgs; - * 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 keyring = new KeyRing("keyring", KeyRingArgs.builder() - * .location("global") - * .build()); - * - * var key = new CryptoKey("key", CryptoKeyArgs.builder() - * .keyRing(keyring.id()) - * .rotationPeriod("100000s") - * .build()); - * - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var cryptoKey = new CryptoKeyIAMPolicy("cryptoKey", CryptoKeyIAMPolicyArgs.builder() - * .cryptoKeyId(key.id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .build()) - * .build()); - * - * } - * } - * ``` - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.CryptoKeyIAMBinding; - * import com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs; - * 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 cryptoKey = new CryptoKeyIAMBinding("cryptoKey", CryptoKeyIAMBindingArgs.builder() - * .cryptoKeyId(google_kms_crypto_key.key().id()) - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .members("user:jane@example.com") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.CryptoKeyIAMBinding; - * import com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs; - * import com.pulumi.gcp.kms.inputs.CryptoKeyIAMBindingConditionArgs; - * 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 cryptoKey = new CryptoKeyIAMBinding("cryptoKey", CryptoKeyIAMBindingArgs.builder() - * .cryptoKeyId(google_kms_crypto_key.key().id()) - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .members("user:jane@example.com") - * .condition(CryptoKeyIAMBindingConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build()); - * - * } - * } - * ``` - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.CryptoKeyIAMMember; - * import com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs; - * 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 cryptoKey = new CryptoKeyIAMMember("cryptoKey", CryptoKeyIAMMemberArgs.builder() - * .cryptoKeyId(google_kms_crypto_key.key().id()) - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .member("user:jane@example.com") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.CryptoKeyIAMMember; - * import com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs; - * import com.pulumi.gcp.kms.inputs.CryptoKeyIAMMemberConditionArgs; - * 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 cryptoKey = new CryptoKeyIAMMember("cryptoKey", CryptoKeyIAMMemberArgs.builder() - * .cryptoKeyId(google_kms_crypto_key.key().id()) - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .member("user:jane@example.com") - * .condition(CryptoKeyIAMMemberConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyIAMPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyIAMPolicy.java index 6db071e860..f1c26ae40c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyIAMPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/kms/CryptoKeyIAMPolicy.java @@ -14,241 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - * - * * `gcp.kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - * * `gcp.kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - * * `gcp.kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - * - * > **Note:** `gcp.kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `gcp.kms.CryptoKeyIAMBinding` and `gcp.kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `gcp.kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRing; - * import com.pulumi.gcp.kms.KeyRingArgs; - * import com.pulumi.gcp.kms.CryptoKey; - * import com.pulumi.gcp.kms.CryptoKeyArgs; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.kms.CryptoKeyIAMPolicy; - * import com.pulumi.gcp.kms.CryptoKeyIAMPolicyArgs; - * 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 keyring = new KeyRing("keyring", KeyRingArgs.builder() - * .location("global") - * .build()); - * - * var key = new CryptoKey("key", CryptoKeyArgs.builder() - * .keyRing(keyring.id()) - * .rotationPeriod("100000s") - * .build()); - * - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var cryptoKey = new CryptoKeyIAMPolicy("cryptoKey", CryptoKeyIAMPolicyArgs.builder() - * .cryptoKeyId(key.id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .build()) - * .build()); - * - * } - * } - * ``` - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.CryptoKeyIAMBinding; - * import com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs; - * 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 cryptoKey = new CryptoKeyIAMBinding("cryptoKey", CryptoKeyIAMBindingArgs.builder() - * .cryptoKeyId(google_kms_crypto_key.key().id()) - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .members("user:jane@example.com") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.CryptoKeyIAMBinding; - * import com.pulumi.gcp.kms.CryptoKeyIAMBindingArgs; - * import com.pulumi.gcp.kms.inputs.CryptoKeyIAMBindingConditionArgs; - * 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 cryptoKey = new CryptoKeyIAMBinding("cryptoKey", CryptoKeyIAMBindingArgs.builder() - * .cryptoKeyId(google_kms_crypto_key.key().id()) - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .members("user:jane@example.com") - * .condition(CryptoKeyIAMBindingConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build()); - * - * } - * } - * ``` - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.CryptoKeyIAMMember; - * import com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs; - * 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 cryptoKey = new CryptoKeyIAMMember("cryptoKey", CryptoKeyIAMMemberArgs.builder() - * .cryptoKeyId(google_kms_crypto_key.key().id()) - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .member("user:jane@example.com") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.CryptoKeyIAMMember; - * import com.pulumi.gcp.kms.CryptoKeyIAMMemberArgs; - * import com.pulumi.gcp.kms.inputs.CryptoKeyIAMMemberConditionArgs; - * 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 cryptoKey = new CryptoKeyIAMMember("cryptoKey", CryptoKeyIAMMemberArgs.builder() - * .cryptoKeyId(google_kms_crypto_key.key().id()) - * .role("roles/cloudkms.cryptoKeyEncrypter") - * .member("user:jane@example.com") - * .condition(CryptoKeyIAMMemberConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRing.java b/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRing.java index 9d8d2758f3..3e5a22d5de 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRing.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRing.java @@ -14,18 +14,6 @@ import javax.annotation.Nullable; /** - * A `KeyRing` is a toplevel logical grouping of `CryptoKeys`. - * - * > **Note:** KeyRings cannot be deleted from Google Cloud Platform. - * Destroying a provider-managed KeyRing will remove it from state but - * *will not delete the resource from the project.* - * - * To get more information about KeyRing, see: - * - * * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings) - * * How-to Guides - * * [Creating a key ring](https://cloud.google.com/kms/docs/creating-keys#create_a_key_ring) - * * ## Example Usage * ### Kms Key Ring Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingIAMBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingIAMBinding.java index 2deabc2b98..65f46ab1c8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingIAMBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingIAMBinding.java @@ -17,253 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - * - * * `gcp.kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - * * `gcp.kms.KeyRingIAMBinding`: 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 key ring are preserved. - * * `gcp.kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - * - * > **Note:** `gcp.kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `gcp.kms.KeyRingIAMBinding` and `gcp.kms.KeyRingIAMMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.kms.KeyRingIAMBinding` resources **can be** used in conjunction with `gcp.kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_kms\_key\_ring\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRing; - * import com.pulumi.gcp.kms.KeyRingArgs; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.kms.KeyRingIAMPolicy; - * import com.pulumi.gcp.kms.KeyRingIAMPolicyArgs; - * 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 keyring = new KeyRing("keyring", KeyRingArgs.builder() - * .location("global") - * .build()); - * - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var keyRing = new KeyRingIAMPolicy("keyRing", KeyRingIAMPolicyArgs.builder() - * .keyRingId(keyring.id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRing; - * import com.pulumi.gcp.kms.KeyRingArgs; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.kms.KeyRingIAMPolicy; - * import com.pulumi.gcp.kms.KeyRingIAMPolicyArgs; - * 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 keyring = new KeyRing("keyring", KeyRingArgs.builder() - * .location("global") - * .build()); - * - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build()) - * .build()); - * - * var keyRing = new KeyRingIAMPolicy("keyRing", KeyRingIAMPolicyArgs.builder() - * .keyRingId(keyring.id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_kms\_key\_ring\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRingIAMBinding; - * import com.pulumi.gcp.kms.KeyRingIAMBindingArgs; - * 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 keyRing = new KeyRingIAMBinding("keyRing", KeyRingIAMBindingArgs.builder() - * .keyRingId("your-key-ring-id") - * .members("user:jane@example.com") - * .role("roles/cloudkms.admin") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRingIAMBinding; - * import com.pulumi.gcp.kms.KeyRingIAMBindingArgs; - * import com.pulumi.gcp.kms.inputs.KeyRingIAMBindingConditionArgs; - * 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 keyRing = new KeyRingIAMBinding("keyRing", KeyRingIAMBindingArgs.builder() - * .condition(KeyRingIAMBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .keyRingId("your-key-ring-id") - * .members("user:jane@example.com") - * .role("roles/cloudkms.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_kms\_key\_ring\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRingIAMMember; - * import com.pulumi.gcp.kms.KeyRingIAMMemberArgs; - * 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 keyRing = new KeyRingIAMMember("keyRing", KeyRingIAMMemberArgs.builder() - * .keyRingId("your-key-ring-id") - * .member("user:jane@example.com") - * .role("roles/cloudkms.admin") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRingIAMMember; - * import com.pulumi.gcp.kms.KeyRingIAMMemberArgs; - * import com.pulumi.gcp.kms.inputs.KeyRingIAMMemberConditionArgs; - * 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 keyRing = new KeyRingIAMMember("keyRing", KeyRingIAMMemberArgs.builder() - * .condition(KeyRingIAMMemberConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .keyRingId("your-key-ring-id") - * .member("user:jane@example.com") - * .role("roles/cloudkms.admin") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingIAMMember.java b/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingIAMMember.java index c280241098..0884bfbb59 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingIAMMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingIAMMember.java @@ -16,253 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - * - * * `gcp.kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - * * `gcp.kms.KeyRingIAMBinding`: 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 key ring are preserved. - * * `gcp.kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - * - * > **Note:** `gcp.kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `gcp.kms.KeyRingIAMBinding` and `gcp.kms.KeyRingIAMMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.kms.KeyRingIAMBinding` resources **can be** used in conjunction with `gcp.kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_kms\_key\_ring\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRing; - * import com.pulumi.gcp.kms.KeyRingArgs; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.kms.KeyRingIAMPolicy; - * import com.pulumi.gcp.kms.KeyRingIAMPolicyArgs; - * 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 keyring = new KeyRing("keyring", KeyRingArgs.builder() - * .location("global") - * .build()); - * - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var keyRing = new KeyRingIAMPolicy("keyRing", KeyRingIAMPolicyArgs.builder() - * .keyRingId(keyring.id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRing; - * import com.pulumi.gcp.kms.KeyRingArgs; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.kms.KeyRingIAMPolicy; - * import com.pulumi.gcp.kms.KeyRingIAMPolicyArgs; - * 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 keyring = new KeyRing("keyring", KeyRingArgs.builder() - * .location("global") - * .build()); - * - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build()) - * .build()); - * - * var keyRing = new KeyRingIAMPolicy("keyRing", KeyRingIAMPolicyArgs.builder() - * .keyRingId(keyring.id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_kms\_key\_ring\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRingIAMBinding; - * import com.pulumi.gcp.kms.KeyRingIAMBindingArgs; - * 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 keyRing = new KeyRingIAMBinding("keyRing", KeyRingIAMBindingArgs.builder() - * .keyRingId("your-key-ring-id") - * .members("user:jane@example.com") - * .role("roles/cloudkms.admin") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRingIAMBinding; - * import com.pulumi.gcp.kms.KeyRingIAMBindingArgs; - * import com.pulumi.gcp.kms.inputs.KeyRingIAMBindingConditionArgs; - * 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 keyRing = new KeyRingIAMBinding("keyRing", KeyRingIAMBindingArgs.builder() - * .condition(KeyRingIAMBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .keyRingId("your-key-ring-id") - * .members("user:jane@example.com") - * .role("roles/cloudkms.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_kms\_key\_ring\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRingIAMMember; - * import com.pulumi.gcp.kms.KeyRingIAMMemberArgs; - * 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 keyRing = new KeyRingIAMMember("keyRing", KeyRingIAMMemberArgs.builder() - * .keyRingId("your-key-ring-id") - * .member("user:jane@example.com") - * .role("roles/cloudkms.admin") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRingIAMMember; - * import com.pulumi.gcp.kms.KeyRingIAMMemberArgs; - * import com.pulumi.gcp.kms.inputs.KeyRingIAMMemberConditionArgs; - * 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 keyRing = new KeyRingIAMMember("keyRing", KeyRingIAMMemberArgs.builder() - * .condition(KeyRingIAMMemberConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .keyRingId("your-key-ring-id") - * .member("user:jane@example.com") - * .role("roles/cloudkms.admin") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingIAMPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingIAMPolicy.java index f95a46b182..7cf789d3fc 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingIAMPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingIAMPolicy.java @@ -14,253 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - * - * * `gcp.kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - * * `gcp.kms.KeyRingIAMBinding`: 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 key ring are preserved. - * * `gcp.kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - * - * > **Note:** `gcp.kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `gcp.kms.KeyRingIAMBinding` and `gcp.kms.KeyRingIAMMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.kms.KeyRingIAMBinding` resources **can be** used in conjunction with `gcp.kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_kms\_key\_ring\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRing; - * import com.pulumi.gcp.kms.KeyRingArgs; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.kms.KeyRingIAMPolicy; - * import com.pulumi.gcp.kms.KeyRingIAMPolicyArgs; - * 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 keyring = new KeyRing("keyring", KeyRingArgs.builder() - * .location("global") - * .build()); - * - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var keyRing = new KeyRingIAMPolicy("keyRing", KeyRingIAMPolicyArgs.builder() - * .keyRingId(keyring.id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRing; - * import com.pulumi.gcp.kms.KeyRingArgs; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.kms.KeyRingIAMPolicy; - * import com.pulumi.gcp.kms.KeyRingIAMPolicyArgs; - * 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 keyring = new KeyRing("keyring", KeyRingArgs.builder() - * .location("global") - * .build()); - * - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .title("expires_after_2019_12_31") - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .build()) - * .build()) - * .build()); - * - * var keyRing = new KeyRingIAMPolicy("keyRing", KeyRingIAMPolicyArgs.builder() - * .keyRingId(keyring.id()) - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_kms\_key\_ring\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRingIAMBinding; - * import com.pulumi.gcp.kms.KeyRingIAMBindingArgs; - * 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 keyRing = new KeyRingIAMBinding("keyRing", KeyRingIAMBindingArgs.builder() - * .keyRingId("your-key-ring-id") - * .members("user:jane@example.com") - * .role("roles/cloudkms.admin") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRingIAMBinding; - * import com.pulumi.gcp.kms.KeyRingIAMBindingArgs; - * import com.pulumi.gcp.kms.inputs.KeyRingIAMBindingConditionArgs; - * 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 keyRing = new KeyRingIAMBinding("keyRing", KeyRingIAMBindingArgs.builder() - * .condition(KeyRingIAMBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .keyRingId("your-key-ring-id") - * .members("user:jane@example.com") - * .role("roles/cloudkms.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_kms\_key\_ring\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRingIAMMember; - * import com.pulumi.gcp.kms.KeyRingIAMMemberArgs; - * 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 keyRing = new KeyRingIAMMember("keyRing", KeyRingIAMMemberArgs.builder() - * .keyRingId("your-key-ring-id") - * .member("user:jane@example.com") - * .role("roles/cloudkms.admin") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.kms.KeyRingIAMMember; - * import com.pulumi.gcp.kms.KeyRingIAMMemberArgs; - * import com.pulumi.gcp.kms.inputs.KeyRingIAMMemberConditionArgs; - * 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 keyRing = new KeyRingIAMMember("keyRing", KeyRingIAMMemberArgs.builder() - * .condition(KeyRingIAMMemberConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .keyRingId("your-key-ring-id") - * .member("user:jane@example.com") - * .role("roles/cloudkms.admin") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingImportJob.java b/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingImportJob.java index 0be46c340c..80fec7147a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingImportJob.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/kms/KeyRingImportJob.java @@ -17,21 +17,6 @@ import javax.annotation.Nullable; /** - * A `KeyRingImportJob` can be used to create `CryptoKeys` and `CryptoKeyVersions` using pre-existing - * key material, generated outside of Cloud KMS. A `KeyRingImportJob` expires 3 days after it is created. - * Once expired, Cloud KMS will no longer be able to import or unwrap any key material that - * was wrapped with the `KeyRingImportJob`'s public key. - * - * > **Note:** KeyRingImportJobs cannot be deleted from Google Cloud Platform. - * Destroying a provider-managed KeyRingImportJob will remove it from state but - * *will not delete the resource from the project.* - * - * To get more information about KeyRingImportJob, see: - * - * * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.importJobs) - * * How-to Guides - * * [Importing a key](https://cloud.google.com/kms/docs/importing-a-key) - * * ## Example Usage * * ## Import diff --git a/sdk/java/src/main/java/com/pulumi/gcp/kms/SecretCiphertext.java b/sdk/java/src/main/java/com/pulumi/gcp/kms/SecretCiphertext.java index 20fd21fa5f..6b4626fb9d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/kms/SecretCiphertext.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/kms/SecretCiphertext.java @@ -16,21 +16,6 @@ import javax.annotation.Nullable; /** - * Encrypts secret data with Google Cloud KMS and provides access to the ciphertext. - * - * > **NOTE:** Using this resource will allow you to conceal secret data within your - * resource definitions, but it does not take care of protecting that data in the - * logging output, plan output, or state output. Please take care to secure your secret - * data outside of resource definitions. - * - * To get more information about SecretCiphertext, see: - * - * * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt) - * * How-to Guides - * * [Encrypting and decrypting data with a symmetric key](https://cloud.google.com/kms/docs/encrypt-decrypt) - * - * > **Warning:** All arguments including `plaintext` and `additional_authenticated_data` will be stored in the raw state as plain-text. - * * ## Example Usage * ### Kms Secret Ciphertext Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/logging/BillingAccountBucketConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/logging/BillingAccountBucketConfig.java index 4ebb8afd81..797c4cc4bd 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/logging/BillingAccountBucketConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/logging/BillingAccountBucketConfig.java @@ -17,12 +17,6 @@ import javax.annotation.Nullable; /** - * Manages a billing account level logging bucket config. For more information see - * [the official logging documentation](https://cloud.google.com/logging/docs/) and - * [Storing Logs](https://cloud.google.com/logging/docs/storage). - * - * > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/logging/BillingAccountSink.java b/sdk/java/src/main/java/com/pulumi/gcp/logging/BillingAccountSink.java index 9ed81a80f1..0442bc37dc 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/logging/BillingAccountSink.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/logging/BillingAccountSink.java @@ -19,15 +19,6 @@ import javax.annotation.Nullable; /** - * * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/billingAccounts.sinks) - * * How-to Guides - * * [Exporting Logs](https://cloud.google.com/logging/docs/export) - * - * > **Note** You must have the "Logs Configuration Writer" IAM role (`roles/logging.configWriter`) - * [granted on the billing account](https://cloud.google.com/billing/reference/rest/v1/billingAccounts/getIamPolicy) to - * the credentials used with this provider. [IAM roles granted on a billing account](https://cloud.google.com/billing/docs/how-to/billing-access) are separate from the - * typical IAM roles granted on a project. - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/logging/FolderBucketConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/logging/FolderBucketConfig.java index 10a91f9a68..6fb4fafa9b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/logging/FolderBucketConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/logging/FolderBucketConfig.java @@ -17,12 +17,6 @@ import javax.annotation.Nullable; /** - * Manages a folder-level logging bucket config. For more information see - * [the official logging documentation](https://cloud.google.com/logging/docs/) and - * [Storing Logs](https://cloud.google.com/logging/docs/storage). - * - * > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/logging/FolderExclusion.java b/sdk/java/src/main/java/com/pulumi/gcp/logging/FolderExclusion.java index a0e155b8fd..cddbbdb7f8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/logging/FolderExclusion.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/logging/FolderExclusion.java @@ -16,14 +16,6 @@ import javax.annotation.Nullable; /** - * Manages a folder-level logging exclusion. For more information see: - * - * * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/folders.exclusions) - * * How-to Guides - * * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - * - * > You can specify exclusions for log sinks created by the provider by using the exclusions field of `gcp.logging.FolderSink` - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/logging/OrganizationBucketConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/logging/OrganizationBucketConfig.java index cf3d004ce8..312dc56768 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/logging/OrganizationBucketConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/logging/OrganizationBucketConfig.java @@ -17,12 +17,6 @@ import javax.annotation.Nullable; /** - * Manages a organization-level logging bucket config. For more information see - * [the official logging documentation](https://cloud.google.com/logging/docs/) and - * [Storing Logs](https://cloud.google.com/logging/docs/storage). - * - * > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/logging/OrganizationExclusion.java b/sdk/java/src/main/java/com/pulumi/gcp/logging/OrganizationExclusion.java index 0643e0fa0a..ab6c74f432 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/logging/OrganizationExclusion.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/logging/OrganizationExclusion.java @@ -16,14 +16,6 @@ import javax.annotation.Nullable; /** - * Manages an organization-level logging exclusion. For more information see: - * - * * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/organizations.exclusions) - * * How-to Guides - * * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - * - * > You can specify exclusions for log sinks created by the provider by using the exclusions field of `gcp.logging.OrganizationSink` - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/logging/ProjectBucketConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/logging/ProjectBucketConfig.java index a67a892b06..8738669c70 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/logging/ProjectBucketConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/logging/ProjectBucketConfig.java @@ -17,12 +17,6 @@ import javax.annotation.Nullable; /** - * Manages a project-level logging bucket config. For more information see - * [the official logging documentation](https://cloud.google.com/logging/docs/) and - * [Storing Logs](https://cloud.google.com/logging/docs/storage). - * - * > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/logging/ProjectExclusion.java b/sdk/java/src/main/java/com/pulumi/gcp/logging/ProjectExclusion.java index 03ed54253d..3893302a3f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/logging/ProjectExclusion.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/logging/ProjectExclusion.java @@ -16,14 +16,6 @@ import javax.annotation.Nullable; /** - * Manages a project-level logging exclusion. For more information see: - * - * * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.exclusions) - * * How-to Guides - * * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - * - * > You can specify exclusions for log sinks created by the provider by using the exclusions field of `gcp.logging.ProjectSink` - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/NotificationChannel.java b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/NotificationChannel.java index ac6d3737a5..eaa7a9ba5e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/NotificationChannel.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/NotificationChannel.java @@ -18,33 +18,6 @@ import javax.annotation.Nullable; /** - * A NotificationChannel is a medium through which an alert is delivered - * when a policy violation is detected. Examples of channels include email, SMS, - * and third-party messaging applications. Fields containing sensitive information - * like authentication tokens or contact info are only partially populated on retrieval. - * - * Notification Channels are designed to be flexible and are made up of a supported `type` - * and labels to configure that channel. Each `type` has specific labels that need to be - * present for that channel to be correctly configured. The labels that are required to be - * present for one channel `type` are often different than those required for another. - * Due to these loose constraints it's often best to set up a channel through the UI - * and import it to the provider when setting up a brand new channel type to determine which - * labels are required. - * - * A list of supported channels per project the `list` endpoint can be - * accessed programmatically or through the api explorer at https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannelDescriptors/list . - * This provides the channel type and all of the required labels that must be passed. - * - * To get more information about NotificationChannel, see: - * - * * [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannels) - * * How-to Guides - * * [Notification Options](https://cloud.google.com/monitoring/support/notification-options) - * * [Monitoring API Documentation](https://cloud.google.com/monitoring/api/v3/) - * - * > **Warning:** All arguments including `sensitive_labels.auth_token`, `sensitive_labels.password`, and `sensitive_labels.service_key` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Notification Channel Basic * ```java @@ -190,24 +163,20 @@ public Output> forceDelete() { return Codegen.optional(this.forceDelete); } /** - * Configuration fields that define the channel and its behavior. The - * permissible and required labels are specified in the - * NotificationChannelDescriptor corresponding to the type field. - * Labels with sensitive data are obfuscated by the API and therefore the provider cannot - * determine if there are upstream changes to these fields. They can also be configured via - * the sensitive_labels block, but cannot be configured in both places. + * Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + * NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + * therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + * sensitive_labels block, but cannot be configured in both places. * */ @Export(name="labels", type=Map.class, parameters={String.class, String.class}) private Output> labels; /** - * @return Configuration fields that define the channel and its behavior. The - * permissible and required labels are specified in the - * NotificationChannelDescriptor corresponding to the type field. - * Labels with sensitive data are obfuscated by the API and therefore the provider cannot - * determine if there are upstream changes to these fields. They can also be configured via - * the sensitive_labels block, but cannot be configured in both places. + * @return Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + * NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + * therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + * sensitive_labels block, but cannot be configured in both places. * */ public Output>> labels() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/NotificationChannelArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/NotificationChannelArgs.java index dbfd102968..c3e91e32e8 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/NotificationChannelArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/NotificationChannelArgs.java @@ -87,24 +87,20 @@ public Optional> forceDelete() { } /** - * Configuration fields that define the channel and its behavior. The - * permissible and required labels are specified in the - * NotificationChannelDescriptor corresponding to the type field. - * Labels with sensitive data are obfuscated by the API and therefore the provider cannot - * determine if there are upstream changes to these fields. They can also be configured via - * the sensitive_labels block, but cannot be configured in both places. + * Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + * NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + * therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + * sensitive_labels block, but cannot be configured in both places. * */ @Import(name="labels") private @Nullable Output> labels; /** - * @return Configuration fields that define the channel and its behavior. The - * permissible and required labels are specified in the - * NotificationChannelDescriptor corresponding to the type field. - * Labels with sensitive data are obfuscated by the API and therefore the provider cannot - * determine if there are upstream changes to these fields. They can also be configured via - * the sensitive_labels block, but cannot be configured in both places. + * @return Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + * NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + * therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + * sensitive_labels block, but cannot be configured in both places. * */ public Optional>> labels() { @@ -310,12 +306,10 @@ public Builder forceDelete(Boolean forceDelete) { } /** - * @param labels Configuration fields that define the channel and its behavior. The - * permissible and required labels are specified in the - * NotificationChannelDescriptor corresponding to the type field. - * Labels with sensitive data are obfuscated by the API and therefore the provider cannot - * determine if there are upstream changes to these fields. They can also be configured via - * the sensitive_labels block, but cannot be configured in both places. + * @param labels Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + * NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + * therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + * sensitive_labels block, but cannot be configured in both places. * * @return builder * @@ -326,12 +320,10 @@ public Builder labels(@Nullable Output> labels) { } /** - * @param labels Configuration fields that define the channel and its behavior. The - * permissible and required labels are specified in the - * NotificationChannelDescriptor corresponding to the type field. - * Labels with sensitive data are obfuscated by the API and therefore the provider cannot - * determine if there are upstream changes to these fields. They can also be configured via - * the sensitive_labels block, but cannot be configured in both places. + * @param labels Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + * NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + * therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + * sensitive_labels block, but cannot be configured in both places. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/Slo.java b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/Slo.java index b3d2b55c87..59a5baceba 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/Slo.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/Slo.java @@ -70,7 +70,7 @@ * var appengSlo = new Slo("appengSlo", SloArgs.builder() * .service(default_.serviceId()) * .sloId("ae-slo") - * .displayName("Test SLO for App Engine") + * .displayName("Terraform Test SLO for App Engine") * .goal(0.9) * .calendarPeriod("DAY") * .basicSli(SloBasicSliArgs.builder() @@ -122,7 +122,7 @@ * var requestBasedSlo = new Slo("requestBasedSlo", SloArgs.builder() * .service(customsrv.serviceId()) * .sloId("consumed-api-slo") - * .displayName("Test SLO with request based SLI (good total ratio)") + * .displayName("Terraform Test SLO with request based SLI (good total ratio)") * .goal(0.9) * .rollingPeriodDays(30) * .requestBasedSli(SloRequestBasedSliArgs.builder() diff --git a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/UptimeCheckConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/UptimeCheckConfig.java index 2dae30e731..6c65791399 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/UptimeCheckConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/UptimeCheckConfig.java @@ -21,17 +21,6 @@ import javax.annotation.Nullable; /** - * This message configures which resources and services to monitor for availability. - * - * To get more information about UptimeCheckConfig, see: - * - * * [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.uptimeCheckConfigs) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/monitoring/uptime-checks/) - * - * > **Warning:** All arguments including `http_check.auth_info.password` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Uptime Check Config Http * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/inputs/NotificationChannelState.java b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/inputs/NotificationChannelState.java index 35b7733975..a8daa8b3ce 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/monitoring/inputs/NotificationChannelState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/monitoring/inputs/NotificationChannelState.java @@ -87,24 +87,20 @@ public Optional> forceDelete() { } /** - * Configuration fields that define the channel and its behavior. The - * permissible and required labels are specified in the - * NotificationChannelDescriptor corresponding to the type field. - * Labels with sensitive data are obfuscated by the API and therefore the provider cannot - * determine if there are upstream changes to these fields. They can also be configured via - * the sensitive_labels block, but cannot be configured in both places. + * Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + * NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + * therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + * sensitive_labels block, but cannot be configured in both places. * */ @Import(name="labels") private @Nullable Output> labels; /** - * @return Configuration fields that define the channel and its behavior. The - * permissible and required labels are specified in the - * NotificationChannelDescriptor corresponding to the type field. - * Labels with sensitive data are obfuscated by the API and therefore the provider cannot - * determine if there are upstream changes to these fields. They can also be configured via - * the sensitive_labels block, but cannot be configured in both places. + * @return Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + * NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + * therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + * sensitive_labels block, but cannot be configured in both places. * */ public Optional>> labels() { @@ -346,12 +342,10 @@ public Builder forceDelete(Boolean forceDelete) { } /** - * @param labels Configuration fields that define the channel and its behavior. The - * permissible and required labels are specified in the - * NotificationChannelDescriptor corresponding to the type field. - * Labels with sensitive data are obfuscated by the API and therefore the provider cannot - * determine if there are upstream changes to these fields. They can also be configured via - * the sensitive_labels block, but cannot be configured in both places. + * @param labels Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + * NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + * therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + * sensitive_labels block, but cannot be configured in both places. * * @return builder * @@ -362,12 +356,10 @@ public Builder labels(@Nullable Output> labels) { } /** - * @param labels Configuration fields that define the channel and its behavior. The - * permissible and required labels are specified in the - * NotificationChannelDescriptor corresponding to the type field. - * Labels with sensitive data are obfuscated by the API and therefore the provider cannot - * determine if there are upstream changes to these fields. They can also be configured via - * the sensitive_labels block, but cannot be configured in both places. + * @param labels Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + * NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + * therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + * sensitive_labels block, but cannot be configured in both places. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/notebooks/Instance.java b/sdk/java/src/main/java/com/pulumi/gcp/notebooks/Instance.java index 07a522b5a9..4148c46fc4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/notebooks/Instance.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/notebooks/Instance.java @@ -102,7 +102,10 @@ * .build()) * .location("us-west1-a") * .machineType("e2-medium") - * .metadata(Map.of("proxy-mode", "service_account")) + * .metadata(Map.ofEntries( + * Map.entry("proxy-mode", "service_account"), + * Map.entry("terraform", "true") + * )) * .build()); * * } @@ -201,6 +204,7 @@ * .network(myNetwork.applyValue(getNetworkResult -> getNetworkResult.id())) * .subnet(mySubnetwork.applyValue(getSubnetworkResult -> getSubnetworkResult.id())) * .labels(Map.of("k", "val")) + * .metadata(Map.of("terraform", "true")) * .build()); * * } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/Folder.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/Folder.java index 760cd7e9dc..252dee2584 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/Folder.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/Folder.java @@ -14,20 +14,6 @@ import javax.annotation.Nullable; /** - * Allows management of a Google Cloud Platform folder. For more information see - * [the official documentation](https://cloud.google.com/resource-manager/docs/creating-managing-folders) - * and - * [API](https://cloud.google.com/resource-manager/reference/rest/v2/folders). - * - * A folder can contain projects, other folders, or a combination of both. You can use folders to group projects under an organization in a hierarchy. For example, your organization might contain multiple departments, each with its own set of Cloud Platform resources. Folders allows you to group these resources on a per-department basis. Folders are used to group resources that share common IAM policies. - * - * Folders created live inside an Organization. See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - * - * The service account used to run the provider when creating a `gcp.organizations.Folder` - * resource must have `roles/resourcemanager.folderCreator`. See the - * [Access Control for Folders Using IAM](https://cloud.google.com/resource-manager/docs/access-control-folders) - * doc for more information. - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMBinding.java index c4511e4899..5e97e2c757 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMBinding.java @@ -17,69 +17,62 @@ import javax.annotation.Nullable; /** - * Allows creation and management of a single binding within IAM policy for - * an existing Google Cloud Platform Organization. - * - * > **Note:** This resource __must not__ be used in conjunction with - * `gcp.organizations.IAMMember` for the __same role__ or they will fight over - * what your policy should be. + * ## Import * - * > **Note:** On create, this resource will overwrite members of any existing roles. - * Use `pulumi import` and inspect the `output to ensure - * your existing members are preserved. + * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. * - * ## Example Usage - * ```java - * package generated_program; + * This member resource can be imported using the `org_id`, role, and member e.g. * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.IAMBinding; - * import com.pulumi.gcp.organizations.IAMBindingArgs; - * 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; + * ```sh + * $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-orgid roles/viewer user:foo@example.com" + * ``` * - * public class App { - * public static void main(String[] args) { - * Pulumi.run(App::stack); - * } + * IAM binding imports use space-delimited identifiers; the resource in question and the role. * - * public static void stack(Context ctx) { - * var binding = new IAMBinding("binding", IAMBindingArgs.builder() - * .members("user:alice@gmail.com") - * .orgId("123456789") - * .role("roles/browser") - * .build()); + * This binding resource can be imported using the `org_id` and role, e.g. * - * } - * } + * ```sh + * $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-org-id roles/viewer" * ``` * - * ## Import + * IAM policy imports use the identifier of the resource in question. * - * IAM binding imports use space-delimited identifiers; first the resource in question and then the role. + * This policy resource can be imported using the `org_id`. * - * These bindings can be imported using the `org_id` and role, e.g. + * ```sh + * $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization your-org-id + * ``` + * + * IAM audit config imports use the identifier of the resource in question and the service, e.g. * * ```sh - * $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_org "your-org-id roles/viewer" + * $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-organization-id foo.googleapis.com" * ``` * * -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the * - * full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. + * full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure + * + * ```sh + * $ pulumi import gcp:organizations/iAMBinding:IAMBinding to include the title of condition, e.g. `google_organization_iam_binding.my_organization "your-org-id roles/{{role_id}} condition-title"` + * ``` * */ @ResourceType(type="gcp:organizations/iAMBinding:IAMBinding") public class IAMBinding extends com.pulumi.resources.CustomResource { + /** + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + */ @Export(name="condition", type=IAMBindingCondition.class, parameters={}) private Output condition; + /** + * @return An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + */ public Output> condition() { return Codegen.optional(this.condition); } @@ -97,29 +90,25 @@ public Output> condition() { public Output etag() { return this.etag; } - /** - * A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - */ @Export(name="members", type=List.class, parameters={String.class}) private Output> members; - /** - * @return A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - */ public Output> members() { return this.members; } /** - * The numeric ID of the organization in which you want to create a custom role. + * The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * */ @Export(name="orgId", type=String.class, parameters={}) private Output orgId; /** - * @return The numeric ID of the organization in which you want to create a custom role. + * @return The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * */ public Output orgId() { @@ -128,7 +117,7 @@ public Output orgId() { /** * The role that should be applied. Only one * `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * */ @Export(name="role", type=String.class, parameters={}) @@ -137,7 +126,7 @@ public Output orgId() { /** * @return The role that should be applied. Only one * `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * */ public Output role() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMBindingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMBindingArgs.java index dbbcfc6463..b311aa28cd 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMBindingArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMBindingArgs.java @@ -17,37 +17,43 @@ public final class IAMBindingArgs extends com.pulumi.resources.ResourceArgs { public static final IAMBindingArgs Empty = new IAMBindingArgs(); + /** + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + */ @Import(name="condition") private @Nullable Output condition; + /** + * @return An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + */ public Optional> condition() { return Optional.ofNullable(this.condition); } - /** - * A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - */ @Import(name="members", required=true) private Output> members; - /** - * @return A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - */ public Output> members() { return this.members; } /** - * The numeric ID of the organization in which you want to create a custom role. + * The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * */ @Import(name="orgId", required=true) private Output orgId; /** - * @return The numeric ID of the organization in which you want to create a custom role. + * @return The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * */ public Output orgId() { @@ -57,7 +63,7 @@ public Output orgId() { /** * The role that should be applied. Only one * `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * */ @Import(name="role", required=true) @@ -66,7 +72,7 @@ public Output orgId() { /** * @return The role that should be applied. Only one * `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * */ public Output role() { @@ -100,48 +106,46 @@ public Builder(IAMBindingArgs defaults) { $ = new IAMBindingArgs(Objects.requireNonNull(defaults)); } + /** + * @param condition An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + * @return builder + * + */ public Builder condition(@Nullable Output condition) { $.condition = condition; return this; } - public Builder condition(IAMBindingConditionArgs condition) { - return condition(Output.of(condition)); - } - /** - * @param members A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding + * @param condition An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. * * @return builder * */ + public Builder condition(IAMBindingConditionArgs condition) { + return condition(Output.of(condition)); + } + public Builder members(Output> members) { $.members = members; return this; } - /** - * @param members A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - * @return builder - * - */ public Builder members(List members) { return members(Output.of(members)); } - /** - * @param members A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - * @return builder - * - */ public Builder members(String... members) { return members(List.of(members)); } /** - * @param orgId The numeric ID of the organization in which you want to create a custom role. + * @param orgId The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * * @return builder * @@ -152,7 +156,9 @@ public Builder orgId(Output orgId) { } /** - * @param orgId The numeric ID of the organization in which you want to create a custom role. + * @param orgId The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * * @return builder * @@ -164,7 +170,7 @@ public Builder orgId(String orgId) { /** * @param role The role that should be applied. Only one * `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * * @return builder * @@ -177,7 +183,7 @@ public Builder role(Output role) { /** * @param role The role that should be applied. Only one * `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMCustomRole.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMCustomRole.java index de848776bc..436b4ad313 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMCustomRole.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMCustomRole.java @@ -17,18 +17,6 @@ import javax.annotation.Nullable; /** - * Allows management of a customized Cloud IAM organization role. For more information see - * [the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles) - * and - * [API](https://cloud.google.com/iam/reference/rest/v1/organizations.roles). - * - * > **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise - * from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the - * same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted - * after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is - * made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all - * by the provider, and new roles cannot share that name. - * * ## Example Usage * * This snippet creates a customized IAM organization role. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMMember.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMMember.java index 258fb49869..36d2ba8604 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMMember.java @@ -16,296 +16,6 @@ import javax.annotation.Nullable; /** - * Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case: - * - * * `gcp.organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached. - * * `gcp.organizations.IAMBinding`: 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 organization are preserved. - * * `gcp.organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved. - * * `gcp.organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.organizations.IAMPolicy` **cannot** be used in conjunction with `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.organizations.IAMBinding` resources **can be** used in conjunction with `gcp.organizations.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_organization\_iam\_policy - * - * !> **Warning:** New organizations have several default policies which will, - * without extreme caution, be **overwritten** by use of this resource. - * The safest alternative is to use multiple `gcp.organizations.IAMBinding` - * resources. This resource makes it easy to remove your own access to - * an organization, which will require a call to Google Support to have - * fixed, and can take multiple days to resolve. - * - * In general, this resource should only be used with organizations - * fully managed by this provider.I f you do use this resource, - * the best way to be sure that you are not making dangerous changes is to start - * by **importing** your existing policy, and examining the diff very closely. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.organizations.IAMPolicy; - * import com.pulumi.gcp.organizations.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var organization = new IAMPolicy("organization", IAMPolicyArgs.builder() - * .orgId("your-organization-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.organizations.IAMPolicy; - * import com.pulumi.gcp.organizations.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()) - * .build()); - * - * var organization = new IAMPolicy("organization", IAMPolicyArgs.builder() - * .orgId("your-organization-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_organization\_iam\_binding - * - * > **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.IAMBinding; - * import com.pulumi.gcp.organizations.IAMBindingArgs; - * 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 organization = new IAMBinding("organization", IAMBindingArgs.builder() - * .members("user:jane@example.com") - * .orgId("your-organization-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.IAMBinding; - * import com.pulumi.gcp.organizations.IAMBindingArgs; - * import com.pulumi.gcp.organizations.inputs.IAMBindingConditionArgs; - * 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 organization = new IAMBinding("organization", IAMBindingArgs.builder() - * .condition(IAMBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .orgId("your-organization-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_organization\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.IAMMember; - * import com.pulumi.gcp.organizations.IAMMemberArgs; - * 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 organization = new IAMMember("organization", IAMMemberArgs.builder() - * .member("user:jane@example.com") - * .orgId("your-organization-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.IAMMember; - * import com.pulumi.gcp.organizations.IAMMemberArgs; - * import com.pulumi.gcp.organizations.inputs.IAMMemberConditionArgs; - * 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 organization = new IAMMember("organization", IAMMemberArgs.builder() - * .condition(IAMMemberConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .member("user:jane@example.com") - * .orgId("your-organization-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_organization\_iam\_audit\_config - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.IamAuditConfig; - * import com.pulumi.gcp.organizations.IamAuditConfigArgs; - * import com.pulumi.gcp.organizations.inputs.IamAuditConfigAuditLogConfigArgs; - * 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 organization = new IamAuditConfig("organization", IamAuditConfigArgs.builder() - * .auditLogConfigs( - * IamAuditConfigAuditLogConfigArgs.builder() - * .logType("ADMIN_READ") - * .build(), - * IamAuditConfigAuditLogConfigArgs.builder() - * .exemptedMembers("user:joebloggs@hashicorp.com") - * .logType("DATA_READ") - * .build()) - * .orgId("your-organization-id") - * .service("allServices") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMPolicy.java index e44993eb20..3eb79ff6c2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IAMPolicy.java @@ -14,296 +14,6 @@ import javax.annotation.Nullable; /** - * Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case: - * - * * `gcp.organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached. - * * `gcp.organizations.IAMBinding`: 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 organization are preserved. - * * `gcp.organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved. - * * `gcp.organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.organizations.IAMPolicy` **cannot** be used in conjunction with `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.organizations.IAMBinding` resources **can be** used in conjunction with `gcp.organizations.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_organization\_iam\_policy - * - * !> **Warning:** New organizations have several default policies which will, - * without extreme caution, be **overwritten** by use of this resource. - * The safest alternative is to use multiple `gcp.organizations.IAMBinding` - * resources. This resource makes it easy to remove your own access to - * an organization, which will require a call to Google Support to have - * fixed, and can take multiple days to resolve. - * - * In general, this resource should only be used with organizations - * fully managed by this provider.I f you do use this resource, - * the best way to be sure that you are not making dangerous changes is to start - * by **importing** your existing policy, and examining the diff very closely. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.organizations.IAMPolicy; - * import com.pulumi.gcp.organizations.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var organization = new IAMPolicy("organization", IAMPolicyArgs.builder() - * .orgId("your-organization-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.organizations.IAMPolicy; - * import com.pulumi.gcp.organizations.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .role("roles/editor") - * .build()) - * .build()); - * - * var organization = new IAMPolicy("organization", IAMPolicyArgs.builder() - * .orgId("your-organization-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * ## google\_organization\_iam\_binding - * - * > **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.IAMBinding; - * import com.pulumi.gcp.organizations.IAMBindingArgs; - * 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 organization = new IAMBinding("organization", IAMBindingArgs.builder() - * .members("user:jane@example.com") - * .orgId("your-organization-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.IAMBinding; - * import com.pulumi.gcp.organizations.IAMBindingArgs; - * import com.pulumi.gcp.organizations.inputs.IAMBindingConditionArgs; - * 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 organization = new IAMBinding("organization", IAMBindingArgs.builder() - * .condition(IAMBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .orgId("your-organization-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_organization\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.IAMMember; - * import com.pulumi.gcp.organizations.IAMMemberArgs; - * 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 organization = new IAMMember("organization", IAMMemberArgs.builder() - * .member("user:jane@example.com") - * .orgId("your-organization-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.IAMMember; - * import com.pulumi.gcp.organizations.IAMMemberArgs; - * import com.pulumi.gcp.organizations.inputs.IAMMemberConditionArgs; - * 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 organization = new IAMMember("organization", IAMMemberArgs.builder() - * .condition(IAMMemberConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .member("user:jane@example.com") - * .orgId("your-organization-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * ## google\_organization\_iam\_audit\_config - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.IamAuditConfig; - * import com.pulumi.gcp.organizations.IamAuditConfigArgs; - * import com.pulumi.gcp.organizations.inputs.IamAuditConfigAuditLogConfigArgs; - * 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 organization = new IamAuditConfig("organization", IamAuditConfigArgs.builder() - * .auditLogConfigs( - * IamAuditConfigAuditLogConfigArgs.builder() - * .logType("ADMIN_READ") - * .build(), - * IamAuditConfigAuditLogConfigArgs.builder() - * .exemptedMembers("user:joebloggs@hashicorp.com") - * .logType("DATA_READ") - * .build()) - * .orgId("your-organization-id") - * .service("allServices") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IamAuditConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IamAuditConfig.java index 557869efb3..1938968b3a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IamAuditConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IamAuditConfig.java @@ -16,50 +16,44 @@ import javax.annotation.Nullable; /** - * Allows management of audit logging config for a given service for a Google Cloud Platform Organization. + * ## Import + * + * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. * - * ## Example Usage - * ```java - * package generated_program; + * This member resource can be imported using the `org_id`, role, and member e.g. * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.IamAuditConfig; - * import com.pulumi.gcp.organizations.IamAuditConfigArgs; - * import com.pulumi.gcp.organizations.inputs.IamAuditConfigAuditLogConfigArgs; - * 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; + * ```sh + * $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-orgid roles/viewer user:foo@example.com" + * ``` * - * public class App { - * public static void main(String[] args) { - * Pulumi.run(App::stack); - * } + * IAM binding imports use space-delimited identifiers; the resource in question and the role. * - * public static void stack(Context ctx) { - * var config = new IamAuditConfig("config", IamAuditConfigArgs.builder() - * .auditLogConfigs(IamAuditConfigAuditLogConfigArgs.builder() - * .exemptedMembers("user:joebloggs@hashicorp.com") - * .logType("DATA_READ") - * .build()) - * .orgId("your-organization-id") - * .service("allServices") - * .build()); + * This binding resource can be imported using the `org_id` and role, e.g. * - * } - * } + * ```sh + * $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-org-id roles/viewer" * ``` * - * ## Import + * IAM policy imports use the identifier of the resource in question. + * + * This policy resource can be imported using the `org_id`. + * + * ```sh + * $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization your-org-id + * ``` + * + * IAM audit config imports use the identifier of the resource in question and the service, e.g. + * + * ```sh + * $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-organization-id foo.googleapis.com" + * ``` + * + * -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the * - * IAM audit config imports use the identifier of the resource in question and the service, e.g. + * full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure * * ```sh - * $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig config "your-organization-id foo.googleapis.com" + * $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig to include the title of condition, e.g. `google_organization_iam_binding.my_organization "your-org-id roles/{{role_id}} condition-title"` * ``` * */ @@ -80,28 +74,32 @@ public Output> auditLogConfigs() { return this.auditLogConfigs; } /** - * The etag of iam policy + * (Computed) The etag of the organization's IAM policy. * */ @Export(name="etag", type=String.class, parameters={}) private Output etag; /** - * @return The etag of iam policy + * @return (Computed) The etag of the organization's IAM policy. * */ public Output etag() { return this.etag; } /** - * The numeric ID of the organization in which you want to manage the audit logging config. + * The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * */ @Export(name="orgId", type=String.class, parameters={}) private Output orgId; /** - * @return The numeric ID of the organization in which you want to manage the audit logging config. + * @return The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * */ public Output orgId() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IamAuditConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IamAuditConfigArgs.java index 1c93b75daa..a9dcdb54cf 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/IamAuditConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/IamAuditConfigArgs.java @@ -31,14 +31,18 @@ public Output> auditLogConfigs() { } /** - * The numeric ID of the organization in which you want to manage the audit logging config. + * The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * */ @Import(name="orgId", required=true) private Output orgId; /** - * @return The numeric ID of the organization in which you want to manage the audit logging config. + * @return The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * */ public Output orgId() { @@ -118,7 +122,9 @@ public Builder auditLogConfigs(IamAuditConfigAuditLogConfigArgs... auditLogConfi } /** - * @param orgId The numeric ID of the organization in which you want to manage the audit logging config. + * @param orgId The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * * @return builder * @@ -129,7 +135,9 @@ public Builder orgId(Output orgId) { } /** - * @param orgId The numeric ID of the organization in which you want to manage the audit logging config. + * @param orgId The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/Project.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/Project.java index c313cf69c4..a1a37a398c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/Project.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/Project.java @@ -17,24 +17,6 @@ import javax.annotation.Nullable; /** - * Allows creation and management of a Google Cloud Platform project. - * - * Projects created with this resource must be associated with an Organization. - * See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - * - * The user or service account that is running this provider when creating a `gcp.organizations.Project` - * resource must have `roles/resourcemanager.projectCreator` on the specified organization. See the - * [Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org) - * doc for more information. - * - * > This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account. - * - * To get more information about projects, see: - * - * * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects) - * * How-to Guides - * * [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects) - * * ## Example Usage * ```java * package generated_program; @@ -116,42 +98,36 @@ @ResourceType(type="gcp:organizations/project:Project") public class Project extends com.pulumi.resources.CustomResource { /** - * Create the 'default' network automatically. Default `true`. - * If set to `false`, the default network will be deleted. Note that, for quota purposes, you - * will still need to have 1 network slot available to create the project successfully, even if - * you set `auto_create_network` to `false`, since the network will exist momentarily. + * Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + * that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + * if you set auto_create_network to false, since the network will exist momentarily. * */ @Export(name="autoCreateNetwork", type=Boolean.class, parameters={}) private Output autoCreateNetwork; /** - * @return Create the 'default' network automatically. Default `true`. - * If set to `false`, the default network will be deleted. Note that, for quota purposes, you - * will still need to have 1 network slot available to create the project successfully, even if - * you set `auto_create_network` to `false`, since the network will exist momentarily. + * @return Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + * that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + * if you set auto_create_network to false, since the network will exist momentarily. * */ public Output> autoCreateNetwork() { return Codegen.optional(this.autoCreateNetwork); } /** - * The alphanumeric ID of the billing account this project - * belongs to. The user or service account performing this operation with the provider - * must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - * See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - * for more details. + * The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + * operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + * See Google Cloud Billing API Access Control for more details. * */ @Export(name="billingAccount", type=String.class, parameters={}) private Output billingAccount; /** - * @return The alphanumeric ID of the billing account this project - * belongs to. The user or service account performing this operation with the provider - * must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - * See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - * for more details. + * @return The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + * operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + * See Google Cloud Billing API Access Control for more details. * */ public Output> billingAccount() { @@ -260,16 +236,14 @@ public Output projectId() { return this.projectId; } /** - * If true, the resource can be deleted - * without deleting the Project via the Google API. + * If true, the Terraform resource can be deleted without deleting the Project via the Google API. * */ @Export(name="skipDelete", type=Boolean.class, parameters={}) private Output skipDelete; /** - * @return If true, the resource can be deleted - * without deleting the Project via the Google API. + * @return If true, the Terraform resource can be deleted without deleting the Project via the Google API. * */ public Output skipDelete() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/ProjectArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/ProjectArgs.java index 3c9e9b4f7c..cf6fc11f54 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/ProjectArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/ProjectArgs.java @@ -18,20 +18,18 @@ public final class ProjectArgs extends com.pulumi.resources.ResourceArgs { public static final ProjectArgs Empty = new ProjectArgs(); /** - * Create the 'default' network automatically. Default `true`. - * If set to `false`, the default network will be deleted. Note that, for quota purposes, you - * will still need to have 1 network slot available to create the project successfully, even if - * you set `auto_create_network` to `false`, since the network will exist momentarily. + * Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + * that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + * if you set auto_create_network to false, since the network will exist momentarily. * */ @Import(name="autoCreateNetwork") private @Nullable Output autoCreateNetwork; /** - * @return Create the 'default' network automatically. Default `true`. - * If set to `false`, the default network will be deleted. Note that, for quota purposes, you - * will still need to have 1 network slot available to create the project successfully, even if - * you set `auto_create_network` to `false`, since the network will exist momentarily. + * @return Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + * that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + * if you set auto_create_network to false, since the network will exist momentarily. * */ public Optional> autoCreateNetwork() { @@ -39,22 +37,18 @@ public Optional> autoCreateNetwork() { } /** - * The alphanumeric ID of the billing account this project - * belongs to. The user or service account performing this operation with the provider - * must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - * See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - * for more details. + * The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + * operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + * See Google Cloud Billing API Access Control for more details. * */ @Import(name="billingAccount") private @Nullable Output billingAccount; /** - * @return The alphanumeric ID of the billing account this project - * belongs to. The user or service account performing this operation with the provider - * must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - * See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - * for more details. + * @return The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + * operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + * See Google Cloud Billing API Access Control for more details. * */ public Optional> billingAccount() { @@ -155,16 +149,14 @@ public Output projectId() { } /** - * If true, the resource can be deleted - * without deleting the Project via the Google API. + * If true, the Terraform resource can be deleted without deleting the Project via the Google API. * */ @Import(name="skipDelete") private @Nullable Output skipDelete; /** - * @return If true, the resource can be deleted - * without deleting the Project via the Google API. + * @return If true, the Terraform resource can be deleted without deleting the Project via the Google API. * */ public Optional> skipDelete() { @@ -203,10 +195,9 @@ public Builder(ProjectArgs defaults) { } /** - * @param autoCreateNetwork Create the 'default' network automatically. Default `true`. - * If set to `false`, the default network will be deleted. Note that, for quota purposes, you - * will still need to have 1 network slot available to create the project successfully, even if - * you set `auto_create_network` to `false`, since the network will exist momentarily. + * @param autoCreateNetwork Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + * that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + * if you set auto_create_network to false, since the network will exist momentarily. * * @return builder * @@ -217,10 +208,9 @@ public Builder autoCreateNetwork(@Nullable Output autoCreateNetwork) { } /** - * @param autoCreateNetwork Create the 'default' network automatically. Default `true`. - * If set to `false`, the default network will be deleted. Note that, for quota purposes, you - * will still need to have 1 network slot available to create the project successfully, even if - * you set `auto_create_network` to `false`, since the network will exist momentarily. + * @param autoCreateNetwork Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + * that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + * if you set auto_create_network to false, since the network will exist momentarily. * * @return builder * @@ -230,11 +220,9 @@ public Builder autoCreateNetwork(Boolean autoCreateNetwork) { } /** - * @param billingAccount The alphanumeric ID of the billing account this project - * belongs to. The user or service account performing this operation with the provider - * must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - * See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - * for more details. + * @param billingAccount The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + * operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + * See Google Cloud Billing API Access Control for more details. * * @return builder * @@ -245,11 +233,9 @@ public Builder billingAccount(@Nullable Output billingAccount) { } /** - * @param billingAccount The alphanumeric ID of the billing account this project - * belongs to. The user or service account performing this operation with the provider - * must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - * See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - * for more details. + * @param billingAccount The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + * operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + * See Google Cloud Billing API Access Control for more details. * * @return builder * @@ -382,8 +368,7 @@ public Builder projectId(String projectId) { } /** - * @param skipDelete If true, the resource can be deleted - * without deleting the Project via the Google API. + * @param skipDelete If true, the Terraform resource can be deleted without deleting the Project via the Google API. * * @return builder * @@ -394,8 +379,7 @@ public Builder skipDelete(@Nullable Output skipDelete) { } /** - * @param skipDelete If true, the resource can be deleted - * without deleting the Project via the Google API. + * @param skipDelete If true, the Terraform resource can be deleted without deleting the Project via the Google API. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IAMBindingConditionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IAMBindingConditionArgs.java index 6d3b23c27c..d0fdd5832f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IAMBindingConditionArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IAMBindingConditionArgs.java @@ -15,23 +15,47 @@ public final class IAMBindingConditionArgs extends com.pulumi.resources.Resource public static final IAMBindingConditionArgs Empty = new IAMBindingConditionArgs(); + /** + * An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + */ @Import(name="description") private @Nullable Output description; + /** + * @return An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + */ public Optional> description() { return Optional.ofNullable(this.description); } + /** + * Textual representation of an expression in Common Expression Language syntax. + * + */ @Import(name="expression", required=true) private Output expression; + /** + * @return Textual representation of an expression in Common Expression Language syntax. + * + */ public Output expression() { return this.expression; } + /** + * A title for the expression, i.e. a short string describing its purpose. + * + */ @Import(name="title", required=true) private Output title; + /** + * @return A title for the expression, i.e. a short string describing its purpose. + * + */ public Output title() { return this.title; } @@ -62,29 +86,65 @@ public Builder(IAMBindingConditionArgs defaults) { $ = new IAMBindingConditionArgs(Objects.requireNonNull(defaults)); } + /** + * @param description An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + * @return builder + * + */ public Builder description(@Nullable Output description) { $.description = description; return this; } + /** + * @param description An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + * @return builder + * + */ public Builder description(String description) { return description(Output.of(description)); } + /** + * @param expression Textual representation of an expression in Common Expression Language syntax. + * + * @return builder + * + */ public Builder expression(Output expression) { $.expression = expression; return this; } + /** + * @param expression Textual representation of an expression in Common Expression Language syntax. + * + * @return builder + * + */ public Builder expression(String expression) { return expression(Output.of(expression)); } + /** + * @param title A title for the expression, i.e. a short string describing its purpose. + * + * @return builder + * + */ public Builder title(Output title) { $.title = title; return this; } + /** + * @param title A title for the expression, i.e. a short string describing its purpose. + * + * @return builder + * + */ public Builder title(String title) { return title(Output.of(title)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IAMBindingState.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IAMBindingState.java index bb0b06295c..17049c5922 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IAMBindingState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IAMBindingState.java @@ -17,9 +17,19 @@ public final class IAMBindingState extends com.pulumi.resources.ResourceArgs { public static final IAMBindingState Empty = new IAMBindingState(); + /** + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + */ @Import(name="condition") private @Nullable Output condition; + /** + * @return An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + */ public Optional> condition() { return Optional.ofNullable(this.condition); } @@ -39,30 +49,26 @@ public Optional> etag() { return Optional.ofNullable(this.etag); } - /** - * A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - */ @Import(name="members") private @Nullable Output> members; - /** - * @return A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - */ public Optional>> members() { return Optional.ofNullable(this.members); } /** - * The numeric ID of the organization in which you want to create a custom role. + * The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * */ @Import(name="orgId") private @Nullable Output orgId; /** - * @return The numeric ID of the organization in which you want to create a custom role. + * @return The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * */ public Optional> orgId() { @@ -72,7 +78,7 @@ public Optional> orgId() { /** * The role that should be applied. Only one * `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * */ @Import(name="role") @@ -81,7 +87,7 @@ public Optional> orgId() { /** * @return The role that should be applied. Only one * `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * */ public Optional> role() { @@ -116,11 +122,25 @@ public Builder(IAMBindingState defaults) { $ = new IAMBindingState(Objects.requireNonNull(defaults)); } + /** + * @param condition An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + * @return builder + * + */ public Builder condition(@Nullable Output condition) { $.condition = condition; return this; } + /** + * @param condition An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + * + * @return builder + * + */ public Builder condition(IAMBindingConditionArgs condition) { return condition(Output.of(condition)); } @@ -146,39 +166,23 @@ public Builder etag(String etag) { return etag(Output.of(etag)); } - /** - * @param members A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - * @return builder - * - */ public Builder members(@Nullable Output> members) { $.members = members; return this; } - /** - * @param members A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - * @return builder - * - */ public Builder members(List members) { return members(Output.of(members)); } - /** - * @param members A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - * - * @return builder - * - */ public Builder members(String... members) { return members(List.of(members)); } /** - * @param orgId The numeric ID of the organization in which you want to create a custom role. + * @param orgId The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * * @return builder * @@ -189,7 +193,9 @@ public Builder orgId(@Nullable Output orgId) { } /** - * @param orgId The numeric ID of the organization in which you want to create a custom role. + * @param orgId The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * * @return builder * @@ -201,7 +207,7 @@ public Builder orgId(String orgId) { /** * @param role The role that should be applied. Only one * `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * * @return builder * @@ -214,7 +220,7 @@ public Builder role(@Nullable Output role) { /** * @param role The role that should be applied. Only one * `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IamAuditConfigAuditLogConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IamAuditConfigAuditLogConfigArgs.java index 138db0de1c..8264abb834 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IamAuditConfigAuditLogConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IamAuditConfigAuditLogConfigArgs.java @@ -17,24 +17,14 @@ public final class IamAuditConfigAuditLogConfigArgs extends com.pulumi.resources public static final IamAuditConfigAuditLogConfigArgs Empty = new IamAuditConfigAuditLogConfigArgs(); /** - * Identities that do not cause logging for this type of permission. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + * Identities that do not cause logging for this type of permission. The format is the same as that for `members`. * */ @Import(name="exemptedMembers") private @Nullable Output> exemptedMembers; /** - * @return Identities that do not cause logging for this type of permission. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + * @return Identities that do not cause logging for this type of permission. The format is the same as that for `members`. * */ public Optional>> exemptedMembers() { @@ -82,12 +72,7 @@ public Builder(IamAuditConfigAuditLogConfigArgs defaults) { } /** - * @param exemptedMembers Identities that do not cause logging for this type of permission. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + * @param exemptedMembers Identities that do not cause logging for this type of permission. The format is the same as that for `members`. * * @return builder * @@ -98,12 +83,7 @@ public Builder exemptedMembers(@Nullable Output> exemptedMembers) { } /** - * @param exemptedMembers Identities that do not cause logging for this type of permission. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + * @param exemptedMembers Identities that do not cause logging for this type of permission. The format is the same as that for `members`. * * @return builder * @@ -113,12 +93,7 @@ public Builder exemptedMembers(List exemptedMembers) { } /** - * @param exemptedMembers Identities that do not cause logging for this type of permission. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + * @param exemptedMembers Identities that do not cause logging for this type of permission. The format is the same as that for `members`. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IamAuditConfigState.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IamAuditConfigState.java index 8b60b074c4..65d5a9281c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IamAuditConfigState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/IamAuditConfigState.java @@ -33,14 +33,14 @@ public Optional>> auditLogConfigs( } /** - * The etag of iam policy + * (Computed) The etag of the organization's IAM policy. * */ @Import(name="etag") private @Nullable Output etag; /** - * @return The etag of iam policy + * @return (Computed) The etag of the organization's IAM policy. * */ public Optional> etag() { @@ -48,14 +48,18 @@ public Optional> etag() { } /** - * The numeric ID of the organization in which you want to manage the audit logging config. + * The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * */ @Import(name="orgId") private @Nullable Output orgId; /** - * @return The numeric ID of the organization in which you want to manage the audit logging config. + * @return The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * */ public Optional> orgId() { @@ -136,7 +140,7 @@ public Builder auditLogConfigs(IamAuditConfigAuditLogConfigArgs... auditLogConfi } /** - * @param etag The etag of iam policy + * @param etag (Computed) The etag of the organization's IAM policy. * * @return builder * @@ -147,7 +151,7 @@ public Builder etag(@Nullable Output etag) { } /** - * @param etag The etag of iam policy + * @param etag (Computed) The etag of the organization's IAM policy. * * @return builder * @@ -157,7 +161,9 @@ public Builder etag(String etag) { } /** - * @param orgId The numeric ID of the organization in which you want to manage the audit logging config. + * @param orgId The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * * @return builder * @@ -168,7 +174,9 @@ public Builder orgId(@Nullable Output orgId) { } /** - * @param orgId The numeric ID of the organization in which you want to manage the audit logging config. + * @param orgId The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/ProjectState.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/ProjectState.java index b3a2460650..cfc2b71c26 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/ProjectState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/inputs/ProjectState.java @@ -18,20 +18,18 @@ public final class ProjectState extends com.pulumi.resources.ResourceArgs { public static final ProjectState Empty = new ProjectState(); /** - * Create the 'default' network automatically. Default `true`. - * If set to `false`, the default network will be deleted. Note that, for quota purposes, you - * will still need to have 1 network slot available to create the project successfully, even if - * you set `auto_create_network` to `false`, since the network will exist momentarily. + * Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + * that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + * if you set auto_create_network to false, since the network will exist momentarily. * */ @Import(name="autoCreateNetwork") private @Nullable Output autoCreateNetwork; /** - * @return Create the 'default' network automatically. Default `true`. - * If set to `false`, the default network will be deleted. Note that, for quota purposes, you - * will still need to have 1 network slot available to create the project successfully, even if - * you set `auto_create_network` to `false`, since the network will exist momentarily. + * @return Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + * that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + * if you set auto_create_network to false, since the network will exist momentarily. * */ public Optional> autoCreateNetwork() { @@ -39,22 +37,18 @@ public Optional> autoCreateNetwork() { } /** - * The alphanumeric ID of the billing account this project - * belongs to. The user or service account performing this operation with the provider - * must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - * See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - * for more details. + * The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + * operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + * See Google Cloud Billing API Access Control for more details. * */ @Import(name="billingAccount") private @Nullable Output billingAccount; /** - * @return The alphanumeric ID of the billing account this project - * belongs to. The user or service account performing this operation with the provider - * must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - * See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - * for more details. + * @return The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + * operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + * See Google Cloud Billing API Access Control for more details. * */ public Optional> billingAccount() { @@ -170,16 +164,14 @@ public Optional> projectId() { } /** - * If true, the resource can be deleted - * without deleting the Project via the Google API. + * If true, the Terraform resource can be deleted without deleting the Project via the Google API. * */ @Import(name="skipDelete") private @Nullable Output skipDelete; /** - * @return If true, the resource can be deleted - * without deleting the Project via the Google API. + * @return If true, the Terraform resource can be deleted without deleting the Project via the Google API. * */ public Optional> skipDelete() { @@ -219,10 +211,9 @@ public Builder(ProjectState defaults) { } /** - * @param autoCreateNetwork Create the 'default' network automatically. Default `true`. - * If set to `false`, the default network will be deleted. Note that, for quota purposes, you - * will still need to have 1 network slot available to create the project successfully, even if - * you set `auto_create_network` to `false`, since the network will exist momentarily. + * @param autoCreateNetwork Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + * that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + * if you set auto_create_network to false, since the network will exist momentarily. * * @return builder * @@ -233,10 +224,9 @@ public Builder autoCreateNetwork(@Nullable Output autoCreateNetwork) { } /** - * @param autoCreateNetwork Create the 'default' network automatically. Default `true`. - * If set to `false`, the default network will be deleted. Note that, for quota purposes, you - * will still need to have 1 network slot available to create the project successfully, even if - * you set `auto_create_network` to `false`, since the network will exist momentarily. + * @param autoCreateNetwork Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + * that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + * if you set auto_create_network to false, since the network will exist momentarily. * * @return builder * @@ -246,11 +236,9 @@ public Builder autoCreateNetwork(Boolean autoCreateNetwork) { } /** - * @param billingAccount The alphanumeric ID of the billing account this project - * belongs to. The user or service account performing this operation with the provider - * must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - * See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - * for more details. + * @param billingAccount The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + * operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + * See Google Cloud Billing API Access Control for more details. * * @return builder * @@ -261,11 +249,9 @@ public Builder billingAccount(@Nullable Output billingAccount) { } /** - * @param billingAccount The alphanumeric ID of the billing account this project - * belongs to. The user or service account performing this operation with the provider - * must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - * See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - * for more details. + * @param billingAccount The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + * operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + * See Google Cloud Billing API Access Control for more details. * * @return builder * @@ -419,8 +405,7 @@ public Builder projectId(String projectId) { } /** - * @param skipDelete If true, the resource can be deleted - * without deleting the Project via the Google API. + * @param skipDelete If true, the Terraform resource can be deleted without deleting the Project via the Google API. * * @return builder * @@ -431,8 +416,7 @@ public Builder skipDelete(@Nullable Output skipDelete) { } /** - * @param skipDelete If true, the resource can be deleted - * without deleting the Project via the Google API. + * @param skipDelete If true, the Terraform resource can be deleted without deleting the Project via the Google API. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/outputs/IAMBindingCondition.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/outputs/IAMBindingCondition.java index 7b411dc6bf..e685119e7e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/outputs/IAMBindingCondition.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/outputs/IAMBindingCondition.java @@ -11,17 +11,41 @@ @CustomType public final class IAMBindingCondition { + /** + * @return An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + */ private @Nullable String description; + /** + * @return Textual representation of an expression in Common Expression Language syntax. + * + */ private String expression; + /** + * @return A title for the expression, i.e. a short string describing its purpose. + * + */ private String title; private IAMBindingCondition() {} + /** + * @return An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + * + */ public Optional description() { return Optional.ofNullable(this.description); } + /** + * @return Textual representation of an expression in Common Expression Language syntax. + * + */ public String expression() { return this.expression; } + /** + * @return A title for the expression, i.e. a short string describing its purpose. + * + */ public String title() { return this.title; } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/organizations/outputs/IamAuditConfigAuditLogConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/organizations/outputs/IamAuditConfigAuditLogConfig.java index 1dc4d1bb7b..2766b08a84 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/organizations/outputs/IamAuditConfigAuditLogConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/organizations/outputs/IamAuditConfigAuditLogConfig.java @@ -12,12 +12,7 @@ @CustomType public final class IamAuditConfigAuditLogConfig { /** - * @return Identities that do not cause logging for this type of permission. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + * @return Identities that do not cause logging for this type of permission. The format is the same as that for `members`. * */ private @Nullable List exemptedMembers; @@ -29,12 +24,7 @@ public final class IamAuditConfigAuditLogConfig { private IamAuditConfigAuditLogConfig() {} /** - * @return Identities that do not cause logging for this type of permission. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + * @return Identities that do not cause logging for this type of permission. The format is the same as that for `members`. * */ public List exemptedMembers() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/osconfig/GuestPolicies.java b/sdk/java/src/main/java/com/pulumi/gcp/osconfig/GuestPolicies.java index 296cb50bc7..d02230eef5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/osconfig/GuestPolicies.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/osconfig/GuestPolicies.java @@ -20,16 +20,6 @@ import javax.annotation.Nullable; /** - * An OS Config resource representing a guest configuration policy. These policies represent - * the desired state for VM instance guest environments including packages to install or remove, - * package repository configurations, and software to install. - * - * To get more information about GuestPolicies, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/osconfig/rest) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/compute/docs/os-config-management) - * * ## Example Usage * ### Os Config Guest Policies Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMAuditConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMAuditConfig.java index ac9927d823..df4bcbdf16 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMAuditConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMAuditConfig.java @@ -16,293 +16,6 @@ import javax.annotation.Nullable; /** - * Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - * - * * `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * * `gcp.projects.IAMBinding`: 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 project are preserved. - * * `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * * `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_project\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your project - * using this resource. Deleting a `gcp.projects.IAMPolicy` removes access - * from anyone without organization-level access to the project. Proceed with caution. - * It's not recommended to use `gcp.projects.IAMPolicy` with your provider project - * to avoid locking yourself out, and it should generally only be used with projects - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.projects.IAMPolicy; - * import com.pulumi.gcp.projects.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var project = new IAMPolicy("project", IAMPolicyArgs.builder() - * .project("your-project-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.projects.IAMPolicy; - * import com.pulumi.gcp.projects.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .role("roles/compute.admin") - * .build()) - * .build()); - * - * var project = new IAMPolicy("project", IAMPolicyArgs.builder() - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .project("your-project-id") - * .build()); - * - * } - * } - * ``` - * - * ## google\_project\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMBinding; - * import com.pulumi.gcp.projects.IAMBindingArgs; - * 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 project = new IAMBinding("project", IAMBindingArgs.builder() - * .members("user:jane@example.com") - * .project("your-project-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMBinding; - * import com.pulumi.gcp.projects.IAMBindingArgs; - * import com.pulumi.gcp.projects.inputs.IAMBindingConditionArgs; - * 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 project = new IAMBinding("project", IAMBindingArgs.builder() - * .condition(IAMBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .project("your-project-id") - * .role("roles/container.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_project\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMMember; - * import com.pulumi.gcp.projects.IAMMemberArgs; - * 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 project = new IAMMember("project", IAMMemberArgs.builder() - * .member("user:jane@example.com") - * .project("your-project-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMMember; - * import com.pulumi.gcp.projects.IAMMemberArgs; - * import com.pulumi.gcp.projects.inputs.IAMMemberConditionArgs; - * 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 project = new IAMMember("project", IAMMemberArgs.builder() - * .condition(IAMMemberConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .member("user:jane@example.com") - * .project("your-project-id") - * .role("roles/firebase.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_project\_iam\_audit\_config - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMAuditConfig; - * import com.pulumi.gcp.projects.IAMAuditConfigArgs; - * import com.pulumi.gcp.projects.inputs.IAMAuditConfigAuditLogConfigArgs; - * 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 project = new IAMAuditConfig("project", IAMAuditConfigArgs.builder() - * .auditLogConfigs( - * IAMAuditConfigAuditLogConfigArgs.builder() - * .logType("ADMIN_READ") - * .build(), - * IAMAuditConfigAuditLogConfigArgs.builder() - * .exemptedMembers("user:joebloggs@hashicorp.com") - * .logType("DATA_READ") - * .build()) - * .project("your-project-id") - * .service("allServices") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMBinding.java index 8dfd4144a9..d04504318a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMBinding.java @@ -17,293 +17,6 @@ import javax.annotation.Nullable; /** - * Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - * - * * `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * * `gcp.projects.IAMBinding`: 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 project are preserved. - * * `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * * `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_project\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your project - * using this resource. Deleting a `gcp.projects.IAMPolicy` removes access - * from anyone without organization-level access to the project. Proceed with caution. - * It's not recommended to use `gcp.projects.IAMPolicy` with your provider project - * to avoid locking yourself out, and it should generally only be used with projects - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.projects.IAMPolicy; - * import com.pulumi.gcp.projects.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var project = new IAMPolicy("project", IAMPolicyArgs.builder() - * .project("your-project-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.projects.IAMPolicy; - * import com.pulumi.gcp.projects.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .role("roles/compute.admin") - * .build()) - * .build()); - * - * var project = new IAMPolicy("project", IAMPolicyArgs.builder() - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .project("your-project-id") - * .build()); - * - * } - * } - * ``` - * - * ## google\_project\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMBinding; - * import com.pulumi.gcp.projects.IAMBindingArgs; - * 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 project = new IAMBinding("project", IAMBindingArgs.builder() - * .members("user:jane@example.com") - * .project("your-project-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMBinding; - * import com.pulumi.gcp.projects.IAMBindingArgs; - * import com.pulumi.gcp.projects.inputs.IAMBindingConditionArgs; - * 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 project = new IAMBinding("project", IAMBindingArgs.builder() - * .condition(IAMBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .project("your-project-id") - * .role("roles/container.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_project\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMMember; - * import com.pulumi.gcp.projects.IAMMemberArgs; - * 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 project = new IAMMember("project", IAMMemberArgs.builder() - * .member("user:jane@example.com") - * .project("your-project-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMMember; - * import com.pulumi.gcp.projects.IAMMemberArgs; - * import com.pulumi.gcp.projects.inputs.IAMMemberConditionArgs; - * 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 project = new IAMMember("project", IAMMemberArgs.builder() - * .condition(IAMMemberConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .member("user:jane@example.com") - * .project("your-project-id") - * .role("roles/firebase.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_project\_iam\_audit\_config - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMAuditConfig; - * import com.pulumi.gcp.projects.IAMAuditConfigArgs; - * import com.pulumi.gcp.projects.inputs.IAMAuditConfigAuditLogConfigArgs; - * 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 project = new IAMAuditConfig("project", IAMAuditConfigArgs.builder() - * .auditLogConfigs( - * IAMAuditConfigAuditLogConfigArgs.builder() - * .logType("ADMIN_READ") - * .build(), - * IAMAuditConfigAuditLogConfigArgs.builder() - * .exemptedMembers("user:joebloggs@hashicorp.com") - * .logType("DATA_READ") - * .build()) - * .project("your-project-id") - * .service("allServices") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMCustomRole.java b/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMCustomRole.java index 806c3ece9a..b5909d8841 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMCustomRole.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMCustomRole.java @@ -17,18 +17,6 @@ import javax.annotation.Nullable; /** - * Allows management of a customized Cloud IAM project role. For more information see - * [the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles) - * and - * [API](https://cloud.google.com/iam/reference/rest/v1/projects.roles). - * - * > **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise - * from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the - * same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted - * after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is - * made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all - * by the provider, and new roles cannot share that name. - * * ## Example Usage * * This snippet creates a customized IAM role. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMMember.java b/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMMember.java index 9122710a94..0625ebb1dd 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMMember.java @@ -16,293 +16,6 @@ import javax.annotation.Nullable; /** - * Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - * - * * `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * * `gcp.projects.IAMBinding`: 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 project are preserved. - * * `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * * `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_project\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your project - * using this resource. Deleting a `gcp.projects.IAMPolicy` removes access - * from anyone without organization-level access to the project. Proceed with caution. - * It's not recommended to use `gcp.projects.IAMPolicy` with your provider project - * to avoid locking yourself out, and it should generally only be used with projects - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.projects.IAMPolicy; - * import com.pulumi.gcp.projects.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var project = new IAMPolicy("project", IAMPolicyArgs.builder() - * .project("your-project-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.projects.IAMPolicy; - * import com.pulumi.gcp.projects.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .role("roles/compute.admin") - * .build()) - * .build()); - * - * var project = new IAMPolicy("project", IAMPolicyArgs.builder() - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .project("your-project-id") - * .build()); - * - * } - * } - * ``` - * - * ## google\_project\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMBinding; - * import com.pulumi.gcp.projects.IAMBindingArgs; - * 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 project = new IAMBinding("project", IAMBindingArgs.builder() - * .members("user:jane@example.com") - * .project("your-project-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMBinding; - * import com.pulumi.gcp.projects.IAMBindingArgs; - * import com.pulumi.gcp.projects.inputs.IAMBindingConditionArgs; - * 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 project = new IAMBinding("project", IAMBindingArgs.builder() - * .condition(IAMBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .project("your-project-id") - * .role("roles/container.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_project\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMMember; - * import com.pulumi.gcp.projects.IAMMemberArgs; - * 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 project = new IAMMember("project", IAMMemberArgs.builder() - * .member("user:jane@example.com") - * .project("your-project-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMMember; - * import com.pulumi.gcp.projects.IAMMemberArgs; - * import com.pulumi.gcp.projects.inputs.IAMMemberConditionArgs; - * 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 project = new IAMMember("project", IAMMemberArgs.builder() - * .condition(IAMMemberConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .member("user:jane@example.com") - * .project("your-project-id") - * .role("roles/firebase.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_project\_iam\_audit\_config - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMAuditConfig; - * import com.pulumi.gcp.projects.IAMAuditConfigArgs; - * import com.pulumi.gcp.projects.inputs.IAMAuditConfigAuditLogConfigArgs; - * 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 project = new IAMAuditConfig("project", IAMAuditConfigArgs.builder() - * .auditLogConfigs( - * IAMAuditConfigAuditLogConfigArgs.builder() - * .logType("ADMIN_READ") - * .build(), - * IAMAuditConfigAuditLogConfigArgs.builder() - * .exemptedMembers("user:joebloggs@hashicorp.com") - * .logType("DATA_READ") - * .build()) - * .project("your-project-id") - * .service("allServices") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMPolicy.java index 81002587ba..101d06e6d4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/projects/IAMPolicy.java @@ -14,293 +14,6 @@ import javax.annotation.Nullable; /** - * Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - * - * * `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * * `gcp.projects.IAMBinding`: 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 project are preserved. - * * `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * * `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_project\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your project - * using this resource. Deleting a `gcp.projects.IAMPolicy` removes access - * from anyone without organization-level access to the project. Proceed with caution. - * It's not recommended to use `gcp.projects.IAMPolicy` with your provider project - * to avoid locking yourself out, and it should generally only be used with projects - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.projects.IAMPolicy; - * import com.pulumi.gcp.projects.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/editor") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var project = new IAMPolicy("project", IAMPolicyArgs.builder() - * .project("your-project-id") - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.projects.IAMPolicy; - * import com.pulumi.gcp.projects.IAMPolicyArgs; - * 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 admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .condition(GetIAMPolicyBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .role("roles/compute.admin") - * .build()) - * .build()); - * - * var project = new IAMPolicy("project", IAMPolicyArgs.builder() - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .project("your-project-id") - * .build()); - * - * } - * } - * ``` - * - * ## google\_project\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMBinding; - * import com.pulumi.gcp.projects.IAMBindingArgs; - * 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 project = new IAMBinding("project", IAMBindingArgs.builder() - * .members("user:jane@example.com") - * .project("your-project-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMBinding; - * import com.pulumi.gcp.projects.IAMBindingArgs; - * import com.pulumi.gcp.projects.inputs.IAMBindingConditionArgs; - * 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 project = new IAMBinding("project", IAMBindingArgs.builder() - * .condition(IAMBindingConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .members("user:jane@example.com") - * .project("your-project-id") - * .role("roles/container.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_project\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMMember; - * import com.pulumi.gcp.projects.IAMMemberArgs; - * 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 project = new IAMMember("project", IAMMemberArgs.builder() - * .member("user:jane@example.com") - * .project("your-project-id") - * .role("roles/editor") - * .build()); - * - * } - * } - * ``` - * - * With IAM Conditions: - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMMember; - * import com.pulumi.gcp.projects.IAMMemberArgs; - * import com.pulumi.gcp.projects.inputs.IAMMemberConditionArgs; - * 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 project = new IAMMember("project", IAMMemberArgs.builder() - * .condition(IAMMemberConditionArgs.builder() - * .description("Expiring at midnight of 2019-12-31") - * .expression("request.time < timestamp(\"2020-01-01T00:00:00Z\")") - * .title("expires_after_2019_12_31") - * .build()) - * .member("user:jane@example.com") - * .project("your-project-id") - * .role("roles/firebase.admin") - * .build()); - * - * } - * } - * ``` - * - * ## google\_project\_iam\_audit\_config - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.projects.IAMAuditConfig; - * import com.pulumi.gcp.projects.IAMAuditConfigArgs; - * import com.pulumi.gcp.projects.inputs.IAMAuditConfigAuditLogConfigArgs; - * 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 project = new IAMAuditConfig("project", IAMAuditConfigArgs.builder() - * .auditLogConfigs( - * IAMAuditConfigAuditLogConfigArgs.builder() - * .logType("ADMIN_READ") - * .build(), - * IAMAuditConfigAuditLogConfigArgs.builder() - * .exemptedMembers("user:joebloggs@hashicorp.com") - * .logType("DATA_READ") - * .build()) - * .project("your-project-id") - * .service("allServices") - * .build()); - * - * } - * } - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/projects/Service.java b/sdk/java/src/main/java/com/pulumi/gcp/projects/Service.java index 72cdc39499..b0f193bb45 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/projects/Service.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/projects/Service.java @@ -95,17 +95,9 @@ public class Service extends com.pulumi.resources.CustomResource { public Output> disableDependentServices() { return Codegen.optional(this.disableDependentServices); } - /** - * If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - * - */ @Export(name="disableOnDestroy", type=Boolean.class, parameters={}) private Output disableOnDestroy; - /** - * @return If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - * - */ public Output> disableOnDestroy() { return Codegen.optional(this.disableOnDestroy); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/projects/ServiceArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/projects/ServiceArgs.java index 0a4bc8f3b6..f759cee386 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/projects/ServiceArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/projects/ServiceArgs.java @@ -37,17 +37,9 @@ public Optional> disableDependentServices() { return Optional.ofNullable(this.disableDependentServices); } - /** - * If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - * - */ @Import(name="disableOnDestroy") private @Nullable Output disableOnDestroy; - /** - * @return If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - * - */ public Optional> disableOnDestroy() { return Optional.ofNullable(this.disableOnDestroy); } @@ -138,23 +130,11 @@ public Builder disableDependentServices(Boolean disableDependentServices) { return disableDependentServices(Output.of(disableDependentServices)); } - /** - * @param disableOnDestroy If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - * - * @return builder - * - */ public Builder disableOnDestroy(@Nullable Output disableOnDestroy) { $.disableOnDestroy = disableOnDestroy; return this; } - /** - * @param disableOnDestroy If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - * - * @return builder - * - */ public Builder disableOnDestroy(Boolean disableOnDestroy) { return disableOnDestroy(Output.of(disableOnDestroy)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/projects/ServiceIdentity.java b/sdk/java/src/main/java/com/pulumi/gcp/projects/ServiceIdentity.java index c3ccfa4e44..4974f22317 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/projects/ServiceIdentity.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/projects/ServiceIdentity.java @@ -14,19 +14,6 @@ import javax.annotation.Nullable; /** - * Generate service identity for a service. - * - * > **Note:** Once created, this resource cannot be updated or destroyed. These - * actions are a no-op. - * - * > **Note:** This resource can be used to retrieve the emails of the [Google-managed service accounts](https://cloud.google.com/iam/docs/service-agents) - * of the APIs that Google has configured with a Service Identity. You can run `gcloud beta services identity create --service SERVICE_NAME.googleapis.com` to - * verify if an API supports this. - * - * To get more information about Service Identity, see: - * - * * [API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services/generateServiceIdentity) - * * ## Example Usage * ### Service Identity Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/projects/UsageExportBucket.java b/sdk/java/src/main/java/com/pulumi/gcp/projects/UsageExportBucket.java index cff9a82fef..5ef78a2583 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/projects/UsageExportBucket.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/projects/UsageExportBucket.java @@ -15,24 +15,6 @@ import javax.annotation.Nullable; /** - * Allows creation and management of a Google Cloud Platform project. - * - * Projects created with this resource must be associated with an Organization. - * See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - * - * The user or service account that is running this provider when creating a `gcp.organizations.Project` - * resource must have `roles/resourcemanager.projectCreator` on the specified organization. See the - * [Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org) - * doc for more information. - * - * > This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account. - * - * To get more information about projects, see: - * - * * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects) - * * How-to Guides - * * [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects) - * * ## Example Usage * ```java * package generated_program; diff --git a/sdk/java/src/main/java/com/pulumi/gcp/projects/inputs/ServiceState.java b/sdk/java/src/main/java/com/pulumi/gcp/projects/inputs/ServiceState.java index a6cf7e9d4d..285a899cf5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/projects/inputs/ServiceState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/projects/inputs/ServiceState.java @@ -37,17 +37,9 @@ public Optional> disableDependentServices() { return Optional.ofNullable(this.disableDependentServices); } - /** - * If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - * - */ @Import(name="disableOnDestroy") private @Nullable Output disableOnDestroy; - /** - * @return If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - * - */ public Optional> disableOnDestroy() { return Optional.ofNullable(this.disableOnDestroy); } @@ -138,23 +130,11 @@ public Builder disableDependentServices(Boolean disableDependentServices) { return disableDependentServices(Output.of(disableDependentServices)); } - /** - * @param disableOnDestroy If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - * - * @return builder - * - */ public Builder disableOnDestroy(@Nullable Output disableOnDestroy) { $.disableOnDestroy = disableOnDestroy; return this; } - /** - * @param disableOnDestroy If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - * - * @return builder - * - */ public Builder disableOnDestroy(Boolean disableOnDestroy) { return disableOnDestroy(Output.of(disableOnDestroy)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/Instance.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/Instance.java index 9badb8560c..c99635d83e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/redis/Instance.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/Instance.java @@ -98,7 +98,7 @@ * .alternativeLocationId("us-central1-f") * .authorizedNetwork(redis_network.id()) * .redisVersion("REDIS_4_0") - * .displayName("Test Instance") + * .displayName("Terraform Test Instance") * .reservedIpRange("192.168.0.0/29") * .labels(Map.ofEntries( * Map.entry("my_key", "my_val"), @@ -211,7 +211,7 @@ * .authorizedNetwork(redis_network.id()) * .connectMode("PRIVATE_SERVICE_ACCESS") * .redisVersion("REDIS_4_0") - * .displayName("Test Instance") + * .displayName("Terraform Test Instance") * .build(), CustomResourceOptions.builder() * .dependsOn(privateServiceConnection) * .build()); diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/InstancePersistenceConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/InstancePersistenceConfigArgs.java index 8bedc39344..da8bc0ceca 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/InstancePersistenceConfigArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/inputs/InstancePersistenceConfigArgs.java @@ -62,7 +62,7 @@ public Optional> rdbNextSnapshotTime() { * - ONE_HOUR: Snapshot every 1 hour. * - SIX_HOURS: Snapshot every 6 hours. * - TWELVE_HOURS: Snapshot every 12 hours. - * - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + * - TWENTY_FOUR_HOURS: Snapshot every 24 hours. * Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. * */ @@ -74,7 +74,7 @@ public Optional> rdbNextSnapshotTime() { * - ONE_HOUR: Snapshot every 1 hour. * - SIX_HOURS: Snapshot every 6 hours. * - TWELVE_HOURS: Snapshot every 12 hours. - * - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + * - TWENTY_FOUR_HOURS: Snapshot every 24 hours. * Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. * */ @@ -193,7 +193,7 @@ public Builder rdbNextSnapshotTime(String rdbNextSnapshotTime) { * - ONE_HOUR: Snapshot every 1 hour. * - SIX_HOURS: Snapshot every 6 hours. * - TWELVE_HOURS: Snapshot every 12 hours. - * - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + * - TWENTY_FOUR_HOURS: Snapshot every 24 hours. * Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. * * @return builder @@ -209,7 +209,7 @@ public Builder rdbSnapshotPeriod(@Nullable Output rdbSnapshotPeriod) { * - ONE_HOUR: Snapshot every 1 hour. * - SIX_HOURS: Snapshot every 6 hours. * - TWELVE_HOURS: Snapshot every 12 hours. - * - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + * - TWENTY_FOUR_HOURS: Snapshot every 24 hours. * Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. * * @return builder diff --git a/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/InstancePersistenceConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/InstancePersistenceConfig.java index 5c193a8749..a89b03e8c2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/InstancePersistenceConfig.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/redis/outputs/InstancePersistenceConfig.java @@ -32,7 +32,7 @@ public final class InstancePersistenceConfig { * - ONE_HOUR: Snapshot every 1 hour. * - SIX_HOURS: Snapshot every 6 hours. * - TWELVE_HOURS: Snapshot every 12 hours. - * - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + * - TWENTY_FOUR_HOURS: Snapshot every 24 hours. * Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. * */ @@ -74,7 +74,7 @@ public Optional rdbNextSnapshotTime() { * - ONE_HOUR: Snapshot every 1 hour. * - SIX_HOURS: Snapshot every 6 hours. * - TWELVE_HOURS: Snapshot every 12 hours. - * - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + * - TWENTY_FOUR_HOURS: Snapshot every 24 hours. * Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. * */ diff --git a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretVersion.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretVersion.java index 1d78f846ed..d722eb6e75 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretVersion.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretVersion.java @@ -17,11 +17,6 @@ import javax.annotation.Nullable; /** - * A secret version resource. - * - * > **Warning:** All arguments including `payload.secret_data` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Secret Version Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretmanagerFunctions.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretmanagerFunctions.java index 567d38913b..96d4173f1b 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretmanagerFunctions.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/SecretmanagerFunctions.java @@ -10,9 +10,12 @@ import com.pulumi.gcp.Utilities; import com.pulumi.gcp.secretmanager.inputs.GetSecretArgs; import com.pulumi.gcp.secretmanager.inputs.GetSecretPlainArgs; +import com.pulumi.gcp.secretmanager.inputs.GetSecretVersionAccessArgs; +import com.pulumi.gcp.secretmanager.inputs.GetSecretVersionAccessPlainArgs; import com.pulumi.gcp.secretmanager.inputs.GetSecretVersionArgs; import com.pulumi.gcp.secretmanager.inputs.GetSecretVersionPlainArgs; import com.pulumi.gcp.secretmanager.outputs.GetSecretResult; +import com.pulumi.gcp.secretmanager.outputs.GetSecretVersionAccessResult; import com.pulumi.gcp.secretmanager.outputs.GetSecretVersionResult; import java.util.concurrent.CompletableFuture; @@ -313,4 +316,152 @@ public static Output getSecretVersion(GetSecretVersionAr public static CompletableFuture getSecretVersionPlain(GetSecretVersionPlainArgs args, InvokeOptions options) { return Deployment.getInstance().invokeAsync("gcp:secretmanager/getSecretVersion:getSecretVersion", TypeShape.of(GetSecretVersionResult.class), args, Utilities.withVersion(options)); } + /** + * Get a payload of Secret Manager secret's version. It only requires the [Secret Manager Secret Accessor](https://cloud.google.com/secret-manager/docs/access-control#secretmanager.secretAccessor) role. For more information see the [official documentation](https://cloud.google.com/secret-manager/docs/) and [API](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets.versions/access). + * + * ## Example Usage + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.gcp.secretmanager.SecretmanagerFunctions; + * import com.pulumi.gcp.secretmanager.inputs.GetSecretVersionAccessArgs; + * 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 basic = SecretmanagerFunctions.getSecretVersionAccess(GetSecretVersionAccessArgs.builder() + * .secret("my-secret") + * .build()); + * + * } + * } + * ``` + * + */ + public static Output getSecretVersionAccess(GetSecretVersionAccessArgs args) { + return getSecretVersionAccess(args, InvokeOptions.Empty); + } + /** + * Get a payload of Secret Manager secret's version. It only requires the [Secret Manager Secret Accessor](https://cloud.google.com/secret-manager/docs/access-control#secretmanager.secretAccessor) role. For more information see the [official documentation](https://cloud.google.com/secret-manager/docs/) and [API](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets.versions/access). + * + * ## Example Usage + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.gcp.secretmanager.SecretmanagerFunctions; + * import com.pulumi.gcp.secretmanager.inputs.GetSecretVersionAccessArgs; + * 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 basic = SecretmanagerFunctions.getSecretVersionAccess(GetSecretVersionAccessArgs.builder() + * .secret("my-secret") + * .build()); + * + * } + * } + * ``` + * + */ + public static CompletableFuture getSecretVersionAccessPlain(GetSecretVersionAccessPlainArgs args) { + return getSecretVersionAccessPlain(args, InvokeOptions.Empty); + } + /** + * Get a payload of Secret Manager secret's version. It only requires the [Secret Manager Secret Accessor](https://cloud.google.com/secret-manager/docs/access-control#secretmanager.secretAccessor) role. For more information see the [official documentation](https://cloud.google.com/secret-manager/docs/) and [API](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets.versions/access). + * + * ## Example Usage + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.gcp.secretmanager.SecretmanagerFunctions; + * import com.pulumi.gcp.secretmanager.inputs.GetSecretVersionAccessArgs; + * 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 basic = SecretmanagerFunctions.getSecretVersionAccess(GetSecretVersionAccessArgs.builder() + * .secret("my-secret") + * .build()); + * + * } + * } + * ``` + * + */ + public static Output getSecretVersionAccess(GetSecretVersionAccessArgs args, InvokeOptions options) { + return Deployment.getInstance().invoke("gcp:secretmanager/getSecretVersionAccess:getSecretVersionAccess", TypeShape.of(GetSecretVersionAccessResult.class), args, Utilities.withVersion(options)); + } + /** + * Get a payload of Secret Manager secret's version. It only requires the [Secret Manager Secret Accessor](https://cloud.google.com/secret-manager/docs/access-control#secretmanager.secretAccessor) role. For more information see the [official documentation](https://cloud.google.com/secret-manager/docs/) and [API](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets.versions/access). + * + * ## Example Usage + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.gcp.secretmanager.SecretmanagerFunctions; + * import com.pulumi.gcp.secretmanager.inputs.GetSecretVersionAccessArgs; + * 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 basic = SecretmanagerFunctions.getSecretVersionAccess(GetSecretVersionAccessArgs.builder() + * .secret("my-secret") + * .build()); + * + * } + * } + * ``` + * + */ + public static CompletableFuture getSecretVersionAccessPlain(GetSecretVersionAccessPlainArgs args, InvokeOptions options) { + return Deployment.getInstance().invokeAsync("gcp:secretmanager/getSecretVersionAccess:getSecretVersionAccess", TypeShape.of(GetSecretVersionAccessResult.class), args, Utilities.withVersion(options)); + } } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/GetSecretVersionAccessArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/GetSecretVersionAccessArgs.java new file mode 100644 index 0000000000..b588aa83ef --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/GetSecretVersionAccessArgs.java @@ -0,0 +1,166 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.secretmanager.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 GetSecretVersionAccessArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetSecretVersionAccessArgs Empty = new GetSecretVersionAccessArgs(); + + /** + * The project to get the secret version for. If it + * is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable Output project; + + /** + * @return The project to get the secret version for. If it + * is not provided, the provider project is used. + * + */ + public Optional> project() { + return Optional.ofNullable(this.project); + } + + /** + * The secret to get the secret version for. + * + */ + @Import(name="secret", required=true) + private Output secret; + + /** + * @return The secret to get the secret version for. + * + */ + public Output secret() { + return this.secret; + } + + /** + * The version of the secret to get. If it + * is not provided, the latest version is retrieved. + * + */ + @Import(name="version") + private @Nullable Output version; + + /** + * @return The version of the secret to get. If it + * is not provided, the latest version is retrieved. + * + */ + public Optional> version() { + return Optional.ofNullable(this.version); + } + + private GetSecretVersionAccessArgs() {} + + private GetSecretVersionAccessArgs(GetSecretVersionAccessArgs $) { + this.project = $.project; + this.secret = $.secret; + this.version = $.version; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetSecretVersionAccessArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetSecretVersionAccessArgs $; + + public Builder() { + $ = new GetSecretVersionAccessArgs(); + } + + public Builder(GetSecretVersionAccessArgs defaults) { + $ = new GetSecretVersionAccessArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param project The project to get the secret version for. If it + * is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable Output project) { + $.project = project; + return this; + } + + /** + * @param project The project to get the secret version for. If it + * is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(String project) { + return project(Output.of(project)); + } + + /** + * @param secret The secret to get the secret version for. + * + * @return builder + * + */ + public Builder secret(Output secret) { + $.secret = secret; + return this; + } + + /** + * @param secret The secret to get the secret version for. + * + * @return builder + * + */ + public Builder secret(String secret) { + return secret(Output.of(secret)); + } + + /** + * @param version The version of the secret to get. If it + * is not provided, the latest version is retrieved. + * + * @return builder + * + */ + public Builder version(@Nullable Output version) { + $.version = version; + return this; + } + + /** + * @param version The version of the secret to get. If it + * is not provided, the latest version is retrieved. + * + * @return builder + * + */ + public Builder version(String version) { + return version(Output.of(version)); + } + + public GetSecretVersionAccessArgs build() { + $.secret = Objects.requireNonNull($.secret, "expected parameter 'secret' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/GetSecretVersionAccessPlainArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/GetSecretVersionAccessPlainArgs.java new file mode 100644 index 0000000000..7319690444 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/inputs/GetSecretVersionAccessPlainArgs.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.secretmanager.inputs; + +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 GetSecretVersionAccessPlainArgs extends com.pulumi.resources.InvokeArgs { + + public static final GetSecretVersionAccessPlainArgs Empty = new GetSecretVersionAccessPlainArgs(); + + /** + * The project to get the secret version for. If it + * is not provided, the provider project is used. + * + */ + @Import(name="project") + private @Nullable String project; + + /** + * @return The project to get the secret version for. If it + * is not provided, the provider project is used. + * + */ + public Optional project() { + return Optional.ofNullable(this.project); + } + + /** + * The secret to get the secret version for. + * + */ + @Import(name="secret", required=true) + private String secret; + + /** + * @return The secret to get the secret version for. + * + */ + public String secret() { + return this.secret; + } + + /** + * The version of the secret to get. If it + * is not provided, the latest version is retrieved. + * + */ + @Import(name="version") + private @Nullable String version; + + /** + * @return The version of the secret to get. If it + * is not provided, the latest version is retrieved. + * + */ + public Optional version() { + return Optional.ofNullable(this.version); + } + + private GetSecretVersionAccessPlainArgs() {} + + private GetSecretVersionAccessPlainArgs(GetSecretVersionAccessPlainArgs $) { + this.project = $.project; + this.secret = $.secret; + this.version = $.version; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(GetSecretVersionAccessPlainArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private GetSecretVersionAccessPlainArgs $; + + public Builder() { + $ = new GetSecretVersionAccessPlainArgs(); + } + + public Builder(GetSecretVersionAccessPlainArgs defaults) { + $ = new GetSecretVersionAccessPlainArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param project The project to get the secret version for. If it + * is not provided, the provider project is used. + * + * @return builder + * + */ + public Builder project(@Nullable String project) { + $.project = project; + return this; + } + + /** + * @param secret The secret to get the secret version for. + * + * @return builder + * + */ + public Builder secret(String secret) { + $.secret = secret; + return this; + } + + /** + * @param version The version of the secret to get. If it + * is not provided, the latest version is retrieved. + * + * @return builder + * + */ + public Builder version(@Nullable String version) { + $.version = version; + return this; + } + + public GetSecretVersionAccessPlainArgs build() { + $.secret = Objects.requireNonNull($.secret, "expected parameter 'secret' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/outputs/GetSecretVersionAccessResult.java b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/outputs/GetSecretVersionAccessResult.java new file mode 100644 index 0000000000..0c23bc6f3f --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/secretmanager/outputs/GetSecretVersionAccessResult.java @@ -0,0 +1,132 @@ +// *** 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.secretmanager.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.String; +import java.util.Objects; + +@CustomType +public final class GetSecretVersionAccessResult { + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + private String id; + /** + * @return The resource name of the SecretVersion. Format: + * `projects/{{project}}/secrets/{{secret_id}}/versions/{{version}}` + * + */ + private String name; + private String project; + private String secret; + /** + * @return The secret data. No larger than 64KiB. + * + */ + private String secretData; + private String version; + + private GetSecretVersionAccessResult() {} + /** + * @return The provider-assigned unique ID for this managed resource. + * + */ + public String id() { + return this.id; + } + /** + * @return The resource name of the SecretVersion. Format: + * `projects/{{project}}/secrets/{{secret_id}}/versions/{{version}}` + * + */ + public String name() { + return this.name; + } + public String project() { + return this.project; + } + public String secret() { + return this.secret; + } + /** + * @return The secret data. No larger than 64KiB. + * + */ + public String secretData() { + return this.secretData; + } + public String version() { + return this.version; + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(GetSecretVersionAccessResult defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private String id; + private String name; + private String project; + private String secret; + private String secretData; + private String version; + public Builder() {} + public Builder(GetSecretVersionAccessResult defaults) { + Objects.requireNonNull(defaults); + this.id = defaults.id; + this.name = defaults.name; + this.project = defaults.project; + this.secret = defaults.secret; + this.secretData = defaults.secretData; + this.version = defaults.version; + } + + @CustomType.Setter + public Builder id(String id) { + this.id = Objects.requireNonNull(id); + return this; + } + @CustomType.Setter + public Builder name(String name) { + this.name = Objects.requireNonNull(name); + return this; + } + @CustomType.Setter + public Builder project(String project) { + this.project = Objects.requireNonNull(project); + return this; + } + @CustomType.Setter + public Builder secret(String secret) { + this.secret = Objects.requireNonNull(secret); + return this; + } + @CustomType.Setter + public Builder secretData(String secretData) { + this.secretData = Objects.requireNonNull(secretData); + return this; + } + @CustomType.Setter + public Builder version(String version) { + this.version = Objects.requireNonNull(version); + return this; + } + public GetSecretVersionAccessResult build() { + final var o = new GetSecretVersionAccessResult(); + o.id = id; + o.name = name; + o.project = project; + o.secret = secret; + o.secretData = secretData; + o.version = version; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/InstanceIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/InstanceIamBinding.java index c4ded95a2c..e0641cae2f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/InstanceIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/InstanceIamBinding.java @@ -23,7 +23,7 @@ * * * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * * How-to Guides - * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) * * ## Example Usage * ### Data Fusion Instance Basic diff --git a/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/InstanceIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/InstanceIamMember.java index b33b508ab7..6c6deab06d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/InstanceIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/InstanceIamMember.java @@ -22,7 +22,7 @@ * * * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * * How-to Guides - * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) * * ## Example Usage * ### Data Fusion Instance Basic diff --git a/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/InstanceIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/InstanceIamPolicy.java index 4d5cf24c73..2a023b7a56 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/InstanceIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/securitycenter/InstanceIamPolicy.java @@ -20,7 +20,7 @@ * * * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * * How-to Guides - * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) * * ## Example Usage * ### Data Fusion Instance Basic diff --git a/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/Account.java b/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/Account.java index 1351d8b3f2..7c31a0fb4f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/Account.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/Account.java @@ -16,18 +16,6 @@ import javax.annotation.Nullable; /** - * Allows management of a Google Cloud service account. - * - * * [API documentation](https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/compute/docs/access/service-accounts) - * - * > **Warning:** If you delete and recreate a service account, you must reapply any IAM roles that it had before. - * - * > Creation of service accounts is eventually consistent, and that can lead to - * errors when you try to apply ACLs to service accounts immediately after - * creation. - * * ## Example Usage * * This snippet creates a service account in a project. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/IAMBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/IAMBinding.java index 2857901831..d8f0a96f96 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/IAMBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/IAMBinding.java @@ -29,8 +29,7 @@ * * > **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. * - * ## Example Usage - * ### Service Account IAM Policy + * ## google\_service\_account\_iam\_policy * ```java * package generated_program; * @@ -76,7 +75,8 @@ * } * } * ``` - * ### Service Account IAM Binding + * + * ## google\_service\_account\_iam\_binding * ```java * package generated_program; * @@ -114,7 +114,8 @@ * } * } * ``` - * ### Service Account IAM Binding With IAM Conditions: + * + * With IAM Conditions: * ```java * package generated_program; * @@ -158,7 +159,8 @@ * } * } * ``` - * ### Service Account IAM Member + * + * ## google\_service\_account\_iam\_member * ```java * package generated_program; * @@ -206,7 +208,8 @@ * } * } * ``` - * ### Service Account IAM Member With IAM Conditions: + * + * With IAM Conditions: * ```java * package generated_program; * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/IAMMember.java b/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/IAMMember.java index ebeb38ed8e..9a4b821e0e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/IAMMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/IAMMember.java @@ -28,8 +28,7 @@ * * > **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. * - * ## Example Usage - * ### Service Account IAM Policy + * ## google\_service\_account\_iam\_policy * ```java * package generated_program; * @@ -75,7 +74,8 @@ * } * } * ``` - * ### Service Account IAM Binding + * + * ## google\_service\_account\_iam\_binding * ```java * package generated_program; * @@ -113,7 +113,8 @@ * } * } * ``` - * ### Service Account IAM Binding With IAM Conditions: + * + * With IAM Conditions: * ```java * package generated_program; * @@ -157,7 +158,8 @@ * } * } * ``` - * ### Service Account IAM Member + * + * ## google\_service\_account\_iam\_member * ```java * package generated_program; * @@ -205,7 +207,8 @@ * } * } * ``` - * ### Service Account IAM Member With IAM Conditions: + * + * With IAM Conditions: * ```java * package generated_program; * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/IAMPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/IAMPolicy.java index 12e771cedc..00aed828d0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/IAMPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/IAMPolicy.java @@ -26,8 +26,7 @@ * * > **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. * - * ## Example Usage - * ### Service Account IAM Policy + * ## google\_service\_account\_iam\_policy * ```java * package generated_program; * @@ -73,7 +72,8 @@ * } * } * ``` - * ### Service Account IAM Binding + * + * ## google\_service\_account\_iam\_binding * ```java * package generated_program; * @@ -111,7 +111,8 @@ * } * } * ``` - * ### Service Account IAM Binding With IAM Conditions: + * + * With IAM Conditions: * ```java * package generated_program; * @@ -155,7 +156,8 @@ * } * } * ``` - * ### Service Account IAM Member + * + * ## google\_service\_account\_iam\_member * ```java * package generated_program; * @@ -203,7 +205,8 @@ * } * } * ``` - * ### Service Account IAM Member With IAM Conditions: + * + * With IAM Conditions: * ```java * package generated_program; * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/ServiceAccountFunctions.java b/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/ServiceAccountFunctions.java index 3d278479f7..b9d78ec960 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/ServiceAccountFunctions.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/serviceAccount/ServiceAccountFunctions.java @@ -218,87 +218,15 @@ public static Output getAccountAccessToken(GetAccou public static CompletableFuture getAccountAccessTokenPlain(GetAccountAccessTokenPlainArgs args, InvokeOptions options) { return Deployment.getInstance().invokeAsync("gcp:serviceAccount/getAccountAccessToken:getAccountAccessToken", TypeShape.of(GetAccountAccessTokenResult.class), args, Utilities.withVersion(options)); } - /** - * This data source provides a Google OpenID Connect (`oidc`) `id_token`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)). - * - * For more information see - * [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken). - * - * ## Example Usage - * - * ### ServiceAccount JSON Credential File. - * `gcp.serviceAccount.getAccountIdToken` will use the configured provider credentials - * - * ### Service Account Impersonation. - * `gcp.serviceAccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceAccount.getAccountAccessToken`. - * - * Note: to use the following, you must grant `target_service_account` the - * `roles/iam.serviceAccountTokenCreator` role on itself. - * - */ public static Output getAccountIdToken(GetAccountIdTokenArgs args) { return getAccountIdToken(args, InvokeOptions.Empty); } - /** - * This data source provides a Google OpenID Connect (`oidc`) `id_token`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)). - * - * For more information see - * [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken). - * - * ## Example Usage - * - * ### ServiceAccount JSON Credential File. - * `gcp.serviceAccount.getAccountIdToken` will use the configured provider credentials - * - * ### Service Account Impersonation. - * `gcp.serviceAccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceAccount.getAccountAccessToken`. - * - * Note: to use the following, you must grant `target_service_account` the - * `roles/iam.serviceAccountTokenCreator` role on itself. - * - */ public static CompletableFuture getAccountIdTokenPlain(GetAccountIdTokenPlainArgs args) { return getAccountIdTokenPlain(args, InvokeOptions.Empty); } - /** - * This data source provides a Google OpenID Connect (`oidc`) `id_token`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)). - * - * For more information see - * [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken). - * - * ## Example Usage - * - * ### ServiceAccount JSON Credential File. - * `gcp.serviceAccount.getAccountIdToken` will use the configured provider credentials - * - * ### Service Account Impersonation. - * `gcp.serviceAccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceAccount.getAccountAccessToken`. - * - * Note: to use the following, you must grant `target_service_account` the - * `roles/iam.serviceAccountTokenCreator` role on itself. - * - */ public static Output getAccountIdToken(GetAccountIdTokenArgs args, InvokeOptions options) { return Deployment.getInstance().invoke("gcp:serviceAccount/getAccountIdToken:getAccountIdToken", TypeShape.of(GetAccountIdTokenResult.class), args, Utilities.withVersion(options)); } - /** - * This data source provides a Google OpenID Connect (`oidc`) `id_token`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)). - * - * For more information see - * [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken). - * - * ## Example Usage - * - * ### ServiceAccount JSON Credential File. - * `gcp.serviceAccount.getAccountIdToken` will use the configured provider credentials - * - * ### Service Account Impersonation. - * `gcp.serviceAccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceAccount.getAccountAccessToken`. - * - * Note: to use the following, you must grant `target_service_account` the - * `roles/iam.serviceAccountTokenCreator` role on itself. - * - */ public static CompletableFuture getAccountIdTokenPlain(GetAccountIdTokenPlainArgs args, InvokeOptions options) { return Deployment.getInstance().invokeAsync("gcp:serviceAccount/getAccountIdToken:getAccountIdToken", TypeShape.of(GetAccountIdTokenResult.class), args, Utilities.withVersion(options)); } diff --git a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/Endpoint.java b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/Endpoint.java index ee77408cf3..434e48589d 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/Endpoint.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/Endpoint.java @@ -17,14 +17,6 @@ import javax.annotation.Nullable; /** - * An individual endpoint that provides a service. - * - * To get more information about Endpoint, see: - * - * * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services.endpoints) - * * How-to Guides - * * [Configuring an endpoint](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_an_endpoint) - * * ## Example Usage * ### Service Directory Endpoint Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/Namespace.java b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/Namespace.java index f862ade419..97bd9c4fe5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/Namespace.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/Namespace.java @@ -16,15 +16,6 @@ import javax.annotation.Nullable; /** - * A container for `services`. Namespaces allow administrators to group services - * together and define permissions for a collection of services. - * - * To get more information about Namespace, see: - * - * * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces) - * * How-to Guides - * * [Configuring a namespace](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_namespace) - * * ## Example Usage * ### Service Directory Namespace Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/NamespaceIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/NamespaceIamBinding.java index 2b5f733979..e891352bb1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/NamespaceIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/NamespaceIamBinding.java @@ -17,126 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - * - * * `gcp.servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - * * `gcp.servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - * * `gcp.servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - * - * > **Note:** `gcp.servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.NamespaceIamBinding` and `gcp.servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_service\_directory\_namespace\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.servicedirectory.NamespaceIamPolicy; - * import com.pulumi.gcp.servicedirectory.NamespaceIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new NamespaceIamPolicy("policy", NamespaceIamPolicyArgs.builder() - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_service\_directory\_namespace\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.servicedirectory.NamespaceIamBinding; - * import com.pulumi.gcp.servicedirectory.NamespaceIamBindingArgs; - * 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 binding = new NamespaceIamBinding("binding", NamespaceIamBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_service\_directory\_namespace\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.servicedirectory.NamespaceIamMember; - * import com.pulumi.gcp.servicedirectory.NamespaceIamMemberArgs; - * 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 member = new NamespaceIamMember("member", NamespaceIamMemberArgs.builder() - * .role("roles/viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/NamespaceIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/NamespaceIamMember.java index 62ab3ab1d1..e5575c173e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/NamespaceIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/NamespaceIamMember.java @@ -16,126 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - * - * * `gcp.servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - * * `gcp.servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - * * `gcp.servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - * - * > **Note:** `gcp.servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.NamespaceIamBinding` and `gcp.servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_service\_directory\_namespace\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.servicedirectory.NamespaceIamPolicy; - * import com.pulumi.gcp.servicedirectory.NamespaceIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new NamespaceIamPolicy("policy", NamespaceIamPolicyArgs.builder() - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_service\_directory\_namespace\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.servicedirectory.NamespaceIamBinding; - * import com.pulumi.gcp.servicedirectory.NamespaceIamBindingArgs; - * 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 binding = new NamespaceIamBinding("binding", NamespaceIamBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_service\_directory\_namespace\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.servicedirectory.NamespaceIamMember; - * import com.pulumi.gcp.servicedirectory.NamespaceIamMemberArgs; - * 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 member = new NamespaceIamMember("member", NamespaceIamMemberArgs.builder() - * .role("roles/viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/NamespaceIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/NamespaceIamPolicy.java index be819093c4..ab01a3c6a3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/NamespaceIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/NamespaceIamPolicy.java @@ -14,126 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - * - * * `gcp.servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - * * `gcp.servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - * * `gcp.servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - * - * > **Note:** `gcp.servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.NamespaceIamBinding` and `gcp.servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_service\_directory\_namespace\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.servicedirectory.NamespaceIamPolicy; - * import com.pulumi.gcp.servicedirectory.NamespaceIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new NamespaceIamPolicy("policy", NamespaceIamPolicyArgs.builder() - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_service\_directory\_namespace\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.servicedirectory.NamespaceIamBinding; - * import com.pulumi.gcp.servicedirectory.NamespaceIamBindingArgs; - * 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 binding = new NamespaceIamBinding("binding", NamespaceIamBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_service\_directory\_namespace\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.servicedirectory.NamespaceIamMember; - * import com.pulumi.gcp.servicedirectory.NamespaceIamMemberArgs; - * 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 member = new NamespaceIamMember("member", NamespaceIamMemberArgs.builder() - * .role("roles/viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/Service.java b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/Service.java index cf76ed2485..9003f41e1e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/Service.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/Service.java @@ -16,14 +16,6 @@ import javax.annotation.Nullable; /** - * An individual service. A service contains a name and optional metadata. - * - * To get more information about Service, see: - * - * * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services) - * * How-to Guides - * * [Configuring a service](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_service) - * * ## Example Usage * ### Service Directory Service Basic * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/ServiceIamBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/ServiceIamBinding.java index c475c14ef5..69e60bfae6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/ServiceIamBinding.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/ServiceIamBinding.java @@ -17,126 +17,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - * - * * `gcp.servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - * * `gcp.servicedirectory.ServiceIamBinding`: 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 service are preserved. - * * `gcp.servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - * - * > **Note:** `gcp.servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.ServiceIamBinding` and `gcp.servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_service\_directory\_service\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.servicedirectory.ServiceIamPolicy; - * import com.pulumi.gcp.servicedirectory.ServiceIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new ServiceIamPolicy("policy", ServiceIamPolicyArgs.builder() - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_service\_directory\_service\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.servicedirectory.ServiceIamBinding; - * import com.pulumi.gcp.servicedirectory.ServiceIamBindingArgs; - * 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 binding = new ServiceIamBinding("binding", ServiceIamBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_service\_directory\_service\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.servicedirectory.ServiceIamMember; - * import com.pulumi.gcp.servicedirectory.ServiceIamMemberArgs; - * 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 member = new ServiceIamMember("member", ServiceIamMemberArgs.builder() - * .role("roles/viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/ServiceIamMember.java b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/ServiceIamMember.java index 2315cc3004..5844fbe157 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/ServiceIamMember.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/ServiceIamMember.java @@ -16,126 +16,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - * - * * `gcp.servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - * * `gcp.servicedirectory.ServiceIamBinding`: 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 service are preserved. - * * `gcp.servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - * - * > **Note:** `gcp.servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.ServiceIamBinding` and `gcp.servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_service\_directory\_service\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.servicedirectory.ServiceIamPolicy; - * import com.pulumi.gcp.servicedirectory.ServiceIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new ServiceIamPolicy("policy", ServiceIamPolicyArgs.builder() - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_service\_directory\_service\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.servicedirectory.ServiceIamBinding; - * import com.pulumi.gcp.servicedirectory.ServiceIamBindingArgs; - * 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 binding = new ServiceIamBinding("binding", ServiceIamBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_service\_directory\_service\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.servicedirectory.ServiceIamMember; - * import com.pulumi.gcp.servicedirectory.ServiceIamMemberArgs; - * 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 member = new ServiceIamMember("member", ServiceIamMemberArgs.builder() - * .role("roles/viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/ServiceIamPolicy.java b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/ServiceIamPolicy.java index 52f44d3d3d..a414bca8e9 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/ServiceIamPolicy.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/servicedirectory/ServiceIamPolicy.java @@ -14,126 +14,6 @@ import javax.annotation.Nullable; /** - * Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - * - * * `gcp.servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - * * `gcp.servicedirectory.ServiceIamBinding`: 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 service are preserved. - * * `gcp.servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - * - * > **Note:** `gcp.servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.ServiceIamBinding` and `gcp.servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_service\_directory\_service\_iam\_policy - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.organizations.OrganizationsFunctions; - * import com.pulumi.gcp.organizations.inputs.GetIAMPolicyArgs; - * import com.pulumi.gcp.servicedirectory.ServiceIamPolicy; - * import com.pulumi.gcp.servicedirectory.ServiceIamPolicyArgs; - * 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) { - * final var admin = OrganizationsFunctions.getIAMPolicy(GetIAMPolicyArgs.builder() - * .bindings(GetIAMPolicyBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build()) - * .build()); - * - * var policy = new ServiceIamPolicy("policy", ServiceIamPolicyArgs.builder() - * .policyData(admin.applyValue(getIAMPolicyResult -> getIAMPolicyResult.policyData())) - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_service\_directory\_service\_iam\_binding - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.servicedirectory.ServiceIamBinding; - * import com.pulumi.gcp.servicedirectory.ServiceIamBindingArgs; - * 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 binding = new ServiceIamBinding("binding", ServiceIamBindingArgs.builder() - * .role("roles/viewer") - * .members("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * - * ## google\_service\_directory\_service\_iam\_member - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.servicedirectory.ServiceIamMember; - * import com.pulumi.gcp.servicedirectory.ServiceIamMemberArgs; - * 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 member = new ServiceIamMember("member", ServiceIamMemberArgs.builder() - * .role("roles/viewer") - * .member("user:jane@example.com") - * .build(), CustomResourceOptions.builder() - * .provider(google_beta) - * .build()); - * - * } - * } - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/serviceusage/ConsumerQuotaOverride.java b/sdk/java/src/main/java/com/pulumi/gcp/serviceusage/ConsumerQuotaOverride.java index 468324c065..dc4e0ab2d2 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/serviceusage/ConsumerQuotaOverride.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/serviceusage/ConsumerQuotaOverride.java @@ -17,16 +17,6 @@ import javax.annotation.Nullable; /** - * A consumer override is applied to the consumer on its own authority to limit its own quota usage. - * Consumer overrides cannot be used to grant more quota than would be allowed by admin overrides, - * producer overrides, or the default limit of the service. - * - * To get more information about ConsumerQuotaOverride, see: - * - * * How-to Guides - * * [Getting Started](https://cloud.google.com/service-usage/docs/getting-started) - * * [REST API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services.consumerQuotaMetrics.limits.consumerOverrides) - * * ## Example Usage * * ## Import diff --git a/sdk/java/src/main/java/com/pulumi/gcp/spanner/Database.java b/sdk/java/src/main/java/com/pulumi/gcp/spanner/Database.java index bd6b30d0c6..1b02594ff3 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/spanner/Database.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/spanner/Database.java @@ -18,16 +18,6 @@ import javax.annotation.Nullable; /** - * A Cloud Spanner Database which is hosted on a Spanner instance. - * - * To get more information about Database, see: - * - * * [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instances.databases) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/spanner/) - * - * > **Warning:** It is strongly recommended to set `lifecycle { prevent_destroy = true }` on databases in order to prevent accidental data loss. - * * ## Example Usage * ### Spanner Database Basic * ```java @@ -134,16 +124,16 @@ public Output>> ddls() { return Codegen.optional(this.ddls); } /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * 'terraform destroy' or 'terraform apply' that would delete the instance will fail. * */ @Export(name="deletionProtection", type=Boolean.class, parameters={}) private Output deletionProtection; /** - * @return Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` that would delete the instance will fail. + * @return Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * 'terraform destroy' or 'terraform apply' that would delete the instance will fail. * */ public Output> deletionProtection() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/spanner/DatabaseArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/spanner/DatabaseArgs.java index c2d1a47da4..8a76b67d6a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/spanner/DatabaseArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/spanner/DatabaseArgs.java @@ -59,16 +59,16 @@ public Optional>> ddls() { } /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * 'terraform destroy' or 'terraform apply' that would delete the instance will fail. * */ @Import(name="deletionProtection") private @Nullable Output deletionProtection; /** - * @return Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` that would delete the instance will fail. + * @return Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * 'terraform destroy' or 'terraform apply' that would delete the instance will fail. * */ public Optional> deletionProtection() { @@ -261,8 +261,8 @@ public Builder ddls(String... ddls) { } /** - * @param deletionProtection Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` that would delete the instance will fail. + * @param deletionProtection Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * 'terraform destroy' or 'terraform apply' that would delete the instance will fail. * * @return builder * @@ -273,8 +273,8 @@ public Builder deletionProtection(@Nullable Output deletionProtection) } /** - * @param deletionProtection Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` that would delete the instance will fail. + * @param deletionProtection Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * 'terraform destroy' or 'terraform apply' that would delete the instance will fail. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/spanner/inputs/DatabaseState.java b/sdk/java/src/main/java/com/pulumi/gcp/spanner/inputs/DatabaseState.java index fd24756e99..7997bf87f4 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/spanner/inputs/DatabaseState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/spanner/inputs/DatabaseState.java @@ -59,16 +59,16 @@ public Optional>> ddls() { } /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * 'terraform destroy' or 'terraform apply' that would delete the instance will fail. * */ @Import(name="deletionProtection") private @Nullable Output deletionProtection; /** - * @return Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` that would delete the instance will fail. + * @return Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * 'terraform destroy' or 'terraform apply' that would delete the instance will fail. * */ public Optional> deletionProtection() { @@ -277,8 +277,8 @@ public Builder ddls(String... ddls) { } /** - * @param deletionProtection Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` that would delete the instance will fail. + * @param deletionProtection Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * 'terraform destroy' or 'terraform apply' that would delete the instance will fail. * * @return builder * @@ -289,8 +289,8 @@ public Builder deletionProtection(@Nullable Output deletionProtection) } /** - * @param deletionProtection Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` that would delete the instance will fail. + * @param deletionProtection Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * 'terraform destroy' or 'terraform apply' that would delete the instance will fail. * * @return builder * 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 5b878a3aec..48832154fb 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 @@ -23,18 +23,6 @@ import javax.annotation.Nullable; /** - * Creates a new Google SQL Database Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), - * or the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/instances). - * - * > **NOTE on `gcp.sql.DatabaseInstance`:** - Second-generation instances include a - * default 'root'@'%' user with no password. This user will be deleted by the provider on - * instance creation. You should use `gcp.sql.User` to define a custom user with - * a restricted host and strong password. - * - * > **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false` - * (and run `pulumi update` to write the field to state) in order to destroy an instance. - * It is recommended to not set this field (or set it to true) until you're ready to destroy the instance and its databases. - * * ## Example Usage * ### SQL Second Generation Instance * ```java @@ -184,18 +172,14 @@ public Output> availableMaintenanceVersions() { return this.availableMaintenanceVersions; } /** - * The context needed to create this instance as a clone of another instance. When this field is set during - * resource creation, this provider will attempt to clone another instance as indicated in the context. The - * configuration is detailed below. + * Configuration for creating a new instance as a clone of another instance. * */ @Export(name="clone", type=DatabaseInstanceClone.class, parameters={}) private Output clone; /** - * @return The context needed to create this instance as a clone of another instance. When this field is set during - * resource creation, this provider will attempt to clone another instance as indicated in the context. The - * configuration is detailed below. + * @return Configuration for creating a new instance as a clone of another instance. * */ public Output> clone_() { @@ -248,58 +232,36 @@ public Output databaseVersion() { return this.databaseVersion; } /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + * Used to block Terraform from deleting a SQL Instance. Defaults to true. * */ @Export(name="deletionProtection", type=Boolean.class, parameters={}) private Output deletionProtection; /** - * @return Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + * @return Used to block Terraform from deleting a SQL Instance. Defaults to true. * */ public Output> deletionProtection() { return Codegen.optional(this.deletionProtection); } - /** - * The full path to the encryption key used for the CMEK disk encryption. Setting - * up disk encryption currently requires manual steps outside of this provider. - * The provided key must be in the same region as the SQL instance. In order - * to use this feature, a special kind of service account must be created and - * granted permission on this key. This step can currently only be done - * manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - * That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - * key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - * - */ @Export(name="encryptionKeyName", type=String.class, parameters={}) private Output encryptionKeyName; - /** - * @return The full path to the encryption key used for the CMEK disk encryption. Setting - * up disk encryption currently requires manual steps outside of this provider. - * The provided key must be in the same region as the SQL instance. In order - * to use this feature, a special kind of service account must be created and - * granted permission on this key. This step can currently only be done - * manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - * That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - * key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - * - */ public Output encryptionKeyName() { return this.encryptionKeyName; } /** - * The first IPv4 address of any type assigned. + * The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + * output when the resource is configured with a count. * */ @Export(name="firstIpAddress", type=String.class, parameters={}) private Output firstIpAddress; /** - * @return The first IPv4 address of any type assigned. + * @return The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + * output when the resource is configured with a count. * */ public Output firstIpAddress() { @@ -358,34 +320,32 @@ public Output masterInstanceName() { return this.masterInstanceName; } /** - * The name of the instance. If the name is left - * blank, the provider will randomly generate one when the instance is first - * created. This is done because after a name is used, it cannot be reused for - * up to [one week](https://cloud.google.com/sql/docs/delete-instance). + * The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + * created. This is done because after a name is used, it cannot be reused for up to one week. * */ @Export(name="name", type=String.class, parameters={}) private Output name; /** - * @return The name of the instance. If the name is left - * blank, the provider will randomly generate one when the instance is first - * created. This is done because after a name is used, it cannot be reused for - * up to [one week](https://cloud.google.com/sql/docs/delete-instance). + * @return The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + * created. This is done because after a name is used, it cannot be reused for up to one week. * */ public Output name() { return this.name; } /** - * The first private (`PRIVATE`) IPv4 address assigned. + * IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. * */ @Export(name="privateIpAddress", type=String.class, parameters={}) private Output privateIpAddress; /** - * @return The first private (`PRIVATE`) IPv4 address assigned. + * @return IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. * */ public Output privateIpAddress() { @@ -408,14 +368,16 @@ public Output project() { return this.project; } /** - * The first public (`PRIMARY`) IPv4 address assigned. + * IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. * */ @Export(name="publicIpAddress", type=String.class, parameters={}) private Output publicIpAddress; /** - * @return The first public (`PRIMARY`) IPv4 address assigned. + * @return IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. * */ public Output publicIpAddress() { @@ -453,35 +415,21 @@ public Output region() { public Output replicaConfiguration() { return this.replicaConfiguration; } - /** - * 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 - * block during resource creation/update will trigger the restore action after the resource is created/updated. - * - */ @Export(name="restoreBackupContext", type=DatabaseInstanceRestoreBackupContext.class, parameters={}) private Output restoreBackupContext; - /** - * @return 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 - * block during resource creation/update will trigger the restore action after the resource is created/updated. - * - */ public Output> restoreBackupContext() { return Codegen.optional(this.restoreBackupContext); } /** - * Initial root password. Required for MS SQL Server. + * Initial root password. Can be updated. Required for MS SQL Server. * */ @Export(name="rootPassword", type=String.class, parameters={}) private Output rootPassword; /** - * @return Initial root password. Required for MS SQL Server. + * @return Initial root password. Can be updated. Required for MS SQL Server. * */ public Output> rootPassword() { 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 7d107dc84f..7abb634829 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 @@ -21,18 +21,14 @@ public final class DatabaseInstanceArgs extends com.pulumi.resources.ResourceArg public static final DatabaseInstanceArgs Empty = new DatabaseInstanceArgs(); /** - * The context needed to create this instance as a clone of another instance. When this field is set during - * resource creation, this provider will attempt to clone another instance as indicated in the context. The - * configuration is detailed below. + * Configuration for creating a new instance as a clone of another instance. * */ @Import(name="clone") private @Nullable Output clone; /** - * @return The context needed to create this instance as a clone of another instance. When this field is set during - * resource creation, this provider will attempt to clone another instance as indicated in the context. The - * configuration is detailed below. + * @return Configuration for creating a new instance as a clone of another instance. * */ public Optional> clone_() { @@ -71,47 +67,23 @@ public Output databaseVersion() { } /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + * Used to block Terraform from deleting a SQL Instance. Defaults to true. * */ @Import(name="deletionProtection") private @Nullable Output deletionProtection; /** - * @return Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + * @return Used to block Terraform from deleting a SQL Instance. Defaults to true. * */ public Optional> deletionProtection() { return Optional.ofNullable(this.deletionProtection); } - /** - * The full path to the encryption key used for the CMEK disk encryption. Setting - * up disk encryption currently requires manual steps outside of this provider. - * The provided key must be in the same region as the SQL instance. In order - * to use this feature, a special kind of service account must be created and - * granted permission on this key. This step can currently only be done - * manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - * That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - * key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - * - */ @Import(name="encryptionKeyName") private @Nullable Output encryptionKeyName; - /** - * @return The full path to the encryption key used for the CMEK disk encryption. Setting - * up disk encryption currently requires manual steps outside of this provider. - * The provided key must be in the same region as the SQL instance. In order - * to use this feature, a special kind of service account must be created and - * granted permission on this key. This step can currently only be done - * manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - * That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - * key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - * - */ public Optional> encryptionKeyName() { return Optional.ofNullable(this.encryptionKeyName); } @@ -151,20 +123,16 @@ public Optional> masterInstanceName() { } /** - * The name of the instance. If the name is left - * blank, the provider will randomly generate one when the instance is first - * created. This is done because after a name is used, it cannot be reused for - * up to [one week](https://cloud.google.com/sql/docs/delete-instance). + * The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + * created. This is done because after a name is used, it cannot be reused for up to one week. * */ @Import(name="name") private @Nullable Output name; /** - * @return The name of the instance. If the name is left - * blank, the provider will randomly generate one when the instance is first - * created. This is done because after a name is used, it cannot be reused for - * up to [one week](https://cloud.google.com/sql/docs/delete-instance). + * @return The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + * created. This is done because after a name is used, it cannot be reused for up to one week. * */ public Optional> name() { @@ -222,36 +190,22 @@ public Optional> replicaConfigu return Optional.ofNullable(this.replicaConfiguration); } - /** - * 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 - * block during resource creation/update will trigger the restore action after the resource is created/updated. - * - */ @Import(name="restoreBackupContext") private @Nullable Output restoreBackupContext; - /** - * @return 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 - * block during resource creation/update will trigger the restore action after the resource is created/updated. - * - */ public Optional> restoreBackupContext() { return Optional.ofNullable(this.restoreBackupContext); } /** - * Initial root password. Required for MS SQL Server. + * Initial root password. Can be updated. Required for MS SQL Server. * */ @Import(name="rootPassword") private @Nullable Output rootPassword; /** - * @return Initial root password. Required for MS SQL Server. + * @return Initial root password. Can be updated. Required for MS SQL Server. * */ public Optional> rootPassword() { @@ -312,9 +266,7 @@ public Builder(DatabaseInstanceArgs defaults) { } /** - * @param clone The context needed to create this instance as a clone of another instance. When this field is set during - * resource creation, this provider will attempt to clone another instance as indicated in the context. The - * configuration is detailed below. + * @param clone Configuration for creating a new instance as a clone of another instance. * * @return builder * @@ -325,9 +277,7 @@ public Builder clone_(@Nullable Output clone) { } /** - * @param clone The context needed to create this instance as a clone of another instance. When this field is set during - * resource creation, this provider will attempt to clone another instance as indicated in the context. The - * configuration is detailed below. + * @param clone Configuration for creating a new instance as a clone of another instance. * * @return builder * @@ -374,8 +324,7 @@ public Builder databaseVersion(String databaseVersion) { } /** - * @param deletionProtection Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + * @param deletionProtection Used to block Terraform from deleting a SQL Instance. Defaults to true. * * @return builder * @@ -386,8 +335,7 @@ public Builder deletionProtection(@Nullable Output deletionProtection) } /** - * @param deletionProtection Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + * @param deletionProtection Used to block Terraform from deleting a SQL Instance. Defaults to true. * * @return builder * @@ -396,37 +344,11 @@ public Builder deletionProtection(Boolean deletionProtection) { return deletionProtection(Output.of(deletionProtection)); } - /** - * @param encryptionKeyName The full path to the encryption key used for the CMEK disk encryption. Setting - * up disk encryption currently requires manual steps outside of this provider. - * The provided key must be in the same region as the SQL instance. In order - * to use this feature, a special kind of service account must be created and - * granted permission on this key. This step can currently only be done - * manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - * That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - * key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - * - * @return builder - * - */ public Builder encryptionKeyName(@Nullable Output encryptionKeyName) { $.encryptionKeyName = encryptionKeyName; return this; } - /** - * @param encryptionKeyName The full path to the encryption key used for the CMEK disk encryption. Setting - * up disk encryption currently requires manual steps outside of this provider. - * The provided key must be in the same region as the SQL instance. In order - * to use this feature, a special kind of service account must be created and - * granted permission on this key. This step can currently only be done - * manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - * That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - * key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - * - * @return builder - * - */ public Builder encryptionKeyName(String encryptionKeyName) { return encryptionKeyName(Output.of(encryptionKeyName)); } @@ -478,10 +400,8 @@ public Builder masterInstanceName(String masterInstanceName) { } /** - * @param name The name of the instance. If the name is left - * blank, the provider will randomly generate one when the instance is first - * created. This is done because after a name is used, it cannot be reused for - * up to [one week](https://cloud.google.com/sql/docs/delete-instance). + * @param name The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + * created. This is done because after a name is used, it cannot be reused for up to one week. * * @return builder * @@ -492,10 +412,8 @@ public Builder name(@Nullable Output name) { } /** - * @param name The name of the instance. If the name is left - * blank, the provider will randomly generate one when the instance is first - * created. This is done because after a name is used, it cannot be reused for - * up to [one week](https://cloud.google.com/sql/docs/delete-instance). + * @param name The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + * created. This is done because after a name is used, it cannot be reused for up to one week. * * @return builder * @@ -573,35 +491,17 @@ public Builder replicaConfiguration(DatabaseInstanceReplicaConfigurationArgs rep return replicaConfiguration(Output.of(replicaConfiguration)); } - /** - * @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. - * **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this - * block during resource creation/update will trigger the restore action after the resource is created/updated. - * - * @return builder - * - */ public Builder restoreBackupContext(@Nullable Output restoreBackupContext) { $.restoreBackupContext = restoreBackupContext; return this; } - /** - * @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. - * **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this - * block during resource creation/update will trigger the restore action after the resource is created/updated. - * - * @return builder - * - */ public Builder restoreBackupContext(DatabaseInstanceRestoreBackupContextArgs restoreBackupContext) { return restoreBackupContext(Output.of(restoreBackupContext)); } /** - * @param rootPassword Initial root password. Required for MS SQL Server. + * @param rootPassword Initial root password. Can be updated. Required for MS SQL Server. * * @return builder * @@ -612,7 +512,7 @@ public Builder rootPassword(@Nullable Output rootPassword) { } /** - * @param rootPassword Initial root password. Required for MS SQL Server. + * @param rootPassword Initial root password. Can be updated. Required for MS SQL Server. * * @return builder * 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 1ea6d6f6d8..3cd037038a 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 @@ -12,16 +12,11 @@ import com.pulumi.gcp.sql.inputs.SourceRepresentationInstanceState; import java.lang.Integer; import java.lang.String; +import java.util.List; import java.util.Optional; import javax.annotation.Nullable; /** - * A source representation instance is a Cloud SQL instance that represents - * the source database server to the Cloud SQL replica. It is visible in the - * Cloud Console and appears the same as a regular Cloud SQL instance, but it - * contains no data, requires no configuration or maintenance, and does not - * affect billing. You cannot update the source representation instance. - * * ## Example Usage * ### Sql Source Representation Instance Basic * ```java @@ -47,9 +42,12 @@ * public static void stack(Context ctx) { * var instance = new SourceRepresentationInstance("instance", SourceRepresentationInstanceArgs.builder() * .databaseVersion("MYSQL_8_0") + * .dumpFilePath("gs://replica-bucket/source-database.sql.gz") * .host("10.20.30.40") + * .password("password-for-the-user") * .port(3306) * .region("us-central1") + * .username("some-user") * .build()); * * } @@ -177,6 +175,7 @@ public Output name() { } /** * The password for the replication user account. + * **Note**: This property is sensitive and will not be displayed in the plan. * */ @Export(name="password", type=String.class, parameters={}) @@ -184,6 +183,7 @@ public Output name() { /** * @return The password for the replication user account. + * **Note**: This property is sensitive and will not be displayed in the plan. * */ public Output> password() { @@ -284,6 +284,9 @@ private SourceRepresentationInstance(String name, Output id, @Nullable S 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( + "password" + )) .build(); return com.pulumi.resources.CustomResourceOptions.merge(defaultOptions, options, id); } 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 7803ba0347..7eb0b3432b 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 @@ -125,6 +125,7 @@ public Optional> name() { /** * The password for the replication user account. + * **Note**: This property is sensitive and will not be displayed in the plan. * */ @Import(name="password") @@ -132,6 +133,7 @@ public Optional> name() { /** * @return The password for the replication user account. + * **Note**: This property is sensitive and will not be displayed in the plan. * */ public Optional> password() { @@ -390,6 +392,7 @@ public Builder name(String name) { /** * @param password The password for the replication user account. + * **Note**: This property is sensitive and will not be displayed in the plan. * * @return builder * @@ -401,6 +404,7 @@ public Builder password(@Nullable Output password) { /** * @param password The password for the replication user account. + * **Note**: This property is sensitive and will not be displayed in the plan. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/SslCert.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/SslCert.java index db44d271fd..4fe49db6d7 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/SslCert.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/SslCert.java @@ -15,10 +15,6 @@ import javax.annotation.Nullable; /** - * Creates a new Google SQL SSL Cert on a Google SQL Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/sslCerts). - * - * > **Note:** All arguments including the private key will be stored in the raw state as plain-text - * * ## Example Usage * * Example creating a SQL Client Certificate. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/sql/User.java b/sdk/java/src/main/java/com/pulumi/gcp/sql/User.java index 4f6ee3a3fc..b16d74fd89 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/sql/User.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/sql/User.java @@ -18,10 +18,6 @@ import javax.annotation.Nullable; /** - * Creates a new Google SQL User on a Google SQL User Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/users). - * - * > **Note:** All arguments including the username and password will be stored in the raw state as plain-text. - * * ## Example Usage * * Example creating a SQL User. 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 54958d65a4..70fb4940ee 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 @@ -39,18 +39,14 @@ public Optional>> availableMaintenanceVersions() { } /** - * The context needed to create this instance as a clone of another instance. When this field is set during - * resource creation, this provider will attempt to clone another instance as indicated in the context. The - * configuration is detailed below. + * Configuration for creating a new instance as a clone of another instance. * */ @Import(name="clone") private @Nullable Output clone; /** - * @return The context needed to create this instance as a clone of another instance. When this field is set during - * resource creation, this provider will attempt to clone another instance as indicated in the context. The - * configuration is detailed below. + * @return Configuration for creating a new instance as a clone of another instance. * */ public Optional> clone_() { @@ -106,60 +102,38 @@ public Optional> databaseVersion() { } /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + * Used to block Terraform from deleting a SQL Instance. Defaults to true. * */ @Import(name="deletionProtection") private @Nullable Output deletionProtection; /** - * @return Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + * @return Used to block Terraform from deleting a SQL Instance. Defaults to true. * */ public Optional> deletionProtection() { return Optional.ofNullable(this.deletionProtection); } - /** - * The full path to the encryption key used for the CMEK disk encryption. Setting - * up disk encryption currently requires manual steps outside of this provider. - * The provided key must be in the same region as the SQL instance. In order - * to use this feature, a special kind of service account must be created and - * granted permission on this key. This step can currently only be done - * manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - * That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - * key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - * - */ @Import(name="encryptionKeyName") private @Nullable Output encryptionKeyName; - /** - * @return The full path to the encryption key used for the CMEK disk encryption. Setting - * up disk encryption currently requires manual steps outside of this provider. - * The provided key must be in the same region as the SQL instance. In order - * to use this feature, a special kind of service account must be created and - * granted permission on this key. This step can currently only be done - * manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - * That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - * key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - * - */ public Optional> encryptionKeyName() { return Optional.ofNullable(this.encryptionKeyName); } /** - * The first IPv4 address of any type assigned. + * The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + * output when the resource is configured with a count. * */ @Import(name="firstIpAddress") private @Nullable Output firstIpAddress; /** - * @return The first IPv4 address of any type assigned. + * @return The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + * output when the resource is configured with a count. * */ public Optional> firstIpAddress() { @@ -223,20 +197,16 @@ public Optional> masterInstanceName() { } /** - * The name of the instance. If the name is left - * blank, the provider will randomly generate one when the instance is first - * created. This is done because after a name is used, it cannot be reused for - * up to [one week](https://cloud.google.com/sql/docs/delete-instance). + * The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + * created. This is done because after a name is used, it cannot be reused for up to one week. * */ @Import(name="name") private @Nullable Output name; /** - * @return The name of the instance. If the name is left - * blank, the provider will randomly generate one when the instance is first - * created. This is done because after a name is used, it cannot be reused for - * up to [one week](https://cloud.google.com/sql/docs/delete-instance). + * @return The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + * created. This is done because after a name is used, it cannot be reused for up to one week. * */ public Optional> name() { @@ -244,14 +214,16 @@ public Optional> name() { } /** - * The first private (`PRIVATE`) IPv4 address assigned. + * IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. * */ @Import(name="privateIpAddress") private @Nullable Output privateIpAddress; /** - * @return The first private (`PRIVATE`) IPv4 address assigned. + * @return IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. * */ public Optional> privateIpAddress() { @@ -276,14 +248,16 @@ public Optional> project() { } /** - * The first public (`PRIMARY`) IPv4 address assigned. + * IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. * */ @Import(name="publicIpAddress") private @Nullable Output publicIpAddress; /** - * @return The first public (`PRIMARY`) IPv4 address assigned. + * @return IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. * */ public Optional> publicIpAddress() { @@ -324,36 +298,22 @@ public Optional> replicaConfigu return Optional.ofNullable(this.replicaConfiguration); } - /** - * 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 - * block during resource creation/update will trigger the restore action after the resource is created/updated. - * - */ @Import(name="restoreBackupContext") private @Nullable Output restoreBackupContext; - /** - * @return 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 - * block during resource creation/update will trigger the restore action after the resource is created/updated. - * - */ public Optional> restoreBackupContext() { return Optional.ofNullable(this.restoreBackupContext); } /** - * Initial root password. Required for MS SQL Server. + * Initial root password. Can be updated. Required for MS SQL Server. * */ @Import(name="rootPassword") private @Nullable Output rootPassword; /** - * @return Initial root password. Required for MS SQL Server. + * @return Initial root password. Can be updated. Required for MS SQL Server. * */ public Optional> rootPassword() { @@ -494,9 +454,7 @@ public Builder availableMaintenanceVersions(String... availableMaintenanceVersio } /** - * @param clone The context needed to create this instance as a clone of another instance. When this field is set during - * resource creation, this provider will attempt to clone another instance as indicated in the context. The - * configuration is detailed below. + * @param clone Configuration for creating a new instance as a clone of another instance. * * @return builder * @@ -507,9 +465,7 @@ public Builder clone_(@Nullable Output clone) { } /** - * @param clone The context needed to create this instance as a clone of another instance. When this field is set during - * resource creation, this provider will attempt to clone another instance as indicated in the context. The - * configuration is detailed below. + * @param clone Configuration for creating a new instance as a clone of another instance. * * @return builder * @@ -579,8 +535,7 @@ public Builder databaseVersion(String databaseVersion) { } /** - * @param deletionProtection Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + * @param deletionProtection Used to block Terraform from deleting a SQL Instance. Defaults to true. * * @return builder * @@ -591,8 +546,7 @@ public Builder deletionProtection(@Nullable Output deletionProtection) } /** - * @param deletionProtection Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + * @param deletionProtection Used to block Terraform from deleting a SQL Instance. Defaults to true. * * @return builder * @@ -601,43 +555,18 @@ public Builder deletionProtection(Boolean deletionProtection) { return deletionProtection(Output.of(deletionProtection)); } - /** - * @param encryptionKeyName The full path to the encryption key used for the CMEK disk encryption. Setting - * up disk encryption currently requires manual steps outside of this provider. - * The provided key must be in the same region as the SQL instance. In order - * to use this feature, a special kind of service account must be created and - * granted permission on this key. This step can currently only be done - * manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - * That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - * key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - * - * @return builder - * - */ public Builder encryptionKeyName(@Nullable Output encryptionKeyName) { $.encryptionKeyName = encryptionKeyName; return this; } - /** - * @param encryptionKeyName The full path to the encryption key used for the CMEK disk encryption. Setting - * up disk encryption currently requires manual steps outside of this provider. - * The provided key must be in the same region as the SQL instance. In order - * to use this feature, a special kind of service account must be created and - * granted permission on this key. This step can currently only be done - * manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - * That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - * key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - * - * @return builder - * - */ public Builder encryptionKeyName(String encryptionKeyName) { return encryptionKeyName(Output.of(encryptionKeyName)); } /** - * @param firstIpAddress The first IPv4 address of any type assigned. + * @param firstIpAddress The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + * output when the resource is configured with a count. * * @return builder * @@ -648,7 +577,8 @@ public Builder firstIpAddress(@Nullable Output firstIpAddress) { } /** - * @param firstIpAddress The first IPv4 address of any type assigned. + * @param firstIpAddress The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + * output when the resource is configured with a count. * * @return builder * @@ -738,10 +668,8 @@ public Builder masterInstanceName(String masterInstanceName) { } /** - * @param name The name of the instance. If the name is left - * blank, the provider will randomly generate one when the instance is first - * created. This is done because after a name is used, it cannot be reused for - * up to [one week](https://cloud.google.com/sql/docs/delete-instance). + * @param name The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + * created. This is done because after a name is used, it cannot be reused for up to one week. * * @return builder * @@ -752,10 +680,8 @@ public Builder name(@Nullable Output name) { } /** - * @param name The name of the instance. If the name is left - * blank, the provider will randomly generate one when the instance is first - * created. This is done because after a name is used, it cannot be reused for - * up to [one week](https://cloud.google.com/sql/docs/delete-instance). + * @param name The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + * created. This is done because after a name is used, it cannot be reused for up to one week. * * @return builder * @@ -765,7 +691,8 @@ public Builder name(String name) { } /** - * @param privateIpAddress The first private (`PRIVATE`) IPv4 address assigned. + * @param privateIpAddress IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. * * @return builder * @@ -776,7 +703,8 @@ public Builder privateIpAddress(@Nullable Output privateIpAddress) { } /** - * @param privateIpAddress The first private (`PRIVATE`) IPv4 address assigned. + * @param privateIpAddress IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. * * @return builder * @@ -809,7 +737,8 @@ public Builder project(String project) { } /** - * @param publicIpAddress The first public (`PRIMARY`) IPv4 address assigned. + * @param publicIpAddress IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. * * @return builder * @@ -820,7 +749,8 @@ public Builder publicIpAddress(@Nullable Output publicIpAddress) { } /** - * @param publicIpAddress The first public (`PRIMARY`) IPv4 address assigned. + * @param publicIpAddress IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. * * @return builder * @@ -875,35 +805,17 @@ public Builder replicaConfiguration(DatabaseInstanceReplicaConfigurationArgs rep return replicaConfiguration(Output.of(replicaConfiguration)); } - /** - * @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. - * **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this - * block during resource creation/update will trigger the restore action after the resource is created/updated. - * - * @return builder - * - */ public Builder restoreBackupContext(@Nullable Output restoreBackupContext) { $.restoreBackupContext = restoreBackupContext; return this; } - /** - * @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. - * **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this - * block during resource creation/update will trigger the restore action after the resource is created/updated. - * - * @return builder - * - */ public Builder restoreBackupContext(DatabaseInstanceRestoreBackupContextArgs restoreBackupContext) { return restoreBackupContext(Output.of(restoreBackupContext)); } /** - * @param rootPassword Initial root password. Required for MS SQL Server. + * @param rootPassword Initial root password. Can be updated. Required for MS SQL Server. * * @return builder * @@ -914,7 +826,7 @@ public Builder rootPassword(@Nullable Output rootPassword) { } /** - * @param rootPassword Initial root password. Required for MS SQL Server. + * @param rootPassword Initial root password. Can be updated. Required for MS SQL Server. * * @return builder * 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 3f35d359f1..c839c186c8 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 @@ -125,6 +125,7 @@ public Optional> name() { /** * The password for the replication user account. + * **Note**: This property is sensitive and will not be displayed in the plan. * */ @Import(name="password") @@ -132,6 +133,7 @@ public Optional> name() { /** * @return The password for the replication user account. + * **Note**: This property is sensitive and will not be displayed in the plan. * */ public Optional> password() { @@ -390,6 +392,7 @@ public Builder name(String name) { /** * @param password The password for the replication user account. + * **Note**: This property is sensitive and will not be displayed in the plan. * * @return builder * @@ -401,6 +404,7 @@ public Builder password(@Nullable Output password) { /** * @param password The password for the replication user account. + * **Note**: This property is sensitive and will not be displayed in the plan. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/Bucket.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/Bucket.java index 72cfd79e01..25c84e6c8a 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/Bucket.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/Bucket.java @@ -259,18 +259,16 @@ public Output> encryption() { return Codegen.optional(this.encryption); } /** - * When deleting a bucket, this - * boolean option will delete all contained objects. If you try to delete a - * bucket that contains objects, the provider will fail that run. + * When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + * contains objects, Terraform will fail that run. * */ @Export(name="forceDestroy", type=Boolean.class, parameters={}) private Output forceDestroy; /** - * @return When deleting a bucket, this - * boolean option will delete all contained objects. If you try to delete a - * bucket that contains objects, the provider will fail that run. + * @return When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + * contains objects, Terraform will fail that run. * */ public Output> forceDestroy() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketACL.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketACL.java index f1e611c7a0..86b668463c 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketACL.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketACL.java @@ -16,17 +16,6 @@ import javax.annotation.Nullable; /** - * Authoritatively manages a bucket's ACLs in Google cloud storage service (GCS). For more information see - * [the official documentation](https://cloud.google.com/storage/docs/access-control/lists) - * and - * [API](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls). - * - * Bucket ACLs can be managed non authoritatively using the `storage_bucket_access_control` resource. Do not use these two resources in conjunction to manage the same bucket. - * - * Permissions can be granted either by ACLs or Cloud IAM policies. In general, permissions granted by Cloud IAM policies do not appear in ACLs, and permissions granted by ACLs do not appear in Cloud IAM policies. The only exception is for ACLs applied directly on a bucket and certain bucket-level Cloud IAM policies, as described in [Cloud IAM relation to ACLs](https://cloud.google.com/storage/docs/access-control/iam#acls). - * - * **NOTE** This resource will not remove the `project-owners-<project_id>` entity from the `OWNER` role. - * * ## Example Usage * * Example creating an ACL on a bucket with one owner, and one reader. diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketAccessControl.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketAccessControl.java index b85e7286f3..711c308809 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketAccessControl.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketAccessControl.java @@ -15,29 +15,6 @@ import javax.annotation.Nullable; /** - * Bucket ACLs can be managed authoritatively using the - * `storage_bucket_acl` resource. Do not use these two resources in conjunction to manage the same bucket. - * - * The BucketAccessControls resource manages the Access Control List - * (ACLs) for a single entity/role pairing on a bucket. ACLs let you specify who - * has access to your data and to what extent. - * - * There are three roles that can be assigned to an entity: - * - * READERs can get the bucket, though no acl property will be returned, and - * list the bucket's objects. WRITERs are READERs, and they can insert - * objects into the bucket and delete the bucket's objects. OWNERs are - * WRITERs, and they can get the acl property of a bucket, update a bucket, - * and call all BucketAccessControls methods on the bucket. For more - * information, see Access Control, with the caveat that this API uses - * READER, WRITER, and OWNER instead of READ, WRITE, and FULL_CONTROL. - * - * To get more information about BucketAccessControl, see: - * - * * [API documentation](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/storage/docs/access-control/lists) - * * ## Example Usage * ### Storage Bucket Access Control Public Bucket * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketArgs.java index ffc39d4882..256e4019c6 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketArgs.java @@ -103,18 +103,16 @@ public Optional> encryption() { } /** - * When deleting a bucket, this - * boolean option will delete all contained objects. If you try to delete a - * bucket that contains objects, the provider will fail that run. + * When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + * contains objects, Terraform will fail that run. * */ @Import(name="forceDestroy") private @Nullable Output forceDestroy; /** - * @return When deleting a bucket, this - * boolean option will delete all contained objects. If you try to delete a - * bucket that contains objects, the provider will fail that run. + * @return When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + * contains objects, Terraform will fail that run. * */ public Optional> forceDestroy() { @@ -476,9 +474,8 @@ public Builder encryption(BucketEncryptionArgs encryption) { } /** - * @param forceDestroy When deleting a bucket, this - * boolean option will delete all contained objects. If you try to delete a - * bucket that contains objects, the provider will fail that run. + * @param forceDestroy When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + * contains objects, Terraform will fail that run. * * @return builder * @@ -489,9 +486,8 @@ public Builder forceDestroy(@Nullable Output forceDestroy) { } /** - * @param forceDestroy When deleting a bucket, this - * boolean option will delete all contained objects. If you try to delete a - * bucket that contains objects, the provider will fail that run. + * @param forceDestroy When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + * contains objects, Terraform will fail that run. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketObject.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketObject.java index 8b9ef770d6..e8cba690e1 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketObject.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketObject.java @@ -99,14 +99,14 @@ public Output> cacheControl() { return Codegen.optional(this.cacheControl); } /** - * Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + * Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). * */ @Export(name="content", type=String.class, parameters={}) private Output content; /** - * @return Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + * @return Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). * */ public Output> content() { diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketObjectArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketObjectArgs.java index 94d6e7cbc9..c0a16df767 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketObjectArgs.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/BucketObjectArgs.java @@ -52,14 +52,14 @@ public Optional> cacheControl() { } /** - * Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + * Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). * */ @Import(name="content") private @Nullable Output content; /** - * @return Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + * @return Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). * */ public Optional> content() { @@ -345,7 +345,7 @@ public Builder cacheControl(String cacheControl) { } /** - * @param content Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + * @param content Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). * * @return builder * @@ -356,7 +356,7 @@ public Builder content(@Nullable Output content) { } /** - * @param content Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + * @param content Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/HmacKey.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/HmacKey.java index 40c44d314d..9ed7139c4f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/HmacKey.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/HmacKey.java @@ -16,22 +16,6 @@ import javax.annotation.Nullable; /** - * The hmacKeys resource represents an HMAC key within Cloud Storage. The resource - * consists of a secret and HMAC key metadata. HMAC keys can be used as credentials - * for service accounts. - * - * To get more information about HmacKey, see: - * - * * [API documentation](https://cloud.google.com/storage/docs/json_api/v1/projects/hmacKeys) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/storage/docs/authentication/managing-hmackeys) - * - * > **Warning:** All arguments including the `secret` value will be stored in the raw - * state as plain-text. On import, the `secret` value will not be retrieved. - * - * > **Warning:** All arguments including `secret` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Storage Hmac Key * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/StorageFunctions.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/StorageFunctions.java index 6811346570..9a78e666d0 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/StorageFunctions.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/StorageFunctions.java @@ -944,39 +944,6 @@ public static CompletableFuture getObjectSignedUrlPlai return Deployment.getInstance().invokeAsync("gcp:storage/getObjectSignedUrl:getObjectSignedUrl", TypeShape.of(GetObjectSignedUrlResult.class), args, Utilities.withVersion(options)); } /** - * Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts). - * - * For each Google Cloud project, Google maintains a unique service account which - * is used as the identity for various Google Cloud Storage operations, including - * operations involving - * [customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys) - * and those involving - * [storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification). - * This automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use - * these customer-managed resources. - * - * The service account has a well-known, documented naming format which is parameterised on the numeric Google project ID. - * However, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which - * presuppose its existence. - * These actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the - * service account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys - * on the bucket creation page. - * - * Use of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations - * which demand its existence, such as specifying it in Cloud IAM policy. - * Always prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause - * provider update errors in cases where the service account does not yet exist. - * - * > When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources, - * you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource. - * Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a - * bucket configuration, otherwise the API calls will fail. - * You may need to use `depends_on` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it. - * See the examples here and in the `gcp.storage.Notification` resource. - * - * For more information see - * [the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount). - * * ## Example Usage * ### Pub/Sub Notifications * ```java @@ -1067,39 +1034,6 @@ public static Output getProjectServiceAccount() return getProjectServiceAccount(GetProjectServiceAccountArgs.Empty, InvokeOptions.Empty); } /** - * Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts). - * - * For each Google Cloud project, Google maintains a unique service account which - * is used as the identity for various Google Cloud Storage operations, including - * operations involving - * [customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys) - * and those involving - * [storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification). - * This automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use - * these customer-managed resources. - * - * The service account has a well-known, documented naming format which is parameterised on the numeric Google project ID. - * However, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which - * presuppose its existence. - * These actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the - * service account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys - * on the bucket creation page. - * - * Use of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations - * which demand its existence, such as specifying it in Cloud IAM policy. - * Always prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause - * provider update errors in cases where the service account does not yet exist. - * - * > When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources, - * you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource. - * Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a - * bucket configuration, otherwise the API calls will fail. - * You may need to use `depends_on` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it. - * See the examples here and in the `gcp.storage.Notification` resource. - * - * For more information see - * [the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount). - * * ## Example Usage * ### Pub/Sub Notifications * ```java @@ -1190,39 +1124,6 @@ public static CompletableFuture getProjectServic return getProjectServiceAccountPlain(GetProjectServiceAccountPlainArgs.Empty, InvokeOptions.Empty); } /** - * Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts). - * - * For each Google Cloud project, Google maintains a unique service account which - * is used as the identity for various Google Cloud Storage operations, including - * operations involving - * [customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys) - * and those involving - * [storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification). - * This automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use - * these customer-managed resources. - * - * The service account has a well-known, documented naming format which is parameterised on the numeric Google project ID. - * However, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which - * presuppose its existence. - * These actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the - * service account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys - * on the bucket creation page. - * - * Use of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations - * which demand its existence, such as specifying it in Cloud IAM policy. - * Always prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause - * provider update errors in cases where the service account does not yet exist. - * - * > When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources, - * you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource. - * Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a - * bucket configuration, otherwise the API calls will fail. - * You may need to use `depends_on` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it. - * See the examples here and in the `gcp.storage.Notification` resource. - * - * For more information see - * [the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount). - * * ## Example Usage * ### Pub/Sub Notifications * ```java @@ -1313,39 +1214,6 @@ public static Output getProjectServiceAccount(Ge return getProjectServiceAccount(args, InvokeOptions.Empty); } /** - * Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts). - * - * For each Google Cloud project, Google maintains a unique service account which - * is used as the identity for various Google Cloud Storage operations, including - * operations involving - * [customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys) - * and those involving - * [storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification). - * This automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use - * these customer-managed resources. - * - * The service account has a well-known, documented naming format which is parameterised on the numeric Google project ID. - * However, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which - * presuppose its existence. - * These actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the - * service account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys - * on the bucket creation page. - * - * Use of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations - * which demand its existence, such as specifying it in Cloud IAM policy. - * Always prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause - * provider update errors in cases where the service account does not yet exist. - * - * > When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources, - * you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource. - * Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a - * bucket configuration, otherwise the API calls will fail. - * You may need to use `depends_on` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it. - * See the examples here and in the `gcp.storage.Notification` resource. - * - * For more information see - * [the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount). - * * ## Example Usage * ### Pub/Sub Notifications * ```java @@ -1436,39 +1304,6 @@ public static CompletableFuture getProjectServic return getProjectServiceAccountPlain(args, InvokeOptions.Empty); } /** - * Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts). - * - * For each Google Cloud project, Google maintains a unique service account which - * is used as the identity for various Google Cloud Storage operations, including - * operations involving - * [customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys) - * and those involving - * [storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification). - * This automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use - * these customer-managed resources. - * - * The service account has a well-known, documented naming format which is parameterised on the numeric Google project ID. - * However, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which - * presuppose its existence. - * These actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the - * service account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys - * on the bucket creation page. - * - * Use of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations - * which demand its existence, such as specifying it in Cloud IAM policy. - * Always prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause - * provider update errors in cases where the service account does not yet exist. - * - * > When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources, - * you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource. - * Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a - * bucket configuration, otherwise the API calls will fail. - * You may need to use `depends_on` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it. - * See the examples here and in the `gcp.storage.Notification` resource. - * - * For more information see - * [the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount). - * * ## Example Usage * ### Pub/Sub Notifications * ```java @@ -1559,39 +1394,6 @@ public static Output getProjectServiceAccount(Ge return Deployment.getInstance().invoke("gcp:storage/getProjectServiceAccount:getProjectServiceAccount", TypeShape.of(GetProjectServiceAccountResult.class), args, Utilities.withVersion(options)); } /** - * Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts). - * - * For each Google Cloud project, Google maintains a unique service account which - * is used as the identity for various Google Cloud Storage operations, including - * operations involving - * [customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys) - * and those involving - * [storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification). - * This automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use - * these customer-managed resources. - * - * The service account has a well-known, documented naming format which is parameterised on the numeric Google project ID. - * However, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which - * presuppose its existence. - * These actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the - * service account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys - * on the bucket creation page. - * - * Use of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations - * which demand its existence, such as specifying it in Cloud IAM policy. - * Always prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause - * provider update errors in cases where the service account does not yet exist. - * - * > When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources, - * you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource. - * Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a - * bucket configuration, otherwise the API calls will fail. - * You may need to use `depends_on` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it. - * See the examples here and in the `gcp.storage.Notification` resource. - * - * For more information see - * [the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount). - * * ## Example Usage * ### Pub/Sub Notifications * ```java diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/BucketObjectState.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/BucketObjectState.java index 717b4a00e8..c0132fabe5 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/BucketObjectState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/BucketObjectState.java @@ -52,14 +52,14 @@ public Optional> cacheControl() { } /** - * Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + * Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). * */ @Import(name="content") private @Nullable Output content; /** - * @return Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + * @return Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). * */ public Optional> content() { @@ -427,7 +427,7 @@ public Builder cacheControl(String cacheControl) { } /** - * @param content Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + * @param content Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). * * @return builder * @@ -438,7 +438,7 @@ public Builder content(@Nullable Output content) { } /** - * @param content Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + * @param content Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/BucketState.java b/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/BucketState.java index aa1f25c672..50f0bfa72f 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/BucketState.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/storage/inputs/BucketState.java @@ -103,18 +103,16 @@ public Optional> encryption() { } /** - * When deleting a bucket, this - * boolean option will delete all contained objects. If you try to delete a - * bucket that contains objects, the provider will fail that run. + * When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + * contains objects, Terraform will fail that run. * */ @Import(name="forceDestroy") private @Nullable Output forceDestroy; /** - * @return When deleting a bucket, this - * boolean option will delete all contained objects. If you try to delete a - * bucket that contains objects, the provider will fail that run. + * @return When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + * contains objects, Terraform will fail that run. * */ public Optional> forceDestroy() { @@ -508,9 +506,8 @@ public Builder encryption(BucketEncryptionArgs encryption) { } /** - * @param forceDestroy When deleting a bucket, this - * boolean option will delete all contained objects. If you try to delete a - * bucket that contains objects, the provider will fail that run. + * @param forceDestroy When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + * contains objects, Terraform will fail that run. * * @return builder * @@ -521,9 +518,8 @@ public Builder forceDestroy(@Nullable Output forceDestroy) { } /** - * @param forceDestroy When deleting a bucket, this - * boolean option will delete all contained objects. If you try to delete a - * bucket that contains objects, the provider will fail that run. + * @param forceDestroy When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + * contains objects, Terraform will fail that run. * * @return builder * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tags/LocationTagBinding.java b/sdk/java/src/main/java/com/pulumi/gcp/tags/LocationTagBinding.java new file mode 100644 index 0000000000..527406fcd8 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/tags/LocationTagBinding.java @@ -0,0 +1,207 @@ +// *** 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.tags; + +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.tags.LocationTagBindingArgs; +import com.pulumi.gcp.tags.inputs.LocationTagBindingState; +import java.lang.String; +import java.util.Optional; +import javax.annotation.Nullable; + +/** + * ## subcategory: "Tags" + * + * page_title: "Google: gcp.tags.LocationTagBinding" + * description: |- + * A LocationTagBinding represents a connection between a TagValue and a Regional cloud resources. + * --- + * + * # google\_tags\_location\_tag\_binding + * + * A TagBinding represents a connection between a TagValue and a Regional cloud resource (currently project, folder, or organization). Once a TagBinding is created, the TagValue is applied to all the descendants of the cloud resource. + * + * To get more information about TagBinding, see: + * + * * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v3/tagBindings) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing) + * + * ## Example Usage + * ### Location Tag Binding Basic + * ```java + * package generated_program; + * + * import com.pulumi.Context; + * import com.pulumi.Pulumi; + * import com.pulumi.core.Output; + * import com.pulumi.gcp.organizations.Project; + * import com.pulumi.gcp.organizations.ProjectArgs; + * import com.pulumi.gcp.tags.TagKey; + * import com.pulumi.gcp.tags.TagKeyArgs; + * import com.pulumi.gcp.tags.TagValue; + * import com.pulumi.gcp.tags.TagValueArgs; + * import com.pulumi.gcp.tags.LocationTagBinding; + * import com.pulumi.gcp.tags.LocationTagBindingArgs; + * 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 project = new Project("project", ProjectArgs.builder() + * .orgId("123456789") + * .projectId("project_id") + * .build()); + * + * var key = new TagKey("key", TagKeyArgs.builder() + * .description("For keyname resources.") + * .parent("organizations/123456789") + * .shortName("keyname") + * .build()); + * + * var value = new TagValue("value", TagValueArgs.builder() + * .description("For valuename resources.") + * .parent(key.name().applyValue(name -> String.format("tagKeys/%s", name))) + * .shortName("valuename") + * .build()); + * + * var binding = new LocationTagBinding("binding", LocationTagBindingArgs.builder() + * .location("us-central1") + * .parent(project.number().applyValue(number -> String.format("//run.googleapis.com/projects/%s/locations/%s/services/%s", number,google_cloud_run_service.default().location(),google_cloud_run_service.default().name()))) + * .tagValue(value.name().applyValue(name -> String.format("tagValues/%s", name))) + * .build()); + * + * } + * } + * ``` + * + * ## Import + * + * TagBinding can be imported using any of these accepted formats + * + * ```sh + * $ pulumi import gcp:tags/locationTagBinding:LocationTagBinding default {{location}}/{{name}} + * ``` + * + */ +@ResourceType(type="gcp:tags/locationTagBinding:LocationTagBinding") +public class LocationTagBinding extends com.pulumi.resources.CustomResource { + /** + * Location of the resource. + * + */ + @Export(name="location", type=String.class, parameters={}) + private Output location; + + /** + * @return Location of the resource. + * + */ + public Output> location() { + return Codegen.optional(this.location); + } + /** + * The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + * + */ + @Export(name="name", type=String.class, parameters={}) + private Output name; + + /** + * @return The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + * + */ + public Output name() { + return this.name; + } + /** + * The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + * + */ + @Export(name="parent", type=String.class, parameters={}) + private Output parent; + + /** + * @return The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + * + */ + public Output parent() { + return this.parent; + } + /** + * The TagValue of the TagBinding. Must be of the form tagValues/456. + * + */ + @Export(name="tagValue", type=String.class, parameters={}) + private Output tagValue; + + /** + * @return The TagValue of the TagBinding. Must be of the form tagValues/456. + * + */ + public Output tagValue() { + return this.tagValue; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public LocationTagBinding(String name) { + this(name, LocationTagBindingArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public LocationTagBinding(String name, LocationTagBindingArgs 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 LocationTagBinding(String name, LocationTagBindingArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:tags/locationTagBinding:LocationTagBinding", name, args == null ? LocationTagBindingArgs.Empty : args, makeResourceOptions(options, Codegen.empty())); + } + + private LocationTagBinding(String name, Output id, @Nullable LocationTagBindingState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:tags/locationTagBinding:LocationTagBinding", name, state, makeResourceOptions(options, id)); + } + + 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 LocationTagBinding get(String name, Output id, @Nullable LocationTagBindingState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new LocationTagBinding(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tags/LocationTagBindingArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/tags/LocationTagBindingArgs.java new file mode 100644 index 0000000000..cdf2b45582 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/tags/LocationTagBindingArgs.java @@ -0,0 +1,159 @@ +// *** 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.tags; + +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 LocationTagBindingArgs extends com.pulumi.resources.ResourceArgs { + + public static final LocationTagBindingArgs Empty = new LocationTagBindingArgs(); + + /** + * Location of the resource. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return Location of the resource. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + * + */ + @Import(name="parent", required=true) + private Output parent; + + /** + * @return The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + * + */ + public Output parent() { + return this.parent; + } + + /** + * The TagValue of the TagBinding. Must be of the form tagValues/456. + * + */ + @Import(name="tagValue", required=true) + private Output tagValue; + + /** + * @return The TagValue of the TagBinding. Must be of the form tagValues/456. + * + */ + public Output tagValue() { + return this.tagValue; + } + + private LocationTagBindingArgs() {} + + private LocationTagBindingArgs(LocationTagBindingArgs $) { + this.location = $.location; + this.parent = $.parent; + this.tagValue = $.tagValue; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(LocationTagBindingArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private LocationTagBindingArgs $; + + public Builder() { + $ = new LocationTagBindingArgs(); + } + + public Builder(LocationTagBindingArgs defaults) { + $ = new LocationTagBindingArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param location Location of the resource. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location Location of the resource. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param parent The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + * + * @return builder + * + */ + public Builder parent(Output parent) { + $.parent = parent; + return this; + } + + /** + * @param parent The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + * + * @return builder + * + */ + public Builder parent(String parent) { + return parent(Output.of(parent)); + } + + /** + * @param tagValue The TagValue of the TagBinding. Must be of the form tagValues/456. + * + * @return builder + * + */ + public Builder tagValue(Output tagValue) { + $.tagValue = tagValue; + return this; + } + + /** + * @param tagValue The TagValue of the TagBinding. Must be of the form tagValues/456. + * + * @return builder + * + */ + public Builder tagValue(String tagValue) { + return tagValue(Output.of(tagValue)); + } + + public LocationTagBindingArgs build() { + $.parent = Objects.requireNonNull($.parent, "expected parameter 'parent' to be non-null"); + $.tagValue = Objects.requireNonNull($.tagValue, "expected parameter 'tagValue' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tags/inputs/LocationTagBindingState.java b/sdk/java/src/main/java/com/pulumi/gcp/tags/inputs/LocationTagBindingState.java new file mode 100644 index 0000000000..6ee4772f4e --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/tags/inputs/LocationTagBindingState.java @@ -0,0 +1,194 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.tags.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 LocationTagBindingState extends com.pulumi.resources.ResourceArgs { + + public static final LocationTagBindingState Empty = new LocationTagBindingState(); + + /** + * Location of the resource. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return Location of the resource. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + * + */ + @Import(name="parent") + private @Nullable Output parent; + + /** + * @return The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + * + */ + public Optional> parent() { + return Optional.ofNullable(this.parent); + } + + /** + * The TagValue of the TagBinding. Must be of the form tagValues/456. + * + */ + @Import(name="tagValue") + private @Nullable Output tagValue; + + /** + * @return The TagValue of the TagBinding. Must be of the form tagValues/456. + * + */ + public Optional> tagValue() { + return Optional.ofNullable(this.tagValue); + } + + private LocationTagBindingState() {} + + private LocationTagBindingState(LocationTagBindingState $) { + this.location = $.location; + this.name = $.name; + this.parent = $.parent; + this.tagValue = $.tagValue; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(LocationTagBindingState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private LocationTagBindingState $; + + public Builder() { + $ = new LocationTagBindingState(); + } + + public Builder(LocationTagBindingState defaults) { + $ = new LocationTagBindingState(Objects.requireNonNull(defaults)); + } + + /** + * @param location Location of the resource. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location Location of the resource. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param parent The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + * + * @return builder + * + */ + public Builder parent(@Nullable Output parent) { + $.parent = parent; + return this; + } + + /** + * @param parent The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + * + * @return builder + * + */ + public Builder parent(String parent) { + return parent(Output.of(parent)); + } + + /** + * @param tagValue The TagValue of the TagBinding. Must be of the form tagValues/456. + * + * @return builder + * + */ + public Builder tagValue(@Nullable Output tagValue) { + $.tagValue = tagValue; + return this; + } + + /** + * @param tagValue The TagValue of the TagBinding. Must be of the form tagValues/456. + * + * @return builder + * + */ + public Builder tagValue(String tagValue) { + return tagValue(Output.of(tagValue)); + } + + public LocationTagBindingState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/tpu/Node.java b/sdk/java/src/main/java/com/pulumi/gcp/tpu/Node.java index bcdb1727de..7d2459511e 100644 --- a/sdk/java/src/main/java/com/pulumi/gcp/tpu/Node.java +++ b/sdk/java/src/main/java/com/pulumi/gcp/tpu/Node.java @@ -65,72 +65,6 @@ * } * } * ``` - * ### TPU Node Full - * ```java - * package generated_program; - * - * import com.pulumi.Context; - * import com.pulumi.Pulumi; - * import com.pulumi.core.Output; - * import com.pulumi.gcp.tpu.TpuFunctions; - * import com.pulumi.gcp.tpu.inputs.GetTensorflowVersionsArgs; - * import com.pulumi.gcp.compute.ComputeFunctions; - * import com.pulumi.gcp.compute.inputs.GetNetworkArgs; - * import com.pulumi.gcp.compute.GlobalAddress; - * import com.pulumi.gcp.compute.GlobalAddressArgs; - * import com.pulumi.gcp.servicenetworking.Connection; - * import com.pulumi.gcp.servicenetworking.ConnectionArgs; - * import com.pulumi.gcp.tpu.Node; - * import com.pulumi.gcp.tpu.NodeArgs; - * import com.pulumi.gcp.tpu.inputs.NodeSchedulingConfigArgs; - * 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 available = TpuFunctions.getTensorflowVersions(); - * - * final var network = ComputeFunctions.getNetwork(GetNetworkArgs.builder() - * .name("default") - * .build()); - * - * var serviceRange = new GlobalAddress("serviceRange", GlobalAddressArgs.builder() - * .purpose("VPC_PEERING") - * .addressType("INTERNAL") - * .prefixLength(16) - * .network(network.applyValue(getNetworkResult -> getNetworkResult.id())) - * .build()); - * - * var privateServiceConnection = new Connection("privateServiceConnection", ConnectionArgs.builder() - * .network(network.applyValue(getNetworkResult -> getNetworkResult.id())) - * .service("servicenetworking.googleapis.com") - * .reservedPeeringRanges(serviceRange.name()) - * .build()); - * - * var tpu = new Node("tpu", NodeArgs.builder() - * .zone("us-central1-b") - * .acceleratorType("v3-8") - * .tensorflowVersion(available.applyValue(getTensorflowVersionsResult -> getTensorflowVersionsResult.versions()[0])) - * .description("Google Provider test TPU") - * .useServiceNetworking(true) - * .network(privateServiceConnection.network()) - * .labels(Map.of("foo", "bar")) - * .schedulingConfig(NodeSchedulingConfigArgs.builder() - * .preemptible(true) - * .build()) - * .build()); - * - * } - * } - * ``` * * ## Import * diff --git a/sdk/java/src/main/java/com/pulumi/gcp/workstations/WorkstationCluster.java b/sdk/java/src/main/java/com/pulumi/gcp/workstations/WorkstationCluster.java new file mode 100644 index 0000000000..01aead0504 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/workstations/WorkstationCluster.java @@ -0,0 +1,443 @@ +// *** 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.workstations; + +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.workstations.WorkstationClusterArgs; +import com.pulumi.gcp.workstations.inputs.WorkstationClusterState; +import com.pulumi.gcp.workstations.outputs.WorkstationClusterCondition; +import com.pulumi.gcp.workstations.outputs.WorkstationClusterPrivateClusterConfig; +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 + * ### Workstation Cluster Basic + * ```java + * 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.workstations.WorkstationCluster; + * import com.pulumi.gcp.workstations.WorkstationClusterArgs; + * import com.pulumi.gcp.organizations.OrganizationsFunctions; + * import com.pulumi.gcp.organizations.inputs.GetProjectArgs; + * 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 defaultNetwork = new Network("defaultNetwork", NetworkArgs.builder() + * .autoCreateSubnetworks(false) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * var defaultSubnetwork = new Subnetwork("defaultSubnetwork", SubnetworkArgs.builder() + * .ipCidrRange("10.0.0.0/24") + * .region("us-central1") + * .network(defaultNetwork.name()) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * var defaultWorkstationCluster = new WorkstationCluster("defaultWorkstationCluster", WorkstationClusterArgs.builder() + * .workstationClusterId("workstation-cluster") + * .network(defaultNetwork.id()) + * .subnetwork(defaultSubnetwork.id()) + * .location("us-central1") + * .labels(Map.of("label", "key")) + * .annotations(Map.of("label-one", "value-one")) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * final var project = OrganizationsFunctions.getProject(); + * + * } + * } + * ``` + * ### Workstation Cluster Private + * ```java + * 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.workstations.WorkstationCluster; + * import com.pulumi.gcp.workstations.WorkstationClusterArgs; + * import com.pulumi.gcp.workstations.inputs.WorkstationClusterPrivateClusterConfigArgs; + * import com.pulumi.gcp.organizations.OrganizationsFunctions; + * import com.pulumi.gcp.organizations.inputs.GetProjectArgs; + * 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 defaultNetwork = new Network("defaultNetwork", NetworkArgs.builder() + * .autoCreateSubnetworks(false) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * var defaultSubnetwork = new Subnetwork("defaultSubnetwork", SubnetworkArgs.builder() + * .ipCidrRange("10.0.0.0/24") + * .region("us-central1") + * .network(defaultNetwork.name()) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * var defaultWorkstationCluster = new WorkstationCluster("defaultWorkstationCluster", WorkstationClusterArgs.builder() + * .workstationClusterId("workstation-cluster-private") + * .network(defaultNetwork.id()) + * .subnetwork(defaultSubnetwork.id()) + * .location("us-central1") + * .privateClusterConfig(WorkstationClusterPrivateClusterConfigArgs.builder() + * .enablePrivateEndpoint(true) + * .build()) + * .labels(Map.of("label", "key")) + * .annotations(Map.of("label-one", "value-one")) + * .build(), CustomResourceOptions.builder() + * .provider(google_beta) + * .build()); + * + * final var project = OrganizationsFunctions.getProject(); + * + * } + * } + * ``` + * + * ## Import + * + * WorkstationCluster can be imported using any of these accepted formats + * + * ```sh + * $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{project}}/{{location}}/{{workstation_cluster_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{location}}/{{workstation_cluster_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{workstation_cluster_id}} + * ``` + * + */ +@ResourceType(type="gcp:workstations/workstationCluster:WorkstationCluster") +public class WorkstationCluster extends com.pulumi.resources.CustomResource { + /** + * Client-specified annotations. This is distinct from labels. + * + */ + @Export(name="annotations", type=Map.class, parameters={String.class, String.class}) + private Output> annotations; + + /** + * @return Client-specified annotations. This is distinct from labels. + * + */ + public Output>> annotations() { + return Codegen.optional(this.annotations); + } + /** + * Status conditions describing the current resource state. + * Structure is documented below. + * + */ + @Export(name="conditions", type=List.class, parameters={WorkstationClusterCondition.class}) + private Output> conditions; + + /** + * @return Status conditions describing the current resource state. + * Structure is documented below. + * + */ + public Output> conditions() { + return this.conditions; + } + /** + * Time the Instance was created in UTC. + * + */ + @Export(name="createTime", type=String.class, parameters={}) + private Output createTime; + + /** + * @return Time the Instance was created in UTC. + * + */ + public Output createTime() { + return this.createTime; + } + /** + * Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + * Details can be found in the conditions field. + * + */ + @Export(name="degraded", type=Boolean.class, parameters={}) + private Output degraded; + + /** + * @return Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + * Details can be found in the conditions field. + * + */ + public Output degraded() { + return this.degraded; + } + /** + * Human-readable name for this resource. + * + */ + @Export(name="displayName", type=String.class, parameters={}) + private Output displayName; + + /** + * @return Human-readable name for this resource. + * + */ + public Output> displayName() { + return Codegen.optional(this.displayName); + } + /** + * Checksum computed by the server. + * May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + * + */ + @Export(name="etag", type=String.class, parameters={}) + private Output etag; + + /** + * @return Checksum computed by the server. + * May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + * + */ + public Output etag() { + return this.etag; + } + /** + * Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + * + */ + @Export(name="labels", type=Map.class, parameters={String.class, String.class}) + private Output> labels; + + /** + * @return Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + * + */ + public Output>> labels() { + return Codegen.optional(this.labels); + } + /** + * The location where the workstation cluster should reside. + * + */ + @Export(name="location", type=String.class, parameters={}) + private Output location; + + /** + * @return The location where the workstation cluster should reside. + * + */ + public Output> location() { + return Codegen.optional(this.location); + } + /** + * The name of the cluster resource. + * + */ + @Export(name="name", type=String.class, parameters={}) + private Output name; + + /** + * @return The name of the cluster resource. + * + */ + public Output name() { + return this.name; + } + /** + * The relative resource name of the VPC network on which the instance can be accessed. + * It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + * + */ + @Export(name="network", type=String.class, parameters={}) + private Output network; + + /** + * @return The relative resource name of the VPC network on which the instance can be accessed. + * It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + * + */ + public Output network() { + return this.network; + } + /** + * Configuration for private cluster. + * Structure is documented below. + * + */ + @Export(name="privateClusterConfig", type=WorkstationClusterPrivateClusterConfig.class, parameters={}) + private Output privateClusterConfig; + + /** + * @return Configuration for private cluster. + * Structure is documented below. + * + */ + public Output> privateClusterConfig() { + return Codegen.optional(this.privateClusterConfig); + } + /** + * The ID of the project in which the resource belongs. + * If it is not provided, the provider project is used. + * + */ + @Export(name="project", type=String.class, parameters={}) + 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; + } + /** + * Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + * Must be part of the subnetwork specified for this cluster. + * + */ + @Export(name="subnetwork", type=String.class, parameters={}) + private Output subnetwork; + + /** + * @return Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + * Must be part of the subnetwork specified for this cluster. + * + */ + public Output subnetwork() { + return this.subnetwork; + } + /** + * The system-generated UID of the resource. + * + */ + @Export(name="uid", type=String.class, parameters={}) + private Output uid; + + /** + * @return The system-generated UID of the resource. + * + */ + public Output uid() { + return this.uid; + } + /** + * The ID of the workstation cluster. + * + */ + @Export(name="workstationClusterId", type=String.class, parameters={}) + private Output workstationClusterId; + + /** + * @return The ID of the workstation cluster. + * + */ + public Output workstationClusterId() { + return this.workstationClusterId; + } + + /** + * + * @param name The _unique_ name of the resulting resource. + */ + public WorkstationCluster(String name) { + this(name, WorkstationClusterArgs.Empty); + } + /** + * + * @param name The _unique_ name of the resulting resource. + * @param args The arguments to use to populate this resource's properties. + */ + public WorkstationCluster(String name, WorkstationClusterArgs 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 WorkstationCluster(String name, WorkstationClusterArgs args, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:workstations/workstationCluster:WorkstationCluster", name, args == null ? WorkstationClusterArgs.Empty : args, makeResourceOptions(options, Codegen.empty())); + } + + private WorkstationCluster(String name, Output id, @Nullable WorkstationClusterState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + super("gcp:workstations/workstationCluster:WorkstationCluster", name, state, makeResourceOptions(options, id)); + } + + 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 WorkstationCluster get(String name, Output id, @Nullable WorkstationClusterState state, @Nullable com.pulumi.resources.CustomResourceOptions options) { + return new WorkstationCluster(name, id, state, options); + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/workstations/WorkstationClusterArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/workstations/WorkstationClusterArgs.java new file mode 100644 index 0000000000..f50cce9fe5 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/workstations/WorkstationClusterArgs.java @@ -0,0 +1,400 @@ +// *** 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.workstations; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.workstations.inputs.WorkstationClusterPrivateClusterConfigArgs; +import java.lang.String; +import java.util.Map; +import java.util.Objects; +import java.util.Optional; +import javax.annotation.Nullable; + + +public final class WorkstationClusterArgs extends com.pulumi.resources.ResourceArgs { + + public static final WorkstationClusterArgs Empty = new WorkstationClusterArgs(); + + /** + * Client-specified annotations. This is distinct from labels. + * + */ + @Import(name="annotations") + private @Nullable Output> annotations; + + /** + * @return Client-specified annotations. This is distinct from labels. + * + */ + public Optional>> annotations() { + return Optional.ofNullable(this.annotations); + } + + /** + * Human-readable name for this resource. + * + */ + @Import(name="displayName") + private @Nullable Output displayName; + + /** + * @return Human-readable name for this resource. + * + */ + public Optional> displayName() { + return Optional.ofNullable(this.displayName); + } + + /** + * Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The location where the workstation cluster should reside. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location where the workstation cluster should reside. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * The relative resource name of the VPC network on which the instance can be accessed. + * It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + * + */ + @Import(name="network", required=true) + private Output network; + + /** + * @return The relative resource name of the VPC network on which the instance can be accessed. + * It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + * + */ + public Output network() { + return this.network; + } + + /** + * Configuration for private cluster. + * Structure is documented below. + * + */ + @Import(name="privateClusterConfig") + private @Nullable Output privateClusterConfig; + + /** + * @return Configuration for private cluster. + * Structure is documented below. + * + */ + public Optional> privateClusterConfig() { + return Optional.ofNullable(this.privateClusterConfig); + } + + /** + * 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); + } + + /** + * Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + * Must be part of the subnetwork specified for this cluster. + * + */ + @Import(name="subnetwork", required=true) + private Output subnetwork; + + /** + * @return Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + * Must be part of the subnetwork specified for this cluster. + * + */ + public Output subnetwork() { + return this.subnetwork; + } + + /** + * The ID of the workstation cluster. + * + */ + @Import(name="workstationClusterId", required=true) + private Output workstationClusterId; + + /** + * @return The ID of the workstation cluster. + * + */ + public Output workstationClusterId() { + return this.workstationClusterId; + } + + private WorkstationClusterArgs() {} + + private WorkstationClusterArgs(WorkstationClusterArgs $) { + this.annotations = $.annotations; + this.displayName = $.displayName; + this.labels = $.labels; + this.location = $.location; + this.network = $.network; + this.privateClusterConfig = $.privateClusterConfig; + this.project = $.project; + this.subnetwork = $.subnetwork; + this.workstationClusterId = $.workstationClusterId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(WorkstationClusterArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private WorkstationClusterArgs $; + + public Builder() { + $ = new WorkstationClusterArgs(); + } + + public Builder(WorkstationClusterArgs defaults) { + $ = new WorkstationClusterArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param annotations Client-specified annotations. This is distinct from labels. + * + * @return builder + * + */ + public Builder annotations(@Nullable Output> annotations) { + $.annotations = annotations; + return this; + } + + /** + * @param annotations Client-specified annotations. This is distinct from labels. + * + * @return builder + * + */ + public Builder annotations(Map annotations) { + return annotations(Output.of(annotations)); + } + + /** + * @param displayName Human-readable name for this resource. + * + * @return builder + * + */ + public Builder displayName(@Nullable Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName Human-readable name for this resource. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + /** + * @param labels Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location The location where the workstation cluster should reside. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location where the workstation cluster should reside. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param network The relative resource name of the VPC network on which the instance can be accessed. + * It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + * + * @return builder + * + */ + public Builder network(Output network) { + $.network = network; + return this; + } + + /** + * @param network The relative resource name of the VPC network on which the instance can be accessed. + * It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + * + * @return builder + * + */ + public Builder network(String network) { + return network(Output.of(network)); + } + + /** + * @param privateClusterConfig Configuration for private cluster. + * Structure is documented below. + * + * @return builder + * + */ + public Builder privateClusterConfig(@Nullable Output privateClusterConfig) { + $.privateClusterConfig = privateClusterConfig; + return this; + } + + /** + * @param privateClusterConfig Configuration for private cluster. + * Structure is documented below. + * + * @return builder + * + */ + public Builder privateClusterConfig(WorkstationClusterPrivateClusterConfigArgs privateClusterConfig) { + return privateClusterConfig(Output.of(privateClusterConfig)); + } + + /** + * @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 subnetwork Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + * Must be part of the subnetwork specified for this cluster. + * + * @return builder + * + */ + public Builder subnetwork(Output subnetwork) { + $.subnetwork = subnetwork; + return this; + } + + /** + * @param subnetwork Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + * Must be part of the subnetwork specified for this cluster. + * + * @return builder + * + */ + public Builder subnetwork(String subnetwork) { + return subnetwork(Output.of(subnetwork)); + } + + /** + * @param workstationClusterId The ID of the workstation cluster. + * + * @return builder + * + */ + public Builder workstationClusterId(Output workstationClusterId) { + $.workstationClusterId = workstationClusterId; + return this; + } + + /** + * @param workstationClusterId The ID of the workstation cluster. + * + * @return builder + * + */ + public Builder workstationClusterId(String workstationClusterId) { + return workstationClusterId(Output.of(workstationClusterId)); + } + + public WorkstationClusterArgs build() { + $.network = Objects.requireNonNull($.network, "expected parameter 'network' to be non-null"); + $.subnetwork = Objects.requireNonNull($.subnetwork, "expected parameter 'subnetwork' to be non-null"); + $.workstationClusterId = Objects.requireNonNull($.workstationClusterId, "expected parameter 'workstationClusterId' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationClusterConditionArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationClusterConditionArgs.java new file mode 100644 index 0000000000..02448f1631 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationClusterConditionArgs.java @@ -0,0 +1,171 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.workstations.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import java.lang.Integer; +import java.lang.Object; +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 WorkstationClusterConditionArgs extends com.pulumi.resources.ResourceArgs { + + public static final WorkstationClusterConditionArgs Empty = new WorkstationClusterConditionArgs(); + + /** + * The status code, which should be an enum value of google.rpc.Code. + * + */ + @Import(name="code") + private @Nullable Output code; + + /** + * @return The status code, which should be an enum value of google.rpc.Code. + * + */ + public Optional> code() { + return Optional.ofNullable(this.code); + } + + /** + * A list of messages that carry the error details. + * + */ + @Import(name="details") + private @Nullable Output>> details; + + /** + * @return A list of messages that carry the error details. + * + */ + public Optional>>> details() { + return Optional.ofNullable(this.details); + } + + /** + * Human readable message indicating details about the current status. + * + */ + @Import(name="message") + private @Nullable Output message; + + /** + * @return Human readable message indicating details about the current status. + * + */ + public Optional> message() { + return Optional.ofNullable(this.message); + } + + private WorkstationClusterConditionArgs() {} + + private WorkstationClusterConditionArgs(WorkstationClusterConditionArgs $) { + this.code = $.code; + this.details = $.details; + this.message = $.message; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(WorkstationClusterConditionArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private WorkstationClusterConditionArgs $; + + public Builder() { + $ = new WorkstationClusterConditionArgs(); + } + + public Builder(WorkstationClusterConditionArgs defaults) { + $ = new WorkstationClusterConditionArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param code The status code, which should be an enum value of google.rpc.Code. + * + * @return builder + * + */ + public Builder code(@Nullable Output code) { + $.code = code; + return this; + } + + /** + * @param code The status code, which should be an enum value of google.rpc.Code. + * + * @return builder + * + */ + public Builder code(Integer code) { + return code(Output.of(code)); + } + + /** + * @param details A list of messages that carry the error details. + * + * @return builder + * + */ + public Builder details(@Nullable Output>> details) { + $.details = details; + return this; + } + + /** + * @param details A list of messages that carry the error details. + * + * @return builder + * + */ + public Builder details(List> details) { + return details(Output.of(details)); + } + + /** + * @param details A list of messages that carry the error details. + * + * @return builder + * + */ + public Builder details(Map... details) { + return details(List.of(details)); + } + + /** + * @param message Human readable message indicating details about the current status. + * + * @return builder + * + */ + public Builder message(@Nullable Output message) { + $.message = message; + return this; + } + + /** + * @param message Human readable message indicating details about the current status. + * + * @return builder + * + */ + public Builder message(String message) { + return message(Output.of(message)); + } + + public WorkstationClusterConditionArgs build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationClusterPrivateClusterConfigArgs.java b/sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationClusterPrivateClusterConfigArgs.java new file mode 100644 index 0000000000..dd3048c9eb --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationClusterPrivateClusterConfigArgs.java @@ -0,0 +1,175 @@ +// *** 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.workstations.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 WorkstationClusterPrivateClusterConfigArgs extends com.pulumi.resources.ResourceArgs { + + public static final WorkstationClusterPrivateClusterConfigArgs Empty = new WorkstationClusterPrivateClusterConfigArgs(); + + /** + * Hostname for the workstation cluster. + * This field will be populated only when private endpoint is enabled. + * To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + * + */ + @Import(name="clusterHostname") + private @Nullable Output clusterHostname; + + /** + * @return Hostname for the workstation cluster. + * This field will be populated only when private endpoint is enabled. + * To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + * + */ + public Optional> clusterHostname() { + return Optional.ofNullable(this.clusterHostname); + } + + /** + * Whether Workstations endpoint is private. + * + */ + @Import(name="enablePrivateEndpoint", required=true) + private Output enablePrivateEndpoint; + + /** + * @return Whether Workstations endpoint is private. + * + */ + public Output enablePrivateEndpoint() { + return this.enablePrivateEndpoint; + } + + /** + * Service attachment URI for the workstation cluster. + * The service attachemnt is created when private endpoint is enabled. + * To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + * + */ + @Import(name="serviceAttachmentUri") + private @Nullable Output serviceAttachmentUri; + + /** + * @return Service attachment URI for the workstation cluster. + * The service attachemnt is created when private endpoint is enabled. + * To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + * + */ + public Optional> serviceAttachmentUri() { + return Optional.ofNullable(this.serviceAttachmentUri); + } + + private WorkstationClusterPrivateClusterConfigArgs() {} + + private WorkstationClusterPrivateClusterConfigArgs(WorkstationClusterPrivateClusterConfigArgs $) { + this.clusterHostname = $.clusterHostname; + this.enablePrivateEndpoint = $.enablePrivateEndpoint; + this.serviceAttachmentUri = $.serviceAttachmentUri; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(WorkstationClusterPrivateClusterConfigArgs defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private WorkstationClusterPrivateClusterConfigArgs $; + + public Builder() { + $ = new WorkstationClusterPrivateClusterConfigArgs(); + } + + public Builder(WorkstationClusterPrivateClusterConfigArgs defaults) { + $ = new WorkstationClusterPrivateClusterConfigArgs(Objects.requireNonNull(defaults)); + } + + /** + * @param clusterHostname Hostname for the workstation cluster. + * This field will be populated only when private endpoint is enabled. + * To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + * + * @return builder + * + */ + public Builder clusterHostname(@Nullable Output clusterHostname) { + $.clusterHostname = clusterHostname; + return this; + } + + /** + * @param clusterHostname Hostname for the workstation cluster. + * This field will be populated only when private endpoint is enabled. + * To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + * + * @return builder + * + */ + public Builder clusterHostname(String clusterHostname) { + return clusterHostname(Output.of(clusterHostname)); + } + + /** + * @param enablePrivateEndpoint Whether Workstations endpoint is private. + * + * @return builder + * + */ + public Builder enablePrivateEndpoint(Output enablePrivateEndpoint) { + $.enablePrivateEndpoint = enablePrivateEndpoint; + return this; + } + + /** + * @param enablePrivateEndpoint Whether Workstations endpoint is private. + * + * @return builder + * + */ + public Builder enablePrivateEndpoint(Boolean enablePrivateEndpoint) { + return enablePrivateEndpoint(Output.of(enablePrivateEndpoint)); + } + + /** + * @param serviceAttachmentUri Service attachment URI for the workstation cluster. + * The service attachemnt is created when private endpoint is enabled. + * To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + * + * @return builder + * + */ + public Builder serviceAttachmentUri(@Nullable Output serviceAttachmentUri) { + $.serviceAttachmentUri = serviceAttachmentUri; + return this; + } + + /** + * @param serviceAttachmentUri Service attachment URI for the workstation cluster. + * The service attachemnt is created when private endpoint is enabled. + * To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + * + * @return builder + * + */ + public Builder serviceAttachmentUri(String serviceAttachmentUri) { + return serviceAttachmentUri(Output.of(serviceAttachmentUri)); + } + + public WorkstationClusterPrivateClusterConfigArgs build() { + $.enablePrivateEndpoint = Objects.requireNonNull($.enablePrivateEndpoint, "expected parameter 'enablePrivateEndpoint' to be non-null"); + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationClusterState.java b/sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationClusterState.java new file mode 100644 index 0000000000..65fd6ff7ea --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/workstations/inputs/WorkstationClusterState.java @@ -0,0 +1,645 @@ +// *** 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.workstations.inputs; + +import com.pulumi.core.Output; +import com.pulumi.core.annotations.Import; +import com.pulumi.gcp.workstations.inputs.WorkstationClusterConditionArgs; +import com.pulumi.gcp.workstations.inputs.WorkstationClusterPrivateClusterConfigArgs; +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 WorkstationClusterState extends com.pulumi.resources.ResourceArgs { + + public static final WorkstationClusterState Empty = new WorkstationClusterState(); + + /** + * Client-specified annotations. This is distinct from labels. + * + */ + @Import(name="annotations") + private @Nullable Output> annotations; + + /** + * @return Client-specified annotations. This is distinct from labels. + * + */ + public Optional>> annotations() { + return Optional.ofNullable(this.annotations); + } + + /** + * Status conditions describing the current resource state. + * Structure is documented below. + * + */ + @Import(name="conditions") + private @Nullable Output> conditions; + + /** + * @return Status conditions describing the current resource state. + * Structure is documented below. + * + */ + public Optional>> conditions() { + return Optional.ofNullable(this.conditions); + } + + /** + * Time the Instance was created in UTC. + * + */ + @Import(name="createTime") + private @Nullable Output createTime; + + /** + * @return Time the Instance was created in UTC. + * + */ + public Optional> createTime() { + return Optional.ofNullable(this.createTime); + } + + /** + * Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + * Details can be found in the conditions field. + * + */ + @Import(name="degraded") + private @Nullable Output degraded; + + /** + * @return Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + * Details can be found in the conditions field. + * + */ + public Optional> degraded() { + return Optional.ofNullable(this.degraded); + } + + /** + * Human-readable name for this resource. + * + */ + @Import(name="displayName") + private @Nullable Output displayName; + + /** + * @return Human-readable name for this resource. + * + */ + public Optional> displayName() { + return Optional.ofNullable(this.displayName); + } + + /** + * Checksum computed by the server. + * May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + * + */ + @Import(name="etag") + private @Nullable Output etag; + + /** + * @return Checksum computed by the server. + * May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + * + */ + public Optional> etag() { + return Optional.ofNullable(this.etag); + } + + /** + * Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + * + */ + @Import(name="labels") + private @Nullable Output> labels; + + /** + * @return Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + * + */ + public Optional>> labels() { + return Optional.ofNullable(this.labels); + } + + /** + * The location where the workstation cluster should reside. + * + */ + @Import(name="location") + private @Nullable Output location; + + /** + * @return The location where the workstation cluster should reside. + * + */ + public Optional> location() { + return Optional.ofNullable(this.location); + } + + /** + * The name of the cluster resource. + * + */ + @Import(name="name") + private @Nullable Output name; + + /** + * @return The name of the cluster resource. + * + */ + public Optional> name() { + return Optional.ofNullable(this.name); + } + + /** + * The relative resource name of the VPC network on which the instance can be accessed. + * It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + * + */ + @Import(name="network") + private @Nullable Output network; + + /** + * @return The relative resource name of the VPC network on which the instance can be accessed. + * It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + * + */ + public Optional> network() { + return Optional.ofNullable(this.network); + } + + /** + * Configuration for private cluster. + * Structure is documented below. + * + */ + @Import(name="privateClusterConfig") + private @Nullable Output privateClusterConfig; + + /** + * @return Configuration for private cluster. + * Structure is documented below. + * + */ + public Optional> privateClusterConfig() { + return Optional.ofNullable(this.privateClusterConfig); + } + + /** + * 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); + } + + /** + * Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + * Must be part of the subnetwork specified for this cluster. + * + */ + @Import(name="subnetwork") + private @Nullable Output subnetwork; + + /** + * @return Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + * Must be part of the subnetwork specified for this cluster. + * + */ + public Optional> subnetwork() { + return Optional.ofNullable(this.subnetwork); + } + + /** + * The system-generated UID of the resource. + * + */ + @Import(name="uid") + private @Nullable Output uid; + + /** + * @return The system-generated UID of the resource. + * + */ + public Optional> uid() { + return Optional.ofNullable(this.uid); + } + + /** + * The ID of the workstation cluster. + * + */ + @Import(name="workstationClusterId") + private @Nullable Output workstationClusterId; + + /** + * @return The ID of the workstation cluster. + * + */ + public Optional> workstationClusterId() { + return Optional.ofNullable(this.workstationClusterId); + } + + private WorkstationClusterState() {} + + private WorkstationClusterState(WorkstationClusterState $) { + this.annotations = $.annotations; + this.conditions = $.conditions; + this.createTime = $.createTime; + this.degraded = $.degraded; + this.displayName = $.displayName; + this.etag = $.etag; + this.labels = $.labels; + this.location = $.location; + this.name = $.name; + this.network = $.network; + this.privateClusterConfig = $.privateClusterConfig; + this.project = $.project; + this.subnetwork = $.subnetwork; + this.uid = $.uid; + this.workstationClusterId = $.workstationClusterId; + } + + public static Builder builder() { + return new Builder(); + } + public static Builder builder(WorkstationClusterState defaults) { + return new Builder(defaults); + } + + public static final class Builder { + private WorkstationClusterState $; + + public Builder() { + $ = new WorkstationClusterState(); + } + + public Builder(WorkstationClusterState defaults) { + $ = new WorkstationClusterState(Objects.requireNonNull(defaults)); + } + + /** + * @param annotations Client-specified annotations. This is distinct from labels. + * + * @return builder + * + */ + public Builder annotations(@Nullable Output> annotations) { + $.annotations = annotations; + return this; + } + + /** + * @param annotations Client-specified annotations. This is distinct from labels. + * + * @return builder + * + */ + public Builder annotations(Map annotations) { + return annotations(Output.of(annotations)); + } + + /** + * @param conditions Status conditions describing the current resource state. + * Structure is documented below. + * + * @return builder + * + */ + public Builder conditions(@Nullable Output> conditions) { + $.conditions = conditions; + return this; + } + + /** + * @param conditions Status conditions describing the current resource state. + * Structure is documented below. + * + * @return builder + * + */ + public Builder conditions(List conditions) { + return conditions(Output.of(conditions)); + } + + /** + * @param conditions Status conditions describing the current resource state. + * Structure is documented below. + * + * @return builder + * + */ + public Builder conditions(WorkstationClusterConditionArgs... conditions) { + return conditions(List.of(conditions)); + } + + /** + * @param createTime Time the Instance was created in UTC. + * + * @return builder + * + */ + public Builder createTime(@Nullable Output createTime) { + $.createTime = createTime; + return this; + } + + /** + * @param createTime Time the Instance was created in UTC. + * + * @return builder + * + */ + public Builder createTime(String createTime) { + return createTime(Output.of(createTime)); + } + + /** + * @param degraded Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + * Details can be found in the conditions field. + * + * @return builder + * + */ + public Builder degraded(@Nullable Output degraded) { + $.degraded = degraded; + return this; + } + + /** + * @param degraded Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + * Details can be found in the conditions field. + * + * @return builder + * + */ + public Builder degraded(Boolean degraded) { + return degraded(Output.of(degraded)); + } + + /** + * @param displayName Human-readable name for this resource. + * + * @return builder + * + */ + public Builder displayName(@Nullable Output displayName) { + $.displayName = displayName; + return this; + } + + /** + * @param displayName Human-readable name for this resource. + * + * @return builder + * + */ + public Builder displayName(String displayName) { + return displayName(Output.of(displayName)); + } + + /** + * @param etag Checksum computed by the server. + * May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + * + * @return builder + * + */ + public Builder etag(@Nullable Output etag) { + $.etag = etag; + return this; + } + + /** + * @param etag Checksum computed by the server. + * May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + * + * @return builder + * + */ + public Builder etag(String etag) { + return etag(Output.of(etag)); + } + + /** + * @param labels Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + * + * @return builder + * + */ + public Builder labels(@Nullable Output> labels) { + $.labels = labels; + return this; + } + + /** + * @param labels Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + * + * @return builder + * + */ + public Builder labels(Map labels) { + return labels(Output.of(labels)); + } + + /** + * @param location The location where the workstation cluster should reside. + * + * @return builder + * + */ + public Builder location(@Nullable Output location) { + $.location = location; + return this; + } + + /** + * @param location The location where the workstation cluster should reside. + * + * @return builder + * + */ + public Builder location(String location) { + return location(Output.of(location)); + } + + /** + * @param name The name of the cluster resource. + * + * @return builder + * + */ + public Builder name(@Nullable Output name) { + $.name = name; + return this; + } + + /** + * @param name The name of the cluster resource. + * + * @return builder + * + */ + public Builder name(String name) { + return name(Output.of(name)); + } + + /** + * @param network The relative resource name of the VPC network on which the instance can be accessed. + * It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + * + * @return builder + * + */ + public Builder network(@Nullable Output network) { + $.network = network; + return this; + } + + /** + * @param network The relative resource name of the VPC network on which the instance can be accessed. + * It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + * + * @return builder + * + */ + public Builder network(String network) { + return network(Output.of(network)); + } + + /** + * @param privateClusterConfig Configuration for private cluster. + * Structure is documented below. + * + * @return builder + * + */ + public Builder privateClusterConfig(@Nullable Output privateClusterConfig) { + $.privateClusterConfig = privateClusterConfig; + return this; + } + + /** + * @param privateClusterConfig Configuration for private cluster. + * Structure is documented below. + * + * @return builder + * + */ + public Builder privateClusterConfig(WorkstationClusterPrivateClusterConfigArgs privateClusterConfig) { + return privateClusterConfig(Output.of(privateClusterConfig)); + } + + /** + * @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 subnetwork Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + * Must be part of the subnetwork specified for this cluster. + * + * @return builder + * + */ + public Builder subnetwork(@Nullable Output subnetwork) { + $.subnetwork = subnetwork; + return this; + } + + /** + * @param subnetwork Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + * Must be part of the subnetwork specified for this cluster. + * + * @return builder + * + */ + public Builder subnetwork(String subnetwork) { + return subnetwork(Output.of(subnetwork)); + } + + /** + * @param uid The system-generated UID of the resource. + * + * @return builder + * + */ + public Builder uid(@Nullable Output uid) { + $.uid = uid; + return this; + } + + /** + * @param uid The system-generated UID of the resource. + * + * @return builder + * + */ + public Builder uid(String uid) { + return uid(Output.of(uid)); + } + + /** + * @param workstationClusterId The ID of the workstation cluster. + * + * @return builder + * + */ + public Builder workstationClusterId(@Nullable Output workstationClusterId) { + $.workstationClusterId = workstationClusterId; + return this; + } + + /** + * @param workstationClusterId The ID of the workstation cluster. + * + * @return builder + * + */ + public Builder workstationClusterId(String workstationClusterId) { + return workstationClusterId(Output.of(workstationClusterId)); + } + + public WorkstationClusterState build() { + return $; + } + } + +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/workstations/outputs/WorkstationClusterCondition.java b/sdk/java/src/main/java/com/pulumi/gcp/workstations/outputs/WorkstationClusterCondition.java new file mode 100644 index 0000000000..b0a919f4d4 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/workstations/outputs/WorkstationClusterCondition.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.workstations.outputs; + +import com.pulumi.core.annotations.CustomType; +import java.lang.Integer; +import java.lang.Object; +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 WorkstationClusterCondition { + /** + * @return The status code, which should be an enum value of google.rpc.Code. + * + */ + private @Nullable Integer code; + /** + * @return A list of messages that carry the error details. + * + */ + private @Nullable List> details; + /** + * @return Human readable message indicating details about the current status. + * + */ + private @Nullable String message; + + private WorkstationClusterCondition() {} + /** + * @return The status code, which should be an enum value of google.rpc.Code. + * + */ + public Optional code() { + return Optional.ofNullable(this.code); + } + /** + * @return A list of messages that carry the error details. + * + */ + public List> details() { + return this.details == null ? List.of() : this.details; + } + /** + * @return Human readable message indicating details about the current status. + * + */ + public Optional message() { + return Optional.ofNullable(this.message); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(WorkstationClusterCondition defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable Integer code; + private @Nullable List> details; + private @Nullable String message; + public Builder() {} + public Builder(WorkstationClusterCondition defaults) { + Objects.requireNonNull(defaults); + this.code = defaults.code; + this.details = defaults.details; + this.message = defaults.message; + } + + @CustomType.Setter + public Builder code(@Nullable Integer code) { + this.code = code; + return this; + } + @CustomType.Setter + public Builder details(@Nullable List> details) { + this.details = details; + return this; + } + @CustomType.Setter + public Builder message(@Nullable String message) { + this.message = message; + return this; + } + public WorkstationClusterCondition build() { + final var o = new WorkstationClusterCondition(); + o.code = code; + o.details = details; + o.message = message; + return o; + } + } +} diff --git a/sdk/java/src/main/java/com/pulumi/gcp/workstations/outputs/WorkstationClusterPrivateClusterConfig.java b/sdk/java/src/main/java/com/pulumi/gcp/workstations/outputs/WorkstationClusterPrivateClusterConfig.java new file mode 100644 index 0000000000..d086cf6c00 --- /dev/null +++ b/sdk/java/src/main/java/com/pulumi/gcp/workstations/outputs/WorkstationClusterPrivateClusterConfig.java @@ -0,0 +1,105 @@ +// *** WARNING: this file was generated by pulumi-java-gen. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +package com.pulumi.gcp.workstations.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 WorkstationClusterPrivateClusterConfig { + /** + * @return Hostname for the workstation cluster. + * This field will be populated only when private endpoint is enabled. + * To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + * + */ + private @Nullable String clusterHostname; + /** + * @return Whether Workstations endpoint is private. + * + */ + private Boolean enablePrivateEndpoint; + /** + * @return Service attachment URI for the workstation cluster. + * The service attachemnt is created when private endpoint is enabled. + * To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + * + */ + private @Nullable String serviceAttachmentUri; + + private WorkstationClusterPrivateClusterConfig() {} + /** + * @return Hostname for the workstation cluster. + * This field will be populated only when private endpoint is enabled. + * To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + * + */ + public Optional clusterHostname() { + return Optional.ofNullable(this.clusterHostname); + } + /** + * @return Whether Workstations endpoint is private. + * + */ + public Boolean enablePrivateEndpoint() { + return this.enablePrivateEndpoint; + } + /** + * @return Service attachment URI for the workstation cluster. + * The service attachemnt is created when private endpoint is enabled. + * To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + * + */ + public Optional serviceAttachmentUri() { + return Optional.ofNullable(this.serviceAttachmentUri); + } + + public static Builder builder() { + return new Builder(); + } + + public static Builder builder(WorkstationClusterPrivateClusterConfig defaults) { + return new Builder(defaults); + } + @CustomType.Builder + public static final class Builder { + private @Nullable String clusterHostname; + private Boolean enablePrivateEndpoint; + private @Nullable String serviceAttachmentUri; + public Builder() {} + public Builder(WorkstationClusterPrivateClusterConfig defaults) { + Objects.requireNonNull(defaults); + this.clusterHostname = defaults.clusterHostname; + this.enablePrivateEndpoint = defaults.enablePrivateEndpoint; + this.serviceAttachmentUri = defaults.serviceAttachmentUri; + } + + @CustomType.Setter + public Builder clusterHostname(@Nullable String clusterHostname) { + this.clusterHostname = clusterHostname; + return this; + } + @CustomType.Setter + public Builder enablePrivateEndpoint(Boolean enablePrivateEndpoint) { + this.enablePrivateEndpoint = Objects.requireNonNull(enablePrivateEndpoint); + return this; + } + @CustomType.Setter + public Builder serviceAttachmentUri(@Nullable String serviceAttachmentUri) { + this.serviceAttachmentUri = serviceAttachmentUri; + return this; + } + public WorkstationClusterPrivateClusterConfig build() { + final var o = new WorkstationClusterPrivateClusterConfig(); + o.clusterHostname = clusterHostname; + o.enablePrivateEndpoint = enablePrivateEndpoint; + o.serviceAttachmentUri = serviceAttachmentUri; + return o; + } + } +} diff --git a/sdk/nodejs/accesscontextmanager/accessLevelCondition.ts b/sdk/nodejs/accesscontextmanager/accessLevelCondition.ts index 883906f173..fae8975d09 100644 --- a/sdk/nodejs/accesscontextmanager/accessLevelCondition.ts +++ b/sdk/nodejs/accesscontextmanager/accessLevelCondition.ts @@ -29,59 +29,6 @@ import * as utilities from "../utilities"; * `billingProject` you defined. * * ## Example Usage - * ### Access Context Manager Access Level Condition Basic - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const access_policy = new gcp.accesscontextmanager.AccessPolicy("access-policy", { - * parent: "organizations/123456789", - * title: "my policy", - * }); - * const access_level_service_account = new gcp.accesscontextmanager.AccessLevel("access-level-service-account", { - * parent: pulumi.interpolate`accessPolicies/${access_policy.name}`, - * title: "tf_test_chromeos_no_lock", - * basic: { - * conditions: [{ - * devicePolicy: { - * requireScreenLock: true, - * osConstraints: [{ - * osType: "DESKTOP_CHROME_OS", - * }], - * }, - * regions: [ - * "CH", - * "IT", - * "US", - * ], - * }], - * }, - * }); - * const created_later = new gcp.serviceaccount.Account("created-later", {accountId: "tf-test"}); - * const access_level_conditions = new gcp.accesscontextmanager.AccessLevelCondition("access-level-conditions", { - * accessLevel: access_level_service_account.name, - * ipSubnetworks: ["192.0.4.0/24"], - * members: [ - * "user:test@google.com", - * "user:test2@google.com", - * pulumi.interpolate`serviceAccount:${created_later.email}`, - * ], - * negate: false, - * devicePolicy: { - * requireScreenLock: false, - * requireAdminApproval: false, - * requireCorpOwned: true, - * osConstraints: [{ - * osType: "DESKTOP_CHROME_OS", - * }], - * }, - * regions: [ - * "IT", - * "US", - * ], - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/apigateway/api.ts b/sdk/nodejs/apigateway/api.ts index ba3b948d4c..fb7e2f7642 100644 --- a/sdk/nodejs/apigateway/api.ts +++ b/sdk/nodejs/apigateway/api.ts @@ -5,14 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * A consumable API that can be used by multiple Gateways. - * - * To get more information about Api, see: - * - * * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart) - * * ## Example Usage * ### Apigateway Api Basic * diff --git a/sdk/nodejs/apigateway/apiConfig.ts b/sdk/nodejs/apigateway/apiConfig.ts index 31f62c9c7c..512f1757a4 100644 --- a/sdk/nodejs/apigateway/apiConfig.ts +++ b/sdk/nodejs/apigateway/apiConfig.ts @@ -7,14 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * An API Configuration is an association of an API Controller Config and a Gateway Config - * - * To get more information about ApiConfig, see: - * - * * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis.configs) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/api-gateway/docs/creating-api-config) - * * ## Example Usage * ### Apigateway Api Config Basic * diff --git a/sdk/nodejs/apigateway/apiConfigIamBinding.ts b/sdk/nodejs/apigateway/apiConfigIamBinding.ts index 16b0db8664..97176a5ab6 100644 --- a/sdk/nodejs/apigateway/apiConfigIamBinding.ts +++ b/sdk/nodejs/apigateway/apiConfigIamBinding.ts @@ -7,69 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - * - * * `gcp.apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - * * `gcp.apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - * * `gcp.apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - * - * > **Note:** `gcp.apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiConfigIamBinding` and `gcp.apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_api\_config\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.apigateway.ApiConfigIamPolicy("policy", { - * api: google_api_gateway_api_config.api_cfg.api, - * apiConfig: google_api_gateway_api_config.api_cfg.api_config_id, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_api\_config\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.apigateway.ApiConfigIamBinding("binding", { - * api: google_api_gateway_api_config.api_cfg.api, - * apiConfig: google_api_gateway_api_config.api_cfg.api_config_id, - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_api\_config\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.apigateway.ApiConfigIamMember("member", { - * api: google_api_gateway_api_config.api_cfg.api, - * apiConfig: google_api_gateway_api_config.api_cfg.api_config_id, - * role: "roles/apigateway.viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/apigateway/apiConfigIamMember.ts b/sdk/nodejs/apigateway/apiConfigIamMember.ts index e7b5a91c08..d07c92a425 100644 --- a/sdk/nodejs/apigateway/apiConfigIamMember.ts +++ b/sdk/nodejs/apigateway/apiConfigIamMember.ts @@ -7,69 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - * - * * `gcp.apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - * * `gcp.apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - * * `gcp.apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - * - * > **Note:** `gcp.apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiConfigIamBinding` and `gcp.apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_api\_config\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.apigateway.ApiConfigIamPolicy("policy", { - * api: google_api_gateway_api_config.api_cfg.api, - * apiConfig: google_api_gateway_api_config.api_cfg.api_config_id, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_api\_config\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.apigateway.ApiConfigIamBinding("binding", { - * api: google_api_gateway_api_config.api_cfg.api, - * apiConfig: google_api_gateway_api_config.api_cfg.api_config_id, - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_api\_config\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.apigateway.ApiConfigIamMember("member", { - * api: google_api_gateway_api_config.api_cfg.api, - * apiConfig: google_api_gateway_api_config.api_cfg.api_config_id, - * role: "roles/apigateway.viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/apigateway/apiConfigIamPolicy.ts b/sdk/nodejs/apigateway/apiConfigIamPolicy.ts index 06662c265f..42e06bbedf 100644 --- a/sdk/nodejs/apigateway/apiConfigIamPolicy.ts +++ b/sdk/nodejs/apigateway/apiConfigIamPolicy.ts @@ -5,69 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - * - * * `gcp.apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - * * `gcp.apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - * * `gcp.apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - * - * > **Note:** `gcp.apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiConfigIamBinding` and `gcp.apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_api\_config\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.apigateway.ApiConfigIamPolicy("policy", { - * api: google_api_gateway_api_config.api_cfg.api, - * apiConfig: google_api_gateway_api_config.api_cfg.api_config_id, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_api\_config\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.apigateway.ApiConfigIamBinding("binding", { - * api: google_api_gateway_api_config.api_cfg.api, - * apiConfig: google_api_gateway_api_config.api_cfg.api_config_id, - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_api\_config\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.apigateway.ApiConfigIamMember("member", { - * api: google_api_gateway_api_config.api_cfg.api, - * apiConfig: google_api_gateway_api_config.api_cfg.api_config_id, - * role: "roles/apigateway.viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/apigateway/apiIamBinding.ts b/sdk/nodejs/apigateway/apiIamBinding.ts index bad3de37cc..fd13fc716c 100644 --- a/sdk/nodejs/apigateway/apiIamBinding.ts +++ b/sdk/nodejs/apigateway/apiIamBinding.ts @@ -7,69 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - * - * * `gcp.apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - * * `gcp.apigateway.ApiIamBinding`: 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 api are preserved. - * * `gcp.apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - * - * > **Note:** `gcp.apigateway.ApiIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiIamBinding` and `gcp.apigateway.ApiIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.ApiIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_api\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.apigateway.ApiIamPolicy("policy", { - * project: google_api_gateway_api.api.project, - * api: google_api_gateway_api.api.api_id, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_api\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.apigateway.ApiIamBinding("binding", { - * project: google_api_gateway_api.api.project, - * api: google_api_gateway_api.api.api_id, - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_api\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.apigateway.ApiIamMember("member", { - * project: google_api_gateway_api.api.project, - * api: google_api_gateway_api.api.api_id, - * role: "roles/apigateway.viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/apigateway/apiIamMember.ts b/sdk/nodejs/apigateway/apiIamMember.ts index 0ca2688cc1..d7fa38b831 100644 --- a/sdk/nodejs/apigateway/apiIamMember.ts +++ b/sdk/nodejs/apigateway/apiIamMember.ts @@ -7,69 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - * - * * `gcp.apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - * * `gcp.apigateway.ApiIamBinding`: 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 api are preserved. - * * `gcp.apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - * - * > **Note:** `gcp.apigateway.ApiIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiIamBinding` and `gcp.apigateway.ApiIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.ApiIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_api\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.apigateway.ApiIamPolicy("policy", { - * project: google_api_gateway_api.api.project, - * api: google_api_gateway_api.api.api_id, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_api\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.apigateway.ApiIamBinding("binding", { - * project: google_api_gateway_api.api.project, - * api: google_api_gateway_api.api.api_id, - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_api\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.apigateway.ApiIamMember("member", { - * project: google_api_gateway_api.api.project, - * api: google_api_gateway_api.api.api_id, - * role: "roles/apigateway.viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/apigateway/apiIamPolicy.ts b/sdk/nodejs/apigateway/apiIamPolicy.ts index 05a1839380..bc404fb34c 100644 --- a/sdk/nodejs/apigateway/apiIamPolicy.ts +++ b/sdk/nodejs/apigateway/apiIamPolicy.ts @@ -5,69 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - * - * * `gcp.apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - * * `gcp.apigateway.ApiIamBinding`: 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 api are preserved. - * * `gcp.apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - * - * > **Note:** `gcp.apigateway.ApiIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.ApiIamBinding` and `gcp.apigateway.ApiIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.ApiIamBinding` resources **can be** used in conjunction with `gcp.apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_api\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.apigateway.ApiIamPolicy("policy", { - * project: google_api_gateway_api.api.project, - * api: google_api_gateway_api.api.api_id, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_api\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.apigateway.ApiIamBinding("binding", { - * project: google_api_gateway_api.api.project, - * api: google_api_gateway_api.api.api_id, - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_api\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.apigateway.ApiIamMember("member", { - * project: google_api_gateway_api.api.project, - * api: google_api_gateway_api.api.api_id, - * role: "roles/apigateway.viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/apigateway/gateway.ts b/sdk/nodejs/apigateway/gateway.ts index 19afeff3e0..deded0beaa 100644 --- a/sdk/nodejs/apigateway/gateway.ts +++ b/sdk/nodejs/apigateway/gateway.ts @@ -5,14 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * A consumable API that can be used by multiple Gateways. - * - * To get more information about Gateway, see: - * - * * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart) - * * ## Example Usage * ### Apigateway Gateway Basic * diff --git a/sdk/nodejs/apigateway/gatewayIamBinding.ts b/sdk/nodejs/apigateway/gatewayIamBinding.ts index a618a1feef..24af3420b5 100644 --- a/sdk/nodejs/apigateway/gatewayIamBinding.ts +++ b/sdk/nodejs/apigateway/gatewayIamBinding.ts @@ -7,72 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - * - * * `gcp.apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - * * `gcp.apigateway.GatewayIamBinding`: 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 gateway are preserved. - * * `gcp.apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - * - * > **Note:** `gcp.apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.GatewayIamBinding` and `gcp.apigateway.GatewayIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.GatewayIamBinding` resources **can be** used in conjunction with `gcp.apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_gateway\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.apigateway.GatewayIamPolicy("policy", { - * project: google_api_gateway_gateway.api_gw.project, - * region: google_api_gateway_gateway.api_gw.region, - * gateway: google_api_gateway_gateway.api_gw.gateway_id, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_gateway\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.apigateway.GatewayIamBinding("binding", { - * project: google_api_gateway_gateway.api_gw.project, - * region: google_api_gateway_gateway.api_gw.region, - * gateway: google_api_gateway_gateway.api_gw.gateway_id, - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_gateway\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.apigateway.GatewayIamMember("member", { - * project: google_api_gateway_gateway.api_gw.project, - * region: google_api_gateway_gateway.api_gw.region, - * gateway: google_api_gateway_gateway.api_gw.gateway_id, - * role: "roles/apigateway.viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/apigateway/gatewayIamMember.ts b/sdk/nodejs/apigateway/gatewayIamMember.ts index 878d8f302b..a64157a0e9 100644 --- a/sdk/nodejs/apigateway/gatewayIamMember.ts +++ b/sdk/nodejs/apigateway/gatewayIamMember.ts @@ -7,72 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - * - * * `gcp.apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - * * `gcp.apigateway.GatewayIamBinding`: 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 gateway are preserved. - * * `gcp.apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - * - * > **Note:** `gcp.apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.GatewayIamBinding` and `gcp.apigateway.GatewayIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.GatewayIamBinding` resources **can be** used in conjunction with `gcp.apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_gateway\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.apigateway.GatewayIamPolicy("policy", { - * project: google_api_gateway_gateway.api_gw.project, - * region: google_api_gateway_gateway.api_gw.region, - * gateway: google_api_gateway_gateway.api_gw.gateway_id, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_gateway\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.apigateway.GatewayIamBinding("binding", { - * project: google_api_gateway_gateway.api_gw.project, - * region: google_api_gateway_gateway.api_gw.region, - * gateway: google_api_gateway_gateway.api_gw.gateway_id, - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_gateway\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.apigateway.GatewayIamMember("member", { - * project: google_api_gateway_gateway.api_gw.project, - * region: google_api_gateway_gateway.api_gw.region, - * gateway: google_api_gateway_gateway.api_gw.gateway_id, - * role: "roles/apigateway.viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/apigateway/gatewayIamPolicy.ts b/sdk/nodejs/apigateway/gatewayIamPolicy.ts index 67485153e4..8a73dc2138 100644 --- a/sdk/nodejs/apigateway/gatewayIamPolicy.ts +++ b/sdk/nodejs/apigateway/gatewayIamPolicy.ts @@ -5,72 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - * - * * `gcp.apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - * * `gcp.apigateway.GatewayIamBinding`: 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 gateway are preserved. - * * `gcp.apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - * - * > **Note:** `gcp.apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `gcp.apigateway.GatewayIamBinding` and `gcp.apigateway.GatewayIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.apigateway.GatewayIamBinding` resources **can be** used in conjunction with `gcp.apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_api\_gateway\_gateway\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.apigateway.GatewayIamPolicy("policy", { - * project: google_api_gateway_gateway.api_gw.project, - * region: google_api_gateway_gateway.api_gw.region, - * gateway: google_api_gateway_gateway.api_gw.gateway_id, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_gateway\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.apigateway.GatewayIamBinding("binding", { - * project: google_api_gateway_gateway.api_gw.project, - * region: google_api_gateway_gateway.api_gw.region, - * gateway: google_api_gateway_gateway.api_gw.gateway_id, - * role: "roles/apigateway.viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_api\_gateway\_gateway\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.apigateway.GatewayIamMember("member", { - * project: google_api_gateway_gateway.api_gw.project, - * region: google_api_gateway_gateway.api_gw.region, - * gateway: google_api_gateway_gateway.api_gw.gateway_id, - * role: "roles/apigateway.viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/apigee/envGroup.ts b/sdk/nodejs/apigee/envGroup.ts index e16858379e..4339266f38 100644 --- a/sdk/nodejs/apigee/envGroup.ts +++ b/sdk/nodejs/apigee/envGroup.ts @@ -14,37 +14,6 @@ import * as utilities from "../utilities"; * * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) * * ## Example Usage - * ### Apigee Environment Group Basic - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const current = gcp.organizations.getClientConfig({}); - * const apigeeNetwork = new gcp.compute.Network("apigeeNetwork", {}); - * const apigeeRange = new gcp.compute.GlobalAddress("apigeeRange", { - * purpose: "VPC_PEERING", - * addressType: "INTERNAL", - * prefixLength: 16, - * network: apigeeNetwork.id, - * }); - * const apigeeVpcConnection = new gcp.servicenetworking.Connection("apigeeVpcConnection", { - * network: apigeeNetwork.id, - * service: "servicenetworking.googleapis.com", - * reservedPeeringRanges: [apigeeRange.name], - * }); - * const apigeeOrg = new gcp.apigee.Organization("apigeeOrg", { - * analyticsRegion: "us-central1", - * projectId: current.then(current => current.project), - * authorizedNetwork: apigeeNetwork.id, - * }, { - * dependsOn: [apigeeVpcConnection], - * }); - * const envGrp = new gcp.apigee.EnvGroup("envGrp", { - * hostnames: ["abc.foo.com"], - * orgId: apigeeOrg.id, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/apigee/envGroupAttachment.ts b/sdk/nodejs/apigee/envGroupAttachment.ts index 2f9901973b..0a56c20872 100644 --- a/sdk/nodejs/apigee/envGroupAttachment.ts +++ b/sdk/nodejs/apigee/envGroupAttachment.ts @@ -14,70 +14,6 @@ import * as utilities from "../utilities"; * * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) * * ## Example Usage - * ### Apigee Environment Group Attachment Basic - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.organizations.Project("project", { - * projectId: "tf-test", - * orgId: "", - * billingAccount: "", - * }); - * const apigee = new gcp.projects.Service("apigee", { - * project: project.projectId, - * service: "apigee.googleapis.com", - * }); - * const compute = new gcp.projects.Service("compute", { - * project: project.projectId, - * service: "compute.googleapis.com", - * }); - * const servicenetworking = new gcp.projects.Service("servicenetworking", { - * project: project.projectId, - * service: "servicenetworking.googleapis.com", - * }); - * const apigeeNetwork = new gcp.compute.Network("apigeeNetwork", {project: project.projectId}, { - * dependsOn: [compute], - * }); - * const apigeeRange = new gcp.compute.GlobalAddress("apigeeRange", { - * purpose: "VPC_PEERING", - * addressType: "INTERNAL", - * prefixLength: 16, - * network: apigeeNetwork.id, - * project: project.projectId, - * }); - * const apigeeVpcConnection = new gcp.servicenetworking.Connection("apigeeVpcConnection", { - * network: apigeeNetwork.id, - * service: "servicenetworking.googleapis.com", - * reservedPeeringRanges: [apigeeRange.name], - * }, { - * dependsOn: [servicenetworking], - * }); - * const apigeeOrg = new gcp.apigee.Organization("apigeeOrg", { - * analyticsRegion: "us-central1", - * projectId: project.projectId, - * authorizedNetwork: apigeeNetwork.id, - * }, { - * dependsOn: [ - * apigeeVpcConnection, - * apigee, - * ], - * }); - * const apigeeEnvgroup = new gcp.apigee.EnvGroup("apigeeEnvgroup", { - * orgId: apigeeOrg.id, - * hostnames: ["abc.foo.com"], - * }); - * const apigeeEnv = new gcp.apigee.Environment("apigeeEnv", { - * orgId: apigeeOrg.id, - * description: "Apigee Environment", - * displayName: "tf-test", - * }); - * const envGroupAttachment = new gcp.apigee.EnvGroupAttachment("envGroupAttachment", { - * envgroupId: apigeeEnvgroup.id, - * environment: apigeeEnv.name, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/apigee/environment.ts b/sdk/nodejs/apigee/environment.ts index 01bc7cf829..f9b53e31fe 100644 --- a/sdk/nodejs/apigee/environment.ts +++ b/sdk/nodejs/apigee/environment.ts @@ -16,38 +16,6 @@ import * as utilities from "../utilities"; * * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) * * ## Example Usage - * ### Apigee Environment Basic - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const current = gcp.organizations.getClientConfig({}); - * const apigeeNetwork = new gcp.compute.Network("apigeeNetwork", {}); - * const apigeeRange = new gcp.compute.GlobalAddress("apigeeRange", { - * purpose: "VPC_PEERING", - * addressType: "INTERNAL", - * prefixLength: 16, - * network: apigeeNetwork.id, - * }); - * const apigeeVpcConnection = new gcp.servicenetworking.Connection("apigeeVpcConnection", { - * network: apigeeNetwork.id, - * service: "servicenetworking.googleapis.com", - * reservedPeeringRanges: [apigeeRange.name], - * }); - * const apigeeOrg = new gcp.apigee.Organization("apigeeOrg", { - * analyticsRegion: "us-central1", - * projectId: current.then(current => current.project), - * authorizedNetwork: apigeeNetwork.id, - * }, { - * dependsOn: [apigeeVpcConnection], - * }); - * const env = new gcp.apigee.Environment("env", { - * description: "Apigee Environment", - * displayName: "environment-1", - * orgId: apigeeOrg.id, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/apigee/instance.ts b/sdk/nodejs/apigee/instance.ts index 5ed1f7b58f..5e5852b514 100644 --- a/sdk/nodejs/apigee/instance.ts +++ b/sdk/nodejs/apigee/instance.ts @@ -14,154 +14,6 @@ import * as utilities from "../utilities"; * * [Creating a runtime instance](https://cloud.google.com/apigee/docs/api-platform/get-started/create-instance) * * ## Example Usage - * ### Apigee Instance Basic - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const current = gcp.organizations.getClientConfig({}); - * const apigeeNetwork = new gcp.compute.Network("apigeeNetwork", {}); - * const apigeeRange = new gcp.compute.GlobalAddress("apigeeRange", { - * purpose: "VPC_PEERING", - * addressType: "INTERNAL", - * prefixLength: 16, - * network: apigeeNetwork.id, - * }); - * const apigeeVpcConnection = new gcp.servicenetworking.Connection("apigeeVpcConnection", { - * network: apigeeNetwork.id, - * service: "servicenetworking.googleapis.com", - * reservedPeeringRanges: [apigeeRange.name], - * }); - * const apigeeOrg = new gcp.apigee.Organization("apigeeOrg", { - * analyticsRegion: "us-central1", - * projectId: current.then(current => current.project), - * authorizedNetwork: apigeeNetwork.id, - * }, { - * dependsOn: [apigeeVpcConnection], - * }); - * const apigeeInstance = new gcp.apigee.Instance("apigeeInstance", { - * location: "us-central1", - * orgId: apigeeOrg.id, - * }); - * ``` - * ### Apigee Instance Cidr Range - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const current = gcp.organizations.getClientConfig({}); - * const apigeeNetwork = new gcp.compute.Network("apigeeNetwork", {}); - * const apigeeRange = new gcp.compute.GlobalAddress("apigeeRange", { - * purpose: "VPC_PEERING", - * addressType: "INTERNAL", - * prefixLength: 22, - * network: apigeeNetwork.id, - * }); - * const apigeeVpcConnection = new gcp.servicenetworking.Connection("apigeeVpcConnection", { - * network: apigeeNetwork.id, - * service: "servicenetworking.googleapis.com", - * reservedPeeringRanges: [apigeeRange.name], - * }); - * const apigeeOrg = new gcp.apigee.Organization("apigeeOrg", { - * analyticsRegion: "us-central1", - * projectId: current.then(current => current.project), - * authorizedNetwork: apigeeNetwork.id, - * }, { - * dependsOn: [apigeeVpcConnection], - * }); - * const apigeeInstance = new gcp.apigee.Instance("apigeeInstance", { - * location: "us-central1", - * orgId: apigeeOrg.id, - * peeringCidrRange: "SLASH_22", - * }); - * ``` - * ### Apigee Instance Ip Range - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const current = gcp.organizations.getClientConfig({}); - * const apigeeNetwork = new gcp.compute.Network("apigeeNetwork", {}); - * const apigeeRange = new gcp.compute.GlobalAddress("apigeeRange", { - * purpose: "VPC_PEERING", - * addressType: "INTERNAL", - * prefixLength: 22, - * network: apigeeNetwork.id, - * }); - * const apigeeVpcConnection = new gcp.servicenetworking.Connection("apigeeVpcConnection", { - * network: apigeeNetwork.id, - * service: "servicenetworking.googleapis.com", - * reservedPeeringRanges: [apigeeRange.name], - * }); - * const apigeeOrg = new gcp.apigee.Organization("apigeeOrg", { - * analyticsRegion: "us-central1", - * projectId: current.then(current => current.project), - * authorizedNetwork: apigeeNetwork.id, - * }, { - * dependsOn: [apigeeVpcConnection], - * }); - * const apigeeInstance = new gcp.apigee.Instance("apigeeInstance", { - * location: "us-central1", - * orgId: apigeeOrg.id, - * ipRange: "10.87.8.0/22", - * }); - * ``` - * ### Apigee Instance Full - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const current = gcp.organizations.getClientConfig({}); - * const apigeeNetwork = new gcp.compute.Network("apigeeNetwork", {}); - * const apigeeRange = new gcp.compute.GlobalAddress("apigeeRange", { - * purpose: "VPC_PEERING", - * addressType: "INTERNAL", - * prefixLength: 16, - * network: apigeeNetwork.id, - * }); - * const apigeeVpcConnection = new gcp.servicenetworking.Connection("apigeeVpcConnection", { - * network: apigeeNetwork.id, - * service: "servicenetworking.googleapis.com", - * reservedPeeringRanges: [apigeeRange.name], - * }); - * const apigeeKeyring = new gcp.kms.KeyRing("apigeeKeyring", {location: "us-central1"}); - * const apigeeKey = new gcp.kms.CryptoKey("apigeeKey", {keyRing: apigeeKeyring.id}); - * const apigeeSa = new gcp.projects.ServiceIdentity("apigeeSa", { - * project: google_project.project.project_id, - * service: google_project_service.apigee.service, - * }, { - * provider: google_beta, - * }); - * const apigeeSaKeyuser = new gcp.kms.CryptoKeyIAMBinding("apigeeSaKeyuser", { - * cryptoKeyId: apigeeKey.id, - * role: "roles/cloudkms.cryptoKeyEncrypterDecrypter", - * members: [pulumi.interpolate`serviceAccount:${apigeeSa.email}`], - * }); - * const apigeeOrg = new gcp.apigee.Organization("apigeeOrg", { - * analyticsRegion: "us-central1", - * displayName: "apigee-org", - * description: "Auto-provisioned Apigee Org.", - * projectId: current.then(current => current.project), - * authorizedNetwork: apigeeNetwork.id, - * runtimeDatabaseEncryptionKeyName: apigeeKey.id, - * }, { - * dependsOn: [ - * apigeeVpcConnection, - * apigeeSaKeyuser, - * ], - * }); - * const apigeeInstance = new gcp.apigee.Instance("apigeeInstance", { - * location: "us-central1", - * description: "Auto-managed Apigee Runtime Instance", - * displayName: "tf-test", - * orgId: apigeeOrg.id, - * diskEncryptionKeyName: apigeeKey.id, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/apigee/instanceAttachment.ts b/sdk/nodejs/apigee/instanceAttachment.ts index 2d1a0746cd..c0c035009e 100644 --- a/sdk/nodejs/apigee/instanceAttachment.ts +++ b/sdk/nodejs/apigee/instanceAttachment.ts @@ -14,70 +14,6 @@ import * as utilities from "../utilities"; * * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) * * ## Example Usage - * ### Apigee Instance Attachment Basic - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.organizations.Project("project", { - * projectId: "tf-test", - * orgId: "", - * billingAccount: "", - * }); - * const apigee = new gcp.projects.Service("apigee", { - * project: project.projectId, - * service: "apigee.googleapis.com", - * }); - * const compute = new gcp.projects.Service("compute", { - * project: project.projectId, - * service: "compute.googleapis.com", - * }); - * const servicenetworking = new gcp.projects.Service("servicenetworking", { - * project: project.projectId, - * service: "servicenetworking.googleapis.com", - * }); - * const apigeeNetwork = new gcp.compute.Network("apigeeNetwork", {project: project.projectId}, { - * dependsOn: [compute], - * }); - * const apigeeRange = new gcp.compute.GlobalAddress("apigeeRange", { - * purpose: "VPC_PEERING", - * addressType: "INTERNAL", - * prefixLength: 16, - * network: apigeeNetwork.id, - * project: project.projectId, - * }); - * const apigeeVpcConnection = new gcp.servicenetworking.Connection("apigeeVpcConnection", { - * network: apigeeNetwork.id, - * service: "servicenetworking.googleapis.com", - * reservedPeeringRanges: [apigeeRange.name], - * }, { - * dependsOn: [servicenetworking], - * }); - * const apigeeOrg = new gcp.apigee.Organization("apigeeOrg", { - * analyticsRegion: "us-central1", - * projectId: project.projectId, - * authorizedNetwork: apigeeNetwork.id, - * }, { - * dependsOn: [ - * apigeeVpcConnection, - * apigee, - * ], - * }); - * const apigeeIns = new gcp.apigee.Instance("apigeeIns", { - * location: "us-central1", - * orgId: apigeeOrg.id, - * }); - * const apigeeEnv = new gcp.apigee.Environment("apigeeEnv", { - * orgId: apigeeOrg.id, - * description: "Apigee Environment", - * displayName: "environment-1", - * }); - * const instanceAttachment = new gcp.apigee.InstanceAttachment("instanceAttachment", { - * instanceId: google_apigee_instance.apigee_instance.id, - * environment: apigeeEnv.name, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/apigee/organization.ts b/sdk/nodejs/apigee/organization.ts index d9f4683874..eae0695e3a 100644 --- a/sdk/nodejs/apigee/organization.ts +++ b/sdk/nodejs/apigee/organization.ts @@ -78,7 +78,7 @@ import * as utilities from "../utilities"; * const org = new gcp.apigee.Organization("org", { * analyticsRegion: "us-central1", * displayName: "apigee-org", - * description: "Auto-provisioned Apigee Org.", + * description: "Terraform-provisioned Apigee Org.", * projectId: current.then(current => current.project), * authorizedNetwork: apigeeNetwork.id, * runtimeDatabaseEncryptionKeyName: apigeeKey.id, diff --git a/sdk/nodejs/appengine/flexibleAppVersion.ts b/sdk/nodejs/appengine/flexibleAppVersion.ts index 100125d3f8..b949d2323d 100644 --- a/sdk/nodejs/appengine/flexibleAppVersion.ts +++ b/sdk/nodejs/appengine/flexibleAppVersion.ts @@ -196,7 +196,8 @@ export class FlexibleAppVersion extends pulumi.CustomResource { */ public readonly entrypoint!: pulumi.Output; /** - * Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + * Environment variables available to the application. As these are not returned in the API request, Terraform will not + * detect any changes made outside of the Terraform config. */ public readonly envVariables!: pulumi.Output<{[key: string]: string} | undefined>; /** @@ -446,7 +447,8 @@ export interface FlexibleAppVersionState { */ entrypoint?: pulumi.Input; /** - * Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + * Environment variables available to the application. As these are not returned in the API request, Terraform will not + * detect any changes made outside of the Terraform config. */ envVariables?: pulumi.Input<{[key: string]: pulumi.Input}>; /** @@ -604,7 +606,8 @@ export interface FlexibleAppVersionArgs { */ entrypoint?: pulumi.Input; /** - * Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + * Environment variables available to the application. As these are not returned in the API request, Terraform will not + * detect any changes made outside of the Terraform config. */ envVariables?: pulumi.Input<{[key: string]: pulumi.Input}>; /** diff --git a/sdk/nodejs/bigquery/connection.ts b/sdk/nodejs/bigquery/connection.ts index d19b26e68f..a79f27a899 100644 --- a/sdk/nodejs/bigquery/connection.ts +++ b/sdk/nodejs/bigquery/connection.ts @@ -128,6 +128,7 @@ import * as utilities from "../utilities"; * const connection = new gcp.bigquery.Connection("connection", { * azure: { * customerTenantId: "customer-tenant-id", + * federatedApplicationClientId: "b43eeeee-eeee-eeee-eeee-a480155501ce", * }, * connectionId: "my-connection", * description: "a riveting description", @@ -217,7 +218,7 @@ export class Connection extends pulumi.CustomResource { */ public readonly cloudSpanner!: pulumi.Output; /** - * A nested object resource + * Connection properties specific to the Cloud SQL. * Structure is documented below. */ public readonly cloudSql!: pulumi.Output; @@ -328,7 +329,7 @@ export interface ConnectionState { */ cloudSpanner?: pulumi.Input; /** - * A nested object resource + * Connection properties specific to the Cloud SQL. * Structure is documented below. */ cloudSql?: pulumi.Input; @@ -395,7 +396,7 @@ export interface ConnectionArgs { */ cloudSpanner?: pulumi.Input; /** - * A nested object resource + * Connection properties specific to the Cloud SQL. * Structure is documented below. */ cloudSql?: pulumi.Input; diff --git a/sdk/nodejs/bigquery/reservationAssignment.ts b/sdk/nodejs/bigquery/reservationAssignment.ts index 144f2568b1..84a54b7cfd 100644 --- a/sdk/nodejs/bigquery/reservationAssignment.ts +++ b/sdk/nodejs/bigquery/reservationAssignment.ts @@ -8,23 +8,6 @@ import * as utilities from "../utilities"; * The BigqueryReservation Assignment resource * * ## Example Usage - * ### Basic - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const basic = new gcp.bigquery.Reservation("basic", { - * project: "my-project-name", - * location: "us-central1", - * slotCapacity: 0, - * ignoreIdleSlots: false, - * }); - * const primary = new gcp.bigquery.ReservationAssignment("primary", { - * assignee: "projects/my-project-name", - * jobType: "PIPELINE", - * reservation: basic.id, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/bigquery/routine.ts b/sdk/nodejs/bigquery/routine.ts index 89c3aa02b9..2d3a3551af 100644 --- a/sdk/nodejs/bigquery/routine.ts +++ b/sdk/nodejs/bigquery/routine.ts @@ -31,62 +31,6 @@ import * as utilities from "../utilities"; * definitionBody: "CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);", * }); * ``` - * ### Big Query Routine Json - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const test = new gcp.bigquery.Dataset("test", {datasetId: "dataset_id"}); - * const sproc = new gcp.bigquery.Routine("sproc", { - * datasetId: test.datasetId, - * routineId: "tf_test_routine_id", - * routineType: "SCALAR_FUNCTION", - * language: "JAVASCRIPT", - * definitionBody: "CREATE FUNCTION multiplyInputs return x*y;", - * arguments: [ - * { - * name: "x", - * dataType: "{\"typeKind\" : \"FLOAT64\"}", - * }, - * { - * name: "y", - * dataType: "{\"typeKind\" : \"FLOAT64\"}", - * }, - * ], - * returnType: "{\"typeKind\" : \"FLOAT64\"}", - * }); - * ``` - * ### Big Query Routine Tvf - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const test = new gcp.bigquery.Dataset("test", {datasetId: "dataset_id"}); - * const sproc = new gcp.bigquery.Routine("sproc", { - * datasetId: test.datasetId, - * routineId: "tf_test_routine_id", - * routineType: "TABLE_VALUED_FUNCTION", - * language: "SQL", - * definitionBody: "SELECT 1 + value AS value\n", - * arguments: [{ - * name: "value", - * argumentKind: "FIXED_TYPE", - * dataType: JSON.stringify({ - * typeKind: "INT64", - * }), - * }], - * returnTableType: JSON.stringify({ - * columns: [{ - * name: "value", - * type: { - * typeKind: "INT64", - * }, - * }], - * }), - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/bigquery/table.ts b/sdk/nodejs/bigquery/table.ts index b8310b1f50..0e75ba5286 100644 --- a/sdk/nodejs/bigquery/table.ts +++ b/sdk/nodejs/bigquery/table.ts @@ -7,14 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Creates a table resource in a dataset for Google BigQuery. For more information see - * [the official documentation](https://cloud.google.com/bigquery/docs/) and - * [API](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables). - * - * > **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false` - * (and run `pulumi update` to write the field to state) in order to destroy an instance. - * It is recommended to not set this field (or set it to true) until you're ready to destroy. - * * ## Example Usage * * ```typescript @@ -130,8 +122,8 @@ export class Table extends pulumi.CustomResource { */ public readonly datasetId!: pulumi.Output; /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `=destroy` or `=update` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. */ public readonly deletionProtection!: pulumi.Output; /** @@ -331,8 +323,8 @@ export interface TableState { */ datasetId?: pulumi.Input; /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `=destroy` or `=update` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. */ deletionProtection?: pulumi.Input; /** @@ -452,8 +444,8 @@ export interface TableArgs { */ datasetId: pulumi.Input; /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `=destroy` or `=update` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. */ deletionProtection?: pulumi.Input; /** diff --git a/sdk/nodejs/bigtable/instance.ts b/sdk/nodejs/bigtable/instance.ts index 3de85c79ae..4808504df1 100644 --- a/sdk/nodejs/bigtable/instance.ts +++ b/sdk/nodejs/bigtable/instance.ts @@ -7,22 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * ## +--- - * - * subcategory: "Cloud Bigtable" - * page_title: "Google: gcp.bigtable.Instance" - * description: |- - * Creates a Google Bigtable instance. - * --- - * - * # gcp.bigtable.Instance - * - * Creates a Google Bigtable instance. For more information see: - * - * * [API documentation](https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/bigtable/docs) - * * ## Example Usage * ### Simple Instance * @@ -123,8 +107,8 @@ export class Instance extends pulumi.CustomResource { */ public readonly clusters!: pulumi.Output; /** - * Whether or not to allow this provider to destroy the instance. Unless this field is set to false - * in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. */ public readonly deletionProtection!: pulumi.Output; /** @@ -201,8 +185,8 @@ export interface InstanceState { */ clusters?: pulumi.Input[]>; /** - * Whether or not to allow this provider to destroy the instance. Unless this field is set to false - * in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. */ deletionProtection?: pulumi.Input; /** @@ -245,8 +229,8 @@ export interface InstanceArgs { */ clusters?: pulumi.Input[]>; /** - * Whether or not to allow this provider to destroy the instance. Unless this field is set to false - * in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * terraform destroy or terraform apply that would delete the instance will fail. */ deletionProtection?: pulumi.Input; /** diff --git a/sdk/nodejs/bigtable/instanceIamBinding.ts b/sdk/nodejs/bigtable/instanceIamBinding.ts index 56ed6e1eb3..a1a307dd83 100644 --- a/sdk/nodejs/bigtable/instanceIamBinding.ts +++ b/sdk/nodejs/bigtable/instanceIamBinding.ts @@ -120,10 +120,6 @@ export class InstanceIamBinding extends pulumi.CustomResource { */ public readonly instance!: pulumi.Output; public readonly members!: pulumi.Output; - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - */ public readonly project!: pulumi.Output; /** * The role that should be applied. Only one @@ -188,10 +184,6 @@ export interface InstanceIamBindingState { */ instance?: pulumi.Input; members?: pulumi.Input[]>; - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - */ project?: pulumi.Input; /** * The role that should be applied. Only one @@ -211,10 +203,6 @@ export interface InstanceIamBindingArgs { */ instance: pulumi.Input; members: pulumi.Input[]>; - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - */ project?: pulumi.Input; /** * The role that should be applied. Only one diff --git a/sdk/nodejs/bigtable/instanceIamMember.ts b/sdk/nodejs/bigtable/instanceIamMember.ts index 5e66943f6f..a6cff221cd 100644 --- a/sdk/nodejs/bigtable/instanceIamMember.ts +++ b/sdk/nodejs/bigtable/instanceIamMember.ts @@ -120,10 +120,6 @@ export class InstanceIamMember extends pulumi.CustomResource { */ public readonly instance!: pulumi.Output; public readonly member!: pulumi.Output; - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - */ public readonly project!: pulumi.Output; /** * The role that should be applied. Only one @@ -188,10 +184,6 @@ export interface InstanceIamMemberState { */ instance?: pulumi.Input; member?: pulumi.Input; - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - */ project?: pulumi.Input; /** * The role that should be applied. Only one @@ -211,10 +203,6 @@ export interface InstanceIamMemberArgs { */ instance: pulumi.Input; member: pulumi.Input; - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - */ project?: pulumi.Input; /** * The role that should be applied. Only one diff --git a/sdk/nodejs/bigtable/instanceIamPolicy.ts b/sdk/nodejs/bigtable/instanceIamPolicy.ts index 3624bb982b..0a4b39973a 100644 --- a/sdk/nodejs/bigtable/instanceIamPolicy.ts +++ b/sdk/nodejs/bigtable/instanceIamPolicy.ts @@ -120,10 +120,6 @@ export class InstanceIamPolicy extends pulumi.CustomResource { * The policy data generated by a `gcp.organizations.getIAMPolicy` data source. */ public readonly policyData!: pulumi.Output; - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - */ public readonly project!: pulumi.Output; /** @@ -177,10 +173,6 @@ export interface InstanceIamPolicyState { * The policy data generated by a `gcp.organizations.getIAMPolicy` data source. */ policyData?: pulumi.Input; - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - */ project?: pulumi.Input; } @@ -196,9 +188,5 @@ export interface InstanceIamPolicyArgs { * The policy data generated by a `gcp.organizations.getIAMPolicy` data source. */ policyData: pulumi.Input; - /** - * The project in which the instance belongs. If it - * is not provided, a default will be supplied. - */ project?: pulumi.Input; } diff --git a/sdk/nodejs/bigtable/table.ts b/sdk/nodejs/bigtable/table.ts index afb945c337..58b04fba95 100644 --- a/sdk/nodejs/bigtable/table.ts +++ b/sdk/nodejs/bigtable/table.ts @@ -7,10 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Creates a Google Cloud Bigtable table inside an instance. For more information see - * [the official documentation](https://cloud.google.com/bigtable/) and - * [API](https://cloud.google.com/bigtable/docs/go/reference). - * * ## Example Usage * * ```typescript @@ -109,9 +105,8 @@ export class Table extends pulumi.CustomResource { */ public readonly project!: pulumi.Output; /** - * A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `splitKeys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. */ public readonly splitKeys!: pulumi.Output; @@ -177,9 +172,8 @@ export interface TableState { */ project?: pulumi.Input; /** - * A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `splitKeys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. */ splitKeys?: pulumi.Input[]>; } @@ -210,9 +204,8 @@ export interface TableArgs { */ project?: pulumi.Input; /** - * A list of predefined keys to split the table on. - * !> **Warning:** Modifying the `splitKeys` of an existing table will cause the provider - * to delete/recreate the entire `gcp.bigtable.Table` resource. + * A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + * Terraform to delete/recreate the entire google_bigtable_table resource. */ splitKeys?: pulumi.Input[]>; } diff --git a/sdk/nodejs/bigtable/tableIamBinding.ts b/sdk/nodejs/bigtable/tableIamBinding.ts index 6ad2219b42..9459fdf1ff 100644 --- a/sdk/nodejs/bigtable/tableIamBinding.ts +++ b/sdk/nodejs/bigtable/tableIamBinding.ts @@ -123,10 +123,6 @@ export class TableIamBinding extends pulumi.CustomResource { */ public readonly instance!: pulumi.Output; public readonly members!: pulumi.Output; - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - */ public readonly project!: pulumi.Output; /** * The role that should be applied. Only one @@ -200,10 +196,6 @@ export interface TableIamBindingState { */ instance?: pulumi.Input; members?: pulumi.Input[]>; - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - */ project?: pulumi.Input; /** * The role that should be applied. Only one @@ -227,10 +219,6 @@ export interface TableIamBindingArgs { */ instance: pulumi.Input; members: pulumi.Input[]>; - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - */ project?: pulumi.Input; /** * The role that should be applied. Only one diff --git a/sdk/nodejs/bigtable/tableIamMember.ts b/sdk/nodejs/bigtable/tableIamMember.ts index f757cc098b..e8e19fd8cc 100644 --- a/sdk/nodejs/bigtable/tableIamMember.ts +++ b/sdk/nodejs/bigtable/tableIamMember.ts @@ -123,10 +123,6 @@ export class TableIamMember extends pulumi.CustomResource { */ public readonly instance!: pulumi.Output; public readonly member!: pulumi.Output; - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - */ public readonly project!: pulumi.Output; /** * The role that should be applied. Only one @@ -200,10 +196,6 @@ export interface TableIamMemberState { */ instance?: pulumi.Input; member?: pulumi.Input; - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - */ project?: pulumi.Input; /** * The role that should be applied. Only one @@ -227,10 +219,6 @@ export interface TableIamMemberArgs { */ instance: pulumi.Input; member: pulumi.Input; - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - */ project?: pulumi.Input; /** * The role that should be applied. Only one diff --git a/sdk/nodejs/bigtable/tableIamPolicy.ts b/sdk/nodejs/bigtable/tableIamPolicy.ts index 306a5a990d..6b6a6fa708 100644 --- a/sdk/nodejs/bigtable/tableIamPolicy.ts +++ b/sdk/nodejs/bigtable/tableIamPolicy.ts @@ -123,10 +123,6 @@ export class TableIamPolicy extends pulumi.CustomResource { * The policy data generated by a `gcp.organizations.getIAMPolicy` data source. */ public readonly policyData!: pulumi.Output; - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - */ public readonly project!: pulumi.Output; /** * The name or relative resource id of the table to manage IAM policies for. @@ -189,10 +185,6 @@ export interface TableIamPolicyState { * The policy data generated by a `gcp.organizations.getIAMPolicy` data source. */ policyData?: pulumi.Input; - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - */ project?: pulumi.Input; /** * The name or relative resource id of the table to manage IAM policies for. @@ -212,10 +204,6 @@ export interface TableIamPolicyArgs { * The policy data generated by a `gcp.organizations.getIAMPolicy` data source. */ policyData: pulumi.Input; - /** - * The project in which the table belongs. If it - * is not provided, this provider will use the provider default. - */ project?: pulumi.Input; /** * The name or relative resource id of the table to manage IAM policies for. diff --git a/sdk/nodejs/billing/subAccount.ts b/sdk/nodejs/billing/subAccount.ts index fd6fd6f4a4..01ad0b29ac 100644 --- a/sdk/nodejs/billing/subAccount.ts +++ b/sdk/nodejs/billing/subAccount.ts @@ -5,20 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Allows creation and management of a Google Cloud Billing Subaccount. - * - * !> **WARNING:** Deleting this resource will not delete or close the billing subaccount. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const subaccount = new gcp.billing.SubAccount("subaccount", { - * displayName: "My Billing Account", - * masterBillingAccount: "012345-567890-ABCDEF", - * }); - * ``` - * * ## Import * * Billing Subaccounts can be imported using any of these accepted formats @@ -59,11 +45,6 @@ export class SubAccount extends pulumi.CustomResource { * The billing account id. */ public /*out*/ readonly billingAccountId!: pulumi.Output; - /** - * If set to "RENAME_ON_DESTROY" the billing account displayName - * will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - * Default is "". - */ public readonly deletionPolicy!: pulumi.Output; /** * The display name of the billing account. @@ -130,11 +111,6 @@ export interface SubAccountState { * The billing account id. */ billingAccountId?: pulumi.Input; - /** - * If set to "RENAME_ON_DESTROY" the billing account displayName - * will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - * Default is "". - */ deletionPolicy?: pulumi.Input; /** * The display name of the billing account. @@ -159,11 +135,6 @@ export interface SubAccountState { * The set of arguments for constructing a SubAccount resource. */ export interface SubAccountArgs { - /** - * If set to "RENAME_ON_DESTROY" the billing account displayName - * will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - * Default is "". - */ deletionPolicy?: pulumi.Input; /** * The display name of the billing account. diff --git a/sdk/nodejs/certificatemanager/certificate.ts b/sdk/nodejs/certificatemanager/certificate.ts index bcd150f95e..41d8d9e517 100644 --- a/sdk/nodejs/certificatemanager/certificate.ts +++ b/sdk/nodejs/certificatemanager/certificate.ts @@ -8,32 +8,19 @@ import * as utilities from "../utilities"; /** * ## Example Usage - * ### Certificate Manager Certificate Basic + * ### Certificate Manager Self Managed Certificate * * ```typescript * import * as pulumi from "@pulumi/pulumi"; + * import * as fs from "fs"; * import * as gcp from "@pulumi/gcp"; * - * const instance = new gcp.certificatemanager.DnsAuthorization("instance", { - * description: "The default dnss", - * domain: "subdomain.hashicorptest.com", - * }); - * const instance2 = new gcp.certificatemanager.DnsAuthorization("instance2", { - * description: "The default dnss", - * domain: "subdomain2.hashicorptest.com", - * }); * const _default = new gcp.certificatemanager.Certificate("default", { * description: "The default cert", * scope: "EDGE_CACHE", - * managed: { - * domains: [ - * instance.domain, - * instance2.domain, - * ], - * dnsAuthorizations: [ - * instance.id, - * instance2.id, - * ], + * selfManaged: { + * pemCertificate: fs.readFileSync("test-fixtures/certificatemanager/cert.pem"), + * pemPrivateKey: fs.readFileSync("test-fixtures/certificatemanager/private-key.pem"), * }, * }); * ``` diff --git a/sdk/nodejs/cloudbuild/getTrigger.ts b/sdk/nodejs/cloudbuild/getTrigger.ts index 2752ab0bd1..7f55aa8bb0 100644 --- a/sdk/nodejs/cloudbuild/getTrigger.ts +++ b/sdk/nodejs/cloudbuild/getTrigger.ts @@ -78,6 +78,7 @@ export interface GetTriggerResult { readonly name: string; readonly project?: string; readonly pubsubConfigs: outputs.cloudbuild.GetTriggerPubsubConfig[]; + readonly repositoryEventConfigs: outputs.cloudbuild.GetTriggerRepositoryEventConfig[]; readonly serviceAccount: string; readonly sourceToBuilds: outputs.cloudbuild.GetTriggerSourceToBuild[]; readonly substitutions: {[key: string]: string}; diff --git a/sdk/nodejs/cloudbuild/trigger.ts b/sdk/nodejs/cloudbuild/trigger.ts index aa4b01c0df..6e8c459b0b 100644 --- a/sdk/nodejs/cloudbuild/trigger.ts +++ b/sdk/nodejs/cloudbuild/trigger.ts @@ -191,6 +191,64 @@ import * as utilities from "../utilities"; * }, * }); * ``` + * ### Cloudbuild Trigger Manual Github Enterprise + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const manual_ghe_trigger = new gcp.cloudbuild.Trigger("manual-ghe-trigger", { + * gitFileSource: { + * githubEnterpriseConfig: "projects/myProject/locations/global/githubEnterpriseConfigs/configID", + * path: "cloudbuild.yaml", + * repoType: "GITHUB", + * revision: "refs/heads/main", + * uri: "https://hashicorp/terraform-provider-google-beta", + * }, + * sourceToBuild: { + * githubEnterpriseConfig: "projects/myProject/locations/global/githubEnterpriseConfigs/configID", + * ref: "refs/heads/main", + * repoType: "GITHUB", + * uri: "https://hashicorp/terraform-provider-google-beta", + * }, + * }); + * ``` + * ### Cloudbuild Trigger Repo + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const my_connection = new gcp.cloudbuildv2.Connection("my-connection", { + * location: "us-central1", + * githubConfig: { + * appInstallationId: 123123, + * authorizerCredential: { + * oauthTokenSecretVersion: "projects/my-project/secrets/github-pat-secret/versions/latest", + * }, + * }, + * }, { + * provider: google_beta, + * }); + * const my_repository = new gcp.cloudbuildv2.Repository("my-repository", { + * parentConnection: my_connection.id, + * remoteUri: "https://github.com/myuser/my-repo.git", + * }, { + * provider: google_beta, + * }); + * const repo_trigger = new gcp.cloudbuild.Trigger("repo-trigger", { + * location: "us-central1", + * repositoryEventConfig: { + * repository: my_repository.id, + * push: { + * branch: "feature-.*", + * }, + * }, + * filename: "cloudbuild.yaml", + * }, { + * provider: google_beta, + * }); + * ``` * * ## Import * @@ -335,6 +393,10 @@ export class Trigger extends pulumi.CustomResource { * Structure is documented below. */ public readonly pubsubConfig!: pulumi.Output; + /** + * The configuration of a trigger that creates a build whenever an event from Repo API is received. + */ + public readonly repositoryEventConfig!: pulumi.Output; /** * The service account used for all user-controlled operations including * triggers.patch, triggers.run, builds.create, and builds.cancel. @@ -410,6 +472,7 @@ export class Trigger extends pulumi.CustomResource { resourceInputs["name"] = state ? state.name : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["pubsubConfig"] = state ? state.pubsubConfig : undefined; + resourceInputs["repositoryEventConfig"] = state ? state.repositoryEventConfig : undefined; resourceInputs["serviceAccount"] = state ? state.serviceAccount : undefined; resourceInputs["sourceToBuild"] = state ? state.sourceToBuild : undefined; resourceInputs["substitutions"] = state ? state.substitutions : undefined; @@ -434,6 +497,7 @@ export class Trigger extends pulumi.CustomResource { resourceInputs["name"] = args ? args.name : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["pubsubConfig"] = args ? args.pubsubConfig : undefined; + resourceInputs["repositoryEventConfig"] = args ? args.repositoryEventConfig : undefined; resourceInputs["serviceAccount"] = args ? args.serviceAccount : undefined; resourceInputs["sourceToBuild"] = args ? args.sourceToBuild : undefined; resourceInputs["substitutions"] = args ? args.substitutions : undefined; @@ -547,6 +611,10 @@ export interface TriggerState { * Structure is documented below. */ pubsubConfig?: pulumi.Input; + /** + * The configuration of a trigger that creates a build whenever an event from Repo API is received. + */ + repositoryEventConfig?: pulumi.Input; /** * The service account used for all user-controlled operations including * triggers.patch, triggers.run, builds.create, and builds.cancel. @@ -689,6 +757,10 @@ export interface TriggerArgs { * Structure is documented below. */ pubsubConfig?: pulumi.Input; + /** + * The configuration of a trigger that creates a build whenever an event from Repo API is received. + */ + repositoryEventConfig?: pulumi.Input; /** * The service account used for all user-controlled operations including * triggers.patch, triggers.run, builds.create, and builds.cancel. diff --git a/sdk/nodejs/cloudbuildv2/connection.ts b/sdk/nodejs/cloudbuildv2/connection.ts new file mode 100644 index 0000000000..3db0377ee8 --- /dev/null +++ b/sdk/nodejs/cloudbuildv2/connection.ts @@ -0,0 +1,286 @@ +// *** WARNING: this file 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"; + +/** + * Beta only: The Cloudbuildv2 Connection resource + * + * ## Example Usage + * ### GitHub Connection + * Creates a Connection to github.com + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as fs from "fs"; + * import * as gcp from "@pulumi/gcp"; + * + * const github_token_secret = new gcp.secretmanager.Secret("github-token-secret", { + * secretId: "github-token-secret", + * replication: { + * automatic: true, + * }, + * }, { + * provider: google_beta, + * }); + * const github_token_secret_version = new gcp.secretmanager.SecretVersion("github-token-secret-version", { + * secret: github_token_secret.id, + * secretData: fs.readFileSync("my-github-token.txt"), + * }, { + * provider: google_beta, + * }); + * const p4sa-secretAccessor = gcp.organizations.getIAMPolicy({ + * bindings: [{ + * role: "roles/secretmanager.secretAccessor", + * members: ["serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com"], + * }], + * }); + * const policy = new gcp.secretmanager.SecretIamPolicy("policy", { + * secretId: github_token_secret.secretId, + * policyData: p4sa_secretAccessor.then(p4sa_secretAccessor => p4sa_secretAccessor.policyData), + * }, { + * provider: google_beta, + * }); + * const my_connection = new gcp.cloudbuildv2.Connection("my-connection", { + * location: "us-west1", + * githubConfig: { + * appInstallationId: 123123, + * authorizerCredential: { + * oauthTokenSecretVersion: github_token_secret_version.id, + * }, + * }, + * }, { + * provider: google_beta, + * }); + * ``` + * + * ## Import + * + * Connection can be imported using any of these accepted formats + * + * ```sh + * $ pulumi import gcp:cloudbuildv2/connection:Connection default projects/{{project}}/locations/{{location}}/connections/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:cloudbuildv2/connection:Connection default {{project}}/{{location}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:cloudbuildv2/connection:Connection default {{location}}/{{name}} + * ``` + */ +export class Connection extends pulumi.CustomResource { + /** + * Get an existing Connection 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?: ConnectionState, opts?: pulumi.CustomResourceOptions): Connection { + return new Connection(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:cloudbuildv2/connection:Connection'; + + /** + * Returns true if the given object is an instance of Connection. 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 Connection { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Connection.__pulumiType; + } + + /** + * Allows clients to store small amounts of arbitrary data. + */ + public readonly annotations!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * Output only. Server assigned timestamp for when the connection was created. + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + */ + public readonly disabled!: pulumi.Output; + /** + * This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + */ + public /*out*/ readonly etag!: pulumi.Output; + /** + * Configuration for connections to github.com. + */ + public readonly githubConfig!: pulumi.Output; + /** + * Configuration for connections to an instance of GitHub Enterprise. + */ + public readonly githubEnterpriseConfig!: pulumi.Output; + /** + * Output only. Installation state of the Connection. + */ + public /*out*/ readonly installationStates!: pulumi.Output; + /** + * The location for the resource + */ + public readonly location!: pulumi.Output; + /** + * Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + */ + public readonly name!: pulumi.Output; + /** + * The project for the resource + */ + public readonly project!: pulumi.Output; + /** + * Output only. Set to true when the connection is being set up or updated in the background. + */ + public /*out*/ readonly reconciling!: pulumi.Output; + /** + * Output only. Server assigned timestamp for when the connection was updated. + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a Connection 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: ConnectionArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: ConnectionArgs | ConnectionState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as ConnectionState | undefined; + resourceInputs["annotations"] = state ? state.annotations : undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["disabled"] = state ? state.disabled : undefined; + resourceInputs["etag"] = state ? state.etag : undefined; + resourceInputs["githubConfig"] = state ? state.githubConfig : undefined; + resourceInputs["githubEnterpriseConfig"] = state ? state.githubEnterpriseConfig : undefined; + resourceInputs["installationStates"] = state ? state.installationStates : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["reconciling"] = state ? state.reconciling : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as ConnectionArgs | undefined; + if ((!args || args.location === undefined) && !opts.urn) { + throw new Error("Missing required property 'location'"); + } + resourceInputs["annotations"] = args ? args.annotations : undefined; + resourceInputs["disabled"] = args ? args.disabled : undefined; + resourceInputs["githubConfig"] = args ? args.githubConfig : undefined; + resourceInputs["githubEnterpriseConfig"] = args ? args.githubEnterpriseConfig : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["etag"] = undefined /*out*/; + resourceInputs["installationStates"] = undefined /*out*/; + resourceInputs["reconciling"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Connection.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Connection resources. + */ +export interface ConnectionState { + /** + * Allows clients to store small amounts of arbitrary data. + */ + annotations?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Output only. Server assigned timestamp for when the connection was created. + */ + createTime?: pulumi.Input; + /** + * If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + */ + disabled?: pulumi.Input; + /** + * This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + */ + etag?: pulumi.Input; + /** + * Configuration for connections to github.com. + */ + githubConfig?: pulumi.Input; + /** + * Configuration for connections to an instance of GitHub Enterprise. + */ + githubEnterpriseConfig?: pulumi.Input; + /** + * Output only. Installation state of the Connection. + */ + installationStates?: pulumi.Input[]>; + /** + * The location for the resource + */ + location?: pulumi.Input; + /** + * Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + */ + name?: pulumi.Input; + /** + * The project for the resource + */ + project?: pulumi.Input; + /** + * Output only. Set to true when the connection is being set up or updated in the background. + */ + reconciling?: pulumi.Input; + /** + * Output only. Server assigned timestamp for when the connection was updated. + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Connection resource. + */ +export interface ConnectionArgs { + /** + * Allows clients to store small amounts of arbitrary data. + */ + annotations?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + */ + disabled?: pulumi.Input; + /** + * Configuration for connections to github.com. + */ + githubConfig?: pulumi.Input; + /** + * Configuration for connections to an instance of GitHub Enterprise. + */ + githubEnterpriseConfig?: pulumi.Input; + /** + * The location for the resource + */ + location: pulumi.Input; + /** + * Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + */ + name?: pulumi.Input; + /** + * The project for the resource + */ + project?: pulumi.Input; +} diff --git a/sdk/nodejs/cloudbuildv2/index.ts b/sdk/nodejs/cloudbuildv2/index.ts new file mode 100644 index 0000000000..beff651451 --- /dev/null +++ b/sdk/nodejs/cloudbuildv2/index.ts @@ -0,0 +1,33 @@ +// *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +// *** Do not edit by hand unless you're certain you know what you are doing! *** + +import * as pulumi from "@pulumi/pulumi"; +import * as utilities from "../utilities"; + +// Export members: +export { ConnectionArgs, ConnectionState } from "./connection"; +export type Connection = import("./connection").Connection; +export const Connection: typeof import("./connection").Connection = null as any; +utilities.lazyLoad(exports, ["Connection"], () => require("./connection")); + +export { RepositoryArgs, RepositoryState } from "./repository"; +export type Repository = import("./repository").Repository; +export const Repository: typeof import("./repository").Repository = null as any; +utilities.lazyLoad(exports, ["Repository"], () => require("./repository")); + + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "gcp:cloudbuildv2/connection:Connection": + return new Connection(name, undefined, { urn }) + case "gcp:cloudbuildv2/repository:Repository": + return new Repository(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("gcp", "cloudbuildv2/connection", _module) +pulumi.runtime.registerResourceModule("gcp", "cloudbuildv2/repository", _module) diff --git a/sdk/nodejs/cloudbuildv2/repository.ts b/sdk/nodejs/cloudbuildv2/repository.ts new file mode 100644 index 0000000000..0e56d9f63a --- /dev/null +++ b/sdk/nodejs/cloudbuildv2/repository.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"; + +/** + * Beta only: The Cloudbuildv2 Repository resource + * + * ## Example Usage + * ### Repository In GitHub Connection + * Creates a Repository resource inside a Connection to github.com + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as fs from "fs"; + * import * as gcp from "@pulumi/gcp"; + * + * const github_token_secret = new gcp.secretmanager.Secret("github-token-secret", { + * secretId: "github-token-secret", + * replication: { + * automatic: true, + * }, + * }, { + * provider: google_beta, + * }); + * const github_token_secret_version = new gcp.secretmanager.SecretVersion("github-token-secret-version", { + * secret: github_token_secret.id, + * secretData: fs.readFileSync("my-github-token.txt"), + * }, { + * provider: google_beta, + * }); + * const p4sa-secretAccessor = gcp.organizations.getIAMPolicy({ + * bindings: [{ + * role: "roles/secretmanager.secretAccessor", + * members: ["serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com"], + * }], + * }); + * const policy = new gcp.secretmanager.SecretIamPolicy("policy", { + * secretId: github_token_secret.secretId, + * policyData: p4sa_secretAccessor.then(p4sa_secretAccessor => p4sa_secretAccessor.policyData), + * }, { + * provider: google_beta, + * }); + * const my_connection = new gcp.cloudbuildv2.Connection("my-connection", { + * location: "us-west1", + * githubConfig: { + * appInstallationId: 123123, + * authorizerCredential: { + * oauthTokenSecretVersion: github_token_secret_version.id, + * }, + * }, + * }, { + * provider: google_beta, + * }); + * const my_repository = new gcp.cloudbuildv2.Repository("my-repository", { + * location: "us-west1", + * parentConnection: my_connection.name, + * remoteUri: "https://github.com/myuser/myrepo.git", + * }, { + * provider: google_beta, + * }); + * ``` + * + * ## Import + * + * Repository can be imported using any of these accepted formats + * + * ```sh + * $ pulumi import gcp:cloudbuildv2/repository:Repository default projects/{{project}}/locations/{{location}}/connections/{{parent_connection}}/repositories/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:cloudbuildv2/repository:Repository default {{project}}/{{location}}/{{parent_connection}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:cloudbuildv2/repository:Repository default {{location}}/{{parent_connection}}/{{name}} + * ``` + */ +export class Repository extends pulumi.CustomResource { + /** + * Get an existing Repository 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?: RepositoryState, opts?: pulumi.CustomResourceOptions): Repository { + return new Repository(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:cloudbuildv2/repository:Repository'; + + /** + * Returns true if the given object is an instance of Repository. 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 Repository { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === Repository.__pulumiType; + } + + /** + * Allows clients to store small amounts of arbitrary data. + */ + public readonly annotations!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * Output only. Server assigned timestamp for when the connection was created. + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + */ + public /*out*/ readonly etag!: pulumi.Output; + /** + * The location for the resource + */ + public readonly location!: pulumi.Output; + /** + * Name of the repository. + */ + public readonly name!: pulumi.Output; + /** + * The connection for the resource + */ + public readonly parentConnection!: pulumi.Output; + /** + * The project for the resource + */ + public readonly project!: pulumi.Output; + /** + * Required. Git Clone HTTPS URI. + */ + public readonly remoteUri!: pulumi.Output; + /** + * Output only. Server assigned timestamp for when the connection was updated. + */ + public /*out*/ readonly updateTime!: pulumi.Output; + + /** + * Create a Repository 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: RepositoryArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: RepositoryArgs | RepositoryState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as RepositoryState | undefined; + resourceInputs["annotations"] = state ? state.annotations : undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["etag"] = state ? state.etag : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["parentConnection"] = state ? state.parentConnection : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["remoteUri"] = state ? state.remoteUri : undefined; + resourceInputs["updateTime"] = state ? state.updateTime : undefined; + } else { + const args = argsOrState as RepositoryArgs | undefined; + if ((!args || args.parentConnection === undefined) && !opts.urn) { + throw new Error("Missing required property 'parentConnection'"); + } + if ((!args || args.remoteUri === undefined) && !opts.urn) { + throw new Error("Missing required property 'remoteUri'"); + } + resourceInputs["annotations"] = args ? args.annotations : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["parentConnection"] = args ? args.parentConnection : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["remoteUri"] = args ? args.remoteUri : undefined; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["etag"] = undefined /*out*/; + resourceInputs["updateTime"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(Repository.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering Repository resources. + */ +export interface RepositoryState { + /** + * Allows clients to store small amounts of arbitrary data. + */ + annotations?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Output only. Server assigned timestamp for when the connection was created. + */ + createTime?: pulumi.Input; + /** + * This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + */ + etag?: pulumi.Input; + /** + * The location for the resource + */ + location?: pulumi.Input; + /** + * Name of the repository. + */ + name?: pulumi.Input; + /** + * The connection for the resource + */ + parentConnection?: pulumi.Input; + /** + * The project for the resource + */ + project?: pulumi.Input; + /** + * Required. Git Clone HTTPS URI. + */ + remoteUri?: pulumi.Input; + /** + * Output only. Server assigned timestamp for when the connection was updated. + */ + updateTime?: pulumi.Input; +} + +/** + * The set of arguments for constructing a Repository resource. + */ +export interface RepositoryArgs { + /** + * Allows clients to store small amounts of arbitrary data. + */ + annotations?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The location for the resource + */ + location?: pulumi.Input; + /** + * Name of the repository. + */ + name?: pulumi.Input; + /** + * The connection for the resource + */ + parentConnection: pulumi.Input; + /** + * The project for the resource + */ + project?: pulumi.Input; + /** + * Required. Git Clone HTTPS URI. + */ + remoteUri: pulumi.Input; +} diff --git a/sdk/nodejs/cloudfunctions/function.ts b/sdk/nodejs/cloudfunctions/function.ts index 9c2dd2bb89..b471e103b8 100644 --- a/sdk/nodejs/cloudfunctions/function.ts +++ b/sdk/nodejs/cloudfunctions/function.ts @@ -187,7 +187,7 @@ export class Function extends pulumi.CustomResource { /** * The limit on the maximum number of function instances that may coexist at a given time. */ - public readonly maxInstances!: pulumi.Output; + public readonly maxInstances!: pulumi.Output; /** * The limit on the minimum number of function instances that may coexist at a given time. */ diff --git a/sdk/nodejs/cloudfunctions/getFunction.ts b/sdk/nodejs/cloudfunctions/getFunction.ts index 974121170c..723a195f0b 100644 --- a/sdk/nodejs/cloudfunctions/getFunction.ts +++ b/sdk/nodejs/cloudfunctions/getFunction.ts @@ -96,7 +96,7 @@ export interface GetFunctionResult { */ readonly labels: {[key: string]: any}; /** - * The limit on the maximum number of function instances that may coexist at a given time. + * The limit on the maximum number of function instances that may coexist at a given time. If unset or set to `0`, the API default will be used. */ readonly maxInstances: number; readonly minInstances: number; diff --git a/sdk/nodejs/cloudidentity/groupMembership.ts b/sdk/nodejs/cloudidentity/groupMembership.ts index 016d9905a0..3812ebaf74 100644 --- a/sdk/nodejs/cloudidentity/groupMembership.ts +++ b/sdk/nodejs/cloudidentity/groupMembership.ts @@ -136,7 +136,6 @@ export class GroupMembership extends pulumi.CustomResource { public readonly group!: pulumi.Output; /** * EntityKey of the member. - * Structure is documented below. */ public readonly memberKey!: pulumi.Output; /** @@ -221,7 +220,6 @@ export interface GroupMembershipState { group?: pulumi.Input; /** * EntityKey of the member. - * Structure is documented below. */ memberKey?: pulumi.Input; /** @@ -260,7 +258,6 @@ export interface GroupMembershipArgs { group: pulumi.Input; /** * EntityKey of the member. - * Structure is documented below. */ memberKey?: pulumi.Input; /** diff --git a/sdk/nodejs/cloudrun/service.ts b/sdk/nodejs/cloudrun/service.ts index 8b1d88ba90..405a77d376 100644 --- a/sdk/nodejs/cloudrun/service.ts +++ b/sdk/nodejs/cloudrun/service.ts @@ -32,54 +32,6 @@ import * as utilities from "../utilities"; * Have a look at the Cloud Run Anthos example below. * * ## Example Usage - * ### Cloud Run Service Pubsub - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const _default = new gcp.cloudrun.Service("default", { - * location: "us-central1", - * template: { - * spec: { - * containers: [{ - * image: "gcr.io/cloudrun/hello", - * }], - * }, - * }, - * traffics: [{ - * percent: 100, - * latestRevision: true, - * }], - * }); - * const sa = new gcp.serviceaccount.Account("sa", { - * accountId: "cloud-run-pubsub-invoker", - * displayName: "Cloud Run Pub/Sub Invoker", - * }); - * const binding = new gcp.cloudrun.IamBinding("binding", { - * location: _default.location, - * service: _default.name, - * role: "roles/run.invoker", - * members: [pulumi.interpolate`serviceAccount:${sa.email}`], - * }); - * const project = new gcp.projects.IAMBinding("project", { - * role: "roles/iam.serviceAccountTokenCreator", - * members: [pulumi.interpolate`serviceAccount:${sa.email}`], - * }); - * const topic = new gcp.pubsub.Topic("topic", {}); - * const subscription = new gcp.pubsub.Subscription("subscription", { - * topic: topic.name, - * pushConfig: { - * pushEndpoint: _default.statuses.apply(statuses => statuses[0].url), - * oidcToken: { - * serviceAccountEmail: sa.email, - * }, - * attributes: { - * "x-goog-version": "v1", - * }, - * }, - * }); - * ``` * ### Cloud Run Service Basic * * ```typescript @@ -127,7 +79,7 @@ import * as utilities from "../utilities"; * annotations: { * "autoscaling.knative.dev/maxScale": "1000", * "run.googleapis.com/cloudsql-instances": instance.connectionName, - * "run.googleapis.com/client-name": "demo", + * "run.googleapis.com/client-name": "terraform", * }, * }, * }, diff --git a/sdk/nodejs/cloudrunv2/job.ts b/sdk/nodejs/cloudrunv2/job.ts index e18fe062f8..9a086bfc78 100644 --- a/sdk/nodejs/cloudrunv2/job.ts +++ b/sdk/nodejs/cloudrunv2/job.ts @@ -140,38 +140,6 @@ import * as utilities from "../utilities"; * }, * }); * ``` - * ### Cloudrunv2 Job Probes - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const _default = new gcp.cloudrunv2.Job("default", { - * launchStage: "BETA", - * location: "us-central1", - * template: { - * template: { - * containers: [{ - * image: "us-docker.pkg.dev/cloudrun/container/hello", - * livenessProbe: { - * httpGet: { - * path: "/", - * }, - * }, - * startupProbe: { - * failureThreshold: 1, - * initialDelaySeconds: 0, - * periodSeconds: 3, - * tcpSocket: { - * port: 8080, - * }, - * timeoutSeconds: 1, - * }, - * }], - * }, - * }, - * }); - * ``` * ### Cloudrunv2 Job Secret * * ```typescript diff --git a/sdk/nodejs/cloudscheduler/job.ts b/sdk/nodejs/cloudscheduler/job.ts index 513f4b384a..60915717e7 100644 --- a/sdk/nodejs/cloudscheduler/job.ts +++ b/sdk/nodejs/cloudscheduler/job.ts @@ -187,7 +187,7 @@ export class Job extends pulumi.CustomResource { */ public readonly pubsubTarget!: pulumi.Output; /** - * Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + * Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. */ public readonly region!: pulumi.Output; /** @@ -313,7 +313,7 @@ export interface JobState { */ pubsubTarget?: pulumi.Input; /** - * Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + * Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. */ region?: pulumi.Input; /** @@ -393,7 +393,7 @@ export interface JobArgs { */ pubsubTarget?: pulumi.Input; /** - * Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + * Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. */ region?: pulumi.Input; /** diff --git a/sdk/nodejs/composer/getEnvironment.ts b/sdk/nodejs/composer/getEnvironment.ts index bd1b9b4db6..fa0652be15 100644 --- a/sdk/nodejs/composer/getEnvironment.ts +++ b/sdk/nodejs/composer/getEnvironment.ts @@ -42,9 +42,6 @@ export interface GetEnvironmentArgs { * A collection of values returned by getEnvironment. */ export interface GetEnvironmentResult { - /** - * Configuration parameters for the environment. - */ readonly configs: outputs.composer.GetEnvironmentConfig[]; /** * The provider-assigned unique ID for this managed resource. diff --git a/sdk/nodejs/compute/address.ts b/sdk/nodejs/compute/address.ts index a657269408..b3310a9fb6 100644 --- a/sdk/nodejs/compute/address.ts +++ b/sdk/nodejs/compute/address.ts @@ -182,7 +182,7 @@ export class Address extends pulumi.CustomResource { */ public /*out*/ readonly labelFingerprint!: pulumi.Output; /** - * Labels to apply to this address. A list of key->value pairs. + * Labels to apply to this address. A list of key->value pairs. */ public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; /** @@ -335,7 +335,7 @@ export interface AddressState { */ labelFingerprint?: pulumi.Input; /** - * Labels to apply to this address. A list of key->value pairs. + * Labels to apply to this address. A list of key->value pairs. */ labels?: pulumi.Input<{[key: string]: pulumi.Input}>; /** @@ -428,7 +428,7 @@ export interface AddressArgs { */ description?: pulumi.Input; /** - * Labels to apply to this address. A list of key->value pairs. + * Labels to apply to this address. A list of key->value pairs. */ labels?: pulumi.Input<{[key: string]: pulumi.Input}>; /** diff --git a/sdk/nodejs/compute/attachedDisk.ts b/sdk/nodejs/compute/attachedDisk.ts index df5d4d298e..28396c716d 100644 --- a/sdk/nodejs/compute/attachedDisk.ts +++ b/sdk/nodejs/compute/attachedDisk.ts @@ -5,20 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Persistent disks can be attached to a compute instance using the `attachedDisk` - * section within the compute instance configuration. - * However there may be situations where managing the attached disks via the compute - * instance config isn't preferable or possible, such as attaching dynamic - * numbers of disks using the `count` variable. - * - * To get more information about attaching disks, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/instances/attachDisk) - * * How-to Guides - * * [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk) - * - * **Note:** When using `gcp.compute.AttachedDisk` you **must** use `lifecycle.ignore_changes = ["attachedDisk"]` on the `gcp.compute.Instance` resource that has the disks attached. Otherwise the two resources will fight for control of the attached disk block. - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/compute/backendBucketSignedUrlKey.ts b/sdk/nodejs/compute/backendBucketSignedUrlKey.ts index f6b230c351..09fc9e7f92 100644 --- a/sdk/nodejs/compute/backendBucketSignedUrlKey.ts +++ b/sdk/nodejs/compute/backendBucketSignedUrlKey.ts @@ -5,17 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * A key for signing Cloud CDN signed URLs for BackendBuckets. - * - * To get more information about BackendBucketSignedUrlKey, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendBuckets) - * * How-to Guides - * * [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/) - * - * > **Warning:** All arguments including `keyValue` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Backend Bucket Signed Url Key * diff --git a/sdk/nodejs/compute/backendService.ts b/sdk/nodejs/compute/backendService.ts index 33b8df6402..f15c9e1c65 100644 --- a/sdk/nodejs/compute/backendService.ts +++ b/sdk/nodejs/compute/backendService.ts @@ -7,22 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * A Backend Service defines a group of virtual machines that will serve - * traffic for load balancing. This resource is a global backend service, - * appropriate for external load balancing or self-managed internal load balancing. - * For managed internal load balancing, use a regional backend service instead. - * - * Currently self-managed internal load balancing is only available in beta. - * - * To get more information about BackendService, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/v1/backendServices) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/compute/docs/load-balancing/http/backend-service) - * - * > **Warning:** All arguments including `iap.oauth2_client_secret` and `iap.oauth2_client_secret_sha256` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Backend Service Cache Include Http Headers * @@ -249,6 +233,16 @@ export class BackendService extends pulumi.CustomResource { * Possible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`. */ public readonly loadBalancingScheme!: pulumi.Output; + /** + * A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + */ + public readonly localityLbPolicies!: pulumi.Output; /** * The load balancing algorithm used within the scope of the locality. * The possible values are: @@ -354,6 +348,7 @@ export class BackendService extends pulumi.CustomResource { resourceInputs["healthChecks"] = state ? state.healthChecks : undefined; resourceInputs["iap"] = state ? state.iap : undefined; resourceInputs["loadBalancingScheme"] = state ? state.loadBalancingScheme : undefined; + resourceInputs["localityLbPolicies"] = state ? state.localityLbPolicies : undefined; resourceInputs["localityLbPolicy"] = state ? state.localityLbPolicy : undefined; resourceInputs["logConfig"] = state ? state.logConfig : undefined; resourceInputs["name"] = state ? state.name : undefined; @@ -383,6 +378,7 @@ export class BackendService extends pulumi.CustomResource { resourceInputs["healthChecks"] = args ? args.healthChecks : undefined; resourceInputs["iap"] = args ? args.iap : undefined; resourceInputs["loadBalancingScheme"] = args ? args.loadBalancingScheme : undefined; + resourceInputs["localityLbPolicies"] = args ? args.localityLbPolicies : undefined; resourceInputs["localityLbPolicy"] = args ? args.localityLbPolicy : undefined; resourceInputs["logConfig"] = args ? args.logConfig : undefined; resourceInputs["name"] = args ? args.name : undefined; @@ -512,6 +508,16 @@ export interface BackendServiceState { * Possible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`. */ loadBalancingScheme?: pulumi.Input; + /** + * A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + */ + localityLbPolicies?: pulumi.Input[]>; /** * The load balancing algorithm used within the scope of the locality. * The possible values are: @@ -682,6 +688,16 @@ export interface BackendServiceArgs { * Possible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`. */ loadBalancingScheme?: pulumi.Input; + /** + * A list of locality load balancing policies to be used in order of + * preference. Either the policy or the customPolicy field should be set. + * Overrides any value set in the localityLbPolicy field. + * localityLbPolicies is only supported when the BackendService is referenced + * by a URL Map that is referenced by a target gRPC proxy that has the + * validateForProxyless field set to true. + * Structure is documented below. + */ + localityLbPolicies?: pulumi.Input[]>; /** * The load balancing algorithm used within the scope of the locality. * The possible values are: diff --git a/sdk/nodejs/compute/backendServiceSignedUrlKey.ts b/sdk/nodejs/compute/backendServiceSignedUrlKey.ts index eb250f8766..90f544327b 100644 --- a/sdk/nodejs/compute/backendServiceSignedUrlKey.ts +++ b/sdk/nodejs/compute/backendServiceSignedUrlKey.ts @@ -5,17 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * A key for signing Cloud CDN signed URLs for Backend Services. - * - * To get more information about BackendServiceSignedUrlKey, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendServices) - * * How-to Guides - * * [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/) - * - * > **Warning:** All arguments including `keyValue` will be stored in the raw - * state as plain-text. - * * ## Example Usage * * ## Import diff --git a/sdk/nodejs/compute/disk.ts b/sdk/nodejs/compute/disk.ts index 45957043b1..a6d65ccd9e 100644 --- a/sdk/nodejs/compute/disk.ts +++ b/sdk/nodejs/compute/disk.ts @@ -7,31 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Persistent disks are durable storage devices that function similarly to - * the physical disks in a desktop or a server. Compute Engine manages the - * hardware behind these devices to ensure data redundancy and optimize - * performance for you. Persistent disks are available as either standard - * hard disk drives (HDD) or solid-state drives (SSD). - * - * Persistent disks are located independently from your virtual machine - * instances, so you can detach or move persistent disks to keep your data - * even after you delete your instances. Persistent disk performance scales - * automatically with size, so you can resize your existing persistent disks - * or add more persistent disks to an instance to meet your performance and - * storage space requirements. - * - * Add a persistent disk to your instance when you need reliable and - * affordable storage with consistent performance characteristics. - * - * To get more information about Disk, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/v1/disks) - * * How-to Guides - * * [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk) - * - * > **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Disk Basic * @@ -187,11 +162,9 @@ export class Disk extends pulumi.CustomResource { */ public readonly provisionedIops!: pulumi.Output; /** - * Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. */ public readonly resourcePolicies!: pulumi.Output; @@ -200,17 +173,11 @@ export class Disk extends pulumi.CustomResource { */ public /*out*/ readonly selfLink!: pulumi.Output; /** - * Size of the persistent disk, specified in GB. You can specify this - * field when creating a persistent disk using the `image` or - * `snapshot` parameter, or specify it alone to create an empty - * persistent disk. - * If you specify this field along with `image` or `snapshot`, - * the value must not be less than the size of the image - * or the size of the snapshot. - * ~>**NOTE** If you change the size, the provider updates the disk size - * if upsizing is detected but recreates the disk if downsizing is requested. - * You can add `lifecycle.prevent_destroy` in the config to prevent destroying - * and recreating. + * Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + * 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + * with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + * ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + * downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. */ public readonly size!: pulumi.Output; /** @@ -450,11 +417,9 @@ export interface DiskState { */ provisionedIops?: pulumi.Input; /** - * Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. */ resourcePolicies?: pulumi.Input[]>; @@ -463,17 +428,11 @@ export interface DiskState { */ selfLink?: pulumi.Input; /** - * Size of the persistent disk, specified in GB. You can specify this - * field when creating a persistent disk using the `image` or - * `snapshot` parameter, or specify it alone to create an empty - * persistent disk. - * If you specify this field along with `image` or `snapshot`, - * the value must not be less than the size of the image - * or the size of the snapshot. - * ~>**NOTE** If you change the size, the provider updates the disk size - * if upsizing is detected but recreates the disk if downsizing is requested. - * You can add `lifecycle.prevent_destroy` in the config to prevent destroying - * and recreating. + * Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + * 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + * with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + * ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + * downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. */ size?: pulumi.Input; /** @@ -622,26 +581,18 @@ export interface DiskArgs { */ provisionedIops?: pulumi.Input; /** - * Resource policies applied to this disk for automatic snapshot creations. - * ~>**NOTE** This value does not support updating the - * resource policy, as resource policies can not be updated more than - * one at a time. Use - * `gcp.compute.DiskResourcePolicyAttachment` + * Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + * the resource policy, as resource policies can not be updated more than one at a time. Use + * ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) * to allow for updating the resource policy attached to the disk. */ resourcePolicies?: pulumi.Input[]>; /** - * Size of the persistent disk, specified in GB. You can specify this - * field when creating a persistent disk using the `image` or - * `snapshot` parameter, or specify it alone to create an empty - * persistent disk. - * If you specify this field along with `image` or `snapshot`, - * the value must not be less than the size of the image - * or the size of the snapshot. - * ~>**NOTE** If you change the size, the provider updates the disk size - * if upsizing is detected but recreates the disk if downsizing is requested. - * You can add `lifecycle.prevent_destroy` in the config to prevent destroying - * and recreating. + * Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + * 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + * with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + * ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + * downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. */ size?: pulumi.Input; /** diff --git a/sdk/nodejs/compute/diskResourcePolicyAttachment.ts b/sdk/nodejs/compute/diskResourcePolicyAttachment.ts index 17b3e8445c..0c6fa682b0 100644 --- a/sdk/nodejs/compute/diskResourcePolicyAttachment.ts +++ b/sdk/nodejs/compute/diskResourcePolicyAttachment.ts @@ -5,11 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Adds existing resource policies to a disk. You can only add one policy - * which will be applied to this disk for scheduling snapshot creation. - * - * > **Note:** This resource does not support regional disks (`gcp.compute.RegionDisk`). For regional disks, please refer to the `gcp.compute.RegionDiskResourcePolicyAttachment` resource. - * * ## Example Usage * ### Disk Resource Policy Attachment Basic * diff --git a/sdk/nodejs/compute/forwardingRule.ts b/sdk/nodejs/compute/forwardingRule.ts index 5a8a7ac516..ebdb2f13ba 100644 --- a/sdk/nodejs/compute/forwardingRule.ts +++ b/sdk/nodejs/compute/forwardingRule.ts @@ -145,7 +145,7 @@ export class ForwardingRule extends pulumi.CustomResource { */ public /*out*/ readonly labelFingerprint!: pulumi.Output; /** - * Labels to apply to this forwarding rule. A list of key->value pairs. + * Labels to apply to this rule. */ public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; /** @@ -417,7 +417,7 @@ export interface ForwardingRuleState { */ labelFingerprint?: pulumi.Input; /** - * Labels to apply to this forwarding rule. A list of key->value pairs. + * Labels to apply to this rule. */ labels?: pulumi.Input<{[key: string]: pulumi.Input}>; /** @@ -609,7 +609,7 @@ export interface ForwardingRuleArgs { */ isMirroringCollector?: pulumi.Input; /** - * Labels to apply to this forwarding rule. A list of key->value pairs. + * Labels to apply to this rule. */ labels?: pulumi.Input<{[key: string]: pulumi.Input}>; /** diff --git a/sdk/nodejs/compute/getBackendService.ts b/sdk/nodejs/compute/getBackendService.ts index ba9ae9541f..d58c27aaba 100644 --- a/sdk/nodejs/compute/getBackendService.ts +++ b/sdk/nodejs/compute/getBackendService.ts @@ -81,6 +81,7 @@ export interface GetBackendServiceResult { */ readonly id: string; readonly loadBalancingScheme: string; + readonly localityLbPolicies: outputs.compute.GetBackendServiceLocalityLbPolicy[]; readonly localityLbPolicy: string; readonly logConfigs: outputs.compute.GetBackendServiceLogConfig[]; readonly name: string; diff --git a/sdk/nodejs/compute/getInstanceTemplate.ts b/sdk/nodejs/compute/getInstanceTemplate.ts index 6e9000a2d8..3afeeef041 100644 --- a/sdk/nodejs/compute/getInstanceTemplate.ts +++ b/sdk/nodejs/compute/getInstanceTemplate.ts @@ -138,10 +138,6 @@ export interface GetInstanceTemplateResult { */ readonly minCpuPlatform: string; readonly mostRecent?: boolean; - /** - * The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. - */ readonly name?: string; /** * Creates a unique name beginning with the specified diff --git a/sdk/nodejs/compute/getResourcePolicy.ts b/sdk/nodejs/compute/getResourcePolicy.ts index e07ab4dbd8..315caf4f6a 100644 --- a/sdk/nodejs/compute/getResourcePolicy.ts +++ b/sdk/nodejs/compute/getResourcePolicy.ts @@ -6,19 +6,6 @@ import * as inputs from "../types/input"; import * as outputs from "../types/output"; import * as utilities from "../utilities"; -/** - * Provide access to a Resource Policy's attributes. For more information see [the official documentation](https://cloud.google.com/compute/docs/disks/scheduled-snapshots) or the [API](https://cloud.google.com/compute/docs/reference/rest/beta/resourcePolicies). - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const daily = gcp.compute.getResourcePolicy({ - * name: "daily", - * region: "us-central1", - * }); - * ``` - */ export function getResourcePolicy(args: GetResourcePolicyArgs, opts?: pulumi.InvokeOptions): Promise { opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); @@ -70,19 +57,6 @@ export interface GetResourcePolicyResult { readonly selfLink: string; readonly snapshotSchedulePolicies: outputs.compute.GetResourcePolicySnapshotSchedulePolicy[]; } -/** - * Provide access to a Resource Policy's attributes. For more information see [the official documentation](https://cloud.google.com/compute/docs/disks/scheduled-snapshots) or the [API](https://cloud.google.com/compute/docs/reference/rest/beta/resourcePolicies). - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const daily = gcp.compute.getResourcePolicy({ - * name: "daily", - * region: "us-central1", - * }); - * ``` - */ export function getResourcePolicyOutput(args: GetResourcePolicyOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { return pulumi.output(args).apply((a: any) => getResourcePolicy(a, opts)) } diff --git a/sdk/nodejs/compute/getRouterNat.ts b/sdk/nodejs/compute/getRouterNat.ts index a1766e566a..3342c39f5e 100644 --- a/sdk/nodejs/compute/getRouterNat.ts +++ b/sdk/nodejs/compute/getRouterNat.ts @@ -85,6 +85,7 @@ export interface GetRouterNatResult { readonly sourceSubnetworkIpRangesToNat: string; readonly subnetworks: outputs.compute.GetRouterNatSubnetwork[]; readonly tcpEstablishedIdleTimeoutSec: number; + readonly tcpTimeWaitTimeoutSec: number; readonly tcpTransitoryIdleTimeoutSec: number; readonly udpIdleTimeoutSec: number; } diff --git a/sdk/nodejs/compute/globalAddress.ts b/sdk/nodejs/compute/globalAddress.ts index c01727bcad..a65e4763ae 100644 --- a/sdk/nodejs/compute/globalAddress.ts +++ b/sdk/nodejs/compute/globalAddress.ts @@ -23,24 +23,6 @@ import * as utilities from "../utilities"; * * const _default = new gcp.compute.GlobalAddress("default", {}); * ``` - * ### Global Address Private Services Connect - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const network = new gcp.compute.Network("network", {autoCreateSubnetworks: false}, { - * provider: google_beta, - * }); - * const _default = new gcp.compute.GlobalAddress("default", { - * addressType: "INTERNAL", - * purpose: "PRIVATE_SERVICE_CONNECT", - * network: network.id, - * address: "100.100.100.105", - * }, { - * provider: google_beta, - * }); - * ``` * * ## Import * @@ -118,7 +100,7 @@ export class GlobalAddress extends pulumi.CustomResource { */ public /*out*/ readonly labelFingerprint!: pulumi.Output; /** - * Labels to apply to this address. A list of key->value pairs. + * Labels to apply to this address. A list of key->value pairs. */ public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; /** @@ -151,9 +133,8 @@ export class GlobalAddress extends pulumi.CustomResource { */ public readonly project!: pulumi.Output; /** - * The purpose of the resource. Possible values include: - * * VPC_PEERING - for peer networks - * * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + * The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + * ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks */ public readonly purpose!: pulumi.Output; /** @@ -244,7 +225,7 @@ export interface GlobalAddressState { */ labelFingerprint?: pulumi.Input; /** - * Labels to apply to this address. A list of key->value pairs. + * Labels to apply to this address. A list of key->value pairs. */ labels?: pulumi.Input<{[key: string]: pulumi.Input}>; /** @@ -277,9 +258,8 @@ export interface GlobalAddressState { */ project?: pulumi.Input; /** - * The purpose of the resource. Possible values include: - * * VPC_PEERING - for peer networks - * * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + * The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + * ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks */ purpose?: pulumi.Input; /** @@ -316,7 +296,7 @@ export interface GlobalAddressArgs { */ ipVersion?: pulumi.Input; /** - * Labels to apply to this address. A list of key->value pairs. + * Labels to apply to this address. A list of key->value pairs. */ labels?: pulumi.Input<{[key: string]: pulumi.Input}>; /** @@ -349,9 +329,8 @@ export interface GlobalAddressArgs { */ project?: pulumi.Input; /** - * The purpose of the resource. Possible values include: - * * VPC_PEERING - for peer networks - * * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + * The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + * ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks */ purpose?: pulumi.Input; } diff --git a/sdk/nodejs/compute/globalForwardingRule.ts b/sdk/nodejs/compute/globalForwardingRule.ts index 37dd385d4d..28c2a0b308 100644 --- a/sdk/nodejs/compute/globalForwardingRule.ts +++ b/sdk/nodejs/compute/globalForwardingRule.ts @@ -13,7 +13,7 @@ import * as utilities from "../utilities"; * balancing. * * For more information, see - * + * https://cloud.google.com/compute/docs/load-balancing/http/ * * ## Example Usage * ### Global Forwarding Rule External Managed @@ -55,7 +55,6 @@ import * as utilities from "../utilities"; * }); * ``` * ### Private Service Connect Google Apis - * ### Private Service Connect Google Apis * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -179,22 +178,17 @@ export class GlobalForwardingRule extends pulumi.CustomResource { */ public /*out*/ readonly labelFingerprint!: pulumi.Output; /** - * Labels to apply to this forwarding rule. A list of key->value pairs. + * Labels to apply to this rule. */ public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; /** - * This signifies what the GlobalForwardingRule will be used for. - * The value of INTERNAL_SELF_MANAGED means that this will be used for - * Internal Global HTTP(S) LB. The value of EXTERNAL means that this - * will be used for External Global Load Balancing (HTTP(S) LB, - * External TCP/UDP LB, SSL Proxy) - * Note: This field must be set "" if the global address is - * External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - * that this will be used for Global external HTTP(S) load balancers. - * Note: This field must be set "" if the global address is - * configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - * Default value is `EXTERNAL`. - * Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + * Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + * from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + * `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + * Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + * forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + * INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED */ public readonly loadBalancingScheme!: pulumi.Output; /** @@ -226,11 +220,9 @@ export class GlobalForwardingRule extends pulumi.CustomResource { */ public readonly name!: pulumi.Output; /** - * This field is not used for external load balancing. - * For INTERNAL_SELF_MANAGED load balancing, this field - * identifies the network that the load balanced IP should belong to - * for this global forwarding rule. If this field is not specified, - * the default network will be used. + * This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + * field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + * specified, the default network will be used. */ public readonly network!: pulumi.Output; /** @@ -271,12 +263,10 @@ export class GlobalForwardingRule extends pulumi.CustomResource { */ public /*out*/ readonly selfLink!: pulumi.Output; /** - * The URL of the target resource to receive the matched traffic. - * The forwarded traffic must be of a type appropriate to the target object. - * For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - * are valid. - * For global address with a purpose of PRIVATE_SERVICE_CONNECT and - * addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + * The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + * the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + * resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + * balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. */ public readonly target!: pulumi.Output; @@ -379,22 +369,17 @@ export interface GlobalForwardingRuleState { */ labelFingerprint?: pulumi.Input; /** - * Labels to apply to this forwarding rule. A list of key->value pairs. + * Labels to apply to this rule. */ labels?: pulumi.Input<{[key: string]: pulumi.Input}>; /** - * This signifies what the GlobalForwardingRule will be used for. - * The value of INTERNAL_SELF_MANAGED means that this will be used for - * Internal Global HTTP(S) LB. The value of EXTERNAL means that this - * will be used for External Global Load Balancing (HTTP(S) LB, - * External TCP/UDP LB, SSL Proxy) - * Note: This field must be set "" if the global address is - * External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - * that this will be used for Global external HTTP(S) load balancers. - * Note: This field must be set "" if the global address is - * configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - * Default value is `EXTERNAL`. - * Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + * Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + * from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + * `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + * Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + * forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + * INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED */ loadBalancingScheme?: pulumi.Input; /** @@ -426,11 +411,9 @@ export interface GlobalForwardingRuleState { */ name?: pulumi.Input; /** - * This field is not used for external load balancing. - * For INTERNAL_SELF_MANAGED load balancing, this field - * identifies the network that the load balanced IP should belong to - * for this global forwarding rule. If this field is not specified, - * the default network will be used. + * This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + * field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + * specified, the default network will be used. */ network?: pulumi.Input; /** @@ -471,12 +454,10 @@ export interface GlobalForwardingRuleState { */ selfLink?: pulumi.Input; /** - * The URL of the target resource to receive the matched traffic. - * The forwarded traffic must be of a type appropriate to the target object. - * For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - * are valid. - * For global address with a purpose of PRIVATE_SERVICE_CONNECT and - * addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + * The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + * the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + * resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + * balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. */ target?: pulumi.Input; } @@ -520,22 +501,17 @@ export interface GlobalForwardingRuleArgs { */ ipVersion?: pulumi.Input; /** - * Labels to apply to this forwarding rule. A list of key->value pairs. + * Labels to apply to this rule. */ labels?: pulumi.Input<{[key: string]: pulumi.Input}>; /** - * This signifies what the GlobalForwardingRule will be used for. - * The value of INTERNAL_SELF_MANAGED means that this will be used for - * Internal Global HTTP(S) LB. The value of EXTERNAL means that this - * will be used for External Global Load Balancing (HTTP(S) LB, - * External TCP/UDP LB, SSL Proxy) - * Note: This field must be set "" if the global address is - * External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - * that this will be used for Global external HTTP(S) load balancers. - * Note: This field must be set "" if the global address is - * configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - * Default value is `EXTERNAL`. - * Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + * Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + * from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + * `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + * Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + * forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + * INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED */ loadBalancingScheme?: pulumi.Input; /** @@ -567,11 +543,9 @@ export interface GlobalForwardingRuleArgs { */ name?: pulumi.Input; /** - * This field is not used for external load balancing. - * For INTERNAL_SELF_MANAGED load balancing, this field - * identifies the network that the load balanced IP should belong to - * for this global forwarding rule. If this field is not specified, - * the default network will be used. + * This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + * field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + * specified, the default network will be used. */ network?: pulumi.Input; /** @@ -599,12 +573,10 @@ export interface GlobalForwardingRuleArgs { */ project?: pulumi.Input; /** - * The URL of the target resource to receive the matched traffic. - * The forwarded traffic must be of a type appropriate to the target object. - * For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - * are valid. - * For global address with a purpose of PRIVATE_SERVICE_CONNECT and - * addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + * The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + * the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + * resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + * balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. */ target: pulumi.Input; } diff --git a/sdk/nodejs/compute/instance.ts b/sdk/nodejs/compute/instance.ts index 4a011ef64f..5878f08352 100644 --- a/sdk/nodejs/compute/instance.ts +++ b/sdk/nodejs/compute/instance.ts @@ -106,8 +106,8 @@ export class Instance extends pulumi.CustomResource { */ public readonly advancedMachineFeatures!: pulumi.Output; /** - * If true, allows this prvider to stop the instance to update its properties. - * If you try to update a property that requires stopping the instance without setting this field, the update will fail. + * If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + * stopping the instance without setting this field, the update will fail. */ public readonly allowStoppingForUpdate!: pulumi.Output; /** @@ -138,8 +138,7 @@ export class Instance extends pulumi.CustomResource { */ public /*out*/ readonly currentStatus!: pulumi.Output; /** - * Enable deletion protection on this instance. Defaults to false. - * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + * Whether deletion protection is enabled on this instance. */ public readonly deletionProtection!: pulumi.Output; /** @@ -157,8 +156,7 @@ export class Instance extends pulumi.CustomResource { */ public readonly enableDisplay!: pulumi.Output; /** - * List of the type and count of accelerator cards attached to the instance. Structure documented below. - * **Note:** GPU accelerators can only be used with `onHostMaintenance` option set to TERMINATE. + * List of the type and count of accelerator cards attached to the instance. */ public readonly guestAccelerators!: pulumi.Output; /** @@ -195,16 +193,7 @@ export class Instance extends pulumi.CustomResource { */ public /*out*/ readonly metadataFingerprint!: pulumi.Output; /** - * An alternative to using the - * startup-script metadata key, except this one forces the instance to be recreated - * (thus re-running the script) if it is changed. This replaces the startup-script - * metadata key on the created instance and thus the two mechanisms are not - * allowed to be used simultaneously. Users are free to use either mechanism - the - * only distinction is that this separate attribute will cause a recreate on - * modification. On import, `metadataStartupScript` will not be set - if you - * choose to specify it you will see a diff immediately after import causing a - * destroy/recreate operation. If importing an instance and specifying this value - * is desired, you will need to modify your state file. + * Metadata startup scripts made available within the instance. */ public readonly metadataStartupScript!: pulumi.Output; /** @@ -395,8 +384,8 @@ export interface InstanceState { */ advancedMachineFeatures?: pulumi.Input; /** - * If true, allows this prvider to stop the instance to update its properties. - * If you try to update a property that requires stopping the instance without setting this field, the update will fail. + * If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + * stopping the instance without setting this field, the update will fail. */ allowStoppingForUpdate?: pulumi.Input; /** @@ -427,8 +416,7 @@ export interface InstanceState { */ currentStatus?: pulumi.Input; /** - * Enable deletion protection on this instance. Defaults to false. - * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + * Whether deletion protection is enabled on this instance. */ deletionProtection?: pulumi.Input; /** @@ -446,8 +434,7 @@ export interface InstanceState { */ enableDisplay?: pulumi.Input; /** - * List of the type and count of accelerator cards attached to the instance. Structure documented below. - * **Note:** GPU accelerators can only be used with `onHostMaintenance` option set to TERMINATE. + * List of the type and count of accelerator cards attached to the instance. */ guestAccelerators?: pulumi.Input[]>; /** @@ -484,16 +471,7 @@ export interface InstanceState { */ metadataFingerprint?: pulumi.Input; /** - * An alternative to using the - * startup-script metadata key, except this one forces the instance to be recreated - * (thus re-running the script) if it is changed. This replaces the startup-script - * metadata key on the created instance and thus the two mechanisms are not - * allowed to be used simultaneously. Users are free to use either mechanism - the - * only distinction is that this separate attribute will cause a recreate on - * modification. On import, `metadataStartupScript` will not be set - if you - * choose to specify it you will see a diff immediately after import causing a - * destroy/recreate operation. If importing an instance and specifying this value - * is desired, you will need to modify your state file. + * Metadata startup scripts made available within the instance. */ metadataStartupScript?: pulumi.Input; /** @@ -583,8 +561,8 @@ export interface InstanceArgs { */ advancedMachineFeatures?: pulumi.Input; /** - * If true, allows this prvider to stop the instance to update its properties. - * If you try to update a property that requires stopping the instance without setting this field, the update will fail. + * If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + * stopping the instance without setting this field, the update will fail. */ allowStoppingForUpdate?: pulumi.Input; /** @@ -607,8 +585,7 @@ export interface InstanceArgs { */ confidentialInstanceConfig?: pulumi.Input; /** - * Enable deletion protection on this instance. Defaults to false. - * **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + * Whether deletion protection is enabled on this instance. */ deletionProtection?: pulumi.Input; /** @@ -626,8 +603,7 @@ export interface InstanceArgs { */ enableDisplay?: pulumi.Input; /** - * List of the type and count of accelerator cards attached to the instance. Structure documented below. - * **Note:** GPU accelerators can only be used with `onHostMaintenance` option set to TERMINATE. + * List of the type and count of accelerator cards attached to the instance. */ guestAccelerators?: pulumi.Input[]>; /** @@ -652,16 +628,7 @@ export interface InstanceArgs { */ metadata?: pulumi.Input<{[key: string]: pulumi.Input}>; /** - * An alternative to using the - * startup-script metadata key, except this one forces the instance to be recreated - * (thus re-running the script) if it is changed. This replaces the startup-script - * metadata key on the created instance and thus the two mechanisms are not - * allowed to be used simultaneously. Users are free to use either mechanism - the - * only distinction is that this separate attribute will cause a recreate on - * modification. On import, `metadataStartupScript` will not be set - if you - * choose to specify it you will see a diff immediately after import causing a - * destroy/recreate operation. If importing an instance and specifying this value - * is desired, you will need to modify your state file. + * Metadata startup scripts made available within the instance. */ metadataStartupScript?: pulumi.Input; /** diff --git a/sdk/nodejs/compute/instanceFromMachineImage.ts b/sdk/nodejs/compute/instanceFromMachineImage.ts index 6a3f8be5e3..8492eb598c 100644 --- a/sdk/nodejs/compute/instanceFromMachineImage.ts +++ b/sdk/nodejs/compute/instanceFromMachineImage.ts @@ -7,15 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Manages a VM instance resource within GCE. For more information see - * [the official documentation](https://cloud.google.com/compute/docs/instances) - * and - * [API](https://cloud.google.com/compute/docs/reference/latest/instances). - * - * This resource is specifically to create a compute instance from a given - * `sourceMachineImage`. To create an instance without a machine image, use the - * `gcp.compute.Instance` resource. - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/compute/instanceFromTemplate.ts b/sdk/nodejs/compute/instanceFromTemplate.ts index f59ce0d646..2412387b0e 100644 --- a/sdk/nodejs/compute/instanceFromTemplate.ts +++ b/sdk/nodejs/compute/instanceFromTemplate.ts @@ -204,7 +204,8 @@ export class InstanceFromTemplate extends pulumi.CustomResource { */ public readonly scheduling!: pulumi.Output; /** - * The scratch disks attached to the instance. + * * `network_interface.alias_ip_range` + * * `network_interface.access_config` */ public readonly scratchDisks!: pulumi.Output; /** @@ -464,7 +465,8 @@ export interface InstanceFromTemplateState { */ scheduling?: pulumi.Input; /** - * The scratch disks attached to the instance. + * * `network_interface.alias_ip_range` + * * `network_interface.access_config` */ scratchDisks?: pulumi.Input[]>; /** @@ -607,7 +609,8 @@ export interface InstanceFromTemplateArgs { */ scheduling?: pulumi.Input; /** - * The scratch disks attached to the instance. + * * `network_interface.alias_ip_range` + * * `network_interface.access_config` */ scratchDisks?: pulumi.Input[]>; /** diff --git a/sdk/nodejs/compute/instanceGroup.ts b/sdk/nodejs/compute/instanceGroup.ts index 0ca322d1e1..3b6f2ebd0f 100644 --- a/sdk/nodejs/compute/instanceGroup.ts +++ b/sdk/nodejs/compute/instanceGroup.ts @@ -7,49 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Creates a group of dissimilar Compute Engine virtual machine instances. - * For more information, see [the official documentation](https://cloud.google.com/compute/docs/instance-groups/#unmanaged_instance_groups) - * and [API](https://cloud.google.com/compute/docs/reference/latest/instanceGroups) - * - * ## Example Usage - * ### Empty Instance Group - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const test = new gcp.compute.InstanceGroup("test", { - * description: "Test instance group", - * zone: "us-central1-a", - * network: google_compute_network["default"].id, - * }); - * ``` - * ### Example Usage - With instances and named ports - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const webservers = new gcp.compute.InstanceGroup("webservers", { - * description: "Test instance group", - * instances: [ - * google_compute_instance.test.id, - * google_compute_instance.test2.id, - * ], - * namedPorts: [ - * { - * name: "http", - * port: 8080, - * }, - * { - * name: "https", - * port: 8443, - * }, - * ], - * zone: "us-central1-a", - * }); - * ``` - * * ## Import * * Instance group can be imported using the `zone` and `name` with an optional `project`, e.g. diff --git a/sdk/nodejs/compute/instanceGroupManager.ts b/sdk/nodejs/compute/instanceGroupManager.ts index d5be49e113..a0bcf1ac8c 100644 --- a/sdk/nodejs/compute/instanceGroupManager.ts +++ b/sdk/nodejs/compute/instanceGroupManager.ts @@ -236,9 +236,8 @@ export class InstanceGroupManager extends pulumi.CustomResource { */ public readonly versions!: pulumi.Output; /** - * Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, this provider will - * continue trying until it times out. + * Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. */ public readonly waitForInstances!: pulumi.Output; /** @@ -435,9 +434,8 @@ export interface InstanceGroupManagerState { */ versions?: pulumi.Input[]>; /** - * Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, this provider will - * continue trying until it times out. + * Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. */ waitForInstances?: pulumi.Input; /** @@ -545,9 +543,8 @@ export interface InstanceGroupManagerArgs { */ versions: pulumi.Input[]>; /** - * Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, this provider will - * continue trying until it times out. + * Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. */ waitForInstances?: pulumi.Input; /** diff --git a/sdk/nodejs/compute/instanceTemplate.ts b/sdk/nodejs/compute/instanceTemplate.ts index 7693eb31d2..355b145bd0 100644 --- a/sdk/nodejs/compute/instanceTemplate.ts +++ b/sdk/nodejs/compute/instanceTemplate.ts @@ -7,137 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Manages a VM instance template resource within GCE. For more information see - * [the official documentation](https://cloud.google.com/compute/docs/instance-templates) - * and - * [API](https://cloud.google.com/compute/docs/reference/latest/instanceTemplates). - * - * ## Example Usage - * ### Automatic Envoy Deployment - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const default = gcp.compute.getDefaultServiceAccount({}); - * const myImage = gcp.compute.getImage({ - * family: "debian-11", - * project: "debian-cloud", - * }); - * const foobar = new gcp.compute.InstanceTemplate("foobar", { - * machineType: "e2-medium", - * canIpForward: false, - * tags: [ - * "foo", - * "bar", - * ], - * disks: [{ - * sourceImage: myImage.then(myImage => myImage.selfLink), - * autoDelete: true, - * boot: true, - * }], - * networkInterfaces: [{ - * network: "default", - * }], - * scheduling: { - * preemptible: false, - * automaticRestart: true, - * }, - * metadata: { - * "gce-software-declaration": `{ - * "softwareRecipes": [{ - * "name": "install-gce-service-proxy-agent", - * "desired_state": "INSTALLED", - * "installSteps": [{ - * "scriptRun": { - * "script": "#! /bin/bash\nZONE=$(curl --silent http://metadata.google.internal/computeMetadata/v1/instance/zone -H Metadata-Flavor:Google | cut -d/ -f4 )\nexport SERVICE_PROXY_AGENT_DIRECTORY=$(mktemp -d)\nsudo gsutil cp gs://gce-service-proxy-"$ZONE"/service-proxy-agent/releases/service-proxy-agent-0.2.tgz "$SERVICE_PROXY_AGENT_DIRECTORY" || sudo gsutil cp gs://gce-service-proxy/service-proxy-agent/releases/service-proxy-agent-0.2.tgz "$SERVICE_PROXY_AGENT_DIRECTORY"\nsudo tar -xzf "$SERVICE_PROXY_AGENT_DIRECTORY"/service-proxy-agent-0.2.tgz -C "$SERVICE_PROXY_AGENT_DIRECTORY"\n"$SERVICE_PROXY_AGENT_DIRECTORY"/service-proxy-agent/service-proxy-agent-bootstrap.sh" - * } - * }] - * }] - * } - * `, - * "gce-service-proxy": `{ - * "api-version": "0.2", - * "proxy-spec": { - * "proxy-port": 15001, - * "network": "my-network", - * "tracing": "ON", - * "access-log": "/var/log/envoy/access.log" - * } - * "service": { - * "serving-ports": [80, 81] - * }, - * "labels": { - * "app_name": "bookserver_app", - * "app_version": "STABLE" - * } - * } - * `, - * "enable-guest-attributes": "true", - * "enable-osconfig": "true", - * }, - * serviceAccount: { - * email: _default.then(_default => _default.email), - * scopes: ["cloud-platform"], - * }, - * labels: { - * "gce-service-proxy": "on", - * }, - * }); - * ``` - * ## Deploying the Latest Image - * - * A common way to use instance templates and managed instance groups is to deploy the - * latest image in a family, usually the latest build of your application. There are two - * ways to do this in the provider, and they have their pros and cons. The difference ends - * up being in how "latest" is interpreted. You can either deploy the latest image available - * when the provider runs, or you can have each instance check what the latest image is when - * it's being created, either as part of a scaling event or being rebuilt by the instance - * group manager. - * - * If you're not sure, we recommend deploying the latest image available when the provider runs, - * because this means all the instances in your group will be based on the same image, always, - * and means that no upgrades or changes to your instances happen outside of a `pulumi up`. - * You can achieve this by using the `gcp.compute.Image` - * data source, which will retrieve the latest image on every `pulumi apply`, and will update - * the template to use that specific image: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const myImage = gcp.compute.getImage({ - * family: "debian-11", - * project: "debian-cloud", - * }); - * const instanceTemplate = new gcp.compute.InstanceTemplate("instanceTemplate", { - * namePrefix: "instance-template-", - * machineType: "e2-medium", - * region: "us-central1", - * disks: [{ - * sourceImage: myImage.then(myImage => myImage.selfLink), - * }], - * }); - * ``` - * - * To have instances update to the latest on every scaling event or instance re-creation, - * use the family as the image for the disk, and it will use GCP's default behavior, setting - * the image for the template to the family: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const instanceTemplate = new gcp.compute.InstanceTemplate("instanceTemplate", { - * disks: [{ - * sourceImage: "debian-cloud/debian-11", - * }], - * machineType: "e2-medium", - * namePrefix: "instance-template-", - * region: "us-central1", - * }); - * ``` - * * ## Import * * Instance templates can be imported using any of these accepted formats @@ -252,8 +121,7 @@ export class InstanceTemplate extends pulumi.CustomResource { */ public readonly minCpuPlatform!: pulumi.Output; /** - * The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. + * The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. */ public readonly name!: pulumi.Output; /** @@ -475,8 +343,7 @@ export interface InstanceTemplateState { */ minCpuPlatform?: pulumi.Input; /** - * The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. + * The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. */ name?: pulumi.Input; /** @@ -614,8 +481,7 @@ export interface InstanceTemplateArgs { */ minCpuPlatform?: pulumi.Input; /** - * The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. + * The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. */ name?: pulumi.Input; /** diff --git a/sdk/nodejs/compute/machineImage.ts b/sdk/nodejs/compute/machineImage.ts index 5c5540fdc8..b19a10edee 100644 --- a/sdk/nodejs/compute/machineImage.ts +++ b/sdk/nodejs/compute/machineImage.ts @@ -7,16 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Represents a Machine Image resource. Machine images store all the configuration, - * metadata, permissions, and data from one or more disks required to create a - * Virtual machine (VM) instance. - * - * To get more information about MachineImage, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/machineImages) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/compute/docs/machine-images) - * * ## Example Usage * ### Machine Image Basic * diff --git a/sdk/nodejs/compute/machineImageIamBinding.ts b/sdk/nodejs/compute/machineImageIamBinding.ts index 7ed2d469ba..c4dbbb6aaa 100644 --- a/sdk/nodejs/compute/machineImageIamBinding.ts +++ b/sdk/nodejs/compute/machineImageIamBinding.ts @@ -7,136 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - * - * * `gcp.compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - * * `gcp.compute.MachineImageIamBinding`: 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 machineimage are preserved. - * * `gcp.compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - * - * > **Note:** `gcp.compute.MachineImageIamPolicy` **cannot** be used in conjunction with `gcp.compute.MachineImageIamBinding` and `gcp.compute.MachineImageIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.compute.MachineImageIamBinding` resources **can be** used in conjunction with `gcp.compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - * ## google\_compute\_machine\_image\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/compute.admin", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.compute.MachineImageIamPolicy("policy", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/compute.admin", - * members: ["user:jane@example.com"], - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }], - * }); - * const policy = new gcp.compute.MachineImageIamPolicy("policy", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * ## google\_compute\_machine\_image\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.compute.MachineImageIamBinding("binding", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * role: "roles/compute.admin", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.compute.MachineImageIamBinding("binding", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * role: "roles/compute.admin", - * members: ["user:jane@example.com"], - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }, { - * provider: google_beta, - * }); - * ``` - * ## google\_compute\_machine\_image\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.compute.MachineImageIamMember("member", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * role: "roles/compute.admin", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.compute.MachineImageIamMember("member", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * role: "roles/compute.admin", - * member: "user:jane@example.com", - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/compute/machineImageIamMember.ts b/sdk/nodejs/compute/machineImageIamMember.ts index 0c44dcad7b..637e13a096 100644 --- a/sdk/nodejs/compute/machineImageIamMember.ts +++ b/sdk/nodejs/compute/machineImageIamMember.ts @@ -7,136 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - * - * * `gcp.compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - * * `gcp.compute.MachineImageIamBinding`: 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 machineimage are preserved. - * * `gcp.compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - * - * > **Note:** `gcp.compute.MachineImageIamPolicy` **cannot** be used in conjunction with `gcp.compute.MachineImageIamBinding` and `gcp.compute.MachineImageIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.compute.MachineImageIamBinding` resources **can be** used in conjunction with `gcp.compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - * ## google\_compute\_machine\_image\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/compute.admin", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.compute.MachineImageIamPolicy("policy", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/compute.admin", - * members: ["user:jane@example.com"], - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }], - * }); - * const policy = new gcp.compute.MachineImageIamPolicy("policy", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * ## google\_compute\_machine\_image\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.compute.MachineImageIamBinding("binding", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * role: "roles/compute.admin", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.compute.MachineImageIamBinding("binding", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * role: "roles/compute.admin", - * members: ["user:jane@example.com"], - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }, { - * provider: google_beta, - * }); - * ``` - * ## google\_compute\_machine\_image\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.compute.MachineImageIamMember("member", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * role: "roles/compute.admin", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.compute.MachineImageIamMember("member", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * role: "roles/compute.admin", - * member: "user:jane@example.com", - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/compute/machineImageIamPolicy.ts b/sdk/nodejs/compute/machineImageIamPolicy.ts index 8f76ba7a6f..a9415a62a3 100644 --- a/sdk/nodejs/compute/machineImageIamPolicy.ts +++ b/sdk/nodejs/compute/machineImageIamPolicy.ts @@ -5,136 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - * - * * `gcp.compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - * * `gcp.compute.MachineImageIamBinding`: 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 machineimage are preserved. - * * `gcp.compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - * - * > **Note:** `gcp.compute.MachineImageIamPolicy` **cannot** be used in conjunction with `gcp.compute.MachineImageIamBinding` and `gcp.compute.MachineImageIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.compute.MachineImageIamBinding` resources **can be** used in conjunction with `gcp.compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - * ## google\_compute\_machine\_image\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/compute.admin", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.compute.MachineImageIamPolicy("policy", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/compute.admin", - * members: ["user:jane@example.com"], - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }], - * }); - * const policy = new gcp.compute.MachineImageIamPolicy("policy", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * ## google\_compute\_machine\_image\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.compute.MachineImageIamBinding("binding", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * role: "roles/compute.admin", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.compute.MachineImageIamBinding("binding", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * role: "roles/compute.admin", - * members: ["user:jane@example.com"], - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }, { - * provider: google_beta, - * }); - * ``` - * ## google\_compute\_machine\_image\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.compute.MachineImageIamMember("member", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * role: "roles/compute.admin", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.compute.MachineImageIamMember("member", { - * project: google_compute_machine_image.image.project, - * machineImage: google_compute_machine_image.image.name, - * role: "roles/compute.admin", - * member: "user:jane@example.com", - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/compute/nodeGroup.ts b/sdk/nodejs/compute/nodeGroup.ts index 895617b5aa..9932d0db98 100644 --- a/sdk/nodejs/compute/nodeGroup.ts +++ b/sdk/nodejs/compute/nodeGroup.ts @@ -7,19 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Represents a NodeGroup resource to manage a group of sole-tenant nodes. - * - * To get more information about NodeGroup, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups) - * * How-to Guides - * * [Sole-Tenant Nodes](https://cloud.google.com/compute/docs/nodes/) - * - * > **Warning:** Due to limitations of the API, this provider cannot update the - * number of nodes in a node group and changes to node group size either - * through provider config or through external changes will cause - * the provider to delete and recreate the node group. - * * ## Example Usage * ### Node Group Basic * @@ -32,8 +19,8 @@ import * as utilities from "../utilities"; * nodeType: "n1-node-96-624", * }); * const nodes = new gcp.compute.NodeGroup("nodes", { - * zone: "us-central1-a", - * description: "example google_compute_node_group for the Google Provider", + * zone: "us-central1-f", + * description: "example google_compute_node_group for Terraform Google Provider", * size: 1, * nodeTemplate: soletenant_tmpl.id, * }); @@ -49,8 +36,8 @@ import * as utilities from "../utilities"; * nodeType: "n1-node-96-624", * }); * const nodes = new gcp.compute.NodeGroup("nodes", { - * zone: "us-central1-a", - * description: "example google_compute_node_group for Google Provider", + * zone: "us-central1-f", + * description: "example google_compute_node_group for Terraform Google Provider", * maintenancePolicy: "RESTART_IN_PLACE", * maintenanceWindow: { * startTime: "08:00", @@ -64,6 +51,34 @@ import * as utilities from "../utilities"; * }, * }); * ``` + * ### Node Group Share Settings + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const guestProject = new gcp.organizations.Project("guestProject", { + * projectId: "project-id", + * orgId: "123456789", + * }); + * const soletenant_tmpl = new gcp.compute.NodeTemplate("soletenant-tmpl", { + * region: "us-central1", + * nodeType: "n1-node-96-624", + * }); + * const nodes = new gcp.compute.NodeGroup("nodes", { + * zone: "us-central1-f", + * description: "example google_compute_node_group for Terraform Google Provider", + * size: 1, + * nodeTemplate: soletenant_tmpl.id, + * shareSettings: { + * shareType: "SPECIFIC_PROJECTS", + * projectMaps: [{ + * id: guestProject.projectId, + * projectId: guestProject.projectId, + * }], + * }, + * }); + * ``` * * ## Import * @@ -157,6 +172,11 @@ export class NodeGroup extends pulumi.CustomResource { * The URI of the created resource. */ public /*out*/ readonly selfLink!: pulumi.Output; + /** + * Share settings for the node group. + * Structure is documented below. + */ + public readonly shareSettings!: pulumi.Output; /** * The total number of nodes in the node group. One of `initialSize` or `size` must be specified. */ @@ -189,6 +209,7 @@ export class NodeGroup extends pulumi.CustomResource { resourceInputs["nodeTemplate"] = state ? state.nodeTemplate : undefined; resourceInputs["project"] = state ? state.project : undefined; resourceInputs["selfLink"] = state ? state.selfLink : undefined; + resourceInputs["shareSettings"] = state ? state.shareSettings : undefined; resourceInputs["size"] = state ? state.size : undefined; resourceInputs["zone"] = state ? state.zone : undefined; } else { @@ -204,6 +225,7 @@ export class NodeGroup extends pulumi.CustomResource { resourceInputs["name"] = args ? args.name : undefined; resourceInputs["nodeTemplate"] = args ? args.nodeTemplate : undefined; resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["shareSettings"] = args ? args.shareSettings : undefined; resourceInputs["size"] = args ? args.size : undefined; resourceInputs["zone"] = args ? args.zone : undefined; resourceInputs["creationTimestamp"] = undefined /*out*/; @@ -262,6 +284,11 @@ export interface NodeGroupState { * The URI of the created resource. */ selfLink?: pulumi.Input; + /** + * Share settings for the node group. + * Structure is documented below. + */ + shareSettings?: pulumi.Input; /** * The total number of nodes in the node group. One of `initialSize` or `size` must be specified. */ @@ -312,6 +339,11 @@ export interface NodeGroupArgs { * If it is not provided, the provider project is used. */ project?: pulumi.Input; + /** + * Share settings for the node group. + * Structure is documented below. + */ + shareSettings?: pulumi.Input; /** * The total number of nodes in the node group. One of `initialSize` or `size` must be specified. */ diff --git a/sdk/nodejs/compute/organizationSecurityPolicy.ts b/sdk/nodejs/compute/organizationSecurityPolicy.ts index ccec7025a1..7e47359f76 100644 --- a/sdk/nodejs/compute/organizationSecurityPolicy.ts +++ b/sdk/nodejs/compute/organizationSecurityPolicy.ts @@ -5,28 +5,7 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Organization security policies are used to control incoming/outgoing traffic. - * - * To get more information about OrganizationSecurityPolicy, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies) - * * How-to Guides - * * [Creating a firewall policy](https://cloud.google.com/vpc/docs/using-firewall-policies#create-policy) - * * ## Example Usage - * ### Organization Security Policy Basic - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const policy = new gcp.compute.OrganizationSecurityPolicy("policy", { - * displayName: "tf-test", - * parent: "organizations/123456789", - * }, { - * provider: google_beta, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/compute/organizationSecurityPolicyAssociation.ts b/sdk/nodejs/compute/organizationSecurityPolicyAssociation.ts index 1aaf191669..844ef99c20 100644 --- a/sdk/nodejs/compute/organizationSecurityPolicyAssociation.ts +++ b/sdk/nodejs/compute/organizationSecurityPolicyAssociation.ts @@ -5,66 +5,7 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * An association for the OrganizationSecurityPolicy. - * - * To get more information about OrganizationSecurityPolicyAssociation, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addAssociation) - * * How-to Guides - * * [Associating a policy with the organization or folder](https://cloud.google.com/vpc/docs/using-firewall-policies#associate) - * * ## Example Usage - * ### Organization Security Policy Association Basic - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const securityPolicyTarget = new gcp.organizations.Folder("securityPolicyTarget", { - * displayName: "tf-test-secpol", - * parent: "organizations/123456789", - * }, { - * provider: google_beta, - * }); - * const policyOrganizationSecurityPolicy = new gcp.compute.OrganizationSecurityPolicy("policyOrganizationSecurityPolicy", { - * displayName: "tf-test", - * parent: securityPolicyTarget.name, - * }, { - * provider: google_beta, - * }); - * const policyOrganizationSecurityPolicyRule = new gcp.compute.OrganizationSecurityPolicyRule("policyOrganizationSecurityPolicyRule", { - * policyId: policyOrganizationSecurityPolicy.id, - * action: "allow", - * direction: "INGRESS", - * enableLogging: true, - * match: { - * config: { - * srcIpRanges: [ - * "192.168.0.0/16", - * "10.0.0.0/8", - * ], - * layer4Configs: [ - * { - * ipProtocol: "tcp", - * ports: ["22"], - * }, - * { - * ipProtocol: "icmp", - * }, - * ], - * }, - * }, - * priority: 100, - * }, { - * provider: google_beta, - * }); - * const policyOrganizationSecurityPolicyAssociation = new gcp.compute.OrganizationSecurityPolicyAssociation("policyOrganizationSecurityPolicyAssociation", { - * attachmentId: policyOrganizationSecurityPolicy.parent, - * policyId: policyOrganizationSecurityPolicy.id, - * }, { - * provider: google_beta, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/compute/organizationSecurityPolicyRule.ts b/sdk/nodejs/compute/organizationSecurityPolicyRule.ts index 2db5de7890..90e4d263f7 100644 --- a/sdk/nodejs/compute/organizationSecurityPolicyRule.ts +++ b/sdk/nodejs/compute/organizationSecurityPolicyRule.ts @@ -7,54 +7,7 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * A rule for the OrganizationSecurityPolicy. - * - * To get more information about OrganizationSecurityPolicyRule, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addRule) - * * How-to Guides - * * [Creating firewall rules](https://cloud.google.com/vpc/docs/using-firewall-policies#create-rules) - * * ## Example Usage - * ### Organization Security Policy Rule Basic - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const policyOrganizationSecurityPolicy = new gcp.compute.OrganizationSecurityPolicy("policyOrganizationSecurityPolicy", { - * displayName: "tf-test", - * parent: "organizations/123456789", - * }, { - * provider: google_beta, - * }); - * const policyOrganizationSecurityPolicyRule = new gcp.compute.OrganizationSecurityPolicyRule("policyOrganizationSecurityPolicyRule", { - * policyId: policyOrganizationSecurityPolicy.id, - * action: "allow", - * direction: "INGRESS", - * enableLogging: true, - * match: { - * config: { - * srcIpRanges: [ - * "192.168.0.0/16", - * "10.0.0.0/8", - * ], - * layer4Configs: [ - * { - * ipProtocol: "tcp", - * ports: ["22"], - * }, - * { - * ipProtocol: "icmp", - * }, - * ], - * }, - * }, - * priority: 100, - * }, { - * provider: google_beta, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/compute/perInstanceConfig.ts b/sdk/nodejs/compute/perInstanceConfig.ts index b77b005eab..3bb91e48a3 100644 --- a/sdk/nodejs/compute/perInstanceConfig.ts +++ b/sdk/nodejs/compute/perInstanceConfig.ts @@ -17,71 +17,6 @@ import * as utilities from "../utilities"; * * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs) * * ## Example Usage - * ### Stateful Igm - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const myImage = gcp.compute.getImage({ - * family: "debian-11", - * project: "debian-cloud", - * }); - * const igm_basic = new gcp.compute.InstanceTemplate("igm-basic", { - * machineType: "e2-medium", - * canIpForward: false, - * tags: [ - * "foo", - * "bar", - * ], - * disks: [{ - * sourceImage: myImage.then(myImage => myImage.selfLink), - * autoDelete: true, - * boot: true, - * }], - * networkInterfaces: [{ - * network: "default", - * }], - * serviceAccount: { - * scopes: [ - * "userinfo-email", - * "compute-ro", - * "storage-ro", - * ], - * }, - * }); - * const igm_no_tp = new gcp.compute.InstanceGroupManager("igm-no-tp", { - * description: "Test instance group manager", - * versions: [{ - * name: "prod", - * instanceTemplate: igm_basic.selfLink, - * }], - * baseInstanceName: "igm-no-tp", - * zone: "us-central1-c", - * targetSize: 2, - * }); - * const _default = new gcp.compute.Disk("default", { - * type: "pd-ssd", - * zone: google_compute_instance_group_manager.igm.zone, - * image: "debian-11-bullseye-v20220719", - * physicalBlockSizeBytes: 4096, - * }); - * const withDisk = new gcp.compute.PerInstanceConfig("withDisk", { - * zone: google_compute_instance_group_manager.igm.zone, - * instanceGroupManager: google_compute_instance_group_manager.igm.name, - * preservedState: { - * metadata: { - * foo: "bar", - * instance_template: igm_basic.selfLink, - * }, - * disks: [{ - * deviceName: "my-stateful-disk", - * source: _default.id, - * mode: "READ_ONLY", - * }], - * }, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/compute/projectMetadataItem.ts b/sdk/nodejs/compute/projectMetadataItem.ts index bb7343072e..f97bccb059 100644 --- a/sdk/nodejs/compute/projectMetadataItem.ts +++ b/sdk/nodejs/compute/projectMetadataItem.ts @@ -5,11 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Manages a single key/value pair on metadata common to all instances for - * a project in GCE. Using `gcp.compute.ProjectMetadataItem` lets you - * manage a single key/value setting in the provider rather than the entire - * project metadata map. - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/compute/regionBackendService.ts b/sdk/nodejs/compute/regionBackendService.ts index 8904384a2a..d8027dd437 100644 --- a/sdk/nodejs/compute/regionBackendService.ts +++ b/sdk/nodejs/compute/regionBackendService.ts @@ -88,10 +88,8 @@ export class RegionBackendService extends pulumi.CustomResource { */ public readonly connectionDrainingTimeoutSec!: pulumi.Output; /** - * Connection Tracking configuration for this BackendService. - * This is available only for Layer 4 Internal Load Balancing and - * Network Load Balancing. - * Structure is documented below. + * Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + * and Network Load Balancing. */ public readonly connectionTrackingPolicy!: pulumi.Output; /** @@ -341,10 +339,8 @@ export interface RegionBackendServiceState { */ connectionDrainingTimeoutSec?: pulumi.Input; /** - * Connection Tracking configuration for this BackendService. - * This is available only for Layer 4 Internal Load Balancing and - * Network Load Balancing. - * Structure is documented below. + * Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + * and Network Load Balancing. */ connectionTrackingPolicy?: pulumi.Input; /** @@ -518,10 +514,8 @@ export interface RegionBackendServiceArgs { */ connectionDrainingTimeoutSec?: pulumi.Input; /** - * Connection Tracking configuration for this BackendService. - * This is available only for Layer 4 Internal Load Balancing and - * Network Load Balancing. - * Structure is documented below. + * Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + * and Network Load Balancing. */ connectionTrackingPolicy?: pulumi.Input; /** diff --git a/sdk/nodejs/compute/regionDisk.ts b/sdk/nodejs/compute/regionDisk.ts index bf34f64a3d..4c4fb0a6c8 100644 --- a/sdk/nodejs/compute/regionDisk.ts +++ b/sdk/nodejs/compute/regionDisk.ts @@ -7,31 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Persistent disks are durable storage devices that function similarly to - * the physical disks in a desktop or a server. Compute Engine manages the - * hardware behind these devices to ensure data redundancy and optimize - * performance for you. Persistent disks are available as either standard - * hard disk drives (HDD) or solid-state drives (SSD). - * - * Persistent disks are located independently from your virtual machine - * instances, so you can detach or move persistent disks to keep your data - * even after you delete your instances. Persistent disk performance scales - * automatically with size, so you can resize your existing persistent disks - * or add more persistent disks to an instance to meet your performance and - * storage space requirements. - * - * Add a persistent disk to your instance when you need reliable and - * affordable storage with consistent performance characteristics. - * - * To get more information about RegionDisk, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionDisks) - * * How-to Guides - * * [Adding or Resizing Regional Persistent Disks](https://cloud.google.com/compute/docs/disks/regional-persistent-disk) - * - * > **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Region Disk Basic * diff --git a/sdk/nodejs/compute/regionDiskResourcePolicyAttachment.ts b/sdk/nodejs/compute/regionDiskResourcePolicyAttachment.ts index 3055719802..79ff890914 100644 --- a/sdk/nodejs/compute/regionDiskResourcePolicyAttachment.ts +++ b/sdk/nodejs/compute/regionDiskResourcePolicyAttachment.ts @@ -5,11 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Adds existing resource policies to a disk. You can only add one policy - * which will be applied to this disk for scheduling snapshot creation. - * - * > **Note:** This resource does not support zonal disks (`gcp.compute.Disk`). For zonal disks, please refer to the `gcp.compute.DiskResourcePolicyAttachment` resource. - * * ## Example Usage * ### Region Disk Resource Policy Attachment Basic * diff --git a/sdk/nodejs/compute/regionInstanceGroupManager.ts b/sdk/nodejs/compute/regionInstanceGroupManager.ts index fffb64246d..1fd93be1b0 100644 --- a/sdk/nodejs/compute/regionInstanceGroupManager.ts +++ b/sdk/nodejs/compute/regionInstanceGroupManager.ts @@ -241,9 +241,8 @@ export class RegionInstanceGroupManager extends pulumi.CustomResource { */ public readonly versions!: pulumi.Output; /** - * Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, the provider will - * continue trying until it times out. + * Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. */ public readonly waitForInstances!: pulumi.Output; /** @@ -449,9 +448,8 @@ export interface RegionInstanceGroupManagerState { */ versions?: pulumi.Input[]>; /** - * Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, the provider will - * continue trying until it times out. + * Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. */ waitForInstances?: pulumi.Input; /** @@ -567,9 +565,8 @@ export interface RegionInstanceGroupManagerArgs { */ versions: pulumi.Input[]>; /** - * Whether to wait for all instances to be created/updated before - * returning. Note that if this is set to true and the operation does not succeed, the provider will - * continue trying until it times out. + * Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + * operation does not succeed, Terraform will continue trying until it times out. */ waitForInstances?: pulumi.Input; /** diff --git a/sdk/nodejs/compute/regionNetworkEndpointGroup.ts b/sdk/nodejs/compute/regionNetworkEndpointGroup.ts index 802ac7aa0c..a699473992 100644 --- a/sdk/nodejs/compute/regionNetworkEndpointGroup.ts +++ b/sdk/nodejs/compute/regionNetworkEndpointGroup.ts @@ -9,6 +9,10 @@ import * as utilities from "../utilities"; /** * A regional NEG that can support Serverless Products. * + * Recreating a region network endpoint group that's in use by another resource will give a + * `resourceInUseByAnotherResource` error. Use `lifecycle.create_before_destroy` + * to avoid this type of error. + * * To get more information about RegionNetworkEndpointGroup, see: * * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/regionNetworkEndpointGroups) diff --git a/sdk/nodejs/compute/regionPerInstanceConfig.ts b/sdk/nodejs/compute/regionPerInstanceConfig.ts index d7d5a13894..40b3e04ffe 100644 --- a/sdk/nodejs/compute/regionPerInstanceConfig.ts +++ b/sdk/nodejs/compute/regionPerInstanceConfig.ts @@ -18,76 +18,6 @@ import * as utilities from "../utilities"; * * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs) * * ## Example Usage - * ### Stateful Rigm - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const myImage = gcp.compute.getImage({ - * family: "debian-11", - * project: "debian-cloud", - * }); - * const igm_basic = new gcp.compute.InstanceTemplate("igm-basic", { - * machineType: "e2-medium", - * canIpForward: false, - * tags: [ - * "foo", - * "bar", - * ], - * disks: [{ - * sourceImage: myImage.then(myImage => myImage.selfLink), - * autoDelete: true, - * boot: true, - * }], - * networkInterfaces: [{ - * network: "default", - * }], - * serviceAccount: { - * scopes: [ - * "userinfo-email", - * "compute-ro", - * "storage-ro", - * ], - * }, - * }); - * const rigm = new gcp.compute.RegionInstanceGroupManager("rigm", { - * description: "Demo test instance group manager", - * versions: [{ - * name: "prod", - * instanceTemplate: igm_basic.selfLink, - * }], - * updatePolicy: { - * type: "OPPORTUNISTIC", - * instanceRedistributionType: "NONE", - * minimalAction: "RESTART", - * }, - * baseInstanceName: "rigm", - * region: "us-central1", - * targetSize: 2, - * }); - * const _default = new gcp.compute.Disk("default", { - * type: "pd-ssd", - * zone: "us-central1-a", - * image: "debian-11-bullseye-v20220719", - * physicalBlockSizeBytes: 4096, - * }); - * const withDisk = new gcp.compute.RegionPerInstanceConfig("withDisk", { - * region: google_compute_region_instance_group_manager.igm.region, - * regionInstanceGroupManager: rigm.name, - * preservedState: { - * metadata: { - * foo: "bar", - * instance_template: igm_basic.selfLink, - * }, - * disks: [{ - * deviceName: "my-stateful-disk", - * source: _default.id, - * mode: "READ_ONLY", - * }], - * }, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/compute/regionSslCertificate.ts b/sdk/nodejs/compute/regionSslCertificate.ts index 894bc2502b..6dd68649d4 100644 --- a/sdk/nodejs/compute/regionSslCertificate.ts +++ b/sdk/nodejs/compute/regionSslCertificate.ts @@ -5,19 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * A RegionSslCertificate resource, used for HTTPS load balancing. This resource - * provides a mechanism to upload an SSL key and certificate to - * the load balancer to serve secure connections from the user. - * - * To get more information about RegionSslCertificate, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionSslCertificates) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates) - * - * > **Warning:** All arguments including `certificate` and `privateKey` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Region Ssl Certificate Basic * diff --git a/sdk/nodejs/compute/routerNat.ts b/sdk/nodejs/compute/routerNat.ts index 3a120b2dfa..b1245dd66a 100644 --- a/sdk/nodejs/compute/routerNat.ts +++ b/sdk/nodejs/compute/routerNat.ts @@ -267,6 +267,11 @@ export class RouterNat extends pulumi.CustomResource { * Defaults to 1200s if not set. */ public readonly tcpEstablishedIdleTimeoutSec!: pulumi.Output; + /** + * Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + * Defaults to 120s if not set. + */ + public readonly tcpTimeWaitTimeoutSec!: pulumi.Output; /** * Timeout (in seconds) for TCP transitory connections. * Defaults to 30s if not set. @@ -307,6 +312,7 @@ export class RouterNat extends pulumi.CustomResource { resourceInputs["sourceSubnetworkIpRangesToNat"] = state ? state.sourceSubnetworkIpRangesToNat : undefined; resourceInputs["subnetworks"] = state ? state.subnetworks : undefined; resourceInputs["tcpEstablishedIdleTimeoutSec"] = state ? state.tcpEstablishedIdleTimeoutSec : undefined; + resourceInputs["tcpTimeWaitTimeoutSec"] = state ? state.tcpTimeWaitTimeoutSec : undefined; resourceInputs["tcpTransitoryIdleTimeoutSec"] = state ? state.tcpTransitoryIdleTimeoutSec : undefined; resourceInputs["udpIdleTimeoutSec"] = state ? state.udpIdleTimeoutSec : undefined; } else { @@ -337,6 +343,7 @@ export class RouterNat extends pulumi.CustomResource { resourceInputs["sourceSubnetworkIpRangesToNat"] = args ? args.sourceSubnetworkIpRangesToNat : undefined; resourceInputs["subnetworks"] = args ? args.subnetworks : undefined; resourceInputs["tcpEstablishedIdleTimeoutSec"] = args ? args.tcpEstablishedIdleTimeoutSec : undefined; + resourceInputs["tcpTimeWaitTimeoutSec"] = args ? args.tcpTimeWaitTimeoutSec : undefined; resourceInputs["tcpTransitoryIdleTimeoutSec"] = args ? args.tcpTransitoryIdleTimeoutSec : undefined; resourceInputs["udpIdleTimeoutSec"] = args ? args.udpIdleTimeoutSec : undefined; } @@ -446,6 +453,11 @@ export interface RouterNatState { * Defaults to 1200s if not set. */ tcpEstablishedIdleTimeoutSec?: pulumi.Input; + /** + * Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + * Defaults to 120s if not set. + */ + tcpTimeWaitTimeoutSec?: pulumi.Input; /** * Timeout (in seconds) for TCP transitory connections. * Defaults to 30s if not set. @@ -558,6 +570,11 @@ export interface RouterNatArgs { * Defaults to 1200s if not set. */ tcpEstablishedIdleTimeoutSec?: pulumi.Input; + /** + * Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + * Defaults to 120s if not set. + */ + tcpTimeWaitTimeoutSec?: pulumi.Input; /** * Timeout (in seconds) for TCP transitory connections. * Defaults to 30s if not set. diff --git a/sdk/nodejs/compute/securityPolicy.ts b/sdk/nodejs/compute/securityPolicy.ts index 7c70be0f43..e893664750 100644 --- a/sdk/nodejs/compute/securityPolicy.ts +++ b/sdk/nodejs/compute/securityPolicy.ts @@ -7,12 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * A Security Policy defines an IP blacklist or whitelist that protects load balanced Google Cloud services by denying or permitting traffic from specified IP ranges. For more information - * see the [official documentation](https://cloud.google.com/armor/docs/configure-security-policies) - * and the [API](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies). - * - * Security Policy is used by google_compute_backend_service. - * * ## Example Usage * * ```typescript @@ -111,6 +105,22 @@ import * as utilities from "../utilities"; * }, * ]}); * ``` + * + * ## Import + * + * Security policies can be imported using any of the following formats + * + * ```sh + * $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy projects/{{project}}/global/securityPolicies/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{project}}/{{name}} + * ``` + * + * ```sh + * $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{name}} + * ``` */ export class SecurityPolicy extends pulumi.CustomResource { /** @@ -177,7 +187,7 @@ export class SecurityPolicy extends pulumi.CustomResource { */ public readonly rules!: pulumi.Output; /** - * The URI of the created resourc + * The URI of the created resource. */ public /*out*/ readonly selfLink!: pulumi.Output; /** @@ -274,7 +284,7 @@ export interface SecurityPolicyState { */ rules?: pulumi.Input[]>; /** - * The URI of the created resourc + * The URI of the created resource. */ selfLink?: pulumi.Input; /** diff --git a/sdk/nodejs/compute/securityScanConfig.ts b/sdk/nodejs/compute/securityScanConfig.ts index 9b98614847..15291980d3 100644 --- a/sdk/nodejs/compute/securityScanConfig.ts +++ b/sdk/nodejs/compute/securityScanConfig.ts @@ -7,16 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * A ScanConfig resource contains the configurations to launch a scan. - * - * To get more information about ScanConfig, see: - * - * * [API documentation](https://cloud.google.com/security-scanner/docs/reference/rest/v1beta/projects.scanConfigs) - * * How-to Guides - * * [Using Cloud Security Scanner](https://cloud.google.com/security-scanner/docs/scanning) - * - * > **Warning:** All arguments including `authentication.google_account.password` and `authentication.custom_account.password` will be stored in the raw state as plain-text. - * * ## Example Usage * ### Scan Config Basic * @@ -28,7 +18,7 @@ import * as utilities from "../utilities"; * provider: google_beta, * }); * const scan_config = new gcp.compute.SecurityScanConfig("scan-config", { - * displayName: "scan-config", + * displayName: "terraform-scan-config", * startingUrls: [pulumi.interpolate`http://${scannerStaticIp.address}`], * targetPlatforms: ["COMPUTE"], * }, { diff --git a/sdk/nodejs/compute/snapshot.ts b/sdk/nodejs/compute/snapshot.ts index 0c5c2a7444..88e8f26673 100644 --- a/sdk/nodejs/compute/snapshot.ts +++ b/sdk/nodejs/compute/snapshot.ts @@ -7,28 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Represents a Persistent Disk Snapshot resource. - * - * Use snapshots to back up data from your persistent disks. Snapshots are - * different from public images and custom images, which are used primarily - * to create instances or configure instance templates. Snapshots are useful - * for periodic backup of the data on your persistent disks. You can create - * snapshots from persistent disks even while they are attached to running - * instances. - * - * Snapshots are incremental, so you can create regular snapshots on a - * persistent disk faster and at a much lower cost than if you regularly - * created a full image of the disk. - * - * To get more information about Snapshot, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/snapshots) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/compute/docs/disks/create-snapshots) - * - * > **Warning:** All arguments including `snapshot_encryption_key.raw_key` and `source_disk_encryption_key.raw_key` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Snapshot Basic * diff --git a/sdk/nodejs/compute/sslcertificate.ts b/sdk/nodejs/compute/sslcertificate.ts index 80b78a7a20..b1232cae9c 100644 --- a/sdk/nodejs/compute/sslcertificate.ts +++ b/sdk/nodejs/compute/sslcertificate.ts @@ -5,19 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * An SslCertificate resource, used for HTTPS load balancing. This resource - * provides a mechanism to upload an SSL key and certificate to - * the load balancer to serve secure connections from the user. - * - * To get more information about SslCertificate, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/sslCertificates) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates) - * - * > **Warning:** All arguments including `certificate` and `privateKey` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Ssl Certificate Basic * diff --git a/sdk/nodejs/compute/subnetwork.ts b/sdk/nodejs/compute/subnetwork.ts index 62e785eaaa..5265eec7cf 100644 --- a/sdk/nodejs/compute/subnetwork.ts +++ b/sdk/nodejs/compute/subnetwork.ts @@ -274,11 +274,12 @@ export class Subnetwork extends pulumi.CustomResource { */ public readonly role!: pulumi.Output; /** - * An array of configurations for secondary IP ranges for VM instances - * contained in this subnetwork. The primary IP of such VM must belong - * to the primary ipCidrRange of the subnetwork. The alias IPs may belong - * to either primary or secondary ranges. - * Structure is documented below. + * An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + * VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + * ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + * to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + * syntax: 'example=[]' For more details about this behavior, see [this + * section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). */ public readonly secondaryIpRanges!: pulumi.Output; /** @@ -463,11 +464,12 @@ export interface SubnetworkState { */ role?: pulumi.Input; /** - * An array of configurations for secondary IP ranges for VM instances - * contained in this subnetwork. The primary IP of such VM must belong - * to the primary ipCidrRange of the subnetwork. The alias IPs may belong - * to either primary or secondary ranges. - * Structure is documented below. + * An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + * VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + * ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + * to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + * syntax: 'example=[]' For more details about this behavior, see [this + * section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). */ secondaryIpRanges?: pulumi.Input[]>; /** @@ -563,11 +565,12 @@ export interface SubnetworkArgs { */ role?: pulumi.Input; /** - * An array of configurations for secondary IP ranges for VM instances - * contained in this subnetwork. The primary IP of such VM must belong - * to the primary ipCidrRange of the subnetwork. The alias IPs may belong - * to either primary or secondary ranges. - * Structure is documented below. + * An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + * VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + * ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + * to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + * syntax: 'example=[]' For more details about this behavior, see [this + * section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). */ secondaryIpRanges?: pulumi.Input[]>; /** diff --git a/sdk/nodejs/compute/targetInstance.ts b/sdk/nodejs/compute/targetInstance.ts index 7b11bc7c16..c6e04c5bc1 100644 --- a/sdk/nodejs/compute/targetInstance.ts +++ b/sdk/nodejs/compute/targetInstance.ts @@ -161,7 +161,8 @@ export class TargetInstance extends pulumi.CustomResource { */ public readonly natPolicy!: pulumi.Output; /** - * The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + * The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + * the network that the default network interface belongs to. */ public readonly network!: pulumi.Output; /** @@ -259,7 +260,8 @@ export interface TargetInstanceState { */ natPolicy?: pulumi.Input; /** - * The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + * The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + * the network that the default network interface belongs to. */ network?: pulumi.Input; /** @@ -312,7 +314,8 @@ export interface TargetInstanceArgs { */ natPolicy?: pulumi.Input; /** - * The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + * The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + * the network that the default network interface belongs to. */ network?: pulumi.Input; /** diff --git a/sdk/nodejs/compute/targetPool.ts b/sdk/nodejs/compute/targetPool.ts index 4cce766a65..bec607c19a 100644 --- a/sdk/nodejs/compute/targetPool.ts +++ b/sdk/nodejs/compute/targetPool.ts @@ -79,11 +79,9 @@ export class TargetPool extends pulumi.CustomResource { */ public readonly healthChecks!: pulumi.Output; /** - * List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. */ public readonly instances!: pulumi.Output; /** @@ -177,11 +175,9 @@ export interface TargetPoolState { */ healthChecks?: pulumi.Input; /** - * List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. */ instances?: pulumi.Input[]>; /** @@ -235,11 +231,9 @@ export interface TargetPoolArgs { */ healthChecks?: pulumi.Input; /** - * List of instances in the pool. They can be given as - * URLs, or in the form of "zone/name". Note that the instances need not exist - * at the time of target pool creation, so there is no need to use the - * interpolation to create a dependency on the instances from the - * target pool. + * List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + * not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + * dependency on the instances from the target pool. */ instances?: pulumi.Input[]>; /** diff --git a/sdk/nodejs/compute/vpntunnel.ts b/sdk/nodejs/compute/vpntunnel.ts index 127a23c143..277821da1c 100644 --- a/sdk/nodejs/compute/vpntunnel.ts +++ b/sdk/nodejs/compute/vpntunnel.ts @@ -5,18 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * VPN tunnel resource. - * - * To get more information about VpnTunnel, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/vpnTunnels) - * * How-to Guides - * * [Cloud VPN Overview](https://cloud.google.com/vpn/docs/concepts/overview) - * * [Networks and Tunnel Routing](https://cloud.google.com/vpn/docs/concepts/choosing-networks-routing) - * - * > **Warning:** All arguments including `sharedSecret` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Vpn Tunnel Basic * diff --git a/sdk/nodejs/config/vars.ts b/sdk/nodejs/config/vars.ts index 3a2080967a..27650ab776 100644 --- a/sdk/nodejs/config/vars.ts +++ b/sdk/nodejs/config/vars.ts @@ -305,6 +305,14 @@ Object.defineProperty(exports, "cloudTasksCustomEndpoint", { enumerable: true, }); +export declare const cloudbuildv2CustomEndpoint: string | undefined; +Object.defineProperty(exports, "cloudbuildv2CustomEndpoint", { + get() { + return __config.get("cloudbuildv2CustomEndpoint"); + }, + enumerable: true, +}); + export declare const clouddeployCustomEndpoint: string | undefined; Object.defineProperty(exports, "clouddeployCustomEndpoint", { get() { @@ -489,14 +497,6 @@ Object.defineProperty(exports, "dialogflowCxCustomEndpoint", { enumerable: true, }); -export declare const disableGooglePartnerName: boolean | undefined; -Object.defineProperty(exports, "disableGooglePartnerName", { - get() { - return __config.getObject("disableGooglePartnerName"); - }, - enumerable: true, -}); - export declare const dnsCustomEndpoint: string | undefined; Object.defineProperty(exports, "dnsCustomEndpoint", { get() { @@ -617,14 +617,6 @@ Object.defineProperty(exports, "gkehubFeatureCustomEndpoint", { enumerable: true, }); -export declare const googlePartnerName: string | undefined; -Object.defineProperty(exports, "googlePartnerName", { - get() { - return __config.get("googlePartnerName"); - }, - enumerable: true, -}); - export declare const healthcareCustomEndpoint: string | undefined; Object.defineProperty(exports, "healthcareCustomEndpoint", { get() { @@ -1017,6 +1009,14 @@ Object.defineProperty(exports, "tagsCustomEndpoint", { enumerable: true, }); +export declare const tagsLocationCustomEndpoint: string | undefined; +Object.defineProperty(exports, "tagsLocationCustomEndpoint", { + get() { + return __config.get("tagsLocationCustomEndpoint"); + }, + enumerable: true, +}); + export declare const tpuCustomEndpoint: string | undefined; Object.defineProperty(exports, "tpuCustomEndpoint", { get() { @@ -1057,6 +1057,14 @@ Object.defineProperty(exports, "workflowsCustomEndpoint", { enumerable: true, }); +export declare const workstationsCustomEndpoint: string | undefined; +Object.defineProperty(exports, "workstationsCustomEndpoint", { + get() { + return __config.get("workstationsCustomEndpoint"); + }, + enumerable: true, +}); + export declare const zone: string | undefined; Object.defineProperty(exports, "zone", { get() { diff --git a/sdk/nodejs/container/attachedCluster.ts b/sdk/nodejs/container/attachedCluster.ts index 4047a19353..b2b07df214 100644 --- a/sdk/nodejs/container/attachedCluster.ts +++ b/sdk/nodejs/container/attachedCluster.ts @@ -42,6 +42,32 @@ import * as utilities from "../utilities"; * }, * }); * ``` + * ### Container Attached Cluster Ignore Errors + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const project = gcp.organizations.getProject({}); + * const versions = project.then(project => gcp.container.getAttachedVersions({ + * location: "us-west1", + * project: project.projectId, + * })); + * const primary = new gcp.container.AttachedCluster("primary", { + * location: "us-west1", + * project: project.then(project => project.projectId), + * description: "Test cluster", + * distribution: "aks", + * oidcConfig: { + * issuerUrl: "https://oidc.issuer.url", + * }, + * platformVersion: versions.then(versions => versions.validVersions?.[0]), + * fleet: { + * project: project.then(project => `projects/${project.number}`), + * }, + * deletionPolicy: "DELETE_IGNORE_ERRORS", + * }); + * ``` * * ## Import * @@ -111,6 +137,10 @@ export class AttachedCluster extends pulumi.CustomResource { * Output only. The time at which this cluster was created. */ public /*out*/ readonly createTime!: pulumi.Output; + /** + * Policy to determine what flags to send on delete. + */ + public readonly deletionPolicy!: pulumi.Output; /** * A human readable description of this attached cluster. Cannot be longer * than 255 UTF-8 encoded bytes. @@ -216,6 +246,7 @@ export class AttachedCluster extends pulumi.CustomResource { resourceInputs["authorization"] = state ? state.authorization : undefined; resourceInputs["clusterRegion"] = state ? state.clusterRegion : undefined; resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["deletionPolicy"] = state ? state.deletionPolicy : undefined; resourceInputs["description"] = state ? state.description : undefined; resourceInputs["distribution"] = state ? state.distribution : undefined; resourceInputs["errors"] = state ? state.errors : undefined; @@ -252,6 +283,7 @@ export class AttachedCluster extends pulumi.CustomResource { } resourceInputs["annotations"] = args ? args.annotations : undefined; resourceInputs["authorization"] = args ? args.authorization : undefined; + resourceInputs["deletionPolicy"] = args ? args.deletionPolicy : undefined; resourceInputs["description"] = args ? args.description : undefined; resourceInputs["distribution"] = args ? args.distribution : undefined; resourceInputs["fleet"] = args ? args.fleet : undefined; @@ -305,6 +337,10 @@ export interface AttachedClusterState { * Output only. The time at which this cluster was created. */ createTime?: pulumi.Input; + /** + * Policy to determine what flags to send on delete. + */ + deletionPolicy?: pulumi.Input; /** * A human readable description of this attached cluster. Cannot be longer * than 255 UTF-8 encoded bytes. @@ -412,6 +448,10 @@ export interface AttachedClusterArgs { * Structure is documented below. */ authorization?: pulumi.Input; + /** + * Policy to determine what flags to send on delete. + */ + deletionPolicy?: pulumi.Input; /** * A human readable description of this attached cluster. Cannot be longer * than 255 UTF-8 encoded bytes. diff --git a/sdk/nodejs/container/cluster.ts b/sdk/nodejs/container/cluster.ts index 357ba91fae..a066c3e9af 100644 --- a/sdk/nodejs/container/cluster.ts +++ b/sdk/nodejs/container/cluster.ts @@ -7,14 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Manages a Google Kubernetes Engine (GKE) cluster. For more information see - * [the official documentation](https://cloud.google.com/container-engine/docs/clusters) - * and [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters). - * - * > **Warning:** All arguments and attributes, including basic auth username and - * passwords as well as certificate outputs will be stored in the raw state as - * plaintext. [Read more about secrets in state](https://www.pulumi.com/docs/intro/concepts/programming-model/#secrets). - * * ## Example Usage * ### With A Separately Managed Node Pool (Recommended) * @@ -47,21 +39,6 @@ import * as utilities from "../utilities"; * > **Note:** It is recommended that node pools be created and managed as separate resources as in the example above. * This allows node pools to be added and removed without recreating the cluster. Node pools defined directly in the * `gcp.container.Cluster` resource cannot be removed without re-creating the cluster. - * ### Autopilot - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const _default = new gcp.serviceaccount.Account("default", { - * accountId: "service-account-id", - * displayName: "Service Account", - * }); - * const primary = new gcp.container.Cluster("primary", { - * enableAutopilot: true, - * location: "us-central1-a", - * }); - * ``` * * ## Import * @@ -79,7 +56,7 @@ import * as utilities from "../utilities"; * $ pulumi import gcp:container/cluster:Cluster mycluster us-east1-a/my-cluster * ``` * - * For example, the following fields will show diffs if set in config* `min_master_version` * `remove_default_node_pool` + * For example, the following fields will show diffs if set in config- `min_master_version` - `remove_default_node_pool` */ export class Cluster extends pulumi.CustomResource { /** @@ -141,7 +118,7 @@ export class Cluster extends pulumi.CustomResource { */ public readonly clusterIpv4Cidr!: pulumi.Output; /** - * Configuration for + * ) Configuration for * [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, * Structure is documented below. */ @@ -209,6 +186,7 @@ export class Cluster extends pulumi.CustomResource { */ public readonly enableKubernetesAlpha!: pulumi.Output; /** + * ) * Whether L4ILB Subsetting is enabled for this cluster. */ public readonly enableL4IlbSubsetting!: pulumi.Output; @@ -237,7 +215,7 @@ export class Cluster extends pulumi.CustomResource { */ public readonly gatewayApiConfig!: pulumi.Output; /** - * . Structure is documented below. + * ). Structure is documented below. */ public readonly identityServiceConfig!: pulumi.Output; /** @@ -313,15 +291,9 @@ export class Cluster extends pulumi.CustomResource { */ public readonly meshCertificates!: pulumi.Output; /** - * The minimum version of the master. GKE - * will auto-update the master to new versions, so this does not guarantee the - * current master version--use the read-only `masterVersion` field to obtain that. - * If unset, the cluster's version will be set by GKE to the version of the most recent - * official release (which is not necessarily the latest version). Most users will find - * the `gcp.container.getEngineVersions` data source useful - it indicates which versions - * are available. If you intend to specify versions manually, - * [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - * describe the various acceptable formats for this field. + * The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + * current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + * set by GKE to the version of the most recent official release (which is not necessarily the latest version). */ public readonly minMasterVersion!: pulumi.Output; /** @@ -363,11 +335,7 @@ export class Cluster extends pulumi.CustomResource { */ public readonly networkingMode!: pulumi.Output; /** - * Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `nodePool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. + * The configuration of the nodepool */ public readonly nodeConfig!: pulumi.Output; /** @@ -397,14 +365,12 @@ export class Cluster extends pulumi.CustomResource { */ public readonly nodePools!: pulumi.Output; /** - * The Kubernetes version on the nodes. Must either be unset - * or set to the same value as `minMasterVersion` on create. Defaults to the default - * version set by GKE which is not necessarily the latest version. This only affects - * nodes in the default node pool. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `versionPrefix` field to approximate fuzzy versions. - * To update nodes in other node pools, use the `version` attribute on the node pool. + * The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + * Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + * default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + * Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + * version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + * use the version attribute on the node pool. */ public readonly nodeVersion!: pulumi.Output; /** @@ -433,15 +399,8 @@ export class Cluster extends pulumi.CustomResource { */ public readonly project!: pulumi.Output; /** - * Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - * feature, which provide more control over automatic upgrades of your GKE clusters. - * When updating this field, GKE imposes specific version requirements. See - * [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - * for more details; the `gcp.container.getEngineVersions` datasource can provide - * the default version for a channel. Note that removing the `releaseChannel` - * field from your config will cause the provider to stop managing your cluster's - * release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - * channel. Structure is documented below. + * Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + * clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. */ public readonly releaseChannel!: pulumi.Output; /** @@ -694,7 +653,7 @@ export interface ClusterState { */ clusterIpv4Cidr?: pulumi.Input; /** - * Configuration for + * ) Configuration for * [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, * Structure is documented below. */ @@ -762,6 +721,7 @@ export interface ClusterState { */ enableKubernetesAlpha?: pulumi.Input; /** + * ) * Whether L4ILB Subsetting is enabled for this cluster. */ enableL4IlbSubsetting?: pulumi.Input; @@ -790,7 +750,7 @@ export interface ClusterState { */ gatewayApiConfig?: pulumi.Input; /** - * . Structure is documented below. + * ). Structure is documented below. */ identityServiceConfig?: pulumi.Input; /** @@ -866,15 +826,9 @@ export interface ClusterState { */ meshCertificates?: pulumi.Input; /** - * The minimum version of the master. GKE - * will auto-update the master to new versions, so this does not guarantee the - * current master version--use the read-only `masterVersion` field to obtain that. - * If unset, the cluster's version will be set by GKE to the version of the most recent - * official release (which is not necessarily the latest version). Most users will find - * the `gcp.container.getEngineVersions` data source useful - it indicates which versions - * are available. If you intend to specify versions manually, - * [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - * describe the various acceptable formats for this field. + * The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + * current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + * set by GKE to the version of the most recent official release (which is not necessarily the latest version). */ minMasterVersion?: pulumi.Input; /** @@ -916,11 +870,7 @@ export interface ClusterState { */ networkingMode?: pulumi.Input; /** - * Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `nodePool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. + * The configuration of the nodepool */ nodeConfig?: pulumi.Input; /** @@ -950,14 +900,12 @@ export interface ClusterState { */ nodePools?: pulumi.Input[]>; /** - * The Kubernetes version on the nodes. Must either be unset - * or set to the same value as `minMasterVersion` on create. Defaults to the default - * version set by GKE which is not necessarily the latest version. This only affects - * nodes in the default node pool. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `versionPrefix` field to approximate fuzzy versions. - * To update nodes in other node pools, use the `version` attribute on the node pool. + * The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + * Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + * default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + * Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + * version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + * use the version attribute on the node pool. */ nodeVersion?: pulumi.Input; /** @@ -986,15 +934,8 @@ export interface ClusterState { */ project?: pulumi.Input; /** - * Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - * feature, which provide more control over automatic upgrades of your GKE clusters. - * When updating this field, GKE imposes specific version requirements. See - * [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - * for more details; the `gcp.container.getEngineVersions` datasource can provide - * the default version for a channel. Note that removing the `releaseChannel` - * field from your config will cause the provider to stop managing your cluster's - * release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - * channel. Structure is documented below. + * Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + * clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. */ releaseChannel?: pulumi.Input; /** @@ -1093,7 +1034,7 @@ export interface ClusterArgs { */ clusterIpv4Cidr?: pulumi.Input; /** - * Configuration for + * ) Configuration for * [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, * Structure is documented below. */ @@ -1161,6 +1102,7 @@ export interface ClusterArgs { */ enableKubernetesAlpha?: pulumi.Input; /** + * ) * Whether L4ILB Subsetting is enabled for this cluster. */ enableL4IlbSubsetting?: pulumi.Input; @@ -1185,7 +1127,7 @@ export interface ClusterArgs { */ gatewayApiConfig?: pulumi.Input; /** - * . Structure is documented below. + * ). Structure is documented below. */ identityServiceConfig?: pulumi.Input; /** @@ -1251,15 +1193,9 @@ export interface ClusterArgs { */ meshCertificates?: pulumi.Input; /** - * The minimum version of the master. GKE - * will auto-update the master to new versions, so this does not guarantee the - * current master version--use the read-only `masterVersion` field to obtain that. - * If unset, the cluster's version will be set by GKE to the version of the most recent - * official release (which is not necessarily the latest version). Most users will find - * the `gcp.container.getEngineVersions` data source useful - it indicates which versions - * are available. If you intend to specify versions manually, - * [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - * describe the various acceptable formats for this field. + * The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + * current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + * set by GKE to the version of the most recent official release (which is not necessarily the latest version). */ minMasterVersion?: pulumi.Input; /** @@ -1301,11 +1237,7 @@ export interface ClusterArgs { */ networkingMode?: pulumi.Input; /** - * Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `nodePool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. + * The configuration of the nodepool */ nodeConfig?: pulumi.Input; /** @@ -1335,14 +1267,12 @@ export interface ClusterArgs { */ nodePools?: pulumi.Input[]>; /** - * The Kubernetes version on the nodes. Must either be unset - * or set to the same value as `minMasterVersion` on create. Defaults to the default - * version set by GKE which is not necessarily the latest version. This only affects - * nodes in the default node pool. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `versionPrefix` field to approximate fuzzy versions. - * To update nodes in other node pools, use the `version` attribute on the node pool. + * The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + * Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + * default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + * Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + * version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + * use the version attribute on the node pool. */ nodeVersion?: pulumi.Input; /** @@ -1370,15 +1300,8 @@ export interface ClusterArgs { */ project?: pulumi.Input; /** - * Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - * feature, which provide more control over automatic upgrades of your GKE clusters. - * When updating this field, GKE imposes specific version requirements. See - * [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - * for more details; the `gcp.container.getEngineVersions` datasource can provide - * the default version for a channel. Note that removing the `releaseChannel` - * field from your config will cause the provider to stop managing your cluster's - * release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - * channel. Structure is documented below. + * Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + * clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. */ releaseChannel?: pulumi.Input; /** diff --git a/sdk/nodejs/container/getEngineVersions.ts b/sdk/nodejs/container/getEngineVersions.ts index 64607acc99..32c69bef40 100644 --- a/sdk/nodejs/container/getEngineVersions.ts +++ b/sdk/nodejs/container/getEngineVersions.ts @@ -59,14 +59,6 @@ export interface GetEngineVersionsArgs { * Defaults to the project that the provider is authenticated with. */ project?: string; - /** - * If provided, the provider will only return versions - * that match the string prefix. For example, `1.11.` will match all `1.11` series - * releases. Since this is just a string match, it's recommended that you append a - * `.` after minor versions to ensure that prefixes such as `1.1` don't match - * versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - * for full details on how version strings are formatted. - */ versionPrefix?: string; } @@ -158,13 +150,5 @@ export interface GetEngineVersionsOutputArgs { * Defaults to the project that the provider is authenticated with. */ project?: pulumi.Input; - /** - * If provided, the provider will only return versions - * that match the string prefix. For example, `1.11.` will match all `1.11` series - * releases. Since this is just a string match, it's recommended that you append a - * `.` after minor versions to ensure that prefixes such as `1.1` don't match - * versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - * for full details on how version strings are formatted. - */ versionPrefix?: pulumi.Input; } diff --git a/sdk/nodejs/container/nodePool.ts b/sdk/nodejs/container/nodePool.ts index 58d9ced0bd..d3cdaf0888 100644 --- a/sdk/nodejs/container/nodePool.ts +++ b/sdk/nodejs/container/nodePool.ts @@ -7,38 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Manages a node pool in a Google Kubernetes Engine (GKE) cluster separately from - * the cluster control plane. For more information see [the official documentation](https://cloud.google.com/container-engine/docs/node-pools) - * and [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters.nodePools). - * - * ## Example Usage - * ### Using A Separately Managed Node Pool (Recommended) - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const _default = new gcp.serviceaccount.Account("default", { - * accountId: "service-account-id", - * displayName: "Service Account", - * }); - * const primary = new gcp.container.Cluster("primary", { - * location: "us-central1", - * removeDefaultNodePool: true, - * initialNodeCount: 1, - * }); - * const primaryPreemptibleNodes = new gcp.container.NodePool("primaryPreemptibleNodes", { - * cluster: primary.id, - * nodeCount: 1, - * nodeConfig: { - * preemptible: true, - * machineType: "e2-medium", - * serviceAccount: _default.email, - * oauthScopes: ["https://www.googleapis.com/auth/cloud-platform"], - * }, - * }); - * ``` - * * ## Import * * Node pools can be imported using the `project`, `location`, `cluster` and `name`. If the project is omitted, the project value in the provider configuration will be used. Examples @@ -89,13 +57,8 @@ export class NodePool extends pulumi.CustomResource { */ public readonly cluster!: pulumi.Output; /** - * The initial number of nodes for the pool. In - * regional or multi-zonal clusters, this is the number of nodes per zone. Changing - * this will force recreation of the resource. WARNING: Resizing your node pool manually - * may change this value in your existing cluster, which will trigger destruction - * and recreation on the next provider run (to rectify the discrepancy). If you don't - * need this value, don't set it. If you do need it, you can use a lifecycle block to - * ignore subsqeuent changes to this field. + * The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + * Changing this will force recreation of the resource. */ public readonly initialNodeCount!: pulumi.Output; /** @@ -124,8 +87,7 @@ export class NodePool extends pulumi.CustomResource { */ public readonly maxPodsPerNode!: pulumi.Output; /** - * The name of the node pool. If left blank, the provider will - * auto-generate a unique name. + * The name of the node pool. If left blank, Terraform will auto-generate a unique name. */ public readonly name!: pulumi.Output; /** @@ -173,12 +135,11 @@ export class NodePool extends pulumi.CustomResource { */ public readonly upgradeSettings!: pulumi.Output; /** - * The Kubernetes version for the nodes in this pool. Note that if this field - * and `autoUpgrade` are both specified, they will fight each other for what the node version should - * be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `versionPrefix` field to approximate fuzzy versions in a provider-compatible way. + * The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + * will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + * can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + * versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + * versions in a Terraform-compatible way. */ public readonly version!: pulumi.Output; @@ -258,13 +219,8 @@ export interface NodePoolState { */ cluster?: pulumi.Input; /** - * The initial number of nodes for the pool. In - * regional or multi-zonal clusters, this is the number of nodes per zone. Changing - * this will force recreation of the resource. WARNING: Resizing your node pool manually - * may change this value in your existing cluster, which will trigger destruction - * and recreation on the next provider run (to rectify the discrepancy). If you don't - * need this value, don't set it. If you do need it, you can use a lifecycle block to - * ignore subsqeuent changes to this field. + * The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + * Changing this will force recreation of the resource. */ initialNodeCount?: pulumi.Input; /** @@ -293,8 +249,7 @@ export interface NodePoolState { */ maxPodsPerNode?: pulumi.Input; /** - * The name of the node pool. If left blank, the provider will - * auto-generate a unique name. + * The name of the node pool. If left blank, Terraform will auto-generate a unique name. */ name?: pulumi.Input; /** @@ -342,12 +297,11 @@ export interface NodePoolState { */ upgradeSettings?: pulumi.Input; /** - * The Kubernetes version for the nodes in this pool. Note that if this field - * and `autoUpgrade` are both specified, they will fight each other for what the node version should - * be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `versionPrefix` field to approximate fuzzy versions in a provider-compatible way. + * The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + * will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + * can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + * versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + * versions in a Terraform-compatible way. */ version?: pulumi.Input; } @@ -366,13 +320,8 @@ export interface NodePoolArgs { */ cluster: pulumi.Input; /** - * The initial number of nodes for the pool. In - * regional or multi-zonal clusters, this is the number of nodes per zone. Changing - * this will force recreation of the resource. WARNING: Resizing your node pool manually - * may change this value in your existing cluster, which will trigger destruction - * and recreation on the next provider run (to rectify the discrepancy). If you don't - * need this value, don't set it. If you do need it, you can use a lifecycle block to - * ignore subsqeuent changes to this field. + * The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + * Changing this will force recreation of the resource. */ initialNodeCount?: pulumi.Input; /** @@ -393,8 +342,7 @@ export interface NodePoolArgs { */ maxPodsPerNode?: pulumi.Input; /** - * The name of the node pool. If left blank, the provider will - * auto-generate a unique name. + * The name of the node pool. If left blank, Terraform will auto-generate a unique name. */ name?: pulumi.Input; /** @@ -441,12 +389,11 @@ export interface NodePoolArgs { */ upgradeSettings?: pulumi.Input; /** - * The Kubernetes version for the nodes in this pool. Note that if this field - * and `autoUpgrade` are both specified, they will fight each other for what the node version should - * be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - * recommended that you specify explicit versions as the provider will see spurious diffs - * when fuzzy versions are used. See the `gcp.container.getEngineVersions` data source's - * `versionPrefix` field to approximate fuzzy versions in a provider-compatible way. + * The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + * will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + * can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + * versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + * versions in a Terraform-compatible way. */ version?: pulumi.Input; } diff --git a/sdk/nodejs/datacatalog/entryGroup.ts b/sdk/nodejs/datacatalog/entryGroup.ts index 35bf71b5a5..3ca37f5c2d 100644 --- a/sdk/nodejs/datacatalog/entryGroup.ts +++ b/sdk/nodejs/datacatalog/entryGroup.ts @@ -29,8 +29,8 @@ import * as utilities from "../utilities"; * import * as gcp from "@pulumi/gcp"; * * const basicEntryGroup = new gcp.datacatalog.EntryGroup("basicEntryGroup", { - * description: "example entry group", - * displayName: "entry group", + * description: "entry group created by Terraform", + * displayName: "terraform entry group", * entryGroupId: "my_group", * }); * ``` diff --git a/sdk/nodejs/datacatalog/policyTag.ts b/sdk/nodejs/datacatalog/policyTag.ts index e8bf79be38..b38f4a3b19 100644 --- a/sdk/nodejs/datacatalog/policyTag.ts +++ b/sdk/nodejs/datacatalog/policyTag.ts @@ -5,14 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Denotes one policy tag in a taxonomy. - * - * To get more information about PolicyTag, see: - * - * * [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies.policyTags) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/data-catalog/docs) - * * ## Example Usage * ### Data Catalog Taxonomies Policy Tag Basic * diff --git a/sdk/nodejs/datacatalog/policyTagIamBinding.ts b/sdk/nodejs/datacatalog/policyTagIamBinding.ts index 3c88081e95..d0d8845a7c 100644 --- a/sdk/nodejs/datacatalog/policyTagIamBinding.ts +++ b/sdk/nodejs/datacatalog/policyTagIamBinding.ts @@ -7,66 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - * - * * `gcp.datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - * * `gcp.datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - * * `gcp.datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - * - * > **Note:** `gcp.datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.PolicyTagIamBinding` and `gcp.datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_data\_catalog\_policy\_tag\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.datacatalog.PolicyTagIamPolicy("policy", { - * policyTag: google_data_catalog_policy_tag.basic_policy_tag.name, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_data\_catalog\_policy\_tag\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.datacatalog.PolicyTagIamBinding("binding", { - * policyTag: google_data_catalog_policy_tag.basic_policy_tag.name, - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_data\_catalog\_policy\_tag\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.datacatalog.PolicyTagIamMember("member", { - * policyTag: google_data_catalog_policy_tag.basic_policy_tag.name, - * role: "roles/viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/datacatalog/policyTagIamMember.ts b/sdk/nodejs/datacatalog/policyTagIamMember.ts index 66594ea053..4ce1c08925 100644 --- a/sdk/nodejs/datacatalog/policyTagIamMember.ts +++ b/sdk/nodejs/datacatalog/policyTagIamMember.ts @@ -7,66 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - * - * * `gcp.datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - * * `gcp.datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - * * `gcp.datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - * - * > **Note:** `gcp.datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.PolicyTagIamBinding` and `gcp.datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_data\_catalog\_policy\_tag\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.datacatalog.PolicyTagIamPolicy("policy", { - * policyTag: google_data_catalog_policy_tag.basic_policy_tag.name, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_data\_catalog\_policy\_tag\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.datacatalog.PolicyTagIamBinding("binding", { - * policyTag: google_data_catalog_policy_tag.basic_policy_tag.name, - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_data\_catalog\_policy\_tag\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.datacatalog.PolicyTagIamMember("member", { - * policyTag: google_data_catalog_policy_tag.basic_policy_tag.name, - * role: "roles/viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/datacatalog/policyTagIamPolicy.ts b/sdk/nodejs/datacatalog/policyTagIamPolicy.ts index dc1fc2aa5e..8acdab5506 100644 --- a/sdk/nodejs/datacatalog/policyTagIamPolicy.ts +++ b/sdk/nodejs/datacatalog/policyTagIamPolicy.ts @@ -5,66 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - * - * * `gcp.datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - * * `gcp.datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - * * `gcp.datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - * - * > **Note:** `gcp.datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.PolicyTagIamBinding` and `gcp.datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_data\_catalog\_policy\_tag\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.datacatalog.PolicyTagIamPolicy("policy", { - * policyTag: google_data_catalog_policy_tag.basic_policy_tag.name, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_data\_catalog\_policy\_tag\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.datacatalog.PolicyTagIamBinding("binding", { - * policyTag: google_data_catalog_policy_tag.basic_policy_tag.name, - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_data\_catalog\_policy\_tag\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.datacatalog.PolicyTagIamMember("member", { - * policyTag: google_data_catalog_policy_tag.basic_policy_tag.name, - * role: "roles/viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/datacatalog/taxonomy.ts b/sdk/nodejs/datacatalog/taxonomy.ts index 58143655dc..9f7f2c1573 100644 --- a/sdk/nodejs/datacatalog/taxonomy.ts +++ b/sdk/nodejs/datacatalog/taxonomy.ts @@ -5,14 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * A collection of policy tags that classify data along a common axis. - * - * To get more information about Taxonomy, see: - * - * * [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/data-catalog/docs) - * * ## Example Usage * ### Data Catalog Taxonomy Basic * diff --git a/sdk/nodejs/datacatalog/taxonomyIamBinding.ts b/sdk/nodejs/datacatalog/taxonomyIamBinding.ts index 40d0e9c6b0..3994b49eda 100644 --- a/sdk/nodejs/datacatalog/taxonomyIamBinding.ts +++ b/sdk/nodejs/datacatalog/taxonomyIamBinding.ts @@ -7,66 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - * - * * `gcp.datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - * * `gcp.datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - * * `gcp.datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - * - * > **Note:** `gcp.datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.TaxonomyIamBinding` and `gcp.datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_data\_catalog\_taxonomy\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.datacatalog.TaxonomyIamPolicy("policy", { - * taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_data\_catalog\_taxonomy\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.datacatalog.TaxonomyIamBinding("binding", { - * taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name, - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_data\_catalog\_taxonomy\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.datacatalog.TaxonomyIamMember("member", { - * taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name, - * role: "roles/viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/datacatalog/taxonomyIamMember.ts b/sdk/nodejs/datacatalog/taxonomyIamMember.ts index 71f4310c18..e19546ac58 100644 --- a/sdk/nodejs/datacatalog/taxonomyIamMember.ts +++ b/sdk/nodejs/datacatalog/taxonomyIamMember.ts @@ -7,66 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - * - * * `gcp.datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - * * `gcp.datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - * * `gcp.datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - * - * > **Note:** `gcp.datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.TaxonomyIamBinding` and `gcp.datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_data\_catalog\_taxonomy\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.datacatalog.TaxonomyIamPolicy("policy", { - * taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_data\_catalog\_taxonomy\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.datacatalog.TaxonomyIamBinding("binding", { - * taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name, - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_data\_catalog\_taxonomy\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.datacatalog.TaxonomyIamMember("member", { - * taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name, - * role: "roles/viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/datacatalog/taxonomyIamPolicy.ts b/sdk/nodejs/datacatalog/taxonomyIamPolicy.ts index ffaf37020d..818c60ee62 100644 --- a/sdk/nodejs/datacatalog/taxonomyIamPolicy.ts +++ b/sdk/nodejs/datacatalog/taxonomyIamPolicy.ts @@ -5,66 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - * - * * `gcp.datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - * * `gcp.datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - * * `gcp.datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - * - * > **Note:** `gcp.datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `gcp.datacatalog.TaxonomyIamBinding` and `gcp.datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `gcp.datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_data\_catalog\_taxonomy\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.datacatalog.TaxonomyIamPolicy("policy", { - * taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name, - * policyData: admin.then(admin => admin.policyData), - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_data\_catalog\_taxonomy\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.datacatalog.TaxonomyIamBinding("binding", { - * taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name, - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_data\_catalog\_taxonomy\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.datacatalog.TaxonomyIamMember("member", { - * taxonomy: google_data_catalog_taxonomy.basic_taxonomy.name, - * role: "roles/viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/dataflow/flexTemplateJob.ts b/sdk/nodejs/dataflow/flexTemplateJob.ts index 59281a36b3..af33cd9696 100644 --- a/sdk/nodejs/dataflow/flexTemplateJob.ts +++ b/sdk/nodejs/dataflow/flexTemplateJob.ts @@ -49,8 +49,7 @@ export class FlexTemplateJob extends pulumi.CustomResource { /** * User labels to be specified for the job. Keys and values * should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - * page. **Note**: This field is marked as deprecated as the API does not currently - * support adding labels. + * page. * **NOTE**: Google-provided Dataflow templates often provide default labels * that begin with `goog-dataflow-provided`. Unless explicitly set in config, these * labels will be ignored to prevent diffs on re-apply. @@ -60,10 +59,6 @@ export class FlexTemplateJob extends pulumi.CustomResource { * A unique name for the resource, required by Dataflow. */ public readonly name!: pulumi.Output; - /** - * One of "drain" or "cancel". Specifies behavior of - * deletion during `pulumi destroy`. See above note. - */ public readonly onDelete!: pulumi.Output; /** * Key/Value pairs to be passed to the Dataflow job (as @@ -151,8 +146,7 @@ export interface FlexTemplateJobState { /** * User labels to be specified for the job. Keys and values * should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - * page. **Note**: This field is marked as deprecated as the API does not currently - * support adding labels. + * page. * **NOTE**: Google-provided Dataflow templates often provide default labels * that begin with `goog-dataflow-provided`. Unless explicitly set in config, these * labels will be ignored to prevent diffs on re-apply. @@ -162,10 +156,6 @@ export interface FlexTemplateJobState { * A unique name for the resource, required by Dataflow. */ name?: pulumi.Input; - /** - * One of "drain" or "cancel". Specifies behavior of - * deletion during `pulumi destroy`. See above note. - */ onDelete?: pulumi.Input; /** * Key/Value pairs to be passed to the Dataflow job (as @@ -206,8 +196,7 @@ export interface FlexTemplateJobArgs { /** * User labels to be specified for the job. Keys and values * should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - * page. **Note**: This field is marked as deprecated as the API does not currently - * support adding labels. + * page. * **NOTE**: Google-provided Dataflow templates often provide default labels * that begin with `goog-dataflow-provided`. Unless explicitly set in config, these * labels will be ignored to prevent diffs on re-apply. @@ -217,10 +206,6 @@ export interface FlexTemplateJobArgs { * A unique name for the resource, required by Dataflow. */ name?: pulumi.Input; - /** - * One of "drain" or "cancel". Specifies behavior of - * deletion during `pulumi destroy`. See above note. - */ onDelete?: pulumi.Input; /** * Key/Value pairs to be passed to the Dataflow job (as diff --git a/sdk/nodejs/dataflow/job.ts b/sdk/nodejs/dataflow/job.ts index 228e444c0f..a8ac1edc19 100644 --- a/sdk/nodejs/dataflow/job.ts +++ b/sdk/nodejs/dataflow/job.ts @@ -85,7 +85,7 @@ export class Job extends pulumi.CustomResource { */ public readonly network!: pulumi.Output; /** - * One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + * One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. */ public readonly onDelete!: pulumi.Output; /** @@ -105,7 +105,9 @@ export class Job extends pulumi.CustomResource { */ public readonly serviceAccountEmail!: pulumi.Output; /** - * If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + * If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + * terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + * different, e.g. by embedding a release ID or by using a random_id. */ public readonly skipWaitOnJobTermination!: pulumi.Output; /** @@ -258,7 +260,7 @@ export interface JobState { */ network?: pulumi.Input; /** - * One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + * One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. */ onDelete?: pulumi.Input; /** @@ -278,7 +280,9 @@ export interface JobState { */ serviceAccountEmail?: pulumi.Input; /** - * If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + * If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + * terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + * different, e.g. by embedding a release ID or by using a random_id. */ skipWaitOnJobTermination?: pulumi.Input; /** @@ -355,7 +359,7 @@ export interface JobArgs { */ network?: pulumi.Input; /** - * One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + * One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. */ onDelete?: pulumi.Input; /** @@ -375,7 +379,9 @@ export interface JobArgs { */ serviceAccountEmail?: pulumi.Input; /** - * If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + * If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + * terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + * different, e.g. by embedding a release ID or by using a random_id. */ skipWaitOnJobTermination?: pulumi.Input; /** diff --git a/sdk/nodejs/datafusion/instance.ts b/sdk/nodejs/datafusion/instance.ts index 56f47b3276..5997805766 100644 --- a/sdk/nodejs/datafusion/instance.ts +++ b/sdk/nodejs/datafusion/instance.ts @@ -13,7 +13,7 @@ import * as utilities from "../utilities"; * * * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * * How-to Guides - * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) * * ## Example Usage * ### Data Fusion Instance Basic @@ -278,12 +278,12 @@ export class Instance extends pulumi.CustomResource { public /*out*/ readonly serviceEndpoint!: pulumi.Output; /** * The current state of this Data Fusion instance. - * * CREATING: Instance is being created - * * RUNNING: Instance is running and ready for requests - * * FAILED: Instance creation failed - * * DELETING: Instance is being deleted - * * UPGRADING: Instance is being upgraded - * * RESTARTING: Instance is being restarted + * - CREATING: Instance is being created + * - RUNNING: Instance is running and ready for requests + * - FAILED: Instance creation failed + * - DELETING: Instance is being deleted + * - UPGRADING: Instance is being upgraded + * - RESTARTING: Instance is being restarted */ public /*out*/ readonly state!: pulumi.Output; /** @@ -297,12 +297,12 @@ export class Instance extends pulumi.CustomResource { /** * Represents the type of Data Fusion instance. Each type is configured with * the default settings for processing and memory. - * * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + * - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines * using point and click UI. However, there are certain limitations, such as fewer number * of concurrent pipelines, no support for streaming pipelines, etc. - * * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + * - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features * available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + * - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but * with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration * pipelines at low cost. * Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -500,12 +500,12 @@ export interface InstanceState { serviceEndpoint?: pulumi.Input; /** * The current state of this Data Fusion instance. - * * CREATING: Instance is being created - * * RUNNING: Instance is running and ready for requests - * * FAILED: Instance creation failed - * * DELETING: Instance is being deleted - * * UPGRADING: Instance is being upgraded - * * RESTARTING: Instance is being restarted + * - CREATING: Instance is being created + * - RUNNING: Instance is running and ready for requests + * - FAILED: Instance creation failed + * - DELETING: Instance is being deleted + * - UPGRADING: Instance is being upgraded + * - RESTARTING: Instance is being restarted */ state?: pulumi.Input; /** @@ -519,12 +519,12 @@ export interface InstanceState { /** * Represents the type of Data Fusion instance. Each type is configured with * the default settings for processing and memory. - * * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + * - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines * using point and click UI. However, there are certain limitations, such as fewer number * of concurrent pipelines, no support for streaming pipelines, etc. - * * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + * - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features * available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + * - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but * with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration * pipelines at low cost. * Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -618,12 +618,12 @@ export interface InstanceArgs { /** * Represents the type of Data Fusion instance. Each type is configured with * the default settings for processing and memory. - * * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + * - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines * using point and click UI. However, there are certain limitations, such as fewer number * of concurrent pipelines, no support for streaming pipelines, etc. - * * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + * - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features * available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + * - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but * with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration * pipelines at low cost. * Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. diff --git a/sdk/nodejs/dataproc/clusterIAMBinding.ts b/sdk/nodejs/dataproc/clusterIAMBinding.ts index d41c7cb905..865c0551e2 100644 --- a/sdk/nodejs/dataproc/clusterIAMBinding.ts +++ b/sdk/nodejs/dataproc/clusterIAMBinding.ts @@ -121,15 +121,7 @@ export class ClusterIAMBinding extends pulumi.CustomResource { */ public /*out*/ readonly etag!: pulumi.Output; public readonly members!: pulumi.Output; - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ public readonly project!: pulumi.Output; - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ public readonly region!: pulumi.Output; /** * The role that should be applied. Only one @@ -196,15 +188,7 @@ export interface ClusterIAMBindingState { */ etag?: pulumi.Input; members?: pulumi.Input[]>; - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ project?: pulumi.Input; - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ region?: pulumi.Input; /** * The role that should be applied. Only one @@ -224,15 +208,7 @@ export interface ClusterIAMBindingArgs { cluster: pulumi.Input; condition?: pulumi.Input; members: pulumi.Input[]>; - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ project?: pulumi.Input; - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ region?: pulumi.Input; /** * The role that should be applied. Only one diff --git a/sdk/nodejs/dataproc/clusterIAMMember.ts b/sdk/nodejs/dataproc/clusterIAMMember.ts index 48d671e240..656fa60cd7 100644 --- a/sdk/nodejs/dataproc/clusterIAMMember.ts +++ b/sdk/nodejs/dataproc/clusterIAMMember.ts @@ -121,15 +121,7 @@ export class ClusterIAMMember extends pulumi.CustomResource { */ public /*out*/ readonly etag!: pulumi.Output; public readonly member!: pulumi.Output; - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ public readonly project!: pulumi.Output; - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ public readonly region!: pulumi.Output; /** * The role that should be applied. Only one @@ -196,15 +188,7 @@ export interface ClusterIAMMemberState { */ etag?: pulumi.Input; member?: pulumi.Input; - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ project?: pulumi.Input; - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ region?: pulumi.Input; /** * The role that should be applied. Only one @@ -224,15 +208,7 @@ export interface ClusterIAMMemberArgs { cluster: pulumi.Input; condition?: pulumi.Input; member: pulumi.Input; - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ project?: pulumi.Input; - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ region?: pulumi.Input; /** * The role that should be applied. Only one diff --git a/sdk/nodejs/dataproc/clusterIAMPolicy.ts b/sdk/nodejs/dataproc/clusterIAMPolicy.ts index bd3cd81f37..0460228512 100644 --- a/sdk/nodejs/dataproc/clusterIAMPolicy.ts +++ b/sdk/nodejs/dataproc/clusterIAMPolicy.ts @@ -121,15 +121,7 @@ export class ClusterIAMPolicy extends pulumi.CustomResource { * The policy data generated by a `gcp.organizations.getIAMPolicy` data source. */ public readonly policyData!: pulumi.Output; - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ public readonly project!: pulumi.Output; - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ public readonly region!: pulumi.Output; /** @@ -185,15 +177,7 @@ export interface ClusterIAMPolicyState { * The policy data generated by a `gcp.organizations.getIAMPolicy` data source. */ policyData?: pulumi.Input; - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ project?: pulumi.Input; - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ region?: pulumi.Input; } @@ -209,14 +193,6 @@ export interface ClusterIAMPolicyArgs { * The policy data generated by a `gcp.organizations.getIAMPolicy` data source. */ policyData: pulumi.Input; - /** - * The project in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ project?: pulumi.Input; - /** - * The region in which the cluster belongs. If it - * is not provided, the provider will use a default. - */ region?: pulumi.Input; } diff --git a/sdk/nodejs/dataproc/jobIAMBinding.ts b/sdk/nodejs/dataproc/jobIAMBinding.ts index c012c9ec87..5e187a2b9c 100644 --- a/sdk/nodejs/dataproc/jobIAMBinding.ts +++ b/sdk/nodejs/dataproc/jobIAMBinding.ts @@ -118,15 +118,7 @@ export class JobIAMBinding extends pulumi.CustomResource { public /*out*/ readonly etag!: pulumi.Output; public readonly jobId!: pulumi.Output; public readonly members!: pulumi.Output; - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - */ public readonly project!: pulumi.Output; - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - */ public readonly region!: pulumi.Output; /** * The role that should be applied. Only one @@ -190,15 +182,7 @@ export interface JobIAMBindingState { etag?: pulumi.Input; jobId?: pulumi.Input; members?: pulumi.Input[]>; - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - */ project?: pulumi.Input; - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - */ region?: pulumi.Input; /** * The role that should be applied. Only one @@ -215,15 +199,7 @@ export interface JobIAMBindingArgs { condition?: pulumi.Input; jobId: pulumi.Input; members: pulumi.Input[]>; - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - */ project?: pulumi.Input; - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - */ region?: pulumi.Input; /** * The role that should be applied. Only one diff --git a/sdk/nodejs/dataproc/jobIAMMember.ts b/sdk/nodejs/dataproc/jobIAMMember.ts index 7cbfcf3028..4e39aad439 100644 --- a/sdk/nodejs/dataproc/jobIAMMember.ts +++ b/sdk/nodejs/dataproc/jobIAMMember.ts @@ -118,15 +118,7 @@ export class JobIAMMember extends pulumi.CustomResource { public /*out*/ readonly etag!: pulumi.Output; public readonly jobId!: pulumi.Output; public readonly member!: pulumi.Output; - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - */ public readonly project!: pulumi.Output; - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - */ public readonly region!: pulumi.Output; /** * The role that should be applied. Only one @@ -190,15 +182,7 @@ export interface JobIAMMemberState { etag?: pulumi.Input; jobId?: pulumi.Input; member?: pulumi.Input; - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - */ project?: pulumi.Input; - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - */ region?: pulumi.Input; /** * The role that should be applied. Only one @@ -215,15 +199,7 @@ export interface JobIAMMemberArgs { condition?: pulumi.Input; jobId: pulumi.Input; member: pulumi.Input; - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - */ project?: pulumi.Input; - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - */ region?: pulumi.Input; /** * The role that should be applied. Only one diff --git a/sdk/nodejs/dataproc/jobIAMPolicy.ts b/sdk/nodejs/dataproc/jobIAMPolicy.ts index badaa4699b..a8c8c07c8f 100644 --- a/sdk/nodejs/dataproc/jobIAMPolicy.ts +++ b/sdk/nodejs/dataproc/jobIAMPolicy.ts @@ -118,15 +118,7 @@ export class JobIAMPolicy extends pulumi.CustomResource { * The policy data generated by a `gcp.organizations.getIAMPolicy` data source. */ public readonly policyData!: pulumi.Output; - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - */ public readonly project!: pulumi.Output; - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - */ public readonly region!: pulumi.Output; /** @@ -179,15 +171,7 @@ export interface JobIAMPolicyState { * The policy data generated by a `gcp.organizations.getIAMPolicy` data source. */ policyData?: pulumi.Input; - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - */ project?: pulumi.Input; - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - */ region?: pulumi.Input; } @@ -200,14 +184,6 @@ export interface JobIAMPolicyArgs { * The policy data generated by a `gcp.organizations.getIAMPolicy` data source. */ policyData: pulumi.Input; - /** - * The project in which the job belongs. If it - * is not provided, the provider will use a default. - */ project?: pulumi.Input; - /** - * The region in which the job belongs. If it - * is not provided, the provider will use a default. - */ region?: pulumi.Input; } diff --git a/sdk/nodejs/datastream/stream.ts b/sdk/nodejs/datastream/stream.ts index 23cc30e1bc..3bc216af5d 100644 --- a/sdk/nodejs/datastream/stream.ts +++ b/sdk/nodejs/datastream/stream.ts @@ -94,6 +94,11 @@ import * as utilities from "../utilities"; * role: "roles/storage.legacyBucketReader", * member: project.then(project => `serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com`), * }); + * const keyUser = new gcp.kms.CryptoKeyIAMMember("keyUser", { + * cryptoKeyId: "kms-name", + * role: "roles/cloudkms.cryptoKeyEncrypterDecrypter", + * member: project.then(project => `serviceAccount:service-${project.number}@gcp-sa-datastream.iam.gserviceaccount.com`), + * }); * const destinationConnectionProfile = new gcp.datastream.ConnectionProfile("destinationConnectionProfile", { * displayName: "Connection profile", * location: "us-central1", @@ -179,6 +184,104 @@ import * as utilities from "../utilities"; * }], * }, * }, + * customerManagedEncryptionKey: "kms-name", + * }, { + * dependsOn: [keyUser], + * }); + * ``` + * ### Datastream Stream Bigquery + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * import * as random from "@pulumi/random"; + * + * const project = gcp.organizations.getProject({}); + * const instance = new gcp.sql.DatabaseInstance("instance", { + * databaseVersion: "MYSQL_8_0", + * region: "us-central1", + * settings: { + * tier: "db-f1-micro", + * backupConfiguration: { + * enabled: true, + * binaryLogEnabled: true, + * }, + * ipConfiguration: { + * authorizedNetworks: [ + * { + * value: "34.71.242.81", + * }, + * { + * value: "34.72.28.29", + * }, + * { + * value: "34.67.6.157", + * }, + * { + * value: "34.67.234.134", + * }, + * { + * value: "34.72.239.218", + * }, + * ], + * }, + * }, + * deletionProtection: true, + * }); + * const db = new gcp.sql.Database("db", {instance: instance.name}); + * const pwd = new random.RandomPassword("pwd", { + * length: 16, + * special: false, + * }); + * const user = new gcp.sql.User("user", { + * instance: instance.name, + * host: "%", + * password: pwd.result, + * }); + * const sourceConnectionProfile = new gcp.datastream.ConnectionProfile("sourceConnectionProfile", { + * displayName: "Source connection profile", + * location: "us-central1", + * connectionProfileId: "source-profile", + * mysqlProfile: { + * hostname: instance.publicIpAddress, + * username: user.name, + * password: user.password, + * }, + * }); + * const bqSa = gcp.bigquery.getDefaultServiceAccount({}); + * const bigqueryKeyUser = new gcp.kms.CryptoKeyIAMMember("bigqueryKeyUser", { + * cryptoKeyId: "bigquery-kms-name", + * role: "roles/cloudkms.cryptoKeyEncrypterDecrypter", + * member: bqSa.then(bqSa => `serviceAccount:${bqSa.email}`), + * }); + * const destinationConnectionProfile = new gcp.datastream.ConnectionProfile("destinationConnectionProfile", { + * displayName: "Connection profile", + * location: "us-central1", + * connectionProfileId: "destination-profile", + * bigqueryProfile: {}, + * }); + * const _default = new gcp.datastream.Stream("default", { + * streamId: "my-stream", + * location: "us-central1", + * displayName: "my stream", + * sourceConfig: { + * sourceConnectionProfile: sourceConnectionProfile.id, + * mysqlSourceConfig: {}, + * }, + * destinationConfig: { + * destinationConnectionProfile: destinationConnectionProfile.id, + * bigqueryDestinationConfig: { + * sourceHierarchyDatasets: { + * datasetTemplate: { + * location: "us-central1", + * kmsKeyName: "bigquery-kms-name", + * }, + * }, + * }, + * }, + * backfillNone: {}, + * }, { + * dependsOn: [bigqueryKeyUser], * }); * ``` * @@ -235,6 +338,11 @@ export class Stream extends pulumi.CustomResource { * Backfill strategy to disable automatic backfill for the Stream's objects. */ public readonly backfillNone!: pulumi.Output; + /** + * A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + * will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + */ + public readonly customerManagedEncryptionKey!: pulumi.Output; /** * Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. */ @@ -294,6 +402,7 @@ export class Stream extends pulumi.CustomResource { const state = argsOrState as StreamState | undefined; resourceInputs["backfillAll"] = state ? state.backfillAll : undefined; resourceInputs["backfillNone"] = state ? state.backfillNone : undefined; + resourceInputs["customerManagedEncryptionKey"] = state ? state.customerManagedEncryptionKey : undefined; resourceInputs["desiredState"] = state ? state.desiredState : undefined; resourceInputs["destinationConfig"] = state ? state.destinationConfig : undefined; resourceInputs["displayName"] = state ? state.displayName : undefined; @@ -323,6 +432,7 @@ export class Stream extends pulumi.CustomResource { } resourceInputs["backfillAll"] = args ? args.backfillAll : undefined; resourceInputs["backfillNone"] = args ? args.backfillNone : undefined; + resourceInputs["customerManagedEncryptionKey"] = args ? args.customerManagedEncryptionKey : undefined; resourceInputs["desiredState"] = args ? args.desiredState : undefined; resourceInputs["destinationConfig"] = args ? args.destinationConfig : undefined; resourceInputs["displayName"] = args ? args.displayName : undefined; @@ -352,6 +462,11 @@ export interface StreamState { * Backfill strategy to disable automatic backfill for the Stream's objects. */ backfillNone?: pulumi.Input; + /** + * A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + * will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + */ + customerManagedEncryptionKey?: pulumi.Input; /** * Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. */ @@ -410,6 +525,11 @@ export interface StreamArgs { * Backfill strategy to disable automatic backfill for the Stream's objects. */ backfillNone?: pulumi.Input; + /** + * A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + * will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + */ + customerManagedEncryptionKey?: pulumi.Input; /** * Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. */ diff --git a/sdk/nodejs/deploymentmanager/deployment.ts b/sdk/nodejs/deploymentmanager/deployment.ts index 36e750817d..90320959ba 100644 --- a/sdk/nodejs/deploymentmanager/deployment.ts +++ b/sdk/nodejs/deploymentmanager/deployment.ts @@ -7,20 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * A collection of resources that are deployed and managed together using - * a configuration file - * - * > **Warning:** This resource is intended only to manage a Deployment resource, - * and attempts to manage the Deployment's resources in the provider as well - * will likely result in errors or unexpected behavior as the two tools - * fight over ownership. We strongly discourage doing so unless you are an - * experienced user of both tools. - * - * In addition, due to limitations of the API, the provider will treat - * deployments in preview as recreate-only for any update operation other - * than actually deploying an in-preview deployment (i.e. `preview=true` to - * `preview=false`). - * * ## Example Usage * ### Deployment Manager Deployment Basic * @@ -130,14 +116,10 @@ export class Deployment extends pulumi.CustomResource { */ public readonly name!: pulumi.Output; /** - * If set to true, a deployment is created with "shell" resources - * that are not actually instantiated. This allows you to preview a - * deployment. It can be updated to false to actually deploy - * with real resources. - * ~>**NOTE:** Deployment Manager does not allow update - * of a deployment in preview (unless updating to preview=false). Thus, - * the provider will force-recreate deployments if either preview is updated - * to true or if other fields are updated while preview is true. + * If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + * preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + * does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + * deployments if either preview is updated to true or if other fields are updated while preview is true. */ public readonly preview!: pulumi.Output; /** @@ -250,14 +232,10 @@ export interface DeploymentState { */ name?: pulumi.Input; /** - * If set to true, a deployment is created with "shell" resources - * that are not actually instantiated. This allows you to preview a - * deployment. It can be updated to false to actually deploy - * with real resources. - * ~>**NOTE:** Deployment Manager does not allow update - * of a deployment in preview (unless updating to preview=false). Thus, - * the provider will force-recreate deployments if either preview is updated - * to true or if other fields are updated while preview is true. + * If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + * preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + * does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + * deployments if either preview is updated to true or if other fields are updated while preview is true. */ preview?: pulumi.Input; /** @@ -316,14 +294,10 @@ export interface DeploymentArgs { */ name?: pulumi.Input; /** - * If set to true, a deployment is created with "shell" resources - * that are not actually instantiated. This allows you to preview a - * deployment. It can be updated to false to actually deploy - * with real resources. - * ~>**NOTE:** Deployment Manager does not allow update - * of a deployment in preview (unless updating to preview=false). Thus, - * the provider will force-recreate deployments if either preview is updated - * to true or if other fields are updated while preview is true. + * If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + * preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + * does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + * deployments if either preview is updated to true or if other fields are updated while preview is true. */ preview?: pulumi.Input; /** diff --git a/sdk/nodejs/diagflow/agent.ts b/sdk/nodejs/diagflow/agent.ts index 66246ff1a5..6983c6360e 100644 --- a/sdk/nodejs/diagflow/agent.ts +++ b/sdk/nodejs/diagflow/agent.ts @@ -143,12 +143,11 @@ export class Agent extends pulumi.CustomResource { */ public readonly supportedLanguageCodes!: pulumi.Output; /** - * The agent tier. If not specified, TIER_STANDARD is assumed. - * * TIER_STANDARD: Standard tier. - * * TIER_ENTERPRISE: Enterprise tier (Essentials). - * * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - * NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - * the the provider state and Dialogflow if the agent tier is changed outside of the provider. + * The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + * Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + * provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + * agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + * "TIER_ENTERPRISE_PLUS"] */ public readonly tier!: pulumi.Output; /** @@ -282,12 +281,11 @@ export interface AgentState { */ supportedLanguageCodes?: pulumi.Input[]>; /** - * The agent tier. If not specified, TIER_STANDARD is assumed. - * * TIER_STANDARD: Standard tier. - * * TIER_ENTERPRISE: Enterprise tier (Essentials). - * * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - * NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - * the the provider state and Dialogflow if the agent tier is changed outside of the provider. + * The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + * Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + * provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + * agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + * "TIER_ENTERPRISE_PLUS"] */ tier?: pulumi.Input; /** @@ -361,12 +359,11 @@ export interface AgentArgs { */ supportedLanguageCodes?: pulumi.Input[]>; /** - * The agent tier. If not specified, TIER_STANDARD is assumed. - * * TIER_STANDARD: Standard tier. - * * TIER_ENTERPRISE: Enterprise tier (Essentials). - * * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - * NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - * the the provider state and Dialogflow if the agent tier is changed outside of the provider. + * The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + * Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + * provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + * agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + * "TIER_ENTERPRISE_PLUS"] */ tier?: pulumi.Input; /** diff --git a/sdk/nodejs/diagflow/intent.ts b/sdk/nodejs/diagflow/intent.ts index e8d0a4a5f4..87613f322c 100644 --- a/sdk/nodejs/diagflow/intent.ts +++ b/sdk/nodejs/diagflow/intent.ts @@ -32,52 +32,6 @@ import * as utilities from "../utilities"; * dependsOn: [basicAgent], * }); * ``` - * ### Dialogflow Intent Full - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const agentProjectProject = new gcp.organizations.Project("agentProjectProject", { - * projectId: "tf-test-dialogflow", - * orgId: "123456789", - * }); - * const agentProjectService = new gcp.projects.Service("agentProjectService", { - * project: agentProjectProject.projectId, - * service: "dialogflow.googleapis.com", - * disableDependentServices: false, - * }); - * const dialogflowServiceAccount = new gcp.serviceaccount.Account("dialogflowServiceAccount", {accountId: "tf-test-dialogflow"}); - * const agentCreate = new gcp.projects.IAMMember("agentCreate", { - * project: agentProjectService.project, - * role: "roles/dialogflow.admin", - * member: pulumi.interpolate`serviceAccount:${dialogflowServiceAccount.email}`, - * }); - * const basicAgent = new gcp.diagflow.Agent("basicAgent", { - * project: agentProjectProject.projectId, - * displayName: "example_agent", - * defaultLanguageCode: "en", - * timeZone: "America/New_York", - * }); - * const fullIntent = new gcp.diagflow.Intent("fullIntent", { - * project: agentProjectProject.projectId, - * displayName: "full-intent", - * webhookState: "WEBHOOK_STATE_ENABLED", - * priority: 1, - * isFallback: false, - * mlDisabled: true, - * action: "some_action", - * resetContexts: true, - * inputContextNames: [pulumi.interpolate`projects/${agentProjectProject.projectId}/agent/sessions/-/contexts/some_id`], - * events: ["some_event"], - * defaultResponsePlatforms: [ - * "FACEBOOK", - * "SLACK", - * ], - * }, { - * dependsOn: [basicAgent], - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/dns/getManagedZone.ts b/sdk/nodejs/dns/getManagedZone.ts index 6585260b75..bd9391df88 100644 --- a/sdk/nodejs/dns/getManagedZone.ts +++ b/sdk/nodejs/dns/getManagedZone.ts @@ -58,9 +58,6 @@ export interface GetManagedZoneResult { * A textual description field. */ readonly description: string; - /** - * The fully qualified DNS name of this zone, e.g. `example.io.`. - */ readonly dnsName: string; /** * The provider-assigned unique ID for this managed resource. diff --git a/sdk/nodejs/dns/managedZone.ts b/sdk/nodejs/dns/managedZone.ts index 6a9b09b969..48856192ac 100644 --- a/sdk/nodejs/dns/managedZone.ts +++ b/sdk/nodejs/dns/managedZone.ts @@ -15,7 +15,7 @@ import * as utilities from "../utilities"; * * * [API documentation](https://cloud.google.com/dns/api/v1/managedZones) * * How-to Guides - * * [Managing Zones](https://cloud.google.com/dns/zones/) + * * [Managing Zones](https://cloud.google.com/dns/zones/) * * ## Example Usage * ### Dns Managed Zone Basic @@ -23,10 +23,12 @@ import * as utilities from "../utilities"; * ```typescript * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; + * import * as random from "@pulumi/random"; * + * const rnd = new random.RandomId("rnd", {byteLength: 4}); * const example_zone = new gcp.dns.ManagedZone("example-zone", { * description: "Example DNS zone", - * dnsName: "my-domain.com.", + * dnsName: pulumi.interpolate`example-${rnd.hex}.com.`, * labels: { * foo: "bar", * }, @@ -284,7 +286,7 @@ export class ManagedZone extends pulumi.CustomResource { */ public /*out*/ readonly creationTime!: pulumi.Output; /** - * A textual description field. Defaults to 'Managed by Pulumi'. + * A textual description field. Defaults to 'Managed by Terraform'. */ public readonly description!: pulumi.Output; /** @@ -343,14 +345,14 @@ export class ManagedZone extends pulumi.CustomResource { */ public readonly project!: pulumi.Output; /** - * Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - * lookup queries using automatically configured records for VPC resources. This only applies - * to networks listed under `privateVisibilityConfig`. + * Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + * automatically configured records for VPC resources. This only applies to networks listed under + * 'private_visibility_config'. */ public readonly reverseLookup!: pulumi.Output; /** - * The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - * Structure is documented below. + * The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + * information related to the namespace associated with the zone. */ public readonly serviceDirectoryConfig!: pulumi.Output; /** @@ -434,7 +436,7 @@ export interface ManagedZoneState { */ creationTime?: pulumi.Input; /** - * A textual description field. Defaults to 'Managed by Pulumi'. + * A textual description field. Defaults to 'Managed by Terraform'. */ description?: pulumi.Input; /** @@ -493,14 +495,14 @@ export interface ManagedZoneState { */ project?: pulumi.Input; /** - * Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - * lookup queries using automatically configured records for VPC resources. This only applies - * to networks listed under `privateVisibilityConfig`. + * Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + * automatically configured records for VPC resources. This only applies to networks listed under + * 'private_visibility_config'. */ reverseLookup?: pulumi.Input; /** - * The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - * Structure is documented below. + * The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + * information related to the namespace associated with the zone. */ serviceDirectoryConfig?: pulumi.Input; /** @@ -522,7 +524,7 @@ export interface ManagedZoneArgs { */ cloudLoggingConfig?: pulumi.Input; /** - * A textual description field. Defaults to 'Managed by Pulumi'. + * A textual description field. Defaults to 'Managed by Terraform'. */ description?: pulumi.Input; /** @@ -572,14 +574,14 @@ export interface ManagedZoneArgs { */ project?: pulumi.Input; /** - * Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - * lookup queries using automatically configured records for VPC resources. This only applies - * to networks listed under `privateVisibilityConfig`. + * Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + * automatically configured records for VPC resources. This only applies to networks listed under + * 'private_visibility_config'. */ reverseLookup?: pulumi.Input; /** - * The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - * Structure is documented below. + * The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + * information related to the namespace associated with the zone. */ serviceDirectoryConfig?: pulumi.Input; /** diff --git a/sdk/nodejs/dns/policy.ts b/sdk/nodejs/dns/policy.ts index 66bbdf2bd0..240a536936 100644 --- a/sdk/nodejs/dns/policy.ts +++ b/sdk/nodejs/dns/policy.ts @@ -102,7 +102,7 @@ export class Policy extends pulumi.CustomResource { */ public readonly alternativeNameServerConfig!: pulumi.Output; /** - * A textual description field. Defaults to 'Managed by Pulumi'. + * A textual description field. Defaults to 'Managed by Terraform'. */ public readonly description!: pulumi.Output; /** @@ -179,7 +179,7 @@ export interface PolicyState { */ alternativeNameServerConfig?: pulumi.Input; /** - * A textual description field. Defaults to 'Managed by Pulumi'. + * A textual description field. Defaults to 'Managed by Terraform'. */ description?: pulumi.Input; /** @@ -222,7 +222,7 @@ export interface PolicyArgs { */ alternativeNameServerConfig?: pulumi.Input; /** - * A textual description field. Defaults to 'Managed by Pulumi'. + * A textual description field. Defaults to 'Managed by Terraform'. */ description?: pulumi.Input; /** diff --git a/sdk/nodejs/firebase/getWebApp.ts b/sdk/nodejs/firebase/getWebApp.ts index 21a2405dee..5e5dea964c 100644 --- a/sdk/nodejs/firebase/getWebApp.ts +++ b/sdk/nodejs/firebase/getWebApp.ts @@ -4,9 +4,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; -/** - * A Google Cloud Firebase web application instance - */ export function getWebApp(args: GetWebAppArgs, opts?: pulumi.InvokeOptions): Promise { opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); @@ -48,9 +45,6 @@ export interface GetWebAppResult { readonly name: string; readonly project: string; } -/** - * A Google Cloud Firebase web application instance - */ export function getWebAppOutput(args: GetWebAppOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { return pulumi.output(args).apply((a: any) => getWebApp(a, opts)) } diff --git a/sdk/nodejs/firebase/getWebAppConfig.ts b/sdk/nodejs/firebase/getWebAppConfig.ts index 6f9104836b..aec98f1fca 100644 --- a/sdk/nodejs/firebase/getWebAppConfig.ts +++ b/sdk/nodejs/firebase/getWebAppConfig.ts @@ -4,15 +4,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; -/** - * A Google Cloud Firebase web application configuration - * - * To get more information about WebApp, see: - * - * * [API documentation](https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects.webApps) - * * How-to Guides - * * [Official Documentation](https://firebase.google.com/) - */ export function getWebAppConfig(args: GetWebAppConfigArgs, opts?: pulumi.InvokeOptions): Promise { opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); @@ -85,15 +76,6 @@ export interface GetWebAppConfigResult { readonly storageBucket: string; readonly webAppId: string; } -/** - * A Google Cloud Firebase web application configuration - * - * To get more information about WebApp, see: - * - * * [API documentation](https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects.webApps) - * * How-to Guides - * * [Official Documentation](https://firebase.google.com/) - */ export function getWebAppConfigOutput(args: GetWebAppConfigOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { return pulumi.output(args).apply((a: any) => getWebAppConfig(a, opts)) } diff --git a/sdk/nodejs/firebase/project.ts b/sdk/nodejs/firebase/project.ts index 77aa5cc524..f6257039e5 100644 --- a/sdk/nodejs/firebase/project.ts +++ b/sdk/nodejs/firebase/project.ts @@ -5,34 +5,7 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * A Google Cloud Firebase instance. This enables Firebase resources on a given google project. - * Since a FirebaseProject is actually also a GCP Project, a FirebaseProject uses underlying GCP - * identifiers (most importantly, the projectId) as its own for easy interop with GCP APIs. - * Once Firebase has been added to a Google Project it cannot be removed. - * - * To get more information about Project, see: - * - * * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects) - * * How-to Guides - * * [Official Documentation](https://firebase.google.com/) - * * ## Example Usage - * ### Firebase Project Basic - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const defaultProject = new gcp.organizations.Project("defaultProject", { - * projectId: "tf-test", - * orgId: "123456789", - * }, { - * provider: google_beta, - * }); - * const defaultFirebase_projectProject = new gcp.firebase.Project("defaultFirebase/projectProject", {project: defaultProject.projectId}, { - * provider: google_beta, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/firebase/projectLocation.ts b/sdk/nodejs/firebase/projectLocation.ts index 661edbc815..74cbc3136b 100644 --- a/sdk/nodejs/firebase/projectLocation.ts +++ b/sdk/nodejs/firebase/projectLocation.ts @@ -5,44 +5,7 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Sets the default Google Cloud Platform (GCP) resource location for the specified FirebaseProject. - * This method creates an App Engine application with a default Cloud Storage bucket, located in the specified - * locationId. This location must be one of the available GCP resource locations. - * After the default GCP resource location is finalized, or if it was already set, it cannot be changed. - * The default GCP resource location for the specified FirebaseProject might already be set because either the - * GCP Project already has an App Engine application or defaultLocation.finalize was previously called with a - * specified locationId. Any new calls to defaultLocation.finalize with a different specified locationId will - * return a 409 error. - * - * To get more information about ProjectLocation, see: - * - * * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.defaultLocation/finalize) - * * How-to Guides - * * [Official Documentation](https://firebase.google.com/) - * * ## Example Usage - * ### Firebase Project Location Basic - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const defaultProject = new gcp.organizations.Project("defaultProject", { - * projectId: "tf-test", - * orgId: "123456789", - * }, { - * provider: google_beta, - * }); - * const defaultFirebase_projectProject = new gcp.firebase.Project("defaultFirebase/projectProject", {project: defaultProject.projectId}, { - * provider: google_beta, - * }); - * const basic = new gcp.firebase.ProjectLocation("basic", { - * project: defaultFirebase / projectProject.project, - * locationId: "us-central", - * }, { - * provider: google_beta, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/firebase/webApp.ts b/sdk/nodejs/firebase/webApp.ts index e1a350eecc..d83136378b 100644 --- a/sdk/nodejs/firebase/webApp.ts +++ b/sdk/nodejs/firebase/webApp.ts @@ -5,59 +5,7 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * A Google Cloud Firebase web application instance - * - * To get more information about WebApp, see: - * - * * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.webApps) - * * How-to Guides - * * [Official Documentation](https://firebase.google.com/) - * * ## Example Usage - * ### Firebase Web App Basic - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const defaultProject = new gcp.organizations.Project("defaultProject", { - * projectId: "tf-test", - * orgId: "123456789", - * }, { - * provider: google_beta, - * }); - * const defaultFirebase_projectProject = new gcp.firebase.Project("defaultFirebase/projectProject", {project: defaultProject.projectId}, { - * provider: google_beta, - * }); - * const basicWebApp = new gcp.firebase.WebApp("basicWebApp", { - * project: defaultProject.projectId, - * displayName: "Display Name Basic", - * deletionPolicy: "DELETE", - * }, { - * provider: google_beta, - * dependsOn: [defaultFirebase / projectProject], - * }); - * const basicWebAppConfig = gcp.firebase.getWebAppConfigOutput({ - * webAppId: basicWebApp.appId, - * }); - * const defaultBucket = new gcp.storage.Bucket("defaultBucket", {location: "US"}, { - * provider: google_beta, - * }); - * const defaultBucketObject = new gcp.storage.BucketObject("defaultBucketObject", { - * bucket: defaultBucket.name, - * content: pulumi.all([basicWebApp.appId, basicWebAppConfig, basicWebAppConfig, basicWebAppConfig["database_url"] || "", basicWebAppConfig["storage_bucket"] || "", basicWebAppConfig["messaging_sender_id"] || "", basicWebAppConfig["measurement_id"] || ""]).apply(([appId, basicWebAppConfig, basicWebAppConfig1, s, s1, s2, s3]) => JSON.stringify({ - * appId: appId, - * apiKey: basicWebAppConfig.apiKey, - * authDomain: basicWebAppConfig1.authDomain, - * databaseURL: s, - * storageBucket: s1, - * messagingSenderId: s2, - * measurementId: s3, - * })), - * }, { - * provider: google_beta, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/firestore/document.ts b/sdk/nodejs/firestore/document.ts index f54b268122..ac640561ab 100644 --- a/sdk/nodejs/firestore/document.ts +++ b/sdk/nodejs/firestore/document.ts @@ -29,7 +29,7 @@ import * as utilities from "../utilities"; * * const mydoc = new gcp.firestore.Document("mydoc", { * collection: "somenewcollection", - * documentId: "my-doc", + * documentId: `my-doc-%{random_suffix}`, * fields: "{\"something\":{\"mapValue\":{\"fields\":{\"akey\":{\"stringValue\":\"avalue\"}}}}}", * project: "my-project-name", * }); @@ -42,7 +42,7 @@ import * as utilities from "../utilities"; * * const mydoc = new gcp.firestore.Document("mydoc", { * collection: "somenewcollection", - * documentId: "my-doc", + * documentId: `my-doc-%{random_suffix}`, * fields: "{\"something\":{\"mapValue\":{\"fields\":{\"akey\":{\"stringValue\":\"avalue\"}}}}}", * project: "my-project-name", * }); diff --git a/sdk/nodejs/folder/iamAuditConfig.ts b/sdk/nodejs/folder/iamAuditConfig.ts index 9863524043..6f81708a55 100644 --- a/sdk/nodejs/folder/iamAuditConfig.ts +++ b/sdk/nodejs/folder/iamAuditConfig.ts @@ -7,152 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - * - * * `gcp.folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - * * `gcp.folder.IAMBinding`: 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 folder are preserved. - * * `gcp.folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - * * `gcp.folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.folder.IAMPolicy` **cannot** be used in conjunction with `gcp.folder.IAMBinding`, `gcp.folder.IAMMember`, or `gcp.folder.IamAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.folder.IAMBinding` resources **can be** used in conjunction with `gcp.folder.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_folder\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your folder - * using this resource. Deleting a `gcp.folder.IAMPolicy` removes access - * from anyone without permissions on its parent folder/organization. Proceed with caution. - * It's not recommended to use `gcp.folder.IAMPolicy` with your provider folder - * to avoid locking yourself out, and it should generally only be used with folders - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const folder = new gcp.folder.IAMPolicy("folder", { - * folder: "folders/1234567", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * role: "roles/compute.admin", - * }], - * }); - * const folder = new gcp.folder.IAMPolicy("folder", { - * folder: "folders/1234567", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_folder\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IAMBinding("folder", { - * folder: "folders/1234567", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IAMBinding("folder", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * folder: "folders/1234567", - * members: ["user:jane@example.com"], - * role: "roles/container.admin", - * }); - * ``` - * - * ## google\_folder\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IAMMember("folder", { - * folder: "folders/1234567", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IAMMember("folder", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * folder: "folders/1234567", - * member: "user:jane@example.com", - * role: "roles/firebase.admin", - * }); - * ``` - * - * ## google\_folder\_iam\_audit\_config - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IamAuditConfig("folder", { - * auditLogConfigs: [ - * { - * logType: "ADMIN_READ", - * }, - * { - * exemptedMembers: ["user:joebloggs@hashicorp.com"], - * logType: "DATA_READ", - * }, - * ], - * folder: "folders/1234567", - * service: "allServices", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/folder/iambinding.ts b/sdk/nodejs/folder/iambinding.ts index 96b5faa44c..6d42528850 100644 --- a/sdk/nodejs/folder/iambinding.ts +++ b/sdk/nodejs/folder/iambinding.ts @@ -7,47 +7,45 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Allows creation and management of a single binding within IAM policy for - * an existing Google Cloud Platform folder. + * ## Import + * + * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. * - * > **Note:** This resource _must not_ be used in conjunction with - * `gcp.folder.IAMPolicy` or they will fight over what your policy - * should be. + * This member resource can be imported using the `folder`, role, and member e.g. * - * > **Note:** On create, this resource will overwrite members of any existing roles. - * Use `pulumi import` and inspect the output to ensure - * your existing members are preserved. + * ```sh + * $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder roles/viewer user:foo@example.com" + * ``` * - * ## Example Usage + * IAM binding imports use space-delimited identifiers; the resource in question and the role. * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; + * This binding resource can be imported using the `folder` and role, e.g. * - * const department1 = new gcp.organizations.Folder("department1", { - * displayName: "Department 1", - * parent: "organizations/1234567", - * }); - * const admin = new gcp.folder.IAMBinding("admin", { - * folder: department1.name, - * role: "roles/editor", - * members: ["user:alice@gmail.com"], - * }); + * ```sh + * $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder roles/viewer" * ``` * - * ## Import + * IAM policy imports use the identifier of the resource in question. * - * IAM binding imports use space-delimited identifiers; first the resource in question and then the role. + * This policy resource can be imported using the `folder`. * - * These bindings can be imported using the `folder` and role, e.g. + * ```sh + * $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder folder + * ``` + * + * IAM audit config imports use the identifier of the resource in question and the service, e.g. * * ```sh - * $ pulumi import gcp:folder/iAMBinding:IAMBinding viewer "folder-name roles/viewer" + * $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder foo.googleapis.com" * ``` * - * -> **Custom Roles**If you're importing a IAM binding with a custom role, make sure to use the + * -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the * - * full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. + * full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure + * + * ```sh + * $ pulumi import gcp:folder/iAMBinding:IAMBinding to include the title of condition, e.g. `google_folder_iam_binding.my_folder "folder roles/{{role_id}} condition-title"` + * ``` */ export class IAMBinding extends pulumi.CustomResource { /** @@ -77,6 +75,10 @@ export class IAMBinding extends pulumi.CustomResource { return obj['__pulumiType'] === IAMBinding.__pulumiType; } + /** + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + */ public readonly condition!: pulumi.Output; /** * (Computed) The etag of the folder's IAM policy. @@ -86,20 +88,11 @@ export class IAMBinding extends pulumi.CustomResource { * The resource name of the folder the policy is attached to. Its format is folders/{folder_id}. */ public readonly folder!: pulumi.Output; - /** - * An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - */ public readonly members!: pulumi.Output; /** * The role that should be applied. Only one * `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. */ public readonly role!: pulumi.Output; @@ -147,6 +140,10 @@ export class IAMBinding extends pulumi.CustomResource { * Input properties used for looking up and filtering IAMBinding resources. */ export interface IAMBindingState { + /** + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + */ condition?: pulumi.Input; /** * (Computed) The etag of the folder's IAM policy. @@ -156,20 +153,11 @@ export interface IAMBindingState { * The resource name of the folder the policy is attached to. Its format is folders/{folder_id}. */ folder?: pulumi.Input; - /** - * An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - */ members?: pulumi.Input[]>; /** * The role that should be applied. Only one * `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. */ role?: pulumi.Input; } @@ -178,25 +166,20 @@ export interface IAMBindingState { * The set of arguments for constructing a IAMBinding resource. */ export interface IAMBindingArgs { + /** + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + */ condition?: pulumi.Input; /** * The resource name of the folder the policy is attached to. Its format is folders/{folder_id}. */ folder: pulumi.Input; - /** - * An array of identities that will be granted the privilege in the `role`. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - */ members: pulumi.Input[]>; /** * The role that should be applied. Only one * `gcp.folder.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. */ role: pulumi.Input; } diff --git a/sdk/nodejs/folder/iammember.ts b/sdk/nodejs/folder/iammember.ts index e46d261484..b3dcd2665d 100644 --- a/sdk/nodejs/folder/iammember.ts +++ b/sdk/nodejs/folder/iammember.ts @@ -7,152 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - * - * * `gcp.folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - * * `gcp.folder.IAMBinding`: 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 folder are preserved. - * * `gcp.folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - * * `gcp.folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.folder.IAMPolicy` **cannot** be used in conjunction with `gcp.folder.IAMBinding`, `gcp.folder.IAMMember`, or `gcp.folder.IamAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.folder.IAMBinding` resources **can be** used in conjunction with `gcp.folder.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_folder\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your folder - * using this resource. Deleting a `gcp.folder.IAMPolicy` removes access - * from anyone without permissions on its parent folder/organization. Proceed with caution. - * It's not recommended to use `gcp.folder.IAMPolicy` with your provider folder - * to avoid locking yourself out, and it should generally only be used with folders - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const folder = new gcp.folder.IAMPolicy("folder", { - * folder: "folders/1234567", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * role: "roles/compute.admin", - * }], - * }); - * const folder = new gcp.folder.IAMPolicy("folder", { - * folder: "folders/1234567", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_folder\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IAMBinding("folder", { - * folder: "folders/1234567", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IAMBinding("folder", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * folder: "folders/1234567", - * members: ["user:jane@example.com"], - * role: "roles/container.admin", - * }); - * ``` - * - * ## google\_folder\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IAMMember("folder", { - * folder: "folders/1234567", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IAMMember("folder", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * folder: "folders/1234567", - * member: "user:jane@example.com", - * role: "roles/firebase.admin", - * }); - * ``` - * - * ## google\_folder\_iam\_audit\_config - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IamAuditConfig("folder", { - * auditLogConfigs: [ - * { - * logType: "ADMIN_READ", - * }, - * { - * exemptedMembers: ["user:joebloggs@hashicorp.com"], - * logType: "DATA_READ", - * }, - * ], - * folder: "folders/1234567", - * service: "allServices", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/folder/iampolicy.ts b/sdk/nodejs/folder/iampolicy.ts index f567158b02..51d6646ff2 100644 --- a/sdk/nodejs/folder/iampolicy.ts +++ b/sdk/nodejs/folder/iampolicy.ts @@ -5,152 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - * - * * `gcp.folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - * * `gcp.folder.IAMBinding`: 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 folder are preserved. - * * `gcp.folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - * * `gcp.folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.folder.IAMPolicy` **cannot** be used in conjunction with `gcp.folder.IAMBinding`, `gcp.folder.IAMMember`, or `gcp.folder.IamAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.folder.IAMBinding` resources **can be** used in conjunction with `gcp.folder.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_folder\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your folder - * using this resource. Deleting a `gcp.folder.IAMPolicy` removes access - * from anyone without permissions on its parent folder/organization. Proceed with caution. - * It's not recommended to use `gcp.folder.IAMPolicy` with your provider folder - * to avoid locking yourself out, and it should generally only be used with folders - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const folder = new gcp.folder.IAMPolicy("folder", { - * folder: "folders/1234567", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * role: "roles/compute.admin", - * }], - * }); - * const folder = new gcp.folder.IAMPolicy("folder", { - * folder: "folders/1234567", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_folder\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IAMBinding("folder", { - * folder: "folders/1234567", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IAMBinding("folder", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * folder: "folders/1234567", - * members: ["user:jane@example.com"], - * role: "roles/container.admin", - * }); - * ``` - * - * ## google\_folder\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IAMMember("folder", { - * folder: "folders/1234567", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IAMMember("folder", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * folder: "folders/1234567", - * member: "user:jane@example.com", - * role: "roles/firebase.admin", - * }); - * ``` - * - * ## google\_folder\_iam\_audit\_config - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const folder = new gcp.folder.IamAuditConfig("folder", { - * auditLogConfigs: [ - * { - * logType: "ADMIN_READ", - * }, - * { - * exemptedMembers: ["user:joebloggs@hashicorp.com"], - * logType: "DATA_READ", - * }, - * ], - * folder: "folders/1234567", - * service: "allServices", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/healthcare/datasetIamBinding.ts b/sdk/nodejs/healthcare/datasetIamBinding.ts index 3fc5210f6e..d97b94cb1d 100644 --- a/sdk/nodejs/healthcare/datasetIamBinding.ts +++ b/sdk/nodejs/healthcare/datasetIamBinding.ts @@ -7,60 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - * - * * `gcp.healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - * * `gcp.healthcare.DatasetIamBinding`: 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 dataset are preserved. - * * `gcp.healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - * - * > **Note:** `gcp.healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DatasetIamBinding` and `gcp.healthcare.DatasetIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.DatasetIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_dataset\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const dataset = new gcp.healthcare.DatasetIamPolicy("dataset", { - * datasetId: "your-dataset-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_healthcare\_dataset\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const dataset = new gcp.healthcare.DatasetIamBinding("dataset", { - * datasetId: "your-dataset-id", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * ## google\_healthcare\_dataset\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const dataset = new gcp.healthcare.DatasetIamMember("dataset", { - * datasetId: "your-dataset-id", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/healthcare/datasetIamMember.ts b/sdk/nodejs/healthcare/datasetIamMember.ts index 663df0b646..0bd651a1bb 100644 --- a/sdk/nodejs/healthcare/datasetIamMember.ts +++ b/sdk/nodejs/healthcare/datasetIamMember.ts @@ -7,60 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - * - * * `gcp.healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - * * `gcp.healthcare.DatasetIamBinding`: 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 dataset are preserved. - * * `gcp.healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - * - * > **Note:** `gcp.healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DatasetIamBinding` and `gcp.healthcare.DatasetIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.DatasetIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_dataset\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const dataset = new gcp.healthcare.DatasetIamPolicy("dataset", { - * datasetId: "your-dataset-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_healthcare\_dataset\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const dataset = new gcp.healthcare.DatasetIamBinding("dataset", { - * datasetId: "your-dataset-id", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * ## google\_healthcare\_dataset\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const dataset = new gcp.healthcare.DatasetIamMember("dataset", { - * datasetId: "your-dataset-id", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/healthcare/datasetIamPolicy.ts b/sdk/nodejs/healthcare/datasetIamPolicy.ts index 7b083f8b95..587eebfc48 100644 --- a/sdk/nodejs/healthcare/datasetIamPolicy.ts +++ b/sdk/nodejs/healthcare/datasetIamPolicy.ts @@ -5,60 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - * - * * `gcp.healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - * * `gcp.healthcare.DatasetIamBinding`: 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 dataset are preserved. - * * `gcp.healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - * - * > **Note:** `gcp.healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DatasetIamBinding` and `gcp.healthcare.DatasetIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.DatasetIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_dataset\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const dataset = new gcp.healthcare.DatasetIamPolicy("dataset", { - * datasetId: "your-dataset-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_healthcare\_dataset\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const dataset = new gcp.healthcare.DatasetIamBinding("dataset", { - * datasetId: "your-dataset-id", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * ## google\_healthcare\_dataset\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const dataset = new gcp.healthcare.DatasetIamMember("dataset", { - * datasetId: "your-dataset-id", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/healthcare/dicomStore.ts b/sdk/nodejs/healthcare/dicomStore.ts index 33d80b4657..fd8caed669 100644 --- a/sdk/nodejs/healthcare/dicomStore.ts +++ b/sdk/nodejs/healthcare/dicomStore.ts @@ -152,9 +152,9 @@ export class DicomStore extends pulumi.CustomResource { */ public /*out*/ readonly selfLink!: pulumi.Output; /** - * To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. */ public readonly streamConfigs!: pulumi.Output; @@ -229,9 +229,9 @@ export interface DicomStoreState { */ selfLink?: pulumi.Input; /** - * To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. */ streamConfigs?: pulumi.Input[]>; } @@ -267,9 +267,9 @@ export interface DicomStoreArgs { */ notificationConfig?: pulumi.Input; /** - * To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - * streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - * Structure is documented below. + * To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + * you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + * tables in a BigQuery dataset. */ streamConfigs?: pulumi.Input[]>; } diff --git a/sdk/nodejs/healthcare/dicomStoreIamBinding.ts b/sdk/nodejs/healthcare/dicomStoreIamBinding.ts index 2644e49a94..42a31ba292 100644 --- a/sdk/nodejs/healthcare/dicomStoreIamBinding.ts +++ b/sdk/nodejs/healthcare/dicomStoreIamBinding.ts @@ -7,60 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - * * `gcp.healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - * * `gcp.healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - * - * > **Note:** `gcp.healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DicomStoreIamBinding` and `gcp.healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_dicom\_store\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const dicomStore = new gcp.healthcare.DicomStoreIamPolicy("dicomStore", { - * dicomStoreId: "your-dicom-store-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_healthcare\_dicom\_store\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const dicomStore = new gcp.healthcare.DicomStoreIamBinding("dicomStore", { - * dicomStoreId: "your-dicom-store-id", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * ## google\_healthcare\_dicom\_store\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const dicomStore = new gcp.healthcare.DicomStoreIamMember("dicomStore", { - * dicomStoreId: "your-dicom-store-id", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/healthcare/dicomStoreIamMember.ts b/sdk/nodejs/healthcare/dicomStoreIamMember.ts index 2913e7debe..659c1410c0 100644 --- a/sdk/nodejs/healthcare/dicomStoreIamMember.ts +++ b/sdk/nodejs/healthcare/dicomStoreIamMember.ts @@ -7,60 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - * * `gcp.healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - * * `gcp.healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - * - * > **Note:** `gcp.healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DicomStoreIamBinding` and `gcp.healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_dicom\_store\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const dicomStore = new gcp.healthcare.DicomStoreIamPolicy("dicomStore", { - * dicomStoreId: "your-dicom-store-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_healthcare\_dicom\_store\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const dicomStore = new gcp.healthcare.DicomStoreIamBinding("dicomStore", { - * dicomStoreId: "your-dicom-store-id", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * ## google\_healthcare\_dicom\_store\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const dicomStore = new gcp.healthcare.DicomStoreIamMember("dicomStore", { - * dicomStoreId: "your-dicom-store-id", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/healthcare/dicomStoreIamPolicy.ts b/sdk/nodejs/healthcare/dicomStoreIamPolicy.ts index 96f24dfc6a..cefc022835 100644 --- a/sdk/nodejs/healthcare/dicomStoreIamPolicy.ts +++ b/sdk/nodejs/healthcare/dicomStoreIamPolicy.ts @@ -5,60 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - * * `gcp.healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - * * `gcp.healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - * - * > **Note:** `gcp.healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.DicomStoreIamBinding` and `gcp.healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_dicom\_store\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const dicomStore = new gcp.healthcare.DicomStoreIamPolicy("dicomStore", { - * dicomStoreId: "your-dicom-store-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_healthcare\_dicom\_store\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const dicomStore = new gcp.healthcare.DicomStoreIamBinding("dicomStore", { - * dicomStoreId: "your-dicom-store-id", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * ## google\_healthcare\_dicom\_store\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const dicomStore = new gcp.healthcare.DicomStoreIamMember("dicomStore", { - * dicomStoreId: "your-dicom-store-id", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/healthcare/fhirStore.ts b/sdk/nodejs/healthcare/fhirStore.ts index 85115c5a18..0316e7e5aa 100644 --- a/sdk/nodejs/healthcare/fhirStore.ts +++ b/sdk/nodejs/healthcare/fhirStore.ts @@ -46,6 +46,17 @@ import * as utilities from "../utilities"; * import * as pulumi from "@pulumi/pulumi"; * import * as gcp from "@pulumi/gcp"; * + * const project = gcp.organizations.getProject({}); + * const bigqueryEditor = new gcp.projects.IAMMember("bigqueryEditor", { + * project: project.then(project => project.projectId), + * role: "roles/bigquery.dataEditor", + * member: project.then(project => `serviceAccount:service-${project.number}@gcp-sa-healthcare.iam.gserviceaccount.com`), + * }); + * const bigqueryJobUser = new gcp.projects.IAMMember("bigqueryJobUser", { + * project: project.then(project => project.projectId), + * role: "roles/bigquery.jobUser", + * member: project.then(project => `serviceAccount:service-${project.number}@gcp-sa-healthcare.iam.gserviceaccount.com`), + * }); * const dataset = new gcp.healthcare.Dataset("dataset", {location: "us-central1"}); * const bqDataset = new gcp.bigquery.Dataset("bqDataset", { * datasetId: "bq_example_dataset", @@ -73,6 +84,11 @@ import * as utilities from "../utilities"; * }, * }, * }], + * }, { + * dependsOn: [ + * bigqueryEditor, + * bigqueryJobUser, + * ], * }); * const topic = new gcp.pubsub.Topic("topic", {}); * ``` diff --git a/sdk/nodejs/healthcare/fhirStoreIamBinding.ts b/sdk/nodejs/healthcare/fhirStoreIamBinding.ts index c71f3e000a..b8cf6f3806 100644 --- a/sdk/nodejs/healthcare/fhirStoreIamBinding.ts +++ b/sdk/nodejs/healthcare/fhirStoreIamBinding.ts @@ -7,60 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - * * `gcp.healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - * * `gcp.healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - * - * > **Note:** `gcp.healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.FhirStoreIamBinding` and `gcp.healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_fhir\_store\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const fhirStore = new gcp.healthcare.FhirStoreIamPolicy("fhirStore", { - * fhirStoreId: "your-fhir-store-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_healthcare\_fhir\_store\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const fhirStore = new gcp.healthcare.FhirStoreIamBinding("fhirStore", { - * fhirStoreId: "your-fhir-store-id", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * ## google\_healthcare\_fhir\_store\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const fhirStore = new gcp.healthcare.FhirStoreIamMember("fhirStore", { - * fhirStoreId: "your-fhir-store-id", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/healthcare/fhirStoreIamMember.ts b/sdk/nodejs/healthcare/fhirStoreIamMember.ts index 961db7ab4e..09015799e9 100644 --- a/sdk/nodejs/healthcare/fhirStoreIamMember.ts +++ b/sdk/nodejs/healthcare/fhirStoreIamMember.ts @@ -7,60 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - * * `gcp.healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - * * `gcp.healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - * - * > **Note:** `gcp.healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.FhirStoreIamBinding` and `gcp.healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_fhir\_store\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const fhirStore = new gcp.healthcare.FhirStoreIamPolicy("fhirStore", { - * fhirStoreId: "your-fhir-store-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_healthcare\_fhir\_store\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const fhirStore = new gcp.healthcare.FhirStoreIamBinding("fhirStore", { - * fhirStoreId: "your-fhir-store-id", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * ## google\_healthcare\_fhir\_store\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const fhirStore = new gcp.healthcare.FhirStoreIamMember("fhirStore", { - * fhirStoreId: "your-fhir-store-id", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/healthcare/fhirStoreIamPolicy.ts b/sdk/nodejs/healthcare/fhirStoreIamPolicy.ts index 01bfcb5374..b2eac25a4b 100644 --- a/sdk/nodejs/healthcare/fhirStoreIamPolicy.ts +++ b/sdk/nodejs/healthcare/fhirStoreIamPolicy.ts @@ -5,60 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - * * `gcp.healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - * * `gcp.healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - * - * > **Note:** `gcp.healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.FhirStoreIamBinding` and `gcp.healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_fhir\_store\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const fhirStore = new gcp.healthcare.FhirStoreIamPolicy("fhirStore", { - * fhirStoreId: "your-fhir-store-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_healthcare\_fhir\_store\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const fhirStore = new gcp.healthcare.FhirStoreIamBinding("fhirStore", { - * fhirStoreId: "your-fhir-store-id", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * ## google\_healthcare\_fhir\_store\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const fhirStore = new gcp.healthcare.FhirStoreIamMember("fhirStore", { - * fhirStoreId: "your-fhir-store-id", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/healthcare/hl7StoreIamBinding.ts b/sdk/nodejs/healthcare/hl7StoreIamBinding.ts index 47ed0a1a9b..99bb3916bf 100644 --- a/sdk/nodejs/healthcare/hl7StoreIamBinding.ts +++ b/sdk/nodejs/healthcare/hl7StoreIamBinding.ts @@ -7,60 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - * * `gcp.healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - * * `gcp.healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - * - * > **Note:** `gcp.healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.Hl7StoreIamBinding` and `gcp.healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const hl7V2Store = new gcp.healthcare.Hl7StoreIamPolicy("hl7V2Store", { - * hl7V2StoreId: "your-hl7-v2-store-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const hl7V2Store = new gcp.healthcare.Hl7StoreIamBinding("hl7V2Store", { - * hl7V2StoreId: "your-hl7-v2-store-id", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const hl7V2Store = new gcp.healthcare.Hl7StoreIamMember("hl7V2Store", { - * hl7V2StoreId: "your-hl7-v2-store-id", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/healthcare/hl7StoreIamMember.ts b/sdk/nodejs/healthcare/hl7StoreIamMember.ts index d65bc90ab6..45f307e7e6 100644 --- a/sdk/nodejs/healthcare/hl7StoreIamMember.ts +++ b/sdk/nodejs/healthcare/hl7StoreIamMember.ts @@ -7,60 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - * * `gcp.healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - * * `gcp.healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - * - * > **Note:** `gcp.healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.Hl7StoreIamBinding` and `gcp.healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const hl7V2Store = new gcp.healthcare.Hl7StoreIamPolicy("hl7V2Store", { - * hl7V2StoreId: "your-hl7-v2-store-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const hl7V2Store = new gcp.healthcare.Hl7StoreIamBinding("hl7V2Store", { - * hl7V2StoreId: "your-hl7-v2-store-id", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const hl7V2Store = new gcp.healthcare.Hl7StoreIamMember("hl7V2Store", { - * hl7V2StoreId: "your-hl7-v2-store-id", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/healthcare/hl7StoreIamPolicy.ts b/sdk/nodejs/healthcare/hl7StoreIamPolicy.ts index 664c0c9af2..9559e4c3da 100644 --- a/sdk/nodejs/healthcare/hl7StoreIamPolicy.ts +++ b/sdk/nodejs/healthcare/hl7StoreIamPolicy.ts @@ -5,60 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - * - * * `gcp.healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - * * `gcp.healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - * * `gcp.healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - * - * > **Note:** `gcp.healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `gcp.healthcare.Hl7StoreIamBinding` and `gcp.healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `gcp.healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const hl7V2Store = new gcp.healthcare.Hl7StoreIamPolicy("hl7V2Store", { - * hl7V2StoreId: "your-hl7-v2-store-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const hl7V2Store = new gcp.healthcare.Hl7StoreIamBinding("hl7V2Store", { - * hl7V2StoreId: "your-hl7-v2-store-id", - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }); - * ``` - * - * ## google\_healthcare\_hl7\_v2\_store\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const hl7V2Store = new gcp.healthcare.Hl7StoreIamMember("hl7V2Store", { - * hl7V2StoreId: "your-hl7-v2-store-id", - * member: "user:jane@example.com", - * role: "roles/editor", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/iam/accessBoundaryPolicy.ts b/sdk/nodejs/iam/accessBoundaryPolicy.ts new file mode 100644 index 0000000000..4d7f3639b2 --- /dev/null +++ b/sdk/nodejs/iam/accessBoundaryPolicy.ts @@ -0,0 +1,159 @@ +// *** WARNING: this file 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"; + +/** + * Represents a collection of access boundary policies to apply to a given resource. + * **NOTE**: This is a private feature and users should contact GCP support + * if they would like to test it. + * + * ## Example Usage + * + * ## Import + * + * AccessBoundaryPolicy can be imported using any of these accepted formats + * + * ```sh + * $ pulumi import gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy default {{parent}}/{{name}} + * ``` + */ +export class AccessBoundaryPolicy extends pulumi.CustomResource { + /** + * Get an existing AccessBoundaryPolicy 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?: AccessBoundaryPolicyState, opts?: pulumi.CustomResourceOptions): AccessBoundaryPolicy { + return new AccessBoundaryPolicy(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy'; + + /** + * Returns true if the given object is an instance of AccessBoundaryPolicy. 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 AccessBoundaryPolicy { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === AccessBoundaryPolicy.__pulumiType; + } + + /** + * The display name of the rule. + */ + public readonly displayName!: pulumi.Output; + /** + * The hash of the resource. Used internally during updates. + */ + public /*out*/ readonly etag!: pulumi.Output; + /** + * The name of the policy. + */ + public readonly name!: pulumi.Output; + /** + * The attachment point is identified by its URL-encoded full resource name. + */ + public readonly parent!: pulumi.Output; + /** + * Rules to be applied. + * Structure is documented below. + */ + public readonly rules!: pulumi.Output; + + /** + * Create a AccessBoundaryPolicy 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: AccessBoundaryPolicyArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: AccessBoundaryPolicyArgs | AccessBoundaryPolicyState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as AccessBoundaryPolicyState | undefined; + resourceInputs["displayName"] = state ? state.displayName : undefined; + resourceInputs["etag"] = state ? state.etag : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["parent"] = state ? state.parent : undefined; + resourceInputs["rules"] = state ? state.rules : undefined; + } else { + const args = argsOrState as AccessBoundaryPolicyArgs | undefined; + if ((!args || args.parent === undefined) && !opts.urn) { + throw new Error("Missing required property 'parent'"); + } + if ((!args || args.rules === undefined) && !opts.urn) { + throw new Error("Missing required property 'rules'"); + } + resourceInputs["displayName"] = args ? args.displayName : undefined; + resourceInputs["name"] = args ? args.name : undefined; + resourceInputs["parent"] = args ? args.parent : undefined; + resourceInputs["rules"] = args ? args.rules : undefined; + resourceInputs["etag"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(AccessBoundaryPolicy.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering AccessBoundaryPolicy resources. + */ +export interface AccessBoundaryPolicyState { + /** + * The display name of the rule. + */ + displayName?: pulumi.Input; + /** + * The hash of the resource. Used internally during updates. + */ + etag?: pulumi.Input; + /** + * The name of the policy. + */ + name?: pulumi.Input; + /** + * The attachment point is identified by its URL-encoded full resource name. + */ + parent?: pulumi.Input; + /** + * Rules to be applied. + * Structure is documented below. + */ + rules?: pulumi.Input[]>; +} + +/** + * The set of arguments for constructing a AccessBoundaryPolicy resource. + */ +export interface AccessBoundaryPolicyArgs { + /** + * The display name of the rule. + */ + displayName?: pulumi.Input; + /** + * The name of the policy. + */ + name?: pulumi.Input; + /** + * The attachment point is identified by its URL-encoded full resource name. + */ + parent: pulumi.Input; + /** + * Rules to be applied. + * Structure is documented below. + */ + rules: pulumi.Input[]>; +} diff --git a/sdk/nodejs/iam/getWorkloadIdentityPool.ts b/sdk/nodejs/iam/getWorkloadIdentityPool.ts index d8cfb30213..5926d05094 100644 --- a/sdk/nodejs/iam/getWorkloadIdentityPool.ts +++ b/sdk/nodejs/iam/getWorkloadIdentityPool.ts @@ -5,8 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Get a IAM workload identity pool from Google Cloud by its id. - * > **Note:** The following resource requires the Beta IAM role `roles/iam.workloadIdentityPoolAdmin` in order to succeed. `OWNER` and `EDITOR` roles do not include the necessary permissions. * ## Example Usage * * ```typescript @@ -60,8 +58,6 @@ export interface GetWorkloadIdentityPoolResult { readonly workloadIdentityPoolId: string; } /** - * Get a IAM workload identity pool from Google Cloud by its id. - * > **Note:** The following resource requires the Beta IAM role `roles/iam.workloadIdentityPoolAdmin` in order to succeed. `OWNER` and `EDITOR` roles do not include the necessary permissions. * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/iam/getWorkloadIdentityPoolProvider.ts b/sdk/nodejs/iam/getWorkloadIdentityPoolProvider.ts index 64bf0ed6d7..7ef818e493 100644 --- a/sdk/nodejs/iam/getWorkloadIdentityPoolProvider.ts +++ b/sdk/nodejs/iam/getWorkloadIdentityPoolProvider.ts @@ -7,8 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Get a IAM workload identity provider from Google Cloud by its id. - * * ## Example Usage * * ```typescript @@ -74,8 +72,6 @@ export interface GetWorkloadIdentityPoolProviderResult { readonly workloadIdentityPoolProviderId: string; } /** - * Get a IAM workload identity provider from Google Cloud by its id. - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/iam/index.ts b/sdk/nodejs/iam/index.ts index 03978b60b2..903f776553 100644 --- a/sdk/nodejs/iam/index.ts +++ b/sdk/nodejs/iam/index.ts @@ -5,6 +5,11 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; // Export members: +export { AccessBoundaryPolicyArgs, AccessBoundaryPolicyState } from "./accessBoundaryPolicy"; +export type AccessBoundaryPolicy = import("./accessBoundaryPolicy").AccessBoundaryPolicy; +export const AccessBoundaryPolicy: typeof import("./accessBoundaryPolicy").AccessBoundaryPolicy = null as any; +utilities.lazyLoad(exports, ["AccessBoundaryPolicy"], () => require("./accessBoundaryPolicy")); + export { DenyPolicyArgs, DenyPolicyState } from "./denyPolicy"; export type DenyPolicy = import("./denyPolicy").DenyPolicy; export const DenyPolicy: typeof import("./denyPolicy").DenyPolicy = null as any; @@ -55,6 +60,8 @@ const _module = { version: utilities.getVersion(), construct: (name: string, type: string, urn: string): pulumi.Resource => { switch (type) { + case "gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy": + return new AccessBoundaryPolicy(name, undefined, { urn }) case "gcp:iam/denyPolicy:DenyPolicy": return new DenyPolicy(name, undefined, { urn }) case "gcp:iam/workforcePool:WorkforcePool": @@ -70,6 +77,7 @@ const _module = { } }, }; +pulumi.runtime.registerResourceModule("gcp", "iam/accessBoundaryPolicy", _module) pulumi.runtime.registerResourceModule("gcp", "iam/denyPolicy", _module) pulumi.runtime.registerResourceModule("gcp", "iam/workforcePool", _module) pulumi.runtime.registerResourceModule("gcp", "iam/workforcePoolProvider", _module) diff --git a/sdk/nodejs/iam/workforcePoolProvider.ts b/sdk/nodejs/iam/workforcePoolProvider.ts index 61525be741..ac13ff3523 100644 --- a/sdk/nodejs/iam/workforcePoolProvider.ts +++ b/sdk/nodejs/iam/workforcePoolProvider.ts @@ -88,7 +88,7 @@ import * as utilities from "../utilities"; * "google.subject": "assertion.sub", * }, * oidc: { - * issuerUri: "https://accounts.google.com", + * issuerUri: "https://accounts.thirdparty.com", * clientId: "client-id", * }, * }); @@ -112,7 +112,7 @@ import * as utilities from "../utilities"; * "google.subject": "assertion.sub", * }, * oidc: { - * issuerUri: "https://accounts.google.com", + * issuerUri: "https://accounts.thirdparty.com", * clientId: "client-id", * }, * displayName: "Display name", diff --git a/sdk/nodejs/iap/brand.ts b/sdk/nodejs/iap/brand.ts index c4672ef1f1..2b0768b247 100644 --- a/sdk/nodejs/iap/brand.ts +++ b/sdk/nodejs/iap/brand.ts @@ -5,42 +5,7 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * OAuth brand data. Only "Organization Internal" brands can be created - * programmatically via API. To convert it into an external brands - * please use the GCP Console. - * - * > **Note:** Brands can only be created once for a Google Cloud - * project and the underlying Google API doesn't not support DELETE or PATCH methods. - * Destroying a provider-managed Brand will remove it from state - * but *will not delete it from Google Cloud.* - * - * To get more information about Brand, see: - * - * * [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands) - * * How-to Guides - * * [Setting up IAP Brand](https://cloud.google.com/iap/docs/tutorial-gce#set_up_iap) - * * ## Example Usage - * ### Iap Brand - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.organizations.Project("project", { - * projectId: "tf-test", - * orgId: "123456789", - * }); - * const projectService = new gcp.projects.Service("projectService", { - * project: project.projectId, - * service: "iap.googleapis.com", - * }); - * const projectBrand = new gcp.iap.Brand("projectBrand", { - * supportEmail: "support@example.com", - * applicationTitle: "Cloud IAP protected Application", - * project: projectService.project, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/iap/client.ts b/sdk/nodejs/iap/client.ts index ea1befdf0f..dc66160907 100644 --- a/sdk/nodejs/iap/client.ts +++ b/sdk/nodejs/iap/client.ts @@ -5,46 +5,7 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Contains the data that describes an Identity Aware Proxy owned client. - * - * > **Note:** Only internal org clients can be created via declarative tools. External clients must be - * manually created via the GCP console. This restriction is due to the existing APIs and not lack of support - * in this tool. - * - * To get more information about Client, see: - * - * * [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands.identityAwareProxyClients) - * * How-to Guides - * * [Setting up IAP Client](https://cloud.google.com/iap/docs/authentication-howto) - * - * > **Warning:** All arguments including `secret` will be stored in the raw - * state as plain-text. - * * ## Example Usage - * ### Iap Client - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.organizations.Project("project", { - * projectId: "tf-test", - * orgId: "123456789", - * }); - * const projectService = new gcp.projects.Service("projectService", { - * project: project.projectId, - * service: "iap.googleapis.com", - * }); - * const projectBrand = new gcp.iap.Brand("projectBrand", { - * supportEmail: "support@example.com", - * applicationTitle: "Cloud IAP protected Application", - * project: projectService.project, - * }); - * const projectClient = new gcp.iap.Client("projectClient", { - * displayName: "Test Client", - * brand: projectBrand.name, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/index.ts b/sdk/nodejs/index.ts index 3095197024..072b36d1bb 100644 --- a/sdk/nodejs/index.ts +++ b/sdk/nodejs/index.ts @@ -33,6 +33,7 @@ import * as certificateauthority from "./certificateauthority"; import * as certificatemanager from "./certificatemanager"; import * as cloudasset from "./cloudasset"; import * as cloudbuild from "./cloudbuild"; +import * as cloudbuildv2 from "./cloudbuildv2"; import * as clouddeploy from "./clouddeploy"; import * as cloudfunctions from "./cloudfunctions"; import * as cloudfunctionsv2 from "./cloudfunctionsv2"; @@ -110,6 +111,7 @@ import * as types from "./types"; import * as vertex from "./vertex"; import * as vpcaccess from "./vpcaccess"; import * as workflows from "./workflows"; +import * as workstations from "./workstations"; export { accessapproval, @@ -132,6 +134,7 @@ export { certificatemanager, cloudasset, cloudbuild, + cloudbuildv2, clouddeploy, cloudfunctions, cloudfunctionsv2, @@ -209,6 +212,7 @@ export { vertex, vpcaccess, workflows, + workstations, }; pulumi.runtime.registerResourcePackage("gcp", { version: utilities.getVersion(), diff --git a/sdk/nodejs/kms/cryptoKey.ts b/sdk/nodejs/kms/cryptoKey.ts index 7c1ef0dbb5..aab9f5f3cc 100644 --- a/sdk/nodejs/kms/cryptoKey.ts +++ b/sdk/nodejs/kms/cryptoKey.ts @@ -7,22 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * A `CryptoKey` represents a logical key that can be used for cryptographic operations. - * - * > **Note:** CryptoKeys cannot be deleted from Google Cloud Platform. - * Destroying a provider-managed CryptoKey will remove it from state - * and delete all CryptoKeyVersions, rendering the key unusable, but *will - * not delete the resource from the project.* When the provider destroys these keys, - * any data previously encrypted with these keys will be irrecoverable. - * For this reason, it is strongly recommended that you add lifecycle hooks - * to the resource to prevent accidental destruction. - * - * To get more information about CryptoKey, see: - * - * * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys) - * * How-to Guides - * * [Creating a key](https://cloud.google.com/kms/docs/creating-keys#create_a_key) - * * ## Example Usage * ### Kms Crypto Key Basic * diff --git a/sdk/nodejs/kms/cryptoKeyIAMBinding.ts b/sdk/nodejs/kms/cryptoKeyIAMBinding.ts index 78e00ad6fe..d9f4cb5c8f 100644 --- a/sdk/nodejs/kms/cryptoKeyIAMBinding.ts +++ b/sdk/nodejs/kms/cryptoKeyIAMBinding.ts @@ -7,114 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - * - * * `gcp.kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - * * `gcp.kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - * * `gcp.kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - * - * > **Note:** `gcp.kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `gcp.kms.CryptoKeyIAMBinding` and `gcp.kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `gcp.kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyring = new gcp.kms.KeyRing("keyring", {location: "global"}); - * const key = new gcp.kms.CryptoKey("key", { - * keyRing: keyring.id, - * rotationPeriod: "100000s", - * }); - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/cloudkms.cryptoKeyEncrypter", - * members: ["user:jane@example.com"], - * }], - * }); - * const cryptoKey = new gcp.kms.CryptoKeyIAMPolicy("cryptoKey", { - * cryptoKeyId: key.id, - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * role: "roles/cloudkms.cryptoKeyEncrypter", - * }], - * }); - * ``` - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const cryptoKey = new gcp.kms.CryptoKeyIAMBinding("cryptoKey", { - * cryptoKeyId: google_kms_crypto_key.key.id, - * role: "roles/cloudkms.cryptoKeyEncrypter", - * members: ["user:jane@example.com"], - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const cryptoKey = new gcp.kms.CryptoKeyIAMBinding("cryptoKey", { - * cryptoKeyId: google_kms_crypto_key.key.id, - * role: "roles/cloudkms.cryptoKeyEncrypter", - * members: ["user:jane@example.com"], - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }); - * ``` - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const cryptoKey = new gcp.kms.CryptoKeyIAMMember("cryptoKey", { - * cryptoKeyId: google_kms_crypto_key.key.id, - * role: "roles/cloudkms.cryptoKeyEncrypter", - * member: "user:jane@example.com", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const cryptoKey = new gcp.kms.CryptoKeyIAMMember("cryptoKey", { - * cryptoKeyId: google_kms_crypto_key.key.id, - * role: "roles/cloudkms.cryptoKeyEncrypter", - * member: "user:jane@example.com", - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/kms/cryptoKeyIAMMember.ts b/sdk/nodejs/kms/cryptoKeyIAMMember.ts index 14c937782d..edfd7acbd2 100644 --- a/sdk/nodejs/kms/cryptoKeyIAMMember.ts +++ b/sdk/nodejs/kms/cryptoKeyIAMMember.ts @@ -7,114 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - * - * * `gcp.kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - * * `gcp.kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - * * `gcp.kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - * - * > **Note:** `gcp.kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `gcp.kms.CryptoKeyIAMBinding` and `gcp.kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `gcp.kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyring = new gcp.kms.KeyRing("keyring", {location: "global"}); - * const key = new gcp.kms.CryptoKey("key", { - * keyRing: keyring.id, - * rotationPeriod: "100000s", - * }); - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/cloudkms.cryptoKeyEncrypter", - * members: ["user:jane@example.com"], - * }], - * }); - * const cryptoKey = new gcp.kms.CryptoKeyIAMPolicy("cryptoKey", { - * cryptoKeyId: key.id, - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * role: "roles/cloudkms.cryptoKeyEncrypter", - * }], - * }); - * ``` - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const cryptoKey = new gcp.kms.CryptoKeyIAMBinding("cryptoKey", { - * cryptoKeyId: google_kms_crypto_key.key.id, - * role: "roles/cloudkms.cryptoKeyEncrypter", - * members: ["user:jane@example.com"], - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const cryptoKey = new gcp.kms.CryptoKeyIAMBinding("cryptoKey", { - * cryptoKeyId: google_kms_crypto_key.key.id, - * role: "roles/cloudkms.cryptoKeyEncrypter", - * members: ["user:jane@example.com"], - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }); - * ``` - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const cryptoKey = new gcp.kms.CryptoKeyIAMMember("cryptoKey", { - * cryptoKeyId: google_kms_crypto_key.key.id, - * role: "roles/cloudkms.cryptoKeyEncrypter", - * member: "user:jane@example.com", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const cryptoKey = new gcp.kms.CryptoKeyIAMMember("cryptoKey", { - * cryptoKeyId: google_kms_crypto_key.key.id, - * role: "roles/cloudkms.cryptoKeyEncrypter", - * member: "user:jane@example.com", - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/kms/cryptoKeyIAMPolicy.ts b/sdk/nodejs/kms/cryptoKeyIAMPolicy.ts index 83c8ff442b..d779d59870 100644 --- a/sdk/nodejs/kms/cryptoKeyIAMPolicy.ts +++ b/sdk/nodejs/kms/cryptoKeyIAMPolicy.ts @@ -5,114 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - * - * * `gcp.kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - * * `gcp.kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - * * `gcp.kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - * - * > **Note:** `gcp.kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `gcp.kms.CryptoKeyIAMBinding` and `gcp.kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `gcp.kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyring = new gcp.kms.KeyRing("keyring", {location: "global"}); - * const key = new gcp.kms.CryptoKey("key", { - * keyRing: keyring.id, - * rotationPeriod: "100000s", - * }); - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/cloudkms.cryptoKeyEncrypter", - * members: ["user:jane@example.com"], - * }], - * }); - * const cryptoKey = new gcp.kms.CryptoKeyIAMPolicy("cryptoKey", { - * cryptoKeyId: key.id, - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * role: "roles/cloudkms.cryptoKeyEncrypter", - * }], - * }); - * ``` - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const cryptoKey = new gcp.kms.CryptoKeyIAMBinding("cryptoKey", { - * cryptoKeyId: google_kms_crypto_key.key.id, - * role: "roles/cloudkms.cryptoKeyEncrypter", - * members: ["user:jane@example.com"], - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const cryptoKey = new gcp.kms.CryptoKeyIAMBinding("cryptoKey", { - * cryptoKeyId: google_kms_crypto_key.key.id, - * role: "roles/cloudkms.cryptoKeyEncrypter", - * members: ["user:jane@example.com"], - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }); - * ``` - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const cryptoKey = new gcp.kms.CryptoKeyIAMMember("cryptoKey", { - * cryptoKeyId: google_kms_crypto_key.key.id, - * role: "roles/cloudkms.cryptoKeyEncrypter", - * member: "user:jane@example.com", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const cryptoKey = new gcp.kms.CryptoKeyIAMMember("cryptoKey", { - * cryptoKeyId: google_kms_crypto_key.key.id, - * role: "roles/cloudkms.cryptoKeyEncrypter", - * member: "user:jane@example.com", - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/kms/keyRing.ts b/sdk/nodejs/kms/keyRing.ts index 7e66e008df..fdd32cee36 100644 --- a/sdk/nodejs/kms/keyRing.ts +++ b/sdk/nodejs/kms/keyRing.ts @@ -5,18 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * A `KeyRing` is a toplevel logical grouping of `CryptoKeys`. - * - * > **Note:** KeyRings cannot be deleted from Google Cloud Platform. - * Destroying a provider-managed KeyRing will remove it from state but - * *will not delete the resource from the project.* - * - * To get more information about KeyRing, see: - * - * * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings) - * * How-to Guides - * * [Creating a key ring](https://cloud.google.com/kms/docs/creating-keys#create_a_key_ring) - * * ## Example Usage * ### Kms Key Ring Basic * diff --git a/sdk/nodejs/kms/keyRingIAMBinding.ts b/sdk/nodejs/kms/keyRingIAMBinding.ts index 96f2ec939f..6a76200c5a 100644 --- a/sdk/nodejs/kms/keyRingIAMBinding.ts +++ b/sdk/nodejs/kms/keyRingIAMBinding.ts @@ -7,121 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - * - * * `gcp.kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - * * `gcp.kms.KeyRingIAMBinding`: 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 key ring are preserved. - * * `gcp.kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - * - * > **Note:** `gcp.kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `gcp.kms.KeyRingIAMBinding` and `gcp.kms.KeyRingIAMMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.kms.KeyRingIAMBinding` resources **can be** used in conjunction with `gcp.kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_kms\_key\_ring\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyring = new gcp.kms.KeyRing("keyring", {location: "global"}); - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const keyRing = new gcp.kms.KeyRingIAMPolicy("keyRing", { - * keyRingId: keyring.id, - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyring = new gcp.kms.KeyRing("keyring", {location: "global"}); - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }], - * }); - * const keyRing = new gcp.kms.KeyRingIAMPolicy("keyRing", { - * keyRingId: keyring.id, - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_kms\_key\_ring\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyRing = new gcp.kms.KeyRingIAMBinding("keyRing", { - * keyRingId: "your-key-ring-id", - * members: ["user:jane@example.com"], - * role: "roles/cloudkms.admin", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyRing = new gcp.kms.KeyRingIAMBinding("keyRing", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * keyRingId: "your-key-ring-id", - * members: ["user:jane@example.com"], - * role: "roles/cloudkms.admin", - * }); - * ``` - * - * ## google\_kms\_key\_ring\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyRing = new gcp.kms.KeyRingIAMMember("keyRing", { - * keyRingId: "your-key-ring-id", - * member: "user:jane@example.com", - * role: "roles/cloudkms.admin", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyRing = new gcp.kms.KeyRingIAMMember("keyRing", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * keyRingId: "your-key-ring-id", - * member: "user:jane@example.com", - * role: "roles/cloudkms.admin", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/kms/keyRingIAMMember.ts b/sdk/nodejs/kms/keyRingIAMMember.ts index 3af7b2489b..c456bfb13a 100644 --- a/sdk/nodejs/kms/keyRingIAMMember.ts +++ b/sdk/nodejs/kms/keyRingIAMMember.ts @@ -7,121 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - * - * * `gcp.kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - * * `gcp.kms.KeyRingIAMBinding`: 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 key ring are preserved. - * * `gcp.kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - * - * > **Note:** `gcp.kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `gcp.kms.KeyRingIAMBinding` and `gcp.kms.KeyRingIAMMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.kms.KeyRingIAMBinding` resources **can be** used in conjunction with `gcp.kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_kms\_key\_ring\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyring = new gcp.kms.KeyRing("keyring", {location: "global"}); - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const keyRing = new gcp.kms.KeyRingIAMPolicy("keyRing", { - * keyRingId: keyring.id, - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyring = new gcp.kms.KeyRing("keyring", {location: "global"}); - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }], - * }); - * const keyRing = new gcp.kms.KeyRingIAMPolicy("keyRing", { - * keyRingId: keyring.id, - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_kms\_key\_ring\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyRing = new gcp.kms.KeyRingIAMBinding("keyRing", { - * keyRingId: "your-key-ring-id", - * members: ["user:jane@example.com"], - * role: "roles/cloudkms.admin", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyRing = new gcp.kms.KeyRingIAMBinding("keyRing", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * keyRingId: "your-key-ring-id", - * members: ["user:jane@example.com"], - * role: "roles/cloudkms.admin", - * }); - * ``` - * - * ## google\_kms\_key\_ring\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyRing = new gcp.kms.KeyRingIAMMember("keyRing", { - * keyRingId: "your-key-ring-id", - * member: "user:jane@example.com", - * role: "roles/cloudkms.admin", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyRing = new gcp.kms.KeyRingIAMMember("keyRing", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * keyRingId: "your-key-ring-id", - * member: "user:jane@example.com", - * role: "roles/cloudkms.admin", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/kms/keyRingIAMPolicy.ts b/sdk/nodejs/kms/keyRingIAMPolicy.ts index 8f062fd985..861d33cd73 100644 --- a/sdk/nodejs/kms/keyRingIAMPolicy.ts +++ b/sdk/nodejs/kms/keyRingIAMPolicy.ts @@ -5,121 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - * - * * `gcp.kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - * * `gcp.kms.KeyRingIAMBinding`: 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 key ring are preserved. - * * `gcp.kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - * - * > **Note:** `gcp.kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `gcp.kms.KeyRingIAMBinding` and `gcp.kms.KeyRingIAMMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.kms.KeyRingIAMBinding` resources **can be** used in conjunction with `gcp.kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_kms\_key\_ring\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyring = new gcp.kms.KeyRing("keyring", {location: "global"}); - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const keyRing = new gcp.kms.KeyRingIAMPolicy("keyRing", { - * keyRingId: keyring.id, - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyring = new gcp.kms.KeyRing("keyring", {location: "global"}); - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * condition: { - * title: "expires_after_2019_12_31", - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * }, - * }], - * }); - * const keyRing = new gcp.kms.KeyRingIAMPolicy("keyRing", { - * keyRingId: keyring.id, - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_kms\_key\_ring\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyRing = new gcp.kms.KeyRingIAMBinding("keyRing", { - * keyRingId: "your-key-ring-id", - * members: ["user:jane@example.com"], - * role: "roles/cloudkms.admin", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyRing = new gcp.kms.KeyRingIAMBinding("keyRing", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * keyRingId: "your-key-ring-id", - * members: ["user:jane@example.com"], - * role: "roles/cloudkms.admin", - * }); - * ``` - * - * ## google\_kms\_key\_ring\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyRing = new gcp.kms.KeyRingIAMMember("keyRing", { - * keyRingId: "your-key-ring-id", - * member: "user:jane@example.com", - * role: "roles/cloudkms.admin", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const keyRing = new gcp.kms.KeyRingIAMMember("keyRing", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * keyRingId: "your-key-ring-id", - * member: "user:jane@example.com", - * role: "roles/cloudkms.admin", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/kms/keyRingImportJob.ts b/sdk/nodejs/kms/keyRingImportJob.ts index fb4ca31d4d..a57d0e845f 100644 --- a/sdk/nodejs/kms/keyRingImportJob.ts +++ b/sdk/nodejs/kms/keyRingImportJob.ts @@ -7,21 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * A `KeyRingImportJob` can be used to create `CryptoKeys` and `CryptoKeyVersions` using pre-existing - * key material, generated outside of Cloud KMS. A `KeyRingImportJob` expires 3 days after it is created. - * Once expired, Cloud KMS will no longer be able to import or unwrap any key material that - * was wrapped with the `KeyRingImportJob`'s public key. - * - * > **Note:** KeyRingImportJobs cannot be deleted from Google Cloud Platform. - * Destroying a provider-managed KeyRingImportJob will remove it from state but - * *will not delete the resource from the project.* - * - * To get more information about KeyRingImportJob, see: - * - * * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.importJobs) - * * How-to Guides - * * [Importing a key](https://cloud.google.com/kms/docs/importing-a-key) - * * ## Example Usage * * ## Import diff --git a/sdk/nodejs/kms/secretCiphertext.ts b/sdk/nodejs/kms/secretCiphertext.ts index e37478bc08..2093664e7e 100644 --- a/sdk/nodejs/kms/secretCiphertext.ts +++ b/sdk/nodejs/kms/secretCiphertext.ts @@ -5,21 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Encrypts secret data with Google Cloud KMS and provides access to the ciphertext. - * - * > **NOTE:** Using this resource will allow you to conceal secret data within your - * resource definitions, but it does not take care of protecting that data in the - * logging output, plan output, or state output. Please take care to secure your secret - * data outside of resource definitions. - * - * To get more information about SecretCiphertext, see: - * - * * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt) - * * How-to Guides - * * [Encrypting and decrypting data with a symmetric key](https://cloud.google.com/kms/docs/encrypt-decrypt) - * - * > **Warning:** All arguments including `plaintext` and `additionalAuthenticatedData` will be stored in the raw state as plain-text. - * * ## Example Usage * ### Kms Secret Ciphertext Basic * diff --git a/sdk/nodejs/logging/billingAccountBucketConfig.ts b/sdk/nodejs/logging/billingAccountBucketConfig.ts index 8d04f59b8c..cc4ec13929 100644 --- a/sdk/nodejs/logging/billingAccountBucketConfig.ts +++ b/sdk/nodejs/logging/billingAccountBucketConfig.ts @@ -7,12 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Manages a billing account level logging bucket config. For more information see - * [the official logging documentation](https://cloud.google.com/logging/docs/) and - * [Storing Logs](https://cloud.google.com/logging/docs/storage). - * - * > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/logging/billingAccountSink.ts b/sdk/nodejs/logging/billingAccountSink.ts index 7c7c6b800f..a02700c1cd 100644 --- a/sdk/nodejs/logging/billingAccountSink.ts +++ b/sdk/nodejs/logging/billingAccountSink.ts @@ -7,15 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/billingAccounts.sinks) - * * How-to Guides - * * [Exporting Logs](https://cloud.google.com/logging/docs/export) - * - * > **Note** You must have the "Logs Configuration Writer" IAM role (`roles/logging.configWriter`) - * [granted on the billing account](https://cloud.google.com/billing/reference/rest/v1/billingAccounts/getIamPolicy) to - * the credentials used with this provider. [IAM roles granted on a billing account](https://cloud.google.com/billing/docs/how-to/billing-access) are separate from the - * typical IAM roles granted on a project. - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/logging/folderBucketConfig.ts b/sdk/nodejs/logging/folderBucketConfig.ts index 175fad4fa8..9ca2a49e8c 100644 --- a/sdk/nodejs/logging/folderBucketConfig.ts +++ b/sdk/nodejs/logging/folderBucketConfig.ts @@ -7,12 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Manages a folder-level logging bucket config. For more information see - * [the official logging documentation](https://cloud.google.com/logging/docs/) and - * [Storing Logs](https://cloud.google.com/logging/docs/storage). - * - * > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/logging/folderExclusion.ts b/sdk/nodejs/logging/folderExclusion.ts index e3d4aeaa29..50d0463097 100644 --- a/sdk/nodejs/logging/folderExclusion.ts +++ b/sdk/nodejs/logging/folderExclusion.ts @@ -5,14 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Manages a folder-level logging exclusion. For more information see: - * - * * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/folders.exclusions) - * * How-to Guides - * * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - * - * > You can specify exclusions for log sinks created by the provider by using the exclusions field of `gcp.logging.FolderSink` - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/logging/organizationBucketConfig.ts b/sdk/nodejs/logging/organizationBucketConfig.ts index 28ef327a3a..9a51a769a1 100644 --- a/sdk/nodejs/logging/organizationBucketConfig.ts +++ b/sdk/nodejs/logging/organizationBucketConfig.ts @@ -7,12 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Manages a organization-level logging bucket config. For more information see - * [the official logging documentation](https://cloud.google.com/logging/docs/) and - * [Storing Logs](https://cloud.google.com/logging/docs/storage). - * - * > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/logging/organizationExclusion.ts b/sdk/nodejs/logging/organizationExclusion.ts index b0054e60bc..e7800f3e10 100644 --- a/sdk/nodejs/logging/organizationExclusion.ts +++ b/sdk/nodejs/logging/organizationExclusion.ts @@ -5,14 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Manages an organization-level logging exclusion. For more information see: - * - * * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/organizations.exclusions) - * * How-to Guides - * * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - * - * > You can specify exclusions for log sinks created by the provider by using the exclusions field of `gcp.logging.OrganizationSink` - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/logging/projectBucketConfig.ts b/sdk/nodejs/logging/projectBucketConfig.ts index 23096ec8f9..11b166ecc8 100644 --- a/sdk/nodejs/logging/projectBucketConfig.ts +++ b/sdk/nodejs/logging/projectBucketConfig.ts @@ -7,12 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Manages a project-level logging bucket config. For more information see - * [the official logging documentation](https://cloud.google.com/logging/docs/) and - * [Storing Logs](https://cloud.google.com/logging/docs/storage). - * - * > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/logging/projectExclusion.ts b/sdk/nodejs/logging/projectExclusion.ts index 4821860543..d5967795d7 100644 --- a/sdk/nodejs/logging/projectExclusion.ts +++ b/sdk/nodejs/logging/projectExclusion.ts @@ -5,14 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Manages a project-level logging exclusion. For more information see: - * - * * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.exclusions) - * * How-to Guides - * * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - * - * > You can specify exclusions for log sinks created by the provider by using the exclusions field of `gcp.logging.ProjectSink` - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/monitoring/notificationChannel.ts b/sdk/nodejs/monitoring/notificationChannel.ts index 5cde75fe44..06dbf14f4b 100644 --- a/sdk/nodejs/monitoring/notificationChannel.ts +++ b/sdk/nodejs/monitoring/notificationChannel.ts @@ -7,33 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * A NotificationChannel is a medium through which an alert is delivered - * when a policy violation is detected. Examples of channels include email, SMS, - * and third-party messaging applications. Fields containing sensitive information - * like authentication tokens or contact info are only partially populated on retrieval. - * - * Notification Channels are designed to be flexible and are made up of a supported `type` - * and labels to configure that channel. Each `type` has specific labels that need to be - * present for that channel to be correctly configured. The labels that are required to be - * present for one channel `type` are often different than those required for another. - * Due to these loose constraints it's often best to set up a channel through the UI - * and import it to the provider when setting up a brand new channel type to determine which - * labels are required. - * - * A list of supported channels per project the `list` endpoint can be - * accessed programmatically or through the api explorer at https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannelDescriptors/list . - * This provides the channel type and all of the required labels that must be passed. - * - * To get more information about NotificationChannel, see: - * - * * [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannels) - * * How-to Guides - * * [Notification Options](https://cloud.google.com/monitoring/support/notification-options) - * * [Monitoring API Documentation](https://cloud.google.com/monitoring/api/v3/) - * - * > **Warning:** All arguments including `sensitive_labels.auth_token`, `sensitive_labels.password`, and `sensitive_labels.service_key` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Notification Channel Basic * @@ -125,12 +98,10 @@ export class NotificationChannel extends pulumi.CustomResource { */ public readonly forceDelete!: pulumi.Output; /** - * Configuration fields that define the channel and its behavior. The - * permissible and required labels are specified in the - * NotificationChannelDescriptor corresponding to the type field. - * Labels with sensitive data are obfuscated by the API and therefore the provider cannot - * determine if there are upstream changes to these fields. They can also be configured via - * the sensitiveLabels block, but cannot be configured in both places. + * Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + * NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + * therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + * sensitive_labels block, but cannot be configured in both places. */ public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; /** @@ -238,12 +209,10 @@ export interface NotificationChannelState { */ forceDelete?: pulumi.Input; /** - * Configuration fields that define the channel and its behavior. The - * permissible and required labels are specified in the - * NotificationChannelDescriptor corresponding to the type field. - * Labels with sensitive data are obfuscated by the API and therefore the provider cannot - * determine if there are upstream changes to these fields. They can also be configured via - * the sensitiveLabels block, but cannot be configured in both places. + * Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + * NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + * therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + * sensitive_labels block, but cannot be configured in both places. */ labels?: pulumi.Input<{[key: string]: pulumi.Input}>; /** @@ -306,12 +275,10 @@ export interface NotificationChannelArgs { */ forceDelete?: pulumi.Input; /** - * Configuration fields that define the channel and its behavior. The - * permissible and required labels are specified in the - * NotificationChannelDescriptor corresponding to the type field. - * Labels with sensitive data are obfuscated by the API and therefore the provider cannot - * determine if there are upstream changes to these fields. They can also be configured via - * the sensitiveLabels block, but cannot be configured in both places. + * Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + * NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + * therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + * sensitive_labels block, but cannot be configured in both places. */ labels?: pulumi.Input<{[key: string]: pulumi.Input}>; /** diff --git a/sdk/nodejs/monitoring/slo.ts b/sdk/nodejs/monitoring/slo.ts index 6694dbef64..050e0a1f52 100644 --- a/sdk/nodejs/monitoring/slo.ts +++ b/sdk/nodejs/monitoring/slo.ts @@ -35,7 +35,7 @@ import * as utilities from "../utilities"; * const appengSlo = new gcp.monitoring.Slo("appengSlo", { * service: _default.then(_default => _default.serviceId), * sloId: "ae-slo", - * displayName: "Test SLO for App Engine", + * displayName: "Terraform Test SLO for App Engine", * goal: 0.9, * calendarPeriod: "DAY", * basicSli: { @@ -62,7 +62,7 @@ import * as utilities from "../utilities"; * const requestBasedSlo = new gcp.monitoring.Slo("requestBasedSlo", { * service: customsrv.serviceId, * sloId: "consumed-api-slo", - * displayName: "Test SLO with request based SLI (good total ratio)", + * displayName: "Terraform Test SLO with request based SLI (good total ratio)", * goal: 0.9, * rollingPeriodDays: 30, * requestBasedSli: { diff --git a/sdk/nodejs/monitoring/uptimeCheckConfig.ts b/sdk/nodejs/monitoring/uptimeCheckConfig.ts index 75c6b4586d..a1776cc762 100644 --- a/sdk/nodejs/monitoring/uptimeCheckConfig.ts +++ b/sdk/nodejs/monitoring/uptimeCheckConfig.ts @@ -7,17 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * This message configures which resources and services to monitor for availability. - * - * To get more information about UptimeCheckConfig, see: - * - * * [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.uptimeCheckConfigs) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/monitoring/uptime-checks/) - * - * > **Warning:** All arguments including `http_check.auth_info.password` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Uptime Check Config Http * diff --git a/sdk/nodejs/notebooks/instance.ts b/sdk/nodejs/notebooks/instance.ts index 7e26bb7368..4e2cfe0870 100644 --- a/sdk/nodejs/notebooks/instance.ts +++ b/sdk/nodejs/notebooks/instance.ts @@ -50,6 +50,7 @@ import * as utilities from "../utilities"; * machineType: "e2-medium", * metadata: { * "proxy-mode": "service_account", + * terraform: "true", * }, * }); * ``` @@ -105,6 +106,9 @@ import * as utilities from "../utilities"; * labels: { * k: "val", * }, + * metadata: { + * terraform: "true", + * }, * }); * ``` * diff --git a/sdk/nodejs/organizations/folder.ts b/sdk/nodejs/organizations/folder.ts index f69e8e8498..646977254f 100644 --- a/sdk/nodejs/organizations/folder.ts +++ b/sdk/nodejs/organizations/folder.ts @@ -5,20 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Allows management of a Google Cloud Platform folder. For more information see - * [the official documentation](https://cloud.google.com/resource-manager/docs/creating-managing-folders) - * and - * [API](https://cloud.google.com/resource-manager/reference/rest/v2/folders). - * - * A folder can contain projects, other folders, or a combination of both. You can use folders to group projects under an organization in a hierarchy. For example, your organization might contain multiple departments, each with its own set of Cloud Platform resources. Folders allows you to group these resources on a per-department basis. Folders are used to group resources that share common IAM policies. - * - * Folders created live inside an Organization. See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - * - * The service account used to run the provider when creating a `gcp.organizations.Folder` - * resource must have `roles/resourcemanager.folderCreator`. See the - * [Access Control for Folders Using IAM](https://cloud.google.com/resource-manager/docs/access-control-folders) - * doc for more information. - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/organizations/iamAuditConfig.ts b/sdk/nodejs/organizations/iamAuditConfig.ts index 71777e7f44..251a3740dc 100644 --- a/sdk/nodejs/organizations/iamAuditConfig.ts +++ b/sdk/nodejs/organizations/iamAuditConfig.ts @@ -7,30 +7,44 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Allows management of audit logging config for a given service for a Google Cloud Platform Organization. + * ## Import * - * ## Example Usage + * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; + * This member resource can be imported using the `org_id`, role, and member e.g. * - * const config = new gcp.organizations.IamAuditConfig("config", { - * auditLogConfigs: [{ - * exemptedMembers: ["user:joebloggs@hashicorp.com"], - * logType: "DATA_READ", - * }], - * orgId: "your-organization-id", - * service: "allServices", - * }); + * ```sh + * $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-orgid roles/viewer user:foo@example.com" * ``` * - * ## Import + * IAM binding imports use space-delimited identifiers; the resource in question and the role. + * + * This binding resource can be imported using the `org_id` and role, e.g. + * + * ```sh + * $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-org-id roles/viewer" + * ``` + * + * IAM policy imports use the identifier of the resource in question. + * + * This policy resource can be imported using the `org_id`. + * + * ```sh + * $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization your-org-id + * ``` + * + * IAM audit config imports use the identifier of the resource in question and the service, e.g. + * + * ```sh + * $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-organization-id foo.googleapis.com" + * ``` + * + * -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the * - * IAM audit config imports use the identifier of the resource in question and the service, e.g. + * full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure * * ```sh - * $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig config "your-organization-id foo.googleapis.com" + * $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig to include the title of condition, e.g. `google_organization_iam_binding.my_organization "your-org-id roles/{{role_id}} condition-title"` * ``` */ export class IamAuditConfig extends pulumi.CustomResource { @@ -66,11 +80,13 @@ export class IamAuditConfig extends pulumi.CustomResource { */ public readonly auditLogConfigs!: pulumi.Output; /** - * The etag of iam policy + * (Computed) The etag of the organization's IAM policy. */ public /*out*/ readonly etag!: pulumi.Output; /** - * The numeric ID of the organization in which you want to manage the audit logging config. + * The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. */ public readonly orgId!: pulumi.Output; /** @@ -125,11 +141,13 @@ export interface IamAuditConfigState { */ auditLogConfigs?: pulumi.Input[]>; /** - * The etag of iam policy + * (Computed) The etag of the organization's IAM policy. */ etag?: pulumi.Input; /** - * The numeric ID of the organization in which you want to manage the audit logging config. + * The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. */ orgId?: pulumi.Input; /** @@ -147,7 +165,9 @@ export interface IamAuditConfigArgs { */ auditLogConfigs: pulumi.Input[]>; /** - * The numeric ID of the organization in which you want to manage the audit logging config. + * The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. */ orgId: pulumi.Input; /** diff --git a/sdk/nodejs/organizations/iambinding.ts b/sdk/nodejs/organizations/iambinding.ts index 38204cf4ac..499e636168 100644 --- a/sdk/nodejs/organizations/iambinding.ts +++ b/sdk/nodejs/organizations/iambinding.ts @@ -7,43 +7,45 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Allows creation and management of a single binding within IAM policy for - * an existing Google Cloud Platform Organization. + * ## Import + * + * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. * - * > **Note:** This resource __must not__ be used in conjunction with - * `gcp.organizations.IAMMember` for the __same role__ or they will fight over - * what your policy should be. + * This member resource can be imported using the `org_id`, role, and member e.g. * - * > **Note:** On create, this resource will overwrite members of any existing roles. - * Use `pulumi import` and inspect the `output to ensure - * your existing members are preserved. + * ```sh + * $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-orgid roles/viewer user:foo@example.com" + * ``` * - * ## Example Usage + * IAM binding imports use space-delimited identifiers; the resource in question and the role. * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; + * This binding resource can be imported using the `org_id` and role, e.g. * - * const binding = new gcp.organizations.IAMBinding("binding", { - * members: ["user:alice@gmail.com"], - * orgId: "123456789", - * role: "roles/browser", - * }); + * ```sh + * $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-org-id roles/viewer" * ``` * - * ## Import + * IAM policy imports use the identifier of the resource in question. * - * IAM binding imports use space-delimited identifiers; first the resource in question and then the role. + * This policy resource can be imported using the `org_id`. * - * These bindings can be imported using the `org_id` and role, e.g. + * ```sh + * $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization your-org-id + * ``` + * + * IAM audit config imports use the identifier of the resource in question and the service, e.g. * * ```sh - * $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_org "your-org-id roles/viewer" + * $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-organization-id foo.googleapis.com" * ``` * * -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the * - * full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. + * full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure + * + * ```sh + * $ pulumi import gcp:organizations/iAMBinding:IAMBinding to include the title of condition, e.g. `google_organization_iam_binding.my_organization "your-org-id roles/{{role_id}} condition-title"` + * ``` */ export class IAMBinding extends pulumi.CustomResource { /** @@ -73,23 +75,26 @@ export class IAMBinding extends pulumi.CustomResource { return obj['__pulumiType'] === IAMBinding.__pulumiType; } + /** + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + */ public readonly condition!: pulumi.Output; /** * (Computed) The etag of the organization's IAM policy. */ public /*out*/ readonly etag!: pulumi.Output; - /** - * A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - */ public readonly members!: pulumi.Output; /** - * The numeric ID of the organization in which you want to create a custom role. + * The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. */ public readonly orgId!: pulumi.Output; /** * The role that should be applied. Only one * `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. */ public readonly role!: pulumi.Output; @@ -137,23 +142,26 @@ export class IAMBinding extends pulumi.CustomResource { * Input properties used for looking up and filtering IAMBinding resources. */ export interface IAMBindingState { + /** + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. + */ condition?: pulumi.Input; /** * (Computed) The etag of the organization's IAM policy. */ etag?: pulumi.Input; - /** - * A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - */ members?: pulumi.Input[]>; /** - * The numeric ID of the organization in which you want to create a custom role. + * The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. */ orgId?: pulumi.Input; /** * The role that should be applied. Only one * `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. */ role?: pulumi.Input; } @@ -162,19 +170,22 @@ export interface IAMBindingState { * The set of arguments for constructing a IAMBinding resource. */ export interface IAMBindingArgs { - condition?: pulumi.Input; /** - * A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding + * An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + * Structure is documented below. */ + condition?: pulumi.Input; members: pulumi.Input[]>; /** - * The numeric ID of the organization in which you want to create a custom role. + * The organization ID. If not specified for `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + * Required for `gcp.organizations.IAMPolicy` - you must explicitly set the organization, and it + * will not be inferred from the provider. */ orgId: pulumi.Input; /** * The role that should be applied. Only one * `gcp.organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - * `[projects|organizations]/{parent-name}/roles/{role-name}`. + * `organizations/{{org_id}}/roles/{{role_id}}`. */ role: pulumi.Input; } diff --git a/sdk/nodejs/organizations/iamcustomRole.ts b/sdk/nodejs/organizations/iamcustomRole.ts index 440e116457..931afd651d 100644 --- a/sdk/nodejs/organizations/iamcustomRole.ts +++ b/sdk/nodejs/organizations/iamcustomRole.ts @@ -5,18 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Allows management of a customized Cloud IAM organization role. For more information see - * [the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles) - * and - * [API](https://cloud.google.com/iam/reference/rest/v1/organizations.roles). - * - * > **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise - * from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the - * same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted - * after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is - * made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all - * by the provider, and new roles cannot share that name. - * * ## Example Usage * * This snippet creates a customized IAM organization role. diff --git a/sdk/nodejs/organizations/iammember.ts b/sdk/nodejs/organizations/iammember.ts index 685c1f3d19..65f1fe9841 100644 --- a/sdk/nodejs/organizations/iammember.ts +++ b/sdk/nodejs/organizations/iammember.ts @@ -7,155 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case: - * - * * `gcp.organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached. - * * `gcp.organizations.IAMBinding`: 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 organization are preserved. - * * `gcp.organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved. - * * `gcp.organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.organizations.IAMPolicy` **cannot** be used in conjunction with `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.organizations.IAMBinding` resources **can be** used in conjunction with `gcp.organizations.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_organization\_iam\_policy - * - * !> **Warning:** New organizations have several default policies which will, - * without extreme caution, be **overwritten** by use of this resource. - * The safest alternative is to use multiple `gcp.organizations.IAMBinding` - * resources. This resource makes it easy to remove your own access to - * an organization, which will require a call to Google Support to have - * fixed, and can take multiple days to resolve. - * - * In general, this resource should only be used with organizations - * fully managed by this provider.I f you do use this resource, - * the best way to be sure that you are not making dangerous changes is to start - * by **importing** your existing policy, and examining the diff very closely. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const organization = new gcp.organizations.IAMPolicy("organization", { - * orgId: "your-organization-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }], - * }); - * const organization = new gcp.organizations.IAMPolicy("organization", { - * orgId: "your-organization-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_organization\_iam\_binding - * - * > **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const organization = new gcp.organizations.IAMBinding("organization", { - * members: ["user:jane@example.com"], - * orgId: "your-organization-id", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const organization = new gcp.organizations.IAMBinding("organization", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * orgId: "your-organization-id", - * role: "roles/editor", - * }); - * ``` - * - * ## google\_organization\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const organization = new gcp.organizations.IAMMember("organization", { - * member: "user:jane@example.com", - * orgId: "your-organization-id", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const organization = new gcp.organizations.IAMMember("organization", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * member: "user:jane@example.com", - * orgId: "your-organization-id", - * role: "roles/editor", - * }); - * ``` - * - * ## google\_organization\_iam\_audit\_config - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const organization = new gcp.organizations.IamAuditConfig("organization", { - * auditLogConfigs: [ - * { - * logType: "ADMIN_READ", - * }, - * { - * exemptedMembers: ["user:joebloggs@hashicorp.com"], - * logType: "DATA_READ", - * }, - * ], - * orgId: "your-organization-id", - * service: "allServices", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/organizations/iampolicy.ts b/sdk/nodejs/organizations/iampolicy.ts index 2903b34ca8..b7efb385a8 100644 --- a/sdk/nodejs/organizations/iampolicy.ts +++ b/sdk/nodejs/organizations/iampolicy.ts @@ -5,155 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case: - * - * * `gcp.organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached. - * * `gcp.organizations.IAMBinding`: 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 organization are preserved. - * * `gcp.organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved. - * * `gcp.organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.organizations.IAMPolicy` **cannot** be used in conjunction with `gcp.organizations.IAMBinding`, `gcp.organizations.IAMMember`, or `gcp.organizations.IamAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.organizations.IAMBinding` resources **can be** used in conjunction with `gcp.organizations.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_organization\_iam\_policy - * - * !> **Warning:** New organizations have several default policies which will, - * without extreme caution, be **overwritten** by use of this resource. - * The safest alternative is to use multiple `gcp.organizations.IAMBinding` - * resources. This resource makes it easy to remove your own access to - * an organization, which will require a call to Google Support to have - * fixed, and can take multiple days to resolve. - * - * In general, this resource should only be used with organizations - * fully managed by this provider.I f you do use this resource, - * the best way to be sure that you are not making dangerous changes is to start - * by **importing** your existing policy, and examining the diff very closely. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const organization = new gcp.organizations.IAMPolicy("organization", { - * orgId: "your-organization-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * role: "roles/editor", - * }], - * }); - * const organization = new gcp.organizations.IAMPolicy("organization", { - * orgId: "your-organization-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * ## google\_organization\_iam\_binding - * - * > **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const organization = new gcp.organizations.IAMBinding("organization", { - * members: ["user:jane@example.com"], - * orgId: "your-organization-id", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const organization = new gcp.organizations.IAMBinding("organization", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * orgId: "your-organization-id", - * role: "roles/editor", - * }); - * ``` - * - * ## google\_organization\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const organization = new gcp.organizations.IAMMember("organization", { - * member: "user:jane@example.com", - * orgId: "your-organization-id", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const organization = new gcp.organizations.IAMMember("organization", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * member: "user:jane@example.com", - * orgId: "your-organization-id", - * role: "roles/editor", - * }); - * ``` - * - * ## google\_organization\_iam\_audit\_config - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const organization = new gcp.organizations.IamAuditConfig("organization", { - * auditLogConfigs: [ - * { - * logType: "ADMIN_READ", - * }, - * { - * exemptedMembers: ["user:joebloggs@hashicorp.com"], - * logType: "DATA_READ", - * }, - * ], - * orgId: "your-organization-id", - * service: "allServices", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/organizations/project.ts b/sdk/nodejs/organizations/project.ts index 7f24302fda..fd8b224208 100644 --- a/sdk/nodejs/organizations/project.ts +++ b/sdk/nodejs/organizations/project.ts @@ -5,24 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Allows creation and management of a Google Cloud Platform project. - * - * Projects created with this resource must be associated with an Organization. - * See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - * - * The user or service account that is running this provider when creating a `gcp.organizations.Project` - * resource must have `roles/resourcemanager.projectCreator` on the specified organization. See the - * [Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org) - * doc for more information. - * - * > This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account. - * - * To get more information about projects, see: - * - * * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects) - * * How-to Guides - * * [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects) - * * ## Example Usage * * ```typescript @@ -88,18 +70,15 @@ export class Project extends pulumi.CustomResource { } /** - * Create the 'default' network automatically. Default `true`. - * If set to `false`, the default network will be deleted. Note that, for quota purposes, you - * will still need to have 1 network slot available to create the project successfully, even if - * you set `autoCreateNetwork` to `false`, since the network will exist momentarily. + * Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + * that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + * if you set auto_create_network to false, since the network will exist momentarily. */ public readonly autoCreateNetwork!: pulumi.Output; /** - * The alphanumeric ID of the billing account this project - * belongs to. The user or service account performing this operation with the provider - * must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - * See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - * for more details. + * The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + * operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + * See Google Cloud Billing API Access Control for more details. */ public readonly billingAccount!: pulumi.Output; /** @@ -136,8 +115,7 @@ export class Project extends pulumi.CustomResource { */ public readonly projectId!: pulumi.Output; /** - * If true, the resource can be deleted - * without deleting the Project via the Google API. + * If true, the Terraform resource can be deleted without deleting the Project via the Google API. */ public readonly skipDelete!: pulumi.Output; @@ -188,18 +166,15 @@ export class Project extends pulumi.CustomResource { */ export interface ProjectState { /** - * Create the 'default' network automatically. Default `true`. - * If set to `false`, the default network will be deleted. Note that, for quota purposes, you - * will still need to have 1 network slot available to create the project successfully, even if - * you set `autoCreateNetwork` to `false`, since the network will exist momentarily. + * Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + * that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + * if you set auto_create_network to false, since the network will exist momentarily. */ autoCreateNetwork?: pulumi.Input; /** - * The alphanumeric ID of the billing account this project - * belongs to. The user or service account performing this operation with the provider - * must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - * See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - * for more details. + * The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + * operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + * See Google Cloud Billing API Access Control for more details. */ billingAccount?: pulumi.Input; /** @@ -236,8 +211,7 @@ export interface ProjectState { */ projectId?: pulumi.Input; /** - * If true, the resource can be deleted - * without deleting the Project via the Google API. + * If true, the Terraform resource can be deleted without deleting the Project via the Google API. */ skipDelete?: pulumi.Input; } @@ -247,18 +221,15 @@ export interface ProjectState { */ export interface ProjectArgs { /** - * Create the 'default' network automatically. Default `true`. - * If set to `false`, the default network will be deleted. Note that, for quota purposes, you - * will still need to have 1 network slot available to create the project successfully, even if - * you set `autoCreateNetwork` to `false`, since the network will exist momentarily. + * Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + * that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + * if you set auto_create_network to false, since the network will exist momentarily. */ autoCreateNetwork?: pulumi.Input; /** - * The alphanumeric ID of the billing account this project - * belongs to. The user or service account performing this operation with the provider - * must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - * See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - * for more details. + * The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + * operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + * See Google Cloud Billing API Access Control for more details. */ billingAccount?: pulumi.Input; /** @@ -291,8 +262,7 @@ export interface ProjectArgs { */ projectId: pulumi.Input; /** - * If true, the resource can be deleted - * without deleting the Project via the Google API. + * If true, the Terraform resource can be deleted without deleting the Project via the Google API. */ skipDelete?: pulumi.Input; } diff --git a/sdk/nodejs/osconfig/guestPolicies.ts b/sdk/nodejs/osconfig/guestPolicies.ts index 2c2cadbfa5..5d8b2a026f 100644 --- a/sdk/nodejs/osconfig/guestPolicies.ts +++ b/sdk/nodejs/osconfig/guestPolicies.ts @@ -7,16 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * An OS Config resource representing a guest configuration policy. These policies represent - * the desired state for VM instance guest environments including packages to install or remove, - * package repository configurations, and software to install. - * - * To get more information about GuestPolicies, see: - * - * * [API documentation](https://cloud.google.com/compute/docs/osconfig/rest) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/compute/docs/os-config-management) - * * ## Example Usage * ### Os Config Guest Policies Basic * diff --git a/sdk/nodejs/projects/iamauditConfig.ts b/sdk/nodejs/projects/iamauditConfig.ts index c087c13463..8c15ef2340 100644 --- a/sdk/nodejs/projects/iamauditConfig.ts +++ b/sdk/nodejs/projects/iamauditConfig.ts @@ -7,152 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - * - * * `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * * `gcp.projects.IAMBinding`: 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 project are preserved. - * * `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * * `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_project\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your project - * using this resource. Deleting a `gcp.projects.IAMPolicy` removes access - * from anyone without organization-level access to the project. Proceed with caution. - * It's not recommended to use `gcp.projects.IAMPolicy` with your provider project - * to avoid locking yourself out, and it should generally only be used with projects - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const project = new gcp.projects.IAMPolicy("project", { - * project: "your-project-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * role: "roles/compute.admin", - * }], - * }); - * const project = new gcp.projects.IAMPolicy("project", { - * policyData: admin.then(admin => admin.policyData), - * project: "your-project-id", - * }); - * ``` - * - * ## google\_project\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMBinding("project", { - * members: ["user:jane@example.com"], - * project: "your-project-id", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMBinding("project", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * project: "your-project-id", - * role: "roles/container.admin", - * }); - * ``` - * - * ## google\_project\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMMember("project", { - * member: "user:jane@example.com", - * project: "your-project-id", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMMember("project", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * member: "user:jane@example.com", - * project: "your-project-id", - * role: "roles/firebase.admin", - * }); - * ``` - * - * ## google\_project\_iam\_audit\_config - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMAuditConfig("project", { - * auditLogConfigs: [ - * { - * logType: "ADMIN_READ", - * }, - * { - * exemptedMembers: ["user:joebloggs@hashicorp.com"], - * logType: "DATA_READ", - * }, - * ], - * project: "your-project-id", - * service: "allServices", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/projects/iambinding.ts b/sdk/nodejs/projects/iambinding.ts index ca6bb9a276..01084a5a1f 100644 --- a/sdk/nodejs/projects/iambinding.ts +++ b/sdk/nodejs/projects/iambinding.ts @@ -7,152 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - * - * * `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * * `gcp.projects.IAMBinding`: 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 project are preserved. - * * `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * * `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_project\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your project - * using this resource. Deleting a `gcp.projects.IAMPolicy` removes access - * from anyone without organization-level access to the project. Proceed with caution. - * It's not recommended to use `gcp.projects.IAMPolicy` with your provider project - * to avoid locking yourself out, and it should generally only be used with projects - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const project = new gcp.projects.IAMPolicy("project", { - * project: "your-project-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * role: "roles/compute.admin", - * }], - * }); - * const project = new gcp.projects.IAMPolicy("project", { - * policyData: admin.then(admin => admin.policyData), - * project: "your-project-id", - * }); - * ``` - * - * ## google\_project\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMBinding("project", { - * members: ["user:jane@example.com"], - * project: "your-project-id", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMBinding("project", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * project: "your-project-id", - * role: "roles/container.admin", - * }); - * ``` - * - * ## google\_project\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMMember("project", { - * member: "user:jane@example.com", - * project: "your-project-id", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMMember("project", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * member: "user:jane@example.com", - * project: "your-project-id", - * role: "roles/firebase.admin", - * }); - * ``` - * - * ## google\_project\_iam\_audit\_config - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMAuditConfig("project", { - * auditLogConfigs: [ - * { - * logType: "ADMIN_READ", - * }, - * { - * exemptedMembers: ["user:joebloggs@hashicorp.com"], - * logType: "DATA_READ", - * }, - * ], - * project: "your-project-id", - * service: "allServices", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/projects/iamcustomRole.ts b/sdk/nodejs/projects/iamcustomRole.ts index 8aa2eab4d9..3b265aa791 100644 --- a/sdk/nodejs/projects/iamcustomRole.ts +++ b/sdk/nodejs/projects/iamcustomRole.ts @@ -5,18 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Allows management of a customized Cloud IAM project role. For more information see - * [the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles) - * and - * [API](https://cloud.google.com/iam/reference/rest/v1/projects.roles). - * - * > **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise - * from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the - * same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted - * after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is - * made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all - * by the provider, and new roles cannot share that name. - * * ## Example Usage * * This snippet creates a customized IAM role. diff --git a/sdk/nodejs/projects/iammember.ts b/sdk/nodejs/projects/iammember.ts index 7d373fa5c7..2c2674bfe1 100644 --- a/sdk/nodejs/projects/iammember.ts +++ b/sdk/nodejs/projects/iammember.ts @@ -7,152 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - * - * * `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * * `gcp.projects.IAMBinding`: 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 project are preserved. - * * `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * * `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_project\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your project - * using this resource. Deleting a `gcp.projects.IAMPolicy` removes access - * from anyone without organization-level access to the project. Proceed with caution. - * It's not recommended to use `gcp.projects.IAMPolicy` with your provider project - * to avoid locking yourself out, and it should generally only be used with projects - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const project = new gcp.projects.IAMPolicy("project", { - * project: "your-project-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * role: "roles/compute.admin", - * }], - * }); - * const project = new gcp.projects.IAMPolicy("project", { - * policyData: admin.then(admin => admin.policyData), - * project: "your-project-id", - * }); - * ``` - * - * ## google\_project\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMBinding("project", { - * members: ["user:jane@example.com"], - * project: "your-project-id", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMBinding("project", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * project: "your-project-id", - * role: "roles/container.admin", - * }); - * ``` - * - * ## google\_project\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMMember("project", { - * member: "user:jane@example.com", - * project: "your-project-id", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMMember("project", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * member: "user:jane@example.com", - * project: "your-project-id", - * role: "roles/firebase.admin", - * }); - * ``` - * - * ## google\_project\_iam\_audit\_config - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMAuditConfig("project", { - * auditLogConfigs: [ - * { - * logType: "ADMIN_READ", - * }, - * { - * exemptedMembers: ["user:joebloggs@hashicorp.com"], - * logType: "DATA_READ", - * }, - * ], - * project: "your-project-id", - * service: "allServices", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/projects/iampolicy.ts b/sdk/nodejs/projects/iampolicy.ts index 60de138bf6..6701174898 100644 --- a/sdk/nodejs/projects/iampolicy.ts +++ b/sdk/nodejs/projects/iampolicy.ts @@ -5,152 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - * - * * `gcp.projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * * `gcp.projects.IAMBinding`: 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 project are preserved. - * * `gcp.projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * * `gcp.projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - * - * > **Note:** `gcp.projects.IAMPolicy` **cannot** be used in conjunction with `gcp.projects.IAMBinding`, `gcp.projects.IAMMember`, or `gcp.projects.IAMAuditConfig` or they will fight over what your policy should be. - * - * > **Note:** `gcp.projects.IAMBinding` resources **can be** used in conjunction with `gcp.projects.IAMMember` resources **only if** they do not grant privilege to the same role. - * - * > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - * IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - * - * ## google\_project\_iam\_policy - * - * !> **Be careful!** You can accidentally lock yourself out of your project - * using this resource. Deleting a `gcp.projects.IAMPolicy` removes access - * from anyone without organization-level access to the project. Proceed with caution. - * It's not recommended to use `gcp.projects.IAMPolicy` with your provider project - * to avoid locking yourself out, and it should generally only be used with projects - * fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - * applying the change. - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/editor", - * members: ["user:jane@example.com"], - * }], - * }); - * const project = new gcp.projects.IAMPolicy("project", { - * project: "your-project-id", - * policyData: admin.then(admin => admin.policyData), - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * role: "roles/compute.admin", - * }], - * }); - * const project = new gcp.projects.IAMPolicy("project", { - * policyData: admin.then(admin => admin.policyData), - * project: "your-project-id", - * }); - * ``` - * - * ## google\_project\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMBinding("project", { - * members: ["user:jane@example.com"], - * project: "your-project-id", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMBinding("project", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * members: ["user:jane@example.com"], - * project: "your-project-id", - * role: "roles/container.admin", - * }); - * ``` - * - * ## google\_project\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMMember("project", { - * member: "user:jane@example.com", - * project: "your-project-id", - * role: "roles/editor", - * }); - * ``` - * - * With IAM Conditions: - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMMember("project", { - * condition: { - * description: "Expiring at midnight of 2019-12-31", - * expression: "request.time < timestamp(\"2020-01-01T00:00:00Z\")", - * title: "expires_after_2019_12_31", - * }, - * member: "user:jane@example.com", - * project: "your-project-id", - * role: "roles/firebase.admin", - * }); - * ``` - * - * ## google\_project\_iam\_audit\_config - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const project = new gcp.projects.IAMAuditConfig("project", { - * auditLogConfigs: [ - * { - * logType: "ADMIN_READ", - * }, - * { - * exemptedMembers: ["user:joebloggs@hashicorp.com"], - * logType: "DATA_READ", - * }, - * ], - * project: "your-project-id", - * service: "allServices", - * }); - * ``` - * * ## Import * * IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/nodejs/projects/service.ts b/sdk/nodejs/projects/service.ts index 2c783c8120..bd07cc4b76 100644 --- a/sdk/nodejs/projects/service.ts +++ b/sdk/nodejs/projects/service.ts @@ -77,9 +77,6 @@ export class Service extends pulumi.CustomResource { * services depend on this service when destroying it. */ public readonly disableDependentServices!: pulumi.Output; - /** - * If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - */ public readonly disableOnDestroy!: pulumi.Output; /** * The project ID. If not provided, the provider project @@ -134,9 +131,6 @@ export interface ServiceState { * services depend on this service when destroying it. */ disableDependentServices?: pulumi.Input; - /** - * If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - */ disableOnDestroy?: pulumi.Input; /** * The project ID. If not provided, the provider project @@ -160,9 +154,6 @@ export interface ServiceArgs { * services depend on this service when destroying it. */ disableDependentServices?: pulumi.Input; - /** - * If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - */ disableOnDestroy?: pulumi.Input; /** * The project ID. If not provided, the provider project diff --git a/sdk/nodejs/projects/serviceIdentity.ts b/sdk/nodejs/projects/serviceIdentity.ts index bc8037589e..79a436dc19 100644 --- a/sdk/nodejs/projects/serviceIdentity.ts +++ b/sdk/nodejs/projects/serviceIdentity.ts @@ -5,19 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Generate service identity for a service. - * - * > **Note:** Once created, this resource cannot be updated or destroyed. These - * actions are a no-op. - * - * > **Note:** This resource can be used to retrieve the emails of the [Google-managed service accounts](https://cloud.google.com/iam/docs/service-agents) - * of the APIs that Google has configured with a Service Identity. You can run `gcloud beta services identity create --service SERVICE_NAME.googleapis.com` to - * verify if an API supports this. - * - * To get more information about Service Identity, see: - * - * * [API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services/generateServiceIdentity) - * * ## Example Usage * ### Service Identity Basic * diff --git a/sdk/nodejs/projects/usageExportBucket.ts b/sdk/nodejs/projects/usageExportBucket.ts index 7834de5e8e..499ca0101b 100644 --- a/sdk/nodejs/projects/usageExportBucket.ts +++ b/sdk/nodejs/projects/usageExportBucket.ts @@ -5,24 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Allows creation and management of a Google Cloud Platform project. - * - * Projects created with this resource must be associated with an Organization. - * See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - * - * The user or service account that is running this provider when creating a `gcp.organizations.Project` - * resource must have `roles/resourcemanager.projectCreator` on the specified organization. See the - * [Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org) - * doc for more information. - * - * > This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account. - * - * To get more information about projects, see: - * - * * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects) - * * How-to Guides - * * [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects) - * * ## Example Usage * * ```typescript diff --git a/sdk/nodejs/provider.ts b/sdk/nodejs/provider.ts index fa81f20f87..d2686d9047 100644 --- a/sdk/nodejs/provider.ts +++ b/sdk/nodejs/provider.ts @@ -63,6 +63,7 @@ export class Provider extends pulumi.ProviderResource { public readonly cloudRunV2CustomEndpoint!: pulumi.Output; public readonly cloudSchedulerCustomEndpoint!: pulumi.Output; public readonly cloudTasksCustomEndpoint!: pulumi.Output; + public readonly cloudbuildv2CustomEndpoint!: pulumi.Output; public readonly clouddeployCustomEndpoint!: pulumi.Output; public readonly cloudfunctions2CustomEndpoint!: pulumi.Output; public readonly composerCustomEndpoint!: pulumi.Output; @@ -101,7 +102,6 @@ export class Provider extends pulumi.ProviderResource { public readonly gkeBackupCustomEndpoint!: pulumi.Output; public readonly gkeHubCustomEndpoint!: pulumi.Output; public readonly gkehubFeatureCustomEndpoint!: pulumi.Output; - public readonly googlePartnerName!: pulumi.Output; public readonly healthcareCustomEndpoint!: pulumi.Output; public readonly iam2CustomEndpoint!: pulumi.Output; public readonly iamBetaCustomEndpoint!: pulumi.Output; @@ -149,10 +149,12 @@ export class Provider extends pulumi.ProviderResource { public readonly storageCustomEndpoint!: pulumi.Output; public readonly storageTransferCustomEndpoint!: pulumi.Output; public readonly tagsCustomEndpoint!: pulumi.Output; + public readonly tagsLocationCustomEndpoint!: pulumi.Output; public readonly tpuCustomEndpoint!: pulumi.Output; public readonly vertexAiCustomEndpoint!: pulumi.Output; public readonly vpcAccessCustomEndpoint!: pulumi.Output; public readonly workflowsCustomEndpoint!: pulumi.Output; + public readonly workstationsCustomEndpoint!: pulumi.Output; public readonly zone!: pulumi.Output; /** @@ -203,6 +205,7 @@ export class Provider extends pulumi.ProviderResource { resourceInputs["cloudRunV2CustomEndpoint"] = args ? args.cloudRunV2CustomEndpoint : undefined; resourceInputs["cloudSchedulerCustomEndpoint"] = args ? args.cloudSchedulerCustomEndpoint : undefined; resourceInputs["cloudTasksCustomEndpoint"] = args ? args.cloudTasksCustomEndpoint : undefined; + resourceInputs["cloudbuildv2CustomEndpoint"] = args ? args.cloudbuildv2CustomEndpoint : undefined; resourceInputs["clouddeployCustomEndpoint"] = args ? args.clouddeployCustomEndpoint : undefined; resourceInputs["cloudfunctions2CustomEndpoint"] = args ? args.cloudfunctions2CustomEndpoint : undefined; resourceInputs["composerCustomEndpoint"] = args ? args.composerCustomEndpoint : undefined; @@ -226,7 +229,6 @@ export class Provider extends pulumi.ProviderResource { resourceInputs["deploymentManagerCustomEndpoint"] = args ? args.deploymentManagerCustomEndpoint : undefined; resourceInputs["dialogflowCustomEndpoint"] = args ? args.dialogflowCustomEndpoint : undefined; resourceInputs["dialogflowCxCustomEndpoint"] = args ? args.dialogflowCxCustomEndpoint : undefined; - resourceInputs["disableGooglePartnerName"] = pulumi.output(args ? args.disableGooglePartnerName : undefined).apply(JSON.stringify); resourceInputs["dnsCustomEndpoint"] = args ? args.dnsCustomEndpoint : undefined; resourceInputs["documentAiCustomEndpoint"] = args ? args.documentAiCustomEndpoint : undefined; resourceInputs["essentialContactsCustomEndpoint"] = args ? args.essentialContactsCustomEndpoint : undefined; @@ -242,7 +244,6 @@ export class Provider extends pulumi.ProviderResource { resourceInputs["gkeBackupCustomEndpoint"] = args ? args.gkeBackupCustomEndpoint : undefined; resourceInputs["gkeHubCustomEndpoint"] = args ? args.gkeHubCustomEndpoint : undefined; resourceInputs["gkehubFeatureCustomEndpoint"] = args ? args.gkehubFeatureCustomEndpoint : undefined; - resourceInputs["googlePartnerName"] = args ? args.googlePartnerName : undefined; resourceInputs["healthcareCustomEndpoint"] = args ? args.healthcareCustomEndpoint : undefined; resourceInputs["iam2CustomEndpoint"] = args ? args.iam2CustomEndpoint : undefined; resourceInputs["iamBetaCustomEndpoint"] = args ? args.iamBetaCustomEndpoint : undefined; @@ -292,11 +293,13 @@ export class Provider extends pulumi.ProviderResource { resourceInputs["storageCustomEndpoint"] = args ? args.storageCustomEndpoint : undefined; resourceInputs["storageTransferCustomEndpoint"] = args ? args.storageTransferCustomEndpoint : undefined; resourceInputs["tagsCustomEndpoint"] = args ? args.tagsCustomEndpoint : undefined; + resourceInputs["tagsLocationCustomEndpoint"] = args ? args.tagsLocationCustomEndpoint : undefined; resourceInputs["tpuCustomEndpoint"] = args ? args.tpuCustomEndpoint : undefined; resourceInputs["userProjectOverride"] = pulumi.output(args ? args.userProjectOverride : undefined).apply(JSON.stringify); resourceInputs["vertexAiCustomEndpoint"] = args ? args.vertexAiCustomEndpoint : undefined; resourceInputs["vpcAccessCustomEndpoint"] = args ? args.vpcAccessCustomEndpoint : undefined; resourceInputs["workflowsCustomEndpoint"] = args ? args.workflowsCustomEndpoint : undefined; + resourceInputs["workstationsCustomEndpoint"] = args ? args.workstationsCustomEndpoint : undefined; resourceInputs["zone"] = (args ? args.zone : undefined) ?? utilities.getEnv("GOOGLE_ZONE", "GCLOUD_ZONE", "CLOUDSDK_COMPUTE_ZONE"); } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); @@ -345,6 +348,7 @@ export interface ProviderArgs { cloudRunV2CustomEndpoint?: pulumi.Input; cloudSchedulerCustomEndpoint?: pulumi.Input; cloudTasksCustomEndpoint?: pulumi.Input; + cloudbuildv2CustomEndpoint?: pulumi.Input; clouddeployCustomEndpoint?: pulumi.Input; cloudfunctions2CustomEndpoint?: pulumi.Input; composerCustomEndpoint?: pulumi.Input; @@ -368,7 +372,6 @@ export interface ProviderArgs { deploymentManagerCustomEndpoint?: pulumi.Input; dialogflowCustomEndpoint?: pulumi.Input; dialogflowCxCustomEndpoint?: pulumi.Input; - disableGooglePartnerName?: pulumi.Input; dnsCustomEndpoint?: pulumi.Input; documentAiCustomEndpoint?: pulumi.Input; essentialContactsCustomEndpoint?: pulumi.Input; @@ -384,7 +387,6 @@ export interface ProviderArgs { gkeBackupCustomEndpoint?: pulumi.Input; gkeHubCustomEndpoint?: pulumi.Input; gkehubFeatureCustomEndpoint?: pulumi.Input; - googlePartnerName?: pulumi.Input; healthcareCustomEndpoint?: pulumi.Input; iam2CustomEndpoint?: pulumi.Input; iamBetaCustomEndpoint?: pulumi.Input; @@ -434,10 +436,12 @@ export interface ProviderArgs { storageCustomEndpoint?: pulumi.Input; storageTransferCustomEndpoint?: pulumi.Input; tagsCustomEndpoint?: pulumi.Input; + tagsLocationCustomEndpoint?: pulumi.Input; tpuCustomEndpoint?: pulumi.Input; userProjectOverride?: pulumi.Input; vertexAiCustomEndpoint?: pulumi.Input; vpcAccessCustomEndpoint?: pulumi.Input; workflowsCustomEndpoint?: pulumi.Input; + workstationsCustomEndpoint?: pulumi.Input; zone?: pulumi.Input; } diff --git a/sdk/nodejs/redis/instance.ts b/sdk/nodejs/redis/instance.ts index e6cb9ef83c..76a6ad9ff8 100644 --- a/sdk/nodejs/redis/instance.ts +++ b/sdk/nodejs/redis/instance.ts @@ -40,7 +40,7 @@ import * as utilities from "../utilities"; * alternativeLocationId: "us-central1-f", * authorizedNetwork: redis_network.then(redis_network => redis_network.id), * redisVersion: "REDIS_4_0", - * displayName: "Test Instance", + * displayName: "Terraform Test Instance", * reservedIpRange: "192.168.0.0/29", * labels: { * my_key: "my_val", @@ -104,7 +104,7 @@ import * as utilities from "../utilities"; * authorizedNetwork: redis_network.then(redis_network => redis_network.id), * connectMode: "PRIVATE_SERVICE_ACCESS", * redisVersion: "REDIS_4_0", - * displayName: "Test Instance", + * displayName: "Terraform Test Instance", * }, { * dependsOn: [privateServiceConnection], * }); diff --git a/sdk/nodejs/secretmanager/getSecretVersionAccess.ts b/sdk/nodejs/secretmanager/getSecretVersionAccess.ts new file mode 100644 index 0000000000..4428bce181 --- /dev/null +++ b/sdk/nodejs/secretmanager/getSecretVersionAccess.ts @@ -0,0 +1,108 @@ +// *** WARNING: this file 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"; + +/** + * Get a payload of Secret Manager secret's version. It only requires the [Secret Manager Secret Accessor](https://cloud.google.com/secret-manager/docs/access-control#secretmanager.secretAccessor) role. For more information see the [official documentation](https://cloud.google.com/secret-manager/docs/) and [API](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets.versions/access). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const basic = gcp.secretmanager.getSecretVersionAccess({ + * secret: "my-secret", + * }); + * ``` + */ +export function getSecretVersionAccess(args: GetSecretVersionAccessArgs, opts?: pulumi.InvokeOptions): Promise { + + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); + return pulumi.runtime.invoke("gcp:secretmanager/getSecretVersionAccess:getSecretVersionAccess", { + "project": args.project, + "secret": args.secret, + "version": args.version, + }, opts); +} + +/** + * A collection of arguments for invoking getSecretVersionAccess. + */ +export interface GetSecretVersionAccessArgs { + /** + * The project to get the secret version for. If it + * is not provided, the provider project is used. + */ + project?: string; + /** + * The secret to get the secret version for. + */ + secret: string; + /** + * The version of the secret to get. If it + * is not provided, the latest version is retrieved. + */ + version?: string; +} + +/** + * A collection of values returned by getSecretVersionAccess. + */ +export interface GetSecretVersionAccessResult { + /** + * The provider-assigned unique ID for this managed resource. + */ + readonly id: string; + /** + * The resource name of the SecretVersion. Format: + * `projects/{{project}}/secrets/{{secret_id}}/versions/{{version}}` + */ + readonly name: string; + readonly project: string; + readonly secret: string; + /** + * The secret data. No larger than 64KiB. + */ + readonly secretData: string; + readonly version: string; +} +/** + * Get a payload of Secret Manager secret's version. It only requires the [Secret Manager Secret Accessor](https://cloud.google.com/secret-manager/docs/access-control#secretmanager.secretAccessor) role. For more information see the [official documentation](https://cloud.google.com/secret-manager/docs/) and [API](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets.versions/access). + * + * ## Example Usage + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const basic = gcp.secretmanager.getSecretVersionAccess({ + * secret: "my-secret", + * }); + * ``` + */ +export function getSecretVersionAccessOutput(args: GetSecretVersionAccessOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { + return pulumi.output(args).apply((a: any) => getSecretVersionAccess(a, opts)) +} + +/** + * A collection of arguments for invoking getSecretVersionAccess. + */ +export interface GetSecretVersionAccessOutputArgs { + /** + * The project to get the secret version for. If it + * is not provided, the provider project is used. + */ + project?: pulumi.Input; + /** + * The secret to get the secret version for. + */ + secret: pulumi.Input; + /** + * The version of the secret to get. If it + * is not provided, the latest version is retrieved. + */ + version?: pulumi.Input; +} diff --git a/sdk/nodejs/secretmanager/index.ts b/sdk/nodejs/secretmanager/index.ts index 7add4c0d03..516d4e86b7 100644 --- a/sdk/nodejs/secretmanager/index.ts +++ b/sdk/nodejs/secretmanager/index.ts @@ -15,6 +15,11 @@ export const getSecretVersion: typeof import("./getSecretVersion").getSecretVers export const getSecretVersionOutput: typeof import("./getSecretVersion").getSecretVersionOutput = null as any; utilities.lazyLoad(exports, ["getSecretVersion","getSecretVersionOutput"], () => require("./getSecretVersion")); +export { GetSecretVersionAccessArgs, GetSecretVersionAccessResult, GetSecretVersionAccessOutputArgs } from "./getSecretVersionAccess"; +export const getSecretVersionAccess: typeof import("./getSecretVersionAccess").getSecretVersionAccess = null as any; +export const getSecretVersionAccessOutput: typeof import("./getSecretVersionAccess").getSecretVersionAccessOutput = null as any; +utilities.lazyLoad(exports, ["getSecretVersionAccess","getSecretVersionAccessOutput"], () => require("./getSecretVersionAccess")); + export { SecretArgs, SecretState } from "./secret"; export type Secret = import("./secret").Secret; export const Secret: typeof import("./secret").Secret = null as any; diff --git a/sdk/nodejs/secretmanager/secretVersion.ts b/sdk/nodejs/secretmanager/secretVersion.ts index 429b96d201..046903f93f 100644 --- a/sdk/nodejs/secretmanager/secretVersion.ts +++ b/sdk/nodejs/secretmanager/secretVersion.ts @@ -5,11 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * A secret version resource. - * - * > **Warning:** All arguments including `payload.secret_data` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Secret Version Basic * diff --git a/sdk/nodejs/securitycenter/instanceIamBinding.ts b/sdk/nodejs/securitycenter/instanceIamBinding.ts index 2e780e1b6d..175924da40 100644 --- a/sdk/nodejs/securitycenter/instanceIamBinding.ts +++ b/sdk/nodejs/securitycenter/instanceIamBinding.ts @@ -13,7 +13,7 @@ import * as utilities from "../utilities"; * * * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * * How-to Guides - * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) * * ## Example Usage * ### Data Fusion Instance Basic diff --git a/sdk/nodejs/securitycenter/instanceIamMember.ts b/sdk/nodejs/securitycenter/instanceIamMember.ts index 2105f5cb37..00ef1c8eb1 100644 --- a/sdk/nodejs/securitycenter/instanceIamMember.ts +++ b/sdk/nodejs/securitycenter/instanceIamMember.ts @@ -13,7 +13,7 @@ import * as utilities from "../utilities"; * * * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * * How-to Guides - * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) * * ## Example Usage * ### Data Fusion Instance Basic diff --git a/sdk/nodejs/securitycenter/instanceIamPolicy.ts b/sdk/nodejs/securitycenter/instanceIamPolicy.ts index b8361d4ae7..1a52ee62bf 100644 --- a/sdk/nodejs/securitycenter/instanceIamPolicy.ts +++ b/sdk/nodejs/securitycenter/instanceIamPolicy.ts @@ -11,7 +11,7 @@ import * as utilities from "../utilities"; * * * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * * How-to Guides - * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * * [Official Documentation](https://cloud.google.com/data-fusion/docs/) * * ## Example Usage * ### Data Fusion Instance Basic diff --git a/sdk/nodejs/serviceaccount/account.ts b/sdk/nodejs/serviceaccount/account.ts index 24e3d62398..dc1e035685 100644 --- a/sdk/nodejs/serviceaccount/account.ts +++ b/sdk/nodejs/serviceaccount/account.ts @@ -5,18 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Allows management of a Google Cloud service account. - * - * * [API documentation](https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/compute/docs/access/service-accounts) - * - * > **Warning:** If you delete and recreate a service account, you must reapply any IAM roles that it had before. - * - * > Creation of service accounts is eventually consistent, and that can lead to - * errors when you try to apply ACLs to service accounts immediately after - * creation. - * * ## Example Usage * * This snippet creates a service account in a project. diff --git a/sdk/nodejs/serviceaccount/getAccountIdToken.ts b/sdk/nodejs/serviceaccount/getAccountIdToken.ts index 4e20a6220d..64ad96504b 100644 --- a/sdk/nodejs/serviceaccount/getAccountIdToken.ts +++ b/sdk/nodejs/serviceaccount/getAccountIdToken.ts @@ -4,23 +4,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; -/** - * This data source provides a Google OpenID Connect (`oidc`) `idToken`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)). - * - * For more information see - * [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken). - * - * ## Example Usage - * - * ### ServiceAccount JSON Credential File. - * `gcp.serviceAccount.getAccountIdToken` will use the configured provider credentials - * - * ### Service Account Impersonation. - * `gcp.serviceAccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceAccount.getAccountAccessToken`. - * - * Note: to use the following, you must grant `targetServiceAccount` the - * `roles/iam.serviceAccountTokenCreator` role on itself. - */ export function getAccountIdToken(args: GetAccountIdTokenArgs, opts?: pulumi.InvokeOptions): Promise { opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts || {}); @@ -71,23 +54,6 @@ export interface GetAccountIdTokenResult { readonly targetAudience: string; readonly targetServiceAccount?: string; } -/** - * This data source provides a Google OpenID Connect (`oidc`) `idToken`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)). - * - * For more information see - * [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken). - * - * ## Example Usage - * - * ### ServiceAccount JSON Credential File. - * `gcp.serviceAccount.getAccountIdToken` will use the configured provider credentials - * - * ### Service Account Impersonation. - * `gcp.serviceAccount.getAccountAccessToken` will use background impersonated credentials provided by `gcp.serviceAccount.getAccountAccessToken`. - * - * Note: to use the following, you must grant `targetServiceAccount` the - * `roles/iam.serviceAccountTokenCreator` role on itself. - */ export function getAccountIdTokenOutput(args: GetAccountIdTokenOutputArgs, opts?: pulumi.InvokeOptions): pulumi.Output { return pulumi.output(args).apply((a: any) => getAccountIdToken(a, opts)) } diff --git a/sdk/nodejs/serviceaccount/iambinding.ts b/sdk/nodejs/serviceaccount/iambinding.ts index 533d8f1cff..7d8b3052e9 100644 --- a/sdk/nodejs/serviceaccount/iambinding.ts +++ b/sdk/nodejs/serviceaccount/iambinding.ts @@ -19,8 +19,7 @@ import * as utilities from "../utilities"; * * > **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. * - * ## Example Usage - * ### Service Account IAM Policy + * ## google\_service\_account\_iam\_policy * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -41,7 +40,8 @@ import * as utilities from "../utilities"; * policyData: admin.then(admin => admin.policyData), * }); * ``` - * ### Service Account IAM Binding + * + * ## google\_service\_account\_iam\_binding * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -57,7 +57,8 @@ import * as utilities from "../utilities"; * members: ["user:jane@example.com"], * }); * ``` - * ### Service Account IAM Binding With IAM Conditions: + * + * With IAM Conditions: * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -78,7 +79,8 @@ import * as utilities from "../utilities"; * }, * }); * ``` - * ### Service Account IAM Member + * + * ## google\_service\_account\_iam\_member * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -101,7 +103,8 @@ import * as utilities from "../utilities"; * member: pulumi.interpolate`serviceAccount:${sa.email}`, * }); * ``` - * ### Service Account IAM Member With IAM Conditions: + * + * With IAM Conditions: * * ```typescript * import * as pulumi from "@pulumi/pulumi"; diff --git a/sdk/nodejs/serviceaccount/iammember.ts b/sdk/nodejs/serviceaccount/iammember.ts index e8f3288dc2..89f42090f4 100644 --- a/sdk/nodejs/serviceaccount/iammember.ts +++ b/sdk/nodejs/serviceaccount/iammember.ts @@ -19,8 +19,7 @@ import * as utilities from "../utilities"; * * > **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. * - * ## Example Usage - * ### Service Account IAM Policy + * ## google\_service\_account\_iam\_policy * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -41,7 +40,8 @@ import * as utilities from "../utilities"; * policyData: admin.then(admin => admin.policyData), * }); * ``` - * ### Service Account IAM Binding + * + * ## google\_service\_account\_iam\_binding * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -57,7 +57,8 @@ import * as utilities from "../utilities"; * members: ["user:jane@example.com"], * }); * ``` - * ### Service Account IAM Binding With IAM Conditions: + * + * With IAM Conditions: * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -78,7 +79,8 @@ import * as utilities from "../utilities"; * }, * }); * ``` - * ### Service Account IAM Member + * + * ## google\_service\_account\_iam\_member * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -101,7 +103,8 @@ import * as utilities from "../utilities"; * member: pulumi.interpolate`serviceAccount:${sa.email}`, * }); * ``` - * ### Service Account IAM Member With IAM Conditions: + * + * With IAM Conditions: * * ```typescript * import * as pulumi from "@pulumi/pulumi"; diff --git a/sdk/nodejs/serviceaccount/iampolicy.ts b/sdk/nodejs/serviceaccount/iampolicy.ts index 8a3fb4948a..51ae6b77aa 100644 --- a/sdk/nodejs/serviceaccount/iampolicy.ts +++ b/sdk/nodejs/serviceaccount/iampolicy.ts @@ -17,8 +17,7 @@ import * as utilities from "../utilities"; * * > **Note:** `gcp.serviceAccount.IAMBinding` resources **can be** used in conjunction with `gcp.serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. * - * ## Example Usage - * ### Service Account IAM Policy + * ## google\_service\_account\_iam\_policy * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -39,7 +38,8 @@ import * as utilities from "../utilities"; * policyData: admin.then(admin => admin.policyData), * }); * ``` - * ### Service Account IAM Binding + * + * ## google\_service\_account\_iam\_binding * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -55,7 +55,8 @@ import * as utilities from "../utilities"; * members: ["user:jane@example.com"], * }); * ``` - * ### Service Account IAM Binding With IAM Conditions: + * + * With IAM Conditions: * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -76,7 +77,8 @@ import * as utilities from "../utilities"; * }, * }); * ``` - * ### Service Account IAM Member + * + * ## google\_service\_account\_iam\_member * * ```typescript * import * as pulumi from "@pulumi/pulumi"; @@ -99,7 +101,8 @@ import * as utilities from "../utilities"; * member: pulumi.interpolate`serviceAccount:${sa.email}`, * }); * ``` - * ### Service Account IAM Member With IAM Conditions: + * + * With IAM Conditions: * * ```typescript * import * as pulumi from "@pulumi/pulumi"; diff --git a/sdk/nodejs/servicedirectory/endpoint.ts b/sdk/nodejs/servicedirectory/endpoint.ts index c7d3ca002c..cf868c0847 100644 --- a/sdk/nodejs/servicedirectory/endpoint.ts +++ b/sdk/nodejs/servicedirectory/endpoint.ts @@ -5,14 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * An individual endpoint that provides a service. - * - * To get more information about Endpoint, see: - * - * * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services.endpoints) - * * How-to Guides - * * [Configuring an endpoint](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_an_endpoint) - * * ## Example Usage * ### Service Directory Endpoint Basic * diff --git a/sdk/nodejs/servicedirectory/namespace.ts b/sdk/nodejs/servicedirectory/namespace.ts index 44039ef9fa..dfedf8bbea 100644 --- a/sdk/nodejs/servicedirectory/namespace.ts +++ b/sdk/nodejs/servicedirectory/namespace.ts @@ -5,15 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * A container for `services`. Namespaces allow administrators to group services - * together and define permissions for a collection of services. - * - * To get more information about Namespace, see: - * - * * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces) - * * How-to Guides - * * [Configuring a namespace](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_namespace) - * * ## Example Usage * ### Service Directory Namespace Basic * diff --git a/sdk/nodejs/servicedirectory/namespaceIamBinding.ts b/sdk/nodejs/servicedirectory/namespaceIamBinding.ts index f955478d90..b3f486a330 100644 --- a/sdk/nodejs/servicedirectory/namespaceIamBinding.ts +++ b/sdk/nodejs/servicedirectory/namespaceIamBinding.ts @@ -7,61 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - * - * * `gcp.servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - * * `gcp.servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - * * `gcp.servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - * - * > **Note:** `gcp.servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.NamespaceIamBinding` and `gcp.servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_service\_directory\_namespace\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.servicedirectory.NamespaceIamPolicy("policy", {policyData: admin.then(admin => admin.policyData)}, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_service\_directory\_namespace\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.servicedirectory.NamespaceIamBinding("binding", { - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_service\_directory\_namespace\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.servicedirectory.NamespaceIamMember("member", { - * role: "roles/viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/servicedirectory/namespaceIamMember.ts b/sdk/nodejs/servicedirectory/namespaceIamMember.ts index 026f51c733..c9e661c4af 100644 --- a/sdk/nodejs/servicedirectory/namespaceIamMember.ts +++ b/sdk/nodejs/servicedirectory/namespaceIamMember.ts @@ -7,61 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - * - * * `gcp.servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - * * `gcp.servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - * * `gcp.servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - * - * > **Note:** `gcp.servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.NamespaceIamBinding` and `gcp.servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_service\_directory\_namespace\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.servicedirectory.NamespaceIamPolicy("policy", {policyData: admin.then(admin => admin.policyData)}, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_service\_directory\_namespace\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.servicedirectory.NamespaceIamBinding("binding", { - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_service\_directory\_namespace\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.servicedirectory.NamespaceIamMember("member", { - * role: "roles/viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/servicedirectory/namespaceIamPolicy.ts b/sdk/nodejs/servicedirectory/namespaceIamPolicy.ts index 49e083b161..7216f6bcd7 100644 --- a/sdk/nodejs/servicedirectory/namespaceIamPolicy.ts +++ b/sdk/nodejs/servicedirectory/namespaceIamPolicy.ts @@ -5,61 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - * - * * `gcp.servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - * * `gcp.servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - * * `gcp.servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - * - * > **Note:** `gcp.servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.NamespaceIamBinding` and `gcp.servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_service\_directory\_namespace\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.servicedirectory.NamespaceIamPolicy("policy", {policyData: admin.then(admin => admin.policyData)}, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_service\_directory\_namespace\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.servicedirectory.NamespaceIamBinding("binding", { - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_service\_directory\_namespace\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.servicedirectory.NamespaceIamMember("member", { - * role: "roles/viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/servicedirectory/service.ts b/sdk/nodejs/servicedirectory/service.ts index 460dd54352..ac5c417844 100644 --- a/sdk/nodejs/servicedirectory/service.ts +++ b/sdk/nodejs/servicedirectory/service.ts @@ -5,14 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * An individual service. A service contains a name and optional metadata. - * - * To get more information about Service, see: - * - * * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services) - * * How-to Guides - * * [Configuring a service](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_service) - * * ## Example Usage * ### Service Directory Service Basic * diff --git a/sdk/nodejs/servicedirectory/serviceIamBinding.ts b/sdk/nodejs/servicedirectory/serviceIamBinding.ts index 50cd80bd84..c13a450357 100644 --- a/sdk/nodejs/servicedirectory/serviceIamBinding.ts +++ b/sdk/nodejs/servicedirectory/serviceIamBinding.ts @@ -7,61 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - * - * * `gcp.servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - * * `gcp.servicedirectory.ServiceIamBinding`: 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 service are preserved. - * * `gcp.servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - * - * > **Note:** `gcp.servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.ServiceIamBinding` and `gcp.servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_service\_directory\_service\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.servicedirectory.ServiceIamPolicy("policy", {policyData: admin.then(admin => admin.policyData)}, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_service\_directory\_service\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.servicedirectory.ServiceIamBinding("binding", { - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_service\_directory\_service\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.servicedirectory.ServiceIamMember("member", { - * role: "roles/viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/servicedirectory/serviceIamMember.ts b/sdk/nodejs/servicedirectory/serviceIamMember.ts index d35ac5f26d..044dbbf3f9 100644 --- a/sdk/nodejs/servicedirectory/serviceIamMember.ts +++ b/sdk/nodejs/servicedirectory/serviceIamMember.ts @@ -7,61 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - * - * * `gcp.servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - * * `gcp.servicedirectory.ServiceIamBinding`: 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 service are preserved. - * * `gcp.servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - * - * > **Note:** `gcp.servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.ServiceIamBinding` and `gcp.servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_service\_directory\_service\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.servicedirectory.ServiceIamPolicy("policy", {policyData: admin.then(admin => admin.policyData)}, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_service\_directory\_service\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.servicedirectory.ServiceIamBinding("binding", { - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_service\_directory\_service\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.servicedirectory.ServiceIamMember("member", { - * role: "roles/viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/servicedirectory/serviceIamPolicy.ts b/sdk/nodejs/servicedirectory/serviceIamPolicy.ts index 939c22fc8f..2ef433c266 100644 --- a/sdk/nodejs/servicedirectory/serviceIamPolicy.ts +++ b/sdk/nodejs/servicedirectory/serviceIamPolicy.ts @@ -5,61 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - * - * * `gcp.servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - * * `gcp.servicedirectory.ServiceIamBinding`: 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 service are preserved. - * * `gcp.servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - * - * > **Note:** `gcp.servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `gcp.servicedirectory.ServiceIamBinding` and `gcp.servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - * - * > **Note:** `gcp.servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `gcp.servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - * - * ## google\_service\_directory\_service\_iam\_policy - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const admin = gcp.organizations.getIAMPolicy({ - * bindings: [{ - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }], - * }); - * const policy = new gcp.servicedirectory.ServiceIamPolicy("policy", {policyData: admin.then(admin => admin.policyData)}, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_service\_directory\_service\_iam\_binding - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const binding = new gcp.servicedirectory.ServiceIamBinding("binding", { - * role: "roles/viewer", - * members: ["user:jane@example.com"], - * }, { - * provider: google_beta, - * }); - * ``` - * - * ## google\_service\_directory\_service\_iam\_member - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const member = new gcp.servicedirectory.ServiceIamMember("member", { - * role: "roles/viewer", - * member: "user:jane@example.com", - * }, { - * provider: google_beta, - * }); - * ``` - * * ## Import * * For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/nodejs/serviceusage/consumerQuotaOverride.ts b/sdk/nodejs/serviceusage/consumerQuotaOverride.ts index 467e09f897..0a04dfa3b3 100644 --- a/sdk/nodejs/serviceusage/consumerQuotaOverride.ts +++ b/sdk/nodejs/serviceusage/consumerQuotaOverride.ts @@ -5,16 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * A consumer override is applied to the consumer on its own authority to limit its own quota usage. - * Consumer overrides cannot be used to grant more quota than would be allowed by admin overrides, - * producer overrides, or the default limit of the service. - * - * To get more information about ConsumerQuotaOverride, see: - * - * * How-to Guides - * * [Getting Started](https://cloud.google.com/service-usage/docs/getting-started) - * * [REST API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services.consumerQuotaMetrics.limits.consumerOverrides) - * * ## Example Usage * * ## Import diff --git a/sdk/nodejs/spanner/database.ts b/sdk/nodejs/spanner/database.ts index d75d7029da..ee907a203f 100644 --- a/sdk/nodejs/spanner/database.ts +++ b/sdk/nodejs/spanner/database.ts @@ -7,16 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * A Cloud Spanner Database which is hosted on a Spanner instance. - * - * To get more information about Database, see: - * - * * [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instances.databases) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/spanner/) - * - * > **Warning:** It is strongly recommended to set `lifecycle { preventDestroy = true }` on databases in order to prevent accidental data loss. - * * ## Example Usage * ### Spanner Database Basic * @@ -102,8 +92,8 @@ export class Database extends pulumi.CustomResource { */ public readonly ddls!: pulumi.Output; /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * 'terraform destroy' or 'terraform apply' that would delete the instance will fail. */ public readonly deletionProtection!: pulumi.Output; /** @@ -198,8 +188,8 @@ export interface DatabaseState { */ ddls?: pulumi.Input[]>; /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * 'terraform destroy' or 'terraform apply' that would delete the instance will fail. */ deletionProtection?: pulumi.Input; /** @@ -253,8 +243,8 @@ export interface DatabaseArgs { */ ddls?: pulumi.Input[]>; /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` that would delete the instance will fail. + * Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + * 'terraform destroy' or 'terraform apply' that would delete the instance will fail. */ deletionProtection?: pulumi.Input; /** diff --git a/sdk/nodejs/sql/databaseInstance.ts b/sdk/nodejs/sql/databaseInstance.ts index 7af374118c..50c7c20353 100644 --- a/sdk/nodejs/sql/databaseInstance.ts +++ b/sdk/nodejs/sql/databaseInstance.ts @@ -7,18 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Creates a new Google SQL Database Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), - * or the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/instances). - * - * > **NOTE on `gcp.sql.DatabaseInstance`:** - Second-generation instances include a - * default 'root'@'%' user with no password. This user will be deleted by the provider on - * instance creation. You should use `gcp.sql.User` to define a custom user with - * a restricted host and strong password. - * - * > **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false` - * (and run `pulumi update` to write the field to state) in order to destroy an instance. - * It is recommended to not set this field (or set it to true) until you're ready to destroy the instance and its databases. - * * ## Example Usage * ### SQL Second Generation Instance * @@ -128,9 +116,7 @@ export class DatabaseInstance extends pulumi.CustomResource { */ public /*out*/ readonly availableMaintenanceVersions!: pulumi.Output; /** - * The context needed to create this instance as a clone of another instance. When this field is set during - * resource creation, this provider will attempt to clone another instance as indicated in the context. The - * configuration is detailed below. + * Configuration for creating a new instance as a clone of another instance. */ public readonly clone!: pulumi.Output; /** @@ -151,23 +137,13 @@ export class DatabaseInstance extends pulumi.CustomResource { */ public readonly databaseVersion!: pulumi.Output; /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + * Used to block Terraform from deleting a SQL Instance. Defaults to true. */ public readonly deletionProtection!: pulumi.Output; - /** - * The full path to the encryption key used for the CMEK disk encryption. Setting - * up disk encryption currently requires manual steps outside of this provider. - * The provided key must be in the same region as the SQL instance. In order - * to use this feature, a special kind of service account must be created and - * granted permission on this key. This step can currently only be done - * manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - * That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - * key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - */ public readonly encryptionKeyName!: pulumi.Output; /** - * The first IPv4 address of any type assigned. + * The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + * output when the resource is configured with a count. */ public /*out*/ readonly firstIpAddress!: pulumi.Output; /** @@ -186,14 +162,13 @@ export class DatabaseInstance extends pulumi.CustomResource { */ public readonly masterInstanceName!: pulumi.Output; /** - * The name of the instance. If the name is left - * blank, the provider will randomly generate one when the instance is first - * created. This is done because after a name is used, it cannot be reused for - * up to [one week](https://cloud.google.com/sql/docs/delete-instance). + * The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + * created. This is done because after a name is used, it cannot be reused for up to one week. */ public readonly name!: pulumi.Output; /** - * The first private (`PRIVATE`) IPv4 address assigned. + * IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. */ public /*out*/ readonly privateIpAddress!: pulumi.Output; /** @@ -202,7 +177,8 @@ export class DatabaseInstance extends pulumi.CustomResource { */ public readonly project!: pulumi.Output; /** - * The first public (`PRIMARY`) IPv4 address assigned. + * IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. */ public /*out*/ readonly publicIpAddress!: pulumi.Output; /** @@ -215,15 +191,9 @@ export class DatabaseInstance extends pulumi.CustomResource { * configuration is detailed below. Valid only for MySQL instances. */ public readonly replicaConfiguration!: 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. - * **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this - * block during resource creation/update will trigger the restore action after the resource is created/updated. - */ public readonly restoreBackupContext!: pulumi.Output; /** - * Initial root password. Required for MS SQL Server. + * Initial root password. Can be updated. Required for MS SQL Server. */ public readonly rootPassword!: pulumi.Output; /** @@ -323,9 +293,7 @@ export interface DatabaseInstanceState { */ availableMaintenanceVersions?: pulumi.Input[]>; /** - * The context needed to create this instance as a clone of another instance. When this field is set during - * resource creation, this provider will attempt to clone another instance as indicated in the context. The - * configuration is detailed below. + * Configuration for creating a new instance as a clone of another instance. */ clone?: pulumi.Input; /** @@ -346,23 +314,13 @@ export interface DatabaseInstanceState { */ databaseVersion?: pulumi.Input; /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + * Used to block Terraform from deleting a SQL Instance. Defaults to true. */ deletionProtection?: pulumi.Input; - /** - * The full path to the encryption key used for the CMEK disk encryption. Setting - * up disk encryption currently requires manual steps outside of this provider. - * The provided key must be in the same region as the SQL instance. In order - * to use this feature, a special kind of service account must be created and - * granted permission on this key. This step can currently only be done - * manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - * That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - * key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - */ encryptionKeyName?: pulumi.Input; /** - * The first IPv4 address of any type assigned. + * The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + * output when the resource is configured with a count. */ firstIpAddress?: pulumi.Input; /** @@ -381,14 +339,13 @@ export interface DatabaseInstanceState { */ masterInstanceName?: pulumi.Input; /** - * The name of the instance. If the name is left - * blank, the provider will randomly generate one when the instance is first - * created. This is done because after a name is used, it cannot be reused for - * up to [one week](https://cloud.google.com/sql/docs/delete-instance). + * The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + * created. This is done because after a name is used, it cannot be reused for up to one week. */ name?: pulumi.Input; /** - * The first private (`PRIVATE`) IPv4 address assigned. + * IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. */ privateIpAddress?: pulumi.Input; /** @@ -397,7 +354,8 @@ export interface DatabaseInstanceState { */ project?: pulumi.Input; /** - * The first public (`PRIMARY`) IPv4 address assigned. + * IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + * access an IP of a specific type without performing filtering in a Terraform config. */ publicIpAddress?: pulumi.Input; /** @@ -410,15 +368,9 @@ export interface DatabaseInstanceState { * configuration is detailed below. Valid only for MySQL instances. */ replicaConfiguration?: 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. - * **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this - * block during resource creation/update will trigger the restore action after the resource is created/updated. - */ restoreBackupContext?: pulumi.Input; /** - * Initial root password. Required for MS SQL Server. + * Initial root password. Can be updated. Required for MS SQL Server. */ rootPassword?: pulumi.Input; /** @@ -443,9 +395,7 @@ export interface DatabaseInstanceState { */ export interface DatabaseInstanceArgs { /** - * The context needed to create this instance as a clone of another instance. When this field is set during - * resource creation, this provider will attempt to clone another instance as indicated in the context. The - * configuration is detailed below. + * Configuration for creating a new instance as a clone of another instance. */ clone?: pulumi.Input; /** @@ -461,20 +411,9 @@ export interface DatabaseInstanceArgs { */ databaseVersion: pulumi.Input; /** - * Whether or not to allow the provider to destroy the instance. Unless this field is set to false - * in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + * Used to block Terraform from deleting a SQL Instance. Defaults to true. */ deletionProtection?: pulumi.Input; - /** - * The full path to the encryption key used for the CMEK disk encryption. Setting - * up disk encryption currently requires manual steps outside of this provider. - * The provided key must be in the same region as the SQL instance. In order - * to use this feature, a special kind of service account must be created and - * granted permission on this key. This step can currently only be done - * manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - * That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - * key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - */ encryptionKeyName?: pulumi.Input; /** * The current software version on the instance. This attribute can not be set during creation. Refer to `availableMaintenanceVersions` attribute to see what `maintenanceVersion` are available for upgrade. When this attribute gets updated, it will cause an instance restart. Setting a `maintenanceVersion` value that is older than the current one on the instance will be ignored. @@ -487,10 +426,8 @@ export interface DatabaseInstanceArgs { */ masterInstanceName?: pulumi.Input; /** - * The name of the instance. If the name is left - * blank, the provider will randomly generate one when the instance is first - * created. This is done because after a name is used, it cannot be reused for - * up to [one week](https://cloud.google.com/sql/docs/delete-instance). + * The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + * created. This is done because after a name is used, it cannot be reused for up to one week. */ name?: pulumi.Input; /** @@ -508,15 +445,9 @@ export interface DatabaseInstanceArgs { * configuration is detailed below. Valid only for MySQL instances. */ replicaConfiguration?: 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. - * **NOTE:** Restoring from a backup is an imperative action and not recommended via this provider. Adding or modifying this - * block during resource creation/update will trigger the restore action after the resource is created/updated. - */ restoreBackupContext?: pulumi.Input; /** - * Initial root password. Required for MS SQL Server. + * Initial root password. Can be updated. Required for MS SQL Server. */ rootPassword?: pulumi.Input; /** diff --git a/sdk/nodejs/sql/sourceRepresentationInstance.ts b/sdk/nodejs/sql/sourceRepresentationInstance.ts index 0559d163d5..21b9ea8a58 100644 --- a/sdk/nodejs/sql/sourceRepresentationInstance.ts +++ b/sdk/nodejs/sql/sourceRepresentationInstance.ts @@ -5,12 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * A source representation instance is a Cloud SQL instance that represents - * the source database server to the Cloud SQL replica. It is visible in the - * Cloud Console and appears the same as a regular Cloud SQL instance, but it - * contains no data, requires no configuration or maintenance, and does not - * affect billing. You cannot update the source representation instance. - * * ## Example Usage * ### Sql Source Representation Instance Basic * @@ -20,9 +14,12 @@ import * as utilities from "../utilities"; * * const instance = new gcp.sql.SourceRepresentationInstance("instance", { * databaseVersion: "MYSQL_8_0", + * dumpFilePath: "gs://replica-bucket/source-database.sql.gz", * host: "10.20.30.40", + * password: "password-for-the-user", * port: 3306, * region: "us-central1", + * username: "some-user", * }); * ``` * @@ -101,6 +98,7 @@ export class SourceRepresentationInstance extends pulumi.CustomResource { public readonly name!: pulumi.Output; /** * The password for the replication user account. + * **Note**: This property is sensitive and will not be displayed in the plan. */ public readonly password!: pulumi.Output; /** @@ -163,13 +161,15 @@ export class SourceRepresentationInstance extends pulumi.CustomResource { resourceInputs["dumpFilePath"] = args ? args.dumpFilePath : undefined; resourceInputs["host"] = args ? args.host : undefined; resourceInputs["name"] = args ? args.name : undefined; - resourceInputs["password"] = args ? args.password : undefined; + resourceInputs["password"] = args?.password ? pulumi.secret(args.password) : undefined; resourceInputs["port"] = args ? args.port : undefined; resourceInputs["project"] = args ? args.project : undefined; resourceInputs["region"] = args ? args.region : undefined; resourceInputs["username"] = args ? args.username : undefined; } opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + const secretOpts = { additionalSecretOutputs: ["password"] }; + opts = pulumi.mergeOptions(opts, secretOpts); super(SourceRepresentationInstance.__pulumiType, name, resourceInputs, opts); } } @@ -209,6 +209,7 @@ export interface SourceRepresentationInstanceState { name?: pulumi.Input; /** * The password for the replication user account. + * **Note**: This property is sensitive and will not be displayed in the plan. */ password?: pulumi.Input; /** @@ -267,6 +268,7 @@ export interface SourceRepresentationInstanceArgs { name?: pulumi.Input; /** * The password for the replication user account. + * **Note**: This property is sensitive and will not be displayed in the plan. */ password?: pulumi.Input; /** diff --git a/sdk/nodejs/sql/sslCert.ts b/sdk/nodejs/sql/sslCert.ts index ddd02777c4..962b92eb88 100644 --- a/sdk/nodejs/sql/sslCert.ts +++ b/sdk/nodejs/sql/sslCert.ts @@ -5,10 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Creates a new Google SQL SSL Cert on a Google SQL Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/sslCerts). - * - * > **Note:** All arguments including the private key will be stored in the raw state as plain-text - * * ## Example Usage * * Example creating a SQL Client Certificate. diff --git a/sdk/nodejs/sql/user.ts b/sdk/nodejs/sql/user.ts index d45e1a62d5..d990afb511 100644 --- a/sdk/nodejs/sql/user.ts +++ b/sdk/nodejs/sql/user.ts @@ -7,10 +7,6 @@ import * as outputs from "../types/output"; import * as utilities from "../utilities"; /** - * Creates a new Google SQL User on a Google SQL User Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/users). - * - * > **Note:** All arguments including the username and password will be stored in the raw state as plain-text. - * * ## Example Usage * * Example creating a SQL User. diff --git a/sdk/nodejs/storage/bucket.ts b/sdk/nodejs/storage/bucket.ts index 2123f131cc..3885f91340 100644 --- a/sdk/nodejs/storage/bucket.ts +++ b/sdk/nodejs/storage/bucket.ts @@ -154,9 +154,8 @@ export class Bucket extends pulumi.CustomResource { */ public readonly encryption!: pulumi.Output; /** - * When deleting a bucket, this - * boolean option will delete all contained objects. If you try to delete a - * bucket that contains objects, the provider will fail that run. + * When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + * contains objects, Terraform will fail that run. */ public readonly forceDestroy!: pulumi.Output; /** @@ -312,9 +311,8 @@ export interface BucketState { */ encryption?: pulumi.Input; /** - * When deleting a bucket, this - * boolean option will delete all contained objects. If you try to delete a - * bucket that contains objects, the provider will fail that run. + * When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + * contains objects, Terraform will fail that run. */ forceDestroy?: pulumi.Input; /** @@ -405,9 +403,8 @@ export interface BucketArgs { */ encryption?: pulumi.Input; /** - * When deleting a bucket, this - * boolean option will delete all contained objects. If you try to delete a - * bucket that contains objects, the provider will fail that run. + * When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + * contains objects, Terraform will fail that run. */ forceDestroy?: pulumi.Input; /** diff --git a/sdk/nodejs/storage/bucketACL.ts b/sdk/nodejs/storage/bucketACL.ts index 178d4bf319..e5207c961a 100644 --- a/sdk/nodejs/storage/bucketACL.ts +++ b/sdk/nodejs/storage/bucketACL.ts @@ -5,17 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Authoritatively manages a bucket's ACLs in Google cloud storage service (GCS). For more information see - * [the official documentation](https://cloud.google.com/storage/docs/access-control/lists) - * and - * [API](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls). - * - * Bucket ACLs can be managed non authoritatively using the `storageBucketAccessControl` resource. Do not use these two resources in conjunction to manage the same bucket. - * - * Permissions can be granted either by ACLs or Cloud IAM policies. In general, permissions granted by Cloud IAM policies do not appear in ACLs, and permissions granted by ACLs do not appear in Cloud IAM policies. The only exception is for ACLs applied directly on a bucket and certain bucket-level Cloud IAM policies, as described in [Cloud IAM relation to ACLs](https://cloud.google.com/storage/docs/access-control/iam#acls). - * - * **NOTE** This resource will not remove the `project-owners-` entity from the `OWNER` role. - * * ## Example Usage * * Example creating an ACL on a bucket with one owner, and one reader. diff --git a/sdk/nodejs/storage/bucketAccessControl.ts b/sdk/nodejs/storage/bucketAccessControl.ts index 8dc0bb8480..0371c94b70 100644 --- a/sdk/nodejs/storage/bucketAccessControl.ts +++ b/sdk/nodejs/storage/bucketAccessControl.ts @@ -5,29 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Bucket ACLs can be managed authoritatively using the - * `storageBucketAcl` resource. Do not use these two resources in conjunction to manage the same bucket. - * - * The BucketAccessControls resource manages the Access Control List - * (ACLs) for a single entity/role pairing on a bucket. ACLs let you specify who - * has access to your data and to what extent. - * - * There are three roles that can be assigned to an entity: - * - * READERs can get the bucket, though no acl property will be returned, and - * list the bucket's objects. WRITERs are READERs, and they can insert - * objects into the bucket and delete the bucket's objects. OWNERs are - * WRITERs, and they can get the acl property of a bucket, update a bucket, - * and call all BucketAccessControls methods on the bucket. For more - * information, see Access Control, with the caveat that this API uses - * READER, WRITER, and OWNER instead of READ, WRITE, and FULL_CONTROL. - * - * To get more information about BucketAccessControl, see: - * - * * [API documentation](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/storage/docs/access-control/lists) - * * ## Example Usage * ### Storage Bucket Access Control Public Bucket * diff --git a/sdk/nodejs/storage/bucketObject.ts b/sdk/nodejs/storage/bucketObject.ts index de47ca4a52..591953f60b 100644 --- a/sdk/nodejs/storage/bucketObject.ts +++ b/sdk/nodejs/storage/bucketObject.ts @@ -70,7 +70,7 @@ export class BucketObject extends pulumi.CustomResource { */ public readonly cacheControl!: pulumi.Output; /** - * Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + * Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). */ public readonly content!: pulumi.Output; /** @@ -230,7 +230,7 @@ export interface BucketObjectState { */ cacheControl?: pulumi.Input; /** - * Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + * Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). */ content?: pulumi.Input; /** @@ -323,7 +323,7 @@ export interface BucketObjectArgs { */ cacheControl?: pulumi.Input; /** - * Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + * Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). */ content?: pulumi.Input; /** diff --git a/sdk/nodejs/storage/getProjectServiceAccount.ts b/sdk/nodejs/storage/getProjectServiceAccount.ts index ce1d219fe4..55458e96ca 100644 --- a/sdk/nodejs/storage/getProjectServiceAccount.ts +++ b/sdk/nodejs/storage/getProjectServiceAccount.ts @@ -5,39 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts). - * - * For each Google Cloud project, Google maintains a unique service account which - * is used as the identity for various Google Cloud Storage operations, including - * operations involving - * [customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys) - * and those involving - * [storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification). - * This automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use - * these customer-managed resources. - * - * The service account has a well-known, documented naming format which is parameterised on the numeric Google project ID. - * However, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which - * presuppose its existence. - * These actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the - * service account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys - * on the bucket creation page. - * - * Use of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations - * which demand its existence, such as specifying it in Cloud IAM policy. - * Always prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause - * provider update errors in cases where the service account does not yet exist. - * - * > When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources, - * you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource. - * Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a - * bucket configuration, otherwise the API calls will fail. - * You may need to use `dependsOn` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it. - * See the examples here and in the `gcp.storage.Notification` resource. - * - * For more information see - * [the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount). - * * ## Example Usage * ### Pub/Sub Notifications * @@ -120,39 +87,6 @@ export interface GetProjectServiceAccountResult { readonly userProject?: string; } /** - * Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts). - * - * For each Google Cloud project, Google maintains a unique service account which - * is used as the identity for various Google Cloud Storage operations, including - * operations involving - * [customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys) - * and those involving - * [storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification). - * This automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use - * these customer-managed resources. - * - * The service account has a well-known, documented naming format which is parameterised on the numeric Google project ID. - * However, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which - * presuppose its existence. - * These actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the - * service account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys - * on the bucket creation page. - * - * Use of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations - * which demand its existence, such as specifying it in Cloud IAM policy. - * Always prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause - * provider update errors in cases where the service account does not yet exist. - * - * > When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources, - * you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource. - * Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a - * bucket configuration, otherwise the API calls will fail. - * You may need to use `dependsOn` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it. - * See the examples here and in the `gcp.storage.Notification` resource. - * - * For more information see - * [the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount). - * * ## Example Usage * ### Pub/Sub Notifications * diff --git a/sdk/nodejs/storage/hmacKey.ts b/sdk/nodejs/storage/hmacKey.ts index fcb427d4f0..24db18e086 100644 --- a/sdk/nodejs/storage/hmacKey.ts +++ b/sdk/nodejs/storage/hmacKey.ts @@ -5,22 +5,6 @@ import * as pulumi from "@pulumi/pulumi"; import * as utilities from "../utilities"; /** - * The hmacKeys resource represents an HMAC key within Cloud Storage. The resource - * consists of a secret and HMAC key metadata. HMAC keys can be used as credentials - * for service accounts. - * - * To get more information about HmacKey, see: - * - * * [API documentation](https://cloud.google.com/storage/docs/json_api/v1/projects/hmacKeys) - * * How-to Guides - * * [Official Documentation](https://cloud.google.com/storage/docs/authentication/managing-hmackeys) - * - * > **Warning:** All arguments including the `secret` value will be stored in the raw - * state as plain-text. On import, the `secret` value will not be retrieved. - * - * > **Warning:** All arguments including `secret` will be stored in the raw - * state as plain-text. - * * ## Example Usage * ### Storage Hmac Key * @@ -30,7 +14,7 @@ import * as utilities from "../utilities"; * * // Create a new service account * const serviceAccount = new gcp.serviceaccount.Account("serviceAccount", {accountId: "my-svc-acc"}); - * //Create the HMAC key for the associated service account + * //Create the HMAC key for the associated service account * const key = new gcp.storage.HmacKey("key", {serviceAccountEmail: serviceAccount.email}); * ``` * diff --git a/sdk/nodejs/tags/index.ts b/sdk/nodejs/tags/index.ts index a646126084..03897129d0 100644 --- a/sdk/nodejs/tags/index.ts +++ b/sdk/nodejs/tags/index.ts @@ -15,6 +15,11 @@ export const getTagValue: typeof import("./getTagValue").getTagValue = null as a export const getTagValueOutput: typeof import("./getTagValue").getTagValueOutput = null as any; utilities.lazyLoad(exports, ["getTagValue","getTagValueOutput"], () => require("./getTagValue")); +export { LocationTagBindingArgs, LocationTagBindingState } from "./locationTagBinding"; +export type LocationTagBinding = import("./locationTagBinding").LocationTagBinding; +export const LocationTagBinding: typeof import("./locationTagBinding").LocationTagBinding = null as any; +utilities.lazyLoad(exports, ["LocationTagBinding"], () => require("./locationTagBinding")); + export { TagBindingArgs, TagBindingState } from "./tagBinding"; export type TagBinding = import("./tagBinding").TagBinding; export const TagBinding: typeof import("./tagBinding").TagBinding = null as any; @@ -65,6 +70,8 @@ const _module = { version: utilities.getVersion(), construct: (name: string, type: string, urn: string): pulumi.Resource => { switch (type) { + case "gcp:tags/locationTagBinding:LocationTagBinding": + return new LocationTagBinding(name, undefined, { urn }) case "gcp:tags/tagBinding:TagBinding": return new TagBinding(name, undefined, { urn }) case "gcp:tags/tagKey:TagKey": @@ -88,6 +95,7 @@ const _module = { } }, }; +pulumi.runtime.registerResourceModule("gcp", "tags/locationTagBinding", _module) pulumi.runtime.registerResourceModule("gcp", "tags/tagBinding", _module) pulumi.runtime.registerResourceModule("gcp", "tags/tagKey", _module) pulumi.runtime.registerResourceModule("gcp", "tags/tagKeyIamBinding", _module) diff --git a/sdk/nodejs/tags/locationTagBinding.ts b/sdk/nodejs/tags/locationTagBinding.ts new file mode 100644 index 0000000000..b4fc4b153e --- /dev/null +++ b/sdk/nodejs/tags/locationTagBinding.ts @@ -0,0 +1,179 @@ +// *** WARNING: this file 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"; + +/** + * ## subcategory: "Tags" + * + * page_title: "Google: gcp.tags.LocationTagBinding" + * description: |- + * A LocationTagBinding represents a connection between a TagValue and a Regional cloud resources. + * --- + * + * # google\_tags\_location\_tag\_binding + * + * A TagBinding represents a connection between a TagValue and a Regional cloud resource (currently project, folder, or organization). Once a TagBinding is created, the TagValue is applied to all the descendants of the cloud resource. + * + * To get more information about TagBinding, see: + * + * * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v3/tagBindings) + * * How-to Guides + * * [Official Documentation](https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing) + * + * ## Example Usage + * ### Location Tag Binding Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const project = new gcp.organizations.Project("project", { + * orgId: "123456789", + * projectId: "project_id", + * }); + * const key = new gcp.tags.TagKey("key", { + * description: "For keyname resources.", + * parent: "organizations/123456789", + * shortName: "keyname", + * }); + * const value = new gcp.tags.TagValue("value", { + * description: "For valuename resources.", + * parent: pulumi.interpolate`tagKeys/${key.name}`, + * shortName: "valuename", + * }); + * const binding = new gcp.tags.LocationTagBinding("binding", { + * location: "us-central1", + * parent: pulumi.interpolate`//run.googleapis.com/projects/${project.number}/locations/${google_cloud_run_service["default"].location}/services/${google_cloud_run_service["default"].name}`, + * tagValue: pulumi.interpolate`tagValues/${value.name}`, + * }); + * ``` + * + * ## Import + * + * TagBinding can be imported using any of these accepted formats + * + * ```sh + * $ pulumi import gcp:tags/locationTagBinding:LocationTagBinding default {{location}}/{{name}} + * ``` + */ +export class LocationTagBinding extends pulumi.CustomResource { + /** + * Get an existing LocationTagBinding 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?: LocationTagBindingState, opts?: pulumi.CustomResourceOptions): LocationTagBinding { + return new LocationTagBinding(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:tags/locationTagBinding:LocationTagBinding'; + + /** + * Returns true if the given object is an instance of LocationTagBinding. 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 LocationTagBinding { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === LocationTagBinding.__pulumiType; + } + + /** + * Location of the resource. + */ + public readonly location!: pulumi.Output; + /** + * The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + */ + public readonly parent!: pulumi.Output; + /** + * The TagValue of the TagBinding. Must be of the form tagValues/456. + */ + public readonly tagValue!: pulumi.Output; + + /** + * Create a LocationTagBinding 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: LocationTagBindingArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: LocationTagBindingArgs | LocationTagBindingState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as LocationTagBindingState | undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["parent"] = state ? state.parent : undefined; + resourceInputs["tagValue"] = state ? state.tagValue : undefined; + } else { + const args = argsOrState as LocationTagBindingArgs | undefined; + if ((!args || args.parent === undefined) && !opts.urn) { + throw new Error("Missing required property 'parent'"); + } + if ((!args || args.tagValue === undefined) && !opts.urn) { + throw new Error("Missing required property 'tagValue'"); + } + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["parent"] = args ? args.parent : undefined; + resourceInputs["tagValue"] = args ? args.tagValue : undefined; + resourceInputs["name"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(LocationTagBinding.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering LocationTagBinding resources. + */ +export interface LocationTagBindingState { + /** + * Location of the resource. + */ + location?: pulumi.Input; + /** + * The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + */ + name?: pulumi.Input; + /** + * The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + */ + parent?: pulumi.Input; + /** + * The TagValue of the TagBinding. Must be of the form tagValues/456. + */ + tagValue?: pulumi.Input; +} + +/** + * The set of arguments for constructing a LocationTagBinding resource. + */ +export interface LocationTagBindingArgs { + /** + * Location of the resource. + */ + location?: pulumi.Input; + /** + * The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + */ + parent: pulumi.Input; + /** + * The TagValue of the TagBinding. Must be of the form tagValues/456. + */ + tagValue: pulumi.Input; +} diff --git a/sdk/nodejs/tpu/node.ts b/sdk/nodejs/tpu/node.ts index f74b54974e..27fd1024cd 100644 --- a/sdk/nodejs/tpu/node.ts +++ b/sdk/nodejs/tpu/node.ts @@ -30,42 +30,6 @@ import * as utilities from "../utilities"; * cidrBlock: "10.2.0.0/29", * }); * ``` - * ### TPU Node Full - * - * ```typescript - * import * as pulumi from "@pulumi/pulumi"; - * import * as gcp from "@pulumi/gcp"; - * - * const available = gcp.tpu.getTensorflowVersions({}); - * const network = gcp.compute.getNetwork({ - * name: "default", - * }); - * const serviceRange = new gcp.compute.GlobalAddress("serviceRange", { - * purpose: "VPC_PEERING", - * addressType: "INTERNAL", - * prefixLength: 16, - * network: network.then(network => network.id), - * }); - * const privateServiceConnection = new gcp.servicenetworking.Connection("privateServiceConnection", { - * network: network.then(network => network.id), - * service: "servicenetworking.googleapis.com", - * reservedPeeringRanges: [serviceRange.name], - * }); - * const tpu = new gcp.tpu.Node("tpu", { - * zone: "us-central1-b", - * acceleratorType: "v3-8", - * tensorflowVersion: available.then(available => available.versions?.[0]), - * description: "Google Provider test TPU", - * useServiceNetworking: true, - * network: privateServiceConnection.network, - * labels: { - * foo: "bar", - * }, - * schedulingConfig: { - * preemptible: true, - * }, - * }); - * ``` * * ## Import * diff --git a/sdk/nodejs/tsconfig.json b/sdk/nodejs/tsconfig.json index 8c1b2ae860..517f88c226 100644 --- a/sdk/nodejs/tsconfig.json +++ b/sdk/nodejs/tsconfig.json @@ -171,6 +171,9 @@ "cloudbuild/index.ts", "cloudbuild/trigger.ts", "cloudbuild/workerPool.ts", + "cloudbuildv2/connection.ts", + "cloudbuildv2/index.ts", + "cloudbuildv2/repository.ts", "clouddeploy/deliveryPipeline.ts", "clouddeploy/index.ts", "clouddeploy/target.ts", @@ -590,6 +593,7 @@ "healthcare/hl7StoreIamMember.ts", "healthcare/hl7StoreIamPolicy.ts", "healthcare/index.ts", + "iam/accessBoundaryPolicy.ts", "iam/denyPolicy.ts", "iam/getRule.ts", "iam/getTestablePermissions.ts", @@ -800,6 +804,7 @@ "runtimeconfig/variable.ts", "secretmanager/getSecret.ts", "secretmanager/getSecretVersion.ts", + "secretmanager/getSecretVersionAccess.ts", "secretmanager/index.ts", "secretmanager/secret.ts", "secretmanager/secretIamBinding.ts", @@ -895,6 +900,7 @@ "tags/getTagKey.ts", "tags/getTagValue.ts", "tags/index.ts", + "tags/locationTagBinding.ts", "tags/tagBinding.ts", "tags/tagKey.ts", "tags/tagKeyIamBinding.ts", @@ -931,6 +937,8 @@ "vpcaccess/getConnector.ts", "vpcaccess/index.ts", "workflows/index.ts", - "workflows/workflow.ts" + "workflows/workflow.ts", + "workstations/index.ts", + "workstations/workstationCluster.ts" ] } diff --git a/sdk/nodejs/types/input.ts b/sdk/nodejs/types/input.ts index ebfc7c3957..d7841b9433 100644 --- a/sdk/nodejs/types/input.ts +++ b/sdk/nodejs/types/input.ts @@ -2795,6 +2795,14 @@ export namespace bigquery { * The id of customer's directory that host the data. */ customerTenantId: pulumi.Input; + /** + * The Azure Application (client) ID where the federated credentials will be hosted. + */ + federatedApplicationClientId?: pulumi.Input; + /** + * A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + */ + identity?: pulumi.Input; /** * The object id of the Azure Active Directory Application. */ @@ -2821,6 +2829,10 @@ export namespace bigquery { * If parallelism should be used when reading from Cloud Spanner */ useParallelism?: pulumi.Input; + /** + * If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + */ + useServerlessAnalytics?: pulumi.Input; } export interface ConnectionCloudSql { @@ -2837,6 +2849,10 @@ export namespace bigquery { * Cloud SQL instance ID in the form project:location:instance. */ instanceId: pulumi.Input; + /** + * When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + */ + serviceAccountId?: pulumi.Input; /** * Type of the Cloud SQL database. * Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. @@ -3318,8 +3334,8 @@ export namespace bigquery { */ maxBadRecords?: pulumi.Input; /** - * Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - * property to a custom value, BigQuery throws an error if an + * Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value + * when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an * empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as * an empty value. */ @@ -3824,15 +3840,6 @@ export namespace bigquery { * The separator for fields in a CSV file. */ fieldDelimiter?: pulumi.Input; - /** - * The value that is used to quote data sections in a - * CSV file. If your data does not contain quoted sections, set the - * property value to an empty string. If your data contains quoted newline - * characters, you must also set the `allowQuotedNewlines` property to true. - * The API-side default is `"`, specified in the provider escaped as `\"`. Due to - * limitations with default values, this value is required to be - * explicitly set. - */ quote: pulumi.Input; /** * The number of rows at the top of a CSV @@ -6273,7 +6280,6 @@ export namespace certificatemanager { /** * The certificate chain in PEM-encoded form. * Leaf certificate comes first, followed by intermediate ones if any. - * **Note**: This property is sensitive and will not be displayed in the plan. */ pemCertificate?: pulumi.Input; /** @@ -6865,6 +6871,11 @@ export namespace cloudbuild { } export interface TriggerGitFileSource { + /** + * The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + */ + githubEnterpriseConfig?: pulumi.Input; /** * The path of the file, with the repo root as the root of the path. */ @@ -6962,7 +6973,60 @@ export namespace cloudbuild { topic: pulumi.Input; } + export interface TriggerRepositoryEventConfig { + /** + * Contains filter properties for matching Pull Requests. + * Structure is documented below. + */ + pullRequest?: pulumi.Input; + /** + * Contains filter properties for matching git pushes. + * Structure is documented below. + */ + push?: pulumi.Input; + /** + * The resource name of the Repo API resource. + */ + repository?: pulumi.Input; + } + + export interface TriggerRepositoryEventConfigPullRequest { + /** + * Regex of branches to match. + */ + branch?: pulumi.Input; + /** + * Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + * Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + */ + commentControl?: pulumi.Input; + /** + * If true, branches that do NOT match the gitRef will trigger a build. + */ + invertRegex?: pulumi.Input; + } + + export interface TriggerRepositoryEventConfigPush { + /** + * Regex of branches to match. Specify only one of branch or tag. + */ + branch?: pulumi.Input; + /** + * When true, only trigger a build if the revision regex does NOT match the gitRef regex. + */ + invertRegex?: pulumi.Input; + /** + * Regex of tags to match. Specify only one of branch or tag. + */ + tag?: pulumi.Input; + } + export interface TriggerSourceToBuild { + /** + * The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + */ + githubEnterpriseConfig?: pulumi.Input; /** * The branch or tag to use. Must start with "refs/" (required). */ @@ -7051,6 +7115,78 @@ export namespace cloudbuild { } } +export namespace cloudbuildv2 { + export interface ConnectionGithubConfig { + /** + * GitHub App installation id. + */ + appInstallationId?: pulumi.Input; + /** + * OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + */ + authorizerCredential?: pulumi.Input; + } + + export interface ConnectionGithubConfigAuthorizerCredential { + /** + * A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`. + */ + oauthTokenSecretVersion?: pulumi.Input; + /** + * The username associated to this token. + */ + username?: pulumi.Input; + } + + export interface ConnectionGithubEnterpriseConfig { + /** + * Id of the GitHub App created from the manifest. + */ + appId?: pulumi.Input; + /** + * ID of the installation of the GitHub App. + */ + appInstallationId?: pulumi.Input; + /** + * The URL-friendly name of the GitHub App. + */ + appSlug?: pulumi.Input; + /** + * Required. The URI of the GitHub Enterprise host this connection is for. + */ + hostUri: pulumi.Input; + /** + * SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + */ + privateKeySecretVersion?: pulumi.Input; + /** + * Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + */ + serviceDirectoryConfig?: pulumi.Input; + /** + * SSL certificate to use for requests to GitHub Enterprise. + */ + sslCa?: pulumi.Input; + /** + * SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + */ + webhookSecretSecretVersion?: pulumi.Input; + } + + export interface ConnectionGithubEnterpriseConfigServiceDirectoryConfig { + /** + * Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + */ + service: pulumi.Input; + } + + export interface ConnectionInstallationState { + actionUri?: pulumi.Input; + message?: pulumi.Input; + stage?: pulumi.Input; + } +} + export namespace clouddeploy { export interface DeliveryPipelineCondition { pipelineReadyConditions?: pulumi.Input[]>; @@ -7638,14 +7774,6 @@ export namespace cloudidentity { export namespace cloudrun { export interface DomainMappingMetadata { - /** - * Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - */ annotations?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * A sequence number representing a specific generation of the desired state. @@ -7781,17 +7909,6 @@ export namespace cloudrun { } export interface ServiceMetadata { - /** - * Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - */ annotations?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * A sequence number representing a specific generation of the desired state. @@ -7903,17 +8020,6 @@ export namespace cloudrun { } export interface ServiceTemplateMetadata { - /** - * Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - */ annotations?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * A sequence number representing a specific generation of the desired state. @@ -8051,11 +8157,6 @@ export namespace cloudrun { * More info: https://kubernetes.io/docs/concepts/containers/images */ image: pulumi.Input; - /** - * Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - * https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - * Structure is documented below. - */ livenessProbe?: pulumi.Input; /** * List of open ports in the container. @@ -8645,8 +8746,12 @@ export namespace cloudrunv2 { */ image: pulumi.Input; /** + * (Optional, Deprecated) * Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. + * + * @deprecated Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. */ livenessProbe?: pulumi.Input; /** @@ -8665,8 +8770,12 @@ export namespace cloudrunv2 { */ resources?: pulumi.Input; /** + * (Optional, Deprecated) * Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. + * + * @deprecated Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. */ startupProbe?: pulumi.Input; /** @@ -9177,7 +9286,7 @@ export namespace cloudrunv2 { */ failureThreshold?: pulumi.Input; /** - * HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + * HTTPGet specifies the http request to perform. * Structure is documented below. */ httpGet?: pulumi.Input; @@ -9190,8 +9299,11 @@ export namespace cloudrunv2 { */ periodSeconds?: pulumi.Input; /** - * TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + * (Optional, Deprecated) + * TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. * Structure is documented below. + * + * @deprecated Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. */ tcpSocket?: pulumi.Input; /** @@ -9849,6 +9961,7 @@ export namespace composer { export interface EnvironmentConfigSoftwareConfig { airflowConfigOverrides?: pulumi.Input<{[key: string]: pulumi.Input}>; + cloudDataLineageIntegration?: pulumi.Input; envVariables?: pulumi.Input<{[key: string]: pulumi.Input}>; imageVersion?: pulumi.Input; pypiPackages?: pulumi.Input<{[key: string]: pulumi.Input}>; @@ -9856,6 +9969,10 @@ export namespace composer { schedulerCount?: pulumi.Input; } + export interface EnvironmentConfigSoftwareConfigCloudDataLineageIntegration { + enabled: pulumi.Input; + } + export interface EnvironmentConfigWebServerConfig { machineType: pulumi.Input; } @@ -9956,11 +10073,6 @@ export namespace compute { * Possible values are `OFF`, `ONLY_UP`, and `ON`. */ mode?: pulumi.Input; - /** - * Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - */ scaleDownControl?: pulumi.Input; /** * Defines scale in controls to reduce the risk of response latency @@ -10008,35 +10120,6 @@ export namespace compute { } export interface AutoscalarAutoscalingPolicyMetric { - /** - * A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gceInstance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - */ filter?: pulumi.Input; /** * The identifier (type) of the Stackdriver Monitoring metric. @@ -10044,22 +10127,6 @@ export namespace compute { * The metric must have a value type of INT64 or DOUBLE. */ name: pulumi.Input; - /** - * If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilizationTarget - * instead. - */ singleInstanceAssignment?: pulumi.Input; /** * The target value of the metric that autoscaler should @@ -10213,11 +10280,6 @@ export namespace compute { * Possible values are `OFF`, `ONLY_UP`, and `ON`. */ mode?: pulumi.Input; - /** - * Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - */ scaleDownControl?: pulumi.Input; /** * Defines scale in controls to reduce the risk of response latency @@ -10265,35 +10327,6 @@ export namespace compute { } export interface AutoscalerAutoscalingPolicyMetric { - /** - * A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gceInstance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - */ filter?: pulumi.Input; /** * The identifier (type) of the Stackdriver Monitoring metric. @@ -10301,22 +10334,6 @@ export namespace compute { * The metric must have a value type of INT64 or DOUBLE. */ name: pulumi.Input; - /** - * If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilizationTarget - * instead. - */ singleInstanceAssignment?: pulumi.Input; /** * The target value of the metric that autoscaler should @@ -10737,10 +10754,6 @@ export namespace compute { } export interface BackendServiceCircuitBreakers { - /** - * The timeout for new network connections to hosts. - * Structure is documented below. - */ connectTimeout?: pulumi.Input; /** * The maximum number of connections to the backend cluster. @@ -10889,6 +10902,52 @@ export namespace compute { oauth2ClientSecretSha256?: pulumi.Input; } + export interface BackendServiceLocalityLbPolicy { + /** + * The configuration for a custom policy implemented by the user and + * deployed with the client. + * Structure is documented below. + */ + customPolicy?: pulumi.Input; + /** + * The configuration for a built-in load balancing policy. + * Structure is documented below. + */ + policy?: pulumi.Input; + } + + export interface BackendServiceLocalityLbPolicyCustomPolicy { + /** + * An optional, arbitrary JSON object with configuration data, understood + * by a locally installed custom policy implementation. + */ + data?: pulumi.Input; + /** + * Identifies the custom policy. + * The value should match the type the custom implementation is registered + * with on the gRPC clients. It should follow protocol buffer + * message naming conventions and include the full path (e.g. + * myorg.CustomLbPolicy). The maximum length is 256 characters. + * Note that specifying the same custom policy more than once for a + * backend is not a valid configuration and will be rejected. + */ + name: pulumi.Input; + } + + export interface BackendServiceLocalityLbPolicyPolicy { + /** + * The name of a locality load balancer policy to be used. The value + * should be one of the predefined ones as supported by localityLbPolicy, + * although at the moment only ROUND_ROBIN is supported. + * This field should only be populated when the customPolicy field is not + * used. + * Note that specifying the same policy more than once for a backend is + * not a valid configuration and will be rejected. + * The possible values are: + */ + name: pulumi.Input; + } + export interface BackendServiceLogConfig { /** * Whether to enable logging for the load balancer traffic served by this backend service. @@ -11697,7 +11756,7 @@ export namespace compute { deviceName?: pulumi.Input; /** * A 256-bit [customer-supplied encryption key] - * (), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kmsKeySelfLink` and `diskEncryptionKeyRaw` may be set. */ @@ -11735,7 +11794,7 @@ export namespace compute { deviceName?: pulumi.Input; /** * A 256-bit [customer-supplied encryption key] - * (), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kmsKeySelfLink` and `diskEncryptionKeyRaw` * may be set. @@ -12294,14 +12353,6 @@ export namespace compute { } export interface InstanceNetworkInterface { - /** - * Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet. If omitted, ssh will not - * work unless this provider can send traffic to the instance's network (e.g. via - * tunnel or because it is running on another cloud instance on that network). - * This block can be repeated multiple times. Structure documented below. - */ accessConfigs?: pulumi.Input[]>; /** * An @@ -12489,7 +12540,7 @@ export namespace compute { */ preemptible?: pulumi.Input; /** - * Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, + * Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, * `preemptible` should be `true` and `autoRestart` should be * `false`. For more info about * `SPOT`, read [here](https://cloud.google.com/compute/docs/instances/spot) @@ -12737,14 +12788,6 @@ export namespace compute { } export interface InstanceTemplateNetworkInterface { - /** - * Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet (this means that ssh provisioners will - * not work unless you can send traffic to the instance's - * network (e.g. via tunnel or because it is running on another cloud instance - * on that network). This block can be repeated multiple times. Structure documented below. - */ accessConfigs?: pulumi.Input[]>; /** * An @@ -12759,10 +12802,6 @@ export namespace compute { */ ipv6AccessConfigs?: pulumi.Input[]>; ipv6AccessType?: pulumi.Input; - /** - * The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. - */ name?: pulumi.Input; /** * The name or selfLink of the network to attach this interface to. @@ -12885,9 +12924,6 @@ export namespace compute { * Describe the type of termination action for `SPOT` VM. Can be `STOP` or `DELETE`. Read more on [here](https://cloud.google.com/compute/docs/instances/create-use-spot) */ instanceTerminationAction?: pulumi.Input; - /** - * Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instanceTerminationAction`. Only support `DELETE` `instanceTerminationAction` at this point. Structure is documented below. - */ maxRunDuration?: pulumi.Input; minNodeCpus?: pulumi.Input; /** @@ -13137,6 +13173,30 @@ export namespace compute { startTime: pulumi.Input; } + export interface NodeGroupShareSettings { + /** + * A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + * Structure is documented below. + */ + projectMaps?: pulumi.Input[]>; + /** + * Node group sharing type. + * Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + */ + shareType: pulumi.Input; + } + + export interface NodeGroupShareSettingsProjectMap { + /** + * The identifier for this object. Format specified above. + */ + id: pulumi.Input; + /** + * The project id/number should be the same as the key of this project config in the project map. + */ + projectId: pulumi.Input; + } + export interface NodeTemplateNodeTypeFlexibility { /** * Number of virtual CPUs to use. @@ -13380,11 +13440,6 @@ export namespace compute { * Possible values are `OFF`, `ONLY_UP`, and `ON`. */ mode?: pulumi.Input; - /** - * Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - */ scaleDownControl?: pulumi.Input; /** * Defines scale in controls to reduce the risk of response latency @@ -13432,35 +13487,6 @@ export namespace compute { } export interface RegionAutoscalerAutoscalingPolicyMetric { - /** - * A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gceInstance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - */ filter?: pulumi.Input; /** * The identifier (type) of the Stackdriver Monitoring metric. @@ -13468,22 +13494,6 @@ export namespace compute { * The metric must have a value type of INT64 or DOUBLE. */ name: pulumi.Input; - /** - * If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilizationTarget - * instead. - */ singleInstanceAssignment?: pulumi.Input; /** * The target value of the metric that autoscaler should @@ -13797,18 +13807,10 @@ export namespace compute { * can be specified as values, and you cannot specify a status code more than once. */ code?: pulumi.Input; - /** - * The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - * (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - */ ttl?: pulumi.Input; } export interface RegionBackendServiceCircuitBreakers { - /** - * The timeout for new network connections to hosts. - * Structure is documented below. - */ connectTimeout?: pulumi.Input; /** * The maximum number of connections to the backend cluster. @@ -14183,9 +14185,6 @@ export namespace compute { } export interface RegionDiskSourceSnapshotEncryptionKey { - /** - * The name of the encryption key that is stored in Google Cloud KMS. - */ kmsKeyName?: pulumi.Input; /** * Specifies a 256-bit customer-supplied encryption key, encoded in @@ -16868,12 +16867,35 @@ export namespace compute { } export interface SecurityPolicyAdaptiveProtectionConfig { + /** + * ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + */ + autoDeployConfig?: pulumi.Input; /** * Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. */ layer7DdosDefenseConfig?: pulumi.Input; } + export interface SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig { + /** + * Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + */ + confidenceThreshold?: pulumi.Input; + /** + * Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + */ + expirationSec?: pulumi.Input; + /** + * Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + */ + impactedBaselineThreshold?: pulumi.Input; + /** + * Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + */ + loadThreshold?: pulumi.Input; + } + export interface SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig { /** * If set to true, enables CAAP for L7 DDoS detection. @@ -20082,12 +20104,12 @@ export namespace container { */ httpLoadBalancing?: pulumi.Input; /** - * . + * ). * Structure is documented below. */ istioConfig?: pulumi.Input; /** - * . + * ). * Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. */ kalmConfig?: pulumi.Input; @@ -20279,6 +20301,7 @@ export namespace container { */ management?: pulumi.Input; /** + * ) * Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the * specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such * as "Intel Haswell" or "Intel Sandy Bridge". @@ -20626,7 +20649,7 @@ export namespace container { export interface ClusterNodeConfig { /** - * The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + * The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption */ bootDiskKmsKey?: pulumi.Input; /** @@ -20652,10 +20675,6 @@ export namespace container { * Structure is documented below. */ gcfsConfig?: pulumi.Input; - /** - * List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - */ guestAccelerators?: pulumi.Input[]>; /** * Google Virtual NIC (gVNIC) is a virtual network interface. @@ -20701,13 +20720,6 @@ export namespace container { * [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). */ machineType?: pulumi.Input; - /** - * The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - */ metadata?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * Minimum CPU platform to be used by this instance. @@ -20742,6 +20754,10 @@ export namespace container { * for how these labels are applied to clusters, node pools and nodes. */ resourceLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `imageType = "COS_CONTAINERD"` and `nodeVersion = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + */ sandboxConfig?: pulumi.Input; /** * The service account to be used by the Node VMs. @@ -20763,16 +20779,6 @@ export namespace container { * valid sources or targets for network firewalls. */ tags?: pulumi.Input[]>; - /** - * A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - */ taints?: pulumi.Input[]>; /** * Metadata configuration to expose to workloads on the node pool. @@ -20918,7 +20924,7 @@ export namespace container { /** * How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. */ @@ -20949,18 +20955,7 @@ export namespace container { */ name?: pulumi.Input; namePrefix?: pulumi.Input; - /** - * Configuration for - * [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - */ networkConfig?: pulumi.Input; - /** - * Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `nodePool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. - */ nodeConfig?: pulumi.Input; nodeCount?: pulumi.Input; /** @@ -21037,9 +21032,6 @@ export namespace container { } export interface ClusterNodePoolNetworkConfig { - /** - * Whether to create a new range for pod IPs in this node pool. Defaults are provided for `podRange` and `podIpv4CidrBlock` if they are not specified. - */ createPodRange?: pulumi.Input; /** * Enables the private cluster feature, @@ -21048,19 +21040,13 @@ export namespace container { * endpoint via private networking. */ enablePrivateNodes?: pulumi.Input; - /** - * The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - */ podIpv4CidrBlock?: pulumi.Input; - /** - * The ID of the secondary range for pod IPs. If `createPodRange` is true, this ID is used for the new range. If `createPodRange` is false, uses an existing secondary range with this ID. - */ podRange?: pulumi.Input; } export interface ClusterNodePoolNodeConfig { /** - * The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + * The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption */ bootDiskKmsKey?: pulumi.Input; /** @@ -21086,10 +21072,6 @@ export namespace container { * Structure is documented below. */ gcfsConfig?: pulumi.Input; - /** - * List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - */ guestAccelerators?: pulumi.Input[]>; /** * Google Virtual NIC (gVNIC) is a virtual network interface. @@ -21135,13 +21117,6 @@ export namespace container { * [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). */ machineType?: pulumi.Input; - /** - * The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - */ metadata?: pulumi.Input<{[key: string]: pulumi.Input}>; /** * Minimum CPU platform to be used by this instance. @@ -21176,6 +21151,10 @@ export namespace container { * for how these labels are applied to clusters, node pools and nodes. */ resourceLabels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `imageType = "COS_CONTAINERD"` and `nodeVersion = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + */ sandboxConfig?: pulumi.Input; /** * The service account to be used by the Node VMs. @@ -21197,16 +21176,6 @@ export namespace container { * valid sources or targets for network firewalls. */ tags?: pulumi.Input[]>; - /** - * A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - */ taints?: pulumi.Input[]>; /** * Metadata configuration to expose to workloads on the node pool. @@ -21352,7 +21321,7 @@ export namespace container { /** * How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. */ @@ -21464,11 +21433,6 @@ export namespace container { * endpoint via private networking. */ enablePrivateNodes?: pulumi.Input; - /** - * Controls cluster master global - * access settings. If unset, the provider will no longer manage this field and will - * not modify the previously-set value. Structure is documented below. - */ masterGlobalAccessConfig?: pulumi.Input; /** * The IP range in CIDR notation to use for @@ -24213,7 +24177,15 @@ export namespace dataloss { */ pubSub?: pulumi.Input; /** - * Schedule for triggered jobs + * Publish findings of a DlpJob to Data Catalog. + */ + publishFindingsToCloudDataCatalog?: pulumi.Input; + /** + * Publish the result summary of a DlpJob to the Cloud Security Command Center. + */ + publishSummaryToCscc?: pulumi.Input; + /** + * If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk * Structure is documented below. */ saveFindings?: pulumi.Input; @@ -24226,6 +24198,12 @@ export namespace dataloss { topic: pulumi.Input; } + export interface PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog { + } + + export interface PreventionJobTriggerInspectJobActionPublishSummaryToCscc { + } + export interface PreventionJobTriggerInspectJobActionSaveFindings { /** * Information on where to store output @@ -25106,6 +25084,14 @@ export namespace dataproc { * If neither is specified, this defaults to the "default" network. */ network?: pulumi.Input; + /** + * Node Group Affinity for sole-tenant clusters. + */ + nodeGroupAffinity?: pulumi.Input; + /** + * Reservation Affinity for consuming zonal reservation. + */ + reservationAffinity?: pulumi.Input; /** * The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -25145,6 +25131,28 @@ export namespace dataproc { zone?: pulumi.Input; } + export interface ClusterClusterConfigGceClusterConfigNodeGroupAffinity { + /** + * The URI of a sole-tenant node group resource that the cluster will be created on. + */ + nodeGroupUri: pulumi.Input; + } + + export interface ClusterClusterConfigGceClusterConfigReservationAffinity { + /** + * Corresponds to the type of reservation consumption. + */ + consumeReservationType?: pulumi.Input; + /** + * Corresponds to the label key of reservation resource. + */ + key?: pulumi.Input; + /** + * Corresponds to the label values of reservation resource. + */ + values?: pulumi.Input[]>; + } + export interface ClusterClusterConfigGceClusterConfigShieldedInstanceConfig { /** * Defines whether instances have integrity monitoring enabled. @@ -25290,6 +25298,7 @@ export namespace dataproc { * * PREEMPTIBILITY_UNSPECIFIED * * NON_PREEMPTIBLE * * PREEMPTIBLE + * * SPOT */ preemptibility?: pulumi.Input; } @@ -27495,6 +27504,13 @@ export namespace datastream { * The prefix and name will be separated by an underscore. i.e. _. */ datasetIdPrefix?: pulumi.Input; + /** + * Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + * table. The BigQuery Service Account associated with your project requires access to this + * encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + * See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + */ + kmsKeyName?: pulumi.Input; /** * The geographic location where the dataset should reside. * See https://cloud.google.com/bigquery/docs/locations for supported locations. @@ -29216,8 +29232,17 @@ export namespace folder { } export interface IAMBindingCondition { + /** + * An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + */ description?: pulumi.Input; + /** + * Textual representation of an expression in Common Expression Language syntax. + */ expression: pulumi.Input; + /** + * A title for the expression, i.e. a short string describing its purpose. + */ title: pulumi.Input; } @@ -30001,6 +30026,56 @@ export namespace healthcare { } export namespace iam { + export interface AccessBoundaryPolicyRule { + /** + * An access boundary rule in an IAM policy. + * Structure is documented below. + */ + accessBoundaryRule?: pulumi.Input; + /** + * The description of the rule. + */ + description?: pulumi.Input; + } + + export interface AccessBoundaryPolicyRuleAccessBoundaryRule { + /** + * The availability condition further constrains the access allowed by the access boundary rule. + * Structure is documented below. + */ + availabilityCondition?: pulumi.Input; + /** + * A list of permissions that may be allowed for use on the specified resource. + */ + availablePermissions?: pulumi.Input[]>; + /** + * The full resource name of a Google Cloud resource entity. + */ + availableResource?: pulumi.Input; + } + + export interface AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition { + /** + * Description of the expression. This is a longer text which describes the expression, + * e.g. when hovered over it in a UI. + */ + description?: pulumi.Input; + /** + * Textual representation of an expression in Common Expression Language syntax. + */ + expression: pulumi.Input; + /** + * String indicating the location of the expression for error reporting, + * e.g. a file name and a position in the file. + */ + location?: pulumi.Input; + /** + * Title for the expression, i.e. a short string describing its purpose. + * This can be used e.g. in UIs which allow to enter the expression. + */ + title?: pulumi.Input; + } + export interface DenyPolicyRule { /** * A deny rule in an IAM deny policy. @@ -34074,8 +34149,17 @@ export namespace organizations { } export interface IAMBindingCondition { + /** + * An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + */ description?: pulumi.Input; + /** + * Textual representation of an expression in Common Expression Language syntax. + */ expression: pulumi.Input; + /** + * A title for the expression, i.e. a short string describing its purpose. + */ title: pulumi.Input; } @@ -34096,12 +34180,7 @@ export namespace organizations { export interface IamAuditConfigAuditLogConfig { /** - * Identities that do not cause logging for this type of permission. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + * Identities that do not cause logging for this type of permission. The format is the same as that for `members`. */ exemptedMembers?: pulumi.Input[]>; /** @@ -36585,7 +36664,7 @@ export namespace redis { * - ONE_HOUR: Snapshot every 1 hour. * - SIX_HOURS: Snapshot every 6 hours. * - TWELVE_HOURS: Snapshot every 12 hours. - * - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + * - TWENTY_FOUR_HOURS: Snapshot every 24 hours. * Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. */ rdbSnapshotPeriod?: pulumi.Input; @@ -38286,3 +38365,39 @@ export namespace vpcaccess { } } + +export namespace workstations { + export interface WorkstationClusterCondition { + /** + * The status code, which should be an enum value of google.rpc.Code. + */ + code?: pulumi.Input; + /** + * A list of messages that carry the error details. + */ + details?: pulumi.Input[]>; + /** + * Human readable message indicating details about the current status. + */ + message?: pulumi.Input; + } + + export interface WorkstationClusterPrivateClusterConfig { + /** + * Hostname for the workstation cluster. + * This field will be populated only when private endpoint is enabled. + * To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + */ + clusterHostname?: pulumi.Input; + /** + * Whether Workstations endpoint is private. + */ + enablePrivateEndpoint: pulumi.Input; + /** + * Service attachment URI for the workstation cluster. + * The service attachemnt is created when private endpoint is enabled. + * To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + */ + serviceAttachmentUri?: pulumi.Input; + } +} diff --git a/sdk/nodejs/types/output.ts b/sdk/nodejs/types/output.ts index 1825486cf7..c197a21525 100644 --- a/sdk/nodejs/types/output.ts +++ b/sdk/nodejs/types/output.ts @@ -2828,6 +2828,14 @@ export namespace bigquery { * The id of customer's directory that host the data. */ customerTenantId: string; + /** + * The Azure Application (client) ID where the federated credentials will be hosted. + */ + federatedApplicationClientId?: string; + /** + * A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + */ + identity: string; /** * The object id of the Azure Active Directory Application. */ @@ -2854,6 +2862,10 @@ export namespace bigquery { * If parallelism should be used when reading from Cloud Spanner */ useParallelism?: boolean; + /** + * If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + */ + useServerlessAnalytics?: boolean; } export interface ConnectionCloudSql { @@ -2870,6 +2882,10 @@ export namespace bigquery { * Cloud SQL instance ID in the form project:location:instance. */ instanceId: string; + /** + * When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + */ + serviceAccountId: string; /** * Type of the Cloud SQL database. * Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. @@ -3351,8 +3367,8 @@ export namespace bigquery { */ maxBadRecords?: number; /** - * Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - * property to a custom value, BigQuery throws an error if an + * Specifies a string that represents a null value in a CSV file. For example, if you specify "\N", BigQuery interprets "\N" as a null value + * when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an * empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as * an empty value. */ @@ -3857,15 +3873,6 @@ export namespace bigquery { * The separator for fields in a CSV file. */ fieldDelimiter?: string; - /** - * The value that is used to quote data sections in a - * CSV file. If your data does not contain quoted sections, set the - * property value to an empty string. If your data contains quoted newline - * characters, you must also set the `allowQuotedNewlines` property to true. - * The API-side default is `"`, specified in the provider escaped as `\"`. Due to - * limitations with default values, this value is required to be - * explicitly set. - */ quote: string; /** * The number of rows at the top of a CSV @@ -6419,7 +6426,6 @@ export namespace certificatemanager { /** * The certificate chain in PEM-encoded form. * Leaf certificate comes first, followed by intermediate ones if any. - * **Note**: This property is sensitive and will not be displayed in the plan. */ pemCertificate?: string; /** @@ -6725,6 +6731,7 @@ export namespace cloudbuild { } export interface GetTriggerGitFileSource { + githubEnterpriseConfig: string; path: string; repoType: string; revision: string; @@ -6757,7 +6764,26 @@ export namespace cloudbuild { topic: string; } + export interface GetTriggerRepositoryEventConfig { + pullRequests: outputs.cloudbuild.GetTriggerRepositoryEventConfigPullRequest[]; + pushes: outputs.cloudbuild.GetTriggerRepositoryEventConfigPush[]; + repository: string; + } + + export interface GetTriggerRepositoryEventConfigPullRequest { + branch: string; + commentControl: string; + invertRegex: boolean; + } + + export interface GetTriggerRepositoryEventConfigPush { + branch: string; + invertRegex: boolean; + tag: string; + } + export interface GetTriggerSourceToBuild { + githubEnterpriseConfig: string; ref: string; repoType: string; uri: string; @@ -7220,6 +7246,11 @@ export namespace cloudbuild { } export interface TriggerGitFileSource { + /** + * The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + */ + githubEnterpriseConfig?: string; /** * The path of the file, with the repo root as the root of the path. */ @@ -7317,7 +7348,60 @@ export namespace cloudbuild { topic: string; } + export interface TriggerRepositoryEventConfig { + /** + * Contains filter properties for matching Pull Requests. + * Structure is documented below. + */ + pullRequest?: outputs.cloudbuild.TriggerRepositoryEventConfigPullRequest; + /** + * Contains filter properties for matching git pushes. + * Structure is documented below. + */ + push?: outputs.cloudbuild.TriggerRepositoryEventConfigPush; + /** + * The resource name of the Repo API resource. + */ + repository?: string; + } + + export interface TriggerRepositoryEventConfigPullRequest { + /** + * Regex of branches to match. + */ + branch?: string; + /** + * Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + * Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + */ + commentControl?: string; + /** + * If true, branches that do NOT match the gitRef will trigger a build. + */ + invertRegex?: boolean; + } + + export interface TriggerRepositoryEventConfigPush { + /** + * Regex of branches to match. Specify only one of branch or tag. + */ + branch?: string; + /** + * When true, only trigger a build if the revision regex does NOT match the gitRef regex. + */ + invertRegex?: boolean; + /** + * Regex of tags to match. Specify only one of branch or tag. + */ + tag?: string; + } + export interface TriggerSourceToBuild { + /** + * The full resource name of the github enterprise config. + * Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + */ + githubEnterpriseConfig?: string; /** * The branch or tag to use. Must start with "refs/" (required). */ @@ -7407,6 +7491,79 @@ export namespace cloudbuild { } +export namespace cloudbuildv2 { + export interface ConnectionGithubConfig { + /** + * GitHub App installation id. + */ + appInstallationId?: number; + /** + * OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + */ + authorizerCredential?: outputs.cloudbuildv2.ConnectionGithubConfigAuthorizerCredential; + } + + export interface ConnectionGithubConfigAuthorizerCredential { + /** + * A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`. + */ + oauthTokenSecretVersion?: string; + /** + * The username associated to this token. + */ + username: string; + } + + export interface ConnectionGithubEnterpriseConfig { + /** + * Id of the GitHub App created from the manifest. + */ + appId?: number; + /** + * ID of the installation of the GitHub App. + */ + appInstallationId?: number; + /** + * The URL-friendly name of the GitHub App. + */ + appSlug?: string; + /** + * Required. The URI of the GitHub Enterprise host this connection is for. + */ + hostUri: string; + /** + * SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + */ + privateKeySecretVersion?: string; + /** + * Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + */ + serviceDirectoryConfig?: outputs.cloudbuildv2.ConnectionGithubEnterpriseConfigServiceDirectoryConfig; + /** + * SSL certificate to use for requests to GitHub Enterprise. + */ + sslCa?: string; + /** + * SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + */ + webhookSecretSecretVersion?: string; + } + + export interface ConnectionGithubEnterpriseConfigServiceDirectoryConfig { + /** + * Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + */ + service: string; + } + + export interface ConnectionInstallationState { + actionUri: string; + message: string; + stage: string; + } + +} + export namespace clouddeploy { export interface DeliveryPipelineCondition { pipelineReadyConditions: outputs.clouddeploy.DeliveryPipelineConditionPipelineReadyCondition[]; @@ -8249,14 +8406,6 @@ export namespace cloudidentity { export namespace cloudrun { export interface DomainMappingMetadata { - /** - * Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - */ annotations: {[key: string]: string}; /** * A sequence number representing a specific generation of the desired state. @@ -8619,17 +8768,6 @@ export namespace cloudrun { } export interface ServiceMetadata { - /** - * Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - */ annotations: {[key: string]: string}; /** * A sequence number representing a specific generation of the desired state. @@ -8741,17 +8879,6 @@ export namespace cloudrun { } export interface ServiceTemplateMetadata { - /** - * Annotations is a key value map stored with a resource that - * may be set by external tools to store and retrieve arbitrary metadata. More - * info: http://kubernetes.io/docs/user-guide/annotations - * **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - * If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - * or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - * Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - * - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - * for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - */ annotations: {[key: string]: string}; /** * A sequence number representing a specific generation of the desired state. @@ -8889,11 +9016,6 @@ export namespace cloudrun { * More info: https://kubernetes.io/docs/concepts/containers/images */ image: string; - /** - * Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - * https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - * Structure is documented below. - */ livenessProbe?: outputs.cloudrun.ServiceTemplateSpecContainerLivenessProbe; /** * List of open ports in the container. @@ -9484,8 +9606,12 @@ export namespace cloudrunv2 { */ image: string; /** + * (Optional, Deprecated) * Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. + * + * @deprecated Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release. */ livenessProbe?: outputs.cloudrunv2.JobTemplateTemplateContainerLivenessProbe; /** @@ -9504,8 +9630,12 @@ export namespace cloudrunv2 { */ resources: outputs.cloudrunv2.JobTemplateTemplateContainerResources; /** + * (Optional, Deprecated) * Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + * This field is not supported in Cloud Run Job currently. * Structure is documented below. + * + * @deprecated Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release. */ startupProbe: outputs.cloudrunv2.JobTemplateTemplateContainerStartupProbe; /** @@ -10016,7 +10146,7 @@ export namespace cloudrunv2 { */ failureThreshold?: number; /** - * HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + * HTTPGet specifies the http request to perform. * Structure is documented below. */ httpGet?: outputs.cloudrunv2.ServiceTemplateContainerLivenessProbeHttpGet; @@ -10029,8 +10159,11 @@ export namespace cloudrunv2 { */ periodSeconds?: number; /** - * TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + * (Optional, Deprecated) + * TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. * Structure is documented below. + * + * @deprecated Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release. */ tcpSocket?: outputs.cloudrunv2.ServiceTemplateContainerLivenessProbeTcpSocket; /** @@ -10691,6 +10824,7 @@ export namespace composer { export interface EnvironmentConfigSoftwareConfig { airflowConfigOverrides?: {[key: string]: string}; + cloudDataLineageIntegration: outputs.composer.EnvironmentConfigSoftwareConfigCloudDataLineageIntegration; envVariables?: {[key: string]: string}; imageVersion: string; pypiPackages?: {[key: string]: string}; @@ -10698,6 +10832,10 @@ export namespace composer { schedulerCount: number; } + export interface EnvironmentConfigSoftwareConfigCloudDataLineageIntegration { + enabled: boolean; + } + export interface EnvironmentConfigWebServerConfig { machineType: string; } @@ -10833,6 +10971,7 @@ export namespace composer { export interface GetEnvironmentConfigSoftwareConfig { airflowConfigOverrides: {[key: string]: string}; + cloudDataLineageIntegrations: outputs.composer.GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration[]; envVariables: {[key: string]: string}; imageVersion: string; pypiPackages: {[key: string]: string}; @@ -10840,6 +10979,10 @@ export namespace composer { schedulerCount: number; } + export interface GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegration { + enabled: boolean; + } + export interface GetEnvironmentConfigWebServerConfig { machineType: string; } @@ -10951,11 +11094,6 @@ export namespace compute { * Possible values are `OFF`, `ONLY_UP`, and `ON`. */ mode?: string; - /** - * Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - */ scaleDownControl: outputs.compute.AutoscalarAutoscalingPolicyScaleDownControl; /** * Defines scale in controls to reduce the risk of response latency @@ -11003,35 +11141,6 @@ export namespace compute { } export interface AutoscalarAutoscalingPolicyMetric { - /** - * A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gceInstance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - */ filter?: string; /** * The identifier (type) of the Stackdriver Monitoring metric. @@ -11039,22 +11148,6 @@ export namespace compute { * The metric must have a value type of INT64 or DOUBLE. */ name: string; - /** - * If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilizationTarget - * instead. - */ singleInstanceAssignment?: number; /** * The target value of the metric that autoscaler should @@ -11208,11 +11301,6 @@ export namespace compute { * Possible values are `OFF`, `ONLY_UP`, and `ON`. */ mode?: string; - /** - * Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - */ scaleDownControl: outputs.compute.AutoscalerAutoscalingPolicyScaleDownControl; /** * Defines scale in controls to reduce the risk of response latency @@ -11260,35 +11348,6 @@ export namespace compute { } export interface AutoscalerAutoscalingPolicyMetric { - /** - * A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gceInstance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - */ filter?: string; /** * The identifier (type) of the Stackdriver Monitoring metric. @@ -11296,22 +11355,6 @@ export namespace compute { * The metric must have a value type of INT64 or DOUBLE. */ name: string; - /** - * If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilizationTarget - * instead. - */ singleInstanceAssignment?: number; /** * The target value of the metric that autoscaler should @@ -11732,10 +11775,6 @@ export namespace compute { } export interface BackendServiceCircuitBreakers { - /** - * The timeout for new network connections to hosts. - * Structure is documented below. - */ connectTimeout?: outputs.compute.BackendServiceCircuitBreakersConnectTimeout; /** * The maximum number of connections to the backend cluster. @@ -11884,6 +11923,52 @@ export namespace compute { oauth2ClientSecretSha256: string; } + export interface BackendServiceLocalityLbPolicy { + /** + * The configuration for a custom policy implemented by the user and + * deployed with the client. + * Structure is documented below. + */ + customPolicy?: outputs.compute.BackendServiceLocalityLbPolicyCustomPolicy; + /** + * The configuration for a built-in load balancing policy. + * Structure is documented below. + */ + policy?: outputs.compute.BackendServiceLocalityLbPolicyPolicy; + } + + export interface BackendServiceLocalityLbPolicyCustomPolicy { + /** + * An optional, arbitrary JSON object with configuration data, understood + * by a locally installed custom policy implementation. + */ + data?: string; + /** + * Identifies the custom policy. + * The value should match the type the custom implementation is registered + * with on the gRPC clients. It should follow protocol buffer + * message naming conventions and include the full path (e.g. + * myorg.CustomLbPolicy). The maximum length is 256 characters. + * Note that specifying the same custom policy more than once for a + * backend is not a valid configuration and will be rejected. + */ + name: string; + } + + export interface BackendServiceLocalityLbPolicyPolicy { + /** + * The name of a locality load balancer policy to be used. The value + * should be one of the predefined ones as supported by localityLbPolicy, + * although at the moment only ROUND_ROBIN is supported. + * This field should only be populated when the customPolicy field is not + * used. + * Note that specifying the same policy more than once for a backend is + * not a valid configuration and will be rejected. + * The possible values are: + */ + name: string; + } + export interface BackendServiceLogConfig { /** * Whether to enable logging for the load balancer traffic served by this backend service. @@ -12356,6 +12441,26 @@ export namespace compute { oauth2ClientSecretSha256: string; } + export interface GetBackendServiceLocalityLbPolicy { + customPolicies: outputs.compute.GetBackendServiceLocalityLbPolicyCustomPolicy[]; + policies: outputs.compute.GetBackendServiceLocalityLbPolicyPolicy[]; + } + + export interface GetBackendServiceLocalityLbPolicyCustomPolicy { + data: string; + /** + * The name of the Backend Service. + */ + name: string; + } + + export interface GetBackendServiceLocalityLbPolicyPolicy { + /** + * The name of the Backend Service. + */ + name: string; + } + export interface GetBackendServiceLogConfig { enable: boolean; sampleRate: number; @@ -12975,14 +13080,6 @@ export namespace compute { } export interface GetInstanceTemplateNetworkInterface { - /** - * Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet (this means that ssh provisioners will - * not work unless you are running the prvovider can send traffic to the instance's - * network (e.g. via tunnel or because it is running on another cloud instance - * on that network). This block can be repeated multiple times. Structure documented below. - */ accessConfigs: outputs.compute.GetInstanceTemplateNetworkInterfaceAccessConfig[]; /** * An @@ -13897,7 +13994,7 @@ export namespace compute { deviceName: string; /** * A 256-bit [customer-supplied encryption key] - * (), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kmsKeySelfLink` and `diskEncryptionKeyRaw` may be set. */ @@ -13935,7 +14032,7 @@ export namespace compute { deviceName: string; /** * A 256-bit [customer-supplied encryption key] - * (), + * (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), * encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) * to encrypt this disk. Only one of `kmsKeySelfLink` and `diskEncryptionKeyRaw` * may be set. @@ -14494,14 +14591,6 @@ export namespace compute { } export interface InstanceNetworkInterface { - /** - * Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet. If omitted, ssh will not - * work unless this provider can send traffic to the instance's network (e.g. via - * tunnel or because it is running on another cloud instance on that network). - * This block can be repeated multiple times. Structure documented below. - */ accessConfigs?: outputs.compute.InstanceNetworkInterfaceAccessConfig[]; /** * An @@ -14689,7 +14778,7 @@ export namespace compute { */ preemptible?: boolean; /** - * Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, + * Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, * `preemptible` should be `true` and `autoRestart` should be * `false`. For more info about * `SPOT`, read [here](https://cloud.google.com/compute/docs/instances/spot) @@ -14937,14 +15026,6 @@ export namespace compute { } export interface InstanceTemplateNetworkInterface { - /** - * Access configurations, i.e. IPs via which this - * instance can be accessed via the Internet. Omit to ensure that the instance - * is not accessible from the Internet (this means that ssh provisioners will - * not work unless you can send traffic to the instance's - * network (e.g. via tunnel or because it is running on another cloud instance - * on that network). This block can be repeated multiple times. Structure documented below. - */ accessConfigs?: outputs.compute.InstanceTemplateNetworkInterfaceAccessConfig[]; /** * An @@ -14959,10 +15040,6 @@ export namespace compute { */ ipv6AccessConfigs?: outputs.compute.InstanceTemplateNetworkInterfaceIpv6AccessConfig[]; ipv6AccessType: string; - /** - * The name of the instance template. If you leave - * this blank, the provider will auto-generate a unique name. - */ name: string; /** * The name or selfLink of the network to attach this interface to. @@ -15085,9 +15162,6 @@ export namespace compute { * Describe the type of termination action for `SPOT` VM. Can be `STOP` or `DELETE`. Read more on [here](https://cloud.google.com/compute/docs/instances/create-use-spot) */ instanceTerminationAction?: string; - /** - * Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instanceTerminationAction`. Only support `DELETE` `instanceTerminationAction` at this point. Structure is documented below. - */ maxRunDuration?: outputs.compute.InstanceTemplateSchedulingMaxRunDuration; minNodeCpus?: number; /** @@ -15337,6 +15411,30 @@ export namespace compute { startTime: string; } + export interface NodeGroupShareSettings { + /** + * A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + * Structure is documented below. + */ + projectMaps?: outputs.compute.NodeGroupShareSettingsProjectMap[]; + /** + * Node group sharing type. + * Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + */ + shareType: string; + } + + export interface NodeGroupShareSettingsProjectMap { + /** + * The identifier for this object. Format specified above. + */ + id: string; + /** + * The project id/number should be the same as the key of this project config in the project map. + */ + projectId: string; + } + export interface NodeTemplateNodeTypeFlexibility { /** * Number of virtual CPUs to use. @@ -15580,11 +15678,6 @@ export namespace compute { * Possible values are `OFF`, `ONLY_UP`, and `ON`. */ mode?: string; - /** - * Defines scale down controls to reduce the risk of response latency - * and outages due to abrupt scale-in events - * Structure is documented below. - */ scaleDownControl?: outputs.compute.RegionAutoscalerAutoscalingPolicyScaleDownControl; /** * Defines scale in controls to reduce the risk of response latency @@ -15632,35 +15725,6 @@ export namespace compute { } export interface RegionAutoscalerAutoscalingPolicyMetric { - /** - * A filter string to be used as the filter string for - * a Stackdriver Monitoring TimeSeries.list API call. - * This filter is used to select a specific TimeSeries for - * the purpose of autoscaling and to determine whether the metric - * is exporting per-instance or per-group data. - * You can only use the AND operator for joining selectors. - * You can only use direct equality comparison operator (=) without - * any functions for each selector. - * You can specify the metric in both the filter string and in the - * metric field. However, if specified in both places, the metric must - * be identical. - * The monitored resource type determines what kind of values are - * expected for the metric. If it is a gce_instance, the autoscaler - * expects the metric to include a separate TimeSeries for each - * instance in a group. In such a case, you cannot filter on resource - * labels. - * If the resource type is any other value, the autoscaler expects - * this metric to contain values that apply to the entire autoscaled - * instance group and resource label filtering can be performed to - * point autoscaler at the correct TimeSeries to scale upon. - * This is called a per-group metric for the purpose of autoscaling. - * If not specified, the type defaults to gce_instance. - * You should provide a filter that is selective enough to pick just - * one TimeSeries for the autoscaled group or for each of the instances - * (if you are using gceInstance resource type). If multiple - * TimeSeries are returned upon the query execution, the autoscaler - * will sum their respective values to obtain its scaling value. - */ filter?: string; /** * The identifier (type) of the Stackdriver Monitoring metric. @@ -15668,22 +15732,6 @@ export namespace compute { * The metric must have a value type of INT64 or DOUBLE. */ name: string; - /** - * If scaling is based on a per-group metric value that represents the - * total amount of work to be done or resource usage, set this value to - * an amount assigned for a single instance of the scaled group. - * The autoscaler will keep the number of instances proportional to the - * value of this metric, the metric itself should not change value due - * to group resizing. - * For example, a good metric to use with the target is - * `pubsub.googleapis.com/subscription/num_undelivered_messages` - * or a custom metric exporting the total number of requests coming to - * your instances. - * A bad example would be a metric exporting an average or median - * latency, since this value can't include a chunk assignable to a - * single instance, it could be better used with utilizationTarget - * instead. - */ singleInstanceAssignment?: number; /** * The target value of the metric that autoscaler should @@ -15997,18 +16045,10 @@ export namespace compute { * can be specified as values, and you cannot specify a status code more than once. */ code?: number; - /** - * The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - * (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - */ ttl?: number; } export interface RegionBackendServiceCircuitBreakers { - /** - * The timeout for new network connections to hosts. - * Structure is documented below. - */ connectTimeout?: outputs.compute.RegionBackendServiceCircuitBreakersConnectTimeout; /** * The maximum number of connections to the backend cluster. @@ -16383,9 +16423,6 @@ export namespace compute { } export interface RegionDiskSourceSnapshotEncryptionKey { - /** - * The name of the encryption key that is stored in Google Cloud KMS. - */ kmsKeyName?: string; /** * Specifies a 256-bit customer-supplied encryption key, encoded in @@ -19126,12 +19163,35 @@ export namespace compute { } export interface SecurityPolicyAdaptiveProtectionConfig { + /** + * ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + */ + autoDeployConfig?: outputs.compute.SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig; /** * Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. */ layer7DdosDefenseConfig?: outputs.compute.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig; } + export interface SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig { + /** + * Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + */ + confidenceThreshold?: number; + /** + * Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + */ + expirationSec?: number; + /** + * Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + */ + impactedBaselineThreshold?: number; + /** + * Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + */ + loadThreshold?: number; + } + export interface SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig { /** * If set to true, enables CAAP for L7 DDoS detection. @@ -22346,12 +22406,12 @@ export namespace container { */ httpLoadBalancing: outputs.container.ClusterAddonsConfigHttpLoadBalancing; /** - * . + * ). * Structure is documented below. */ istioConfig: outputs.container.ClusterAddonsConfigIstioConfig; /** - * . + * ). * Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. */ kalmConfig: outputs.container.ClusterAddonsConfigKalmConfig; @@ -22543,6 +22603,7 @@ export namespace container { */ management: outputs.container.ClusterClusterAutoscalingAutoProvisioningDefaultsManagement; /** + * ) * Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the * specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such * as "Intel Haswell" or "Intel Sandy Bridge". @@ -22890,7 +22951,7 @@ export namespace container { export interface ClusterNodeConfig { /** - * The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + * The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption */ bootDiskKmsKey?: string; /** @@ -22916,10 +22977,6 @@ export namespace container { * Structure is documented below. */ gcfsConfig?: outputs.container.ClusterNodeConfigGcfsConfig; - /** - * List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - */ guestAccelerators: outputs.container.ClusterNodeConfigGuestAccelerator[]; /** * Google Virtual NIC (gVNIC) is a virtual network interface. @@ -22965,13 +23022,6 @@ export namespace container { * [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). */ machineType: string; - /** - * The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - */ metadata: {[key: string]: string}; /** * Minimum CPU platform to be used by this instance. @@ -23006,6 +23056,10 @@ export namespace container { * for how these labels are applied to clusters, node pools and nodes. */ resourceLabels?: {[key: string]: string}; + /** + * ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `imageType = "COS_CONTAINERD"` and `nodeVersion = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + */ sandboxConfig?: outputs.container.ClusterNodeConfigSandboxConfig; /** * The service account to be used by the Node VMs. @@ -23027,16 +23081,6 @@ export namespace container { * valid sources or targets for network firewalls. */ tags?: string[]; - /** - * A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - */ taints: outputs.container.ClusterNodeConfigTaint[]; /** * Metadata configuration to expose to workloads on the node pool. @@ -23182,7 +23226,7 @@ export namespace container { /** * How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. */ @@ -23213,18 +23257,7 @@ export namespace container { */ name: string; namePrefix: string; - /** - * Configuration for - * [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - */ networkConfig: outputs.container.ClusterNodePoolNetworkConfig; - /** - * Parameters used in creating the default node pool. - * Generally, this field should not be used at the same time as a - * `gcp.container.NodePool` or a `nodePool` block; this configuration - * manages the default node pool, which isn't recommended to be used. - * Structure is documented below. - */ nodeConfig: outputs.container.ClusterNodePoolNodeConfig; nodeCount: number; /** @@ -23301,9 +23334,6 @@ export namespace container { } export interface ClusterNodePoolNetworkConfig { - /** - * Whether to create a new range for pod IPs in this node pool. Defaults are provided for `podRange` and `podIpv4CidrBlock` if they are not specified. - */ createPodRange?: boolean; /** * Enables the private cluster feature, @@ -23312,19 +23342,13 @@ export namespace container { * endpoint via private networking. */ enablePrivateNodes: boolean; - /** - * The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - */ podIpv4CidrBlock: string; - /** - * The ID of the secondary range for pod IPs. If `createPodRange` is true, this ID is used for the new range. If `createPodRange` is false, uses an existing secondary range with this ID. - */ podRange?: string; } export interface ClusterNodePoolNodeConfig { /** - * The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + * The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption */ bootDiskKmsKey?: string; /** @@ -23350,10 +23374,6 @@ export namespace container { * Structure is documented below. */ gcfsConfig?: outputs.container.ClusterNodePoolNodeConfigGcfsConfig; - /** - * List of the type and count of accelerator cards attached to the instance. - * Structure documented below. - */ guestAccelerators: outputs.container.ClusterNodePoolNodeConfigGuestAccelerator[]; /** * Google Virtual NIC (gVNIC) is a virtual network interface. @@ -23399,13 +23419,6 @@ export namespace container { * [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). */ machineType: string; - /** - * The metadata key/value pairs assigned to instances in - * the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - * `true` by the API; if `metadata` is set but that default value is not - * included, the provider will attempt to unset the value. To avoid this, set the - * value in your config. - */ metadata: {[key: string]: string}; /** * Minimum CPU platform to be used by this instance. @@ -23440,6 +23453,10 @@ export namespace container { * for how these labels are applied to clusters, node pools and nodes. */ resourceLabels?: {[key: string]: string}; + /** + * ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `imageType = "COS_CONTAINERD"` and `nodeVersion = "1.12.7-gke.17"` or later to use it. + * Structure is documented below. + */ sandboxConfig?: outputs.container.ClusterNodePoolNodeConfigSandboxConfig; /** * The service account to be used by the Node VMs. @@ -23461,16 +23478,6 @@ export namespace container { * valid sources or targets for network firewalls. */ tags?: string[]; - /** - * A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - * to apply to nodes. GKE's API can only set this field on cluster creation. - * However, GKE will add taints to your nodes if you enable certain features such - * as GPUs. If this field is set, any diffs on this field will cause the provider to - * recreate the underlying resource. Taint values can be updated safely in - * Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - * this field to manage taints. If you do, `lifecycle.ignore_changes` is - * recommended. Structure is documented below. - */ taints: outputs.container.ClusterNodePoolNodeConfigTaint[]; /** * Metadata configuration to expose to workloads on the node pool. @@ -23616,7 +23623,7 @@ export namespace container { /** * How to expose the node metadata to the workload running on the node. * Accepted values are: - * * UNSPECIFIED: Not Set + * * MODE_UNSPECIFIED: Not Set * * GCE_METADATA: Expose all Compute Engine metadata to pods. * * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. */ @@ -23728,11 +23735,6 @@ export namespace container { * endpoint via private networking. */ enablePrivateNodes?: boolean; - /** - * Controls cluster master global - * access settings. If unset, the provider will no longer manage this field and will - * not modify the previously-set value. Structure is documented below. - */ masterGlobalAccessConfig: outputs.container.ClusterPrivateClusterConfigMasterGlobalAccessConfig; /** * The IP range in CIDR notation to use for @@ -27053,7 +27055,15 @@ export namespace dataloss { */ pubSub?: outputs.dataloss.PreventionJobTriggerInspectJobActionPubSub; /** - * Schedule for triggered jobs + * Publish findings of a DlpJob to Data Catalog. + */ + publishFindingsToCloudDataCatalog?: outputs.dataloss.PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog; + /** + * Publish the result summary of a DlpJob to the Cloud Security Command Center. + */ + publishSummaryToCscc?: outputs.dataloss.PreventionJobTriggerInspectJobActionPublishSummaryToCscc; + /** + * If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk * Structure is documented below. */ saveFindings?: outputs.dataloss.PreventionJobTriggerInspectJobActionSaveFindings; @@ -27066,6 +27076,12 @@ export namespace dataloss { topic: string; } + export interface PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog { + } + + export interface PreventionJobTriggerInspectJobActionPublishSummaryToCscc { + } + export interface PreventionJobTriggerInspectJobActionSaveFindings { /** * Information on where to store output @@ -27948,6 +27964,14 @@ export namespace dataproc { * If neither is specified, this defaults to the "default" network. */ network: string; + /** + * Node Group Affinity for sole-tenant clusters. + */ + nodeGroupAffinity: outputs.dataproc.ClusterClusterConfigGceClusterConfigNodeGroupAffinity; + /** + * Reservation Affinity for consuming zonal reservation. + */ + reservationAffinity: outputs.dataproc.ClusterClusterConfigGceClusterConfigReservationAffinity; /** * The service account to be used by the Node VMs. * If not specified, the "default" service account is used. @@ -27987,6 +28011,28 @@ export namespace dataproc { zone: string; } + export interface ClusterClusterConfigGceClusterConfigNodeGroupAffinity { + /** + * The URI of a sole-tenant node group resource that the cluster will be created on. + */ + nodeGroupUri: string; + } + + export interface ClusterClusterConfigGceClusterConfigReservationAffinity { + /** + * Corresponds to the type of reservation consumption. + */ + consumeReservationType?: string; + /** + * Corresponds to the label key of reservation resource. + */ + key?: string; + /** + * Corresponds to the label values of reservation resource. + */ + values?: string[]; + } + export interface ClusterClusterConfigGceClusterConfigShieldedInstanceConfig { /** * Defines whether instances have integrity monitoring enabled. @@ -28132,6 +28178,7 @@ export namespace dataproc { * * PREEMPTIBILITY_UNSPECIFIED * * NON_PREEMPTIBLE * * PREEMPTIBLE + * * SPOT */ preemptibility?: string; } @@ -30339,6 +30386,13 @@ export namespace datastream { * The prefix and name will be separated by an underscore. i.e. _. */ datasetIdPrefix?: string; + /** + * Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + * table. The BigQuery Service Account associated with your project requires access to this + * encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + * See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + */ + kmsKeyName?: string; /** * The geographic location where the dataset should reside. * See https://cloud.google.com/bigquery/docs/locations for supported locations. @@ -32198,8 +32252,17 @@ export namespace folder { } export interface IAMBindingCondition { + /** + * An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + */ description?: string; + /** + * Textual representation of an expression in Common Expression Language syntax. + */ expression: string; + /** + * A title for the expression, i.e. a short string describing its purpose. + */ title: string; } @@ -33005,6 +33068,56 @@ export namespace healthcare { } export namespace iam { + export interface AccessBoundaryPolicyRule { + /** + * An access boundary rule in an IAM policy. + * Structure is documented below. + */ + accessBoundaryRule?: outputs.iam.AccessBoundaryPolicyRuleAccessBoundaryRule; + /** + * The description of the rule. + */ + description?: string; + } + + export interface AccessBoundaryPolicyRuleAccessBoundaryRule { + /** + * The availability condition further constrains the access allowed by the access boundary rule. + * Structure is documented below. + */ + availabilityCondition?: outputs.iam.AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition; + /** + * A list of permissions that may be allowed for use on the specified resource. + */ + availablePermissions?: string[]; + /** + * The full resource name of a Google Cloud resource entity. + */ + availableResource?: string; + } + + export interface AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition { + /** + * Description of the expression. This is a longer text which describes the expression, + * e.g. when hovered over it in a UI. + */ + description?: string; + /** + * Textual representation of an expression in Common Expression Language syntax. + */ + expression: string; + /** + * String indicating the location of the expression for error reporting, + * e.g. a file name and a position in the file. + */ + location?: string; + /** + * Title for the expression, i.e. a short string describing its purpose. + * This can be used e.g. in UIs which allow to enter the expression. + */ + title?: string; + } + export interface DenyPolicyRule { /** * A deny rule in an IAM deny policy. @@ -37174,8 +37287,17 @@ export namespace organizations { } export interface IAMBindingCondition { + /** + * An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + */ description?: string; + /** + * Textual representation of an expression in Common Expression Language syntax. + */ expression: string; + /** + * A title for the expression, i.e. a short string describing its purpose. + */ title: string; } @@ -37196,12 +37318,7 @@ export namespace organizations { export interface IamAuditConfigAuditLogConfig { /** - * Identities that do not cause logging for this type of permission. - * Each entry can have one of the following values: - * * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - * * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + * Identities that do not cause logging for this type of permission. The format is the same as that for `members`. */ exemptedMembers?: string[]; /** @@ -39834,7 +39951,7 @@ export namespace redis { * - ONE_HOUR: Snapshot every 1 hour. * - SIX_HOURS: Snapshot every 6 hours. * - TWELVE_HOURS: Snapshot every 12 hours. - * - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + * - TWENTY_FOUR_HOURS: Snapshot every 24 hours. * Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. */ rdbSnapshotPeriod?: string; @@ -42029,3 +42146,40 @@ export namespace vpcaccess { } } + +export namespace workstations { + export interface WorkstationClusterCondition { + /** + * The status code, which should be an enum value of google.rpc.Code. + */ + code: number; + /** + * A list of messages that carry the error details. + */ + details: {[key: string]: any}[]; + /** + * Human readable message indicating details about the current status. + */ + message: string; + } + + export interface WorkstationClusterPrivateClusterConfig { + /** + * Hostname for the workstation cluster. + * This field will be populated only when private endpoint is enabled. + * To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + */ + clusterHostname: string; + /** + * Whether Workstations endpoint is private. + */ + enablePrivateEndpoint: boolean; + /** + * Service attachment URI for the workstation cluster. + * The service attachemnt is created when private endpoint is enabled. + * To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + */ + serviceAttachmentUri: string; + } + +} diff --git a/sdk/nodejs/workstations/index.ts b/sdk/nodejs/workstations/index.ts new file mode 100644 index 0000000000..0ad257c54b --- /dev/null +++ b/sdk/nodejs/workstations/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 { WorkstationClusterArgs, WorkstationClusterState } from "./workstationCluster"; +export type WorkstationCluster = import("./workstationCluster").WorkstationCluster; +export const WorkstationCluster: typeof import("./workstationCluster").WorkstationCluster = null as any; +utilities.lazyLoad(exports, ["WorkstationCluster"], () => require("./workstationCluster")); + + +const _module = { + version: utilities.getVersion(), + construct: (name: string, type: string, urn: string): pulumi.Resource => { + switch (type) { + case "gcp:workstations/workstationCluster:WorkstationCluster": + return new WorkstationCluster(name, undefined, { urn }) + default: + throw new Error(`unknown resource type ${type}`); + } + }, +}; +pulumi.runtime.registerResourceModule("gcp", "workstations/workstationCluster", _module) diff --git a/sdk/nodejs/workstations/workstationCluster.ts b/sdk/nodejs/workstations/workstationCluster.ts new file mode 100644 index 0000000000..bc7145a449 --- /dev/null +++ b/sdk/nodejs/workstations/workstationCluster.ts @@ -0,0 +1,372 @@ +// *** WARNING: this file 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 + * ### Workstation Cluster Basic + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const defaultNetwork = new gcp.compute.Network("defaultNetwork", {autoCreateSubnetworks: false}, { + * provider: google_beta, + * }); + * const defaultSubnetwork = new gcp.compute.Subnetwork("defaultSubnetwork", { + * ipCidrRange: "10.0.0.0/24", + * region: "us-central1", + * network: defaultNetwork.name, + * }, { + * provider: google_beta, + * }); + * const defaultWorkstationCluster = new gcp.workstations.WorkstationCluster("defaultWorkstationCluster", { + * workstationClusterId: "workstation-cluster", + * network: defaultNetwork.id, + * subnetwork: defaultSubnetwork.id, + * location: "us-central1", + * labels: { + * label: "key", + * }, + * annotations: { + * "label-one": "value-one", + * }, + * }, { + * provider: google_beta, + * }); + * const project = gcp.organizations.getProject({}); + * ``` + * ### Workstation Cluster Private + * + * ```typescript + * import * as pulumi from "@pulumi/pulumi"; + * import * as gcp from "@pulumi/gcp"; + * + * const defaultNetwork = new gcp.compute.Network("defaultNetwork", {autoCreateSubnetworks: false}, { + * provider: google_beta, + * }); + * const defaultSubnetwork = new gcp.compute.Subnetwork("defaultSubnetwork", { + * ipCidrRange: "10.0.0.0/24", + * region: "us-central1", + * network: defaultNetwork.name, + * }, { + * provider: google_beta, + * }); + * const defaultWorkstationCluster = new gcp.workstations.WorkstationCluster("defaultWorkstationCluster", { + * workstationClusterId: "workstation-cluster-private", + * network: defaultNetwork.id, + * subnetwork: defaultSubnetwork.id, + * location: "us-central1", + * privateClusterConfig: { + * enablePrivateEndpoint: true, + * }, + * labels: { + * label: "key", + * }, + * annotations: { + * "label-one": "value-one", + * }, + * }, { + * provider: google_beta, + * }); + * const project = gcp.organizations.getProject({}); + * ``` + * + * ## Import + * + * WorkstationCluster can be imported using any of these accepted formats + * + * ```sh + * $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{project}}/{{location}}/{{workstation_cluster_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{location}}/{{workstation_cluster_id}} + * ``` + * + * ```sh + * $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{workstation_cluster_id}} + * ``` + */ +export class WorkstationCluster extends pulumi.CustomResource { + /** + * Get an existing WorkstationCluster 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?: WorkstationClusterState, opts?: pulumi.CustomResourceOptions): WorkstationCluster { + return new WorkstationCluster(name, state, { ...opts, id: id }); + } + + /** @internal */ + public static readonly __pulumiType = 'gcp:workstations/workstationCluster:WorkstationCluster'; + + /** + * Returns true if the given object is an instance of WorkstationCluster. 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 WorkstationCluster { + if (obj === undefined || obj === null) { + return false; + } + return obj['__pulumiType'] === WorkstationCluster.__pulumiType; + } + + /** + * Client-specified annotations. This is distinct from labels. + */ + public readonly annotations!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * Status conditions describing the current resource state. + * Structure is documented below. + */ + public /*out*/ readonly conditions!: pulumi.Output; + /** + * Time the Instance was created in UTC. + */ + public /*out*/ readonly createTime!: pulumi.Output; + /** + * Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + * Details can be found in the conditions field. + */ + public /*out*/ readonly degraded!: pulumi.Output; + /** + * Human-readable name for this resource. + */ + public readonly displayName!: pulumi.Output; + /** + * Checksum computed by the server. + * May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + */ + public /*out*/ readonly etag!: pulumi.Output; + /** + * Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + */ + public readonly labels!: pulumi.Output<{[key: string]: string} | undefined>; + /** + * The location where the workstation cluster should reside. + */ + public readonly location!: pulumi.Output; + /** + * The name of the cluster resource. + */ + public /*out*/ readonly name!: pulumi.Output; + /** + * The relative resource name of the VPC network on which the instance can be accessed. + * It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + */ + public readonly network!: pulumi.Output; + /** + * Configuration for private cluster. + * Structure is documented below. + */ + public readonly privateClusterConfig!: 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; + /** + * Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + * Must be part of the subnetwork specified for this cluster. + */ + public readonly subnetwork!: pulumi.Output; + /** + * The system-generated UID of the resource. + */ + public /*out*/ readonly uid!: pulumi.Output; + /** + * The ID of the workstation cluster. + */ + public readonly workstationClusterId!: pulumi.Output; + + /** + * Create a WorkstationCluster 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: WorkstationClusterArgs, opts?: pulumi.CustomResourceOptions) + constructor(name: string, argsOrState?: WorkstationClusterArgs | WorkstationClusterState, opts?: pulumi.CustomResourceOptions) { + let resourceInputs: pulumi.Inputs = {}; + opts = opts || {}; + if (opts.id) { + const state = argsOrState as WorkstationClusterState | undefined; + resourceInputs["annotations"] = state ? state.annotations : undefined; + resourceInputs["conditions"] = state ? state.conditions : undefined; + resourceInputs["createTime"] = state ? state.createTime : undefined; + resourceInputs["degraded"] = state ? state.degraded : undefined; + resourceInputs["displayName"] = state ? state.displayName : undefined; + resourceInputs["etag"] = state ? state.etag : undefined; + resourceInputs["labels"] = state ? state.labels : undefined; + resourceInputs["location"] = state ? state.location : undefined; + resourceInputs["name"] = state ? state.name : undefined; + resourceInputs["network"] = state ? state.network : undefined; + resourceInputs["privateClusterConfig"] = state ? state.privateClusterConfig : undefined; + resourceInputs["project"] = state ? state.project : undefined; + resourceInputs["subnetwork"] = state ? state.subnetwork : undefined; + resourceInputs["uid"] = state ? state.uid : undefined; + resourceInputs["workstationClusterId"] = state ? state.workstationClusterId : undefined; + } else { + const args = argsOrState as WorkstationClusterArgs | undefined; + if ((!args || args.network === undefined) && !opts.urn) { + throw new Error("Missing required property 'network'"); + } + if ((!args || args.subnetwork === undefined) && !opts.urn) { + throw new Error("Missing required property 'subnetwork'"); + } + if ((!args || args.workstationClusterId === undefined) && !opts.urn) { + throw new Error("Missing required property 'workstationClusterId'"); + } + resourceInputs["annotations"] = args ? args.annotations : undefined; + resourceInputs["displayName"] = args ? args.displayName : undefined; + resourceInputs["labels"] = args ? args.labels : undefined; + resourceInputs["location"] = args ? args.location : undefined; + resourceInputs["network"] = args ? args.network : undefined; + resourceInputs["privateClusterConfig"] = args ? args.privateClusterConfig : undefined; + resourceInputs["project"] = args ? args.project : undefined; + resourceInputs["subnetwork"] = args ? args.subnetwork : undefined; + resourceInputs["workstationClusterId"] = args ? args.workstationClusterId : undefined; + resourceInputs["conditions"] = undefined /*out*/; + resourceInputs["createTime"] = undefined /*out*/; + resourceInputs["degraded"] = undefined /*out*/; + resourceInputs["etag"] = undefined /*out*/; + resourceInputs["name"] = undefined /*out*/; + resourceInputs["uid"] = undefined /*out*/; + } + opts = pulumi.mergeOptions(utilities.resourceOptsDefaults(), opts); + super(WorkstationCluster.__pulumiType, name, resourceInputs, opts); + } +} + +/** + * Input properties used for looking up and filtering WorkstationCluster resources. + */ +export interface WorkstationClusterState { + /** + * Client-specified annotations. This is distinct from labels. + */ + annotations?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Status conditions describing the current resource state. + * Structure is documented below. + */ + conditions?: pulumi.Input[]>; + /** + * Time the Instance was created in UTC. + */ + createTime?: pulumi.Input; + /** + * Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + * Details can be found in the conditions field. + */ + degraded?: pulumi.Input; + /** + * Human-readable name for this resource. + */ + displayName?: pulumi.Input; + /** + * Checksum computed by the server. + * May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + */ + etag?: pulumi.Input; + /** + * Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The location where the workstation cluster should reside. + */ + location?: pulumi.Input; + /** + * The name of the cluster resource. + */ + name?: pulumi.Input; + /** + * The relative resource name of the VPC network on which the instance can be accessed. + * It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + */ + network?: pulumi.Input; + /** + * Configuration for private cluster. + * Structure is documented below. + */ + privateClusterConfig?: 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; + /** + * Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + * Must be part of the subnetwork specified for this cluster. + */ + subnetwork?: pulumi.Input; + /** + * The system-generated UID of the resource. + */ + uid?: pulumi.Input; + /** + * The ID of the workstation cluster. + */ + workstationClusterId?: pulumi.Input; +} + +/** + * The set of arguments for constructing a WorkstationCluster resource. + */ +export interface WorkstationClusterArgs { + /** + * Client-specified annotations. This is distinct from labels. + */ + annotations?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * Human-readable name for this resource. + */ + displayName?: pulumi.Input; + /** + * Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + */ + labels?: pulumi.Input<{[key: string]: pulumi.Input}>; + /** + * The location where the workstation cluster should reside. + */ + location?: pulumi.Input; + /** + * The relative resource name of the VPC network on which the instance can be accessed. + * It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + */ + network: pulumi.Input; + /** + * Configuration for private cluster. + * Structure is documented below. + */ + privateClusterConfig?: 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; + /** + * Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + * Must be part of the subnetwork specified for this cluster. + */ + subnetwork: pulumi.Input; + /** + * The ID of the workstation cluster. + */ + workstationClusterId: pulumi.Input; +} diff --git a/sdk/python/pulumi_gcp/__init__.py b/sdk/python/pulumi_gcp/__init__.py index 0c6b6f36c9..746c81dd7f 100644 --- a/sdk/python/pulumi_gcp/__init__.py +++ b/sdk/python/pulumi_gcp/__init__.py @@ -50,6 +50,8 @@ cloudasset = __cloudasset import pulumi_gcp.cloudbuild as __cloudbuild cloudbuild = __cloudbuild + import pulumi_gcp.cloudbuildv2 as __cloudbuildv2 + cloudbuildv2 = __cloudbuildv2 import pulumi_gcp.clouddeploy as __clouddeploy clouddeploy = __clouddeploy import pulumi_gcp.cloudfunctions as __cloudfunctions @@ -202,6 +204,8 @@ vpcaccess = __vpcaccess import pulumi_gcp.workflows as __workflows workflows = __workflows + import pulumi_gcp.workstations as __workstations + workstations = __workstations else: accessapproval = _utilities.lazy_import('pulumi_gcp.accessapproval') accesscontextmanager = _utilities.lazy_import('pulumi_gcp.accesscontextmanager') @@ -223,6 +227,7 @@ certificatemanager = _utilities.lazy_import('pulumi_gcp.certificatemanager') cloudasset = _utilities.lazy_import('pulumi_gcp.cloudasset') cloudbuild = _utilities.lazy_import('pulumi_gcp.cloudbuild') + cloudbuildv2 = _utilities.lazy_import('pulumi_gcp.cloudbuildv2') clouddeploy = _utilities.lazy_import('pulumi_gcp.clouddeploy') cloudfunctions = _utilities.lazy_import('pulumi_gcp.cloudfunctions') cloudfunctionsv2 = _utilities.lazy_import('pulumi_gcp.cloudfunctionsv2') @@ -299,6 +304,7 @@ vertex = _utilities.lazy_import('pulumi_gcp.vertex') vpcaccess = _utilities.lazy_import('pulumi_gcp.vpcaccess') workflows = _utilities.lazy_import('pulumi_gcp.workflows') + workstations = _utilities.lazy_import('pulumi_gcp.workstations') _utilities.register( resource_modules=""" @@ -1311,6 +1317,22 @@ "gcp:cloudbuild/workerPool:WorkerPool": "WorkerPool" } }, + { + "pkg": "gcp", + "mod": "cloudbuildv2/connection", + "fqn": "pulumi_gcp.cloudbuildv2", + "classes": { + "gcp:cloudbuildv2/connection:Connection": "Connection" + } + }, + { + "pkg": "gcp", + "mod": "cloudbuildv2/repository", + "fqn": "pulumi_gcp.cloudbuildv2", + "classes": { + "gcp:cloudbuildv2/repository:Repository": "Repository" + } + }, { "pkg": "gcp", "mod": "clouddeploy/deliveryPipeline", @@ -3831,6 +3853,14 @@ "gcp:healthcare/hl7StoreIamPolicy:Hl7StoreIamPolicy": "Hl7StoreIamPolicy" } }, + { + "pkg": "gcp", + "mod": "iam/accessBoundaryPolicy", + "fqn": "pulumi_gcp.iam", + "classes": { + "gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy": "AccessBoundaryPolicy" + } + }, { "pkg": "gcp", "mod": "iam/denyPolicy", @@ -5495,6 +5525,14 @@ "gcp:storage/transferJob:TransferJob": "TransferJob" } }, + { + "pkg": "gcp", + "mod": "tags/locationTagBinding", + "fqn": "pulumi_gcp.tags", + "classes": { + "gcp:tags/locationTagBinding:LocationTagBinding": "LocationTagBinding" + } + }, { "pkg": "gcp", "mod": "tags/tagBinding", @@ -5702,6 +5740,14 @@ "classes": { "gcp:workflows/workflow:Workflow": "Workflow" } + }, + { + "pkg": "gcp", + "mod": "workstations/workstationCluster", + "fqn": "pulumi_gcp.workstations", + "classes": { + "gcp:workstations/workstationCluster:WorkstationCluster": "WorkstationCluster" + } } ] """, diff --git a/sdk/python/pulumi_gcp/accesscontextmanager/access_level_condition.py b/sdk/python/pulumi_gcp/accesscontextmanager/access_level_condition.py index 12e2cabb05..d76a4f2370 100644 --- a/sdk/python/pulumi_gcp/accesscontextmanager/access_level_condition.py +++ b/sdk/python/pulumi_gcp/accesscontextmanager/access_level_condition.py @@ -392,56 +392,6 @@ def __init__(__self__, `billing_project` you defined. ## Example Usage - ### Access Context Manager Access Level Condition Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - access_policy = gcp.accesscontextmanager.AccessPolicy("access-policy", - parent="organizations/123456789", - title="my policy") - access_level_service_account = gcp.accesscontextmanager.AccessLevel("access-level-service-account", - parent=access_policy.name.apply(lambda name: f"accessPolicies/{name}"), - title="tf_test_chromeos_no_lock", - basic=gcp.accesscontextmanager.AccessLevelBasicArgs( - conditions=[gcp.accesscontextmanager.AccessLevelBasicConditionArgs( - device_policy=gcp.accesscontextmanager.AccessLevelBasicConditionDevicePolicyArgs( - require_screen_lock=True, - os_constraints=[gcp.accesscontextmanager.AccessLevelBasicConditionDevicePolicyOsConstraintArgs( - os_type="DESKTOP_CHROME_OS", - )], - ), - regions=[ - "CH", - "IT", - "US", - ], - )], - )) - created_later = gcp.service_account.Account("created-later", account_id="tf-test") - access_level_conditions = gcp.accesscontextmanager.AccessLevelCondition("access-level-conditions", - access_level=access_level_service_account.name, - ip_subnetworks=["192.0.4.0/24"], - members=[ - "user:test@google.com", - "user:test2@google.com", - created_later.email.apply(lambda email: f"serviceAccount:{email}"), - ], - negate=False, - device_policy=gcp.accesscontextmanager.AccessLevelConditionDevicePolicyArgs( - require_screen_lock=False, - require_admin_approval=False, - require_corp_owned=True, - os_constraints=[gcp.accesscontextmanager.AccessLevelConditionDevicePolicyOsConstraintArgs( - os_type="DESKTOP_CHROME_OS", - )], - ), - regions=[ - "IT", - "US", - ]) - ``` ## Import @@ -512,56 +462,6 @@ def __init__(__self__, `billing_project` you defined. ## Example Usage - ### Access Context Manager Access Level Condition Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - access_policy = gcp.accesscontextmanager.AccessPolicy("access-policy", - parent="organizations/123456789", - title="my policy") - access_level_service_account = gcp.accesscontextmanager.AccessLevel("access-level-service-account", - parent=access_policy.name.apply(lambda name: f"accessPolicies/{name}"), - title="tf_test_chromeos_no_lock", - basic=gcp.accesscontextmanager.AccessLevelBasicArgs( - conditions=[gcp.accesscontextmanager.AccessLevelBasicConditionArgs( - device_policy=gcp.accesscontextmanager.AccessLevelBasicConditionDevicePolicyArgs( - require_screen_lock=True, - os_constraints=[gcp.accesscontextmanager.AccessLevelBasicConditionDevicePolicyOsConstraintArgs( - os_type="DESKTOP_CHROME_OS", - )], - ), - regions=[ - "CH", - "IT", - "US", - ], - )], - )) - created_later = gcp.service_account.Account("created-later", account_id="tf-test") - access_level_conditions = gcp.accesscontextmanager.AccessLevelCondition("access-level-conditions", - access_level=access_level_service_account.name, - ip_subnetworks=["192.0.4.0/24"], - members=[ - "user:test@google.com", - "user:test2@google.com", - created_later.email.apply(lambda email: f"serviceAccount:{email}"), - ], - negate=False, - device_policy=gcp.accesscontextmanager.AccessLevelConditionDevicePolicyArgs( - require_screen_lock=False, - require_admin_approval=False, - require_corp_owned=True, - os_constraints=[gcp.accesscontextmanager.AccessLevelConditionDevicePolicyOsConstraintArgs( - os_type="DESKTOP_CHROME_OS", - )], - ), - regions=[ - "IT", - "US", - ]) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/apigateway/api.py b/sdk/python/pulumi_gcp/apigateway/api.py index 4c2f59499f..d58ed1a0c1 100644 --- a/sdk/python/pulumi_gcp/apigateway/api.py +++ b/sdk/python/pulumi_gcp/apigateway/api.py @@ -238,14 +238,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - A consumable API that can be used by multiple Gateways. - - To get more information about Api, see: - - * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis) - * How-to Guides - * [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart) - ## Example Usage ### Apigateway Api Basic @@ -290,14 +282,6 @@ def __init__(__self__, args: ApiArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A consumable API that can be used by multiple Gateways. - - To get more information about Api, see: - - * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis) - * How-to Guides - * [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart) - ## Example Usage ### Apigateway Api Basic diff --git a/sdk/python/pulumi_gcp/apigateway/api_config.py b/sdk/python/pulumi_gcp/apigateway/api_config.py index e5429d9684..1f6d841838 100644 --- a/sdk/python/pulumi_gcp/apigateway/api_config.py +++ b/sdk/python/pulumi_gcp/apigateway/api_config.py @@ -429,14 +429,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - An API Configuration is an association of an API Controller Config and a Gateway Config - - To get more information about ApiConfig, see: - - * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis.configs) - * How-to Guides - * [Official Documentation](https://cloud.google.com/api-gateway/docs/creating-api-config) - ## Example Usage ### Apigateway Api Config Basic @@ -503,14 +495,6 @@ def __init__(__self__, args: ApiConfigArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - An API Configuration is an association of an API Controller Config and a Gateway Config - - To get more information about ApiConfig, see: - - * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis.configs) - * How-to Guides - * [Official Documentation](https://cloud.google.com/api-gateway/docs/creating-api-config) - ## Example Usage ### Apigateway Api Config Basic diff --git a/sdk/python/pulumi_gcp/apigateway/api_config_iam_binding.py b/sdk/python/pulumi_gcp/apigateway/api_config_iam_binding.py index 8d2522236a..aef46323f1 100644 --- a/sdk/python/pulumi_gcp/apigateway/api_config_iam_binding.py +++ b/sdk/python/pulumi_gcp/apigateway/api_config_iam_binding.py @@ -238,61 +238,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - - * `apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - * `apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - * `apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - - > **Note:** `apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `apigateway.ApiConfigIamBinding` and `apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.ApiConfigIamPolicy("policy", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.ApiConfigIamBinding("binding", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.ApiConfigIamMember("member", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -334,61 +279,6 @@ def __init__(__self__, args: ApiConfigIamBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - - * `apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - * `apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - * `apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - - > **Note:** `apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `apigateway.ApiConfigIamBinding` and `apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.ApiConfigIamPolicy("policy", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.ApiConfigIamBinding("binding", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.ApiConfigIamMember("member", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/apigateway/api_config_iam_member.py b/sdk/python/pulumi_gcp/apigateway/api_config_iam_member.py index ae276149c0..6256a44322 100644 --- a/sdk/python/pulumi_gcp/apigateway/api_config_iam_member.py +++ b/sdk/python/pulumi_gcp/apigateway/api_config_iam_member.py @@ -238,61 +238,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - - * `apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - * `apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - * `apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - - > **Note:** `apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `apigateway.ApiConfigIamBinding` and `apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.ApiConfigIamPolicy("policy", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.ApiConfigIamBinding("binding", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.ApiConfigIamMember("member", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -334,61 +279,6 @@ def __init__(__self__, args: ApiConfigIamMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - - * `apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - * `apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - * `apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - - > **Note:** `apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `apigateway.ApiConfigIamBinding` and `apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.ApiConfigIamPolicy("policy", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.ApiConfigIamBinding("binding", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.ApiConfigIamMember("member", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/apigateway/api_config_iam_policy.py b/sdk/python/pulumi_gcp/apigateway/api_config_iam_policy.py index 1706274625..241e230b98 100644 --- a/sdk/python/pulumi_gcp/apigateway/api_config_iam_policy.py +++ b/sdk/python/pulumi_gcp/apigateway/api_config_iam_policy.py @@ -183,61 +183,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - - * `apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - * `apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - * `apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - - > **Note:** `apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `apigateway.ApiConfigIamBinding` and `apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.ApiConfigIamPolicy("policy", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.ApiConfigIamBinding("binding", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.ApiConfigIamMember("member", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -278,61 +223,6 @@ def __init__(__self__, args: ApiConfigIamPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for API Gateway ApiConfig. Each of these resources serves a different use case: - - * `apigateway.ApiConfigIamPolicy`: Authoritative. Sets the IAM policy for the apiconfig and replaces any existing policy already attached. - * `apigateway.ApiConfigIamBinding`: 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 apiconfig are preserved. - * `apigateway.ApiConfigIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the apiconfig are preserved. - - > **Note:** `apigateway.ApiConfigIamPolicy` **cannot** be used in conjunction with `apigateway.ApiConfigIamBinding` and `apigateway.ApiConfigIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.ApiConfigIamBinding` resources **can be** used in conjunction with `apigateway.ApiConfigIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.ApiConfigIamPolicy("policy", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.ApiConfigIamBinding("binding", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_config\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.ApiConfigIamMember("member", - api=google_api_gateway_api_config["api_cfg"]["api"], - api_config=google_api_gateway_api_config["api_cfg"]["api_config_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}}/configs/{{api_config}} * {{project}}/{{api}}/{{api_config}} * {{api}}/{{api_config}} * {{api_config}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway apiconfig IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/apigateway/api_iam_binding.py b/sdk/python/pulumi_gcp/apigateway/api_iam_binding.py index f7cf597991..22cbac584d 100644 --- a/sdk/python/pulumi_gcp/apigateway/api_iam_binding.py +++ b/sdk/python/pulumi_gcp/apigateway/api_iam_binding.py @@ -202,61 +202,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - - * `apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - * `apigateway.ApiIamBinding`: 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 api are preserved. - * `apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - - > **Note:** `apigateway.ApiIamPolicy` **cannot** be used in conjunction with `apigateway.ApiIamBinding` and `apigateway.ApiIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.ApiIamBinding` resources **can be** used in conjunction with `apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_api\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.ApiIamPolicy("policy", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.ApiIamBinding("binding", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.ApiIamMember("member", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -296,61 +241,6 @@ def __init__(__self__, args: ApiIamBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - - * `apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - * `apigateway.ApiIamBinding`: 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 api are preserved. - * `apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - - > **Note:** `apigateway.ApiIamPolicy` **cannot** be used in conjunction with `apigateway.ApiIamBinding` and `apigateway.ApiIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.ApiIamBinding` resources **can be** used in conjunction with `apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_api\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.ApiIamPolicy("policy", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.ApiIamBinding("binding", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.ApiIamMember("member", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/apigateway/api_iam_member.py b/sdk/python/pulumi_gcp/apigateway/api_iam_member.py index 29bb120092..361dc996cd 100644 --- a/sdk/python/pulumi_gcp/apigateway/api_iam_member.py +++ b/sdk/python/pulumi_gcp/apigateway/api_iam_member.py @@ -202,61 +202,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - - * `apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - * `apigateway.ApiIamBinding`: 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 api are preserved. - * `apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - - > **Note:** `apigateway.ApiIamPolicy` **cannot** be used in conjunction with `apigateway.ApiIamBinding` and `apigateway.ApiIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.ApiIamBinding` resources **can be** used in conjunction with `apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_api\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.ApiIamPolicy("policy", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.ApiIamBinding("binding", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.ApiIamMember("member", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -296,61 +241,6 @@ def __init__(__self__, args: ApiIamMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - - * `apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - * `apigateway.ApiIamBinding`: 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 api are preserved. - * `apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - - > **Note:** `apigateway.ApiIamPolicy` **cannot** be used in conjunction with `apigateway.ApiIamBinding` and `apigateway.ApiIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.ApiIamBinding` resources **can be** used in conjunction with `apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_api\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.ApiIamPolicy("policy", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.ApiIamBinding("binding", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.ApiIamMember("member", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/apigateway/api_iam_policy.py b/sdk/python/pulumi_gcp/apigateway/api_iam_policy.py index 77e54e65ca..a4368b8db0 100644 --- a/sdk/python/pulumi_gcp/apigateway/api_iam_policy.py +++ b/sdk/python/pulumi_gcp/apigateway/api_iam_policy.py @@ -147,61 +147,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - - * `apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - * `apigateway.ApiIamBinding`: 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 api are preserved. - * `apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - - > **Note:** `apigateway.ApiIamPolicy` **cannot** be used in conjunction with `apigateway.ApiIamBinding` and `apigateway.ApiIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.ApiIamBinding` resources **can be** used in conjunction with `apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_api\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.ApiIamPolicy("policy", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.ApiIamBinding("binding", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.ApiIamMember("member", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -240,61 +185,6 @@ def __init__(__self__, args: ApiIamPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for API Gateway Api. Each of these resources serves a different use case: - - * `apigateway.ApiIamPolicy`: Authoritative. Sets the IAM policy for the api and replaces any existing policy already attached. - * `apigateway.ApiIamBinding`: 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 api are preserved. - * `apigateway.ApiIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the api are preserved. - - > **Note:** `apigateway.ApiIamPolicy` **cannot** be used in conjunction with `apigateway.ApiIamBinding` and `apigateway.ApiIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.ApiIamBinding` resources **can be** used in conjunction with `apigateway.ApiIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_api\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.ApiIamPolicy("policy", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.ApiIamBinding("binding", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_api\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.ApiIamMember("member", - project=google_api_gateway_api["api"]["project"], - api=google_api_gateway_api["api"]["api_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/global/apis/{{api}} * {{project}}/{{api}} * {{api}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway api IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/apigateway/gateway.py b/sdk/python/pulumi_gcp/apigateway/gateway.py index 6c1f0ce41b..4017bfadd8 100644 --- a/sdk/python/pulumi_gcp/apigateway/gateway.py +++ b/sdk/python/pulumi_gcp/apigateway/gateway.py @@ -270,14 +270,6 @@ def __init__(__self__, region: Optional[pulumi.Input[str]] = None, __props__=None): """ - A consumable API that can be used by multiple Gateways. - - To get more information about Gateway, see: - - * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis) - * How-to Guides - * [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart) - ## Example Usage ### Apigateway Gateway Basic @@ -342,14 +334,6 @@ def __init__(__self__, args: GatewayArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A consumable API that can be used by multiple Gateways. - - To get more information about Gateway, see: - - * [API documentation](https://cloud.google.com/api-gateway/docs/reference/rest/v1beta/projects.locations.apis) - * How-to Guides - * [Official Documentation](https://cloud.google.com/api-gateway/docs/quickstart) - ## Example Usage ### Apigateway Gateway Basic diff --git a/sdk/python/pulumi_gcp/apigateway/gateway_iam_binding.py b/sdk/python/pulumi_gcp/apigateway/gateway_iam_binding.py index e4803e1878..c0ca7390a0 100644 --- a/sdk/python/pulumi_gcp/apigateway/gateway_iam_binding.py +++ b/sdk/python/pulumi_gcp/apigateway/gateway_iam_binding.py @@ -247,64 +247,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - - * `apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - * `apigateway.GatewayIamBinding`: 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 gateway are preserved. - * `apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - - > **Note:** `apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `apigateway.GatewayIamBinding` and `apigateway.GatewayIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.GatewayIamBinding` resources **can be** used in conjunction with `apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_gateway\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.GatewayIamPolicy("policy", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_gateway\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.GatewayIamBinding("binding", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_gateway\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.GatewayIamMember("member", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -348,64 +290,6 @@ def __init__(__self__, args: GatewayIamBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - - * `apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - * `apigateway.GatewayIamBinding`: 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 gateway are preserved. - * `apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - - > **Note:** `apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `apigateway.GatewayIamBinding` and `apigateway.GatewayIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.GatewayIamBinding` resources **can be** used in conjunction with `apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_gateway\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.GatewayIamPolicy("policy", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_gateway\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.GatewayIamBinding("binding", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_gateway\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.GatewayIamMember("member", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/apigateway/gateway_iam_member.py b/sdk/python/pulumi_gcp/apigateway/gateway_iam_member.py index 40f6274c18..c23fd57d6f 100644 --- a/sdk/python/pulumi_gcp/apigateway/gateway_iam_member.py +++ b/sdk/python/pulumi_gcp/apigateway/gateway_iam_member.py @@ -247,64 +247,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - - * `apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - * `apigateway.GatewayIamBinding`: 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 gateway are preserved. - * `apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - - > **Note:** `apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `apigateway.GatewayIamBinding` and `apigateway.GatewayIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.GatewayIamBinding` resources **can be** used in conjunction with `apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_gateway\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.GatewayIamPolicy("policy", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_gateway\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.GatewayIamBinding("binding", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_gateway\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.GatewayIamMember("member", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -348,64 +290,6 @@ def __init__(__self__, args: GatewayIamMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - - * `apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - * `apigateway.GatewayIamBinding`: 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 gateway are preserved. - * `apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - - > **Note:** `apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `apigateway.GatewayIamBinding` and `apigateway.GatewayIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.GatewayIamBinding` resources **can be** used in conjunction with `apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_gateway\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.GatewayIamPolicy("policy", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_gateway\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.GatewayIamBinding("binding", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_gateway\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.GatewayIamMember("member", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/apigateway/gateway_iam_policy.py b/sdk/python/pulumi_gcp/apigateway/gateway_iam_policy.py index 1e15cec49b..f9f3a24e8c 100644 --- a/sdk/python/pulumi_gcp/apigateway/gateway_iam_policy.py +++ b/sdk/python/pulumi_gcp/apigateway/gateway_iam_policy.py @@ -192,64 +192,6 @@ def __init__(__self__, region: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - - * `apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - * `apigateway.GatewayIamBinding`: 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 gateway are preserved. - * `apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - - > **Note:** `apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `apigateway.GatewayIamBinding` and `apigateway.GatewayIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.GatewayIamBinding` resources **can be** used in conjunction with `apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_gateway\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.GatewayIamPolicy("policy", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_gateway\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.GatewayIamBinding("binding", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_gateway\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.GatewayIamMember("member", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -292,64 +234,6 @@ def __init__(__self__, args: GatewayIamPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for API Gateway Gateway. Each of these resources serves a different use case: - - * `apigateway.GatewayIamPolicy`: Authoritative. Sets the IAM policy for the gateway and replaces any existing policy already attached. - * `apigateway.GatewayIamBinding`: 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 gateway are preserved. - * `apigateway.GatewayIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the gateway are preserved. - - > **Note:** `apigateway.GatewayIamPolicy` **cannot** be used in conjunction with `apigateway.GatewayIamBinding` and `apigateway.GatewayIamMember` or they will fight over what your policy should be. - - > **Note:** `apigateway.GatewayIamBinding` resources **can be** used in conjunction with `apigateway.GatewayIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_api\\_gateway\\_gateway\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.apigateway.GatewayIamPolicy("policy", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_gateway\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.apigateway.GatewayIamBinding("binding", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - role="roles/apigateway.viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_api\\_gateway\\_gateway\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.apigateway.GatewayIamMember("member", - project=google_api_gateway_gateway["api_gw"]["project"], - region=google_api_gateway_gateway["api_gw"]["region"], - gateway=google_api_gateway_gateway["api_gw"]["gateway_id"], - role="roles/apigateway.viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/gateways/{{gateway}} * {{project}}/{{region}}/{{gateway}} * {{region}}/{{gateway}} * {{gateway}} Any variables not passed in the import command will be taken from the provider configuration. API Gateway gateway IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/apigee/env_group.py b/sdk/python/pulumi_gcp/apigee/env_group.py index e7b36726be..0594abe654 100644 --- a/sdk/python/pulumi_gcp/apigee/env_group.py +++ b/sdk/python/pulumi_gcp/apigee/env_group.py @@ -145,32 +145,6 @@ def __init__(__self__, * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) ## Example Usage - ### Apigee Environment Group Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - current = gcp.organizations.get_client_config() - apigee_network = gcp.compute.Network("apigeeNetwork") - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=apigee_network.id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name]) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=current.project, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection])) - env_grp = gcp.apigee.EnvGroup("envGrp", - hostnames=["abc.foo.com"], - org_id=apigee_org.id) - ``` ## Import @@ -207,32 +181,6 @@ def __init__(__self__, * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) ## Example Usage - ### Apigee Environment Group Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - current = gcp.organizations.get_client_config() - apigee_network = gcp.compute.Network("apigeeNetwork") - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=apigee_network.id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name]) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=current.project, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection])) - env_grp = gcp.apigee.EnvGroup("envGrp", - hostnames=["abc.foo.com"], - org_id=apigee_org.id) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/apigee/env_group_attachment.py b/sdk/python/pulumi_gcp/apigee/env_group_attachment.py index 0fa09f44f6..f3c442856e 100644 --- a/sdk/python/pulumi_gcp/apigee/env_group_attachment.py +++ b/sdk/python/pulumi_gcp/apigee/env_group_attachment.py @@ -127,57 +127,6 @@ def __init__(__self__, * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) ## Example Usage - ### Apigee Environment Group Attachment Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.Project("project", - project_id="tf-test", - org_id="", - billing_account="") - apigee = gcp.projects.Service("apigee", - project=project.project_id, - service="apigee.googleapis.com") - compute = gcp.projects.Service("compute", - project=project.project_id, - service="compute.googleapis.com") - servicenetworking = gcp.projects.Service("servicenetworking", - project=project.project_id, - service="servicenetworking.googleapis.com") - apigee_network = gcp.compute.Network("apigeeNetwork", project=project.project_id, - opts=pulumi.ResourceOptions(depends_on=[compute])) - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=apigee_network.id, - project=project.project_id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name], - opts=pulumi.ResourceOptions(depends_on=[servicenetworking])) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=project.project_id, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[ - apigee_vpc_connection, - apigee, - ])) - apigee_envgroup = gcp.apigee.EnvGroup("apigeeEnvgroup", - org_id=apigee_org.id, - hostnames=["abc.foo.com"]) - apigee_env = gcp.apigee.Environment("apigeeEnv", - org_id=apigee_org.id, - description="Apigee Environment", - display_name="tf-test") - env_group_attachment = gcp.apigee.EnvGroupAttachment("envGroupAttachment", - envgroup_id=apigee_envgroup.id, - environment=apigee_env.name) - ``` ## Import @@ -213,57 +162,6 @@ def __init__(__self__, * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) ## Example Usage - ### Apigee Environment Group Attachment Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.Project("project", - project_id="tf-test", - org_id="", - billing_account="") - apigee = gcp.projects.Service("apigee", - project=project.project_id, - service="apigee.googleapis.com") - compute = gcp.projects.Service("compute", - project=project.project_id, - service="compute.googleapis.com") - servicenetworking = gcp.projects.Service("servicenetworking", - project=project.project_id, - service="servicenetworking.googleapis.com") - apigee_network = gcp.compute.Network("apigeeNetwork", project=project.project_id, - opts=pulumi.ResourceOptions(depends_on=[compute])) - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=apigee_network.id, - project=project.project_id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name], - opts=pulumi.ResourceOptions(depends_on=[servicenetworking])) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=project.project_id, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[ - apigee_vpc_connection, - apigee, - ])) - apigee_envgroup = gcp.apigee.EnvGroup("apigeeEnvgroup", - org_id=apigee_org.id, - hostnames=["abc.foo.com"]) - apigee_env = gcp.apigee.Environment("apigeeEnv", - org_id=apigee_org.id, - description="Apigee Environment", - display_name="tf-test") - env_group_attachment = gcp.apigee.EnvGroupAttachment("envGroupAttachment", - envgroup_id=apigee_envgroup.id, - environment=apigee_env.name) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/apigee/environment.py b/sdk/python/pulumi_gcp/apigee/environment.py index 2cc91fc960..b30cc2ceff 100644 --- a/sdk/python/pulumi_gcp/apigee/environment.py +++ b/sdk/python/pulumi_gcp/apigee/environment.py @@ -319,33 +319,6 @@ def __init__(__self__, * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) ## Example Usage - ### Apigee Environment Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - current = gcp.organizations.get_client_config() - apigee_network = gcp.compute.Network("apigeeNetwork") - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=apigee_network.id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name]) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=current.project, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection])) - env = gcp.apigee.Environment("env", - description="Apigee Environment", - display_name="environment-1", - org_id=apigee_org.id) - ``` ## Import @@ -396,33 +369,6 @@ def __init__(__self__, * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) ## Example Usage - ### Apigee Environment Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - current = gcp.organizations.get_client_config() - apigee_network = gcp.compute.Network("apigeeNetwork") - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=apigee_network.id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name]) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=current.project, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection])) - env = gcp.apigee.Environment("env", - description="Apigee Environment", - display_name="environment-1", - org_id=apigee_org.id) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/apigee/instance.py b/sdk/python/pulumi_gcp/apigee/instance.py index 25128aaea9..b3c33425b9 100644 --- a/sdk/python/pulumi_gcp/apigee/instance.py +++ b/sdk/python/pulumi_gcp/apigee/instance.py @@ -438,131 +438,6 @@ def __init__(__self__, * [Creating a runtime instance](https://cloud.google.com/apigee/docs/api-platform/get-started/create-instance) ## Example Usage - ### Apigee Instance Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - current = gcp.organizations.get_client_config() - apigee_network = gcp.compute.Network("apigeeNetwork") - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=apigee_network.id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name]) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=current.project, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection])) - apigee_instance = gcp.apigee.Instance("apigeeInstance", - location="us-central1", - org_id=apigee_org.id) - ``` - ### Apigee Instance Cidr Range - - ```python - import pulumi - import pulumi_gcp as gcp - - current = gcp.organizations.get_client_config() - apigee_network = gcp.compute.Network("apigeeNetwork") - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=22, - network=apigee_network.id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name]) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=current.project, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection])) - apigee_instance = gcp.apigee.Instance("apigeeInstance", - location="us-central1", - org_id=apigee_org.id, - peering_cidr_range="SLASH_22") - ``` - ### Apigee Instance Ip Range - - ```python - import pulumi - import pulumi_gcp as gcp - - current = gcp.organizations.get_client_config() - apigee_network = gcp.compute.Network("apigeeNetwork") - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=22, - network=apigee_network.id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name]) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=current.project, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection])) - apigee_instance = gcp.apigee.Instance("apigeeInstance", - location="us-central1", - org_id=apigee_org.id, - ip_range="10.87.8.0/22") - ``` - ### Apigee Instance Full - - ```python - import pulumi - import pulumi_gcp as gcp - - current = gcp.organizations.get_client_config() - apigee_network = gcp.compute.Network("apigeeNetwork") - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=apigee_network.id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name]) - apigee_keyring = gcp.kms.KeyRing("apigeeKeyring", location="us-central1") - apigee_key = gcp.kms.CryptoKey("apigeeKey", key_ring=apigee_keyring.id) - apigee_sa = gcp.projects.ServiceIdentity("apigeeSa", - project=google_project["project"]["project_id"], - service=google_project_service["apigee"]["service"], - opts=pulumi.ResourceOptions(provider=google_beta)) - apigee_sa_keyuser = gcp.kms.CryptoKeyIAMBinding("apigeeSaKeyuser", - crypto_key_id=apigee_key.id, - role="roles/cloudkms.cryptoKeyEncrypterDecrypter", - members=[apigee_sa.email.apply(lambda email: f"serviceAccount:{email}")]) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - display_name="apigee-org", - description="Auto-provisioned Apigee Org.", - project_id=current.project, - authorized_network=apigee_network.id, - runtime_database_encryption_key_name=apigee_key.id, - opts=pulumi.ResourceOptions(depends_on=[ - apigee_vpc_connection, - apigee_sa_keyuser, - ])) - apigee_instance = gcp.apigee.Instance("apigeeInstance", - location="us-central1", - description="Auto-managed Apigee Runtime Instance", - display_name="tf-test", - org_id=apigee_org.id, - disk_encryption_key_name=apigee_key.id) - ``` ## Import @@ -616,131 +491,6 @@ def __init__(__self__, * [Creating a runtime instance](https://cloud.google.com/apigee/docs/api-platform/get-started/create-instance) ## Example Usage - ### Apigee Instance Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - current = gcp.organizations.get_client_config() - apigee_network = gcp.compute.Network("apigeeNetwork") - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=apigee_network.id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name]) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=current.project, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection])) - apigee_instance = gcp.apigee.Instance("apigeeInstance", - location="us-central1", - org_id=apigee_org.id) - ``` - ### Apigee Instance Cidr Range - - ```python - import pulumi - import pulumi_gcp as gcp - - current = gcp.organizations.get_client_config() - apigee_network = gcp.compute.Network("apigeeNetwork") - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=22, - network=apigee_network.id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name]) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=current.project, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection])) - apigee_instance = gcp.apigee.Instance("apigeeInstance", - location="us-central1", - org_id=apigee_org.id, - peering_cidr_range="SLASH_22") - ``` - ### Apigee Instance Ip Range - - ```python - import pulumi - import pulumi_gcp as gcp - - current = gcp.organizations.get_client_config() - apigee_network = gcp.compute.Network("apigeeNetwork") - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=22, - network=apigee_network.id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name]) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=current.project, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[apigee_vpc_connection])) - apigee_instance = gcp.apigee.Instance("apigeeInstance", - location="us-central1", - org_id=apigee_org.id, - ip_range="10.87.8.0/22") - ``` - ### Apigee Instance Full - - ```python - import pulumi - import pulumi_gcp as gcp - - current = gcp.organizations.get_client_config() - apigee_network = gcp.compute.Network("apigeeNetwork") - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=apigee_network.id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name]) - apigee_keyring = gcp.kms.KeyRing("apigeeKeyring", location="us-central1") - apigee_key = gcp.kms.CryptoKey("apigeeKey", key_ring=apigee_keyring.id) - apigee_sa = gcp.projects.ServiceIdentity("apigeeSa", - project=google_project["project"]["project_id"], - service=google_project_service["apigee"]["service"], - opts=pulumi.ResourceOptions(provider=google_beta)) - apigee_sa_keyuser = gcp.kms.CryptoKeyIAMBinding("apigeeSaKeyuser", - crypto_key_id=apigee_key.id, - role="roles/cloudkms.cryptoKeyEncrypterDecrypter", - members=[apigee_sa.email.apply(lambda email: f"serviceAccount:{email}")]) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - display_name="apigee-org", - description="Auto-provisioned Apigee Org.", - project_id=current.project, - authorized_network=apigee_network.id, - runtime_database_encryption_key_name=apigee_key.id, - opts=pulumi.ResourceOptions(depends_on=[ - apigee_vpc_connection, - apigee_sa_keyuser, - ])) - apigee_instance = gcp.apigee.Instance("apigeeInstance", - location="us-central1", - description="Auto-managed Apigee Runtime Instance", - display_name="tf-test", - org_id=apigee_org.id, - disk_encryption_key_name=apigee_key.id) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/apigee/instance_attachment.py b/sdk/python/pulumi_gcp/apigee/instance_attachment.py index ca2578af4d..52440ad24e 100644 --- a/sdk/python/pulumi_gcp/apigee/instance_attachment.py +++ b/sdk/python/pulumi_gcp/apigee/instance_attachment.py @@ -127,57 +127,6 @@ def __init__(__self__, * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) ## Example Usage - ### Apigee Instance Attachment Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.Project("project", - project_id="tf-test", - org_id="", - billing_account="") - apigee = gcp.projects.Service("apigee", - project=project.project_id, - service="apigee.googleapis.com") - compute = gcp.projects.Service("compute", - project=project.project_id, - service="compute.googleapis.com") - servicenetworking = gcp.projects.Service("servicenetworking", - project=project.project_id, - service="servicenetworking.googleapis.com") - apigee_network = gcp.compute.Network("apigeeNetwork", project=project.project_id, - opts=pulumi.ResourceOptions(depends_on=[compute])) - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=apigee_network.id, - project=project.project_id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name], - opts=pulumi.ResourceOptions(depends_on=[servicenetworking])) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=project.project_id, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[ - apigee_vpc_connection, - apigee, - ])) - apigee_ins = gcp.apigee.Instance("apigeeIns", - location="us-central1", - org_id=apigee_org.id) - apigee_env = gcp.apigee.Environment("apigeeEnv", - org_id=apigee_org.id, - description="Apigee Environment", - display_name="environment-1") - instance_attachment = gcp.apigee.InstanceAttachment("instanceAttachment", - instance_id=google_apigee_instance["apigee_instance"]["id"], - environment=apigee_env.name) - ``` ## Import @@ -213,57 +162,6 @@ def __init__(__self__, * [Creating an environment](https://cloud.google.com/apigee/docs/api-platform/get-started/create-environment) ## Example Usage - ### Apigee Instance Attachment Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.Project("project", - project_id="tf-test", - org_id="", - billing_account="") - apigee = gcp.projects.Service("apigee", - project=project.project_id, - service="apigee.googleapis.com") - compute = gcp.projects.Service("compute", - project=project.project_id, - service="compute.googleapis.com") - servicenetworking = gcp.projects.Service("servicenetworking", - project=project.project_id, - service="servicenetworking.googleapis.com") - apigee_network = gcp.compute.Network("apigeeNetwork", project=project.project_id, - opts=pulumi.ResourceOptions(depends_on=[compute])) - apigee_range = gcp.compute.GlobalAddress("apigeeRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=apigee_network.id, - project=project.project_id) - apigee_vpc_connection = gcp.servicenetworking.Connection("apigeeVpcConnection", - network=apigee_network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[apigee_range.name], - opts=pulumi.ResourceOptions(depends_on=[servicenetworking])) - apigee_org = gcp.apigee.Organization("apigeeOrg", - analytics_region="us-central1", - project_id=project.project_id, - authorized_network=apigee_network.id, - opts=pulumi.ResourceOptions(depends_on=[ - apigee_vpc_connection, - apigee, - ])) - apigee_ins = gcp.apigee.Instance("apigeeIns", - location="us-central1", - org_id=apigee_org.id) - apigee_env = gcp.apigee.Environment("apigeeEnv", - org_id=apigee_org.id, - description="Apigee Environment", - display_name="environment-1") - instance_attachment = gcp.apigee.InstanceAttachment("instanceAttachment", - instance_id=google_apigee_instance["apigee_instance"]["id"], - environment=apigee_env.name) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/apigee/organization.py b/sdk/python/pulumi_gcp/apigee/organization.py index 3babcc69c8..407c67b85c 100644 --- a/sdk/python/pulumi_gcp/apigee/organization.py +++ b/sdk/python/pulumi_gcp/apigee/organization.py @@ -531,7 +531,7 @@ def __init__(__self__, org = gcp.apigee.Organization("org", analytics_region="us-central1", display_name="apigee-org", - description="Auto-provisioned Apigee Org.", + description="Terraform-provisioned Apigee Org.", project_id=current.project, authorized_network=apigee_network.id, runtime_database_encryption_key_name=apigee_key.id, @@ -648,7 +648,7 @@ def __init__(__self__, org = gcp.apigee.Organization("org", analytics_region="us-central1", display_name="apigee-org", - description="Auto-provisioned Apigee Org.", + description="Terraform-provisioned Apigee Org.", project_id=current.project, authorized_network=apigee_network.id, runtime_database_encryption_key_name=apigee_key.id, diff --git a/sdk/python/pulumi_gcp/appengine/flexible_app_version.py b/sdk/python/pulumi_gcp/appengine/flexible_app_version.py index 8838978d1b..a216aaf0b8 100644 --- a/sdk/python/pulumi_gcp/appengine/flexible_app_version.py +++ b/sdk/python/pulumi_gcp/appengine/flexible_app_version.py @@ -67,7 +67,8 @@ def __init__(__self__, *, Structure is documented below. :param pulumi.Input['FlexibleAppVersionEntrypointArgs'] entrypoint: The entrypoint for the application. Structure is documented below. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] env_variables: Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] env_variables: Environment variables available to the application. As these are not returned in the API request, Terraform will not + detect any changes made outside of the Terraform config. :param pulumi.Input[Sequence[pulumi.Input['FlexibleAppVersionHandlerArgs']]] handlers: An ordered list of URL-matching patterns that should be applied to incoming requests. The first matching URL handles the request and other request handlers are not attempted. Structure is documented below. @@ -313,7 +314,8 @@ def entrypoint(self, value: Optional[pulumi.Input['FlexibleAppVersionEntrypointA @pulumi.getter(name="envVariables") def env_variables(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: """ - Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + Environment variables available to the application. As these are not returned in the API request, Terraform will not + detect any changes made outside of the Terraform config. """ return pulumi.get(self, "env_variables") @@ -580,7 +582,8 @@ def __init__(__self__, *, Structure is documented below. :param pulumi.Input['FlexibleAppVersionEntrypointArgs'] entrypoint: The entrypoint for the application. Structure is documented below. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] env_variables: Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] env_variables: Environment variables available to the application. As these are not returned in the API request, Terraform will not + detect any changes made outside of the Terraform config. :param pulumi.Input[Sequence[pulumi.Input['FlexibleAppVersionHandlerArgs']]] handlers: An ordered list of URL-matching patterns that should be applied to incoming requests. The first matching URL handles the request and other request handlers are not attempted. Structure is documented below. @@ -796,7 +799,8 @@ def entrypoint(self, value: Optional[pulumi.Input['FlexibleAppVersionEntrypointA @pulumi.getter(name="envVariables") def env_variables(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: """ - Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + Environment variables available to the application. As these are not returned in the API request, Terraform will not + detect any changes made outside of the Terraform config. """ return pulumi.get(self, "env_variables") @@ -1247,7 +1251,8 @@ def __init__(__self__, Structure is documented below. :param pulumi.Input[pulumi.InputType['FlexibleAppVersionEntrypointArgs']] entrypoint: The entrypoint for the application. Structure is documented below. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] env_variables: Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] env_variables: Environment variables available to the application. As these are not returned in the API request, Terraform will not + detect any changes made outside of the Terraform config. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['FlexibleAppVersionHandlerArgs']]]] handlers: An ordered list of URL-matching patterns that should be applied to incoming requests. The first matching URL handles the request and other request handlers are not attempted. Structure is documented below. @@ -1559,7 +1564,8 @@ def get(resource_name: str, Structure is documented below. :param pulumi.Input[pulumi.InputType['FlexibleAppVersionEntrypointArgs']] entrypoint: The entrypoint for the application. Structure is documented below. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] env_variables: Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] env_variables: Environment variables available to the application. As these are not returned in the API request, Terraform will not + detect any changes made outside of the Terraform config. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['FlexibleAppVersionHandlerArgs']]]] handlers: An ordered list of URL-matching patterns that should be applied to incoming requests. The first matching URL handles the request and other request handlers are not attempted. Structure is documented below. @@ -1718,7 +1724,8 @@ def entrypoint(self) -> pulumi.Output[Optional['outputs.FlexibleAppVersionEntryp @pulumi.getter(name="envVariables") def env_variables(self) -> pulumi.Output[Optional[Mapping[str, str]]]: """ - Environment variables available to the application. As these are not returned in the API request, the provider will not detect any changes made outside of the config. + Environment variables available to the application. As these are not returned in the API request, Terraform will not + detect any changes made outside of the Terraform config. """ return pulumi.get(self, "env_variables") diff --git a/sdk/python/pulumi_gcp/bigquery/_inputs.py b/sdk/python/pulumi_gcp/bigquery/_inputs.py index b8b95b04dc..4532931a6e 100644 --- a/sdk/python/pulumi_gcp/bigquery/_inputs.py +++ b/sdk/python/pulumi_gcp/bigquery/_inputs.py @@ -177,12 +177,16 @@ def __init__(__self__, *, customer_tenant_id: pulumi.Input[str], application: Optional[pulumi.Input[str]] = None, client_id: Optional[pulumi.Input[str]] = None, + federated_application_client_id: Optional[pulumi.Input[str]] = None, + identity: Optional[pulumi.Input[str]] = None, object_id: Optional[pulumi.Input[str]] = None, redirect_uri: Optional[pulumi.Input[str]] = None): """ :param pulumi.Input[str] customer_tenant_id: The id of customer's directory that host the data. :param pulumi.Input[str] application: The name of the Azure Active Directory Application. :param pulumi.Input[str] client_id: The client id of the Azure Active Directory Application. + :param pulumi.Input[str] federated_application_client_id: The Azure Application (client) ID where the federated credentials will be hosted. + :param pulumi.Input[str] identity: A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. :param pulumi.Input[str] object_id: The object id of the Azure Active Directory Application. :param pulumi.Input[str] redirect_uri: The URL user will be redirected to after granting consent during connection setup. """ @@ -191,6 +195,10 @@ def __init__(__self__, *, pulumi.set(__self__, "application", application) if client_id is not None: pulumi.set(__self__, "client_id", client_id) + if federated_application_client_id is not None: + pulumi.set(__self__, "federated_application_client_id", federated_application_client_id) + if identity is not None: + pulumi.set(__self__, "identity", identity) if object_id is not None: pulumi.set(__self__, "object_id", object_id) if redirect_uri is not None: @@ -232,6 +240,30 @@ def client_id(self) -> Optional[pulumi.Input[str]]: def client_id(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "client_id", value) + @property + @pulumi.getter(name="federatedApplicationClientId") + def federated_application_client_id(self) -> Optional[pulumi.Input[str]]: + """ + The Azure Application (client) ID where the federated credentials will be hosted. + """ + return pulumi.get(self, "federated_application_client_id") + + @federated_application_client_id.setter + def federated_application_client_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "federated_application_client_id", value) + + @property + @pulumi.getter + def identity(self) -> Optional[pulumi.Input[str]]: + """ + A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + """ + return pulumi.get(self, "identity") + + @identity.setter + def identity(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "identity", value) + @property @pulumi.getter(name="objectId") def object_id(self) -> Optional[pulumi.Input[str]]: @@ -284,14 +316,18 @@ def service_account_id(self, value: Optional[pulumi.Input[str]]): class ConnectionCloudSpannerArgs: def __init__(__self__, *, database: pulumi.Input[str], - use_parallelism: Optional[pulumi.Input[bool]] = None): + use_parallelism: Optional[pulumi.Input[bool]] = None, + use_serverless_analytics: Optional[pulumi.Input[bool]] = None): """ :param pulumi.Input[str] database: Cloud Spanner database in the form `project/instance/database' :param pulumi.Input[bool] use_parallelism: If parallelism should be used when reading from Cloud Spanner + :param pulumi.Input[bool] use_serverless_analytics: If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics """ pulumi.set(__self__, "database", database) if use_parallelism is not None: pulumi.set(__self__, "use_parallelism", use_parallelism) + if use_serverless_analytics is not None: + pulumi.set(__self__, "use_serverless_analytics", use_serverless_analytics) @property @pulumi.getter @@ -317,6 +353,18 @@ def use_parallelism(self) -> Optional[pulumi.Input[bool]]: def use_parallelism(self, value: Optional[pulumi.Input[bool]]): pulumi.set(self, "use_parallelism", value) + @property + @pulumi.getter(name="useServerlessAnalytics") + def use_serverless_analytics(self) -> Optional[pulumi.Input[bool]]: + """ + If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + """ + return pulumi.get(self, "use_serverless_analytics") + + @use_serverless_analytics.setter + def use_serverless_analytics(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "use_serverless_analytics", value) + @pulumi.input_type class ConnectionCloudSqlArgs: @@ -324,7 +372,8 @@ def __init__(__self__, *, credential: pulumi.Input['ConnectionCloudSqlCredentialArgs'], database: pulumi.Input[str], instance_id: pulumi.Input[str], - type: pulumi.Input[str]): + type: pulumi.Input[str], + service_account_id: Optional[pulumi.Input[str]] = None): """ :param pulumi.Input['ConnectionCloudSqlCredentialArgs'] credential: Cloud SQL properties. Structure is documented below. @@ -332,11 +381,14 @@ def __init__(__self__, *, :param pulumi.Input[str] instance_id: Cloud SQL instance ID in the form project:location:instance. :param pulumi.Input[str] type: Type of the Cloud SQL database. Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. + :param pulumi.Input[str] service_account_id: When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. """ pulumi.set(__self__, "credential", credential) pulumi.set(__self__, "database", database) pulumi.set(__self__, "instance_id", instance_id) pulumi.set(__self__, "type", type) + if service_account_id is not None: + pulumi.set(__self__, "service_account_id", service_account_id) @property @pulumi.getter @@ -388,6 +440,18 @@ def type(self) -> pulumi.Input[str]: def type(self, value: pulumi.Input[str]): pulumi.set(self, "type", value) + @property + @pulumi.getter(name="serviceAccountId") + def service_account_id(self) -> Optional[pulumi.Input[str]]: + """ + When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + """ + return pulumi.get(self, "service_account_id") + + @service_account_id.setter + def service_account_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "service_account_id", value) + @pulumi.input_type class ConnectionCloudSqlCredentialArgs: @@ -1863,8 +1927,8 @@ def __init__(__self__, *, GeoJSON: set to GEOJSON. :param pulumi.Input[int] max_bad_records: The maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. - :param pulumi.Input[str] null_marker: Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - property to a custom value, BigQuery throws an error if an + :param pulumi.Input[str] null_marker: Specifies a string that represents a null value in a CSV file. For example, if you specify "\\N", BigQuery interprets "\\N" as a null value + when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as an empty value. :param pulumi.Input[Sequence[pulumi.Input[str]]] projection_fields: If sourceFormat is set to "DATASTORE_BACKUP", indicates which entity properties to load into BigQuery from a Cloud Datastore backup. @@ -2119,8 +2183,8 @@ def max_bad_records(self, value: Optional[pulumi.Input[int]]): @pulumi.getter(name="nullMarker") def null_marker(self) -> Optional[pulumi.Input[str]]: """ - Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - property to a custom value, BigQuery throws an error if an + Specifies a string that represents a null value in a CSV file. For example, if you specify "\\N", BigQuery interprets "\\N" as a null value + when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as an empty value. """ @@ -3609,13 +3673,6 @@ def __init__(__self__, *, field_delimiter: Optional[pulumi.Input[str]] = None, skip_leading_rows: Optional[pulumi.Input[int]] = None): """ - :param pulumi.Input[str] quote: The value that is used to quote data sections in a - CSV file. If your data does not contain quoted sections, set the - property value to an empty string. If your data contains quoted newline - characters, you must also set the `allow_quoted_newlines` property to true. - The API-side default is `"`, specified in the provider escaped as `\\"`. Due to - limitations with default values, this value is required to be - explicitly set. :param pulumi.Input[bool] allow_jagged_rows: Indicates if BigQuery should accept rows that are missing trailing optional columns. :param pulumi.Input[bool] allow_quoted_newlines: Indicates if BigQuery should allow @@ -3642,15 +3699,6 @@ def __init__(__self__, *, @property @pulumi.getter def quote(self) -> pulumi.Input[str]: - """ - The value that is used to quote data sections in a - CSV file. If your data does not contain quoted sections, set the - property value to an empty string. If your data contains quoted newline - characters, you must also set the `allow_quoted_newlines` property to true. - The API-side default is `"`, specified in the provider escaped as `\\"`. Due to - limitations with default values, this value is required to be - explicitly set. - """ return pulumi.get(self, "quote") @quote.setter diff --git a/sdk/python/pulumi_gcp/bigquery/connection.py b/sdk/python/pulumi_gcp/bigquery/connection.py index e959fbd22e..74c1195aa5 100644 --- a/sdk/python/pulumi_gcp/bigquery/connection.py +++ b/sdk/python/pulumi_gcp/bigquery/connection.py @@ -36,7 +36,7 @@ def __init__(__self__, *, Structure is documented below. :param pulumi.Input['ConnectionCloudSpannerArgs'] cloud_spanner: Connection properties specific to Cloud Spanner Structure is documented below. - :param pulumi.Input['ConnectionCloudSqlArgs'] cloud_sql: A nested object resource + :param pulumi.Input['ConnectionCloudSqlArgs'] cloud_sql: Connection properties specific to the Cloud SQL. Structure is documented below. :param pulumi.Input[str] connection_id: Optional connection id that should be assigned to the created connection. :param pulumi.Input[str] description: A descriptive description for the connection @@ -128,7 +128,7 @@ def cloud_spanner(self, value: Optional[pulumi.Input['ConnectionCloudSpannerArgs @pulumi.getter(name="cloudSql") def cloud_sql(self) -> Optional[pulumi.Input['ConnectionCloudSqlArgs']]: """ - A nested object resource + Connection properties specific to the Cloud SQL. Structure is documented below. """ return pulumi.get(self, "cloud_sql") @@ -230,7 +230,7 @@ def __init__(__self__, *, Structure is documented below. :param pulumi.Input['ConnectionCloudSpannerArgs'] cloud_spanner: Connection properties specific to Cloud Spanner Structure is documented below. - :param pulumi.Input['ConnectionCloudSqlArgs'] cloud_sql: A nested object resource + :param pulumi.Input['ConnectionCloudSqlArgs'] cloud_sql: Connection properties specific to the Cloud SQL. Structure is documented below. :param pulumi.Input[str] connection_id: Optional connection id that should be assigned to the created connection. :param pulumi.Input[str] description: A descriptive description for the connection @@ -329,7 +329,7 @@ def cloud_spanner(self, value: Optional[pulumi.Input['ConnectionCloudSpannerArgs @pulumi.getter(name="cloudSql") def cloud_sql(self) -> Optional[pulumi.Input['ConnectionCloudSqlArgs']]: """ - A nested object resource + Connection properties specific to the Cloud SQL. Structure is documented below. """ return pulumi.get(self, "cloud_sql") @@ -559,6 +559,7 @@ def __init__(__self__, connection = gcp.bigquery.Connection("connection", azure=gcp.bigquery.ConnectionAzureArgs( customer_tenant_id="customer-tenant-id", + federated_application_client_id="b43eeeee-eeee-eeee-eeee-a480155501ce", ), connection_id="my-connection", description="a riveting description", @@ -607,7 +608,7 @@ def __init__(__self__, Structure is documented below. :param pulumi.Input[pulumi.InputType['ConnectionCloudSpannerArgs']] cloud_spanner: Connection properties specific to Cloud Spanner Structure is documented below. - :param pulumi.Input[pulumi.InputType['ConnectionCloudSqlArgs']] cloud_sql: A nested object resource + :param pulumi.Input[pulumi.InputType['ConnectionCloudSqlArgs']] cloud_sql: Connection properties specific to the Cloud SQL. Structure is documented below. :param pulumi.Input[str] connection_id: Optional connection id that should be assigned to the created connection. :param pulumi.Input[str] description: A descriptive description for the connection @@ -740,6 +741,7 @@ def __init__(__self__, connection = gcp.bigquery.Connection("connection", azure=gcp.bigquery.ConnectionAzureArgs( customer_tenant_id="customer-tenant-id", + federated_application_client_id="b43eeeee-eeee-eeee-eeee-a480155501ce", ), connection_id="my-connection", description="a riveting description", @@ -861,7 +863,7 @@ def get(resource_name: str, Structure is documented below. :param pulumi.Input[pulumi.InputType['ConnectionCloudSpannerArgs']] cloud_spanner: Connection properties specific to Cloud Spanner Structure is documented below. - :param pulumi.Input[pulumi.InputType['ConnectionCloudSqlArgs']] cloud_sql: A nested object resource + :param pulumi.Input[pulumi.InputType['ConnectionCloudSqlArgs']] cloud_sql: Connection properties specific to the Cloud SQL. Structure is documented below. :param pulumi.Input[str] connection_id: Optional connection id that should be assigned to the created connection. :param pulumi.Input[str] description: A descriptive description for the connection @@ -937,7 +939,7 @@ def cloud_spanner(self) -> pulumi.Output[Optional['outputs.ConnectionCloudSpanne @pulumi.getter(name="cloudSql") def cloud_sql(self) -> pulumi.Output[Optional['outputs.ConnectionCloudSql']]: """ - A nested object resource + Connection properties specific to the Cloud SQL. Structure is documented below. """ return pulumi.get(self, "cloud_sql") diff --git a/sdk/python/pulumi_gcp/bigquery/outputs.py b/sdk/python/pulumi_gcp/bigquery/outputs.py index c2f50e2aac..41418cdd64 100644 --- a/sdk/python/pulumi_gcp/bigquery/outputs.py +++ b/sdk/python/pulumi_gcp/bigquery/outputs.py @@ -214,6 +214,8 @@ def __key_warning(key: str): suggest = "customer_tenant_id" elif key == "clientId": suggest = "client_id" + elif key == "federatedApplicationClientId": + suggest = "federated_application_client_id" elif key == "objectId": suggest = "object_id" elif key == "redirectUri": @@ -234,12 +236,16 @@ def __init__(__self__, *, customer_tenant_id: str, application: Optional[str] = None, client_id: Optional[str] = None, + federated_application_client_id: Optional[str] = None, + identity: Optional[str] = None, object_id: Optional[str] = None, redirect_uri: Optional[str] = None): """ :param str customer_tenant_id: The id of customer's directory that host the data. :param str application: The name of the Azure Active Directory Application. :param str client_id: The client id of the Azure Active Directory Application. + :param str federated_application_client_id: The Azure Application (client) ID where the federated credentials will be hosted. + :param str identity: A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. :param str object_id: The object id of the Azure Active Directory Application. :param str redirect_uri: The URL user will be redirected to after granting consent during connection setup. """ @@ -248,6 +254,10 @@ def __init__(__self__, *, pulumi.set(__self__, "application", application) if client_id is not None: pulumi.set(__self__, "client_id", client_id) + if federated_application_client_id is not None: + pulumi.set(__self__, "federated_application_client_id", federated_application_client_id) + if identity is not None: + pulumi.set(__self__, "identity", identity) if object_id is not None: pulumi.set(__self__, "object_id", object_id) if redirect_uri is not None: @@ -277,6 +287,22 @@ def client_id(self) -> Optional[str]: """ return pulumi.get(self, "client_id") + @property + @pulumi.getter(name="federatedApplicationClientId") + def federated_application_client_id(self) -> Optional[str]: + """ + The Azure Application (client) ID where the federated credentials will be hosted. + """ + return pulumi.get(self, "federated_application_client_id") + + @property + @pulumi.getter + def identity(self) -> Optional[str]: + """ + A unique Google-owned and Google-generated identity for the Connection. This identity will be used to access the user's Azure Active Directory Application. + """ + return pulumi.get(self, "identity") + @property @pulumi.getter(name="objectId") def object_id(self) -> Optional[str]: @@ -337,6 +363,8 @@ def __key_warning(key: str): suggest = None if key == "useParallelism": suggest = "use_parallelism" + elif key == "useServerlessAnalytics": + suggest = "use_serverless_analytics" if suggest: pulumi.log.warn(f"Key '{key}' not found in ConnectionCloudSpanner. Access the value via the '{suggest}' property getter instead.") @@ -351,14 +379,18 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, database: str, - use_parallelism: Optional[bool] = None): + use_parallelism: Optional[bool] = None, + use_serverless_analytics: Optional[bool] = None): """ :param str database: Cloud Spanner database in the form `project/instance/database' :param bool use_parallelism: If parallelism should be used when reading from Cloud Spanner + :param bool use_serverless_analytics: If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics """ pulumi.set(__self__, "database", database) if use_parallelism is not None: pulumi.set(__self__, "use_parallelism", use_parallelism) + if use_serverless_analytics is not None: + pulumi.set(__self__, "use_serverless_analytics", use_serverless_analytics) @property @pulumi.getter @@ -376,6 +408,14 @@ def use_parallelism(self) -> Optional[bool]: """ return pulumi.get(self, "use_parallelism") + @property + @pulumi.getter(name="useServerlessAnalytics") + def use_serverless_analytics(self) -> Optional[bool]: + """ + If the serverless analytics service should be used to read data from Cloud Spanner. useParallelism must be set when using serverless analytics + """ + return pulumi.get(self, "use_serverless_analytics") + @pulumi.output_type class ConnectionCloudSql(dict): @@ -384,6 +424,8 @@ def __key_warning(key: str): suggest = None if key == "instanceId": suggest = "instance_id" + elif key == "serviceAccountId": + suggest = "service_account_id" if suggest: pulumi.log.warn(f"Key '{key}' not found in ConnectionCloudSql. Access the value via the '{suggest}' property getter instead.") @@ -400,7 +442,8 @@ def __init__(__self__, *, credential: 'outputs.ConnectionCloudSqlCredential', database: str, instance_id: str, - type: str): + type: str, + service_account_id: Optional[str] = None): """ :param 'ConnectionCloudSqlCredentialArgs' credential: Cloud SQL properties. Structure is documented below. @@ -408,11 +451,14 @@ def __init__(__self__, *, :param str instance_id: Cloud SQL instance ID in the form project:location:instance. :param str type: Type of the Cloud SQL database. Possible values are `DATABASE_TYPE_UNSPECIFIED`, `POSTGRES`, and `MYSQL`. + :param str service_account_id: When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. """ pulumi.set(__self__, "credential", credential) pulumi.set(__self__, "database", database) pulumi.set(__self__, "instance_id", instance_id) pulumi.set(__self__, "type", type) + if service_account_id is not None: + pulumi.set(__self__, "service_account_id", service_account_id) @property @pulumi.getter @@ -448,6 +494,14 @@ def type(self) -> str: """ return pulumi.get(self, "type") + @property + @pulumi.getter(name="serviceAccountId") + def service_account_id(self) -> Optional[str]: + """ + When the connection is used in the context of an operation in BigQuery, this service account will serve as the identity being used for connecting to the CloudSQL instance specified in this connection. + """ + return pulumi.get(self, "service_account_id") + @pulumi.output_type class ConnectionCloudSqlCredential(dict): @@ -2036,8 +2090,8 @@ def __init__(__self__, *, GeoJSON: set to GEOJSON. :param int max_bad_records: The maximum number of bad records that BigQuery can ignore when running the job. If the number of bad records exceeds this value, an invalid error is returned in the job result. The default value is 0, which requires that all records are valid. - :param str null_marker: Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - property to a custom value, BigQuery throws an error if an + :param str null_marker: Specifies a string that represents a null value in a CSV file. For example, if you specify "\\N", BigQuery interprets "\\N" as a null value + when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as an empty value. :param Sequence[str] projection_fields: If sourceFormat is set to "DATASTORE_BACKUP", indicates which entity properties to load into BigQuery from a Cloud Datastore backup. @@ -2244,8 +2298,8 @@ def max_bad_records(self) -> Optional[int]: @pulumi.getter(name="nullMarker") def null_marker(self) -> Optional[str]: """ - Specifies a string that represents a null value in a CSV file. The default value is the empty string. If you set this - property to a custom value, BigQuery throws an error if an + Specifies a string that represents a null value in a CSV file. For example, if you specify "\\N", BigQuery interprets "\\N" as a null value + when loading a CSV file. The default value is the empty string. If you set this property to a custom value, BigQuery throws an error if an empty string is present for all data types except for STRING and BYTE. For STRING and BYTE columns, BigQuery interprets the empty string as an empty value. """ @@ -3769,13 +3823,6 @@ def __init__(__self__, *, field_delimiter: Optional[str] = None, skip_leading_rows: Optional[int] = None): """ - :param str quote: The value that is used to quote data sections in a - CSV file. If your data does not contain quoted sections, set the - property value to an empty string. If your data contains quoted newline - characters, you must also set the `allow_quoted_newlines` property to true. - The API-side default is `"`, specified in the provider escaped as `\\"`. Due to - limitations with default values, this value is required to be - explicitly set. :param bool allow_jagged_rows: Indicates if BigQuery should accept rows that are missing trailing optional columns. :param bool allow_quoted_newlines: Indicates if BigQuery should allow @@ -3802,15 +3849,6 @@ def __init__(__self__, *, @property @pulumi.getter def quote(self) -> str: - """ - The value that is used to quote data sections in a - CSV file. If your data does not contain quoted sections, set the - property value to an empty string. If your data contains quoted newline - characters, you must also set the `allow_quoted_newlines` property to true. - The API-side default is `"`, specified in the provider escaped as `\\"`. Due to - limitations with default values, this value is required to be - explicitly set. - """ return pulumi.get(self, "quote") @property diff --git a/sdk/python/pulumi_gcp/bigquery/reservation_assignment.py b/sdk/python/pulumi_gcp/bigquery/reservation_assignment.py index 2528e785d0..c5333d92d0 100644 --- a/sdk/python/pulumi_gcp/bigquery/reservation_assignment.py +++ b/sdk/python/pulumi_gcp/bigquery/reservation_assignment.py @@ -231,21 +231,6 @@ def __init__(__self__, The BigqueryReservation Assignment resource ## Example Usage - ### Basic - ```python - import pulumi - import pulumi_gcp as gcp - - basic = gcp.bigquery.Reservation("basic", - project="my-project-name", - location="us-central1", - slot_capacity=0, - ignore_idle_slots=False) - primary = gcp.bigquery.ReservationAssignment("primary", - assignee="projects/my-project-name", - job_type="PIPELINE", - reservation=basic.id) - ``` ## Import @@ -281,21 +266,6 @@ def __init__(__self__, The BigqueryReservation Assignment resource ## Example Usage - ### Basic - ```python - import pulumi - import pulumi_gcp as gcp - - basic = gcp.bigquery.Reservation("basic", - project="my-project-name", - location="us-central1", - slot_capacity=0, - ignore_idle_slots=False) - primary = gcp.bigquery.ReservationAssignment("primary", - assignee="projects/my-project-name", - job_type="PIPELINE", - reservation=basic.id) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/bigquery/routine.py b/sdk/python/pulumi_gcp/bigquery/routine.py index 86e5703710..a526174ca4 100644 --- a/sdk/python/pulumi_gcp/bigquery/routine.py +++ b/sdk/python/pulumi_gcp/bigquery/routine.py @@ -560,61 +560,6 @@ def __init__(__self__, language="SQL", definition_body="CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);") ``` - ### Big Query Routine Json - - ```python - import pulumi - import pulumi_gcp as gcp - - test = gcp.bigquery.Dataset("test", dataset_id="dataset_id") - sproc = gcp.bigquery.Routine("sproc", - dataset_id=test.dataset_id, - routine_id="tf_test_routine_id", - routine_type="SCALAR_FUNCTION", - language="JAVASCRIPT", - definition_body="CREATE FUNCTION multiplyInputs return x*y;", - arguments=[ - gcp.bigquery.RoutineArgumentArgs( - name="x", - data_type="{\\"typeKind\\" : \\"FLOAT64\\"}", - ), - gcp.bigquery.RoutineArgumentArgs( - name="y", - data_type="{\\"typeKind\\" : \\"FLOAT64\\"}", - ), - ], - return_type="{\\"typeKind\\" : \\"FLOAT64\\"}") - ``` - ### Big Query Routine Tvf - - ```python - import pulumi - import json - import pulumi_gcp as gcp - - test = gcp.bigquery.Dataset("test", dataset_id="dataset_id") - sproc = gcp.bigquery.Routine("sproc", - dataset_id=test.dataset_id, - routine_id="tf_test_routine_id", - routine_type="TABLE_VALUED_FUNCTION", - language="SQL", - definition_body="SELECT 1 + value AS value\\n", - arguments=[gcp.bigquery.RoutineArgumentArgs( - name="value", - argument_kind="FIXED_TYPE", - data_type=json.dumps({ - "typeKind": "INT64", - }), - )], - return_table_type=json.dumps({ - "columns": [{ - "name": "value", - "type": { - "typeKind": "INT64", - }, - }], - })) - ``` ## Import @@ -695,61 +640,6 @@ def __init__(__self__, language="SQL", definition_body="CREATE FUNCTION Add(x FLOAT64, y FLOAT64) RETURNS FLOAT64 AS (x + y);") ``` - ### Big Query Routine Json - - ```python - import pulumi - import pulumi_gcp as gcp - - test = gcp.bigquery.Dataset("test", dataset_id="dataset_id") - sproc = gcp.bigquery.Routine("sproc", - dataset_id=test.dataset_id, - routine_id="tf_test_routine_id", - routine_type="SCALAR_FUNCTION", - language="JAVASCRIPT", - definition_body="CREATE FUNCTION multiplyInputs return x*y;", - arguments=[ - gcp.bigquery.RoutineArgumentArgs( - name="x", - data_type="{\\"typeKind\\" : \\"FLOAT64\\"}", - ), - gcp.bigquery.RoutineArgumentArgs( - name="y", - data_type="{\\"typeKind\\" : \\"FLOAT64\\"}", - ), - ], - return_type="{\\"typeKind\\" : \\"FLOAT64\\"}") - ``` - ### Big Query Routine Tvf - - ```python - import pulumi - import json - import pulumi_gcp as gcp - - test = gcp.bigquery.Dataset("test", dataset_id="dataset_id") - sproc = gcp.bigquery.Routine("sproc", - dataset_id=test.dataset_id, - routine_id="tf_test_routine_id", - routine_type="TABLE_VALUED_FUNCTION", - language="SQL", - definition_body="SELECT 1 + value AS value\\n", - arguments=[gcp.bigquery.RoutineArgumentArgs( - name="value", - argument_kind="FIXED_TYPE", - data_type=json.dumps({ - "typeKind": "INT64", - }), - )], - return_table_type=json.dumps({ - "columns": [{ - "name": "value", - "type": { - "typeKind": "INT64", - }, - }], - })) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/bigquery/table.py b/sdk/python/pulumi_gcp/bigquery/table.py index e2552ba1a5..bc8a1335b7 100644 --- a/sdk/python/pulumi_gcp/bigquery/table.py +++ b/sdk/python/pulumi_gcp/bigquery/table.py @@ -41,8 +41,8 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input[str]]] clusterings: Specifies column names to use for data clustering. Up to four top-level columns are allowed, and should be specified in descending priority order. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `=destroy` or `=update` that would delete the instance will fail. + :param pulumi.Input[bool] deletion_protection: Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. :param pulumi.Input[str] description: The field description. :param pulumi.Input['TableEncryptionConfigurationArgs'] encryption_configuration: Specifies how the table should be encrypted. If left blank, the table will be encrypted with a Google-managed key; that process @@ -144,8 +144,8 @@ def clusterings(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> Optional[pulumi.Input[bool]]: """ - Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `=destroy` or `=update` that would delete the instance will fail. + Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. """ return pulumi.get(self, "deletion_protection") @@ -347,8 +347,8 @@ def __init__(__self__, *, :param pulumi.Input[int] creation_time: The time when this table was created, in milliseconds since the epoch. :param pulumi.Input[str] dataset_id: The dataset ID to create the table in. Changing this forces a new resource to be created. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `=destroy` or `=update` that would delete the instance will fail. + :param pulumi.Input[bool] deletion_protection: Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. :param pulumi.Input[str] description: The field description. :param pulumi.Input['TableEncryptionConfigurationArgs'] encryption_configuration: Specifies how the table should be encrypted. If left blank, the table will be encrypted with a Google-managed key; that process @@ -480,8 +480,8 @@ def dataset_id(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> Optional[pulumi.Input[bool]]: """ - Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `=destroy` or `=update` that would delete the instance will fail. + Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. """ return pulumi.get(self, "deletion_protection") @@ -780,14 +780,6 @@ def __init__(__self__, view: Optional[pulumi.Input[pulumi.InputType['TableViewArgs']]] = None, __props__=None): """ - Creates a table resource in a dataset for Google BigQuery. For more information see - [the official documentation](https://cloud.google.com/bigquery/docs/) and - [API](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables). - - > **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false` - (and run `pulumi update` to write the field to state) in order to destroy an instance. - It is recommended to not set this field (or set it to true) until you're ready to destroy. - ## Example Usage ```python @@ -863,8 +855,8 @@ def __init__(__self__, descending priority order. :param pulumi.Input[str] dataset_id: The dataset ID to create the table in. Changing this forces a new resource to be created. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `=destroy` or `=update` that would delete the instance will fail. + :param pulumi.Input[bool] deletion_protection: Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. :param pulumi.Input[str] description: The field description. :param pulumi.Input[pulumi.InputType['TableEncryptionConfigurationArgs']] encryption_configuration: Specifies how the table should be encrypted. If left blank, the table will be encrypted with a Google-managed key; that process @@ -900,14 +892,6 @@ def __init__(__self__, args: TableArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Creates a table resource in a dataset for Google BigQuery. For more information see - [the official documentation](https://cloud.google.com/bigquery/docs/) and - [API](https://cloud.google.com/bigquery/docs/reference/rest/v2/tables). - - > **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false` - (and run `pulumi update` to write the field to state) in order to destroy an instance. - It is recommended to not set this field (or set it to true) until you're ready to destroy. - ## Example Usage ```python @@ -1093,8 +1077,8 @@ def get(resource_name: str, :param pulumi.Input[int] creation_time: The time when this table was created, in milliseconds since the epoch. :param pulumi.Input[str] dataset_id: The dataset ID to create the table in. Changing this forces a new resource to be created. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `=destroy` or `=update` that would delete the instance will fail. + :param pulumi.Input[bool] deletion_protection: Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. :param pulumi.Input[str] description: The field description. :param pulumi.Input[pulumi.InputType['TableEncryptionConfigurationArgs']] encryption_configuration: Specifies how the table should be encrypted. If left blank, the table will be encrypted with a Google-managed key; that process @@ -1194,8 +1178,8 @@ def dataset_id(self) -> pulumi.Output[str]: @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> pulumi.Output[Optional[bool]]: """ - Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `=destroy` or `=update` that would delete the instance will fail. + Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. """ return pulumi.get(self, "deletion_protection") diff --git a/sdk/python/pulumi_gcp/bigtable/instance.py b/sdk/python/pulumi_gcp/bigtable/instance.py index 4d46693e01..fb80d8ee60 100644 --- a/sdk/python/pulumi_gcp/bigtable/instance.py +++ b/sdk/python/pulumi_gcp/bigtable/instance.py @@ -28,8 +28,8 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input['InstanceClusterArgs']]] clusters: A block of cluster configuration options. This can be specified at least once, and up to as many as possible within 8 cloud regions. Removing the field entirely from the config will cause the provider to default to the backend value. See structure below. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow this provider to destroy the instance. Unless this field is set to false - in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + :param pulumi.Input[bool] deletion_protection: Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. :param pulumi.Input[str] display_name: The human-readable display name of the Bigtable instance. Defaults to the instance `name`. :param pulumi.Input[str] instance_type: The instance type to create. One of `"DEVELOPMENT"` or `"PRODUCTION"`. Defaults to `"PRODUCTION"`. It is recommended to leave this field unspecified since the distinction between `"DEVELOPMENT"` and `"PRODUCTION"` instances is going away, @@ -77,8 +77,8 @@ def clusters(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceC @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> Optional[pulumi.Input[bool]]: """ - Whether or not to allow this provider to destroy the instance. Unless this field is set to false - in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. """ return pulumi.get(self, "deletion_protection") @@ -167,8 +167,8 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input['InstanceClusterArgs']]] clusters: A block of cluster configuration options. This can be specified at least once, and up to as many as possible within 8 cloud regions. Removing the field entirely from the config will cause the provider to default to the backend value. See structure below. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow this provider to destroy the instance. Unless this field is set to false - in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + :param pulumi.Input[bool] deletion_protection: Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. :param pulumi.Input[str] display_name: The human-readable display name of the Bigtable instance. Defaults to the instance `name`. :param pulumi.Input[str] instance_type: The instance type to create. One of `"DEVELOPMENT"` or `"PRODUCTION"`. Defaults to `"PRODUCTION"`. It is recommended to leave this field unspecified since the distinction between `"DEVELOPMENT"` and `"PRODUCTION"` instances is going away, @@ -216,8 +216,8 @@ def clusters(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceC @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> Optional[pulumi.Input[bool]]: """ - Whether or not to allow this provider to destroy the instance. Unless this field is set to false - in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. """ return pulumi.get(self, "deletion_protection") @@ -305,22 +305,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - ## +--- - - subcategory: "Cloud Bigtable" - page_title: "Google: bigtable.Instance" - description: |- - Creates a Google Bigtable instance. - --- - - # bigtable.Instance - - Creates a Google Bigtable instance. For more information see: - - * [API documentation](https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters) - * How-to Guides - * [Official Documentation](https://cloud.google.com/bigtable/docs) - ## Example Usage ### Simple Instance @@ -389,8 +373,8 @@ def __init__(__self__, :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceClusterArgs']]]] clusters: A block of cluster configuration options. This can be specified at least once, and up to as many as possible within 8 cloud regions. Removing the field entirely from the config will cause the provider to default to the backend value. See structure below. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow this provider to destroy the instance. Unless this field is set to false - in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + :param pulumi.Input[bool] deletion_protection: Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. :param pulumi.Input[str] display_name: The human-readable display name of the Bigtable instance. Defaults to the instance `name`. :param pulumi.Input[str] instance_type: The instance type to create. One of `"DEVELOPMENT"` or `"PRODUCTION"`. Defaults to `"PRODUCTION"`. It is recommended to leave this field unspecified since the distinction between `"DEVELOPMENT"` and `"PRODUCTION"` instances is going away, @@ -409,22 +393,6 @@ def __init__(__self__, args: Optional[InstanceArgs] = None, opts: Optional[pulumi.ResourceOptions] = None): """ - ## +--- - - subcategory: "Cloud Bigtable" - page_title: "Google: bigtable.Instance" - description: |- - Creates a Google Bigtable instance. - --- - - # bigtable.Instance - - Creates a Google Bigtable instance. For more information see: - - * [API documentation](https://cloud.google.com/bigtable/docs/reference/admin/rest/v2/projects.instances.clusters) - * How-to Guides - * [Official Documentation](https://cloud.google.com/bigtable/docs) - ## Example Usage ### Simple Instance @@ -556,8 +524,8 @@ def get(resource_name: str, :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceClusterArgs']]]] clusters: A block of cluster configuration options. This can be specified at least once, and up to as many as possible within 8 cloud regions. Removing the field entirely from the config will cause the provider to default to the backend value. See structure below. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow this provider to destroy the instance. Unless this field is set to false - in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + :param pulumi.Input[bool] deletion_protection: Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. :param pulumi.Input[str] display_name: The human-readable display name of the Bigtable instance. Defaults to the instance `name`. :param pulumi.Input[str] instance_type: The instance type to create. One of `"DEVELOPMENT"` or `"PRODUCTION"`. Defaults to `"PRODUCTION"`. It is recommended to leave this field unspecified since the distinction between `"DEVELOPMENT"` and `"PRODUCTION"` instances is going away, @@ -596,8 +564,8 @@ def clusters(self) -> pulumi.Output[Sequence['outputs.InstanceCluster']]: @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> pulumi.Output[Optional[bool]]: """ - Whether or not to allow this provider to destroy the instance. Unless this field is set to false - in the statefile, a `pulumi destroy` or `pulumi up` that would delete the instance will fail. + Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + terraform destroy or terraform apply that would delete the instance will fail. """ return pulumi.get(self, "deletion_protection") diff --git a/sdk/python/pulumi_gcp/bigtable/instance_iam_binding.py b/sdk/python/pulumi_gcp/bigtable/instance_iam_binding.py index d49dc5af79..8c2df0e800 100644 --- a/sdk/python/pulumi_gcp/bigtable/instance_iam_binding.py +++ b/sdk/python/pulumi_gcp/bigtable/instance_iam_binding.py @@ -27,8 +27,6 @@ def __init__(__self__, *, :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). - :param pulumi.Input[str] project: The project in which the instance belongs. If it - is not provided, a default will be supplied. """ pulumi.set(__self__, "instance", instance) pulumi.set(__self__, "members", members) @@ -85,10 +83,6 @@ def condition(self, value: Optional[pulumi.Input['InstanceIamBindingConditionArg @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the instance belongs. If it - is not provided, a default will be supplied. - """ return pulumi.get(self, "project") @project.setter @@ -109,8 +103,6 @@ def __init__(__self__, *, Input properties used for looking up and filtering InstanceIamBinding resources. :param pulumi.Input[str] etag: (Computed) The etag of the instances's IAM policy. :param pulumi.Input[str] instance: The name or relative resource id of the instance to manage IAM policies for. - :param pulumi.Input[str] project: The project in which the instance belongs. If it - is not provided, a default will be supplied. :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -173,10 +165,6 @@ def members(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the instance belongs. If it - is not provided, a default will be supplied. - """ return pulumi.get(self, "project") @project.setter @@ -283,8 +271,6 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] instance: The name or relative resource id of the instance to manage IAM policies for. - :param pulumi.Input[str] project: The project in which the instance belongs. If it - is not provided, a default will be supplied. :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -432,8 +418,6 @@ def get(resource_name: str, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] etag: (Computed) The etag of the instances's IAM policy. :param pulumi.Input[str] instance: The name or relative resource id of the instance to manage IAM policies for. - :param pulumi.Input[str] project: The project in which the instance belongs. If it - is not provided, a default will be supplied. :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -479,10 +463,6 @@ def members(self) -> pulumi.Output[Sequence[str]]: @property @pulumi.getter def project(self) -> pulumi.Output[str]: - """ - The project in which the instance belongs. If it - is not provided, a default will be supplied. - """ return pulumi.get(self, "project") @property diff --git a/sdk/python/pulumi_gcp/bigtable/instance_iam_member.py b/sdk/python/pulumi_gcp/bigtable/instance_iam_member.py index 972b3457b0..a05f45f017 100644 --- a/sdk/python/pulumi_gcp/bigtable/instance_iam_member.py +++ b/sdk/python/pulumi_gcp/bigtable/instance_iam_member.py @@ -27,8 +27,6 @@ def __init__(__self__, *, :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). - :param pulumi.Input[str] project: The project in which the instance belongs. If it - is not provided, a default will be supplied. """ pulumi.set(__self__, "instance", instance) pulumi.set(__self__, "member", member) @@ -85,10 +83,6 @@ def condition(self, value: Optional[pulumi.Input['InstanceIamMemberConditionArgs @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the instance belongs. If it - is not provided, a default will be supplied. - """ return pulumi.get(self, "project") @project.setter @@ -109,8 +103,6 @@ def __init__(__self__, *, Input properties used for looking up and filtering InstanceIamMember resources. :param pulumi.Input[str] etag: (Computed) The etag of the instances's IAM policy. :param pulumi.Input[str] instance: The name or relative resource id of the instance to manage IAM policies for. - :param pulumi.Input[str] project: The project in which the instance belongs. If it - is not provided, a default will be supplied. :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -173,10 +165,6 @@ def member(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the instance belongs. If it - is not provided, a default will be supplied. - """ return pulumi.get(self, "project") @project.setter @@ -283,8 +271,6 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] instance: The name or relative resource id of the instance to manage IAM policies for. - :param pulumi.Input[str] project: The project in which the instance belongs. If it - is not provided, a default will be supplied. :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -432,8 +418,6 @@ def get(resource_name: str, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] etag: (Computed) The etag of the instances's IAM policy. :param pulumi.Input[str] instance: The name or relative resource id of the instance to manage IAM policies for. - :param pulumi.Input[str] project: The project in which the instance belongs. If it - is not provided, a default will be supplied. :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.InstanceIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -479,10 +463,6 @@ def member(self) -> pulumi.Output[str]: @property @pulumi.getter def project(self) -> pulumi.Output[str]: - """ - The project in which the instance belongs. If it - is not provided, a default will be supplied. - """ return pulumi.get(self, "project") @property diff --git a/sdk/python/pulumi_gcp/bigtable/instance_iam_policy.py b/sdk/python/pulumi_gcp/bigtable/instance_iam_policy.py index 80ee3ae766..3905cef2b0 100644 --- a/sdk/python/pulumi_gcp/bigtable/instance_iam_policy.py +++ b/sdk/python/pulumi_gcp/bigtable/instance_iam_policy.py @@ -21,8 +21,6 @@ def __init__(__self__, *, The set of arguments for constructing a InstanceIamPolicy resource. :param pulumi.Input[str] instance: The name or relative resource id of the instance to manage IAM policies for. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the instance belongs. If it - is not provided, a default will be supplied. """ pulumi.set(__self__, "instance", instance) pulumi.set(__self__, "policy_data", policy_data) @@ -56,10 +54,6 @@ def policy_data(self, value: pulumi.Input[str]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the instance belongs. If it - is not provided, a default will be supplied. - """ return pulumi.get(self, "project") @project.setter @@ -79,8 +73,6 @@ def __init__(__self__, *, :param pulumi.Input[str] etag: (Computed) The etag of the instances's IAM policy. :param pulumi.Input[str] instance: The name or relative resource id of the instance to manage IAM policies for. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the instance belongs. If it - is not provided, a default will be supplied. """ if etag is not None: pulumi.set(__self__, "etag", etag) @@ -130,10 +122,6 @@ def policy_data(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the instance belongs. If it - is not provided, a default will be supplied. - """ return pulumi.get(self, "project") @project.setter @@ -225,8 +213,6 @@ def __init__(__self__, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] instance: The name or relative resource id of the instance to manage IAM policies for. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the instance belongs. If it - is not provided, a default will be supplied. """ ... @overload @@ -364,8 +350,6 @@ def get(resource_name: str, :param pulumi.Input[str] etag: (Computed) The etag of the instances's IAM policy. :param pulumi.Input[str] instance: The name or relative resource id of the instance to manage IAM policies for. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the instance belongs. If it - is not provided, a default will be supplied. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -404,9 +388,5 @@ def policy_data(self) -> pulumi.Output[str]: @property @pulumi.getter def project(self) -> pulumi.Output[str]: - """ - The project in which the instance belongs. If it - is not provided, a default will be supplied. - """ return pulumi.get(self, "project") diff --git a/sdk/python/pulumi_gcp/bigtable/table.py b/sdk/python/pulumi_gcp/bigtable/table.py index a9e85d0c4c..ef3518b4a8 100644 --- a/sdk/python/pulumi_gcp/bigtable/table.py +++ b/sdk/python/pulumi_gcp/bigtable/table.py @@ -30,9 +30,8 @@ def __init__(__self__, *, :param pulumi.Input[str] name: The name of the table. Must be 1-50 characters and must only contain hyphens, underscores, periods, letters and numbers. :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]]] split_keys: A list of predefined keys to split the table on. - !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - to delete/recreate the entire `bigtable.Table` resource. + :param pulumi.Input[Sequence[pulumi.Input[str]]] split_keys: A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + Terraform to delete/recreate the entire google_bigtable_table resource. """ pulumi.set(__self__, "instance_name", instance_name) if column_families is not None: @@ -111,9 +110,8 @@ def project(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="splitKeys") def split_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: """ - A list of predefined keys to split the table on. - !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - to delete/recreate the entire `bigtable.Table` resource. + A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + Terraform to delete/recreate the entire google_bigtable_table resource. """ return pulumi.get(self, "split_keys") @@ -139,9 +137,8 @@ def __init__(__self__, *, :param pulumi.Input[str] name: The name of the table. Must be 1-50 characters and must only contain hyphens, underscores, periods, letters and numbers. :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]]] split_keys: A list of predefined keys to split the table on. - !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - to delete/recreate the entire `bigtable.Table` resource. + :param pulumi.Input[Sequence[pulumi.Input[str]]] split_keys: A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + Terraform to delete/recreate the entire google_bigtable_table resource. """ if column_families is not None: pulumi.set(__self__, "column_families", column_families) @@ -221,9 +218,8 @@ def project(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="splitKeys") def split_keys(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: """ - A list of predefined keys to split the table on. - !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - to delete/recreate the entire `bigtable.Table` resource. + A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + Terraform to delete/recreate the entire google_bigtable_table resource. """ return pulumi.get(self, "split_keys") @@ -245,10 +241,6 @@ def __init__(__self__, split_keys: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, __props__=None): """ - Creates a Google Cloud Bigtable table inside an instance. For more information see - [the official documentation](https://cloud.google.com/bigtable/) and - [API](https://cloud.google.com/bigtable/docs/go/reference). - ## Example Usage ```python @@ -304,9 +296,8 @@ def __init__(__self__, :param pulumi.Input[str] name: The name of the table. Must be 1-50 characters and must only contain hyphens, underscores, periods, letters and numbers. :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]]] split_keys: A list of predefined keys to split the table on. - !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - to delete/recreate the entire `bigtable.Table` resource. + :param pulumi.Input[Sequence[pulumi.Input[str]]] split_keys: A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + Terraform to delete/recreate the entire google_bigtable_table resource. """ ... @overload @@ -315,10 +306,6 @@ def __init__(__self__, args: TableArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Creates a Google Cloud Bigtable table inside an instance. For more information see - [the official documentation](https://cloud.google.com/bigtable/) and - [API](https://cloud.google.com/bigtable/docs/go/reference). - ## Example Usage ```python @@ -433,9 +420,8 @@ def get(resource_name: str, :param pulumi.Input[str] name: The name of the table. Must be 1-50 characters and must only contain hyphens, underscores, periods, letters and numbers. :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]]] split_keys: A list of predefined keys to split the table on. - !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - to delete/recreate the entire `bigtable.Table` resource. + :param pulumi.Input[Sequence[pulumi.Input[str]]] split_keys: A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + Terraform to delete/recreate the entire google_bigtable_table resource. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -494,9 +480,8 @@ def project(self) -> pulumi.Output[str]: @pulumi.getter(name="splitKeys") def split_keys(self) -> pulumi.Output[Optional[Sequence[str]]]: """ - A list of predefined keys to split the table on. - !> **Warning:** Modifying the `split_keys` of an existing table will cause the provider - to delete/recreate the entire `bigtable.Table` resource. + A list of predefined keys to split the table on. !> Warning: Modifying the split_keys of an existing table will cause + Terraform to delete/recreate the entire google_bigtable_table resource. """ return pulumi.get(self, "split_keys") diff --git a/sdk/python/pulumi_gcp/bigtable/table_iam_binding.py b/sdk/python/pulumi_gcp/bigtable/table_iam_binding.py index 2d1685231b..bf11a31924 100644 --- a/sdk/python/pulumi_gcp/bigtable/table_iam_binding.py +++ b/sdk/python/pulumi_gcp/bigtable/table_iam_binding.py @@ -29,8 +29,6 @@ def __init__(__self__, *, `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). :param pulumi.Input[str] table: The name or relative resource id of the table to manage IAM policies for. - :param pulumi.Input[str] project: The project in which the table belongs. If it - is not provided, this provider will use the provider default. """ pulumi.set(__self__, "instance", instance) pulumi.set(__self__, "members", members) @@ -100,10 +98,6 @@ def condition(self, value: Optional[pulumi.Input['TableIamBindingConditionArgs'] @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the table belongs. If it - is not provided, this provider will use the provider default. - """ return pulumi.get(self, "project") @project.setter @@ -125,8 +119,6 @@ def __init__(__self__, *, Input properties used for looking up and filtering TableIamBinding resources. :param pulumi.Input[str] etag: (Computed) The etag of the tables's IAM policy. :param pulumi.Input[str] instance: The name or relative resource id of the instance that owns the table. - :param pulumi.Input[str] project: The project in which the table belongs. If it - is not provided, this provider will use the provider default. :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -192,10 +184,6 @@ def members(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the table belongs. If it - is not provided, this provider will use the provider default. - """ return pulumi.get(self, "project") @project.setter @@ -318,8 +306,6 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] instance: The name or relative resource id of the instance that owns the table. - :param pulumi.Input[str] project: The project in which the table belongs. If it - is not provided, this provider will use the provider default. :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -476,8 +462,6 @@ def get(resource_name: str, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] etag: (Computed) The etag of the tables's IAM policy. :param pulumi.Input[str] instance: The name or relative resource id of the instance that owns the table. - :param pulumi.Input[str] project: The project in which the table belongs. If it - is not provided, this provider will use the provider default. :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -525,10 +509,6 @@ def members(self) -> pulumi.Output[Sequence[str]]: @property @pulumi.getter def project(self) -> pulumi.Output[str]: - """ - The project in which the table belongs. If it - is not provided, this provider will use the provider default. - """ return pulumi.get(self, "project") @property diff --git a/sdk/python/pulumi_gcp/bigtable/table_iam_member.py b/sdk/python/pulumi_gcp/bigtable/table_iam_member.py index 9248565b5d..2e5c1da7d7 100644 --- a/sdk/python/pulumi_gcp/bigtable/table_iam_member.py +++ b/sdk/python/pulumi_gcp/bigtable/table_iam_member.py @@ -29,8 +29,6 @@ def __init__(__self__, *, `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). :param pulumi.Input[str] table: The name or relative resource id of the table to manage IAM policies for. - :param pulumi.Input[str] project: The project in which the table belongs. If it - is not provided, this provider will use the provider default. """ pulumi.set(__self__, "instance", instance) pulumi.set(__self__, "member", member) @@ -100,10 +98,6 @@ def condition(self, value: Optional[pulumi.Input['TableIamMemberConditionArgs']] @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the table belongs. If it - is not provided, this provider will use the provider default. - """ return pulumi.get(self, "project") @project.setter @@ -125,8 +119,6 @@ def __init__(__self__, *, Input properties used for looking up and filtering TableIamMember resources. :param pulumi.Input[str] etag: (Computed) The etag of the tables's IAM policy. :param pulumi.Input[str] instance: The name or relative resource id of the instance that owns the table. - :param pulumi.Input[str] project: The project in which the table belongs. If it - is not provided, this provider will use the provider default. :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -192,10 +184,6 @@ def member(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the table belongs. If it - is not provided, this provider will use the provider default. - """ return pulumi.get(self, "project") @project.setter @@ -318,8 +306,6 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] instance: The name or relative resource id of the instance that owns the table. - :param pulumi.Input[str] project: The project in which the table belongs. If it - is not provided, this provider will use the provider default. :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -476,8 +462,6 @@ def get(resource_name: str, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] etag: (Computed) The etag of the tables's IAM policy. :param pulumi.Input[str] instance: The name or relative resource id of the instance that owns the table. - :param pulumi.Input[str] project: The project in which the table belongs. If it - is not provided, this provider will use the provider default. :param pulumi.Input[str] role: The role that should be applied. Only one `bigtable.TableIamBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. Read more about roles [here](https://cloud.google.com/bigtable/docs/access-control#roles). @@ -525,10 +509,6 @@ def member(self) -> pulumi.Output[str]: @property @pulumi.getter def project(self) -> pulumi.Output[str]: - """ - The project in which the table belongs. If it - is not provided, this provider will use the provider default. - """ return pulumi.get(self, "project") @property diff --git a/sdk/python/pulumi_gcp/bigtable/table_iam_policy.py b/sdk/python/pulumi_gcp/bigtable/table_iam_policy.py index 395bde2f43..c592a815f7 100644 --- a/sdk/python/pulumi_gcp/bigtable/table_iam_policy.py +++ b/sdk/python/pulumi_gcp/bigtable/table_iam_policy.py @@ -23,8 +23,6 @@ def __init__(__self__, *, :param pulumi.Input[str] instance: The name or relative resource id of the instance that owns the table. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. :param pulumi.Input[str] table: The name or relative resource id of the table to manage IAM policies for. - :param pulumi.Input[str] project: The project in which the table belongs. If it - is not provided, this provider will use the provider default. """ pulumi.set(__self__, "instance", instance) pulumi.set(__self__, "policy_data", policy_data) @@ -71,10 +69,6 @@ def table(self, value: pulumi.Input[str]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the table belongs. If it - is not provided, this provider will use the provider default. - """ return pulumi.get(self, "project") @project.setter @@ -95,8 +89,6 @@ def __init__(__self__, *, :param pulumi.Input[str] etag: (Computed) The etag of the tables's IAM policy. :param pulumi.Input[str] instance: The name or relative resource id of the instance that owns the table. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the table belongs. If it - is not provided, this provider will use the provider default. :param pulumi.Input[str] table: The name or relative resource id of the table to manage IAM policies for. """ if etag is not None: @@ -149,10 +141,6 @@ def policy_data(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the table belongs. If it - is not provided, this provider will use the provider default. - """ return pulumi.get(self, "project") @project.setter @@ -260,8 +248,6 @@ def __init__(__self__, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] instance: The name or relative resource id of the instance that owns the table. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the table belongs. If it - is not provided, this provider will use the provider default. :param pulumi.Input[str] table: The name or relative resource id of the table to manage IAM policies for. """ ... @@ -408,8 +394,6 @@ def get(resource_name: str, :param pulumi.Input[str] etag: (Computed) The etag of the tables's IAM policy. :param pulumi.Input[str] instance: The name or relative resource id of the instance that owns the table. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the table belongs. If it - is not provided, this provider will use the provider default. :param pulumi.Input[str] table: The name or relative resource id of the table to manage IAM policies for. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -450,10 +434,6 @@ def policy_data(self) -> pulumi.Output[str]: @property @pulumi.getter def project(self) -> pulumi.Output[str]: - """ - The project in which the table belongs. If it - is not provided, this provider will use the provider default. - """ return pulumi.get(self, "project") @property diff --git a/sdk/python/pulumi_gcp/billing/sub_account.py b/sdk/python/pulumi_gcp/billing/sub_account.py index 9a6ca32d86..808a708e6a 100644 --- a/sdk/python/pulumi_gcp/billing/sub_account.py +++ b/sdk/python/pulumi_gcp/billing/sub_account.py @@ -22,9 +22,6 @@ def __init__(__self__, *, :param pulumi.Input[str] display_name: The display name of the billing account. :param pulumi.Input[str] master_billing_account: The name of the master billing account that the subaccount will be created under in the form `{billing_account_id}` or `billingAccounts/{billing_account_id}`. - :param pulumi.Input[str] deletion_policy: If set to "RENAME_ON_DESTROY" the billing account display_name - will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - Default is "". """ pulumi.set(__self__, "display_name", display_name) pulumi.set(__self__, "master_billing_account", master_billing_account) @@ -59,11 +56,6 @@ def master_billing_account(self, value: pulumi.Input[str]): @property @pulumi.getter(name="deletionPolicy") def deletion_policy(self) -> Optional[pulumi.Input[str]]: - """ - If set to "RENAME_ON_DESTROY" the billing account display_name - will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - Default is "". - """ return pulumi.get(self, "deletion_policy") @deletion_policy.setter @@ -83,9 +75,6 @@ def __init__(__self__, *, """ Input properties used for looking up and filtering SubAccount resources. :param pulumi.Input[str] billing_account_id: The billing account id. - :param pulumi.Input[str] deletion_policy: If set to "RENAME_ON_DESTROY" the billing account display_name - will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - Default is "". :param pulumi.Input[str] display_name: The display name of the billing account. :param pulumi.Input[str] master_billing_account: The name of the master billing account that the subaccount will be created under in the form `{billing_account_id}` or `billingAccounts/{billing_account_id}`. @@ -120,11 +109,6 @@ def billing_account_id(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter(name="deletionPolicy") def deletion_policy(self) -> Optional[pulumi.Input[str]]: - """ - If set to "RENAME_ON_DESTROY" the billing account display_name - will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - Default is "". - """ return pulumi.get(self, "deletion_policy") @deletion_policy.setter @@ -191,19 +175,6 @@ def __init__(__self__, master_billing_account: Optional[pulumi.Input[str]] = None, __props__=None): """ - Allows creation and management of a Google Cloud Billing Subaccount. - - !> **WARNING:** Deleting this resource will not delete or close the billing subaccount. - - ```python - import pulumi - import pulumi_gcp as gcp - - subaccount = gcp.billing.SubAccount("subaccount", - display_name="My Billing Account", - master_billing_account="012345-567890-ABCDEF") - ``` - ## Import Billing Subaccounts can be imported using any of these accepted formats @@ -214,9 +185,6 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. - :param pulumi.Input[str] deletion_policy: If set to "RENAME_ON_DESTROY" the billing account display_name - will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - Default is "". :param pulumi.Input[str] display_name: The display name of the billing account. :param pulumi.Input[str] master_billing_account: The name of the master billing account that the subaccount will be created under in the form `{billing_account_id}` or `billingAccounts/{billing_account_id}`. @@ -228,19 +196,6 @@ def __init__(__self__, args: SubAccountArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Allows creation and management of a Google Cloud Billing Subaccount. - - !> **WARNING:** Deleting this resource will not delete or close the billing subaccount. - - ```python - import pulumi - import pulumi_gcp as gcp - - subaccount = gcp.billing.SubAccount("subaccount", - display_name="My Billing Account", - master_billing_account="012345-567890-ABCDEF") - ``` - ## Import Billing Subaccounts can be imported using any of these accepted formats @@ -310,9 +265,6 @@ def get(resource_name: str, :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] billing_account_id: The billing account id. - :param pulumi.Input[str] deletion_policy: If set to "RENAME_ON_DESTROY" the billing account display_name - will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - Default is "". :param pulumi.Input[str] display_name: The display name of the billing account. :param pulumi.Input[str] master_billing_account: The name of the master billing account that the subaccount will be created under in the form `{billing_account_id}` or `billingAccounts/{billing_account_id}`. @@ -342,11 +294,6 @@ def billing_account_id(self) -> pulumi.Output[str]: @property @pulumi.getter(name="deletionPolicy") def deletion_policy(self) -> pulumi.Output[Optional[str]]: - """ - If set to "RENAME_ON_DESTROY" the billing account display_name - will be changed to "Destroyed" along with a timestamp. If set to "" this will not occur. - Default is "". - """ return pulumi.get(self, "deletion_policy") @property diff --git a/sdk/python/pulumi_gcp/certificatemanager/_inputs.py b/sdk/python/pulumi_gcp/certificatemanager/_inputs.py index b2153fabc1..76a6a46d4d 100644 --- a/sdk/python/pulumi_gcp/certificatemanager/_inputs.py +++ b/sdk/python/pulumi_gcp/certificatemanager/_inputs.py @@ -364,7 +364,6 @@ def __init__(__self__, *, **Note**: This property is sensitive and will not be displayed in the plan. :param pulumi.Input[str] pem_certificate: The certificate chain in PEM-encoded form. Leaf certificate comes first, followed by intermediate ones if any. - **Note**: This property is sensitive and will not be displayed in the plan. :param pulumi.Input[str] pem_private_key: The private key of the leaf certificate in PEM-encoded form. **Note**: This property is sensitive and will not be displayed in the plan. :param pulumi.Input[str] private_key_pem: (Optional, Deprecated) @@ -407,7 +406,6 @@ def pem_certificate(self) -> Optional[pulumi.Input[str]]: """ The certificate chain in PEM-encoded form. Leaf certificate comes first, followed by intermediate ones if any. - **Note**: This property is sensitive and will not be displayed in the plan. """ return pulumi.get(self, "pem_certificate") diff --git a/sdk/python/pulumi_gcp/certificatemanager/certificate.py b/sdk/python/pulumi_gcp/certificatemanager/certificate.py index 0df7395b68..91eb96d3b3 100644 --- a/sdk/python/pulumi_gcp/certificatemanager/certificate.py +++ b/sdk/python/pulumi_gcp/certificatemanager/certificate.py @@ -324,30 +324,18 @@ def __init__(__self__, __props__=None): """ ## Example Usage - ### Certificate Manager Certificate Basic + ### Certificate Manager Self Managed Certificate ```python import pulumi import pulumi_gcp as gcp - instance = gcp.certificatemanager.DnsAuthorization("instance", - description="The default dnss", - domain="subdomain.hashicorptest.com") - instance2 = gcp.certificatemanager.DnsAuthorization("instance2", - description="The default dnss", - domain="subdomain2.hashicorptest.com") default = gcp.certificatemanager.Certificate("default", description="The default cert", scope="EDGE_CACHE", - managed=gcp.certificatemanager.CertificateManagedArgs( - domains=[ - instance.domain, - instance2.domain, - ], - dns_authorizations=[ - instance.id, - instance2.id, - ], + self_managed=gcp.certificatemanager.CertificateSelfManagedArgs( + pem_certificate=(lambda path: open(path).read())("test-fixtures/certificatemanager/cert.pem"), + pem_private_key=(lambda path: open(path).read())("test-fixtures/certificatemanager/private-key.pem"), )) ``` @@ -399,30 +387,18 @@ def __init__(__self__, opts: Optional[pulumi.ResourceOptions] = None): """ ## Example Usage - ### Certificate Manager Certificate Basic + ### Certificate Manager Self Managed Certificate ```python import pulumi import pulumi_gcp as gcp - instance = gcp.certificatemanager.DnsAuthorization("instance", - description="The default dnss", - domain="subdomain.hashicorptest.com") - instance2 = gcp.certificatemanager.DnsAuthorization("instance2", - description="The default dnss", - domain="subdomain2.hashicorptest.com") default = gcp.certificatemanager.Certificate("default", description="The default cert", scope="EDGE_CACHE", - managed=gcp.certificatemanager.CertificateManagedArgs( - domains=[ - instance.domain, - instance2.domain, - ], - dns_authorizations=[ - instance.id, - instance2.id, - ], + self_managed=gcp.certificatemanager.CertificateSelfManagedArgs( + pem_certificate=(lambda path: open(path).read())("test-fixtures/certificatemanager/cert.pem"), + pem_private_key=(lambda path: open(path).read())("test-fixtures/certificatemanager/private-key.pem"), )) ``` diff --git a/sdk/python/pulumi_gcp/certificatemanager/outputs.py b/sdk/python/pulumi_gcp/certificatemanager/outputs.py index 74b19332b6..6ff35a1e46 100644 --- a/sdk/python/pulumi_gcp/certificatemanager/outputs.py +++ b/sdk/python/pulumi_gcp/certificatemanager/outputs.py @@ -400,7 +400,6 @@ def __init__(__self__, *, **Note**: This property is sensitive and will not be displayed in the plan. :param str pem_certificate: The certificate chain in PEM-encoded form. Leaf certificate comes first, followed by intermediate ones if any. - **Note**: This property is sensitive and will not be displayed in the plan. :param str pem_private_key: The private key of the leaf certificate in PEM-encoded form. **Note**: This property is sensitive and will not be displayed in the plan. :param str private_key_pem: (Optional, Deprecated) @@ -433,7 +432,6 @@ def pem_certificate(self) -> Optional[str]: """ The certificate chain in PEM-encoded form. Leaf certificate comes first, followed by intermediate ones if any. - **Note**: This property is sensitive and will not be displayed in the plan. """ return pulumi.get(self, "pem_certificate") diff --git a/sdk/python/pulumi_gcp/cloudbuild/_inputs.py b/sdk/python/pulumi_gcp/cloudbuild/_inputs.py index 41220b689d..e7af077d9b 100644 --- a/sdk/python/pulumi_gcp/cloudbuild/_inputs.py +++ b/sdk/python/pulumi_gcp/cloudbuild/_inputs.py @@ -30,6 +30,9 @@ 'TriggerGithubPullRequestArgs', 'TriggerGithubPushArgs', 'TriggerPubsubConfigArgs', + 'TriggerRepositoryEventConfigArgs', + 'TriggerRepositoryEventConfigPullRequestArgs', + 'TriggerRepositoryEventConfigPushArgs', 'TriggerSourceToBuildArgs', 'TriggerTriggerTemplateArgs', 'TriggerWebhookConfigArgs', @@ -1456,6 +1459,7 @@ class TriggerGitFileSourceArgs: def __init__(__self__, *, path: pulumi.Input[str], repo_type: pulumi.Input[str], + github_enterprise_config: Optional[pulumi.Input[str]] = None, revision: Optional[pulumi.Input[str]] = None, uri: Optional[pulumi.Input[str]] = None): """ @@ -1463,6 +1467,8 @@ def __init__(__self__, *, :param pulumi.Input[str] repo_type: The type of the repo, since it may not be explicit from the repo field (e.g from a URL). Values can be UNKNOWN, CLOUD_SOURCE_REPOSITORIES, GITHUB, BITBUCKET_SERVER Possible values are `UNKNOWN`, `CLOUD_SOURCE_REPOSITORIES`, `GITHUB`, and `BITBUCKET_SERVER`. + :param pulumi.Input[str] github_enterprise_config: The full resource name of the github enterprise config. + Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. :param pulumi.Input[str] revision: The branch, tag, arbitrary ref, or SHA version of the repo to use when resolving the filename (optional). This field respects the same syntax/resolution as described here: https://git-scm.com/docs/gitrevisions If unspecified, the revision from which the trigger invocation originated is assumed to be the revision from which to read the specified path. @@ -1471,6 +1477,8 @@ def __init__(__self__, *, """ pulumi.set(__self__, "path", path) pulumi.set(__self__, "repo_type", repo_type) + if github_enterprise_config is not None: + pulumi.set(__self__, "github_enterprise_config", github_enterprise_config) if revision is not None: pulumi.set(__self__, "revision", revision) if uri is not None: @@ -1502,6 +1510,19 @@ def repo_type(self) -> pulumi.Input[str]: def repo_type(self, value: pulumi.Input[str]): pulumi.set(self, "repo_type", value) + @property + @pulumi.getter(name="githubEnterpriseConfig") + def github_enterprise_config(self) -> Optional[pulumi.Input[str]]: + """ + The full resource name of the github enterprise config. + Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + """ + return pulumi.get(self, "github_enterprise_config") + + @github_enterprise_config.setter + def github_enterprise_config(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "github_enterprise_config", value) + @property @pulumi.getter def revision(self) -> Optional[pulumi.Input[str]]: @@ -1792,22 +1813,198 @@ def subscription(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "subscription", value) +@pulumi.input_type +class TriggerRepositoryEventConfigArgs: + def __init__(__self__, *, + pull_request: Optional[pulumi.Input['TriggerRepositoryEventConfigPullRequestArgs']] = None, + push: Optional[pulumi.Input['TriggerRepositoryEventConfigPushArgs']] = None, + repository: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input['TriggerRepositoryEventConfigPullRequestArgs'] pull_request: Contains filter properties for matching Pull Requests. + Structure is documented below. + :param pulumi.Input['TriggerRepositoryEventConfigPushArgs'] push: Contains filter properties for matching git pushes. + Structure is documented below. + :param pulumi.Input[str] repository: The resource name of the Repo API resource. + """ + if pull_request is not None: + pulumi.set(__self__, "pull_request", pull_request) + if push is not None: + pulumi.set(__self__, "push", push) + if repository is not None: + pulumi.set(__self__, "repository", repository) + + @property + @pulumi.getter(name="pullRequest") + def pull_request(self) -> Optional[pulumi.Input['TriggerRepositoryEventConfigPullRequestArgs']]: + """ + Contains filter properties for matching Pull Requests. + Structure is documented below. + """ + return pulumi.get(self, "pull_request") + + @pull_request.setter + def pull_request(self, value: Optional[pulumi.Input['TriggerRepositoryEventConfigPullRequestArgs']]): + pulumi.set(self, "pull_request", value) + + @property + @pulumi.getter + def push(self) -> Optional[pulumi.Input['TriggerRepositoryEventConfigPushArgs']]: + """ + Contains filter properties for matching git pushes. + Structure is documented below. + """ + return pulumi.get(self, "push") + + @push.setter + def push(self, value: Optional[pulumi.Input['TriggerRepositoryEventConfigPushArgs']]): + pulumi.set(self, "push", value) + + @property + @pulumi.getter + def repository(self) -> Optional[pulumi.Input[str]]: + """ + The resource name of the Repo API resource. + """ + return pulumi.get(self, "repository") + + @repository.setter + def repository(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "repository", value) + + +@pulumi.input_type +class TriggerRepositoryEventConfigPullRequestArgs: + def __init__(__self__, *, + branch: Optional[pulumi.Input[str]] = None, + comment_control: Optional[pulumi.Input[str]] = None, + invert_regex: Optional[pulumi.Input[bool]] = None): + """ + :param pulumi.Input[str] branch: Regex of branches to match. + :param pulumi.Input[str] comment_control: Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + :param pulumi.Input[bool] invert_regex: If true, branches that do NOT match the git_ref will trigger a build. + """ + if branch is not None: + pulumi.set(__self__, "branch", branch) + if comment_control is not None: + pulumi.set(__self__, "comment_control", comment_control) + if invert_regex is not None: + pulumi.set(__self__, "invert_regex", invert_regex) + + @property + @pulumi.getter + def branch(self) -> Optional[pulumi.Input[str]]: + """ + Regex of branches to match. + """ + return pulumi.get(self, "branch") + + @branch.setter + def branch(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "branch", value) + + @property + @pulumi.getter(name="commentControl") + def comment_control(self) -> Optional[pulumi.Input[str]]: + """ + Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + """ + return pulumi.get(self, "comment_control") + + @comment_control.setter + def comment_control(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "comment_control", value) + + @property + @pulumi.getter(name="invertRegex") + def invert_regex(self) -> Optional[pulumi.Input[bool]]: + """ + If true, branches that do NOT match the git_ref will trigger a build. + """ + return pulumi.get(self, "invert_regex") + + @invert_regex.setter + def invert_regex(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "invert_regex", value) + + +@pulumi.input_type +class TriggerRepositoryEventConfigPushArgs: + def __init__(__self__, *, + branch: Optional[pulumi.Input[str]] = None, + invert_regex: Optional[pulumi.Input[bool]] = None, + tag: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] branch: Regex of branches to match. Specify only one of branch or tag. + :param pulumi.Input[bool] invert_regex: When true, only trigger a build if the revision regex does NOT match the git_ref regex. + :param pulumi.Input[str] tag: Regex of tags to match. Specify only one of branch or tag. + """ + if branch is not None: + pulumi.set(__self__, "branch", branch) + if invert_regex is not None: + pulumi.set(__self__, "invert_regex", invert_regex) + if tag is not None: + pulumi.set(__self__, "tag", tag) + + @property + @pulumi.getter + def branch(self) -> Optional[pulumi.Input[str]]: + """ + Regex of branches to match. Specify only one of branch or tag. + """ + return pulumi.get(self, "branch") + + @branch.setter + def branch(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "branch", value) + + @property + @pulumi.getter(name="invertRegex") + def invert_regex(self) -> Optional[pulumi.Input[bool]]: + """ + When true, only trigger a build if the revision regex does NOT match the git_ref regex. + """ + return pulumi.get(self, "invert_regex") + + @invert_regex.setter + def invert_regex(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "invert_regex", value) + + @property + @pulumi.getter + def tag(self) -> Optional[pulumi.Input[str]]: + """ + Regex of tags to match. Specify only one of branch or tag. + """ + return pulumi.get(self, "tag") + + @tag.setter + def tag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "tag", value) + + @pulumi.input_type class TriggerSourceToBuildArgs: def __init__(__self__, *, ref: pulumi.Input[str], repo_type: pulumi.Input[str], - uri: pulumi.Input[str]): + uri: pulumi.Input[str], + github_enterprise_config: Optional[pulumi.Input[str]] = None): """ :param pulumi.Input[str] ref: The branch or tag to use. Must start with "refs/" (required). :param pulumi.Input[str] repo_type: The type of the repo, since it may not be explicit from the repo field (e.g from a URL). Values can be UNKNOWN, CLOUD_SOURCE_REPOSITORIES, GITHUB, BITBUCKET_SERVER Possible values are `UNKNOWN`, `CLOUD_SOURCE_REPOSITORIES`, `GITHUB`, and `BITBUCKET_SERVER`. :param pulumi.Input[str] uri: The URI of the repo (required). + :param pulumi.Input[str] github_enterprise_config: The full resource name of the github enterprise config. + Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. """ pulumi.set(__self__, "ref", ref) pulumi.set(__self__, "repo_type", repo_type) pulumi.set(__self__, "uri", uri) + if github_enterprise_config is not None: + pulumi.set(__self__, "github_enterprise_config", github_enterprise_config) @property @pulumi.getter @@ -1847,6 +2044,19 @@ def uri(self) -> pulumi.Input[str]: def uri(self, value: pulumi.Input[str]): pulumi.set(self, "uri", value) + @property + @pulumi.getter(name="githubEnterpriseConfig") + def github_enterprise_config(self) -> Optional[pulumi.Input[str]]: + """ + The full resource name of the github enterprise config. + Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + """ + return pulumi.get(self, "github_enterprise_config") + + @github_enterprise_config.setter + def github_enterprise_config(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "github_enterprise_config", value) + @pulumi.input_type class TriggerTriggerTemplateArgs: diff --git a/sdk/python/pulumi_gcp/cloudbuild/get_trigger.py b/sdk/python/pulumi_gcp/cloudbuild/get_trigger.py index 2fe2e909c0..42c65519c2 100644 --- a/sdk/python/pulumi_gcp/cloudbuild/get_trigger.py +++ b/sdk/python/pulumi_gcp/cloudbuild/get_trigger.py @@ -22,7 +22,7 @@ class GetTriggerResult: """ A collection of values returned by getTrigger. """ - def __init__(__self__, approval_configs=None, builds=None, create_time=None, description=None, disabled=None, filename=None, filter=None, git_file_sources=None, githubs=None, id=None, ignored_files=None, include_build_logs=None, included_files=None, location=None, name=None, project=None, pubsub_configs=None, service_account=None, source_to_builds=None, substitutions=None, tags=None, trigger_id=None, trigger_templates=None, webhook_configs=None): + def __init__(__self__, approval_configs=None, builds=None, create_time=None, description=None, disabled=None, filename=None, filter=None, git_file_sources=None, githubs=None, id=None, ignored_files=None, include_build_logs=None, included_files=None, location=None, name=None, project=None, pubsub_configs=None, repository_event_configs=None, service_account=None, source_to_builds=None, substitutions=None, tags=None, trigger_id=None, trigger_templates=None, webhook_configs=None): if approval_configs and not isinstance(approval_configs, list): raise TypeError("Expected argument 'approval_configs' to be a list") pulumi.set(__self__, "approval_configs", approval_configs) @@ -74,6 +74,9 @@ def __init__(__self__, approval_configs=None, builds=None, create_time=None, des if pubsub_configs and not isinstance(pubsub_configs, list): raise TypeError("Expected argument 'pubsub_configs' to be a list") pulumi.set(__self__, "pubsub_configs", pubsub_configs) + if repository_event_configs and not isinstance(repository_event_configs, list): + raise TypeError("Expected argument 'repository_event_configs' to be a list") + pulumi.set(__self__, "repository_event_configs", repository_event_configs) if service_account and not isinstance(service_account, str): raise TypeError("Expected argument 'service_account' to be a str") pulumi.set(__self__, "service_account", service_account) @@ -184,6 +187,11 @@ def project(self) -> Optional[str]: def pubsub_configs(self) -> Sequence['outputs.GetTriggerPubsubConfigResult']: return pulumi.get(self, "pubsub_configs") + @property + @pulumi.getter(name="repositoryEventConfigs") + def repository_event_configs(self) -> Sequence['outputs.GetTriggerRepositoryEventConfigResult']: + return pulumi.get(self, "repository_event_configs") + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> str: @@ -243,6 +251,7 @@ def __await__(self): name=self.name, project=self.project, pubsub_configs=self.pubsub_configs, + repository_event_configs=self.repository_event_configs, service_account=self.service_account, source_to_builds=self.source_to_builds, substitutions=self.substitutions, @@ -304,6 +313,7 @@ def get_trigger(location: Optional[str] = None, name=__ret__.name, project=__ret__.project, pubsub_configs=__ret__.pubsub_configs, + repository_event_configs=__ret__.repository_event_configs, service_account=__ret__.service_account, source_to_builds=__ret__.source_to_builds, substitutions=__ret__.substitutions, diff --git a/sdk/python/pulumi_gcp/cloudbuild/outputs.py b/sdk/python/pulumi_gcp/cloudbuild/outputs.py index 80e03dd300..5d90312ec9 100644 --- a/sdk/python/pulumi_gcp/cloudbuild/outputs.py +++ b/sdk/python/pulumi_gcp/cloudbuild/outputs.py @@ -31,6 +31,9 @@ 'TriggerGithubPullRequest', 'TriggerGithubPush', 'TriggerPubsubConfig', + 'TriggerRepositoryEventConfig', + 'TriggerRepositoryEventConfigPullRequest', + 'TriggerRepositoryEventConfigPush', 'TriggerSourceToBuild', 'TriggerTriggerTemplate', 'TriggerWebhookConfig', @@ -56,6 +59,9 @@ 'GetTriggerGithubPullRequestResult', 'GetTriggerGithubPushResult', 'GetTriggerPubsubConfigResult', + 'GetTriggerRepositoryEventConfigResult', + 'GetTriggerRepositoryEventConfigPullRequestResult', + 'GetTriggerRepositoryEventConfigPushResult', 'GetTriggerSourceToBuildResult', 'GetTriggerTriggerTemplateResult', 'GetTriggerWebhookConfigResult', @@ -1426,6 +1432,8 @@ def __key_warning(key: str): suggest = None if key == "repoType": suggest = "repo_type" + elif key == "githubEnterpriseConfig": + suggest = "github_enterprise_config" if suggest: pulumi.log.warn(f"Key '{key}' not found in TriggerGitFileSource. Access the value via the '{suggest}' property getter instead.") @@ -1441,6 +1449,7 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, path: str, repo_type: str, + github_enterprise_config: Optional[str] = None, revision: Optional[str] = None, uri: Optional[str] = None): """ @@ -1448,6 +1457,8 @@ def __init__(__self__, *, :param str repo_type: The type of the repo, since it may not be explicit from the repo field (e.g from a URL). Values can be UNKNOWN, CLOUD_SOURCE_REPOSITORIES, GITHUB, BITBUCKET_SERVER Possible values are `UNKNOWN`, `CLOUD_SOURCE_REPOSITORIES`, `GITHUB`, and `BITBUCKET_SERVER`. + :param str github_enterprise_config: The full resource name of the github enterprise config. + Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. :param str revision: The branch, tag, arbitrary ref, or SHA version of the repo to use when resolving the filename (optional). This field respects the same syntax/resolution as described here: https://git-scm.com/docs/gitrevisions If unspecified, the revision from which the trigger invocation originated is assumed to be the revision from which to read the specified path. @@ -1456,6 +1467,8 @@ def __init__(__self__, *, """ pulumi.set(__self__, "path", path) pulumi.set(__self__, "repo_type", repo_type) + if github_enterprise_config is not None: + pulumi.set(__self__, "github_enterprise_config", github_enterprise_config) if revision is not None: pulumi.set(__self__, "revision", revision) if uri is not None: @@ -1479,6 +1492,15 @@ def repo_type(self) -> str: """ return pulumi.get(self, "repo_type") + @property + @pulumi.getter(name="githubEnterpriseConfig") + def github_enterprise_config(self) -> Optional[str]: + """ + The full resource name of the github enterprise config. + Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + """ + return pulumi.get(self, "github_enterprise_config") + @property @pulumi.getter def revision(self) -> Optional[str]: @@ -1775,6 +1797,194 @@ def subscription(self) -> Optional[str]: return pulumi.get(self, "subscription") +@pulumi.output_type +class TriggerRepositoryEventConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "pullRequest": + suggest = "pull_request" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in TriggerRepositoryEventConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + TriggerRepositoryEventConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + TriggerRepositoryEventConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + pull_request: Optional['outputs.TriggerRepositoryEventConfigPullRequest'] = None, + push: Optional['outputs.TriggerRepositoryEventConfigPush'] = None, + repository: Optional[str] = None): + """ + :param 'TriggerRepositoryEventConfigPullRequestArgs' pull_request: Contains filter properties for matching Pull Requests. + Structure is documented below. + :param 'TriggerRepositoryEventConfigPushArgs' push: Contains filter properties for matching git pushes. + Structure is documented below. + :param str repository: The resource name of the Repo API resource. + """ + if pull_request is not None: + pulumi.set(__self__, "pull_request", pull_request) + if push is not None: + pulumi.set(__self__, "push", push) + if repository is not None: + pulumi.set(__self__, "repository", repository) + + @property + @pulumi.getter(name="pullRequest") + def pull_request(self) -> Optional['outputs.TriggerRepositoryEventConfigPullRequest']: + """ + Contains filter properties for matching Pull Requests. + Structure is documented below. + """ + return pulumi.get(self, "pull_request") + + @property + @pulumi.getter + def push(self) -> Optional['outputs.TriggerRepositoryEventConfigPush']: + """ + Contains filter properties for matching git pushes. + Structure is documented below. + """ + return pulumi.get(self, "push") + + @property + @pulumi.getter + def repository(self) -> Optional[str]: + """ + The resource name of the Repo API resource. + """ + return pulumi.get(self, "repository") + + +@pulumi.output_type +class TriggerRepositoryEventConfigPullRequest(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "commentControl": + suggest = "comment_control" + elif key == "invertRegex": + suggest = "invert_regex" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in TriggerRepositoryEventConfigPullRequest. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + TriggerRepositoryEventConfigPullRequest.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + TriggerRepositoryEventConfigPullRequest.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + branch: Optional[str] = None, + comment_control: Optional[str] = None, + invert_regex: Optional[bool] = None): + """ + :param str branch: Regex of branches to match. + :param str comment_control: Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + :param bool invert_regex: If true, branches that do NOT match the git_ref will trigger a build. + """ + if branch is not None: + pulumi.set(__self__, "branch", branch) + if comment_control is not None: + pulumi.set(__self__, "comment_control", comment_control) + if invert_regex is not None: + pulumi.set(__self__, "invert_regex", invert_regex) + + @property + @pulumi.getter + def branch(self) -> Optional[str]: + """ + Regex of branches to match. + """ + return pulumi.get(self, "branch") + + @property + @pulumi.getter(name="commentControl") + def comment_control(self) -> Optional[str]: + """ + Whether to block builds on a "/gcbrun" comment from a repository owner or collaborator. + Possible values are `COMMENTS_DISABLED`, `COMMENTS_ENABLED`, and `COMMENTS_ENABLED_FOR_EXTERNAL_CONTRIBUTORS_ONLY`. + """ + return pulumi.get(self, "comment_control") + + @property + @pulumi.getter(name="invertRegex") + def invert_regex(self) -> Optional[bool]: + """ + If true, branches that do NOT match the git_ref will trigger a build. + """ + return pulumi.get(self, "invert_regex") + + +@pulumi.output_type +class TriggerRepositoryEventConfigPush(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "invertRegex": + suggest = "invert_regex" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in TriggerRepositoryEventConfigPush. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + TriggerRepositoryEventConfigPush.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + TriggerRepositoryEventConfigPush.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + branch: Optional[str] = None, + invert_regex: Optional[bool] = None, + tag: Optional[str] = None): + """ + :param str branch: Regex of branches to match. Specify only one of branch or tag. + :param bool invert_regex: When true, only trigger a build if the revision regex does NOT match the git_ref regex. + :param str tag: Regex of tags to match. Specify only one of branch or tag. + """ + if branch is not None: + pulumi.set(__self__, "branch", branch) + if invert_regex is not None: + pulumi.set(__self__, "invert_regex", invert_regex) + if tag is not None: + pulumi.set(__self__, "tag", tag) + + @property + @pulumi.getter + def branch(self) -> Optional[str]: + """ + Regex of branches to match. Specify only one of branch or tag. + """ + return pulumi.get(self, "branch") + + @property + @pulumi.getter(name="invertRegex") + def invert_regex(self) -> Optional[bool]: + """ + When true, only trigger a build if the revision regex does NOT match the git_ref regex. + """ + return pulumi.get(self, "invert_regex") + + @property + @pulumi.getter + def tag(self) -> Optional[str]: + """ + Regex of tags to match. Specify only one of branch or tag. + """ + return pulumi.get(self, "tag") + + @pulumi.output_type class TriggerSourceToBuild(dict): @staticmethod @@ -1782,6 +1992,8 @@ def __key_warning(key: str): suggest = None if key == "repoType": suggest = "repo_type" + elif key == "githubEnterpriseConfig": + suggest = "github_enterprise_config" if suggest: pulumi.log.warn(f"Key '{key}' not found in TriggerSourceToBuild. Access the value via the '{suggest}' property getter instead.") @@ -1797,17 +2009,22 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, ref: str, repo_type: str, - uri: str): + uri: str, + github_enterprise_config: Optional[str] = None): """ :param str ref: The branch or tag to use. Must start with "refs/" (required). :param str repo_type: The type of the repo, since it may not be explicit from the repo field (e.g from a URL). Values can be UNKNOWN, CLOUD_SOURCE_REPOSITORIES, GITHUB, BITBUCKET_SERVER Possible values are `UNKNOWN`, `CLOUD_SOURCE_REPOSITORIES`, `GITHUB`, and `BITBUCKET_SERVER`. :param str uri: The URI of the repo (required). + :param str github_enterprise_config: The full resource name of the github enterprise config. + Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. """ pulumi.set(__self__, "ref", ref) pulumi.set(__self__, "repo_type", repo_type) pulumi.set(__self__, "uri", uri) + if github_enterprise_config is not None: + pulumi.set(__self__, "github_enterprise_config", github_enterprise_config) @property @pulumi.getter @@ -1835,6 +2052,15 @@ def uri(self) -> str: """ return pulumi.get(self, "uri") + @property + @pulumi.getter(name="githubEnterpriseConfig") + def github_enterprise_config(self) -> Optional[str]: + """ + The full resource name of the github enterprise config. + Format: projects/{project}/locations/{location}/githubEnterpriseConfigs/{id}. projects/{project}/githubEnterpriseConfigs/{id}. + """ + return pulumi.get(self, "github_enterprise_config") + @pulumi.output_type class TriggerTriggerTemplate(dict): @@ -2643,15 +2869,22 @@ def path(self) -> str: @pulumi.output_type class GetTriggerGitFileSourceResult(dict): def __init__(__self__, *, + github_enterprise_config: str, path: str, repo_type: str, revision: str, uri: str): + pulumi.set(__self__, "github_enterprise_config", github_enterprise_config) pulumi.set(__self__, "path", path) pulumi.set(__self__, "repo_type", repo_type) pulumi.set(__self__, "revision", revision) pulumi.set(__self__, "uri", uri) + @property + @pulumi.getter(name="githubEnterpriseConfig") + def github_enterprise_config(self) -> str: + return pulumi.get(self, "github_enterprise_config") + @property @pulumi.getter def path(self) -> str: @@ -2791,16 +3024,101 @@ def topic(self) -> str: return pulumi.get(self, "topic") +@pulumi.output_type +class GetTriggerRepositoryEventConfigResult(dict): + def __init__(__self__, *, + pull_requests: Sequence['outputs.GetTriggerRepositoryEventConfigPullRequestResult'], + pushes: Sequence['outputs.GetTriggerRepositoryEventConfigPushResult'], + repository: str): + pulumi.set(__self__, "pull_requests", pull_requests) + pulumi.set(__self__, "pushes", pushes) + pulumi.set(__self__, "repository", repository) + + @property + @pulumi.getter(name="pullRequests") + def pull_requests(self) -> Sequence['outputs.GetTriggerRepositoryEventConfigPullRequestResult']: + return pulumi.get(self, "pull_requests") + + @property + @pulumi.getter + def pushes(self) -> Sequence['outputs.GetTriggerRepositoryEventConfigPushResult']: + return pulumi.get(self, "pushes") + + @property + @pulumi.getter + def repository(self) -> str: + return pulumi.get(self, "repository") + + +@pulumi.output_type +class GetTriggerRepositoryEventConfigPullRequestResult(dict): + def __init__(__self__, *, + branch: str, + comment_control: str, + invert_regex: bool): + pulumi.set(__self__, "branch", branch) + pulumi.set(__self__, "comment_control", comment_control) + pulumi.set(__self__, "invert_regex", invert_regex) + + @property + @pulumi.getter + def branch(self) -> str: + return pulumi.get(self, "branch") + + @property + @pulumi.getter(name="commentControl") + def comment_control(self) -> str: + return pulumi.get(self, "comment_control") + + @property + @pulumi.getter(name="invertRegex") + def invert_regex(self) -> bool: + return pulumi.get(self, "invert_regex") + + +@pulumi.output_type +class GetTriggerRepositoryEventConfigPushResult(dict): + def __init__(__self__, *, + branch: str, + invert_regex: bool, + tag: str): + pulumi.set(__self__, "branch", branch) + pulumi.set(__self__, "invert_regex", invert_regex) + pulumi.set(__self__, "tag", tag) + + @property + @pulumi.getter + def branch(self) -> str: + return pulumi.get(self, "branch") + + @property + @pulumi.getter(name="invertRegex") + def invert_regex(self) -> bool: + return pulumi.get(self, "invert_regex") + + @property + @pulumi.getter + def tag(self) -> str: + return pulumi.get(self, "tag") + + @pulumi.output_type class GetTriggerSourceToBuildResult(dict): def __init__(__self__, *, + github_enterprise_config: str, ref: str, repo_type: str, uri: str): + pulumi.set(__self__, "github_enterprise_config", github_enterprise_config) pulumi.set(__self__, "ref", ref) pulumi.set(__self__, "repo_type", repo_type) pulumi.set(__self__, "uri", uri) + @property + @pulumi.getter(name="githubEnterpriseConfig") + def github_enterprise_config(self) -> str: + return pulumi.get(self, "github_enterprise_config") + @property @pulumi.getter def ref(self) -> str: diff --git a/sdk/python/pulumi_gcp/cloudbuild/trigger.py b/sdk/python/pulumi_gcp/cloudbuild/trigger.py index a7d55355e9..7535f21d56 100644 --- a/sdk/python/pulumi_gcp/cloudbuild/trigger.py +++ b/sdk/python/pulumi_gcp/cloudbuild/trigger.py @@ -31,6 +31,7 @@ def __init__(__self__, *, name: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, pubsub_config: Optional[pulumi.Input['TriggerPubsubConfigArgs']] = None, + repository_event_config: Optional[pulumi.Input['TriggerRepositoryEventConfigArgs']] = None, service_account: Optional[pulumi.Input[str]] = None, source_to_build: Optional[pulumi.Input['TriggerSourceToBuildArgs']] = None, substitutions: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -85,6 +86,7 @@ def __init__(__self__, *, a build whenever a Pub/Sub message is published. One of `trigger_template`, `github`, `pubsub_config` `webhook_config` or `source_to_build` must be provided. Structure is documented below. + :param pulumi.Input['TriggerRepositoryEventConfigArgs'] repository_event_config: The configuration of a trigger that creates a build whenever an event from Repo API is received. :param pulumi.Input[str] service_account: The service account used for all user-controlled operations including triggers.patch, triggers.run, builds.create, and builds.cancel. If no service account is set, then the standard Cloud Build service account @@ -139,6 +141,8 @@ def __init__(__self__, *, pulumi.set(__self__, "project", project) if pubsub_config is not None: pulumi.set(__self__, "pubsub_config", pubsub_config) + if repository_event_config is not None: + pulumi.set(__self__, "repository_event_config", repository_event_config) if service_account is not None: pulumi.set(__self__, "service_account", service_account) if source_to_build is not None: @@ -363,6 +367,18 @@ def pubsub_config(self) -> Optional[pulumi.Input['TriggerPubsubConfigArgs']]: def pubsub_config(self, value: Optional[pulumi.Input['TriggerPubsubConfigArgs']]): pulumi.set(self, "pubsub_config", value) + @property + @pulumi.getter(name="repositoryEventConfig") + def repository_event_config(self) -> Optional[pulumi.Input['TriggerRepositoryEventConfigArgs']]: + """ + The configuration of a trigger that creates a build whenever an event from Repo API is received. + """ + return pulumi.get(self, "repository_event_config") + + @repository_event_config.setter + def repository_event_config(self, value: Optional[pulumi.Input['TriggerRepositoryEventConfigArgs']]): + pulumi.set(self, "repository_event_config", value) + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> Optional[pulumi.Input[str]]: @@ -472,6 +488,7 @@ def __init__(__self__, *, name: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, pubsub_config: Optional[pulumi.Input['TriggerPubsubConfigArgs']] = None, + repository_event_config: Optional[pulumi.Input['TriggerRepositoryEventConfigArgs']] = None, service_account: Optional[pulumi.Input[str]] = None, source_to_build: Optional[pulumi.Input['TriggerSourceToBuildArgs']] = None, substitutions: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -528,6 +545,7 @@ def __init__(__self__, *, a build whenever a Pub/Sub message is published. One of `trigger_template`, `github`, `pubsub_config` `webhook_config` or `source_to_build` must be provided. Structure is documented below. + :param pulumi.Input['TriggerRepositoryEventConfigArgs'] repository_event_config: The configuration of a trigger that creates a build whenever an event from Repo API is received. :param pulumi.Input[str] service_account: The service account used for all user-controlled operations including triggers.patch, triggers.run, builds.create, and builds.cancel. If no service account is set, then the standard Cloud Build service account @@ -585,6 +603,8 @@ def __init__(__self__, *, pulumi.set(__self__, "project", project) if pubsub_config is not None: pulumi.set(__self__, "pubsub_config", pubsub_config) + if repository_event_config is not None: + pulumi.set(__self__, "repository_event_config", repository_event_config) if service_account is not None: pulumi.set(__self__, "service_account", service_account) if source_to_build is not None: @@ -823,6 +843,18 @@ def pubsub_config(self) -> Optional[pulumi.Input['TriggerPubsubConfigArgs']]: def pubsub_config(self, value: Optional[pulumi.Input['TriggerPubsubConfigArgs']]): pulumi.set(self, "pubsub_config", value) + @property + @pulumi.getter(name="repositoryEventConfig") + def repository_event_config(self) -> Optional[pulumi.Input['TriggerRepositoryEventConfigArgs']]: + """ + The configuration of a trigger that creates a build whenever an event from Repo API is received. + """ + return pulumi.get(self, "repository_event_config") + + @repository_event_config.setter + def repository_event_config(self, value: Optional[pulumi.Input['TriggerRepositoryEventConfigArgs']]): + pulumi.set(self, "repository_event_config", value) + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> Optional[pulumi.Input[str]]: @@ -945,6 +977,7 @@ def __init__(__self__, name: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, pubsub_config: Optional[pulumi.Input[pulumi.InputType['TriggerPubsubConfigArgs']]] = None, + repository_event_config: Optional[pulumi.Input[pulumi.InputType['TriggerRepositoryEventConfigArgs']]] = None, service_account: Optional[pulumi.Input[str]] = None, source_to_build: Optional[pulumi.Input[pulumi.InputType['TriggerSourceToBuildArgs']]] = None, substitutions: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -1123,6 +1156,57 @@ def __init__(__self__, uri="https://hashicorp/terraform-provider-google-beta", )) ``` + ### Cloudbuild Trigger Manual Github Enterprise + + ```python + import pulumi + import pulumi_gcp as gcp + + manual_ghe_trigger = gcp.cloudbuild.Trigger("manual-ghe-trigger", + git_file_source=gcp.cloudbuild.TriggerGitFileSourceArgs( + github_enterprise_config="projects/myProject/locations/global/githubEnterpriseConfigs/configID", + path="cloudbuild.yaml", + repo_type="GITHUB", + revision="refs/heads/main", + uri="https://hashicorp/terraform-provider-google-beta", + ), + source_to_build=gcp.cloudbuild.TriggerSourceToBuildArgs( + github_enterprise_config="projects/myProject/locations/global/githubEnterpriseConfigs/configID", + ref="refs/heads/main", + repo_type="GITHUB", + uri="https://hashicorp/terraform-provider-google-beta", + )) + ``` + ### Cloudbuild Trigger Repo + + ```python + import pulumi + import pulumi_gcp as gcp + + my_connection = gcp.cloudbuildv2.Connection("my-connection", + location="us-central1", + github_config=gcp.cloudbuildv2.ConnectionGithubConfigArgs( + app_installation_id=123123, + authorizer_credential=gcp.cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs( + oauth_token_secret_version="projects/my-project/secrets/github-pat-secret/versions/latest", + ), + ), + opts=pulumi.ResourceOptions(provider=google_beta)) + my_repository = gcp.cloudbuildv2.Repository("my-repository", + parent_connection=my_connection.id, + remote_uri="https://github.com/myuser/my-repo.git", + opts=pulumi.ResourceOptions(provider=google_beta)) + repo_trigger = gcp.cloudbuild.Trigger("repo-trigger", + location="us-central1", + repository_event_config=gcp.cloudbuild.TriggerRepositoryEventConfigArgs( + repository=my_repository.id, + push=gcp.cloudbuild.TriggerRepositoryEventConfigPushArgs( + branch="feature-.*", + ), + ), + filename="cloudbuild.yaml", + opts=pulumi.ResourceOptions(provider=google_beta)) + ``` ## Import @@ -1192,6 +1276,7 @@ def __init__(__self__, a build whenever a Pub/Sub message is published. One of `trigger_template`, `github`, `pubsub_config` `webhook_config` or `source_to_build` must be provided. Structure is documented below. + :param pulumi.Input[pulumi.InputType['TriggerRepositoryEventConfigArgs']] repository_event_config: The configuration of a trigger that creates a build whenever an event from Repo API is received. :param pulumi.Input[str] service_account: The service account used for all user-controlled operations including triggers.patch, triggers.run, builds.create, and builds.cancel. If no service account is set, then the standard Cloud Build service account @@ -1393,6 +1478,57 @@ def __init__(__self__, uri="https://hashicorp/terraform-provider-google-beta", )) ``` + ### Cloudbuild Trigger Manual Github Enterprise + + ```python + import pulumi + import pulumi_gcp as gcp + + manual_ghe_trigger = gcp.cloudbuild.Trigger("manual-ghe-trigger", + git_file_source=gcp.cloudbuild.TriggerGitFileSourceArgs( + github_enterprise_config="projects/myProject/locations/global/githubEnterpriseConfigs/configID", + path="cloudbuild.yaml", + repo_type="GITHUB", + revision="refs/heads/main", + uri="https://hashicorp/terraform-provider-google-beta", + ), + source_to_build=gcp.cloudbuild.TriggerSourceToBuildArgs( + github_enterprise_config="projects/myProject/locations/global/githubEnterpriseConfigs/configID", + ref="refs/heads/main", + repo_type="GITHUB", + uri="https://hashicorp/terraform-provider-google-beta", + )) + ``` + ### Cloudbuild Trigger Repo + + ```python + import pulumi + import pulumi_gcp as gcp + + my_connection = gcp.cloudbuildv2.Connection("my-connection", + location="us-central1", + github_config=gcp.cloudbuildv2.ConnectionGithubConfigArgs( + app_installation_id=123123, + authorizer_credential=gcp.cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs( + oauth_token_secret_version="projects/my-project/secrets/github-pat-secret/versions/latest", + ), + ), + opts=pulumi.ResourceOptions(provider=google_beta)) + my_repository = gcp.cloudbuildv2.Repository("my-repository", + parent_connection=my_connection.id, + remote_uri="https://github.com/myuser/my-repo.git", + opts=pulumi.ResourceOptions(provider=google_beta)) + repo_trigger = gcp.cloudbuild.Trigger("repo-trigger", + location="us-central1", + repository_event_config=gcp.cloudbuild.TriggerRepositoryEventConfigArgs( + repository=my_repository.id, + push=gcp.cloudbuild.TriggerRepositoryEventConfigPushArgs( + branch="feature-.*", + ), + ), + filename="cloudbuild.yaml", + opts=pulumi.ResourceOptions(provider=google_beta)) + ``` ## Import @@ -1444,6 +1580,7 @@ def _internal_init(__self__, name: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, pubsub_config: Optional[pulumi.Input[pulumi.InputType['TriggerPubsubConfigArgs']]] = None, + repository_event_config: Optional[pulumi.Input[pulumi.InputType['TriggerRepositoryEventConfigArgs']]] = None, service_account: Optional[pulumi.Input[str]] = None, source_to_build: Optional[pulumi.Input[pulumi.InputType['TriggerSourceToBuildArgs']]] = None, substitutions: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -1474,6 +1611,7 @@ def _internal_init(__self__, __props__.__dict__["name"] = name __props__.__dict__["project"] = project __props__.__dict__["pubsub_config"] = pubsub_config + __props__.__dict__["repository_event_config"] = repository_event_config __props__.__dict__["service_account"] = service_account __props__.__dict__["source_to_build"] = source_to_build __props__.__dict__["substitutions"] = substitutions @@ -1508,6 +1646,7 @@ def get(resource_name: str, name: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, pubsub_config: Optional[pulumi.Input[pulumi.InputType['TriggerPubsubConfigArgs']]] = None, + repository_event_config: Optional[pulumi.Input[pulumi.InputType['TriggerRepositoryEventConfigArgs']]] = None, service_account: Optional[pulumi.Input[str]] = None, source_to_build: Optional[pulumi.Input[pulumi.InputType['TriggerSourceToBuildArgs']]] = None, substitutions: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -1569,6 +1708,7 @@ def get(resource_name: str, a build whenever a Pub/Sub message is published. One of `trigger_template`, `github`, `pubsub_config` `webhook_config` or `source_to_build` must be provided. Structure is documented below. + :param pulumi.Input[pulumi.InputType['TriggerRepositoryEventConfigArgs']] repository_event_config: The configuration of a trigger that creates a build whenever an event from Repo API is received. :param pulumi.Input[str] service_account: The service account used for all user-controlled operations including triggers.patch, triggers.run, builds.create, and builds.cancel. If no service account is set, then the standard Cloud Build service account @@ -1614,6 +1754,7 @@ def get(resource_name: str, __props__.__dict__["name"] = name __props__.__dict__["project"] = project __props__.__dict__["pubsub_config"] = pubsub_config + __props__.__dict__["repository_event_config"] = repository_event_config __props__.__dict__["service_account"] = service_account __props__.__dict__["source_to_build"] = source_to_build __props__.__dict__["substitutions"] = substitutions @@ -1782,6 +1923,14 @@ def pubsub_config(self) -> pulumi.Output[Optional['outputs.TriggerPubsubConfig'] """ return pulumi.get(self, "pubsub_config") + @property + @pulumi.getter(name="repositoryEventConfig") + def repository_event_config(self) -> pulumi.Output[Optional['outputs.TriggerRepositoryEventConfig']]: + """ + The configuration of a trigger that creates a build whenever an event from Repo API is received. + """ + return pulumi.get(self, "repository_event_config") + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/cloudbuildv2/__init__.py b/sdk/python/pulumi_gcp/cloudbuildv2/__init__.py new file mode 100644 index 0000000000..3d24ebfd40 --- /dev/null +++ b/sdk/python/pulumi_gcp/cloudbuildv2/__init__.py @@ -0,0 +1,11 @@ +# 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 .connection import * +from .repository import * +from ._inputs import * +from . import outputs diff --git a/sdk/python/pulumi_gcp/cloudbuildv2/_inputs.py b/sdk/python/pulumi_gcp/cloudbuildv2/_inputs.py new file mode 100644 index 0000000000..0e601978dd --- /dev/null +++ b/sdk/python/pulumi_gcp/cloudbuildv2/_inputs.py @@ -0,0 +1,294 @@ +# 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 pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities + +__all__ = [ + 'ConnectionGithubConfigArgs', + 'ConnectionGithubConfigAuthorizerCredentialArgs', + 'ConnectionGithubEnterpriseConfigArgs', + 'ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs', + 'ConnectionInstallationStateArgs', +] + +@pulumi.input_type +class ConnectionGithubConfigArgs: + def __init__(__self__, *, + app_installation_id: Optional[pulumi.Input[int]] = None, + authorizer_credential: Optional[pulumi.Input['ConnectionGithubConfigAuthorizerCredentialArgs']] = None): + """ + :param pulumi.Input[int] app_installation_id: GitHub App installation id. + :param pulumi.Input['ConnectionGithubConfigAuthorizerCredentialArgs'] authorizer_credential: OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + """ + if app_installation_id is not None: + pulumi.set(__self__, "app_installation_id", app_installation_id) + if authorizer_credential is not None: + pulumi.set(__self__, "authorizer_credential", authorizer_credential) + + @property + @pulumi.getter(name="appInstallationId") + def app_installation_id(self) -> Optional[pulumi.Input[int]]: + """ + GitHub App installation id. + """ + return pulumi.get(self, "app_installation_id") + + @app_installation_id.setter + def app_installation_id(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "app_installation_id", value) + + @property + @pulumi.getter(name="authorizerCredential") + def authorizer_credential(self) -> Optional[pulumi.Input['ConnectionGithubConfigAuthorizerCredentialArgs']]: + """ + OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + """ + return pulumi.get(self, "authorizer_credential") + + @authorizer_credential.setter + def authorizer_credential(self, value: Optional[pulumi.Input['ConnectionGithubConfigAuthorizerCredentialArgs']]): + pulumi.set(self, "authorizer_credential", value) + + +@pulumi.input_type +class ConnectionGithubConfigAuthorizerCredentialArgs: + def __init__(__self__, *, + oauth_token_secret_version: Optional[pulumi.Input[str]] = None, + username: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] oauth_token_secret_version: A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`. + :param pulumi.Input[str] username: The username associated to this token. + """ + if oauth_token_secret_version is not None: + pulumi.set(__self__, "oauth_token_secret_version", oauth_token_secret_version) + if username is not None: + pulumi.set(__self__, "username", username) + + @property + @pulumi.getter(name="oauthTokenSecretVersion") + def oauth_token_secret_version(self) -> Optional[pulumi.Input[str]]: + """ + A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`. + """ + return pulumi.get(self, "oauth_token_secret_version") + + @oauth_token_secret_version.setter + def oauth_token_secret_version(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "oauth_token_secret_version", value) + + @property + @pulumi.getter + def username(self) -> Optional[pulumi.Input[str]]: + """ + The username associated to this token. + """ + return pulumi.get(self, "username") + + @username.setter + def username(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "username", value) + + +@pulumi.input_type +class ConnectionGithubEnterpriseConfigArgs: + def __init__(__self__, *, + host_uri: pulumi.Input[str], + app_id: Optional[pulumi.Input[int]] = None, + app_installation_id: Optional[pulumi.Input[int]] = None, + app_slug: Optional[pulumi.Input[str]] = None, + private_key_secret_version: Optional[pulumi.Input[str]] = None, + service_directory_config: Optional[pulumi.Input['ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs']] = None, + ssl_ca: Optional[pulumi.Input[str]] = None, + webhook_secret_secret_version: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] host_uri: Required. The URI of the GitHub Enterprise host this connection is for. + :param pulumi.Input[int] app_id: Id of the GitHub App created from the manifest. + :param pulumi.Input[int] app_installation_id: ID of the installation of the GitHub App. + :param pulumi.Input[str] app_slug: The URL-friendly name of the GitHub App. + :param pulumi.Input[str] private_key_secret_version: SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + :param pulumi.Input['ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs'] service_directory_config: Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + :param pulumi.Input[str] ssl_ca: SSL certificate to use for requests to GitHub Enterprise. + :param pulumi.Input[str] webhook_secret_secret_version: SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + """ + pulumi.set(__self__, "host_uri", host_uri) + if app_id is not None: + pulumi.set(__self__, "app_id", app_id) + if app_installation_id is not None: + pulumi.set(__self__, "app_installation_id", app_installation_id) + if app_slug is not None: + pulumi.set(__self__, "app_slug", app_slug) + if private_key_secret_version is not None: + pulumi.set(__self__, "private_key_secret_version", private_key_secret_version) + if service_directory_config is not None: + pulumi.set(__self__, "service_directory_config", service_directory_config) + if ssl_ca is not None: + pulumi.set(__self__, "ssl_ca", ssl_ca) + if webhook_secret_secret_version is not None: + pulumi.set(__self__, "webhook_secret_secret_version", webhook_secret_secret_version) + + @property + @pulumi.getter(name="hostUri") + def host_uri(self) -> pulumi.Input[str]: + """ + Required. The URI of the GitHub Enterprise host this connection is for. + """ + return pulumi.get(self, "host_uri") + + @host_uri.setter + def host_uri(self, value: pulumi.Input[str]): + pulumi.set(self, "host_uri", value) + + @property + @pulumi.getter(name="appId") + def app_id(self) -> Optional[pulumi.Input[int]]: + """ + Id of the GitHub App created from the manifest. + """ + return pulumi.get(self, "app_id") + + @app_id.setter + def app_id(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "app_id", value) + + @property + @pulumi.getter(name="appInstallationId") + def app_installation_id(self) -> Optional[pulumi.Input[int]]: + """ + ID of the installation of the GitHub App. + """ + return pulumi.get(self, "app_installation_id") + + @app_installation_id.setter + def app_installation_id(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "app_installation_id", value) + + @property + @pulumi.getter(name="appSlug") + def app_slug(self) -> Optional[pulumi.Input[str]]: + """ + The URL-friendly name of the GitHub App. + """ + return pulumi.get(self, "app_slug") + + @app_slug.setter + def app_slug(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "app_slug", value) + + @property + @pulumi.getter(name="privateKeySecretVersion") + def private_key_secret_version(self) -> Optional[pulumi.Input[str]]: + """ + SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + """ + return pulumi.get(self, "private_key_secret_version") + + @private_key_secret_version.setter + def private_key_secret_version(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "private_key_secret_version", value) + + @property + @pulumi.getter(name="serviceDirectoryConfig") + def service_directory_config(self) -> Optional[pulumi.Input['ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs']]: + """ + Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + """ + return pulumi.get(self, "service_directory_config") + + @service_directory_config.setter + def service_directory_config(self, value: Optional[pulumi.Input['ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs']]): + pulumi.set(self, "service_directory_config", value) + + @property + @pulumi.getter(name="sslCa") + def ssl_ca(self) -> Optional[pulumi.Input[str]]: + """ + SSL certificate to use for requests to GitHub Enterprise. + """ + return pulumi.get(self, "ssl_ca") + + @ssl_ca.setter + def ssl_ca(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "ssl_ca", value) + + @property + @pulumi.getter(name="webhookSecretSecretVersion") + def webhook_secret_secret_version(self) -> Optional[pulumi.Input[str]]: + """ + SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + """ + return pulumi.get(self, "webhook_secret_secret_version") + + @webhook_secret_secret_version.setter + def webhook_secret_secret_version(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "webhook_secret_secret_version", value) + + +@pulumi.input_type +class ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs: + def __init__(__self__, *, + service: pulumi.Input[str]): + """ + :param pulumi.Input[str] service: Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + """ + pulumi.set(__self__, "service", service) + + @property + @pulumi.getter + def service(self) -> pulumi.Input[str]: + """ + Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + """ + return pulumi.get(self, "service") + + @service.setter + def service(self, value: pulumi.Input[str]): + pulumi.set(self, "service", value) + + +@pulumi.input_type +class ConnectionInstallationStateArgs: + def __init__(__self__, *, + action_uri: Optional[pulumi.Input[str]] = None, + message: Optional[pulumi.Input[str]] = None, + stage: Optional[pulumi.Input[str]] = None): + if action_uri is not None: + pulumi.set(__self__, "action_uri", action_uri) + if message is not None: + pulumi.set(__self__, "message", message) + if stage is not None: + pulumi.set(__self__, "stage", stage) + + @property + @pulumi.getter(name="actionUri") + def action_uri(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "action_uri") + + @action_uri.setter + def action_uri(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "action_uri", value) + + @property + @pulumi.getter + def message(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "message") + + @message.setter + def message(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "message", value) + + @property + @pulumi.getter + def stage(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "stage") + + @stage.setter + def stage(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "stage", value) + + diff --git a/sdk/python/pulumi_gcp/cloudbuildv2/connection.py b/sdk/python/pulumi_gcp/cloudbuildv2/connection.py new file mode 100644 index 0000000000..08f52b1c23 --- /dev/null +++ b/sdk/python/pulumi_gcp/cloudbuildv2/connection.py @@ -0,0 +1,674 @@ +# 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 pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['ConnectionArgs', 'Connection'] + +@pulumi.input_type +class ConnectionArgs: + def __init__(__self__, *, + location: pulumi.Input[str], + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + disabled: Optional[pulumi.Input[bool]] = None, + github_config: Optional[pulumi.Input['ConnectionGithubConfigArgs']] = None, + github_enterprise_config: Optional[pulumi.Input['ConnectionGithubEnterpriseConfigArgs']] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a Connection resource. + :param pulumi.Input[str] location: The location for the resource + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Allows clients to store small amounts of arbitrary data. + :param pulumi.Input[bool] disabled: If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + :param pulumi.Input['ConnectionGithubConfigArgs'] github_config: Configuration for connections to github.com. + :param pulumi.Input['ConnectionGithubEnterpriseConfigArgs'] github_enterprise_config: Configuration for connections to an instance of GitHub Enterprise. + :param pulumi.Input[str] name: Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + :param pulumi.Input[str] project: The project for the resource + """ + pulumi.set(__self__, "location", location) + if annotations is not None: + pulumi.set(__self__, "annotations", annotations) + if disabled is not None: + pulumi.set(__self__, "disabled", disabled) + if github_config is not None: + pulumi.set(__self__, "github_config", github_config) + if github_enterprise_config is not None: + pulumi.set(__self__, "github_enterprise_config", github_enterprise_config) + if name is not None: + pulumi.set(__self__, "name", name) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter + def location(self) -> pulumi.Input[str]: + """ + The location for the resource + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: pulumi.Input[str]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Allows clients to store small amounts of arbitrary data. + """ + return pulumi.get(self, "annotations") + + @annotations.setter + def annotations(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "annotations", value) + + @property + @pulumi.getter + def disabled(self) -> Optional[pulumi.Input[bool]]: + """ + If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + """ + return pulumi.get(self, "disabled") + + @disabled.setter + def disabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "disabled", value) + + @property + @pulumi.getter(name="githubConfig") + def github_config(self) -> Optional[pulumi.Input['ConnectionGithubConfigArgs']]: + """ + Configuration for connections to github.com. + """ + return pulumi.get(self, "github_config") + + @github_config.setter + def github_config(self, value: Optional[pulumi.Input['ConnectionGithubConfigArgs']]): + pulumi.set(self, "github_config", value) + + @property + @pulumi.getter(name="githubEnterpriseConfig") + def github_enterprise_config(self) -> Optional[pulumi.Input['ConnectionGithubEnterpriseConfigArgs']]: + """ + Configuration for connections to an instance of GitHub Enterprise. + """ + return pulumi.get(self, "github_enterprise_config") + + @github_enterprise_config.setter + def github_enterprise_config(self, value: Optional[pulumi.Input['ConnectionGithubEnterpriseConfigArgs']]): + pulumi.set(self, "github_enterprise_config", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_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 project(self) -> Optional[pulumi.Input[str]]: + """ + The project for the resource + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _ConnectionState: + def __init__(__self__, *, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + create_time: Optional[pulumi.Input[str]] = None, + disabled: Optional[pulumi.Input[bool]] = None, + etag: Optional[pulumi.Input[str]] = None, + github_config: Optional[pulumi.Input['ConnectionGithubConfigArgs']] = None, + github_enterprise_config: Optional[pulumi.Input['ConnectionGithubEnterpriseConfigArgs']] = None, + installation_states: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionInstallationStateArgs']]]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + reconciling: Optional[pulumi.Input[bool]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering Connection resources. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Allows clients to store small amounts of arbitrary data. + :param pulumi.Input[str] create_time: Output only. Server assigned timestamp for when the connection was created. + :param pulumi.Input[bool] disabled: If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + :param pulumi.Input[str] etag: This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + :param pulumi.Input['ConnectionGithubConfigArgs'] github_config: Configuration for connections to github.com. + :param pulumi.Input['ConnectionGithubEnterpriseConfigArgs'] github_enterprise_config: Configuration for connections to an instance of GitHub Enterprise. + :param pulumi.Input[Sequence[pulumi.Input['ConnectionInstallationStateArgs']]] installation_states: Output only. Installation state of the Connection. + :param pulumi.Input[str] location: The location for the resource + :param pulumi.Input[str] name: Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + :param pulumi.Input[str] project: The project for the resource + :param pulumi.Input[bool] reconciling: Output only. Set to true when the connection is being set up or updated in the background. + :param pulumi.Input[str] update_time: Output only. Server assigned timestamp for when the connection was updated. + """ + if annotations is not None: + pulumi.set(__self__, "annotations", annotations) + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if disabled is not None: + pulumi.set(__self__, "disabled", disabled) + if etag is not None: + pulumi.set(__self__, "etag", etag) + if github_config is not None: + pulumi.set(__self__, "github_config", github_config) + if github_enterprise_config is not None: + pulumi.set(__self__, "github_enterprise_config", github_enterprise_config) + if installation_states is not None: + pulumi.set(__self__, "installation_states", installation_states) + 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 reconciling is not None: + pulumi.set(__self__, "reconciling", reconciling) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter + def annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Allows clients to store small amounts of arbitrary data. + """ + return pulumi.get(self, "annotations") + + @annotations.setter + def annotations(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "annotations", value) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Server assigned timestamp for when the connection 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]]: + """ + If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + """ + return pulumi.get(self, "disabled") + + @disabled.setter + def disabled(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "disabled", value) + + @property + @pulumi.getter + def etag(self) -> Optional[pulumi.Input[str]]: + """ + This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + + @property + @pulumi.getter(name="githubConfig") + def github_config(self) -> Optional[pulumi.Input['ConnectionGithubConfigArgs']]: + """ + Configuration for connections to github.com. + """ + return pulumi.get(self, "github_config") + + @github_config.setter + def github_config(self, value: Optional[pulumi.Input['ConnectionGithubConfigArgs']]): + pulumi.set(self, "github_config", value) + + @property + @pulumi.getter(name="githubEnterpriseConfig") + def github_enterprise_config(self) -> Optional[pulumi.Input['ConnectionGithubEnterpriseConfigArgs']]: + """ + Configuration for connections to an instance of GitHub Enterprise. + """ + return pulumi.get(self, "github_enterprise_config") + + @github_enterprise_config.setter + def github_enterprise_config(self, value: Optional[pulumi.Input['ConnectionGithubEnterpriseConfigArgs']]): + pulumi.set(self, "github_enterprise_config", value) + + @property + @pulumi.getter(name="installationStates") + def installation_states(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionInstallationStateArgs']]]]: + """ + Output only. Installation state of the Connection. + """ + return pulumi.get(self, "installation_states") + + @installation_states.setter + def installation_states(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ConnectionInstallationStateArgs']]]]): + pulumi.set(self, "installation_states", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location for the 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]]: + """ + Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_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 project(self) -> Optional[pulumi.Input[str]]: + """ + The project for the resource + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter + def reconciling(self) -> Optional[pulumi.Input[bool]]: + """ + Output only. Set to true when the connection is being set up or updated in the background. + """ + return pulumi.get(self, "reconciling") + + @reconciling.setter + def reconciling(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "reconciling", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Server assigned timestamp for when the connection 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 Connection(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + disabled: Optional[pulumi.Input[bool]] = None, + github_config: Optional[pulumi.Input[pulumi.InputType['ConnectionGithubConfigArgs']]] = None, + github_enterprise_config: Optional[pulumi.Input[pulumi.InputType['ConnectionGithubEnterpriseConfigArgs']]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + Beta only: The Cloudbuildv2 Connection resource + + ## Example Usage + ### GitHub Connection + Creates a Connection to github.com + ```python + import pulumi + import pulumi_gcp as gcp + + github_token_secret = gcp.secretmanager.Secret("github-token-secret", + secret_id="github-token-secret", + replication=gcp.secretmanager.SecretReplicationArgs( + automatic=True, + ), + opts=pulumi.ResourceOptions(provider=google_beta)) + github_token_secret_version = gcp.secretmanager.SecretVersion("github-token-secret-version", + secret=github_token_secret.id, + secret_data=(lambda path: open(path).read())("my-github-token.txt"), + opts=pulumi.ResourceOptions(provider=google_beta)) + p4sa_secret_accessor = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( + role="roles/secretmanager.secretAccessor", + members=["serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com"], + )]) + policy = gcp.secretmanager.SecretIamPolicy("policy", + secret_id=github_token_secret.secret_id, + policy_data=p4sa_secret_accessor.policy_data, + opts=pulumi.ResourceOptions(provider=google_beta)) + my_connection = gcp.cloudbuildv2.Connection("my-connection", + location="us-west1", + github_config=gcp.cloudbuildv2.ConnectionGithubConfigArgs( + app_installation_id=123123, + authorizer_credential=gcp.cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs( + oauth_token_secret_version=github_token_secret_version.id, + ), + ), + opts=pulumi.ResourceOptions(provider=google_beta)) + ``` + + ## Import + + Connection can be imported using any of these accepted formats + + ```sh + $ pulumi import gcp:cloudbuildv2/connection:Connection default projects/{{project}}/locations/{{location}}/connections/{{name}} + ``` + + ```sh + $ pulumi import gcp:cloudbuildv2/connection:Connection default {{project}}/{{location}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:cloudbuildv2/connection:Connection default {{location}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Allows clients to store small amounts of arbitrary data. + :param pulumi.Input[bool] disabled: If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + :param pulumi.Input[pulumi.InputType['ConnectionGithubConfigArgs']] github_config: Configuration for connections to github.com. + :param pulumi.Input[pulumi.InputType['ConnectionGithubEnterpriseConfigArgs']] github_enterprise_config: Configuration for connections to an instance of GitHub Enterprise. + :param pulumi.Input[str] location: The location for the resource + :param pulumi.Input[str] name: Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + :param pulumi.Input[str] project: The project for the resource + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: ConnectionArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Beta only: The Cloudbuildv2 Connection resource + + ## Example Usage + ### GitHub Connection + Creates a Connection to github.com + ```python + import pulumi + import pulumi_gcp as gcp + + github_token_secret = gcp.secretmanager.Secret("github-token-secret", + secret_id="github-token-secret", + replication=gcp.secretmanager.SecretReplicationArgs( + automatic=True, + ), + opts=pulumi.ResourceOptions(provider=google_beta)) + github_token_secret_version = gcp.secretmanager.SecretVersion("github-token-secret-version", + secret=github_token_secret.id, + secret_data=(lambda path: open(path).read())("my-github-token.txt"), + opts=pulumi.ResourceOptions(provider=google_beta)) + p4sa_secret_accessor = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( + role="roles/secretmanager.secretAccessor", + members=["serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com"], + )]) + policy = gcp.secretmanager.SecretIamPolicy("policy", + secret_id=github_token_secret.secret_id, + policy_data=p4sa_secret_accessor.policy_data, + opts=pulumi.ResourceOptions(provider=google_beta)) + my_connection = gcp.cloudbuildv2.Connection("my-connection", + location="us-west1", + github_config=gcp.cloudbuildv2.ConnectionGithubConfigArgs( + app_installation_id=123123, + authorizer_credential=gcp.cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs( + oauth_token_secret_version=github_token_secret_version.id, + ), + ), + opts=pulumi.ResourceOptions(provider=google_beta)) + ``` + + ## Import + + Connection can be imported using any of these accepted formats + + ```sh + $ pulumi import gcp:cloudbuildv2/connection:Connection default projects/{{project}}/locations/{{location}}/connections/{{name}} + ``` + + ```sh + $ pulumi import gcp:cloudbuildv2/connection:Connection default {{project}}/{{location}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:cloudbuildv2/connection:Connection default {{location}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param ConnectionArgs 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(ConnectionArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + disabled: Optional[pulumi.Input[bool]] = None, + github_config: Optional[pulumi.Input[pulumi.InputType['ConnectionGithubConfigArgs']]] = None, + github_enterprise_config: Optional[pulumi.Input[pulumi.InputType['ConnectionGithubEnterpriseConfigArgs']]] = None, + location: Optional[pulumi.Input[str]] = None, + name: 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__ = ConnectionArgs.__new__(ConnectionArgs) + + __props__.__dict__["annotations"] = annotations + __props__.__dict__["disabled"] = disabled + __props__.__dict__["github_config"] = github_config + __props__.__dict__["github_enterprise_config"] = github_enterprise_config + if location is None and not opts.urn: + raise TypeError("Missing required property 'location'") + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["project"] = project + __props__.__dict__["create_time"] = None + __props__.__dict__["etag"] = None + __props__.__dict__["installation_states"] = None + __props__.__dict__["reconciling"] = None + __props__.__dict__["update_time"] = None + super(Connection, __self__).__init__( + 'gcp:cloudbuildv2/connection:Connection', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + create_time: Optional[pulumi.Input[str]] = None, + disabled: Optional[pulumi.Input[bool]] = None, + etag: Optional[pulumi.Input[str]] = None, + github_config: Optional[pulumi.Input[pulumi.InputType['ConnectionGithubConfigArgs']]] = None, + github_enterprise_config: Optional[pulumi.Input[pulumi.InputType['ConnectionGithubEnterpriseConfigArgs']]] = None, + installation_states: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ConnectionInstallationStateArgs']]]]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + reconciling: Optional[pulumi.Input[bool]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'Connection': + """ + Get an existing Connection resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Allows clients to store small amounts of arbitrary data. + :param pulumi.Input[str] create_time: Output only. Server assigned timestamp for when the connection was created. + :param pulumi.Input[bool] disabled: If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + :param pulumi.Input[str] etag: This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + :param pulumi.Input[pulumi.InputType['ConnectionGithubConfigArgs']] github_config: Configuration for connections to github.com. + :param pulumi.Input[pulumi.InputType['ConnectionGithubEnterpriseConfigArgs']] github_enterprise_config: Configuration for connections to an instance of GitHub Enterprise. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['ConnectionInstallationStateArgs']]]] installation_states: Output only. Installation state of the Connection. + :param pulumi.Input[str] location: The location for the resource + :param pulumi.Input[str] name: Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + :param pulumi.Input[str] project: The project for the resource + :param pulumi.Input[bool] reconciling: Output only. Set to true when the connection is being set up or updated in the background. + :param pulumi.Input[str] update_time: Output only. Server assigned timestamp for when the connection was updated. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _ConnectionState.__new__(_ConnectionState) + + __props__.__dict__["annotations"] = annotations + __props__.__dict__["create_time"] = create_time + __props__.__dict__["disabled"] = disabled + __props__.__dict__["etag"] = etag + __props__.__dict__["github_config"] = github_config + __props__.__dict__["github_enterprise_config"] = github_enterprise_config + __props__.__dict__["installation_states"] = installation_states + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["project"] = project + __props__.__dict__["reconciling"] = reconciling + __props__.__dict__["update_time"] = update_time + return Connection(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def annotations(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + Allows clients to store small amounts of arbitrary data. + """ + return pulumi.get(self, "annotations") + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + Output only. Server assigned timestamp for when the connection was created. + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter + def disabled(self) -> pulumi.Output[Optional[bool]]: + """ + If disabled is set to true, functionality is disabled for this connection. Repository based API methods and webhooks processing for repositories in this connection will be disabled. + """ + return pulumi.get(self, "disabled") + + @property + @pulumi.getter + def etag(self) -> pulumi.Output[str]: + """ + This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + """ + return pulumi.get(self, "etag") + + @property + @pulumi.getter(name="githubConfig") + def github_config(self) -> pulumi.Output[Optional['outputs.ConnectionGithubConfig']]: + """ + Configuration for connections to github.com. + """ + return pulumi.get(self, "github_config") + + @property + @pulumi.getter(name="githubEnterpriseConfig") + def github_enterprise_config(self) -> pulumi.Output[Optional['outputs.ConnectionGithubEnterpriseConfig']]: + """ + Configuration for connections to an instance of GitHub Enterprise. + """ + return pulumi.get(self, "github_enterprise_config") + + @property + @pulumi.getter(name="installationStates") + def installation_states(self) -> pulumi.Output[Sequence['outputs.ConnectionInstallationState']]: + """ + Output only. Installation state of the Connection. + """ + return pulumi.get(self, "installation_states") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The location for the resource + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + Immutable. The resource name of the connection, in the format `projects/{project}/locations/{location}/connections/{connection_id}`. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The project for the resource + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter + def reconciling(self) -> pulumi.Output[bool]: + """ + Output only. Set to true when the connection is being set up or updated in the background. + """ + return pulumi.get(self, "reconciling") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + Output only. Server assigned timestamp for when the connection was updated. + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/cloudbuildv2/outputs.py b/sdk/python/pulumi_gcp/cloudbuildv2/outputs.py new file mode 100644 index 0000000000..4baa44d3a9 --- /dev/null +++ b/sdk/python/pulumi_gcp/cloudbuildv2/outputs.py @@ -0,0 +1,315 @@ +# 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 pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities +from . import outputs + +__all__ = [ + 'ConnectionGithubConfig', + 'ConnectionGithubConfigAuthorizerCredential', + 'ConnectionGithubEnterpriseConfig', + 'ConnectionGithubEnterpriseConfigServiceDirectoryConfig', + 'ConnectionInstallationState', +] + +@pulumi.output_type +class ConnectionGithubConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "appInstallationId": + suggest = "app_installation_id" + elif key == "authorizerCredential": + suggest = "authorizer_credential" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ConnectionGithubConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ConnectionGithubConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ConnectionGithubConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + app_installation_id: Optional[int] = None, + authorizer_credential: Optional['outputs.ConnectionGithubConfigAuthorizerCredential'] = None): + """ + :param int app_installation_id: GitHub App installation id. + :param 'ConnectionGithubConfigAuthorizerCredentialArgs' authorizer_credential: OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + """ + if app_installation_id is not None: + pulumi.set(__self__, "app_installation_id", app_installation_id) + if authorizer_credential is not None: + pulumi.set(__self__, "authorizer_credential", authorizer_credential) + + @property + @pulumi.getter(name="appInstallationId") + def app_installation_id(self) -> Optional[int]: + """ + GitHub App installation id. + """ + return pulumi.get(self, "app_installation_id") + + @property + @pulumi.getter(name="authorizerCredential") + def authorizer_credential(self) -> Optional['outputs.ConnectionGithubConfigAuthorizerCredential']: + """ + OAuth credential of the account that authorized the Cloud Build GitHub App. It is recommended to use a robot account instead of a human user account. The OAuth token must be tied to the Cloud Build GitHub App. + """ + return pulumi.get(self, "authorizer_credential") + + +@pulumi.output_type +class ConnectionGithubConfigAuthorizerCredential(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "oauthTokenSecretVersion": + suggest = "oauth_token_secret_version" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ConnectionGithubConfigAuthorizerCredential. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ConnectionGithubConfigAuthorizerCredential.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ConnectionGithubConfigAuthorizerCredential.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + oauth_token_secret_version: Optional[str] = None, + username: Optional[str] = None): + """ + :param str oauth_token_secret_version: A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`. + :param str username: The username associated to this token. + """ + if oauth_token_secret_version is not None: + pulumi.set(__self__, "oauth_token_secret_version", oauth_token_secret_version) + if username is not None: + pulumi.set(__self__, "username", username) + + @property + @pulumi.getter(name="oauthTokenSecretVersion") + def oauth_token_secret_version(self) -> Optional[str]: + """ + A SecretManager resource containing the OAuth token that authorizes the Cloud Build connection. Format: `projects/*/secrets/*/versions/*`. + """ + return pulumi.get(self, "oauth_token_secret_version") + + @property + @pulumi.getter + def username(self) -> Optional[str]: + """ + The username associated to this token. + """ + return pulumi.get(self, "username") + + +@pulumi.output_type +class ConnectionGithubEnterpriseConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "hostUri": + suggest = "host_uri" + elif key == "appId": + suggest = "app_id" + elif key == "appInstallationId": + suggest = "app_installation_id" + elif key == "appSlug": + suggest = "app_slug" + elif key == "privateKeySecretVersion": + suggest = "private_key_secret_version" + elif key == "serviceDirectoryConfig": + suggest = "service_directory_config" + elif key == "sslCa": + suggest = "ssl_ca" + elif key == "webhookSecretSecretVersion": + suggest = "webhook_secret_secret_version" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ConnectionGithubEnterpriseConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ConnectionGithubEnterpriseConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ConnectionGithubEnterpriseConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + host_uri: str, + app_id: Optional[int] = None, + app_installation_id: Optional[int] = None, + app_slug: Optional[str] = None, + private_key_secret_version: Optional[str] = None, + service_directory_config: Optional['outputs.ConnectionGithubEnterpriseConfigServiceDirectoryConfig'] = None, + ssl_ca: Optional[str] = None, + webhook_secret_secret_version: Optional[str] = None): + """ + :param str host_uri: Required. The URI of the GitHub Enterprise host this connection is for. + :param int app_id: Id of the GitHub App created from the manifest. + :param int app_installation_id: ID of the installation of the GitHub App. + :param str app_slug: The URL-friendly name of the GitHub App. + :param str private_key_secret_version: SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + :param 'ConnectionGithubEnterpriseConfigServiceDirectoryConfigArgs' service_directory_config: Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + :param str ssl_ca: SSL certificate to use for requests to GitHub Enterprise. + :param str webhook_secret_secret_version: SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + """ + pulumi.set(__self__, "host_uri", host_uri) + if app_id is not None: + pulumi.set(__self__, "app_id", app_id) + if app_installation_id is not None: + pulumi.set(__self__, "app_installation_id", app_installation_id) + if app_slug is not None: + pulumi.set(__self__, "app_slug", app_slug) + if private_key_secret_version is not None: + pulumi.set(__self__, "private_key_secret_version", private_key_secret_version) + if service_directory_config is not None: + pulumi.set(__self__, "service_directory_config", service_directory_config) + if ssl_ca is not None: + pulumi.set(__self__, "ssl_ca", ssl_ca) + if webhook_secret_secret_version is not None: + pulumi.set(__self__, "webhook_secret_secret_version", webhook_secret_secret_version) + + @property + @pulumi.getter(name="hostUri") + def host_uri(self) -> str: + """ + Required. The URI of the GitHub Enterprise host this connection is for. + """ + return pulumi.get(self, "host_uri") + + @property + @pulumi.getter(name="appId") + def app_id(self) -> Optional[int]: + """ + Id of the GitHub App created from the manifest. + """ + return pulumi.get(self, "app_id") + + @property + @pulumi.getter(name="appInstallationId") + def app_installation_id(self) -> Optional[int]: + """ + ID of the installation of the GitHub App. + """ + return pulumi.get(self, "app_installation_id") + + @property + @pulumi.getter(name="appSlug") + def app_slug(self) -> Optional[str]: + """ + The URL-friendly name of the GitHub App. + """ + return pulumi.get(self, "app_slug") + + @property + @pulumi.getter(name="privateKeySecretVersion") + def private_key_secret_version(self) -> Optional[str]: + """ + SecretManager resource containing the private key of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + """ + return pulumi.get(self, "private_key_secret_version") + + @property + @pulumi.getter(name="serviceDirectoryConfig") + def service_directory_config(self) -> Optional['outputs.ConnectionGithubEnterpriseConfigServiceDirectoryConfig']: + """ + Configuration for using Service Directory to privately connect to a GitHub Enterprise server. This should only be set if the GitHub Enterprise server is hosted on-premises and not reachable by public internet. If this field is left empty, calls to the GitHub Enterprise server will be made over the public internet. + """ + return pulumi.get(self, "service_directory_config") + + @property + @pulumi.getter(name="sslCa") + def ssl_ca(self) -> Optional[str]: + """ + SSL certificate to use for requests to GitHub Enterprise. + """ + return pulumi.get(self, "ssl_ca") + + @property + @pulumi.getter(name="webhookSecretSecretVersion") + def webhook_secret_secret_version(self) -> Optional[str]: + """ + SecretManager resource containing the webhook secret of the GitHub App, formatted as `projects/*/secrets/*/versions/*`. + """ + return pulumi.get(self, "webhook_secret_secret_version") + + +@pulumi.output_type +class ConnectionGithubEnterpriseConfigServiceDirectoryConfig(dict): + def __init__(__self__, *, + service: str): + """ + :param str service: Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + """ + pulumi.set(__self__, "service", service) + + @property + @pulumi.getter + def service(self) -> str: + """ + Required. The Service Directory service name. Format: projects/{project}/locations/{location}/namespaces/{namespace}/services/{service}. + """ + return pulumi.get(self, "service") + + +@pulumi.output_type +class ConnectionInstallationState(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "actionUri": + suggest = "action_uri" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ConnectionInstallationState. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ConnectionInstallationState.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ConnectionInstallationState.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + action_uri: Optional[str] = None, + message: Optional[str] = None, + stage: Optional[str] = None): + if action_uri is not None: + pulumi.set(__self__, "action_uri", action_uri) + if message is not None: + pulumi.set(__self__, "message", message) + if stage is not None: + pulumi.set(__self__, "stage", stage) + + @property + @pulumi.getter(name="actionUri") + def action_uri(self) -> Optional[str]: + return pulumi.get(self, "action_uri") + + @property + @pulumi.getter + def message(self) -> Optional[str]: + return pulumi.get(self, "message") + + @property + @pulumi.getter + def stage(self) -> Optional[str]: + return pulumi.get(self, "stage") + + diff --git a/sdk/python/pulumi_gcp/cloudbuildv2/repository.py b/sdk/python/pulumi_gcp/cloudbuildv2/repository.py new file mode 100644 index 0000000000..8d742fe633 --- /dev/null +++ b/sdk/python/pulumi_gcp/cloudbuildv2/repository.py @@ -0,0 +1,580 @@ +# 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 pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities + +__all__ = ['RepositoryArgs', 'Repository'] + +@pulumi.input_type +class RepositoryArgs: + def __init__(__self__, *, + parent_connection: pulumi.Input[str], + remote_uri: pulumi.Input[str], + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a Repository resource. + :param pulumi.Input[str] parent_connection: The connection for the resource + :param pulumi.Input[str] remote_uri: Required. Git Clone HTTPS URI. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Allows clients to store small amounts of arbitrary data. + :param pulumi.Input[str] location: The location for the resource + :param pulumi.Input[str] name: Name of the repository. + :param pulumi.Input[str] project: The project for the resource + """ + pulumi.set(__self__, "parent_connection", parent_connection) + pulumi.set(__self__, "remote_uri", remote_uri) + if annotations is not None: + pulumi.set(__self__, "annotations", annotations) + 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) + + @property + @pulumi.getter(name="parentConnection") + def parent_connection(self) -> pulumi.Input[str]: + """ + The connection for the resource + """ + return pulumi.get(self, "parent_connection") + + @parent_connection.setter + def parent_connection(self, value: pulumi.Input[str]): + pulumi.set(self, "parent_connection", value) + + @property + @pulumi.getter(name="remoteUri") + def remote_uri(self) -> pulumi.Input[str]: + """ + Required. Git Clone HTTPS URI. + """ + return pulumi.get(self, "remote_uri") + + @remote_uri.setter + def remote_uri(self, value: pulumi.Input[str]): + pulumi.set(self, "remote_uri", value) + + @property + @pulumi.getter + def annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Allows clients to store small amounts of arbitrary data. + """ + return pulumi.get(self, "annotations") + + @annotations.setter + def annotations(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "annotations", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location for the 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]]: + """ + Name of the repository. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The project for the resource + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + +@pulumi.input_type +class _RepositoryState: + def __init__(__self__, *, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + create_time: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parent_connection: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + remote_uri: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering Repository resources. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Allows clients to store small amounts of arbitrary data. + :param pulumi.Input[str] create_time: Output only. Server assigned timestamp for when the connection was created. + :param pulumi.Input[str] etag: This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + :param pulumi.Input[str] location: The location for the resource + :param pulumi.Input[str] name: Name of the repository. + :param pulumi.Input[str] parent_connection: The connection for the resource + :param pulumi.Input[str] project: The project for the resource + :param pulumi.Input[str] remote_uri: Required. Git Clone HTTPS URI. + :param pulumi.Input[str] update_time: Output only. Server assigned timestamp for when the connection was updated. + """ + if annotations is not None: + pulumi.set(__self__, "annotations", annotations) + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if etag is not None: + pulumi.set(__self__, "etag", etag) + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + if parent_connection is not None: + pulumi.set(__self__, "parent_connection", parent_connection) + if project is not None: + pulumi.set(__self__, "project", project) + if remote_uri is not None: + pulumi.set(__self__, "remote_uri", remote_uri) + if update_time is not None: + pulumi.set(__self__, "update_time", update_time) + + @property + @pulumi.getter + def annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Allows clients to store small amounts of arbitrary data. + """ + return pulumi.get(self, "annotations") + + @annotations.setter + def annotations(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "annotations", value) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Server assigned timestamp for when the connection 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 etag(self) -> Optional[pulumi.Input[str]]: + """ + This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + The location for the 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]]: + """ + Name of the repository. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter(name="parentConnection") + def parent_connection(self) -> Optional[pulumi.Input[str]]: + """ + The connection for the resource + """ + return pulumi.get(self, "parent_connection") + + @parent_connection.setter + def parent_connection(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "parent_connection", value) + + @property + @pulumi.getter + def project(self) -> Optional[pulumi.Input[str]]: + """ + The project for the resource + """ + return pulumi.get(self, "project") + + @project.setter + def project(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "project", value) + + @property + @pulumi.getter(name="remoteUri") + def remote_uri(self) -> Optional[pulumi.Input[str]]: + """ + Required. Git Clone HTTPS URI. + """ + return pulumi.get(self, "remote_uri") + + @remote_uri.setter + def remote_uri(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "remote_uri", value) + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> Optional[pulumi.Input[str]]: + """ + Output only. Server assigned timestamp for when the connection 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 Repository(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parent_connection: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + remote_uri: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + Beta only: The Cloudbuildv2 Repository resource + + ## Example Usage + ### Repository In GitHub Connection + Creates a Repository resource inside a Connection to github.com + ```python + import pulumi + import pulumi_gcp as gcp + + github_token_secret = gcp.secretmanager.Secret("github-token-secret", + secret_id="github-token-secret", + replication=gcp.secretmanager.SecretReplicationArgs( + automatic=True, + ), + opts=pulumi.ResourceOptions(provider=google_beta)) + github_token_secret_version = gcp.secretmanager.SecretVersion("github-token-secret-version", + secret=github_token_secret.id, + secret_data=(lambda path: open(path).read())("my-github-token.txt"), + opts=pulumi.ResourceOptions(provider=google_beta)) + p4sa_secret_accessor = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( + role="roles/secretmanager.secretAccessor", + members=["serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com"], + )]) + policy = gcp.secretmanager.SecretIamPolicy("policy", + secret_id=github_token_secret.secret_id, + policy_data=p4sa_secret_accessor.policy_data, + opts=pulumi.ResourceOptions(provider=google_beta)) + my_connection = gcp.cloudbuildv2.Connection("my-connection", + location="us-west1", + github_config=gcp.cloudbuildv2.ConnectionGithubConfigArgs( + app_installation_id=123123, + authorizer_credential=gcp.cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs( + oauth_token_secret_version=github_token_secret_version.id, + ), + ), + opts=pulumi.ResourceOptions(provider=google_beta)) + my_repository = gcp.cloudbuildv2.Repository("my-repository", + location="us-west1", + parent_connection=my_connection.name, + remote_uri="https://github.com/myuser/myrepo.git", + opts=pulumi.ResourceOptions(provider=google_beta)) + ``` + + ## Import + + Repository can be imported using any of these accepted formats + + ```sh + $ pulumi import gcp:cloudbuildv2/repository:Repository default projects/{{project}}/locations/{{location}}/connections/{{parent_connection}}/repositories/{{name}} + ``` + + ```sh + $ pulumi import gcp:cloudbuildv2/repository:Repository default {{project}}/{{location}}/{{parent_connection}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:cloudbuildv2/repository:Repository default {{location}}/{{parent_connection}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Allows clients to store small amounts of arbitrary data. + :param pulumi.Input[str] location: The location for the resource + :param pulumi.Input[str] name: Name of the repository. + :param pulumi.Input[str] parent_connection: The connection for the resource + :param pulumi.Input[str] project: The project for the resource + :param pulumi.Input[str] remote_uri: Required. Git Clone HTTPS URI. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: RepositoryArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Beta only: The Cloudbuildv2 Repository resource + + ## Example Usage + ### Repository In GitHub Connection + Creates a Repository resource inside a Connection to github.com + ```python + import pulumi + import pulumi_gcp as gcp + + github_token_secret = gcp.secretmanager.Secret("github-token-secret", + secret_id="github-token-secret", + replication=gcp.secretmanager.SecretReplicationArgs( + automatic=True, + ), + opts=pulumi.ResourceOptions(provider=google_beta)) + github_token_secret_version = gcp.secretmanager.SecretVersion("github-token-secret-version", + secret=github_token_secret.id, + secret_data=(lambda path: open(path).read())("my-github-token.txt"), + opts=pulumi.ResourceOptions(provider=google_beta)) + p4sa_secret_accessor = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( + role="roles/secretmanager.secretAccessor", + members=["serviceAccount:service-123456789@gcp-sa-cloudbuild.iam.gserviceaccount.com"], + )]) + policy = gcp.secretmanager.SecretIamPolicy("policy", + secret_id=github_token_secret.secret_id, + policy_data=p4sa_secret_accessor.policy_data, + opts=pulumi.ResourceOptions(provider=google_beta)) + my_connection = gcp.cloudbuildv2.Connection("my-connection", + location="us-west1", + github_config=gcp.cloudbuildv2.ConnectionGithubConfigArgs( + app_installation_id=123123, + authorizer_credential=gcp.cloudbuildv2.ConnectionGithubConfigAuthorizerCredentialArgs( + oauth_token_secret_version=github_token_secret_version.id, + ), + ), + opts=pulumi.ResourceOptions(provider=google_beta)) + my_repository = gcp.cloudbuildv2.Repository("my-repository", + location="us-west1", + parent_connection=my_connection.name, + remote_uri="https://github.com/myuser/myrepo.git", + opts=pulumi.ResourceOptions(provider=google_beta)) + ``` + + ## Import + + Repository can be imported using any of these accepted formats + + ```sh + $ pulumi import gcp:cloudbuildv2/repository:Repository default projects/{{project}}/locations/{{location}}/connections/{{parent_connection}}/repositories/{{name}} + ``` + + ```sh + $ pulumi import gcp:cloudbuildv2/repository:Repository default {{project}}/{{location}}/{{parent_connection}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:cloudbuildv2/repository:Repository default {{location}}/{{parent_connection}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param RepositoryArgs 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(RepositoryArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parent_connection: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + remote_uri: 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__ = RepositoryArgs.__new__(RepositoryArgs) + + __props__.__dict__["annotations"] = annotations + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + if parent_connection is None and not opts.urn: + raise TypeError("Missing required property 'parent_connection'") + __props__.__dict__["parent_connection"] = parent_connection + __props__.__dict__["project"] = project + if remote_uri is None and not opts.urn: + raise TypeError("Missing required property 'remote_uri'") + __props__.__dict__["remote_uri"] = remote_uri + __props__.__dict__["create_time"] = None + __props__.__dict__["etag"] = None + __props__.__dict__["update_time"] = None + super(Repository, __self__).__init__( + 'gcp:cloudbuildv2/repository:Repository', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + create_time: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parent_connection: Optional[pulumi.Input[str]] = None, + project: Optional[pulumi.Input[str]] = None, + remote_uri: Optional[pulumi.Input[str]] = None, + update_time: Optional[pulumi.Input[str]] = None) -> 'Repository': + """ + Get an existing Repository resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Allows clients to store small amounts of arbitrary data. + :param pulumi.Input[str] create_time: Output only. Server assigned timestamp for when the connection was created. + :param pulumi.Input[str] etag: This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + :param pulumi.Input[str] location: The location for the resource + :param pulumi.Input[str] name: Name of the repository. + :param pulumi.Input[str] parent_connection: The connection for the resource + :param pulumi.Input[str] project: The project for the resource + :param pulumi.Input[str] remote_uri: Required. Git Clone HTTPS URI. + :param pulumi.Input[str] update_time: Output only. Server assigned timestamp for when the connection was updated. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _RepositoryState.__new__(_RepositoryState) + + __props__.__dict__["annotations"] = annotations + __props__.__dict__["create_time"] = create_time + __props__.__dict__["etag"] = etag + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["parent_connection"] = parent_connection + __props__.__dict__["project"] = project + __props__.__dict__["remote_uri"] = remote_uri + __props__.__dict__["update_time"] = update_time + return Repository(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def annotations(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + Allows clients to store small amounts of arbitrary data. + """ + return pulumi.get(self, "annotations") + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + Output only. Server assigned timestamp for when the connection was created. + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter + def etag(self) -> pulumi.Output[str]: + """ + This checksum is computed by the server based on the value of other fields, and may be sent on update and delete requests to ensure the client has an up-to-date value before proceeding. + """ + return pulumi.get(self, "etag") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[str]: + """ + The location for the resource + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + Name of the repository. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter(name="parentConnection") + def parent_connection(self) -> pulumi.Output[str]: + """ + The connection for the resource + """ + return pulumi.get(self, "parent_connection") + + @property + @pulumi.getter + def project(self) -> pulumi.Output[str]: + """ + The project for the resource + """ + return pulumi.get(self, "project") + + @property + @pulumi.getter(name="remoteUri") + def remote_uri(self) -> pulumi.Output[str]: + """ + Required. Git Clone HTTPS URI. + """ + return pulumi.get(self, "remote_uri") + + @property + @pulumi.getter(name="updateTime") + def update_time(self) -> pulumi.Output[str]: + """ + Output only. Server assigned timestamp for when the connection was updated. + """ + return pulumi.get(self, "update_time") + diff --git a/sdk/python/pulumi_gcp/cloudfunctions/function.py b/sdk/python/pulumi_gcp/cloudfunctions/function.py index 1009d6d1a5..67cb33231e 100644 --- a/sdk/python/pulumi_gcp/cloudfunctions/function.py +++ b/sdk/python/pulumi_gcp/cloudfunctions/function.py @@ -1570,7 +1570,7 @@ def labels(self) -> pulumi.Output[Optional[Mapping[str, Any]]]: @property @pulumi.getter(name="maxInstances") - def max_instances(self) -> pulumi.Output[Optional[int]]: + def max_instances(self) -> pulumi.Output[int]: """ The limit on the maximum number of function instances that may coexist at a given time. """ diff --git a/sdk/python/pulumi_gcp/cloudfunctions/get_function.py b/sdk/python/pulumi_gcp/cloudfunctions/get_function.py index 218c6a8fcd..81bda393b6 100644 --- a/sdk/python/pulumi_gcp/cloudfunctions/get_function.py +++ b/sdk/python/pulumi_gcp/cloudfunctions/get_function.py @@ -220,7 +220,7 @@ def labels(self) -> Mapping[str, Any]: @pulumi.getter(name="maxInstances") def max_instances(self) -> int: """ - The limit on the maximum number of function instances that may coexist at a given time. + The limit on the maximum number of function instances that may coexist at a given time. If unset or set to `0`, the API default will be used. """ return pulumi.get(self, "max_instances") diff --git a/sdk/python/pulumi_gcp/cloudidentity/group_membership.py b/sdk/python/pulumi_gcp/cloudidentity/group_membership.py index e8bc14da62..9c01120185 100644 --- a/sdk/python/pulumi_gcp/cloudidentity/group_membership.py +++ b/sdk/python/pulumi_gcp/cloudidentity/group_membership.py @@ -27,7 +27,6 @@ def __init__(__self__, *, Must not contain duplicate MembershipRoles with the same name. Structure is documented below. :param pulumi.Input['GroupMembershipMemberKeyArgs'] member_key: EntityKey of the member. - Structure is documented below. :param pulumi.Input['GroupMembershipPreferredMemberKeyArgs'] preferred_member_key: EntityKey of the member. Structure is documented below. """ @@ -69,7 +68,6 @@ def roles(self, value: pulumi.Input[Sequence[pulumi.Input['GroupMembershipRoleAr def member_key(self) -> Optional[pulumi.Input['GroupMembershipMemberKeyArgs']]: """ EntityKey of the member. - Structure is documented below. """ return pulumi.get(self, "member_key") @@ -107,7 +105,6 @@ def __init__(__self__, *, :param pulumi.Input[str] create_time: The time when the Membership was created. :param pulumi.Input[str] group: The name of the Group to create this membership in. :param pulumi.Input['GroupMembershipMemberKeyArgs'] member_key: EntityKey of the member. - Structure is documented below. :param pulumi.Input[str] name: The name of the MembershipRole. Must be one of OWNER, MANAGER, MEMBER. Possible values are `OWNER`, `MANAGER`, and `MEMBER`. :param pulumi.Input['GroupMembershipPreferredMemberKeyArgs'] preferred_member_key: EntityKey of the member. @@ -164,7 +161,6 @@ def group(self, value: Optional[pulumi.Input[str]]): def member_key(self) -> Optional[pulumi.Input['GroupMembershipMemberKeyArgs']]: """ EntityKey of the member. - Structure is documented below. """ return pulumi.get(self, "member_key") @@ -338,7 +334,6 @@ def __init__(__self__, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] group: The name of the Group to create this membership in. :param pulumi.Input[pulumi.InputType['GroupMembershipMemberKeyArgs']] member_key: EntityKey of the member. - Structure is documented below. :param pulumi.Input[pulumi.InputType['GroupMembershipPreferredMemberKeyArgs']] preferred_member_key: EntityKey of the member. Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['GroupMembershipRoleArgs']]]] roles: The MembershipRoles that apply to the Membership. @@ -506,7 +501,6 @@ def get(resource_name: str, :param pulumi.Input[str] create_time: The time when the Membership was created. :param pulumi.Input[str] group: The name of the Group to create this membership in. :param pulumi.Input[pulumi.InputType['GroupMembershipMemberKeyArgs']] member_key: EntityKey of the member. - Structure is documented below. :param pulumi.Input[str] name: The name of the MembershipRole. Must be one of OWNER, MANAGER, MEMBER. Possible values are `OWNER`, `MANAGER`, and `MEMBER`. :param pulumi.Input[pulumi.InputType['GroupMembershipPreferredMemberKeyArgs']] preferred_member_key: EntityKey of the member. @@ -552,7 +546,6 @@ def group(self) -> pulumi.Output[str]: def member_key(self) -> pulumi.Output['outputs.GroupMembershipMemberKey']: """ EntityKey of the member. - Structure is documented below. """ return pulumi.get(self, "member_key") diff --git a/sdk/python/pulumi_gcp/cloudrun/_inputs.py b/sdk/python/pulumi_gcp/cloudrun/_inputs.py index 21985f32ad..d11418122a 100644 --- a/sdk/python/pulumi_gcp/cloudrun/_inputs.py +++ b/sdk/python/pulumi_gcp/cloudrun/_inputs.py @@ -63,12 +63,6 @@ def __init__(__self__, *, """ :param pulumi.Input[str] namespace: In Cloud Run the namespace must be equal to either the project ID or project number. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Annotations is a key value map stored with a resource that - may be set by external tools to store and retrieve arbitrary metadata. More - info: http://kubernetes.io/docs/user-guide/annotations - **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. :param pulumi.Input[int] generation: A sequence number representing a specific generation of the desired state. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -116,14 +110,6 @@ def namespace(self, value: pulumi.Input[str]): @property @pulumi.getter def annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: - """ - Annotations is a key value map stored with a resource that - may be set by external tools to store and retrieve arbitrary metadata. More - info: http://kubernetes.io/docs/user-guide/annotations - **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - """ return pulumi.get(self, "annotations") @annotations.setter @@ -572,15 +558,6 @@ def __init__(__self__, *, self_link: Optional[pulumi.Input[str]] = None, uid: Optional[pulumi.Input[str]] = None): """ - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Annotations is a key value map stored with a resource that - may be set by external tools to store and retrieve arbitrary metadata. More - info: http://kubernetes.io/docs/user-guide/annotations - **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - for the Service. For example, `"run.googleapis.com/ingress" = "all"`. :param pulumi.Input[int] generation: A sequence number representing a specific generation of the desired state. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -618,17 +595,6 @@ def __init__(__self__, *, @property @pulumi.getter def annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: - """ - Annotations is a key value map stored with a resource that - may be set by external tools to store and retrieve arbitrary metadata. More - info: http://kubernetes.io/docs/user-guide/annotations - **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - """ return pulumi.get(self, "annotations") @annotations.setter @@ -965,15 +931,6 @@ def __init__(__self__, *, self_link: Optional[pulumi.Input[str]] = None, uid: Optional[pulumi.Input[str]] = None): """ - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Annotations is a key value map stored with a resource that - may be set by external tools to store and retrieve arbitrary metadata. More - info: http://kubernetes.io/docs/user-guide/annotations - **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - for the Service. For example, `"run.googleapis.com/ingress" = "all"`. :param pulumi.Input[int] generation: A sequence number representing a specific generation of the desired state. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -1017,17 +974,6 @@ def __init__(__self__, *, @property @pulumi.getter def annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: - """ - Annotations is a key value map stored with a resource that - may be set by external tools to store and retrieve arbitrary metadata. More - info: http://kubernetes.io/docs/user-guide/annotations - **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - """ return pulumi.get(self, "annotations") @annotations.setter @@ -1313,9 +1259,6 @@ def __init__(__self__, *, Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input['ServiceTemplateSpecContainerEnvArgs']]] envs: List of environment variables to set in the container. Structure is documented below. - :param pulumi.Input['ServiceTemplateSpecContainerLivenessProbeArgs'] liveness_probe: Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input['ServiceTemplateSpecContainerPortArgs']]] ports: List of open ports in the container. More Info: https://cloud.google.com/run/docs/reference/rest/v1/RevisionSpec#ContainerPort @@ -1448,11 +1391,6 @@ def envs(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['ServiceTempla @property @pulumi.getter(name="livenessProbe") def liveness_probe(self) -> Optional[pulumi.Input['ServiceTemplateSpecContainerLivenessProbeArgs']]: - """ - Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - Structure is documented below. - """ return pulumi.get(self, "liveness_probe") @liveness_probe.setter diff --git a/sdk/python/pulumi_gcp/cloudrun/outputs.py b/sdk/python/pulumi_gcp/cloudrun/outputs.py index a40cee0b3e..2a70a289c3 100644 --- a/sdk/python/pulumi_gcp/cloudrun/outputs.py +++ b/sdk/python/pulumi_gcp/cloudrun/outputs.py @@ -114,12 +114,6 @@ def __init__(__self__, *, """ :param str namespace: In Cloud Run the namespace must be equal to either the project ID or project number. - :param Mapping[str, str] annotations: Annotations is a key value map stored with a resource that - may be set by external tools to store and retrieve arbitrary metadata. More - info: http://kubernetes.io/docs/user-guide/annotations - **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. :param int generation: A sequence number representing a specific generation of the desired state. :param Mapping[str, str] labels: Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -163,14 +157,6 @@ def namespace(self) -> str: @property @pulumi.getter def annotations(self) -> Optional[Mapping[str, str]]: - """ - Annotations is a key value map stored with a resource that - may be set by external tools to store and retrieve arbitrary metadata. More - info: http://kubernetes.io/docs/user-guide/annotations - **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - """ return pulumi.get(self, "annotations") @property @@ -576,15 +562,6 @@ def __init__(__self__, *, self_link: Optional[str] = None, uid: Optional[str] = None): """ - :param Mapping[str, str] annotations: Annotations is a key value map stored with a resource that - may be set by external tools to store and retrieve arbitrary metadata. More - info: http://kubernetes.io/docs/user-guide/annotations - **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - for the Service. For example, `"run.googleapis.com/ingress" = "all"`. :param int generation: A sequence number representing a specific generation of the desired state. :param Mapping[str, str] labels: Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -622,17 +599,6 @@ def __init__(__self__, *, @property @pulumi.getter def annotations(self) -> Optional[Mapping[str, str]]: - """ - Annotations is a key value map stored with a resource that - may be set by external tools to store and retrieve arbitrary metadata. More - info: http://kubernetes.io/docs/user-guide/annotations - **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - """ return pulumi.get(self, "annotations") @property @@ -937,15 +903,6 @@ def __init__(__self__, *, self_link: Optional[str] = None, uid: Optional[str] = None): """ - :param Mapping[str, str] annotations: Annotations is a key value map stored with a resource that - may be set by external tools to store and retrieve arbitrary metadata. More - info: http://kubernetes.io/docs/user-guide/annotations - **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - for the Service. For example, `"run.googleapis.com/ingress" = "all"`. :param int generation: A sequence number representing a specific generation of the desired state. :param Mapping[str, str] labels: Map of string keys and values that can be used to organize and categorize (scope and select) objects. May match selectors of replication controllers @@ -989,17 +946,6 @@ def __init__(__self__, *, @property @pulumi.getter def annotations(self) -> Optional[Mapping[str, str]]: - """ - Annotations is a key value map stored with a resource that - may be set by external tools to store and retrieve arbitrary metadata. More - info: http://kubernetes.io/docs/user-guide/annotations - **Note**: The Cloud Run API may add additional annotations that were not provided in your config. - If the provider plan shows a diff where a server-side annotation is added, you can add it to your config - or apply the lifecycle.ignore_changes rule to the metadata.0.annotations field. - Cloud Run (fully managed) uses the following annotation keys to configure features on a Service: - - `run.googleapis.com/ingress` sets the [ingress settings](https://cloud.google.com/sdk/gcloud/reference/run/deploy#--ingress) - for the Service. For example, `"run.googleapis.com/ingress" = "all"`. - """ return pulumi.get(self, "annotations") @property @@ -1274,9 +1220,6 @@ def __init__(__self__, *, Structure is documented below. :param Sequence['ServiceTemplateSpecContainerEnvArgs'] envs: List of environment variables to set in the container. Structure is documented below. - :param 'ServiceTemplateSpecContainerLivenessProbeArgs' liveness_probe: Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - Structure is documented below. :param Sequence['ServiceTemplateSpecContainerPortArgs'] ports: List of open ports in the container. More Info: https://cloud.google.com/run/docs/reference/rest/v1/RevisionSpec#ContainerPort @@ -1383,11 +1326,6 @@ def envs(self) -> Optional[Sequence['outputs.ServiceTemplateSpecContainerEnv']]: @property @pulumi.getter(name="livenessProbe") def liveness_probe(self) -> Optional['outputs.ServiceTemplateSpecContainerLivenessProbe']: - """ - Periodic probe of container liveness. Container will be restarted if the probe fails. More info: - https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes - Structure is documented below. - """ return pulumi.get(self, "liveness_probe") @property diff --git a/sdk/python/pulumi_gcp/cloudrun/service.py b/sdk/python/pulumi_gcp/cloudrun/service.py index aa32387ebe..616e3b98e1 100644 --- a/sdk/python/pulumi_gcp/cloudrun/service.py +++ b/sdk/python/pulumi_gcp/cloudrun/service.py @@ -403,49 +403,6 @@ def __init__(__self__, Have a look at the Cloud Run Anthos example below. ## Example Usage - ### Cloud Run Service Pubsub - - ```python - import pulumi - import pulumi_gcp as gcp - - default = gcp.cloudrun.Service("default", - location="us-central1", - template=gcp.cloudrun.ServiceTemplateArgs( - spec=gcp.cloudrun.ServiceTemplateSpecArgs( - containers=[gcp.cloudrun.ServiceTemplateSpecContainerArgs( - image="gcr.io/cloudrun/hello", - )], - ), - ), - traffics=[gcp.cloudrun.ServiceTrafficArgs( - percent=100, - latest_revision=True, - )]) - sa = gcp.service_account.Account("sa", - account_id="cloud-run-pubsub-invoker", - display_name="Cloud Run Pub/Sub Invoker") - binding = gcp.cloudrun.IamBinding("binding", - location=default.location, - service=default.name, - role="roles/run.invoker", - members=[sa.email.apply(lambda email: f"serviceAccount:{email}")]) - project = gcp.projects.IAMBinding("project", - role="roles/iam.serviceAccountTokenCreator", - members=[sa.email.apply(lambda email: f"serviceAccount:{email}")]) - topic = gcp.pubsub.Topic("topic") - subscription = gcp.pubsub.Subscription("subscription", - topic=topic.name, - push_config=gcp.pubsub.SubscriptionPushConfigArgs( - push_endpoint=default.statuses[0].url, - oidc_token=gcp.pubsub.SubscriptionPushConfigOidcTokenArgs( - service_account_email=sa.email, - ), - attributes={ - "x-goog-version": "v1", - }, - )) - ``` ### Cloud Run Service Basic ```python @@ -491,7 +448,7 @@ def __init__(__self__, annotations={ "autoscaling.knative.dev/maxScale": "1000", "run.googleapis.com/cloudsql-instances": instance.connection_name, - "run.googleapis.com/client-name": "demo", + "run.googleapis.com/client-name": "terraform", }, ), ), @@ -645,49 +602,6 @@ def __init__(__self__, Have a look at the Cloud Run Anthos example below. ## Example Usage - ### Cloud Run Service Pubsub - - ```python - import pulumi - import pulumi_gcp as gcp - - default = gcp.cloudrun.Service("default", - location="us-central1", - template=gcp.cloudrun.ServiceTemplateArgs( - spec=gcp.cloudrun.ServiceTemplateSpecArgs( - containers=[gcp.cloudrun.ServiceTemplateSpecContainerArgs( - image="gcr.io/cloudrun/hello", - )], - ), - ), - traffics=[gcp.cloudrun.ServiceTrafficArgs( - percent=100, - latest_revision=True, - )]) - sa = gcp.service_account.Account("sa", - account_id="cloud-run-pubsub-invoker", - display_name="Cloud Run Pub/Sub Invoker") - binding = gcp.cloudrun.IamBinding("binding", - location=default.location, - service=default.name, - role="roles/run.invoker", - members=[sa.email.apply(lambda email: f"serviceAccount:{email}")]) - project = gcp.projects.IAMBinding("project", - role="roles/iam.serviceAccountTokenCreator", - members=[sa.email.apply(lambda email: f"serviceAccount:{email}")]) - topic = gcp.pubsub.Topic("topic") - subscription = gcp.pubsub.Subscription("subscription", - topic=topic.name, - push_config=gcp.pubsub.SubscriptionPushConfigArgs( - push_endpoint=default.statuses[0].url, - oidc_token=gcp.pubsub.SubscriptionPushConfigOidcTokenArgs( - service_account_email=sa.email, - ), - attributes={ - "x-goog-version": "v1", - }, - )) - ``` ### Cloud Run Service Basic ```python @@ -733,7 +647,7 @@ def __init__(__self__, annotations={ "autoscaling.knative.dev/maxScale": "1000", "run.googleapis.com/cloudsql-instances": instance.connection_name, - "run.googleapis.com/client-name": "demo", + "run.googleapis.com/client-name": "terraform", }, ), ), diff --git a/sdk/python/pulumi_gcp/cloudrunv2/_inputs.py b/sdk/python/pulumi_gcp/cloudrunv2/_inputs.py index 65768d26ee..6445168798 100644 --- a/sdk/python/pulumi_gcp/cloudrunv2/_inputs.py +++ b/sdk/python/pulumi_gcp/cloudrunv2/_inputs.py @@ -619,7 +619,9 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input[str]]] commands: Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell :param pulumi.Input[Sequence[pulumi.Input['JobTemplateTemplateContainerEnvArgs']]] envs: List of environment variables to set in the container. Structure is documented below. - :param pulumi.Input['JobTemplateTemplateContainerLivenessProbeArgs'] liveness_probe: Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + :param pulumi.Input['JobTemplateTemplateContainerLivenessProbeArgs'] liveness_probe: (Optional, Deprecated) + Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + This field is not supported in Cloud Run Job currently. Structure is documented below. :param pulumi.Input[str] name: Name of the container specified as a DNS_LABEL. :param pulumi.Input[Sequence[pulumi.Input['JobTemplateTemplateContainerPortArgs']]] ports: List of ports to expose from the container. Only a single port can be specified. The specified ports must be listening on all interfaces (0.0.0.0) within the container to be accessible. @@ -627,7 +629,9 @@ def __init__(__self__, *, Structure is documented below. :param pulumi.Input['JobTemplateTemplateContainerResourcesArgs'] resources: Compute Resource requirements by this container. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources Structure is documented below. - :param pulumi.Input['JobTemplateTemplateContainerStartupProbeArgs'] startup_probe: Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + :param pulumi.Input['JobTemplateTemplateContainerStartupProbeArgs'] startup_probe: (Optional, Deprecated) + Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + This field is not supported in Cloud Run Job currently. Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input['JobTemplateTemplateContainerVolumeMountArgs']]] volume_mounts: Volume to mount into the container's filesystem. Structure is documented below. @@ -640,6 +644,9 @@ def __init__(__self__, *, pulumi.set(__self__, "commands", commands) if envs is not None: pulumi.set(__self__, "envs", envs) + if liveness_probe is not None: + warnings.warn("""Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release.""", DeprecationWarning) + pulumi.log.warn("""liveness_probe is deprecated: Cloud Run Job does not support liveness probe and `liveness_probe` field will be removed in a future major release.""") if liveness_probe is not None: pulumi.set(__self__, "liveness_probe", liveness_probe) if name is not None: @@ -648,6 +655,9 @@ def __init__(__self__, *, pulumi.set(__self__, "ports", ports) if resources is not None: pulumi.set(__self__, "resources", resources) + if startup_probe is not None: + warnings.warn("""Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release.""", DeprecationWarning) + pulumi.log.warn("""startup_probe is deprecated: Cloud Run Job does not support startup probe and `startup_probe` field will be removed in a future major release.""") if startup_probe is not None: pulumi.set(__self__, "startup_probe", startup_probe) if volume_mounts is not None: @@ -708,7 +718,9 @@ def envs(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['JobTemplateTe @pulumi.getter(name="livenessProbe") def liveness_probe(self) -> Optional[pulumi.Input['JobTemplateTemplateContainerLivenessProbeArgs']]: """ + (Optional, Deprecated) Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + This field is not supported in Cloud Run Job currently. Structure is documented below. """ return pulumi.get(self, "liveness_probe") @@ -760,7 +772,9 @@ def resources(self, value: Optional[pulumi.Input['JobTemplateTemplateContainerRe @pulumi.getter(name="startupProbe") def startup_probe(self) -> Optional[pulumi.Input['JobTemplateTemplateContainerStartupProbeArgs']]: """ + (Optional, Deprecated) Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + This field is not supported in Cloud Run Job currently. Structure is documented below. """ return pulumi.get(self, "startup_probe") @@ -2590,11 +2604,12 @@ def __init__(__self__, *, timeout_seconds: Optional[pulumi.Input[int]] = None): """ :param pulumi.Input[int] failure_threshold: Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. - :param pulumi.Input['ServiceTemplateContainerLivenessProbeHttpGetArgs'] http_get: HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + :param pulumi.Input['ServiceTemplateContainerLivenessProbeHttpGetArgs'] http_get: HTTPGet specifies the http request to perform. Structure is documented below. :param pulumi.Input[int] initial_delay_seconds: Number of seconds after the container has started before the probe is initiated. Defaults to 0 seconds. Minimum value is 0. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes :param pulumi.Input[int] period_seconds: How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240. Must be greater or equal than timeoutSeconds - :param pulumi.Input['ServiceTemplateContainerLivenessProbeTcpSocketArgs'] tcp_socket: TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + :param pulumi.Input['ServiceTemplateContainerLivenessProbeTcpSocketArgs'] tcp_socket: (Optional, Deprecated) + TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. Structure is documented below. :param pulumi.Input[int] timeout_seconds: Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. Maximum value is 3600. Must be smaller than periodSeconds. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes """ @@ -2606,6 +2621,9 @@ def __init__(__self__, *, pulumi.set(__self__, "initial_delay_seconds", initial_delay_seconds) if period_seconds is not None: pulumi.set(__self__, "period_seconds", period_seconds) + if tcp_socket is not None: + warnings.warn("""Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release.""", DeprecationWarning) + pulumi.log.warn("""tcp_socket is deprecated: Cloud Run does not support tcp socket in liveness probe and `liveness_probe.tcp_socket` field will be removed in a future major release.""") if tcp_socket is not None: pulumi.set(__self__, "tcp_socket", tcp_socket) if timeout_seconds is not None: @@ -2627,7 +2645,7 @@ def failure_threshold(self, value: Optional[pulumi.Input[int]]): @pulumi.getter(name="httpGet") def http_get(self) -> Optional[pulumi.Input['ServiceTemplateContainerLivenessProbeHttpGetArgs']]: """ - HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + HTTPGet specifies the http request to perform. Structure is documented below. """ return pulumi.get(self, "http_get") @@ -2664,7 +2682,8 @@ def period_seconds(self, value: Optional[pulumi.Input[int]]): @pulumi.getter(name="tcpSocket") def tcp_socket(self) -> Optional[pulumi.Input['ServiceTemplateContainerLivenessProbeTcpSocketArgs']]: """ - TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + (Optional, Deprecated) + TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. Structure is documented below. """ return pulumi.get(self, "tcp_socket") diff --git a/sdk/python/pulumi_gcp/cloudrunv2/job.py b/sdk/python/pulumi_gcp/cloudrunv2/job.py index 95657e13ee..f70b2ba8d3 100644 --- a/sdk/python/pulumi_gcp/cloudrunv2/job.py +++ b/sdk/python/pulumi_gcp/cloudrunv2/job.py @@ -635,37 +635,6 @@ def __init__(__self__, ), )) ``` - ### Cloudrunv2 Job Probes - - ```python - import pulumi - import pulumi_gcp as gcp - - default = gcp.cloudrunv2.Job("default", - launch_stage="BETA", - location="us-central1", - template=gcp.cloudrunv2.JobTemplateArgs( - template=gcp.cloudrunv2.JobTemplateTemplateArgs( - containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs( - image="us-docker.pkg.dev/cloudrun/container/hello", - liveness_probe=gcp.cloudrunv2.JobTemplateTemplateContainerLivenessProbeArgs( - http_get=gcp.cloudrunv2.JobTemplateTemplateContainerLivenessProbeHttpGetArgs( - path="/", - ), - ), - startup_probe=gcp.cloudrunv2.JobTemplateTemplateContainerStartupProbeArgs( - failure_threshold=1, - initial_delay_seconds=0, - period_seconds=3, - tcp_socket=gcp.cloudrunv2.JobTemplateTemplateContainerStartupProbeTcpSocketArgs( - port=8080, - ), - timeout_seconds=1, - ), - )], - ), - )) - ``` ### Cloudrunv2 Job Secret ```python @@ -878,37 +847,6 @@ def __init__(__self__, ), )) ``` - ### Cloudrunv2 Job Probes - - ```python - import pulumi - import pulumi_gcp as gcp - - default = gcp.cloudrunv2.Job("default", - launch_stage="BETA", - location="us-central1", - template=gcp.cloudrunv2.JobTemplateArgs( - template=gcp.cloudrunv2.JobTemplateTemplateArgs( - containers=[gcp.cloudrunv2.JobTemplateTemplateContainerArgs( - image="us-docker.pkg.dev/cloudrun/container/hello", - liveness_probe=gcp.cloudrunv2.JobTemplateTemplateContainerLivenessProbeArgs( - http_get=gcp.cloudrunv2.JobTemplateTemplateContainerLivenessProbeHttpGetArgs( - path="/", - ), - ), - startup_probe=gcp.cloudrunv2.JobTemplateTemplateContainerStartupProbeArgs( - failure_threshold=1, - initial_delay_seconds=0, - period_seconds=3, - tcp_socket=gcp.cloudrunv2.JobTemplateTemplateContainerStartupProbeTcpSocketArgs( - port=8080, - ), - timeout_seconds=1, - ), - )], - ), - )) - ``` ### Cloudrunv2 Job Secret ```python diff --git a/sdk/python/pulumi_gcp/cloudrunv2/outputs.py b/sdk/python/pulumi_gcp/cloudrunv2/outputs.py index f70152444c..fa9938b52b 100644 --- a/sdk/python/pulumi_gcp/cloudrunv2/outputs.py +++ b/sdk/python/pulumi_gcp/cloudrunv2/outputs.py @@ -620,7 +620,9 @@ def __init__(__self__, *, :param Sequence[str] commands: Entrypoint array. Not executed within a shell. The docker image's ENTRYPOINT is used if this is not provided. Variable references $(VAR_NAME) are expanded using the container's environment. If a variable cannot be resolved, the reference in the input string will be unchanged. The $(VAR_NAME) syntax can be escaped with a double $$, ie: $$(VAR_NAME). Escaped references will never be expanded, regardless of whether the variable exists or not. More info: https://kubernetes.io/docs/tasks/inject-data-application/define-command-argument-container/#running-a-command-in-a-shell :param Sequence['JobTemplateTemplateContainerEnvArgs'] envs: List of environment variables to set in the container. Structure is documented below. - :param 'JobTemplateTemplateContainerLivenessProbeArgs' liveness_probe: Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + :param 'JobTemplateTemplateContainerLivenessProbeArgs' liveness_probe: (Optional, Deprecated) + Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + This field is not supported in Cloud Run Job currently. Structure is documented below. :param str name: Name of the container specified as a DNS_LABEL. :param Sequence['JobTemplateTemplateContainerPortArgs'] ports: List of ports to expose from the container. Only a single port can be specified. The specified ports must be listening on all interfaces (0.0.0.0) within the container to be accessible. @@ -628,7 +630,9 @@ def __init__(__self__, *, Structure is documented below. :param 'JobTemplateTemplateContainerResourcesArgs' resources: Compute Resource requirements by this container. More info: https://kubernetes.io/docs/concepts/storage/persistent-volumes#resources Structure is documented below. - :param 'JobTemplateTemplateContainerStartupProbeArgs' startup_probe: Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + :param 'JobTemplateTemplateContainerStartupProbeArgs' startup_probe: (Optional, Deprecated) + Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + This field is not supported in Cloud Run Job currently. Structure is documented below. :param Sequence['JobTemplateTemplateContainerVolumeMountArgs'] volume_mounts: Volume to mount into the container's filesystem. Structure is documented below. @@ -693,7 +697,9 @@ def envs(self) -> Optional[Sequence['outputs.JobTemplateTemplateContainerEnv']]: @pulumi.getter(name="livenessProbe") def liveness_probe(self) -> Optional['outputs.JobTemplateTemplateContainerLivenessProbe']: """ + (Optional, Deprecated) Periodic probe of container liveness. Container will be restarted if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + This field is not supported in Cloud Run Job currently. Structure is documented below. """ return pulumi.get(self, "liveness_probe") @@ -729,7 +735,9 @@ def resources(self) -> Optional['outputs.JobTemplateTemplateContainerResources'] @pulumi.getter(name="startupProbe") def startup_probe(self) -> Optional['outputs.JobTemplateTemplateContainerStartupProbe']: """ + (Optional, Deprecated) Startup probe of application within the container. All other probes are disabled if a startup probe is provided, until it succeeds. Container will not be added to service endpoints if the probe fails. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes + This field is not supported in Cloud Run Job currently. Structure is documented below. """ return pulumi.get(self, "startup_probe") @@ -2515,11 +2523,12 @@ def __init__(__self__, *, timeout_seconds: Optional[int] = None): """ :param int failure_threshold: Minimum consecutive failures for the probe to be considered failed after having succeeded. Defaults to 3. Minimum value is 1. - :param 'ServiceTemplateContainerLivenessProbeHttpGetArgs' http_get: HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + :param 'ServiceTemplateContainerLivenessProbeHttpGetArgs' http_get: HTTPGet specifies the http request to perform. Structure is documented below. :param int initial_delay_seconds: Number of seconds after the container has started before the probe is initiated. Defaults to 0 seconds. Minimum value is 0. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes :param int period_seconds: How often (in seconds) to perform the probe. Default to 10 seconds. Minimum value is 1. Maximum value for liveness probe is 3600. Maximum value for startup probe is 240. Must be greater or equal than timeoutSeconds - :param 'ServiceTemplateContainerLivenessProbeTcpSocketArgs' tcp_socket: TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + :param 'ServiceTemplateContainerLivenessProbeTcpSocketArgs' tcp_socket: (Optional, Deprecated) + TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. Structure is documented below. :param int timeout_seconds: Number of seconds after which the probe times out. Defaults to 1 second. Minimum value is 1. Maximum value is 3600. Must be smaller than periodSeconds. More info: https://kubernetes.io/docs/concepts/workloads/pods/pod-lifecycle#container-probes """ @@ -2548,7 +2557,7 @@ def failure_threshold(self) -> Optional[int]: @pulumi.getter(name="httpGet") def http_get(self) -> Optional['outputs.ServiceTemplateContainerLivenessProbeHttpGet']: """ - HTTPGet specifies the http request to perform. Exactly one of HTTPGet or TCPSocket must be specified. + HTTPGet specifies the http request to perform. Structure is documented below. """ return pulumi.get(self, "http_get") @@ -2573,7 +2582,8 @@ def period_seconds(self) -> Optional[int]: @pulumi.getter(name="tcpSocket") def tcp_socket(self) -> Optional['outputs.ServiceTemplateContainerLivenessProbeTcpSocket']: """ - TCPSocket specifies an action involving a TCP port. Exactly one of HTTPGet or TCPSocket must be specified. + (Optional, Deprecated) + TCPSocket specifies an action involving a TCP port. This field is not supported in liveness probe currently. Structure is documented below. """ return pulumi.get(self, "tcp_socket") diff --git a/sdk/python/pulumi_gcp/cloudscheduler/job.py b/sdk/python/pulumi_gcp/cloudscheduler/job.py index a30e5dd3d9..c9e5329ec8 100644 --- a/sdk/python/pulumi_gcp/cloudscheduler/job.py +++ b/sdk/python/pulumi_gcp/cloudscheduler/job.py @@ -56,7 +56,7 @@ def __init__(__self__, *, If the job providers a Pub/Sub target the cron will publish a message to the provided topic Structure is documented below. - :param pulumi.Input[str] region: Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + :param pulumi.Input[str] region: Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. :param pulumi.Input['JobRetryConfigArgs'] retry_config: By default, if a job does not complete successfully, meaning that an acknowledgement is not received from the handler, then it will be retried with exponential backoff according to the settings @@ -208,7 +208,7 @@ def pubsub_target(self, value: Optional[pulumi.Input['JobPubsubTargetArgs']]): @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: """ - Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. """ return pulumi.get(self, "region") @@ -301,7 +301,7 @@ def __init__(__self__, *, If the job providers a Pub/Sub target the cron will publish a message to the provided topic Structure is documented below. - :param pulumi.Input[str] region: Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + :param pulumi.Input[str] region: Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. :param pulumi.Input['JobRetryConfigArgs'] retry_config: By default, if a job does not complete successfully, meaning that an acknowledgement is not received from the handler, then it will be retried with exponential backoff according to the settings @@ -456,7 +456,7 @@ def pubsub_target(self, value: Optional[pulumi.Input['JobPubsubTargetArgs']]): @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: """ - Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. """ return pulumi.get(self, "region") @@ -662,7 +662,7 @@ def __init__(__self__, If the job providers a Pub/Sub target the cron will publish a message to the provided topic Structure is documented below. - :param pulumi.Input[str] region: Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + :param pulumi.Input[str] region: Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. :param pulumi.Input[pulumi.InputType['JobRetryConfigArgs']] retry_config: By default, if a job does not complete successfully, meaning that an acknowledgement is not received from the handler, then it will be retried with exponential backoff according to the settings @@ -881,7 +881,7 @@ def get(resource_name: str, If the job providers a Pub/Sub target the cron will publish a message to the provided topic Structure is documented below. - :param pulumi.Input[str] region: Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + :param pulumi.Input[str] region: Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. :param pulumi.Input[pulumi.InputType['JobRetryConfigArgs']] retry_config: By default, if a job does not complete successfully, meaning that an acknowledgement is not received from the handler, then it will be retried with exponential backoff according to the settings @@ -996,7 +996,7 @@ def pubsub_target(self) -> pulumi.Output[Optional['outputs.JobPubsubTarget']]: @pulumi.getter def region(self) -> pulumi.Output[str]: """ - Region where the scheduler job resides. If it is not provided, this provider will use the provider default. + Region where the scheduler job resides. If it is not provided, Terraform will use the provider default. """ return pulumi.get(self, "region") diff --git a/sdk/python/pulumi_gcp/composer/_inputs.py b/sdk/python/pulumi_gcp/composer/_inputs.py index a46f5f60a9..2432070601 100644 --- a/sdk/python/pulumi_gcp/composer/_inputs.py +++ b/sdk/python/pulumi_gcp/composer/_inputs.py @@ -22,6 +22,7 @@ 'EnvironmentConfigRecoveryConfigArgs', 'EnvironmentConfigRecoveryConfigScheduledSnapshotsConfigArgs', 'EnvironmentConfigSoftwareConfigArgs', + 'EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs', 'EnvironmentConfigWebServerConfigArgs', 'EnvironmentConfigWebServerNetworkAccessControlArgs', 'EnvironmentConfigWebServerNetworkAccessControlAllowedIpRangeArgs', @@ -719,6 +720,7 @@ def time_zone(self, value: Optional[pulumi.Input[str]]): class EnvironmentConfigSoftwareConfigArgs: def __init__(__self__, *, airflow_config_overrides: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + cloud_data_lineage_integration: Optional[pulumi.Input['EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs']] = None, env_variables: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, image_version: Optional[pulumi.Input[str]] = None, pypi_packages: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, @@ -726,6 +728,8 @@ def __init__(__self__, *, scheduler_count: Optional[pulumi.Input[int]] = None): if airflow_config_overrides is not None: pulumi.set(__self__, "airflow_config_overrides", airflow_config_overrides) + if cloud_data_lineage_integration is not None: + pulumi.set(__self__, "cloud_data_lineage_integration", cloud_data_lineage_integration) if env_variables is not None: pulumi.set(__self__, "env_variables", env_variables) if image_version is not None: @@ -746,6 +750,15 @@ def airflow_config_overrides(self) -> Optional[pulumi.Input[Mapping[str, pulumi. def airflow_config_overrides(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): pulumi.set(self, "airflow_config_overrides", value) + @property + @pulumi.getter(name="cloudDataLineageIntegration") + def cloud_data_lineage_integration(self) -> Optional[pulumi.Input['EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs']]: + return pulumi.get(self, "cloud_data_lineage_integration") + + @cloud_data_lineage_integration.setter + def cloud_data_lineage_integration(self, value: Optional[pulumi.Input['EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs']]): + pulumi.set(self, "cloud_data_lineage_integration", value) + @property @pulumi.getter(name="envVariables") def env_variables(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: @@ -792,6 +805,22 @@ def scheduler_count(self, value: Optional[pulumi.Input[int]]): pulumi.set(self, "scheduler_count", value) +@pulumi.input_type +class EnvironmentConfigSoftwareConfigCloudDataLineageIntegrationArgs: + def __init__(__self__, *, + enabled: pulumi.Input[bool]): + pulumi.set(__self__, "enabled", enabled) + + @property + @pulumi.getter + def enabled(self) -> pulumi.Input[bool]: + return pulumi.get(self, "enabled") + + @enabled.setter + def enabled(self, value: pulumi.Input[bool]): + pulumi.set(self, "enabled", value) + + @pulumi.input_type class EnvironmentConfigWebServerConfigArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/composer/get_environment.py b/sdk/python/pulumi_gcp/composer/get_environment.py index 69abfd3e8e..3bc8bd871c 100644 --- a/sdk/python/pulumi_gcp/composer/get_environment.py +++ b/sdk/python/pulumi_gcp/composer/get_environment.py @@ -45,9 +45,6 @@ def __init__(__self__, configs=None, id=None, labels=None, name=None, project=No @property @pulumi.getter def configs(self) -> Sequence['outputs.GetEnvironmentConfigResult']: - """ - Configuration parameters for the environment. - """ return pulumi.get(self, "configs") @property diff --git a/sdk/python/pulumi_gcp/composer/outputs.py b/sdk/python/pulumi_gcp/composer/outputs.py index 44f5cabcca..c61bbf94dd 100644 --- a/sdk/python/pulumi_gcp/composer/outputs.py +++ b/sdk/python/pulumi_gcp/composer/outputs.py @@ -23,6 +23,7 @@ 'EnvironmentConfigRecoveryConfig', 'EnvironmentConfigRecoveryConfigScheduledSnapshotsConfig', 'EnvironmentConfigSoftwareConfig', + 'EnvironmentConfigSoftwareConfigCloudDataLineageIntegration', 'EnvironmentConfigWebServerConfig', 'EnvironmentConfigWebServerNetworkAccessControl', 'EnvironmentConfigWebServerNetworkAccessControlAllowedIpRange', @@ -43,6 +44,7 @@ 'GetEnvironmentConfigRecoveryConfigResult', 'GetEnvironmentConfigRecoveryConfigScheduledSnapshotsConfigResult', 'GetEnvironmentConfigSoftwareConfigResult', + 'GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationResult', 'GetEnvironmentConfigWebServerConfigResult', 'GetEnvironmentConfigWebServerNetworkAccessControlResult', 'GetEnvironmentConfigWebServerNetworkAccessControlAllowedIpRangeResult', @@ -789,6 +791,8 @@ def __key_warning(key: str): suggest = None if key == "airflowConfigOverrides": suggest = "airflow_config_overrides" + elif key == "cloudDataLineageIntegration": + suggest = "cloud_data_lineage_integration" elif key == "envVariables": suggest = "env_variables" elif key == "imageVersion": @@ -813,6 +817,7 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, airflow_config_overrides: Optional[Mapping[str, str]] = None, + cloud_data_lineage_integration: Optional['outputs.EnvironmentConfigSoftwareConfigCloudDataLineageIntegration'] = None, env_variables: Optional[Mapping[str, str]] = None, image_version: Optional[str] = None, pypi_packages: Optional[Mapping[str, str]] = None, @@ -820,6 +825,8 @@ def __init__(__self__, *, scheduler_count: Optional[int] = None): if airflow_config_overrides is not None: pulumi.set(__self__, "airflow_config_overrides", airflow_config_overrides) + if cloud_data_lineage_integration is not None: + pulumi.set(__self__, "cloud_data_lineage_integration", cloud_data_lineage_integration) if env_variables is not None: pulumi.set(__self__, "env_variables", env_variables) if image_version is not None: @@ -836,6 +843,11 @@ def __init__(__self__, *, def airflow_config_overrides(self) -> Optional[Mapping[str, str]]: return pulumi.get(self, "airflow_config_overrides") + @property + @pulumi.getter(name="cloudDataLineageIntegration") + def cloud_data_lineage_integration(self) -> Optional['outputs.EnvironmentConfigSoftwareConfigCloudDataLineageIntegration']: + return pulumi.get(self, "cloud_data_lineage_integration") + @property @pulumi.getter(name="envVariables") def env_variables(self) -> Optional[Mapping[str, str]]: @@ -862,6 +874,18 @@ def scheduler_count(self) -> Optional[int]: return pulumi.get(self, "scheduler_count") +@pulumi.output_type +class EnvironmentConfigSoftwareConfigCloudDataLineageIntegration(dict): + def __init__(__self__, *, + enabled: bool): + pulumi.set(__self__, "enabled", enabled) + + @property + @pulumi.getter + def enabled(self) -> bool: + return pulumi.get(self, "enabled") + + @pulumi.output_type class EnvironmentConfigWebServerConfig(dict): @staticmethod @@ -1640,12 +1664,14 @@ def time_zone(self) -> str: class GetEnvironmentConfigSoftwareConfigResult(dict): def __init__(__self__, *, airflow_config_overrides: Mapping[str, str], + cloud_data_lineage_integrations: Sequence['outputs.GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationResult'], env_variables: Mapping[str, str], image_version: str, pypi_packages: Mapping[str, str], python_version: str, scheduler_count: int): pulumi.set(__self__, "airflow_config_overrides", airflow_config_overrides) + pulumi.set(__self__, "cloud_data_lineage_integrations", cloud_data_lineage_integrations) pulumi.set(__self__, "env_variables", env_variables) pulumi.set(__self__, "image_version", image_version) pulumi.set(__self__, "pypi_packages", pypi_packages) @@ -1657,6 +1683,11 @@ def __init__(__self__, *, def airflow_config_overrides(self) -> Mapping[str, str]: return pulumi.get(self, "airflow_config_overrides") + @property + @pulumi.getter(name="cloudDataLineageIntegrations") + def cloud_data_lineage_integrations(self) -> Sequence['outputs.GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationResult']: + return pulumi.get(self, "cloud_data_lineage_integrations") + @property @pulumi.getter(name="envVariables") def env_variables(self) -> Mapping[str, str]: @@ -1683,6 +1714,18 @@ def scheduler_count(self) -> int: return pulumi.get(self, "scheduler_count") +@pulumi.output_type +class GetEnvironmentConfigSoftwareConfigCloudDataLineageIntegrationResult(dict): + def __init__(__self__, *, + enabled: bool): + pulumi.set(__self__, "enabled", enabled) + + @property + @pulumi.getter + def enabled(self) -> bool: + return pulumi.get(self, "enabled") + + @pulumi.output_type class GetEnvironmentConfigWebServerConfigResult(dict): def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/compute/_inputs.py b/sdk/python/pulumi_gcp/compute/_inputs.py index 93e4aab16f..62e805af53 100644 --- a/sdk/python/pulumi_gcp/compute/_inputs.py +++ b/sdk/python/pulumi_gcp/compute/_inputs.py @@ -46,6 +46,9 @@ 'BackendServiceIamBindingConditionArgs', 'BackendServiceIamMemberConditionArgs', 'BackendServiceIapArgs', + 'BackendServiceLocalityLbPolicyArgs', + 'BackendServiceLocalityLbPolicyCustomPolicyArgs', + 'BackendServiceLocalityLbPolicyPolicyArgs', 'BackendServiceLogConfigArgs', 'BackendServiceOutlierDetectionArgs', 'BackendServiceOutlierDetectionBaseEjectionTimeArgs', @@ -183,6 +186,8 @@ 'NetworkFirewallPolicyRuleTargetSecureTagArgs', 'NodeGroupAutoscalingPolicyArgs', 'NodeGroupMaintenanceWindowArgs', + 'NodeGroupShareSettingsArgs', + 'NodeGroupShareSettingsProjectMapArgs', 'NodeTemplateNodeTypeFlexibilityArgs', 'NodeTemplateServerBindingArgs', 'OrganizationSecurityPolicyRuleMatchArgs', @@ -349,6 +354,7 @@ 'RouterPeerAdvertisedIpRangeArgs', 'RouterPeerBfdArgs', 'SecurityPolicyAdaptiveProtectionConfigArgs', + 'SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs', 'SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs', 'SecurityPolicyAdvancedOptionsConfigArgs', 'SecurityPolicyAdvancedOptionsConfigJsonCustomConfigArgs', @@ -512,9 +518,6 @@ def __init__(__self__, *, :param pulumi.Input[str] mode: Defines operating mode for this policy. Default value is `ON`. Possible values are `OFF`, `ONLY_UP`, and `ON`. - :param pulumi.Input['AutoscalarAutoscalingPolicyScaleDownControlArgs'] scale_down_control: Defines scale down controls to reduce the risk of response latency - and outages due to abrupt scale-in events - Structure is documented below. :param pulumi.Input['AutoscalarAutoscalingPolicyScaleInControlArgs'] scale_in_control: Defines scale in controls to reduce the risk of response latency and outages due to abrupt scale-in events Structure is documented below. @@ -648,11 +651,6 @@ def mode(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter(name="scaleDownControl") def scale_down_control(self) -> Optional[pulumi.Input['AutoscalarAutoscalingPolicyScaleDownControlArgs']]: - """ - Defines scale down controls to reduce the risk of response latency - and outages due to abrupt scale-in events - Structure is documented below. - """ return pulumi.get(self, "scale_down_control") @scale_down_control.setter @@ -787,47 +785,6 @@ def __init__(__self__, *, :param pulumi.Input[str] name: The identifier (type) of the Stackdriver Monitoring metric. The metric cannot have negative values. The metric must have a value type of INT64 or DOUBLE. - :param pulumi.Input[str] filter: A filter string to be used as the filter string for - a Stackdriver Monitoring TimeSeries.list API call. - This filter is used to select a specific TimeSeries for - the purpose of autoscaling and to determine whether the metric - is exporting per-instance or per-group data. - You can only use the AND operator for joining selectors. - You can only use direct equality comparison operator (=) without - any functions for each selector. - You can specify the metric in both the filter string and in the - metric field. However, if specified in both places, the metric must - be identical. - The monitored resource type determines what kind of values are - expected for the metric. If it is a gce_instance, the autoscaler - expects the metric to include a separate TimeSeries for each - instance in a group. In such a case, you cannot filter on resource - labels. - If the resource type is any other value, the autoscaler expects - this metric to contain values that apply to the entire autoscaled - instance group and resource label filtering can be performed to - point autoscaler at the correct TimeSeries to scale upon. - This is called a per-group metric for the purpose of autoscaling. - If not specified, the type defaults to gce_instance. - You should provide a filter that is selective enough to pick just - one TimeSeries for the autoscaled group or for each of the instances - (if you are using gce_instance resource type). If multiple - TimeSeries are returned upon the query execution, the autoscaler - will sum their respective values to obtain its scaling value. - :param pulumi.Input[float] single_instance_assignment: If scaling is based on a per-group metric value that represents the - total amount of work to be done or resource usage, set this value to - an amount assigned for a single instance of the scaled group. - The autoscaler will keep the number of instances proportional to the - value of this metric, the metric itself should not change value due - to group resizing. - For example, a good metric to use with the target is - `pubsub.googleapis.com/subscription/num_undelivered_messages` - or a custom metric exporting the total number of requests coming to - your instances. - A bad example would be a metric exporting an average or median - latency, since this value can't include a chunk assignable to a - single instance, it could be better used with utilization_target - instead. :param pulumi.Input[float] target: The target value of the metric that autoscaler should maintain. This must be a positive value. A utilization metric scales number of virtual machines handling requests @@ -867,35 +824,6 @@ def name(self, value: pulumi.Input[str]): @property @pulumi.getter def filter(self) -> Optional[pulumi.Input[str]]: - """ - A filter string to be used as the filter string for - a Stackdriver Monitoring TimeSeries.list API call. - This filter is used to select a specific TimeSeries for - the purpose of autoscaling and to determine whether the metric - is exporting per-instance or per-group data. - You can only use the AND operator for joining selectors. - You can only use direct equality comparison operator (=) without - any functions for each selector. - You can specify the metric in both the filter string and in the - metric field. However, if specified in both places, the metric must - be identical. - The monitored resource type determines what kind of values are - expected for the metric. If it is a gce_instance, the autoscaler - expects the metric to include a separate TimeSeries for each - instance in a group. In such a case, you cannot filter on resource - labels. - If the resource type is any other value, the autoscaler expects - this metric to contain values that apply to the entire autoscaled - instance group and resource label filtering can be performed to - point autoscaler at the correct TimeSeries to scale upon. - This is called a per-group metric for the purpose of autoscaling. - If not specified, the type defaults to gce_instance. - You should provide a filter that is selective enough to pick just - one TimeSeries for the autoscaled group or for each of the instances - (if you are using gce_instance resource type). If multiple - TimeSeries are returned upon the query execution, the autoscaler - will sum their respective values to obtain its scaling value. - """ return pulumi.get(self, "filter") @filter.setter @@ -905,22 +833,6 @@ def filter(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter(name="singleInstanceAssignment") def single_instance_assignment(self) -> Optional[pulumi.Input[float]]: - """ - If scaling is based on a per-group metric value that represents the - total amount of work to be done or resource usage, set this value to - an amount assigned for a single instance of the scaled group. - The autoscaler will keep the number of instances proportional to the - value of this metric, the metric itself should not change value due - to group resizing. - For example, a good metric to use with the target is - `pubsub.googleapis.com/subscription/num_undelivered_messages` - or a custom metric exporting the total number of requests coming to - your instances. - A bad example would be a metric exporting an average or median - latency, since this value can't include a chunk assignable to a - single instance, it could be better used with utilization_target - instead. - """ return pulumi.get(self, "single_instance_assignment") @single_instance_assignment.setter @@ -1290,9 +1202,6 @@ def __init__(__self__, *, :param pulumi.Input[str] mode: Defines operating mode for this policy. Default value is `ON`. Possible values are `OFF`, `ONLY_UP`, and `ON`. - :param pulumi.Input['AutoscalerAutoscalingPolicyScaleDownControlArgs'] scale_down_control: Defines scale down controls to reduce the risk of response latency - and outages due to abrupt scale-in events - Structure is documented below. :param pulumi.Input['AutoscalerAutoscalingPolicyScaleInControlArgs'] scale_in_control: Defines scale in controls to reduce the risk of response latency and outages due to abrupt scale-in events Structure is documented below. @@ -1426,11 +1335,6 @@ def mode(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter(name="scaleDownControl") def scale_down_control(self) -> Optional[pulumi.Input['AutoscalerAutoscalingPolicyScaleDownControlArgs']]: - """ - Defines scale down controls to reduce the risk of response latency - and outages due to abrupt scale-in events - Structure is documented below. - """ return pulumi.get(self, "scale_down_control") @scale_down_control.setter @@ -1565,47 +1469,6 @@ def __init__(__self__, *, :param pulumi.Input[str] name: The identifier (type) of the Stackdriver Monitoring metric. The metric cannot have negative values. The metric must have a value type of INT64 or DOUBLE. - :param pulumi.Input[str] filter: A filter string to be used as the filter string for - a Stackdriver Monitoring TimeSeries.list API call. - This filter is used to select a specific TimeSeries for - the purpose of autoscaling and to determine whether the metric - is exporting per-instance or per-group data. - You can only use the AND operator for joining selectors. - You can only use direct equality comparison operator (=) without - any functions for each selector. - You can specify the metric in both the filter string and in the - metric field. However, if specified in both places, the metric must - be identical. - The monitored resource type determines what kind of values are - expected for the metric. If it is a gce_instance, the autoscaler - expects the metric to include a separate TimeSeries for each - instance in a group. In such a case, you cannot filter on resource - labels. - If the resource type is any other value, the autoscaler expects - this metric to contain values that apply to the entire autoscaled - instance group and resource label filtering can be performed to - point autoscaler at the correct TimeSeries to scale upon. - This is called a per-group metric for the purpose of autoscaling. - If not specified, the type defaults to gce_instance. - You should provide a filter that is selective enough to pick just - one TimeSeries for the autoscaled group or for each of the instances - (if you are using gce_instance resource type). If multiple - TimeSeries are returned upon the query execution, the autoscaler - will sum their respective values to obtain its scaling value. - :param pulumi.Input[float] single_instance_assignment: If scaling is based on a per-group metric value that represents the - total amount of work to be done or resource usage, set this value to - an amount assigned for a single instance of the scaled group. - The autoscaler will keep the number of instances proportional to the - value of this metric, the metric itself should not change value due - to group resizing. - For example, a good metric to use with the target is - `pubsub.googleapis.com/subscription/num_undelivered_messages` - or a custom metric exporting the total number of requests coming to - your instances. - A bad example would be a metric exporting an average or median - latency, since this value can't include a chunk assignable to a - single instance, it could be better used with utilization_target - instead. :param pulumi.Input[float] target: The target value of the metric that autoscaler should maintain. This must be a positive value. A utilization metric scales number of virtual machines handling requests @@ -1645,35 +1508,6 @@ def name(self, value: pulumi.Input[str]): @property @pulumi.getter def filter(self) -> Optional[pulumi.Input[str]]: - """ - A filter string to be used as the filter string for - a Stackdriver Monitoring TimeSeries.list API call. - This filter is used to select a specific TimeSeries for - the purpose of autoscaling and to determine whether the metric - is exporting per-instance or per-group data. - You can only use the AND operator for joining selectors. - You can only use direct equality comparison operator (=) without - any functions for each selector. - You can specify the metric in both the filter string and in the - metric field. However, if specified in both places, the metric must - be identical. - The monitored resource type determines what kind of values are - expected for the metric. If it is a gce_instance, the autoscaler - expects the metric to include a separate TimeSeries for each - instance in a group. In such a case, you cannot filter on resource - labels. - If the resource type is any other value, the autoscaler expects - this metric to contain values that apply to the entire autoscaled - instance group and resource label filtering can be performed to - point autoscaler at the correct TimeSeries to scale upon. - This is called a per-group metric for the purpose of autoscaling. - If not specified, the type defaults to gce_instance. - You should provide a filter that is selective enough to pick just - one TimeSeries for the autoscaled group or for each of the instances - (if you are using gce_instance resource type). If multiple - TimeSeries are returned upon the query execution, the autoscaler - will sum their respective values to obtain its scaling value. - """ return pulumi.get(self, "filter") @filter.setter @@ -1683,22 +1517,6 @@ def filter(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter(name="singleInstanceAssignment") def single_instance_assignment(self) -> Optional[pulumi.Input[float]]: - """ - If scaling is based on a per-group metric value that represents the - total amount of work to be done or resource usage, set this value to - an amount assigned for a single instance of the scaled group. - The autoscaler will keep the number of instances proportional to the - value of this metric, the metric itself should not change value due - to group resizing. - For example, a good metric to use with the target is - `pubsub.googleapis.com/subscription/num_undelivered_messages` - or a custom metric exporting the total number of requests coming to - your instances. - A bad example would be a metric exporting an average or median - latency, since this value can't include a chunk assignable to a - single instance, it could be better used with utilization_target - instead. - """ return pulumi.get(self, "single_instance_assignment") @single_instance_assignment.setter @@ -3089,8 +2907,6 @@ def __init__(__self__, *, max_requests_per_connection: Optional[pulumi.Input[int]] = None, max_retries: Optional[pulumi.Input[int]] = None): """ - :param pulumi.Input['BackendServiceCircuitBreakersConnectTimeoutArgs'] connect_timeout: The timeout for new network connections to hosts. - Structure is documented below. :param pulumi.Input[int] max_connections: The maximum number of connections to the backend cluster. Defaults to 1024. :param pulumi.Input[int] max_pending_requests: The maximum number of pending requests to the backend cluster. @@ -3120,10 +2936,6 @@ def __init__(__self__, *, @property @pulumi.getter(name="connectTimeout") def connect_timeout(self) -> Optional[pulumi.Input['BackendServiceCircuitBreakersConnectTimeoutArgs']]: - """ - The timeout for new network connections to hosts. - Structure is documented below. - """ return pulumi.get(self, "connect_timeout") @connect_timeout.setter @@ -3585,6 +3397,139 @@ def oauth2_client_secret_sha256(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "oauth2_client_secret_sha256", value) +@pulumi.input_type +class BackendServiceLocalityLbPolicyArgs: + def __init__(__self__, *, + custom_policy: Optional[pulumi.Input['BackendServiceLocalityLbPolicyCustomPolicyArgs']] = None, + policy: Optional[pulumi.Input['BackendServiceLocalityLbPolicyPolicyArgs']] = None): + """ + :param pulumi.Input['BackendServiceLocalityLbPolicyCustomPolicyArgs'] custom_policy: The configuration for a custom policy implemented by the user and + deployed with the client. + Structure is documented below. + :param pulumi.Input['BackendServiceLocalityLbPolicyPolicyArgs'] policy: The configuration for a built-in load balancing policy. + Structure is documented below. + """ + if custom_policy is not None: + pulumi.set(__self__, "custom_policy", custom_policy) + if policy is not None: + pulumi.set(__self__, "policy", policy) + + @property + @pulumi.getter(name="customPolicy") + def custom_policy(self) -> Optional[pulumi.Input['BackendServiceLocalityLbPolicyCustomPolicyArgs']]: + """ + The configuration for a custom policy implemented by the user and + deployed with the client. + Structure is documented below. + """ + return pulumi.get(self, "custom_policy") + + @custom_policy.setter + def custom_policy(self, value: Optional[pulumi.Input['BackendServiceLocalityLbPolicyCustomPolicyArgs']]): + pulumi.set(self, "custom_policy", value) + + @property + @pulumi.getter + def policy(self) -> Optional[pulumi.Input['BackendServiceLocalityLbPolicyPolicyArgs']]: + """ + The configuration for a built-in load balancing policy. + Structure is documented below. + """ + return pulumi.get(self, "policy") + + @policy.setter + def policy(self, value: Optional[pulumi.Input['BackendServiceLocalityLbPolicyPolicyArgs']]): + pulumi.set(self, "policy", value) + + +@pulumi.input_type +class BackendServiceLocalityLbPolicyCustomPolicyArgs: + def __init__(__self__, *, + name: pulumi.Input[str], + data: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] name: Identifies the custom policy. + The value should match the type the custom implementation is registered + with on the gRPC clients. It should follow protocol buffer + message naming conventions and include the full path (e.g. + myorg.CustomLbPolicy). The maximum length is 256 characters. + Note that specifying the same custom policy more than once for a + backend is not a valid configuration and will be rejected. + :param pulumi.Input[str] data: An optional, arbitrary JSON object with configuration data, understood + by a locally installed custom policy implementation. + """ + pulumi.set(__self__, "name", name) + if data is not None: + pulumi.set(__self__, "data", data) + + @property + @pulumi.getter + def name(self) -> pulumi.Input[str]: + """ + Identifies the custom policy. + The value should match the type the custom implementation is registered + with on the gRPC clients. It should follow protocol buffer + message naming conventions and include the full path (e.g. + myorg.CustomLbPolicy). The maximum length is 256 characters. + Note that specifying the same custom policy more than once for a + backend is not a valid configuration and will be rejected. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: pulumi.Input[str]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def data(self) -> Optional[pulumi.Input[str]]: + """ + An optional, arbitrary JSON object with configuration data, understood + by a locally installed custom policy implementation. + """ + return pulumi.get(self, "data") + + @data.setter + def data(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "data", value) + + +@pulumi.input_type +class BackendServiceLocalityLbPolicyPolicyArgs: + def __init__(__self__, *, + name: pulumi.Input[str]): + """ + :param pulumi.Input[str] name: The name of a locality load balancer policy to be used. The value + should be one of the predefined ones as supported by localityLbPolicy, + although at the moment only ROUND_ROBIN is supported. + This field should only be populated when the customPolicy field is not + used. + Note that specifying the same policy more than once for a backend is + not a valid configuration and will be rejected. + The possible values are: + """ + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def name(self) -> pulumi.Input[str]: + """ + The name of a locality load balancer policy to be used. The value + should be one of the predefined ones as supported by localityLbPolicy, + although at the moment only ROUND_ROBIN is supported. + This field should only be populated when the customPolicy field is not + used. + Note that specifying the same policy more than once for a backend is + not a valid configuration and will be rejected. + The possible values are: + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: pulumi.Input[str]): + pulumi.set(self, "name", value) + + @pulumi.input_type class BackendServiceLogConfigArgs: def __init__(__self__, *, @@ -6105,7 +6050,7 @@ def __init__(__self__, *, :param pulumi.Input[str] device_name: Name with which the attached disk will be accessible under `/dev/disk/by-id/google-*` :param pulumi.Input[str] disk_encryption_key_raw: A 256-bit [customer-supplied encryption key] - (), + (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. :param pulumi.Input[str] kms_key_self_link: The self_link of the encryption key that is @@ -6158,7 +6103,7 @@ def device_name(self, value: Optional[pulumi.Input[str]]): def disk_encryption_key_raw(self) -> Optional[pulumi.Input[str]]: """ A 256-bit [customer-supplied encryption key] - (), + (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. """ @@ -6224,7 +6169,7 @@ def __init__(__self__, *, :param pulumi.Input[str] device_name: Name with which attached disk will be accessible. On the instance, this device will be `/dev/disk/by-id/google-{{device_name}}`. :param pulumi.Input[str] disk_encryption_key_raw: A 256-bit [customer-supplied encryption key] - (), + (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. @@ -6288,7 +6233,7 @@ def device_name(self, value: Optional[pulumi.Input[str]]): def disk_encryption_key_raw(self) -> Optional[pulumi.Input[str]]: """ A 256-bit [customer-supplied encryption key] - (), + (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. @@ -9149,12 +9094,6 @@ def __init__(__self__, *, subnetwork: Optional[pulumi.Input[str]] = None, subnetwork_project: Optional[pulumi.Input[str]] = None): """ - :param pulumi.Input[Sequence[pulumi.Input['InstanceNetworkInterfaceAccessConfigArgs']]] access_configs: Access configurations, i.e. IPs via which this - instance can be accessed via the Internet. Omit to ensure that the instance - is not accessible from the Internet. If omitted, ssh will not - work unless this provider can send traffic to the instance's network (e.g. via - tunnel or because it is running on another cloud instance on that network). - This block can be repeated multiple times. Structure documented below. :param pulumi.Input[Sequence[pulumi.Input['InstanceNetworkInterfaceAliasIpRangeArgs']]] alias_ip_ranges: An array of alias IP ranges for this network interface. Can only be specified for network interfaces on subnet-mode networks. Structure documented below. @@ -9213,14 +9152,6 @@ def __init__(__self__, *, @property @pulumi.getter(name="accessConfigs") def access_configs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InstanceNetworkInterfaceAccessConfigArgs']]]]: - """ - Access configurations, i.e. IPs via which this - instance can be accessed via the Internet. Omit to ensure that the instance - is not accessible from the Internet. If omitted, ssh will not - work unless this provider can send traffic to the instance's network (e.g. via - tunnel or because it is running on another cloud instance on that network). - This block can be repeated multiple times. Structure documented below. - """ return pulumi.get(self, "access_configs") @access_configs.setter @@ -9692,7 +9623,7 @@ def __init__(__self__, *, :param pulumi.Input[bool] preemptible: Specifies if the instance is preemptible. If this field is set to true, then `automatic_restart` must be set to false. Defaults to false. - :param pulumi.Input[str] provisioning_model: Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, + :param pulumi.Input[str] provisioning_model: Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, `preemptible` should be `true` and `auto_restart` should be `false`. For more info about `SPOT`, read [here](https://cloud.google.com/compute/docs/instances/spot) @@ -9809,7 +9740,7 @@ def preemptible(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="provisioningModel") def provisioning_model(self) -> Optional[pulumi.Input[str]]: """ - Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, + Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, `preemptible` should be `true` and `auto_restart` should be `false`. For more info about `SPOT`, read [here](https://cloud.google.com/compute/docs/instances/spot) @@ -10627,20 +10558,12 @@ def __init__(__self__, *, subnetwork: Optional[pulumi.Input[str]] = None, subnetwork_project: Optional[pulumi.Input[str]] = None): """ - :param pulumi.Input[Sequence[pulumi.Input['InstanceTemplateNetworkInterfaceAccessConfigArgs']]] access_configs: Access configurations, i.e. IPs via which this - instance can be accessed via the Internet. Omit to ensure that the instance - is not accessible from the Internet (this means that ssh provisioners will - not work unless you can send traffic to the instance's - network (e.g. via tunnel or because it is running on another cloud instance - on that network). This block can be repeated multiple times. Structure documented below. :param pulumi.Input[Sequence[pulumi.Input['InstanceTemplateNetworkInterfaceAliasIpRangeArgs']]] alias_ip_ranges: An array of alias IP ranges for this network interface. Can only be specified for network interfaces on subnet-mode networks. Structure documented below. :param pulumi.Input[Sequence[pulumi.Input['InstanceTemplateNetworkInterfaceIpv6AccessConfigArgs']]] ipv6_access_configs: An array of IPv6 access configurations for this interface. 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. - :param pulumi.Input[str] name: The name of the instance template. If you leave - this blank, the provider will auto-generate a unique name. :param pulumi.Input[str] network: The name or self_link of the network to attach this interface to. Use `network` attribute for Legacy or Auto subnetted networks and `subnetwork` for custom subnetted networks. @@ -10683,14 +10606,6 @@ def __init__(__self__, *, @property @pulumi.getter(name="accessConfigs") def access_configs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InstanceTemplateNetworkInterfaceAccessConfigArgs']]]]: - """ - Access configurations, i.e. IPs via which this - instance can be accessed via the Internet. Omit to ensure that the instance - is not accessible from the Internet (this means that ssh provisioners will - not work unless you can send traffic to the instance's - network (e.g. via tunnel or because it is running on another cloud instance - on that network). This block can be repeated multiple times. Structure documented below. - """ return pulumi.get(self, "access_configs") @access_configs.setter @@ -10737,10 +10652,6 @@ def ipv6_access_type(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def name(self) -> Optional[pulumi.Input[str]]: - """ - The name of the instance template. If you leave - this blank, the provider will auto-generate a unique name. - """ return pulumi.get(self, "name") @name.setter @@ -11122,7 +11033,6 @@ def __init__(__self__, *, automatically restarted if it is terminated by Compute Engine (not terminated by a user). This defaults to true. :param pulumi.Input[str] instance_termination_action: Describe the type of termination action for `SPOT` VM. Can be `STOP` or `DELETE`. Read more on [here](https://cloud.google.com/compute/docs/instances/create-use-spot) - :param pulumi.Input['InstanceTemplateSchedulingMaxRunDurationArgs'] max_run_duration: Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input['InstanceTemplateSchedulingNodeAffinityArgs']]] node_affinities: Specifies node affinities or anti-affinities to determine which sole-tenant nodes your instances and managed instance groups will use as host systems. Read more on sole-tenant node creation @@ -11184,9 +11094,6 @@ def instance_termination_action(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter(name="maxRunDuration") def max_run_duration(self) -> Optional[pulumi.Input['InstanceTemplateSchedulingMaxRunDurationArgs']]: - """ - Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below. - """ return pulumi.get(self, "max_run_duration") @max_run_duration.setter @@ -11995,6 +11902,85 @@ def start_time(self, value: pulumi.Input[str]): pulumi.set(self, "start_time", value) +@pulumi.input_type +class NodeGroupShareSettingsArgs: + def __init__(__self__, *, + share_type: pulumi.Input[str], + project_maps: Optional[pulumi.Input[Sequence[pulumi.Input['NodeGroupShareSettingsProjectMapArgs']]]] = None): + """ + :param pulumi.Input[str] share_type: Node group sharing type. + Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + :param pulumi.Input[Sequence[pulumi.Input['NodeGroupShareSettingsProjectMapArgs']]] project_maps: A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + Structure is documented below. + """ + pulumi.set(__self__, "share_type", share_type) + if project_maps is not None: + pulumi.set(__self__, "project_maps", project_maps) + + @property + @pulumi.getter(name="shareType") + def share_type(self) -> pulumi.Input[str]: + """ + Node group sharing type. + Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + """ + return pulumi.get(self, "share_type") + + @share_type.setter + def share_type(self, value: pulumi.Input[str]): + pulumi.set(self, "share_type", value) + + @property + @pulumi.getter(name="projectMaps") + def project_maps(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['NodeGroupShareSettingsProjectMapArgs']]]]: + """ + A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + Structure is documented below. + """ + return pulumi.get(self, "project_maps") + + @project_maps.setter + def project_maps(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['NodeGroupShareSettingsProjectMapArgs']]]]): + pulumi.set(self, "project_maps", value) + + +@pulumi.input_type +class NodeGroupShareSettingsProjectMapArgs: + def __init__(__self__, *, + id: pulumi.Input[str], + project_id: pulumi.Input[str]): + """ + :param pulumi.Input[str] id: The identifier for this object. Format specified above. + :param pulumi.Input[str] project_id: The project id/number should be the same as the key of this project config in the project map. + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "project_id", project_id) + + @property + @pulumi.getter + def id(self) -> pulumi.Input[str]: + """ + The identifier for this object. Format specified above. + """ + return pulumi.get(self, "id") + + @id.setter + def id(self, value: pulumi.Input[str]): + pulumi.set(self, "id", value) + + @property + @pulumi.getter(name="projectId") + def project_id(self) -> pulumi.Input[str]: + """ + The project id/number should be the same as the key of this project config in the project map. + """ + return pulumi.get(self, "project_id") + + @project_id.setter + def project_id(self, value: pulumi.Input[str]): + pulumi.set(self, "project_id", value) + + @pulumi.input_type class NodeTemplateNodeTypeFlexibilityArgs: def __init__(__self__, *, @@ -12650,9 +12636,6 @@ def __init__(__self__, *, :param pulumi.Input[str] mode: Defines operating mode for this policy. Default value is `ON`. Possible values are `OFF`, `ONLY_UP`, and `ON`. - :param pulumi.Input['RegionAutoscalerAutoscalingPolicyScaleDownControlArgs'] scale_down_control: Defines scale down controls to reduce the risk of response latency - and outages due to abrupt scale-in events - Structure is documented below. :param pulumi.Input['RegionAutoscalerAutoscalingPolicyScaleInControlArgs'] scale_in_control: Defines scale in controls to reduce the risk of response latency and outages due to abrupt scale-in events Structure is documented below. @@ -12786,11 +12769,6 @@ def mode(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter(name="scaleDownControl") def scale_down_control(self) -> Optional[pulumi.Input['RegionAutoscalerAutoscalingPolicyScaleDownControlArgs']]: - """ - Defines scale down controls to reduce the risk of response latency - and outages due to abrupt scale-in events - Structure is documented below. - """ return pulumi.get(self, "scale_down_control") @scale_down_control.setter @@ -12925,47 +12903,6 @@ def __init__(__self__, *, :param pulumi.Input[str] name: The identifier (type) of the Stackdriver Monitoring metric. The metric cannot have negative values. The metric must have a value type of INT64 or DOUBLE. - :param pulumi.Input[str] filter: A filter string to be used as the filter string for - a Stackdriver Monitoring TimeSeries.list API call. - This filter is used to select a specific TimeSeries for - the purpose of autoscaling and to determine whether the metric - is exporting per-instance or per-group data. - You can only use the AND operator for joining selectors. - You can only use direct equality comparison operator (=) without - any functions for each selector. - You can specify the metric in both the filter string and in the - metric field. However, if specified in both places, the metric must - be identical. - The monitored resource type determines what kind of values are - expected for the metric. If it is a gce_instance, the autoscaler - expects the metric to include a separate TimeSeries for each - instance in a group. In such a case, you cannot filter on resource - labels. - If the resource type is any other value, the autoscaler expects - this metric to contain values that apply to the entire autoscaled - instance group and resource label filtering can be performed to - point autoscaler at the correct TimeSeries to scale upon. - This is called a per-group metric for the purpose of autoscaling. - If not specified, the type defaults to gce_instance. - You should provide a filter that is selective enough to pick just - one TimeSeries for the autoscaled group or for each of the instances - (if you are using gce_instance resource type). If multiple - TimeSeries are returned upon the query execution, the autoscaler - will sum their respective values to obtain its scaling value. - :param pulumi.Input[float] single_instance_assignment: If scaling is based on a per-group metric value that represents the - total amount of work to be done or resource usage, set this value to - an amount assigned for a single instance of the scaled group. - The autoscaler will keep the number of instances proportional to the - value of this metric, the metric itself should not change value due - to group resizing. - For example, a good metric to use with the target is - `pubsub.googleapis.com/subscription/num_undelivered_messages` - or a custom metric exporting the total number of requests coming to - your instances. - A bad example would be a metric exporting an average or median - latency, since this value can't include a chunk assignable to a - single instance, it could be better used with utilization_target - instead. :param pulumi.Input[float] target: The target value of the metric that autoscaler should maintain. This must be a positive value. A utilization metric scales number of virtual machines handling requests @@ -13005,35 +12942,6 @@ def name(self, value: pulumi.Input[str]): @property @pulumi.getter def filter(self) -> Optional[pulumi.Input[str]]: - """ - A filter string to be used as the filter string for - a Stackdriver Monitoring TimeSeries.list API call. - This filter is used to select a specific TimeSeries for - the purpose of autoscaling and to determine whether the metric - is exporting per-instance or per-group data. - You can only use the AND operator for joining selectors. - You can only use direct equality comparison operator (=) without - any functions for each selector. - You can specify the metric in both the filter string and in the - metric field. However, if specified in both places, the metric must - be identical. - The monitored resource type determines what kind of values are - expected for the metric. If it is a gce_instance, the autoscaler - expects the metric to include a separate TimeSeries for each - instance in a group. In such a case, you cannot filter on resource - labels. - If the resource type is any other value, the autoscaler expects - this metric to contain values that apply to the entire autoscaled - instance group and resource label filtering can be performed to - point autoscaler at the correct TimeSeries to scale upon. - This is called a per-group metric for the purpose of autoscaling. - If not specified, the type defaults to gce_instance. - You should provide a filter that is selective enough to pick just - one TimeSeries for the autoscaled group or for each of the instances - (if you are using gce_instance resource type). If multiple - TimeSeries are returned upon the query execution, the autoscaler - will sum their respective values to obtain its scaling value. - """ return pulumi.get(self, "filter") @filter.setter @@ -13043,22 +12951,6 @@ def filter(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter(name="singleInstanceAssignment") def single_instance_assignment(self) -> Optional[pulumi.Input[float]]: - """ - If scaling is based on a per-group metric value that represents the - total amount of work to be done or resource usage, set this value to - an amount assigned for a single instance of the scaled group. - The autoscaler will keep the number of instances proportional to the - value of this metric, the metric itself should not change value due - to group resizing. - For example, a good metric to use with the target is - `pubsub.googleapis.com/subscription/num_undelivered_messages` - or a custom metric exporting the total number of requests coming to - your instances. - A bad example would be a metric exporting an average or median - latency, since this value can't include a chunk assignable to a - single instance, it could be better used with utilization_target - instead. - """ return pulumi.get(self, "single_instance_assignment") @single_instance_assignment.setter @@ -14020,8 +13912,6 @@ def __init__(__self__, *, """ :param pulumi.Input[int] code: The HTTP status code to define a TTL against. Only HTTP status codes 300, 301, 308, 404, 405, 410, 421, 451 and 501 can be specified as values, and you cannot specify a status code more than once. - :param pulumi.Input[int] ttl: The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. """ if code is not None: pulumi.set(__self__, "code", code) @@ -14044,10 +13934,6 @@ def code(self, value: Optional[pulumi.Input[int]]): @property @pulumi.getter def ttl(self) -> Optional[pulumi.Input[int]]: - """ - The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - """ return pulumi.get(self, "ttl") @ttl.setter @@ -14065,8 +13951,6 @@ def __init__(__self__, *, max_requests_per_connection: Optional[pulumi.Input[int]] = None, max_retries: Optional[pulumi.Input[int]] = None): """ - :param pulumi.Input['RegionBackendServiceCircuitBreakersConnectTimeoutArgs'] connect_timeout: The timeout for new network connections to hosts. - Structure is documented below. :param pulumi.Input[int] max_connections: The maximum number of connections to the backend cluster. Defaults to 1024. :param pulumi.Input[int] max_pending_requests: The maximum number of pending requests to the backend cluster. @@ -14096,10 +13980,6 @@ def __init__(__self__, *, @property @pulumi.getter(name="connectTimeout") def connect_timeout(self) -> Optional[pulumi.Input['RegionBackendServiceCircuitBreakersConnectTimeoutArgs']]: - """ - The timeout for new network connections to hosts. - Structure is documented below. - """ return pulumi.get(self, "connect_timeout") @connect_timeout.setter @@ -15293,7 +15173,6 @@ def __init__(__self__, *, raw_key: Optional[pulumi.Input[str]] = None, sha256: Optional[pulumi.Input[str]] = None): """ - :param pulumi.Input[str] kms_key_name: The name of the encryption key that is stored in Google Cloud KMS. :param pulumi.Input[str] raw_key: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource. :param pulumi.Input[str] sha256: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied @@ -15309,9 +15188,6 @@ def __init__(__self__, *, @property @pulumi.getter(name="kmsKeyName") def kms_key_name(self) -> Optional[pulumi.Input[str]]: - """ - The name of the encryption key that is stored in Google Cloud KMS. - """ return pulumi.get(self, "kms_key_name") @kms_key_name.setter @@ -23829,13 +23705,29 @@ def multiplier(self, value: Optional[pulumi.Input[int]]): @pulumi.input_type class SecurityPolicyAdaptiveProtectionConfigArgs: def __init__(__self__, *, + auto_deploy_config: Optional[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs']] = None, layer7_ddos_defense_config: Optional[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs']] = None): """ + :param pulumi.Input['SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs'] auto_deploy_config: ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. :param pulumi.Input['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs'] layer7_ddos_defense_config: Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. """ + if auto_deploy_config is not None: + pulumi.set(__self__, "auto_deploy_config", auto_deploy_config) if layer7_ddos_defense_config is not None: pulumi.set(__self__, "layer7_ddos_defense_config", layer7_ddos_defense_config) + @property + @pulumi.getter(name="autoDeployConfig") + def auto_deploy_config(self) -> Optional[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs']]: + """ + ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + """ + return pulumi.get(self, "auto_deploy_config") + + @auto_deploy_config.setter + def auto_deploy_config(self, value: Optional[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs']]): + pulumi.set(self, "auto_deploy_config", value) + @property @pulumi.getter(name="layer7DdosDefenseConfig") def layer7_ddos_defense_config(self) -> Optional[pulumi.Input['SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs']]: @@ -23849,6 +23741,77 @@ def layer7_ddos_defense_config(self, value: Optional[pulumi.Input['SecurityPolic pulumi.set(self, "layer7_ddos_defense_config", value) +@pulumi.input_type +class SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs: + def __init__(__self__, *, + confidence_threshold: Optional[pulumi.Input[float]] = None, + expiration_sec: Optional[pulumi.Input[int]] = None, + impacted_baseline_threshold: Optional[pulumi.Input[float]] = None, + load_threshold: Optional[pulumi.Input[float]] = None): + """ + :param pulumi.Input[float] confidence_threshold: Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + :param pulumi.Input[int] expiration_sec: Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + :param pulumi.Input[float] impacted_baseline_threshold: Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + :param pulumi.Input[float] load_threshold: Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + """ + if confidence_threshold is not None: + pulumi.set(__self__, "confidence_threshold", confidence_threshold) + if expiration_sec is not None: + pulumi.set(__self__, "expiration_sec", expiration_sec) + if impacted_baseline_threshold is not None: + pulumi.set(__self__, "impacted_baseline_threshold", impacted_baseline_threshold) + if load_threshold is not None: + pulumi.set(__self__, "load_threshold", load_threshold) + + @property + @pulumi.getter(name="confidenceThreshold") + def confidence_threshold(self) -> Optional[pulumi.Input[float]]: + """ + Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + """ + return pulumi.get(self, "confidence_threshold") + + @confidence_threshold.setter + def confidence_threshold(self, value: Optional[pulumi.Input[float]]): + pulumi.set(self, "confidence_threshold", value) + + @property + @pulumi.getter(name="expirationSec") + def expiration_sec(self) -> Optional[pulumi.Input[int]]: + """ + Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + """ + return pulumi.get(self, "expiration_sec") + + @expiration_sec.setter + def expiration_sec(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "expiration_sec", value) + + @property + @pulumi.getter(name="impactedBaselineThreshold") + def impacted_baseline_threshold(self) -> Optional[pulumi.Input[float]]: + """ + Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + """ + return pulumi.get(self, "impacted_baseline_threshold") + + @impacted_baseline_threshold.setter + def impacted_baseline_threshold(self, value: Optional[pulumi.Input[float]]): + pulumi.set(self, "impacted_baseline_threshold", value) + + @property + @pulumi.getter(name="loadThreshold") + def load_threshold(self) -> Optional[pulumi.Input[float]]: + """ + Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + """ + return pulumi.get(self, "load_threshold") + + @load_threshold.setter + def load_threshold(self, value: Optional[pulumi.Input[float]]): + pulumi.set(self, "load_threshold", value) + + @pulumi.input_type class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/compute/address.py b/sdk/python/pulumi_gcp/compute/address.py index 62f011a5dd..dcc68043e9 100644 --- a/sdk/python/pulumi_gcp/compute/address.py +++ b/sdk/python/pulumi_gcp/compute/address.py @@ -36,7 +36,7 @@ def __init__(__self__, *, Default value is `EXTERNAL`. Possible values are `INTERNAL` and `EXTERNAL`. :param pulumi.Input[str] description: An optional description of this resource. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. :param pulumi.Input[str] name: Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `a-z?` @@ -142,7 +142,7 @@ def description(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: """ - Labels to apply to this address. A list of key->value pairs. + Labels to apply to this address. A list of key->value pairs. """ return pulumi.get(self, "labels") @@ -304,7 +304,7 @@ def __init__(__self__, *, :param pulumi.Input[str] creation_timestamp: Creation timestamp in RFC3339 text format. :param pulumi.Input[str] description: An optional description of this resource. :param pulumi.Input[str] label_fingerprint: The fingerprint used for optimistic locking of this resource. Used internally during updates. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. :param pulumi.Input[str] name: Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `a-z?` @@ -444,7 +444,7 @@ def label_fingerprint(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: """ - Labels to apply to this address. A list of key->value pairs. + Labels to apply to this address. A list of key->value pairs. """ return pulumi.get(self, "labels") @@ -744,7 +744,7 @@ def __init__(__self__, Default value is `EXTERNAL`. Possible values are `INTERNAL` and `EXTERNAL`. :param pulumi.Input[str] description: An optional description of this resource. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. :param pulumi.Input[str] name: Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `a-z?` @@ -998,7 +998,7 @@ def get(resource_name: str, :param pulumi.Input[str] creation_timestamp: Creation timestamp in RFC3339 text format. :param pulumi.Input[str] description: An optional description of this resource. :param pulumi.Input[str] label_fingerprint: The fingerprint used for optimistic locking of this resource. Used internally during updates. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. :param pulumi.Input[str] name: Name of the resource. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and match the regular expression `a-z?` @@ -1107,7 +1107,7 @@ def label_fingerprint(self) -> pulumi.Output[str]: @pulumi.getter def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: """ - Labels to apply to this address. A list of key->value pairs. + Labels to apply to this address. A list of key->value pairs. """ return pulumi.get(self, "labels") diff --git a/sdk/python/pulumi_gcp/compute/attached_disk.py b/sdk/python/pulumi_gcp/compute/attached_disk.py index 695ff9ec50..7790b9f632 100644 --- a/sdk/python/pulumi_gcp/compute/attached_disk.py +++ b/sdk/python/pulumi_gcp/compute/attached_disk.py @@ -274,20 +274,6 @@ def __init__(__self__, zone: Optional[pulumi.Input[str]] = None, __props__=None): """ - Persistent disks can be attached to a compute instance using the `attached_disk` - section within the compute instance configuration. - However there may be situations where managing the attached disks via the compute - instance config isn't preferable or possible, such as attaching dynamic - numbers of disks using the `count` variable. - - To get more information about attaching disks, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/instances/attachDisk) - * How-to Guides - * [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk) - - **Note:** When using `compute.AttachedDisk` you **must** use `lifecycle.ignore_changes = ["attached_disk"]` on the `compute.Instance` resource that has the disks attached. Otherwise the two resources will fight for control of the attached disk block. - ## Example Usage ```python @@ -349,20 +335,6 @@ def __init__(__self__, args: AttachedDiskArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Persistent disks can be attached to a compute instance using the `attached_disk` - section within the compute instance configuration. - However there may be situations where managing the attached disks via the compute - instance config isn't preferable or possible, such as attaching dynamic - numbers of disks using the `count` variable. - - To get more information about attaching disks, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/instances/attachDisk) - * How-to Guides - * [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk) - - **Note:** When using `compute.AttachedDisk` you **must** use `lifecycle.ignore_changes = ["attached_disk"]` on the `compute.Instance` resource that has the disks attached. Otherwise the two resources will fight for control of the attached disk block. - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/compute/backend_bucket_signed_url_key.py b/sdk/python/pulumi_gcp/compute/backend_bucket_signed_url_key.py index 48b8747480..6466542fae 100644 --- a/sdk/python/pulumi_gcp/compute/backend_bucket_signed_url_key.py +++ b/sdk/python/pulumi_gcp/compute/backend_bucket_signed_url_key.py @@ -176,17 +176,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - A key for signing Cloud CDN signed URLs for BackendBuckets. - - To get more information about BackendBucketSignedUrlKey, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendBuckets) - * How-to Guides - * [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/) - - > **Warning:** All arguments including `key_value` will be stored in the raw - state as plain-text. - ## Example Usage ### Backend Bucket Signed Url Key @@ -227,17 +216,6 @@ def __init__(__self__, args: BackendBucketSignedUrlKeyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A key for signing Cloud CDN signed URLs for BackendBuckets. - - To get more information about BackendBucketSignedUrlKey, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendBuckets) - * How-to Guides - * [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/) - - > **Warning:** All arguments including `key_value` will be stored in the raw - state as plain-text. - ## Example Usage ### Backend Bucket Signed Url Key diff --git a/sdk/python/pulumi_gcp/compute/backend_service.py b/sdk/python/pulumi_gcp/compute/backend_service.py index 11409100dd..f421e3018e 100644 --- a/sdk/python/pulumi_gcp/compute/backend_service.py +++ b/sdk/python/pulumi_gcp/compute/backend_service.py @@ -31,6 +31,7 @@ def __init__(__self__, *, health_checks: Optional[pulumi.Input[str]] = None, iap: Optional[pulumi.Input['BackendServiceIapArgs']] = None, load_balancing_scheme: Optional[pulumi.Input[str]] = None, + locality_lb_policies: Optional[pulumi.Input[Sequence[pulumi.Input['BackendServiceLocalityLbPolicyArgs']]]] = None, locality_lb_policy: Optional[pulumi.Input[str]] = None, log_config: Optional[pulumi.Input['BackendServiceLogConfigArgs']] = None, name: Optional[pulumi.Input[str]] = None, @@ -90,6 +91,13 @@ def __init__(__self__, *, [Choosing a load balancer](https://cloud.google.com/load-balancing/docs/backend-service). Default value is `EXTERNAL`. Possible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`. + :param pulumi.Input[Sequence[pulumi.Input['BackendServiceLocalityLbPolicyArgs']]] locality_lb_policies: A list of locality load balancing policies to be used in order of + preference. Either the policy or the customPolicy field should be set. + Overrides any value set in the localityLbPolicy field. + localityLbPolicies is only supported when the BackendService is referenced + by a URL Map that is referenced by a target gRPC proxy that has the + validateForProxyless field set to true. + Structure is documented below. :param pulumi.Input[str] locality_lb_policy: The load balancing algorithm used within the scope of the locality. The possible values are: :param pulumi.Input['BackendServiceLogConfigArgs'] log_config: This field denotes the logging options for the load balancer traffic served by this backend service. @@ -157,6 +165,8 @@ def __init__(__self__, *, pulumi.set(__self__, "iap", iap) if load_balancing_scheme is not None: pulumi.set(__self__, "load_balancing_scheme", load_balancing_scheme) + if locality_lb_policies is not None: + pulumi.set(__self__, "locality_lb_policies", locality_lb_policies) if locality_lb_policy is not None: pulumi.set(__self__, "locality_lb_policy", locality_lb_policy) if log_config is not None: @@ -391,6 +401,24 @@ def load_balancing_scheme(self) -> Optional[pulumi.Input[str]]: def load_balancing_scheme(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "load_balancing_scheme", value) + @property + @pulumi.getter(name="localityLbPolicies") + def locality_lb_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['BackendServiceLocalityLbPolicyArgs']]]]: + """ + A list of locality load balancing policies to be used in order of + preference. Either the policy or the customPolicy field should be set. + Overrides any value set in the localityLbPolicy field. + localityLbPolicies is only supported when the BackendService is referenced + by a URL Map that is referenced by a target gRPC proxy that has the + validateForProxyless field set to true. + Structure is documented below. + """ + return pulumi.get(self, "locality_lb_policies") + + @locality_lb_policies.setter + def locality_lb_policies(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['BackendServiceLocalityLbPolicyArgs']]]]): + pulumi.set(self, "locality_lb_policies", value) + @property @pulumi.getter(name="localityLbPolicy") def locality_lb_policy(self) -> Optional[pulumi.Input[str]]: @@ -570,6 +598,7 @@ def __init__(__self__, *, health_checks: Optional[pulumi.Input[str]] = None, iap: Optional[pulumi.Input['BackendServiceIapArgs']] = None, load_balancing_scheme: Optional[pulumi.Input[str]] = None, + locality_lb_policies: Optional[pulumi.Input[Sequence[pulumi.Input['BackendServiceLocalityLbPolicyArgs']]]] = None, locality_lb_policy: Optional[pulumi.Input[str]] = None, log_config: Optional[pulumi.Input['BackendServiceLogConfigArgs']] = None, name: Optional[pulumi.Input[str]] = None, @@ -634,6 +663,13 @@ def __init__(__self__, *, [Choosing a load balancer](https://cloud.google.com/load-balancing/docs/backend-service). Default value is `EXTERNAL`. Possible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`. + :param pulumi.Input[Sequence[pulumi.Input['BackendServiceLocalityLbPolicyArgs']]] locality_lb_policies: A list of locality load balancing policies to be used in order of + preference. Either the policy or the customPolicy field should be set. + Overrides any value set in the localityLbPolicy field. + localityLbPolicies is only supported when the BackendService is referenced + by a URL Map that is referenced by a target gRPC proxy that has the + validateForProxyless field set to true. + Structure is documented below. :param pulumi.Input[str] locality_lb_policy: The load balancing algorithm used within the scope of the locality. The possible values are: :param pulumi.Input['BackendServiceLogConfigArgs'] log_config: This field denotes the logging options for the load balancer traffic served by this backend service. @@ -708,6 +744,8 @@ def __init__(__self__, *, pulumi.set(__self__, "iap", iap) if load_balancing_scheme is not None: pulumi.set(__self__, "load_balancing_scheme", load_balancing_scheme) + if locality_lb_policies is not None: + pulumi.set(__self__, "locality_lb_policies", locality_lb_policies) if locality_lb_policy is not None: pulumi.set(__self__, "locality_lb_policy", locality_lb_policy) if log_config is not None: @@ -981,6 +1019,24 @@ def load_balancing_scheme(self) -> Optional[pulumi.Input[str]]: def load_balancing_scheme(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "load_balancing_scheme", value) + @property + @pulumi.getter(name="localityLbPolicies") + def locality_lb_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['BackendServiceLocalityLbPolicyArgs']]]]: + """ + A list of locality load balancing policies to be used in order of + preference. Either the policy or the customPolicy field should be set. + Overrides any value set in the localityLbPolicy field. + localityLbPolicies is only supported when the BackendService is referenced + by a URL Map that is referenced by a target gRPC proxy that has the + validateForProxyless field set to true. + Structure is documented below. + """ + return pulumi.get(self, "locality_lb_policies") + + @locality_lb_policies.setter + def locality_lb_policies(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['BackendServiceLocalityLbPolicyArgs']]]]): + pulumi.set(self, "locality_lb_policies", value) + @property @pulumi.getter(name="localityLbPolicy") def locality_lb_policy(self) -> Optional[pulumi.Input[str]]: @@ -1171,6 +1227,7 @@ def __init__(__self__, health_checks: Optional[pulumi.Input[str]] = None, iap: Optional[pulumi.Input[pulumi.InputType['BackendServiceIapArgs']]] = None, load_balancing_scheme: Optional[pulumi.Input[str]] = None, + locality_lb_policies: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['BackendServiceLocalityLbPolicyArgs']]]]] = None, locality_lb_policy: Optional[pulumi.Input[str]] = None, log_config: Optional[pulumi.Input[pulumi.InputType['BackendServiceLogConfigArgs']]] = None, name: Optional[pulumi.Input[str]] = None, @@ -1184,22 +1241,6 @@ def __init__(__self__, timeout_sec: Optional[pulumi.Input[int]] = None, __props__=None): """ - A Backend Service defines a group of virtual machines that will serve - traffic for load balancing. This resource is a global backend service, - appropriate for external load balancing or self-managed internal load balancing. - For managed internal load balancing, use a regional backend service instead. - - Currently self-managed internal load balancing is only available in beta. - - To get more information about BackendService, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/v1/backendServices) - * How-to Guides - * [Official Documentation](https://cloud.google.com/compute/docs/load-balancing/http/backend-service) - - > **Warning:** All arguments including `iap.oauth2_client_secret` and `iap.oauth2_client_secret_sha256` will be stored in the raw - state as plain-text. - ## Example Usage ### Backend Service Cache Include Http Headers @@ -1334,6 +1375,13 @@ def __init__(__self__, [Choosing a load balancer](https://cloud.google.com/load-balancing/docs/backend-service). Default value is `EXTERNAL`. Possible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['BackendServiceLocalityLbPolicyArgs']]]] locality_lb_policies: A list of locality load balancing policies to be used in order of + preference. Either the policy or the customPolicy field should be set. + Overrides any value set in the localityLbPolicy field. + localityLbPolicies is only supported when the BackendService is referenced + by a URL Map that is referenced by a target gRPC proxy that has the + validateForProxyless field set to true. + Structure is documented below. :param pulumi.Input[str] locality_lb_policy: The load balancing algorithm used within the scope of the locality. The possible values are: :param pulumi.Input[pulumi.InputType['BackendServiceLogConfigArgs']] log_config: This field denotes the logging options for the load balancer traffic served by this backend service. @@ -1378,22 +1426,6 @@ def __init__(__self__, args: Optional[BackendServiceArgs] = None, opts: Optional[pulumi.ResourceOptions] = None): """ - A Backend Service defines a group of virtual machines that will serve - traffic for load balancing. This resource is a global backend service, - appropriate for external load balancing or self-managed internal load balancing. - For managed internal load balancing, use a regional backend service instead. - - Currently self-managed internal load balancing is only available in beta. - - To get more information about BackendService, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/v1/backendServices) - * How-to Guides - * [Official Documentation](https://cloud.google.com/compute/docs/load-balancing/http/backend-service) - - > **Warning:** All arguments including `iap.oauth2_client_secret` and `iap.oauth2_client_secret_sha256` will be stored in the raw - state as plain-text. - ## Example Usage ### Backend Service Cache Include Http Headers @@ -1510,6 +1542,7 @@ def _internal_init(__self__, health_checks: Optional[pulumi.Input[str]] = None, iap: Optional[pulumi.Input[pulumi.InputType['BackendServiceIapArgs']]] = None, load_balancing_scheme: Optional[pulumi.Input[str]] = None, + locality_lb_policies: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['BackendServiceLocalityLbPolicyArgs']]]]] = None, locality_lb_policy: Optional[pulumi.Input[str]] = None, log_config: Optional[pulumi.Input[pulumi.InputType['BackendServiceLogConfigArgs']]] = None, name: Optional[pulumi.Input[str]] = None, @@ -1545,6 +1578,7 @@ def _internal_init(__self__, __props__.__dict__["health_checks"] = health_checks __props__.__dict__["iap"] = iap __props__.__dict__["load_balancing_scheme"] = load_balancing_scheme + __props__.__dict__["locality_lb_policies"] = locality_lb_policies __props__.__dict__["locality_lb_policy"] = locality_lb_policy __props__.__dict__["log_config"] = log_config __props__.__dict__["name"] = name @@ -1588,6 +1622,7 @@ def get(resource_name: str, health_checks: Optional[pulumi.Input[str]] = None, iap: Optional[pulumi.Input[pulumi.InputType['BackendServiceIapArgs']]] = None, load_balancing_scheme: Optional[pulumi.Input[str]] = None, + locality_lb_policies: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['BackendServiceLocalityLbPolicyArgs']]]]] = None, locality_lb_policy: Optional[pulumi.Input[str]] = None, log_config: Optional[pulumi.Input[pulumi.InputType['BackendServiceLogConfigArgs']]] = None, name: Optional[pulumi.Input[str]] = None, @@ -1657,6 +1692,13 @@ def get(resource_name: str, [Choosing a load balancer](https://cloud.google.com/load-balancing/docs/backend-service). Default value is `EXTERNAL`. Possible values are `EXTERNAL`, `INTERNAL_SELF_MANAGED`, and `EXTERNAL_MANAGED`. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['BackendServiceLocalityLbPolicyArgs']]]] locality_lb_policies: A list of locality load balancing policies to be used in order of + preference. Either the policy or the customPolicy field should be set. + Overrides any value set in the localityLbPolicy field. + localityLbPolicies is only supported when the BackendService is referenced + by a URL Map that is referenced by a target gRPC proxy that has the + validateForProxyless field set to true. + Structure is documented below. :param pulumi.Input[str] locality_lb_policy: The load balancing algorithm used within the scope of the locality. The possible values are: :param pulumi.Input[pulumi.InputType['BackendServiceLogConfigArgs']] log_config: This field denotes the logging options for the load balancer traffic served by this backend service. @@ -1717,6 +1759,7 @@ def get(resource_name: str, __props__.__dict__["health_checks"] = health_checks __props__.__dict__["iap"] = iap __props__.__dict__["load_balancing_scheme"] = load_balancing_scheme + __props__.__dict__["locality_lb_policies"] = locality_lb_policies __props__.__dict__["locality_lb_policy"] = locality_lb_policy __props__.__dict__["log_config"] = log_config __props__.__dict__["name"] = name @@ -1907,6 +1950,20 @@ def load_balancing_scheme(self) -> pulumi.Output[Optional[str]]: """ return pulumi.get(self, "load_balancing_scheme") + @property + @pulumi.getter(name="localityLbPolicies") + def locality_lb_policies(self) -> pulumi.Output[Optional[Sequence['outputs.BackendServiceLocalityLbPolicy']]]: + """ + A list of locality load balancing policies to be used in order of + preference. Either the policy or the customPolicy field should be set. + Overrides any value set in the localityLbPolicy field. + localityLbPolicies is only supported when the BackendService is referenced + by a URL Map that is referenced by a target gRPC proxy that has the + validateForProxyless field set to true. + Structure is documented below. + """ + return pulumi.get(self, "locality_lb_policies") + @property @pulumi.getter(name="localityLbPolicy") def locality_lb_policy(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/compute/backend_service_signed_url_key.py b/sdk/python/pulumi_gcp/compute/backend_service_signed_url_key.py index bed5dc76b2..8d35f0b340 100644 --- a/sdk/python/pulumi_gcp/compute/backend_service_signed_url_key.py +++ b/sdk/python/pulumi_gcp/compute/backend_service_signed_url_key.py @@ -176,17 +176,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - A key for signing Cloud CDN signed URLs for Backend Services. - - To get more information about BackendServiceSignedUrlKey, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendServices) - * How-to Guides - * [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/) - - > **Warning:** All arguments including `key_value` will be stored in the raw - state as plain-text. - ## Example Usage ## Import @@ -210,17 +199,6 @@ def __init__(__self__, args: BackendServiceSignedUrlKeyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A key for signing Cloud CDN signed URLs for Backend Services. - - To get more information about BackendServiceSignedUrlKey, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/backendServices) - * How-to Guides - * [Using Signed URLs](https://cloud.google.com/cdn/docs/using-signed-urls/) - - > **Warning:** All arguments including `key_value` will be stored in the raw - state as plain-text. - ## Example Usage ## Import diff --git a/sdk/python/pulumi_gcp/compute/disk.py b/sdk/python/pulumi_gcp/compute/disk.py index 8db64a79c2..260422a4e4 100644 --- a/sdk/python/pulumi_gcp/compute/disk.py +++ b/sdk/python/pulumi_gcp/compute/disk.py @@ -75,23 +75,15 @@ def __init__(__self__, *, :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] provisioned_iops: Indicates how many IOPS must be provisioned for the disk. - :param pulumi.Input[Sequence[pulumi.Input[str]]] resource_policies: Resource policies applied to this disk for automatic snapshot creations. - ~>**NOTE** This value does not support updating the - resource policy, as resource policies can not be updated more than - one at a time. Use - `compute.DiskResourcePolicyAttachment` + :param pulumi.Input[Sequence[pulumi.Input[str]]] resource_policies: Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + the resource policy, as resource policies can not be updated more than one at a time. Use + ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) to allow for updating the resource policy attached to the disk. - :param pulumi.Input[int] size: Size of the persistent disk, specified in GB. You can specify this - field when creating a persistent disk using the `image` or - `snapshot` parameter, or specify it alone to create an empty - persistent disk. - If you specify this field along with `image` or `snapshot`, - the value must not be less than the size of the image - or the size of the snapshot. - ~>**NOTE** If you change the size, the provider updates the disk size - if upsizing is detected but recreates the disk if downsizing is requested. - You can add `lifecycle.prevent_destroy` in the config to prevent destroying - and recreating. + :param pulumi.Input[int] size: Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. :param pulumi.Input[str] snapshot: The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. If the snapshot is in another project than this disk, you must supply a full URL. For example, the following are valid values: * 'https://www.googleapis.com/compute/v1/projects/project/global/snapshots/snapshot' * @@ -308,11 +300,9 @@ def provisioned_iops(self, value: Optional[pulumi.Input[int]]): @pulumi.getter(name="resourcePolicies") def resource_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: """ - Resource policies applied to this disk for automatic snapshot creations. - ~>**NOTE** This value does not support updating the - resource policy, as resource policies can not be updated more than - one at a time. Use - `compute.DiskResourcePolicyAttachment` + Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + the resource policy, as resource policies can not be updated more than one at a time. Use + ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) to allow for updating the resource policy attached to the disk. """ return pulumi.get(self, "resource_policies") @@ -325,17 +315,11 @@ def resource_policies(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[s @pulumi.getter def size(self) -> Optional[pulumi.Input[int]]: """ - Size of the persistent disk, specified in GB. You can specify this - field when creating a persistent disk using the `image` or - `snapshot` parameter, or specify it alone to create an empty - persistent disk. - If you specify this field along with `image` or `snapshot`, - the value must not be less than the size of the image - or the size of the snapshot. - ~>**NOTE** If you change the size, the provider updates the disk size - if upsizing is detected but recreates the disk if downsizing is requested. - You can add `lifecycle.prevent_destroy` in the config to prevent destroying - and recreating. + Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. """ return pulumi.get(self, "size") @@ -508,24 +492,16 @@ def __init__(__self__, *, :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] provisioned_iops: Indicates how many IOPS must be provisioned for the disk. - :param pulumi.Input[Sequence[pulumi.Input[str]]] resource_policies: Resource policies applied to this disk for automatic snapshot creations. - ~>**NOTE** This value does not support updating the - resource policy, as resource policies can not be updated more than - one at a time. Use - `compute.DiskResourcePolicyAttachment` + :param pulumi.Input[Sequence[pulumi.Input[str]]] resource_policies: Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + the resource policy, as resource policies can not be updated more than one at a time. Use + ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) to allow for updating the resource policy attached to the disk. :param pulumi.Input[str] self_link: The URI of the created resource. - :param pulumi.Input[int] size: Size of the persistent disk, specified in GB. You can specify this - field when creating a persistent disk using the `image` or - `snapshot` parameter, or specify it alone to create an empty - persistent disk. - If you specify this field along with `image` or `snapshot`, - the value must not be less than the size of the image - or the size of the snapshot. - ~>**NOTE** If you change the size, the provider updates the disk size - if upsizing is detected but recreates the disk if downsizing is requested. - You can add `lifecycle.prevent_destroy` in the config to prevent destroying - and recreating. + :param pulumi.Input[int] size: Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. :param pulumi.Input[str] snapshot: The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. If the snapshot is in another project than this disk, you must supply a full URL. For example, the following are valid values: * 'https://www.googleapis.com/compute/v1/projects/project/global/snapshots/snapshot' * @@ -825,11 +801,9 @@ def provisioned_iops(self, value: Optional[pulumi.Input[int]]): @pulumi.getter(name="resourcePolicies") def resource_policies(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: """ - Resource policies applied to this disk for automatic snapshot creations. - ~>**NOTE** This value does not support updating the - resource policy, as resource policies can not be updated more than - one at a time. Use - `compute.DiskResourcePolicyAttachment` + Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + the resource policy, as resource policies can not be updated more than one at a time. Use + ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) to allow for updating the resource policy attached to the disk. """ return pulumi.get(self, "resource_policies") @@ -854,17 +828,11 @@ def self_link(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def size(self) -> Optional[pulumi.Input[int]]: """ - Size of the persistent disk, specified in GB. You can specify this - field when creating a persistent disk using the `image` or - `snapshot` parameter, or specify it alone to create an empty - persistent disk. - If you specify this field along with `image` or `snapshot`, - the value must not be less than the size of the image - or the size of the snapshot. - ~>**NOTE** If you change the size, the provider updates the disk size - if upsizing is detected but recreates the disk if downsizing is requested. - You can add `lifecycle.prevent_destroy` in the config to prevent destroying - and recreating. + Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. """ return pulumi.get(self, "size") @@ -1046,31 +1014,6 @@ def __init__(__self__, zone: Optional[pulumi.Input[str]] = None, __props__=None): """ - Persistent disks are durable storage devices that function similarly to - the physical disks in a desktop or a server. Compute Engine manages the - hardware behind these devices to ensure data redundancy and optimize - performance for you. Persistent disks are available as either standard - hard disk drives (HDD) or solid-state drives (SSD). - - Persistent disks are located independently from your virtual machine - instances, so you can detach or move persistent disks to keep your data - even after you delete your instances. Persistent disk performance scales - automatically with size, so you can resize your existing persistent disks - or add more persistent disks to an instance to meet your performance and - storage space requirements. - - Add a persistent disk to your instance when you need reliable and - affordable storage with consistent performance characteristics. - - To get more information about Disk, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/v1/disks) - * How-to Guides - * [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk) - - > **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw - state as plain-text. - ## Example Usage ### Disk Basic @@ -1149,23 +1092,15 @@ def __init__(__self__, :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] provisioned_iops: Indicates how many IOPS must be provisioned for the disk. - :param pulumi.Input[Sequence[pulumi.Input[str]]] resource_policies: Resource policies applied to this disk for automatic snapshot creations. - ~>**NOTE** This value does not support updating the - resource policy, as resource policies can not be updated more than - one at a time. Use - `compute.DiskResourcePolicyAttachment` + :param pulumi.Input[Sequence[pulumi.Input[str]]] resource_policies: Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + the resource policy, as resource policies can not be updated more than one at a time. Use + ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) to allow for updating the resource policy attached to the disk. - :param pulumi.Input[int] size: Size of the persistent disk, specified in GB. You can specify this - field when creating a persistent disk using the `image` or - `snapshot` parameter, or specify it alone to create an empty - persistent disk. - If you specify this field along with `image` or `snapshot`, - the value must not be less than the size of the image - or the size of the snapshot. - ~>**NOTE** If you change the size, the provider updates the disk size - if upsizing is detected but recreates the disk if downsizing is requested. - You can add `lifecycle.prevent_destroy` in the config to prevent destroying - and recreating. + :param pulumi.Input[int] size: Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. :param pulumi.Input[str] snapshot: The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. If the snapshot is in another project than this disk, you must supply a full URL. For example, the following are valid values: * 'https://www.googleapis.com/compute/v1/projects/project/global/snapshots/snapshot' * @@ -1196,31 +1131,6 @@ def __init__(__self__, args: Optional[DiskArgs] = None, opts: Optional[pulumi.ResourceOptions] = None): """ - Persistent disks are durable storage devices that function similarly to - the physical disks in a desktop or a server. Compute Engine manages the - hardware behind these devices to ensure data redundancy and optimize - performance for you. Persistent disks are available as either standard - hard disk drives (HDD) or solid-state drives (SSD). - - Persistent disks are located independently from your virtual machine - instances, so you can detach or move persistent disks to keep your data - even after you delete your instances. Persistent disk performance scales - automatically with size, so you can resize your existing persistent disks - or add more persistent disks to an instance to meet your performance and - storage space requirements. - - Add a persistent disk to your instance when you need reliable and - affordable storage with consistent performance characteristics. - - To get more information about Disk, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/v1/disks) - * How-to Guides - * [Adding a persistent disk](https://cloud.google.com/compute/docs/disks/add-persistent-disk) - - > **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw - state as plain-text. - ## Example Usage ### Disk Basic @@ -1418,24 +1328,16 @@ def get(resource_name: str, :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] provisioned_iops: Indicates how many IOPS must be provisioned for the disk. - :param pulumi.Input[Sequence[pulumi.Input[str]]] resource_policies: Resource policies applied to this disk for automatic snapshot creations. - ~>**NOTE** This value does not support updating the - resource policy, as resource policies can not be updated more than - one at a time. Use - `compute.DiskResourcePolicyAttachment` + :param pulumi.Input[Sequence[pulumi.Input[str]]] resource_policies: Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + the resource policy, as resource policies can not be updated more than one at a time. Use + ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) to allow for updating the resource policy attached to the disk. :param pulumi.Input[str] self_link: The URI of the created resource. - :param pulumi.Input[int] size: Size of the persistent disk, specified in GB. You can specify this - field when creating a persistent disk using the `image` or - `snapshot` parameter, or specify it alone to create an empty - persistent disk. - If you specify this field along with `image` or `snapshot`, - the value must not be less than the size of the image - or the size of the snapshot. - ~>**NOTE** If you change the size, the provider updates the disk size - if upsizing is detected but recreates the disk if downsizing is requested. - You can add `lifecycle.prevent_destroy` in the config to prevent destroying - and recreating. + :param pulumi.Input[int] size: Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. :param pulumi.Input[str] snapshot: The source snapshot used to create this disk. You can provide this as a partial or full URL to the resource. If the snapshot is in another project than this disk, you must supply a full URL. For example, the following are valid values: * 'https://www.googleapis.com/compute/v1/projects/project/global/snapshots/snapshot' * @@ -1654,11 +1556,9 @@ def provisioned_iops(self) -> pulumi.Output[int]: @pulumi.getter(name="resourcePolicies") def resource_policies(self) -> pulumi.Output[Sequence[str]]: """ - Resource policies applied to this disk for automatic snapshot creations. - ~>**NOTE** This value does not support updating the - resource policy, as resource policies can not be updated more than - one at a time. Use - `compute.DiskResourcePolicyAttachment` + Resource policies applied to this disk for automatic snapshot creations. ~>**NOTE** This value does not support updating + the resource policy, as resource policies can not be updated more than one at a time. Use + ['google_compute_disk_resource_policy_attachment'](https://registry.terraform.io/providers/hashicorp/google/latest/docs/resources/compute_disk_resource_policy_attachment) to allow for updating the resource policy attached to the disk. """ return pulumi.get(self, "resource_policies") @@ -1675,17 +1575,11 @@ def self_link(self) -> pulumi.Output[str]: @pulumi.getter def size(self) -> pulumi.Output[int]: """ - Size of the persistent disk, specified in GB. You can specify this - field when creating a persistent disk using the `image` or - `snapshot` parameter, or specify it alone to create an empty - persistent disk. - If you specify this field along with `image` or `snapshot`, - the value must not be less than the size of the image - or the size of the snapshot. - ~>**NOTE** If you change the size, the provider updates the disk size - if upsizing is detected but recreates the disk if downsizing is requested. - You can add `lifecycle.prevent_destroy` in the config to prevent destroying - and recreating. + Size of the persistent disk, specified in GB. You can specify this field when creating a persistent disk using the + 'image' or 'snapshot' parameter, or specify it alone to create an empty persistent disk. If you specify this field along + with 'image' or 'snapshot', the value must not be less than the size of the image or the size of the snapshot. + ~>**NOTE** If you change the size, Terraform updates the disk size if upsizing is detected but recreates the disk if + downsizing is requested. You can add 'lifecycle.prevent_destroy' in the config to prevent destroying and recreating. """ return pulumi.get(self, "size") diff --git a/sdk/python/pulumi_gcp/compute/disk_resource_policy_attachment.py b/sdk/python/pulumi_gcp/compute/disk_resource_policy_attachment.py index 581171ca7f..83dd2876ff 100644 --- a/sdk/python/pulumi_gcp/compute/disk_resource_policy_attachment.py +++ b/sdk/python/pulumi_gcp/compute/disk_resource_policy_attachment.py @@ -173,11 +173,6 @@ def __init__(__self__, zone: Optional[pulumi.Input[str]] = None, __props__=None): """ - Adds existing resource policies to a disk. You can only add one policy - which will be applied to this disk for scheduling snapshot creation. - - > **Note:** This resource does not support regional disks (`compute.RegionDisk`). For regional disks, please refer to the `compute.RegionDiskResourcePolicyAttachment` resource. - ## Example Usage ### Disk Resource Policy Attachment Basic @@ -243,11 +238,6 @@ def __init__(__self__, args: DiskResourcePolicyAttachmentArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Adds existing resource policies to a disk. You can only add one policy - which will be applied to this disk for scheduling snapshot creation. - - > **Note:** This resource does not support regional disks (`compute.RegionDisk`). For regional disks, please refer to the `compute.RegionDiskResourcePolicyAttachment` resource. - ## Example Usage ### Disk Resource Policy Attachment Basic diff --git a/sdk/python/pulumi_gcp/compute/forwarding_rule.py b/sdk/python/pulumi_gcp/compute/forwarding_rule.py index eb177e7124..a0bb651a2d 100644 --- a/sdk/python/pulumi_gcp/compute/forwarding_rule.py +++ b/sdk/python/pulumi_gcp/compute/forwarding_rule.py @@ -74,7 +74,7 @@ def __init__(__self__, *, mirrored even if a PacketMirroring rule applies to them. This can only be set to true for load balancers that have their loadBalancingScheme set to INTERNAL. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this forwarding rule. A list of key->value pairs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this rule. :param pulumi.Input[str] load_balancing_scheme: Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * @@ -306,7 +306,7 @@ def is_mirroring_collector(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: """ - Labels to apply to this forwarding rule. A list of key->value pairs. + Labels to apply to this rule. """ return pulumi.get(self, "labels") @@ -588,7 +588,7 @@ def __init__(__self__, *, can only be set to true for load balancers that have their loadBalancingScheme set to INTERNAL. :param pulumi.Input[str] label_fingerprint: Used internally during label updates. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this forwarding rule. A list of key->value pairs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this rule. :param pulumi.Input[str] load_balancing_scheme: Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * @@ -861,7 +861,7 @@ def label_fingerprint(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: """ - Labels to apply to this forwarding rule. A list of key->value pairs. + Labels to apply to this rule. """ return pulumi.get(self, "labels") @@ -1231,7 +1231,7 @@ def __init__(__self__, mirrored even if a PacketMirroring rule applies to them. This can only be set to true for load balancers that have their loadBalancingScheme set to INTERNAL. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this forwarding rule. A list of key->value pairs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this rule. :param pulumi.Input[str] load_balancing_scheme: Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * @@ -1506,7 +1506,7 @@ def get(resource_name: str, can only be set to true for load balancers that have their loadBalancingScheme set to INTERNAL. :param pulumi.Input[str] label_fingerprint: Used internally during label updates. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this forwarding rule. A list of key->value pairs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this rule. :param pulumi.Input[str] load_balancing_scheme: Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * @@ -1722,7 +1722,7 @@ def label_fingerprint(self) -> pulumi.Output[str]: @pulumi.getter def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: """ - Labels to apply to this forwarding rule. A list of key->value pairs. + Labels to apply to this rule. """ return pulumi.get(self, "labels") diff --git a/sdk/python/pulumi_gcp/compute/get_backend_service.py b/sdk/python/pulumi_gcp/compute/get_backend_service.py index 41b5c9d85f..21f0e4e563 100644 --- a/sdk/python/pulumi_gcp/compute/get_backend_service.py +++ b/sdk/python/pulumi_gcp/compute/get_backend_service.py @@ -22,7 +22,7 @@ class GetBackendServiceResult: """ A collection of values returned by getBackendService. """ - def __init__(__self__, affinity_cookie_ttl_sec=None, backends=None, cdn_policies=None, circuit_breakers=None, compression_mode=None, connection_draining_timeout_sec=None, consistent_hash=None, creation_timestamp=None, custom_request_headers=None, custom_response_headers=None, description=None, edge_security_policy=None, enable_cdn=None, fingerprint=None, generated_id=None, health_checks=None, iaps=None, id=None, load_balancing_scheme=None, locality_lb_policy=None, log_configs=None, name=None, outlier_detections=None, port_name=None, project=None, protocol=None, security_policy=None, security_settings=None, self_link=None, session_affinity=None, timeout_sec=None): + def __init__(__self__, affinity_cookie_ttl_sec=None, backends=None, cdn_policies=None, circuit_breakers=None, compression_mode=None, connection_draining_timeout_sec=None, consistent_hash=None, creation_timestamp=None, custom_request_headers=None, custom_response_headers=None, description=None, edge_security_policy=None, enable_cdn=None, fingerprint=None, generated_id=None, health_checks=None, iaps=None, id=None, load_balancing_scheme=None, locality_lb_policies=None, locality_lb_policy=None, log_configs=None, name=None, outlier_detections=None, port_name=None, project=None, protocol=None, security_policy=None, security_settings=None, self_link=None, session_affinity=None, timeout_sec=None): if affinity_cookie_ttl_sec and not isinstance(affinity_cookie_ttl_sec, int): raise TypeError("Expected argument 'affinity_cookie_ttl_sec' to be a int") pulumi.set(__self__, "affinity_cookie_ttl_sec", affinity_cookie_ttl_sec) @@ -80,6 +80,9 @@ def __init__(__self__, affinity_cookie_ttl_sec=None, backends=None, cdn_policies if load_balancing_scheme and not isinstance(load_balancing_scheme, str): raise TypeError("Expected argument 'load_balancing_scheme' to be a str") pulumi.set(__self__, "load_balancing_scheme", load_balancing_scheme) + if locality_lb_policies and not isinstance(locality_lb_policies, list): + raise TypeError("Expected argument 'locality_lb_policies' to be a list") + pulumi.set(__self__, "locality_lb_policies", locality_lb_policies) if locality_lb_policy and not isinstance(locality_lb_policy, str): raise TypeError("Expected argument 'locality_lb_policy' to be a str") pulumi.set(__self__, "locality_lb_policy", locality_lb_policy) @@ -236,6 +239,11 @@ def id(self) -> str: def load_balancing_scheme(self) -> str: return pulumi.get(self, "load_balancing_scheme") + @property + @pulumi.getter(name="localityLbPolicies") + def locality_lb_policies(self) -> Sequence['outputs.GetBackendServiceLocalityLbPolicyResult']: + return pulumi.get(self, "locality_lb_policies") + @property @pulumi.getter(name="localityLbPolicy") def locality_lb_policy(self) -> str: @@ -337,6 +345,7 @@ def __await__(self): iaps=self.iaps, id=self.id, load_balancing_scheme=self.load_balancing_scheme, + locality_lb_policies=self.locality_lb_policies, locality_lb_policy=self.locality_lb_policy, log_configs=self.log_configs, name=self.name, @@ -389,6 +398,7 @@ def get_backend_service(name: Optional[str] = None, iaps=__ret__.iaps, id=__ret__.id, load_balancing_scheme=__ret__.load_balancing_scheme, + locality_lb_policies=__ret__.locality_lb_policies, locality_lb_policy=__ret__.locality_lb_policy, log_configs=__ret__.log_configs, name=__ret__.name, diff --git a/sdk/python/pulumi_gcp/compute/get_instance_template.py b/sdk/python/pulumi_gcp/compute/get_instance_template.py index da7cd0102b..508b7b4334 100644 --- a/sdk/python/pulumi_gcp/compute/get_instance_template.py +++ b/sdk/python/pulumi_gcp/compute/get_instance_template.py @@ -255,10 +255,6 @@ def most_recent(self) -> Optional[bool]: @property @pulumi.getter def name(self) -> Optional[str]: - """ - The name of the instance template. If you leave - this blank, the provider will auto-generate a unique name. - """ return pulumi.get(self, "name") @property diff --git a/sdk/python/pulumi_gcp/compute/get_resource_policy.py b/sdk/python/pulumi_gcp/compute/get_resource_policy.py index 3a69e24346..7152011a4d 100644 --- a/sdk/python/pulumi_gcp/compute/get_resource_policy.py +++ b/sdk/python/pulumi_gcp/compute/get_resource_policy.py @@ -128,16 +128,7 @@ def get_resource_policy(name: Optional[str] = None, region: Optional[str] = None, opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetResourcePolicyResult: """ - Provide access to a Resource Policy's attributes. For more information see [the official documentation](https://cloud.google.com/compute/docs/disks/scheduled-snapshots) or the [API](https://cloud.google.com/compute/docs/reference/rest/beta/resourcePolicies). - - ```python - import pulumi - import pulumi_gcp as gcp - - daily = gcp.compute.get_resource_policy(name="daily", - region="us-central1") - ``` - + Use this data source to access information about an existing resource. :param str name: The name of the Resource Policy. :param str project: Project from which to list the Resource Policy. Defaults to project declared in the provider. @@ -168,16 +159,7 @@ def get_resource_policy_output(name: Optional[pulumi.Input[str]] = None, region: Optional[pulumi.Input[Optional[str]]] = None, opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetResourcePolicyResult]: """ - Provide access to a Resource Policy's attributes. For more information see [the official documentation](https://cloud.google.com/compute/docs/disks/scheduled-snapshots) or the [API](https://cloud.google.com/compute/docs/reference/rest/beta/resourcePolicies). - - ```python - import pulumi - import pulumi_gcp as gcp - - daily = gcp.compute.get_resource_policy(name="daily", - region="us-central1") - ``` - + Use this data source to access information about an existing resource. :param str name: The name of the Resource Policy. :param str project: Project from which to list the Resource Policy. Defaults to project declared in the provider. diff --git a/sdk/python/pulumi_gcp/compute/get_router_nat.py b/sdk/python/pulumi_gcp/compute/get_router_nat.py index eecc11625f..afd12a41c0 100644 --- a/sdk/python/pulumi_gcp/compute/get_router_nat.py +++ b/sdk/python/pulumi_gcp/compute/get_router_nat.py @@ -22,7 +22,7 @@ class GetRouterNatResult: """ A collection of values returned by getRouterNat. """ - def __init__(__self__, drain_nat_ips=None, enable_dynamic_port_allocation=None, enable_endpoint_independent_mapping=None, icmp_idle_timeout_sec=None, id=None, log_configs=None, max_ports_per_vm=None, min_ports_per_vm=None, name=None, nat_ip_allocate_option=None, nat_ips=None, project=None, region=None, router=None, rules=None, source_subnetwork_ip_ranges_to_nat=None, subnetworks=None, tcp_established_idle_timeout_sec=None, tcp_transitory_idle_timeout_sec=None, udp_idle_timeout_sec=None): + def __init__(__self__, drain_nat_ips=None, enable_dynamic_port_allocation=None, enable_endpoint_independent_mapping=None, icmp_idle_timeout_sec=None, id=None, log_configs=None, max_ports_per_vm=None, min_ports_per_vm=None, name=None, nat_ip_allocate_option=None, nat_ips=None, project=None, region=None, router=None, rules=None, source_subnetwork_ip_ranges_to_nat=None, subnetworks=None, tcp_established_idle_timeout_sec=None, tcp_time_wait_timeout_sec=None, tcp_transitory_idle_timeout_sec=None, udp_idle_timeout_sec=None): if drain_nat_ips and not isinstance(drain_nat_ips, list): raise TypeError("Expected argument 'drain_nat_ips' to be a list") pulumi.set(__self__, "drain_nat_ips", drain_nat_ips) @@ -77,6 +77,9 @@ def __init__(__self__, drain_nat_ips=None, enable_dynamic_port_allocation=None, if tcp_established_idle_timeout_sec and not isinstance(tcp_established_idle_timeout_sec, int): raise TypeError("Expected argument 'tcp_established_idle_timeout_sec' to be a int") pulumi.set(__self__, "tcp_established_idle_timeout_sec", tcp_established_idle_timeout_sec) + if tcp_time_wait_timeout_sec and not isinstance(tcp_time_wait_timeout_sec, int): + raise TypeError("Expected argument 'tcp_time_wait_timeout_sec' to be a int") + pulumi.set(__self__, "tcp_time_wait_timeout_sec", tcp_time_wait_timeout_sec) if tcp_transitory_idle_timeout_sec and not isinstance(tcp_transitory_idle_timeout_sec, int): raise TypeError("Expected argument 'tcp_transitory_idle_timeout_sec' to be a int") pulumi.set(__self__, "tcp_transitory_idle_timeout_sec", tcp_transitory_idle_timeout_sec) @@ -177,6 +180,11 @@ def subnetworks(self) -> Sequence['outputs.GetRouterNatSubnetworkResult']: def tcp_established_idle_timeout_sec(self) -> int: return pulumi.get(self, "tcp_established_idle_timeout_sec") + @property + @pulumi.getter(name="tcpTimeWaitTimeoutSec") + def tcp_time_wait_timeout_sec(self) -> int: + return pulumi.get(self, "tcp_time_wait_timeout_sec") + @property @pulumi.getter(name="tcpTransitoryIdleTimeoutSec") def tcp_transitory_idle_timeout_sec(self) -> int: @@ -212,6 +220,7 @@ def __await__(self): source_subnetwork_ip_ranges_to_nat=self.source_subnetwork_ip_ranges_to_nat, subnetworks=self.subnetworks, tcp_established_idle_timeout_sec=self.tcp_established_idle_timeout_sec, + tcp_time_wait_timeout_sec=self.tcp_time_wait_timeout_sec, tcp_transitory_idle_timeout_sec=self.tcp_transitory_idle_timeout_sec, udp_idle_timeout_sec=self.udp_idle_timeout_sec) @@ -273,6 +282,7 @@ def get_router_nat(name: Optional[str] = None, source_subnetwork_ip_ranges_to_nat=__ret__.source_subnetwork_ip_ranges_to_nat, subnetworks=__ret__.subnetworks, tcp_established_idle_timeout_sec=__ret__.tcp_established_idle_timeout_sec, + tcp_time_wait_timeout_sec=__ret__.tcp_time_wait_timeout_sec, tcp_transitory_idle_timeout_sec=__ret__.tcp_transitory_idle_timeout_sec, udp_idle_timeout_sec=__ret__.udp_idle_timeout_sec) diff --git a/sdk/python/pulumi_gcp/compute/global_address.py b/sdk/python/pulumi_gcp/compute/global_address.py index 164857ce8f..c79c7e5a21 100644 --- a/sdk/python/pulumi_gcp/compute/global_address.py +++ b/sdk/python/pulumi_gcp/compute/global_address.py @@ -37,7 +37,7 @@ def __init__(__self__, *, :param pulumi.Input[str] description: An optional description of this resource. :param pulumi.Input[str] ip_version: The IP Version that will be used by this address. The default value is `IPV4`. Possible values are `IPV4` and `IPV6`. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. :param pulumi.Input[str] name: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and @@ -55,9 +55,8 @@ def __init__(__self__, *, or addressType=INTERNAL when purpose=PRIVATE_SERVICE_CONNECT :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] purpose: The purpose of the resource. Possible values include: - * VPC_PEERING - for peer networks - * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + :param pulumi.Input[str] purpose: The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks """ if address is not None: pulumi.set(__self__, "address", address) @@ -139,7 +138,7 @@ def ip_version(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: """ - Labels to apply to this address. A list of key->value pairs. + Labels to apply to this address. A list of key->value pairs. """ return pulumi.get(self, "labels") @@ -212,9 +211,8 @@ def project(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def purpose(self) -> Optional[pulumi.Input[str]]: """ - The purpose of the resource. Possible values include: - * VPC_PEERING - for peer networks - * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks """ return pulumi.get(self, "purpose") @@ -254,7 +252,7 @@ def __init__(__self__, *, :param pulumi.Input[str] ip_version: The IP Version that will be used by this address. The default value is `IPV4`. Possible values are `IPV4` and `IPV6`. :param pulumi.Input[str] label_fingerprint: The fingerprint used for optimistic locking of this resource. Used internally during updates. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. :param pulumi.Input[str] name: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and @@ -272,9 +270,8 @@ def __init__(__self__, *, or addressType=INTERNAL when purpose=PRIVATE_SERVICE_CONNECT :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] purpose: The purpose of the resource. Possible values include: - * VPC_PEERING - for peer networks - * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + :param pulumi.Input[str] purpose: The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks :param pulumi.Input[str] self_link: The URI of the created resource. """ if address is not None: @@ -387,7 +384,7 @@ def label_fingerprint(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: """ - Labels to apply to this address. A list of key->value pairs. + Labels to apply to this address. A list of key->value pairs. """ return pulumi.get(self, "labels") @@ -460,9 +457,8 @@ def project(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def purpose(self) -> Optional[pulumi.Input[str]]: """ - The purpose of the resource. Possible values include: - * VPC_PEERING - for peer networks - * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks """ return pulumi.get(self, "purpose") @@ -518,21 +514,6 @@ def __init__(__self__, default = gcp.compute.GlobalAddress("default") ``` - ### Global Address Private Services Connect - - ```python - import pulumi - import pulumi_gcp as gcp - - network = gcp.compute.Network("network", auto_create_subnetworks=False, - opts=pulumi.ResourceOptions(provider=google_beta)) - default = gcp.compute.GlobalAddress("default", - address_type="INTERNAL", - purpose="PRIVATE_SERVICE_CONNECT", - network=network.id, - address="100.100.100.105", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import @@ -563,7 +544,7 @@ def __init__(__self__, :param pulumi.Input[str] description: An optional description of this resource. :param pulumi.Input[str] ip_version: The IP Version that will be used by this address. The default value is `IPV4`. Possible values are `IPV4` and `IPV6`. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. :param pulumi.Input[str] name: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and @@ -581,9 +562,8 @@ def __init__(__self__, or addressType=INTERNAL when purpose=PRIVATE_SERVICE_CONNECT :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] purpose: The purpose of the resource. Possible values include: - * VPC_PEERING - for peer networks - * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + :param pulumi.Input[str] purpose: The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks """ ... @overload @@ -610,21 +590,6 @@ def __init__(__self__, default = gcp.compute.GlobalAddress("default") ``` - ### Global Address Private Services Connect - - ```python - import pulumi - import pulumi_gcp as gcp - - network = gcp.compute.Network("network", auto_create_subnetworks=False, - opts=pulumi.ResourceOptions(provider=google_beta)) - default = gcp.compute.GlobalAddress("default", - address_type="INTERNAL", - purpose="PRIVATE_SERVICE_CONNECT", - network=network.id, - address="100.100.100.105", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import @@ -732,7 +697,7 @@ def get(resource_name: str, :param pulumi.Input[str] ip_version: The IP Version that will be used by this address. The default value is `IPV4`. Possible values are `IPV4` and `IPV6`. :param pulumi.Input[str] label_fingerprint: The fingerprint used for optimistic locking of this resource. Used internally during updates. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this address. A list of key->value pairs. :param pulumi.Input[str] name: Name of the resource. Provided by the client when the resource is created. The name must be 1-63 characters long, and comply with RFC1035. Specifically, the name must be 1-63 characters long and @@ -750,9 +715,8 @@ def get(resource_name: str, or addressType=INTERNAL when purpose=PRIVATE_SERVICE_CONNECT :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] purpose: The purpose of the resource. Possible values include: - * VPC_PEERING - for peer networks - * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + :param pulumi.Input[str] purpose: The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks :param pulumi.Input[str] self_link: The URI of the created resource. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -833,7 +797,7 @@ def label_fingerprint(self) -> pulumi.Output[str]: @pulumi.getter def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: """ - Labels to apply to this address. A list of key->value pairs. + Labels to apply to this address. A list of key->value pairs. """ return pulumi.get(self, "labels") @@ -886,9 +850,8 @@ def project(self) -> pulumi.Output[str]: @pulumi.getter def purpose(self) -> pulumi.Output[Optional[str]]: """ - The purpose of the resource. Possible values include: - * VPC_PEERING - for peer networks - * PRIVATE_SERVICE_CONNECT - for Private Service Connect networks + The purpose of the resource. Possible values include: * VPC_PEERING - for peer networks * PRIVATE_SERVICE_CONNECT - for + ([Beta](https://terraform.io/docs/providers/google/guides/provider_versions.html) only) Private Service Connect networks """ return pulumi.get(self, "purpose") diff --git a/sdk/python/pulumi_gcp/compute/global_forwarding_rule.py b/sdk/python/pulumi_gcp/compute/global_forwarding_rule.py index 22c6201c21..93f2152542 100644 --- a/sdk/python/pulumi_gcp/compute/global_forwarding_rule.py +++ b/sdk/python/pulumi_gcp/compute/global_forwarding_rule.py @@ -30,12 +30,10 @@ def __init__(__self__, *, project: Optional[pulumi.Input[str]] = None): """ The set of arguments for constructing a GlobalForwardingRule resource. - :param pulumi.Input[str] target: The URL of the target resource to receive the matched traffic. - The forwarded traffic must be of a type appropriate to the target object. - For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - are valid. - For global address with a purpose of PRIVATE_SERVICE_CONNECT and - addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + :param pulumi.Input[str] target: The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. :param pulumi.Input[str] description: An optional description of this resource. Provide this property when you create the resource. :param pulumi.Input[str] ip_address: The IP address that this forwarding rule serves. When a client sends @@ -58,19 +56,14 @@ def __init__(__self__, *, Possible values are `TCP`, `UDP`, `ESP`, `AH`, `SCTP`, and `ICMP`. :param pulumi.Input[str] ip_version: The IP Version that will be used by this global forwarding rule. Possible values are `IPV4` and `IPV6`. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this forwarding rule. A list of key->value pairs. - :param pulumi.Input[str] load_balancing_scheme: This signifies what the GlobalForwardingRule will be used for. - The value of INTERNAL_SELF_MANAGED means that this will be used for - Internal Global HTTP(S) LB. The value of EXTERNAL means that this - will be used for External Global Load Balancing (HTTP(S) LB, - External TCP/UDP LB, SSL Proxy) - Note: This field must be set "" if the global address is - External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - that this will be used for Global external HTTP(S) load balancers. - Note: This field must be set "" if the global address is - configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - Default value is `EXTERNAL`. - Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this rule. + :param pulumi.Input[str] load_balancing_scheme: Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED :param pulumi.Input[Sequence[pulumi.Input['GlobalForwardingRuleMetadataFilterArgs']]] metadata_filters: Opaque filter criteria used by Loadbalancer to restrict routing configuration to a limited set xDS compliant clients. In their xDS requests to Loadbalancer, xDS clients present node metadata. If a @@ -93,11 +86,9 @@ def __init__(__self__, *, first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash. - :param pulumi.Input[str] network: This field is not used for external load balancing. - For INTERNAL_SELF_MANAGED load balancing, this field - identifies the network that the load balanced IP should belong to - for this global forwarding rule. If this field is not specified, - the default network will be used. + :param pulumi.Input[str] network: This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + specified, the default network will be used. :param pulumi.Input[str] port_range: This field is used along with the target field for TargetHttpProxy, TargetHttpsProxy, TargetSslProxy, TargetTcpProxy, TargetVpnGateway, TargetPool, TargetInstance. @@ -145,12 +136,10 @@ def __init__(__self__, *, @pulumi.getter def target(self) -> pulumi.Input[str]: """ - The URL of the target resource to receive the matched traffic. - The forwarded traffic must be of a type appropriate to the target object. - For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - are valid. - For global address with a purpose of PRIVATE_SERVICE_CONNECT and - addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. """ return pulumi.get(self, "target") @@ -228,7 +217,7 @@ def ip_version(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: """ - Labels to apply to this forwarding rule. A list of key->value pairs. + Labels to apply to this rule. """ return pulumi.get(self, "labels") @@ -240,18 +229,13 @@ def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]) @pulumi.getter(name="loadBalancingScheme") def load_balancing_scheme(self) -> Optional[pulumi.Input[str]]: """ - This signifies what the GlobalForwardingRule will be used for. - The value of INTERNAL_SELF_MANAGED means that this will be used for - Internal Global HTTP(S) LB. The value of EXTERNAL means that this - will be used for External Global Load Balancing (HTTP(S) LB, - External TCP/UDP LB, SSL Proxy) - Note: This field must be set "" if the global address is - External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - that this will be used for Global external HTTP(S) load balancers. - Note: This field must be set "" if the global address is - configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - Default value is `EXTERNAL`. - Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED """ return pulumi.get(self, "load_balancing_scheme") @@ -307,11 +291,9 @@ def name(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def network(self) -> Optional[pulumi.Input[str]]: """ - This field is not used for external load balancing. - For INTERNAL_SELF_MANAGED load balancing, this field - identifies the network that the load balanced IP should belong to - for this global forwarding rule. If this field is not specified, - the default network will be used. + This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + specified, the default network will be used. """ return pulumi.get(self, "network") @@ -404,19 +386,14 @@ def __init__(__self__, *, :param pulumi.Input[str] ip_version: The IP Version that will be used by this global forwarding rule. Possible values are `IPV4` and `IPV6`. :param pulumi.Input[str] label_fingerprint: Used internally during label updates. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this forwarding rule. A list of key->value pairs. - :param pulumi.Input[str] load_balancing_scheme: This signifies what the GlobalForwardingRule will be used for. - The value of INTERNAL_SELF_MANAGED means that this will be used for - Internal Global HTTP(S) LB. The value of EXTERNAL means that this - will be used for External Global Load Balancing (HTTP(S) LB, - External TCP/UDP LB, SSL Proxy) - Note: This field must be set "" if the global address is - External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - that this will be used for Global external HTTP(S) load balancers. - Note: This field must be set "" if the global address is - configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - Default value is `EXTERNAL`. - Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this rule. + :param pulumi.Input[str] load_balancing_scheme: Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED :param pulumi.Input[Sequence[pulumi.Input['GlobalForwardingRuleMetadataFilterArgs']]] metadata_filters: Opaque filter criteria used by Loadbalancer to restrict routing configuration to a limited set xDS compliant clients. In their xDS requests to Loadbalancer, xDS clients present node metadata. If a @@ -439,11 +416,9 @@ def __init__(__self__, *, first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash. - :param pulumi.Input[str] network: This field is not used for external load balancing. - For INTERNAL_SELF_MANAGED load balancing, this field - identifies the network that the load balanced IP should belong to - for this global forwarding rule. If this field is not specified, - the default network will be used. + :param pulumi.Input[str] network: This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + specified, the default network will be used. :param pulumi.Input[str] port_range: This field is used along with the target field for TargetHttpProxy, TargetHttpsProxy, TargetSslProxy, TargetTcpProxy, TargetVpnGateway, TargetPool, TargetInstance. @@ -466,12 +441,10 @@ def __init__(__self__, *, :param pulumi.Input[str] psc_connection_status: The PSC connection status of the PSC Forwarding Rule. Possible values: STATUS_UNSPECIFIED, PENDING, ACCEPTED, REJECTED, CLOSED :param pulumi.Input[str] self_link: The URI of the created resource. - :param pulumi.Input[str] target: The URL of the target resource to receive the matched traffic. - The forwarded traffic must be of a type appropriate to the target object. - For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - are valid. - For global address with a purpose of PRIVATE_SERVICE_CONNECT and - addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + :param pulumi.Input[str] target: The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. """ if description is not None: pulumi.set(__self__, "description", description) @@ -588,7 +561,7 @@ def label_fingerprint(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: """ - Labels to apply to this forwarding rule. A list of key->value pairs. + Labels to apply to this rule. """ return pulumi.get(self, "labels") @@ -600,18 +573,13 @@ def labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]) @pulumi.getter(name="loadBalancingScheme") def load_balancing_scheme(self) -> Optional[pulumi.Input[str]]: """ - This signifies what the GlobalForwardingRule will be used for. - The value of INTERNAL_SELF_MANAGED means that this will be used for - Internal Global HTTP(S) LB. The value of EXTERNAL means that this - will be used for External Global Load Balancing (HTTP(S) LB, - External TCP/UDP LB, SSL Proxy) - Note: This field must be set "" if the global address is - External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - that this will be used for Global external HTTP(S) load balancers. - Note: This field must be set "" if the global address is - configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - Default value is `EXTERNAL`. - Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED """ return pulumi.get(self, "load_balancing_scheme") @@ -667,11 +635,9 @@ def name(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def network(self) -> Optional[pulumi.Input[str]]: """ - This field is not used for external load balancing. - For INTERNAL_SELF_MANAGED load balancing, this field - identifies the network that the load balanced IP should belong to - for this global forwarding rule. If this field is not specified, - the default network will be used. + This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + specified, the default network will be used. """ return pulumi.get(self, "network") @@ -760,12 +726,10 @@ def self_link(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def target(self) -> Optional[pulumi.Input[str]]: """ - The URL of the target resource to receive the matched traffic. - The forwarded traffic must be of a type appropriate to the target object. - For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - are valid. - For global address with a purpose of PRIVATE_SERVICE_CONNECT and - addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. """ return pulumi.get(self, "target") @@ -799,7 +763,7 @@ def __init__(__self__, balancing. For more information, see - + https://cloud.google.com/compute/docs/load-balancing/http/ ## Example Usage ### Global Forwarding Rule External Managed @@ -837,7 +801,6 @@ def __init__(__self__, load_balancing_scheme="EXTERNAL_MANAGED") ``` ### Private Service Connect Google Apis - ### Private Service Connect Google Apis ```python import pulumi @@ -910,19 +873,14 @@ def __init__(__self__, Possible values are `TCP`, `UDP`, `ESP`, `AH`, `SCTP`, and `ICMP`. :param pulumi.Input[str] ip_version: The IP Version that will be used by this global forwarding rule. Possible values are `IPV4` and `IPV6`. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this forwarding rule. A list of key->value pairs. - :param pulumi.Input[str] load_balancing_scheme: This signifies what the GlobalForwardingRule will be used for. - The value of INTERNAL_SELF_MANAGED means that this will be used for - Internal Global HTTP(S) LB. The value of EXTERNAL means that this - will be used for External Global Load Balancing (HTTP(S) LB, - External TCP/UDP LB, SSL Proxy) - Note: This field must be set "" if the global address is - External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - that this will be used for Global external HTTP(S) load balancers. - Note: This field must be set "" if the global address is - configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - Default value is `EXTERNAL`. - Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this rule. + :param pulumi.Input[str] load_balancing_scheme: Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['GlobalForwardingRuleMetadataFilterArgs']]]] metadata_filters: Opaque filter criteria used by Loadbalancer to restrict routing configuration to a limited set xDS compliant clients. In their xDS requests to Loadbalancer, xDS clients present node metadata. If a @@ -945,11 +903,9 @@ def __init__(__self__, first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash. - :param pulumi.Input[str] network: This field is not used for external load balancing. - For INTERNAL_SELF_MANAGED load balancing, this field - identifies the network that the load balanced IP should belong to - for this global forwarding rule. If this field is not specified, - the default network will be used. + :param pulumi.Input[str] network: This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + specified, the default network will be used. :param pulumi.Input[str] port_range: This field is used along with the target field for TargetHttpProxy, TargetHttpsProxy, TargetSslProxy, TargetTcpProxy, TargetVpnGateway, TargetPool, TargetInstance. @@ -968,12 +924,10 @@ def __init__(__self__, * TargetVpnGateway: 500, 4500 :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] target: The URL of the target resource to receive the matched traffic. - The forwarded traffic must be of a type appropriate to the target object. - For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - are valid. - For global address with a purpose of PRIVATE_SERVICE_CONNECT and - addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + :param pulumi.Input[str] target: The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. """ ... @overload @@ -988,7 +942,7 @@ def __init__(__self__, balancing. For more information, see - + https://cloud.google.com/compute/docs/load-balancing/http/ ## Example Usage ### Global Forwarding Rule External Managed @@ -1026,7 +980,6 @@ def __init__(__self__, load_balancing_scheme="EXTERNAL_MANAGED") ``` ### Private Service Connect Google Apis - ### Private Service Connect Google Apis ```python import pulumi @@ -1185,19 +1138,14 @@ def get(resource_name: str, :param pulumi.Input[str] ip_version: The IP Version that will be used by this global forwarding rule. Possible values are `IPV4` and `IPV6`. :param pulumi.Input[str] label_fingerprint: Used internally during label updates. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this forwarding rule. A list of key->value pairs. - :param pulumi.Input[str] load_balancing_scheme: This signifies what the GlobalForwardingRule will be used for. - The value of INTERNAL_SELF_MANAGED means that this will be used for - Internal Global HTTP(S) LB. The value of EXTERNAL means that this - will be used for External Global Load Balancing (HTTP(S) LB, - External TCP/UDP LB, SSL Proxy) - Note: This field must be set "" if the global address is - External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - that this will be used for Global external HTTP(S) load balancers. - Note: This field must be set "" if the global address is - configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - Default value is `EXTERNAL`. - Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels to apply to this rule. + :param pulumi.Input[str] load_balancing_scheme: Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['GlobalForwardingRuleMetadataFilterArgs']]]] metadata_filters: Opaque filter criteria used by Loadbalancer to restrict routing configuration to a limited set xDS compliant clients. In their xDS requests to Loadbalancer, xDS clients present node metadata. If a @@ -1220,11 +1168,9 @@ def get(resource_name: str, first character must be a lowercase letter, and all following characters must be a dash, lowercase letter, or digit, except the last character, which cannot be a dash. - :param pulumi.Input[str] network: This field is not used for external load balancing. - For INTERNAL_SELF_MANAGED load balancing, this field - identifies the network that the load balanced IP should belong to - for this global forwarding rule. If this field is not specified, - the default network will be used. + :param pulumi.Input[str] network: This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + specified, the default network will be used. :param pulumi.Input[str] port_range: This field is used along with the target field for TargetHttpProxy, TargetHttpsProxy, TargetSslProxy, TargetTcpProxy, TargetVpnGateway, TargetPool, TargetInstance. @@ -1247,12 +1193,10 @@ def get(resource_name: str, :param pulumi.Input[str] psc_connection_status: The PSC connection status of the PSC Forwarding Rule. Possible values: STATUS_UNSPECIFIED, PENDING, ACCEPTED, REJECTED, CLOSED :param pulumi.Input[str] self_link: The URI of the created resource. - :param pulumi.Input[str] target: The URL of the target resource to receive the matched traffic. - The forwarded traffic must be of a type appropriate to the target object. - For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - are valid. - For global address with a purpose of PRIVATE_SERVICE_CONNECT and - addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + :param pulumi.Input[str] target: The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -1338,7 +1282,7 @@ def label_fingerprint(self) -> pulumi.Output[str]: @pulumi.getter def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: """ - Labels to apply to this forwarding rule. A list of key->value pairs. + Labels to apply to this rule. """ return pulumi.get(self, "labels") @@ -1346,18 +1290,13 @@ def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: @pulumi.getter(name="loadBalancingScheme") def load_balancing_scheme(self) -> pulumi.Output[Optional[str]]: """ - This signifies what the GlobalForwardingRule will be used for. - The value of INTERNAL_SELF_MANAGED means that this will be used for - Internal Global HTTP(S) LB. The value of EXTERNAL means that this - will be used for External Global Load Balancing (HTTP(S) LB, - External TCP/UDP LB, SSL Proxy) - Note: This field must be set "" if the global address is - External TCP/UDP LB, SSL Proxy). The value of EXTERNAL_MANAGED means - that this will be used for Global external HTTP(S) load balancers. - Note: This field must be set "" if the global address is - configured as a purpose of PRIVATE_SERVICE_CONNECT and addressType of INTERNAL. - Default value is `EXTERNAL`. - Possible values are `EXTERNAL`, `EXTERNAL_MANAGED`, and `INTERNAL_SELF_MANAGED`. + Specifies the forwarding rule type. * `EXTERNAL` is used for: * Classic Cloud VPN gateways * Protocol forwarding to VMs + from an external IP address * The following load balancers: HTTP(S), SSL Proxy, TCP Proxy, and Network TCP/UDP * + `INTERNAL` is used for: * Protocol forwarding to VMs from an internal IP address * Internal TCP/UDP load balancers * + `INTERNAL_MANAGED` is used for: * Internal HTTP(S) load balancers * `INTERNAL_SELF_MANAGED` is used for: * Traffic + Director * `EXTERNAL_MANAGED` is used for: * Global external HTTP(S) load balancers For more information about + forwarding rules, refer to [Forwarding rule concepts](/load-balancing/docs/forwarding-rule-concepts). Possible values: + INVALID, INTERNAL, INTERNAL_MANAGED, INTERNAL_SELF_MANAGED, EXTERNAL, EXTERNAL_MANAGED """ return pulumi.get(self, "load_balancing_scheme") @@ -1401,11 +1340,9 @@ def name(self) -> pulumi.Output[str]: @pulumi.getter def network(self) -> pulumi.Output[str]: """ - This field is not used for external load balancing. - For INTERNAL_SELF_MANAGED load balancing, this field - identifies the network that the load balanced IP should belong to - for this global forwarding rule. If this field is not specified, - the default network will be used. + This field is not used for external load balancing. For `INTERNAL` and `INTERNAL_SELF_MANAGED` load balancing, this + field identifies the network that the load balanced IP should belong to for this Forwarding Rule. If this field is not + specified, the default network will be used. """ return pulumi.get(self, "network") @@ -1470,12 +1407,10 @@ def self_link(self) -> pulumi.Output[str]: @pulumi.getter def target(self) -> pulumi.Output[str]: """ - The URL of the target resource to receive the matched traffic. - The forwarded traffic must be of a type appropriate to the target object. - For INTERNAL_SELF_MANAGED load balancing, only HTTP and HTTPS targets - are valid. - For global address with a purpose of PRIVATE_SERVICE_CONNECT and - addressType of INTERNAL, only "all-apis" and "vpc-sc" are valid. + The URL of the target resource to receive the matched traffic. For regional forwarding rules, this target must live in + the same region as the forwarding rule. For global forwarding rules, this target must be a global load balancing + resource. The forwarded traffic must be of a type appropriate to the target object. For `INTERNAL_SELF_MANAGED` load + balancing, only `targetHttpProxy` is valid, not `targetHttpsProxy`. """ return pulumi.get(self, "target") diff --git a/sdk/python/pulumi_gcp/compute/instance.py b/sdk/python/pulumi_gcp/compute/instance.py index 7656e4d5f8..3992507020 100644 --- a/sdk/python/pulumi_gcp/compute/instance.py +++ b/sdk/python/pulumi_gcp/compute/instance.py @@ -53,22 +53,20 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input['InstanceNetworkInterfaceArgs']]] network_interfaces: Networks to attach to the instance. This can be specified multiple times. Structure is documented below. :param pulumi.Input['InstanceAdvancedMachineFeaturesArgs'] advanced_machine_features: Configure Nested Virtualisation and Simultaneous Hyper Threading on this VM. Structure is documented below - :param pulumi.Input[bool] allow_stopping_for_update: If true, allows this prvider to stop the instance to update its properties. - If you try to update a property that requires stopping the instance without setting this field, the update will fail. + :param pulumi.Input[bool] allow_stopping_for_update: If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + stopping the instance without setting this field, the update will fail. :param pulumi.Input[Sequence[pulumi.Input['InstanceAttachedDiskArgs']]] attached_disks: Additional disks to attach to the instance. Can be repeated multiple times for multiple disks. Structure is documented below. :param pulumi.Input[bool] can_ip_forward: Whether to allow sending and receiving of packets with non-matching source or destination IPs. This defaults to false. :param pulumi.Input['InstanceConfidentialInstanceConfigArgs'] confidential_instance_config: Enable [Confidential Mode](https://cloud.google.com/compute/confidential-vm/docs/about-cvm) on this VM. Structure is documented below - :param pulumi.Input[bool] deletion_protection: Enable deletion protection on this instance. Defaults to false. - **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + :param pulumi.Input[bool] deletion_protection: Whether deletion protection is enabled on this instance. :param pulumi.Input[str] description: A brief description of this resource. :param pulumi.Input[str] desired_status: Desired status of the instance. Either `"RUNNING"` or `"TERMINATED"`. :param pulumi.Input[bool] enable_display: Enable [Virtual Displays](https://cloud.google.com/compute/docs/instances/enable-instance-virtual-display#verify_display_driver) on this instance. **Note**: `allow_stopping_for_update` must be set to true or your instance must have a `desired_status` of `TERMINATED` in order to update this field. - :param pulumi.Input[Sequence[pulumi.Input['InstanceGuestAcceleratorArgs']]] guest_accelerators: List of the type and count of accelerator cards attached to the instance. Structure documented below. - **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + :param pulumi.Input[Sequence[pulumi.Input['InstanceGuestAcceleratorArgs']]] guest_accelerators: List of the type and count of accelerator cards attached to the instance. :param pulumi.Input[str] hostname: A custom hostname for the instance. Must be a fully qualified DNS name and RFC-1035-valid. Valid format is a series of labels 1-63 characters long matching the regular expression `a-z`, concatenated with periods. The entire hostname must not exceed 253 characters. Changing this forces a new resource to be created. @@ -77,16 +75,7 @@ def __init__(__self__, *, within the instance. Ssh keys attached in the Cloud Console will be removed. Add them to your config in order to keep them attached to your instance. A list of default metadata values (e.g. ssh-keys) can be found [here](https://cloud.google.com/compute/docs/metadata/default-metadata-values) - :param pulumi.Input[str] metadata_startup_script: An alternative to using the - startup-script metadata key, except this one forces the instance to be recreated - (thus re-running the script) if it is changed. This replaces the startup-script - metadata key on the created instance and thus the two mechanisms are not - allowed to be used simultaneously. Users are free to use either mechanism - the - only distinction is that this separate attribute will cause a recreate on - modification. On import, `metadata_startup_script` will not be set - if you - choose to specify it you will see a diff immediately after import causing a - destroy/recreate operation. If importing an instance and specifying this value - is desired, you will need to modify your state file. + :param pulumi.Input[str] metadata_startup_script: Metadata startup scripts made available within the instance. :param pulumi.Input[str] min_cpu_platform: Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). **Note**: `allow_stopping_for_update` must be set to true or your instance must have a `desired_status` of `TERMINATED` in order to update this field. @@ -225,8 +214,8 @@ def advanced_machine_features(self, value: Optional[pulumi.Input['InstanceAdvanc @pulumi.getter(name="allowStoppingForUpdate") def allow_stopping_for_update(self) -> Optional[pulumi.Input[bool]]: """ - If true, allows this prvider to stop the instance to update its properties. - If you try to update a property that requires stopping the instance without setting this field, the update will fail. + If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + stopping the instance without setting this field, the update will fail. """ return pulumi.get(self, "allow_stopping_for_update") @@ -276,8 +265,7 @@ def confidential_instance_config(self, value: Optional[pulumi.Input['InstanceCon @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> Optional[pulumi.Input[bool]]: """ - Enable deletion protection on this instance. Defaults to false. - **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + Whether deletion protection is enabled on this instance. """ return pulumi.get(self, "deletion_protection") @@ -327,8 +315,7 @@ def enable_display(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="guestAccelerators") def guest_accelerators(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InstanceGuestAcceleratorArgs']]]]: """ - List of the type and count of accelerator cards attached to the instance. Structure documented below. - **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + List of the type and count of accelerator cards attached to the instance. """ return pulumi.get(self, "guest_accelerators") @@ -381,16 +368,7 @@ def metadata(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]] @pulumi.getter(name="metadataStartupScript") def metadata_startup_script(self) -> Optional[pulumi.Input[str]]: """ - An alternative to using the - startup-script metadata key, except this one forces the instance to be recreated - (thus re-running the script) if it is changed. This replaces the startup-script - metadata key on the created instance and thus the two mechanisms are not - allowed to be used simultaneously. Users are free to use either mechanism - the - only distinction is that this separate attribute will cause a recreate on - modification. On import, `metadata_startup_script` will not be set - if you - choose to specify it you will see a diff immediately after import causing a - destroy/recreate operation. If importing an instance and specifying this value - is desired, you will need to modify your state file. + Metadata startup scripts made available within the instance. """ return pulumi.get(self, "metadata_startup_script") @@ -600,8 +578,8 @@ def __init__(__self__, *, """ Input properties used for looking up and filtering Instance resources. :param pulumi.Input['InstanceAdvancedMachineFeaturesArgs'] advanced_machine_features: Configure Nested Virtualisation and Simultaneous Hyper Threading on this VM. Structure is documented below - :param pulumi.Input[bool] allow_stopping_for_update: If true, allows this prvider to stop the instance to update its properties. - If you try to update a property that requires stopping the instance without setting this field, the update will fail. + :param pulumi.Input[bool] allow_stopping_for_update: If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + stopping the instance without setting this field, the update will fail. :param pulumi.Input[Sequence[pulumi.Input['InstanceAttachedDiskArgs']]] attached_disks: Additional disks to attach to the instance. Can be repeated multiple times for multiple disks. Structure is documented below. :param pulumi.Input['InstanceBootDiskArgs'] boot_disk: The boot disk for the instance. Structure is documented below. @@ -611,15 +589,13 @@ def __init__(__self__, *, :param pulumi.Input['InstanceConfidentialInstanceConfigArgs'] confidential_instance_config: Enable [Confidential Mode](https://cloud.google.com/compute/confidential-vm/docs/about-cvm) on this VM. Structure is documented below :param pulumi.Input[str] cpu_platform: The CPU platform used by this instance. :param pulumi.Input[str] current_status: Current status of the instance. - :param pulumi.Input[bool] deletion_protection: Enable deletion protection on this instance. Defaults to false. - **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + :param pulumi.Input[bool] deletion_protection: Whether deletion protection is enabled on this instance. :param pulumi.Input[str] description: A brief description of this resource. :param pulumi.Input[str] desired_status: Desired status of the instance. Either `"RUNNING"` or `"TERMINATED"`. :param pulumi.Input[bool] enable_display: Enable [Virtual Displays](https://cloud.google.com/compute/docs/instances/enable-instance-virtual-display#verify_display_driver) on this instance. **Note**: `allow_stopping_for_update` must be set to true or your instance must have a `desired_status` of `TERMINATED` in order to update this field. - :param pulumi.Input[Sequence[pulumi.Input['InstanceGuestAcceleratorArgs']]] guest_accelerators: List of the type and count of accelerator cards attached to the instance. Structure documented below. - **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + :param pulumi.Input[Sequence[pulumi.Input['InstanceGuestAcceleratorArgs']]] guest_accelerators: List of the type and count of accelerator cards attached to the instance. :param pulumi.Input[str] hostname: A custom hostname for the instance. Must be a fully qualified DNS name and RFC-1035-valid. Valid format is a series of labels 1-63 characters long matching the regular expression `a-z`, concatenated with periods. The entire hostname must not exceed 253 characters. Changing this forces a new resource to be created. @@ -632,16 +608,7 @@ def __init__(__self__, *, Add them to your config in order to keep them attached to your instance. A list of default metadata values (e.g. ssh-keys) can be found [here](https://cloud.google.com/compute/docs/metadata/default-metadata-values) :param pulumi.Input[str] metadata_fingerprint: The unique fingerprint of the metadata. - :param pulumi.Input[str] metadata_startup_script: An alternative to using the - startup-script metadata key, except this one forces the instance to be recreated - (thus re-running the script) if it is changed. This replaces the startup-script - metadata key on the created instance and thus the two mechanisms are not - allowed to be used simultaneously. Users are free to use either mechanism - the - only distinction is that this separate attribute will cause a recreate on - modification. On import, `metadata_startup_script` will not be set - if you - choose to specify it you will see a diff immediately after import causing a - destroy/recreate operation. If importing an instance and specifying this value - is desired, you will need to modify your state file. + :param pulumi.Input[str] metadata_startup_script: Metadata startup scripts made available within the instance. :param pulumi.Input[str] min_cpu_platform: Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). **Note**: `allow_stopping_for_update` must be set to true or your instance must have a `desired_status` of `TERMINATED` in order to update this field. @@ -763,8 +730,8 @@ def advanced_machine_features(self, value: Optional[pulumi.Input['InstanceAdvanc @pulumi.getter(name="allowStoppingForUpdate") def allow_stopping_for_update(self) -> Optional[pulumi.Input[bool]]: """ - If true, allows this prvider to stop the instance to update its properties. - If you try to update a property that requires stopping the instance without setting this field, the update will fail. + If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + stopping the instance without setting this field, the update will fail. """ return pulumi.get(self, "allow_stopping_for_update") @@ -851,8 +818,7 @@ def current_status(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> Optional[pulumi.Input[bool]]: """ - Enable deletion protection on this instance. Defaults to false. - **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + Whether deletion protection is enabled on this instance. """ return pulumi.get(self, "deletion_protection") @@ -902,8 +868,7 @@ def enable_display(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="guestAccelerators") def guest_accelerators(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InstanceGuestAcceleratorArgs']]]]: """ - List of the type and count of accelerator cards attached to the instance. Structure documented below. - **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + List of the type and count of accelerator cards attached to the instance. """ return pulumi.get(self, "guest_accelerators") @@ -1004,16 +969,7 @@ def metadata_fingerprint(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="metadataStartupScript") def metadata_startup_script(self) -> Optional[pulumi.Input[str]]: """ - An alternative to using the - startup-script metadata key, except this one forces the instance to be recreated - (thus re-running the script) if it is changed. This replaces the startup-script - metadata key on the created instance and thus the two mechanisms are not - allowed to be used simultaneously. Users are free to use either mechanism - the - only distinction is that this separate attribute will cause a recreate on - modification. On import, `metadata_startup_script` will not be set - if you - choose to specify it you will see a diff immediately after import causing a - destroy/recreate operation. If importing an instance and specifying this value - is desired, you will need to modify your state file. + Metadata startup scripts made available within the instance. """ return pulumi.get(self, "metadata_startup_script") @@ -1321,8 +1277,8 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[pulumi.InputType['InstanceAdvancedMachineFeaturesArgs']] advanced_machine_features: Configure Nested Virtualisation and Simultaneous Hyper Threading on this VM. Structure is documented below - :param pulumi.Input[bool] allow_stopping_for_update: If true, allows this prvider to stop the instance to update its properties. - If you try to update a property that requires stopping the instance without setting this field, the update will fail. + :param pulumi.Input[bool] allow_stopping_for_update: If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + stopping the instance without setting this field, the update will fail. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceAttachedDiskArgs']]]] attached_disks: Additional disks to attach to the instance. Can be repeated multiple times for multiple disks. Structure is documented below. :param pulumi.Input[pulumi.InputType['InstanceBootDiskArgs']] boot_disk: The boot disk for the instance. Structure is documented below. @@ -1330,15 +1286,13 @@ def __init__(__self__, packets with non-matching source or destination IPs. This defaults to false. :param pulumi.Input[pulumi.InputType['InstanceConfidentialInstanceConfigArgs']] confidential_instance_config: Enable [Confidential Mode](https://cloud.google.com/compute/confidential-vm/docs/about-cvm) on this VM. Structure is documented below - :param pulumi.Input[bool] deletion_protection: Enable deletion protection on this instance. Defaults to false. - **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + :param pulumi.Input[bool] deletion_protection: Whether deletion protection is enabled on this instance. :param pulumi.Input[str] description: A brief description of this resource. :param pulumi.Input[str] desired_status: Desired status of the instance. Either `"RUNNING"` or `"TERMINATED"`. :param pulumi.Input[bool] enable_display: Enable [Virtual Displays](https://cloud.google.com/compute/docs/instances/enable-instance-virtual-display#verify_display_driver) on this instance. **Note**: `allow_stopping_for_update` must be set to true or your instance must have a `desired_status` of `TERMINATED` in order to update this field. - :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGuestAcceleratorArgs']]]] guest_accelerators: List of the type and count of accelerator cards attached to the instance. Structure documented below. - **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGuestAcceleratorArgs']]]] guest_accelerators: List of the type and count of accelerator cards attached to the instance. :param pulumi.Input[str] hostname: A custom hostname for the instance. Must be a fully qualified DNS name and RFC-1035-valid. Valid format is a series of labels 1-63 characters long matching the regular expression `a-z`, concatenated with periods. The entire hostname must not exceed 253 characters. Changing this forces a new resource to be created. @@ -1348,16 +1302,7 @@ def __init__(__self__, within the instance. Ssh keys attached in the Cloud Console will be removed. Add them to your config in order to keep them attached to your instance. A list of default metadata values (e.g. ssh-keys) can be found [here](https://cloud.google.com/compute/docs/metadata/default-metadata-values) - :param pulumi.Input[str] metadata_startup_script: An alternative to using the - startup-script metadata key, except this one forces the instance to be recreated - (thus re-running the script) if it is changed. This replaces the startup-script - metadata key on the created instance and thus the two mechanisms are not - allowed to be used simultaneously. Users are free to use either mechanism - the - only distinction is that this separate attribute will cause a recreate on - modification. On import, `metadata_startup_script` will not be set - if you - choose to specify it you will see a diff immediately after import causing a - destroy/recreate operation. If importing an instance and specifying this value - is desired, you will need to modify your state file. + :param pulumi.Input[str] metadata_startup_script: Metadata startup scripts made available within the instance. :param pulumi.Input[str] min_cpu_platform: Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). **Note**: `allow_stopping_for_update` must be set to true or your instance must have a `desired_status` of `TERMINATED` in order to update this field. @@ -1608,8 +1553,8 @@ def get(resource_name: str, :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[pulumi.InputType['InstanceAdvancedMachineFeaturesArgs']] advanced_machine_features: Configure Nested Virtualisation and Simultaneous Hyper Threading on this VM. Structure is documented below - :param pulumi.Input[bool] allow_stopping_for_update: If true, allows this prvider to stop the instance to update its properties. - If you try to update a property that requires stopping the instance without setting this field, the update will fail. + :param pulumi.Input[bool] allow_stopping_for_update: If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + stopping the instance without setting this field, the update will fail. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceAttachedDiskArgs']]]] attached_disks: Additional disks to attach to the instance. Can be repeated multiple times for multiple disks. Structure is documented below. :param pulumi.Input[pulumi.InputType['InstanceBootDiskArgs']] boot_disk: The boot disk for the instance. Structure is documented below. @@ -1619,15 +1564,13 @@ def get(resource_name: str, :param pulumi.Input[pulumi.InputType['InstanceConfidentialInstanceConfigArgs']] confidential_instance_config: Enable [Confidential Mode](https://cloud.google.com/compute/confidential-vm/docs/about-cvm) on this VM. Structure is documented below :param pulumi.Input[str] cpu_platform: The CPU platform used by this instance. :param pulumi.Input[str] current_status: Current status of the instance. - :param pulumi.Input[bool] deletion_protection: Enable deletion protection on this instance. Defaults to false. - **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + :param pulumi.Input[bool] deletion_protection: Whether deletion protection is enabled on this instance. :param pulumi.Input[str] description: A brief description of this resource. :param pulumi.Input[str] desired_status: Desired status of the instance. Either `"RUNNING"` or `"TERMINATED"`. :param pulumi.Input[bool] enable_display: Enable [Virtual Displays](https://cloud.google.com/compute/docs/instances/enable-instance-virtual-display#verify_display_driver) on this instance. **Note**: `allow_stopping_for_update` must be set to true or your instance must have a `desired_status` of `TERMINATED` in order to update this field. - :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGuestAcceleratorArgs']]]] guest_accelerators: List of the type and count of accelerator cards attached to the instance. Structure documented below. - **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGuestAcceleratorArgs']]]] guest_accelerators: List of the type and count of accelerator cards attached to the instance. :param pulumi.Input[str] hostname: A custom hostname for the instance. Must be a fully qualified DNS name and RFC-1035-valid. Valid format is a series of labels 1-63 characters long matching the regular expression `a-z`, concatenated with periods. The entire hostname must not exceed 253 characters. Changing this forces a new resource to be created. @@ -1640,16 +1583,7 @@ def get(resource_name: str, Add them to your config in order to keep them attached to your instance. A list of default metadata values (e.g. ssh-keys) can be found [here](https://cloud.google.com/compute/docs/metadata/default-metadata-values) :param pulumi.Input[str] metadata_fingerprint: The unique fingerprint of the metadata. - :param pulumi.Input[str] metadata_startup_script: An alternative to using the - startup-script metadata key, except this one forces the instance to be recreated - (thus re-running the script) if it is changed. This replaces the startup-script - metadata key on the created instance and thus the two mechanisms are not - allowed to be used simultaneously. Users are free to use either mechanism - the - only distinction is that this separate attribute will cause a recreate on - modification. On import, `metadata_startup_script` will not be set - if you - choose to specify it you will see a diff immediately after import causing a - destroy/recreate operation. If importing an instance and specifying this value - is desired, you will need to modify your state file. + :param pulumi.Input[str] metadata_startup_script: Metadata startup scripts made available within the instance. :param pulumi.Input[str] min_cpu_platform: Specifies a minimum CPU platform for the VM instance. Applicable values are the friendly names of CPU platforms, such as `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). **Note**: `allow_stopping_for_update` must be set to true or your instance must have a `desired_status` of `TERMINATED` in order to update this field. @@ -1736,8 +1670,8 @@ def advanced_machine_features(self) -> pulumi.Output[Optional['outputs.InstanceA @pulumi.getter(name="allowStoppingForUpdate") def allow_stopping_for_update(self) -> pulumi.Output[Optional[bool]]: """ - If true, allows this prvider to stop the instance to update its properties. - If you try to update a property that requires stopping the instance without setting this field, the update will fail. + If true, allows Terraform to stop the instance to update its properties. If you try to update a property that requires + stopping the instance without setting this field, the update will fail. """ return pulumi.get(self, "allow_stopping_for_update") @@ -1796,8 +1730,7 @@ def current_status(self) -> pulumi.Output[str]: @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> pulumi.Output[Optional[bool]]: """ - Enable deletion protection on this instance. Defaults to false. - **Note:** you must disable deletion protection before removing the resource (e.g., via `pulumi destroy`), or the instance cannot be deleted and the provider run will not complete successfully. + Whether deletion protection is enabled on this instance. """ return pulumi.get(self, "deletion_protection") @@ -1831,8 +1764,7 @@ def enable_display(self) -> pulumi.Output[Optional[bool]]: @pulumi.getter(name="guestAccelerators") def guest_accelerators(self) -> pulumi.Output[Sequence['outputs.InstanceGuestAccelerator']]: """ - List of the type and count of accelerator cards attached to the instance. Structure documented below. - **Note:** GPU accelerators can only be used with `on_host_maintenance` option set to TERMINATE. + List of the type and count of accelerator cards attached to the instance. """ return pulumi.get(self, "guest_accelerators") @@ -1901,16 +1833,7 @@ def metadata_fingerprint(self) -> pulumi.Output[str]: @pulumi.getter(name="metadataStartupScript") def metadata_startup_script(self) -> pulumi.Output[Optional[str]]: """ - An alternative to using the - startup-script metadata key, except this one forces the instance to be recreated - (thus re-running the script) if it is changed. This replaces the startup-script - metadata key on the created instance and thus the two mechanisms are not - allowed to be used simultaneously. Users are free to use either mechanism - the - only distinction is that this separate attribute will cause a recreate on - modification. On import, `metadata_startup_script` will not be set - if you - choose to specify it you will see a diff immediately after import causing a - destroy/recreate operation. If importing an instance and specifying this value - is desired, you will need to modify your state file. + Metadata startup scripts made available within the instance. """ return pulumi.get(self, "metadata_startup_script") diff --git a/sdk/python/pulumi_gcp/compute/instance_from_machine_image.py b/sdk/python/pulumi_gcp/compute/instance_from_machine_image.py index c143c43cb0..5f9e3f0d90 100644 --- a/sdk/python/pulumi_gcp/compute/instance_from_machine_image.py +++ b/sdk/python/pulumi_gcp/compute/instance_from_machine_image.py @@ -1122,15 +1122,6 @@ def __init__(__self__, zone: Optional[pulumi.Input[str]] = None, __props__=None): """ - Manages a VM instance resource within GCE. For more information see - [the official documentation](https://cloud.google.com/compute/docs/instances) - and - [API](https://cloud.google.com/compute/docs/reference/latest/instances). - - This resource is specifically to create a compute instance from a given - `source_machine_image`. To create an instance without a machine image, use the - `compute.Instance` resource. - ## Example Usage ```python @@ -1193,15 +1184,6 @@ def __init__(__self__, args: InstanceFromMachineImageArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Manages a VM instance resource within GCE. For more information see - [the official documentation](https://cloud.google.com/compute/docs/instances) - and - [API](https://cloud.google.com/compute/docs/reference/latest/instances). - - This resource is specifically to create a compute instance from a given - `source_machine_image`. To create an instance without a machine image, use the - `compute.Instance` resource. - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/compute/instance_from_template.py b/sdk/python/pulumi_gcp/compute/instance_from_template.py index e13f649069..10f0f48f44 100644 --- a/sdk/python/pulumi_gcp/compute/instance_from_template.py +++ b/sdk/python/pulumi_gcp/compute/instance_from_template.py @@ -81,7 +81,8 @@ def __init__(__self__, *, :param pulumi.Input['InstanceFromTemplateReservationAffinityArgs'] reservation_affinity: Specifies the reservations that this instance can consume from. :param pulumi.Input[str] resource_policies: A list of self_links of resource policies to attach to the instance. Currently a max of 1 resource policy is supported. :param pulumi.Input['InstanceFromTemplateSchedulingArgs'] scheduling: The scheduling strategy being used by the instance. - :param pulumi.Input[Sequence[pulumi.Input['InstanceFromTemplateScratchDiskArgs']]] scratch_disks: The scratch disks attached to the instance. + :param pulumi.Input[Sequence[pulumi.Input['InstanceFromTemplateScratchDiskArgs']]] scratch_disks: * `network_interface.alias_ip_range` + * `network_interface.access_config` :param pulumi.Input['InstanceFromTemplateServiceAccountArgs'] service_account: The service account to attach to the instance. :param pulumi.Input['InstanceFromTemplateShieldedInstanceConfigArgs'] shielded_instance_config: The shielded vm config being used by the instance. :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: The list of tags attached to the instance. @@ -460,7 +461,8 @@ def scheduling(self, value: Optional[pulumi.Input['InstanceFromTemplateSchedulin @pulumi.getter(name="scratchDisks") def scratch_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InstanceFromTemplateScratchDiskArgs']]]]: """ - The scratch disks attached to the instance. + * `network_interface.alias_ip_range` + * `network_interface.access_config` """ return pulumi.get(self, "scratch_disks") @@ -596,7 +598,8 @@ def __init__(__self__, *, :param pulumi.Input['InstanceFromTemplateReservationAffinityArgs'] reservation_affinity: Specifies the reservations that this instance can consume from. :param pulumi.Input[str] resource_policies: A list of self_links of resource policies to attach to the instance. Currently a max of 1 resource policy is supported. :param pulumi.Input['InstanceFromTemplateSchedulingArgs'] scheduling: The scheduling strategy being used by the instance. - :param pulumi.Input[Sequence[pulumi.Input['InstanceFromTemplateScratchDiskArgs']]] scratch_disks: The scratch disks attached to the instance. + :param pulumi.Input[Sequence[pulumi.Input['InstanceFromTemplateScratchDiskArgs']]] scratch_disks: * `network_interface.alias_ip_range` + * `network_interface.access_config` :param pulumi.Input[str] self_link: The URI of the created resource. :param pulumi.Input['InstanceFromTemplateServiceAccountArgs'] service_account: The service account to attach to the instance. :param pulumi.Input['InstanceFromTemplateShieldedInstanceConfigArgs'] shielded_instance_config: The shielded vm config being used by the instance. @@ -1041,7 +1044,8 @@ def scheduling(self, value: Optional[pulumi.Input['InstanceFromTemplateSchedulin @pulumi.getter(name="scratchDisks") def scratch_disks(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['InstanceFromTemplateScratchDiskArgs']]]]: """ - The scratch disks attached to the instance. + * `network_interface.alias_ip_range` + * `network_interface.access_config` """ return pulumi.get(self, "scratch_disks") @@ -1249,7 +1253,8 @@ def __init__(__self__, :param pulumi.Input[pulumi.InputType['InstanceFromTemplateReservationAffinityArgs']] reservation_affinity: Specifies the reservations that this instance can consume from. :param pulumi.Input[str] resource_policies: A list of self_links of resource policies to attach to the instance. Currently a max of 1 resource policy is supported. :param pulumi.Input[pulumi.InputType['InstanceFromTemplateSchedulingArgs']] scheduling: The scheduling strategy being used by the instance. - :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceFromTemplateScratchDiskArgs']]]] scratch_disks: The scratch disks attached to the instance. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceFromTemplateScratchDiskArgs']]]] scratch_disks: * `network_interface.alias_ip_range` + * `network_interface.access_config` :param pulumi.Input[pulumi.InputType['InstanceFromTemplateServiceAccountArgs']] service_account: The service account to attach to the instance. :param pulumi.Input[pulumi.InputType['InstanceFromTemplateShieldedInstanceConfigArgs']] shielded_instance_config: The shielded vm config being used by the instance. :param pulumi.Input[str] source_instance_template: Name or self link of an instance @@ -1491,7 +1496,8 @@ def get(resource_name: str, :param pulumi.Input[pulumi.InputType['InstanceFromTemplateReservationAffinityArgs']] reservation_affinity: Specifies the reservations that this instance can consume from. :param pulumi.Input[str] resource_policies: A list of self_links of resource policies to attach to the instance. Currently a max of 1 resource policy is supported. :param pulumi.Input[pulumi.InputType['InstanceFromTemplateSchedulingArgs']] scheduling: The scheduling strategy being used by the instance. - :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceFromTemplateScratchDiskArgs']]]] scratch_disks: The scratch disks attached to the instance. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceFromTemplateScratchDiskArgs']]]] scratch_disks: * `network_interface.alias_ip_range` + * `network_interface.access_config` :param pulumi.Input[str] self_link: The URI of the created resource. :param pulumi.Input[pulumi.InputType['InstanceFromTemplateServiceAccountArgs']] service_account: The service account to attach to the instance. :param pulumi.Input[pulumi.InputType['InstanceFromTemplateShieldedInstanceConfigArgs']] shielded_instance_config: The shielded vm config being used by the instance. @@ -1788,7 +1794,8 @@ def scheduling(self) -> pulumi.Output['outputs.InstanceFromTemplateScheduling']: @pulumi.getter(name="scratchDisks") def scratch_disks(self) -> pulumi.Output[Sequence['outputs.InstanceFromTemplateScratchDisk']]: """ - The scratch disks attached to the instance. + * `network_interface.alias_ip_range` + * `network_interface.access_config` """ return pulumi.get(self, "scratch_disks") diff --git a/sdk/python/pulumi_gcp/compute/instance_group.py b/sdk/python/pulumi_gcp/compute/instance_group.py index 9b6d9ec4e0..e038d36d4d 100644 --- a/sdk/python/pulumi_gcp/compute/instance_group.py +++ b/sdk/python/pulumi_gcp/compute/instance_group.py @@ -339,47 +339,6 @@ def __init__(__self__, zone: Optional[pulumi.Input[str]] = None, __props__=None): """ - Creates a group of dissimilar Compute Engine virtual machine instances. - For more information, see [the official documentation](https://cloud.google.com/compute/docs/instance-groups/#unmanaged_instance_groups) - and [API](https://cloud.google.com/compute/docs/reference/latest/instanceGroups) - - ## Example Usage - ### Empty Instance Group - - ```python - import pulumi - import pulumi_gcp as gcp - - test = gcp.compute.InstanceGroup("test", - description="Test instance group", - zone="us-central1-a", - network=google_compute_network["default"]["id"]) - ``` - ### Example Usage - With instances and named ports - - ```python - import pulumi - import pulumi_gcp as gcp - - webservers = gcp.compute.InstanceGroup("webservers", - description="Test instance group", - instances=[ - google_compute_instance["test"]["id"], - google_compute_instance["test2"]["id"], - ], - named_ports=[ - gcp.compute.InstanceGroupNamedPortArgs( - name="http", - port=8080, - ), - gcp.compute.InstanceGroupNamedPortArgs( - name="https", - port=8443, - ), - ], - zone="us-central1-a") - ``` - ## Import Instance group can be imported using the `zone` and `name` with an optional `project`, e.g. @@ -423,47 +382,6 @@ def __init__(__self__, args: Optional[InstanceGroupArgs] = None, opts: Optional[pulumi.ResourceOptions] = None): """ - Creates a group of dissimilar Compute Engine virtual machine instances. - For more information, see [the official documentation](https://cloud.google.com/compute/docs/instance-groups/#unmanaged_instance_groups) - and [API](https://cloud.google.com/compute/docs/reference/latest/instanceGroups) - - ## Example Usage - ### Empty Instance Group - - ```python - import pulumi - import pulumi_gcp as gcp - - test = gcp.compute.InstanceGroup("test", - description="Test instance group", - zone="us-central1-a", - network=google_compute_network["default"]["id"]) - ``` - ### Example Usage - With instances and named ports - - ```python - import pulumi - import pulumi_gcp as gcp - - webservers = gcp.compute.InstanceGroup("webservers", - description="Test instance group", - instances=[ - google_compute_instance["test"]["id"], - google_compute_instance["test2"]["id"], - ], - named_ports=[ - gcp.compute.InstanceGroupNamedPortArgs( - name="http", - port=8080, - ), - gcp.compute.InstanceGroupNamedPortArgs( - name="https", - port=8443, - ), - ], - zone="us-central1-a") - ``` - ## Import Instance group can be imported using the `zone` and `name` with an optional `project`, e.g. diff --git a/sdk/python/pulumi_gcp/compute/instance_group_manager.py b/sdk/python/pulumi_gcp/compute/instance_group_manager.py index 5989709f31..bad2fecc7f 100644 --- a/sdk/python/pulumi_gcp/compute/instance_group_manager.py +++ b/sdk/python/pulumi_gcp/compute/instance_group_manager.py @@ -77,9 +77,8 @@ def __init__(__self__, *, instance group. This value should always be explicitly set unless this resource is attached to an autoscaler, in which case it should never be set. Defaults to `0`. :param pulumi.Input['InstanceGroupManagerUpdatePolicyArgs'] update_policy: The update policy for this managed instance group. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/updating-managed-instance-groups) and [API](https://cloud.google.com/compute/docs/reference/rest/v1/instanceGroupManagers/patch) - :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, this provider will - continue trying until it times out. + :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. :param pulumi.Input[str] wait_for_instances_status: When used with `wait_for_instances` it specifies the status to wait for. When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is set, it will wait for the version target to be reached and any per instance configs to be effective as well as all @@ -332,9 +331,8 @@ def update_policy(self, value: Optional[pulumi.Input['InstanceGroupManagerUpdate @pulumi.getter(name="waitForInstances") def wait_for_instances(self) -> Optional[pulumi.Input[bool]]: """ - Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, this provider will - continue trying until it times out. + Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. """ return pulumi.get(self, "wait_for_instances") @@ -444,9 +442,8 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input['InstanceGroupManagerVersionArgs']]] versions: Application versions managed by this instance group. Each version deals with a specific instance template, allowing canary release scenarios. Structure is documented below. - :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, this provider will - continue trying until it times out. + :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. :param pulumi.Input[str] wait_for_instances_status: When used with `wait_for_instances` it specifies the status to wait for. When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is set, it will wait for the version target to be reached and any per instance configs to be effective as well as all @@ -768,9 +765,8 @@ def versions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['InstanceG @pulumi.getter(name="waitForInstances") def wait_for_instances(self) -> Optional[pulumi.Input[bool]]: """ - Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, this provider will - continue trying until it times out. + Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. """ return pulumi.get(self, "wait_for_instances") @@ -968,9 +964,8 @@ def __init__(__self__, :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerVersionArgs']]]] versions: Application versions managed by this instance group. Each version deals with a specific instance template, allowing canary release scenarios. Structure is documented below. - :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, this provider will - continue trying until it times out. + :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. :param pulumi.Input[str] wait_for_instances_status: When used with `wait_for_instances` it specifies the status to wait for. When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is set, it will wait for the version target to be reached and any per instance configs to be effective as well as all @@ -1232,9 +1227,8 @@ def get(resource_name: str, :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceGroupManagerVersionArgs']]]] versions: Application versions managed by this instance group. Each version deals with a specific instance template, allowing canary release scenarios. Structure is documented below. - :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, this provider will - continue trying until it times out. + :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. :param pulumi.Input[str] wait_for_instances_status: When used with `wait_for_instances` it specifies the status to wait for. When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is set, it will wait for the version target to be reached and any per instance configs to be effective as well as all @@ -1458,9 +1452,8 @@ def versions(self) -> pulumi.Output[Sequence['outputs.InstanceGroupManagerVersio @pulumi.getter(name="waitForInstances") def wait_for_instances(self) -> pulumi.Output[Optional[bool]]: """ - Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, this provider will - continue trying until it times out. + Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. """ return pulumi.get(self, "wait_for_instances") diff --git a/sdk/python/pulumi_gcp/compute/instance_template.py b/sdk/python/pulumi_gcp/compute/instance_template.py index 5ed9ed297e..7010c3d7a1 100644 --- a/sdk/python/pulumi_gcp/compute/instance_template.py +++ b/sdk/python/pulumi_gcp/compute/instance_template.py @@ -66,8 +66,7 @@ def __init__(__self__, *, thus the two mechanisms are not allowed to be used simultaneously. :param pulumi.Input[str] min_cpu_platform: Specifies a minimum CPU platform. Applicable values are the friendly names of CPU platforms, such as `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). - :param pulumi.Input[str] name: The name of the instance template. If you leave - this blank, the provider will auto-generate a unique name. + :param pulumi.Input[str] name: The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. :param pulumi.Input[str] name_prefix: Creates a unique name beginning with the specified prefix. Conflicts with `name`. :param pulumi.Input[Sequence[pulumi.Input['InstanceTemplateNetworkInterfaceArgs']]] network_interfaces: Networks to attach to instances created from @@ -314,8 +313,7 @@ def min_cpu_platform(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def name(self) -> Optional[pulumi.Input[str]]: """ - The name of the instance template. If you leave - this blank, the provider will auto-generate a unique name. + The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. """ return pulumi.get(self, "name") @@ -518,8 +516,7 @@ def __init__(__self__, *, thus the two mechanisms are not allowed to be used simultaneously. :param pulumi.Input[str] min_cpu_platform: Specifies a minimum CPU platform. Applicable values are the friendly names of CPU platforms, such as `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). - :param pulumi.Input[str] name: The name of the instance template. If you leave - this blank, the provider will auto-generate a unique name. + :param pulumi.Input[str] name: The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. :param pulumi.Input[str] name_prefix: Creates a unique name beginning with the specified prefix. Conflicts with `name`. :param pulumi.Input[Sequence[pulumi.Input['InstanceTemplateNetworkInterfaceArgs']]] network_interfaces: Networks to attach to instances created from @@ -788,8 +785,7 @@ def min_cpu_platform(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def name(self) -> Optional[pulumi.Input[str]]: """ - The name of the instance template. If you leave - this blank, the provider will auto-generate a unique name. + The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. """ return pulumi.get(self, "name") @@ -990,130 +986,6 @@ def __init__(__self__, tags: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, __props__=None): """ - Manages a VM instance template resource within GCE. For more information see - [the official documentation](https://cloud.google.com/compute/docs/instance-templates) - and - [API](https://cloud.google.com/compute/docs/reference/latest/instanceTemplates). - - ## Example Usage - ### Automatic Envoy Deployment - - ```python - import pulumi - import pulumi_gcp as gcp - - default = gcp.compute.get_default_service_account() - my_image = gcp.compute.get_image(family="debian-11", - project="debian-cloud") - foobar = gcp.compute.InstanceTemplate("foobar", - machine_type="e2-medium", - can_ip_forward=False, - tags=[ - "foo", - "bar", - ], - disks=[gcp.compute.InstanceTemplateDiskArgs( - source_image=my_image.self_link, - auto_delete=True, - boot=True, - )], - network_interfaces=[gcp.compute.InstanceTemplateNetworkInterfaceArgs( - network="default", - )], - scheduling=gcp.compute.InstanceTemplateSchedulingArgs( - preemptible=False, - automatic_restart=True, - ), - metadata={ - "gce-software-declaration": \"\"\"{ - "softwareRecipes": [{ - "name": "install-gce-service-proxy-agent", - "desired_state": "INSTALLED", - "installSteps": [{ - "scriptRun": { - "script": "#! /bin/bash\\nZONE=$(curl --silent http://metadata.google.internal/computeMetadata/v1/instance/zone -H Metadata-Flavor:Google | cut -d/ -f4 )\\nexport SERVICE_PROXY_AGENT_DIRECTORY=$(mktemp -d)\\nsudo gsutil cp gs://gce-service-proxy-"$ZONE"/service-proxy-agent/releases/service-proxy-agent-0.2.tgz "$SERVICE_PROXY_AGENT_DIRECTORY" || sudo gsutil cp gs://gce-service-proxy/service-proxy-agent/releases/service-proxy-agent-0.2.tgz "$SERVICE_PROXY_AGENT_DIRECTORY"\\nsudo tar -xzf "$SERVICE_PROXY_AGENT_DIRECTORY"/service-proxy-agent-0.2.tgz -C "$SERVICE_PROXY_AGENT_DIRECTORY"\\n"$SERVICE_PROXY_AGENT_DIRECTORY"/service-proxy-agent/service-proxy-agent-bootstrap.sh" - } - }] - }] - } - \"\"\", - "gce-service-proxy": \"\"\"{ - "api-version": "0.2", - "proxy-spec": { - "proxy-port": 15001, - "network": "my-network", - "tracing": "ON", - "access-log": "/var/log/envoy/access.log" - } - "service": { - "serving-ports": [80, 81] - }, - "labels": { - "app_name": "bookserver_app", - "app_version": "STABLE" - } - } - \"\"\", - "enable-guest-attributes": "true", - "enable-osconfig": "true", - }, - service_account=gcp.compute.InstanceTemplateServiceAccountArgs( - email=default.email, - scopes=["cloud-platform"], - ), - labels={ - "gce-service-proxy": "on", - }) - ``` - ## Deploying the Latest Image - - A common way to use instance templates and managed instance groups is to deploy the - latest image in a family, usually the latest build of your application. There are two - ways to do this in the provider, and they have their pros and cons. The difference ends - up being in how "latest" is interpreted. You can either deploy the latest image available - when the provider runs, or you can have each instance check what the latest image is when - it's being created, either as part of a scaling event or being rebuilt by the instance - group manager. - - If you're not sure, we recommend deploying the latest image available when the provider runs, - because this means all the instances in your group will be based on the same image, always, - and means that no upgrades or changes to your instances happen outside of a `pulumi up`. - You can achieve this by using the `compute.Image` - data source, which will retrieve the latest image on every `pulumi apply`, and will update - the template to use that specific image: - - ```python - import pulumi - import pulumi_gcp as gcp - - my_image = gcp.compute.get_image(family="debian-11", - project="debian-cloud") - instance_template = gcp.compute.InstanceTemplate("instanceTemplate", - name_prefix="instance-template-", - machine_type="e2-medium", - region="us-central1", - disks=[gcp.compute.InstanceTemplateDiskArgs( - source_image=my_image.self_link, - )]) - ``` - - To have instances update to the latest on every scaling event or instance re-creation, - use the family as the image for the disk, and it will use GCP's default behavior, setting - the image for the template to the family: - - ```python - import pulumi - import pulumi_gcp as gcp - - instance_template = gcp.compute.InstanceTemplate("instanceTemplate", - disks=[gcp.compute.InstanceTemplateDiskArgs( - source_image="debian-cloud/debian-11", - )], - machine_type="e2-medium", - name_prefix="instance-template-", - region="us-central1") - ``` - ## Import Instance templates can be imported using any of these accepted formats @@ -1158,8 +1030,7 @@ def __init__(__self__, thus the two mechanisms are not allowed to be used simultaneously. :param pulumi.Input[str] min_cpu_platform: Specifies a minimum CPU platform. Applicable values are the friendly names of CPU platforms, such as `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). - :param pulumi.Input[str] name: The name of the instance template. If you leave - this blank, the provider will auto-generate a unique name. + :param pulumi.Input[str] name: The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. :param pulumi.Input[str] name_prefix: Creates a unique name beginning with the specified prefix. Conflicts with `name`. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceTemplateNetworkInterfaceArgs']]]] network_interfaces: Networks to attach to instances created from @@ -1195,130 +1066,6 @@ def __init__(__self__, args: InstanceTemplateArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Manages a VM instance template resource within GCE. For more information see - [the official documentation](https://cloud.google.com/compute/docs/instance-templates) - and - [API](https://cloud.google.com/compute/docs/reference/latest/instanceTemplates). - - ## Example Usage - ### Automatic Envoy Deployment - - ```python - import pulumi - import pulumi_gcp as gcp - - default = gcp.compute.get_default_service_account() - my_image = gcp.compute.get_image(family="debian-11", - project="debian-cloud") - foobar = gcp.compute.InstanceTemplate("foobar", - machine_type="e2-medium", - can_ip_forward=False, - tags=[ - "foo", - "bar", - ], - disks=[gcp.compute.InstanceTemplateDiskArgs( - source_image=my_image.self_link, - auto_delete=True, - boot=True, - )], - network_interfaces=[gcp.compute.InstanceTemplateNetworkInterfaceArgs( - network="default", - )], - scheduling=gcp.compute.InstanceTemplateSchedulingArgs( - preemptible=False, - automatic_restart=True, - ), - metadata={ - "gce-software-declaration": \"\"\"{ - "softwareRecipes": [{ - "name": "install-gce-service-proxy-agent", - "desired_state": "INSTALLED", - "installSteps": [{ - "scriptRun": { - "script": "#! /bin/bash\\nZONE=$(curl --silent http://metadata.google.internal/computeMetadata/v1/instance/zone -H Metadata-Flavor:Google | cut -d/ -f4 )\\nexport SERVICE_PROXY_AGENT_DIRECTORY=$(mktemp -d)\\nsudo gsutil cp gs://gce-service-proxy-"$ZONE"/service-proxy-agent/releases/service-proxy-agent-0.2.tgz "$SERVICE_PROXY_AGENT_DIRECTORY" || sudo gsutil cp gs://gce-service-proxy/service-proxy-agent/releases/service-proxy-agent-0.2.tgz "$SERVICE_PROXY_AGENT_DIRECTORY"\\nsudo tar -xzf "$SERVICE_PROXY_AGENT_DIRECTORY"/service-proxy-agent-0.2.tgz -C "$SERVICE_PROXY_AGENT_DIRECTORY"\\n"$SERVICE_PROXY_AGENT_DIRECTORY"/service-proxy-agent/service-proxy-agent-bootstrap.sh" - } - }] - }] - } - \"\"\", - "gce-service-proxy": \"\"\"{ - "api-version": "0.2", - "proxy-spec": { - "proxy-port": 15001, - "network": "my-network", - "tracing": "ON", - "access-log": "/var/log/envoy/access.log" - } - "service": { - "serving-ports": [80, 81] - }, - "labels": { - "app_name": "bookserver_app", - "app_version": "STABLE" - } - } - \"\"\", - "enable-guest-attributes": "true", - "enable-osconfig": "true", - }, - service_account=gcp.compute.InstanceTemplateServiceAccountArgs( - email=default.email, - scopes=["cloud-platform"], - ), - labels={ - "gce-service-proxy": "on", - }) - ``` - ## Deploying the Latest Image - - A common way to use instance templates and managed instance groups is to deploy the - latest image in a family, usually the latest build of your application. There are two - ways to do this in the provider, and they have their pros and cons. The difference ends - up being in how "latest" is interpreted. You can either deploy the latest image available - when the provider runs, or you can have each instance check what the latest image is when - it's being created, either as part of a scaling event or being rebuilt by the instance - group manager. - - If you're not sure, we recommend deploying the latest image available when the provider runs, - because this means all the instances in your group will be based on the same image, always, - and means that no upgrades or changes to your instances happen outside of a `pulumi up`. - You can achieve this by using the `compute.Image` - data source, which will retrieve the latest image on every `pulumi apply`, and will update - the template to use that specific image: - - ```python - import pulumi - import pulumi_gcp as gcp - - my_image = gcp.compute.get_image(family="debian-11", - project="debian-cloud") - instance_template = gcp.compute.InstanceTemplate("instanceTemplate", - name_prefix="instance-template-", - machine_type="e2-medium", - region="us-central1", - disks=[gcp.compute.InstanceTemplateDiskArgs( - source_image=my_image.self_link, - )]) - ``` - - To have instances update to the latest on every scaling event or instance re-creation, - use the family as the image for the disk, and it will use GCP's default behavior, setting - the image for the template to the family: - - ```python - import pulumi - import pulumi_gcp as gcp - - instance_template = gcp.compute.InstanceTemplate("instanceTemplate", - disks=[gcp.compute.InstanceTemplateDiskArgs( - source_image="debian-cloud/debian-11", - )], - machine_type="e2-medium", - name_prefix="instance-template-", - region="us-central1") - ``` - ## Import Instance templates can be imported using any of these accepted formats @@ -1485,8 +1232,7 @@ def get(resource_name: str, thus the two mechanisms are not allowed to be used simultaneously. :param pulumi.Input[str] min_cpu_platform: Specifies a minimum CPU platform. Applicable values are the friendly names of CPU platforms, such as `Intel Haswell` or `Intel Skylake`. See the complete list [here](https://cloud.google.com/compute/docs/instances/specify-min-cpu-platform). - :param pulumi.Input[str] name: The name of the instance template. If you leave - this blank, the provider will auto-generate a unique name. + :param pulumi.Input[str] name: The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. :param pulumi.Input[str] name_prefix: Creates a unique name beginning with the specified prefix. Conflicts with `name`. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['InstanceTemplateNetworkInterfaceArgs']]]] network_interfaces: Networks to attach to instances created from @@ -1677,8 +1423,7 @@ def min_cpu_platform(self) -> pulumi.Output[Optional[str]]: @pulumi.getter def name(self) -> pulumi.Output[str]: """ - The name of the instance template. If you leave - this blank, the provider will auto-generate a unique name. + The name of the instance template. If you leave this blank, Terraform will auto-generate a unique name. """ return pulumi.get(self, "name") diff --git a/sdk/python/pulumi_gcp/compute/machine_image.py b/sdk/python/pulumi_gcp/compute/machine_image.py index 2a0b84886d..a943dd5446 100644 --- a/sdk/python/pulumi_gcp/compute/machine_image.py +++ b/sdk/python/pulumi_gcp/compute/machine_image.py @@ -289,16 +289,6 @@ def __init__(__self__, source_instance: Optional[pulumi.Input[str]] = None, __props__=None): """ - Represents a Machine Image resource. Machine images store all the configuration, - metadata, permissions, and data from one or more disks required to create a - Virtual machine (VM) instance. - - To get more information about MachineImage, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/machineImages) - * How-to Guides - * [Official Documentation](https://cloud.google.com/compute/docs/machine-images) - ## Example Usage ### Machine Image Basic @@ -394,16 +384,6 @@ def __init__(__self__, args: MachineImageArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Represents a Machine Image resource. Machine images store all the configuration, - metadata, permissions, and data from one or more disks required to create a - Virtual machine (VM) instance. - - To get more information about MachineImage, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/machineImages) - * How-to Guides - * [Official Documentation](https://cloud.google.com/compute/docs/machine-images) - ## Example Usage ### Machine Image Basic diff --git a/sdk/python/pulumi_gcp/compute/machine_image_iam_binding.py b/sdk/python/pulumi_gcp/compute/machine_image_iam_binding.py index 1e15035825..644dc5d734 100644 --- a/sdk/python/pulumi_gcp/compute/machine_image_iam_binding.py +++ b/sdk/python/pulumi_gcp/compute/machine_image_iam_binding.py @@ -222,120 +222,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - - * `compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - * `compute.MachineImageIamBinding`: 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 machineimage are preserved. - * `compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - - > **Note:** `compute.MachineImageIamPolicy` **cannot** be used in conjunction with `compute.MachineImageIamBinding` and `compute.MachineImageIamMember` or they will fight over what your policy should be. - - > **Note:** `compute.MachineImageIamBinding` resources **can be** used in conjunction with `compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - ## google\\_compute\\_machine\\_image\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/compute.admin", - members=["user:jane@example.com"], - )]) - policy = gcp.compute.MachineImageIamPolicy("policy", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/compute.admin", - members=["user:jane@example.com"], - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - )]) - policy = gcp.compute.MachineImageIamPolicy("policy", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## google\\_compute\\_machine\\_image\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.compute.MachineImageIamBinding("binding", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.compute.MachineImageIamBinding("binding", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - members=["user:jane@example.com"], - condition=gcp.compute.MachineImageIamBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## google\\_compute\\_machine\\_image\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.compute.MachineImageIamMember("member", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.compute.MachineImageIamMember("member", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - member="user:jane@example.com", - condition=gcp.compute.MachineImageIamMemberConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -378,120 +264,6 @@ def __init__(__self__, args: MachineImageIamBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - - * `compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - * `compute.MachineImageIamBinding`: 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 machineimage are preserved. - * `compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - - > **Note:** `compute.MachineImageIamPolicy` **cannot** be used in conjunction with `compute.MachineImageIamBinding` and `compute.MachineImageIamMember` or they will fight over what your policy should be. - - > **Note:** `compute.MachineImageIamBinding` resources **can be** used in conjunction with `compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - ## google\\_compute\\_machine\\_image\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/compute.admin", - members=["user:jane@example.com"], - )]) - policy = gcp.compute.MachineImageIamPolicy("policy", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/compute.admin", - members=["user:jane@example.com"], - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - )]) - policy = gcp.compute.MachineImageIamPolicy("policy", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## google\\_compute\\_machine\\_image\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.compute.MachineImageIamBinding("binding", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.compute.MachineImageIamBinding("binding", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - members=["user:jane@example.com"], - condition=gcp.compute.MachineImageIamBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## google\\_compute\\_machine\\_image\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.compute.MachineImageIamMember("member", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.compute.MachineImageIamMember("member", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - member="user:jane@example.com", - condition=gcp.compute.MachineImageIamMemberConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/compute/machine_image_iam_member.py b/sdk/python/pulumi_gcp/compute/machine_image_iam_member.py index 214802a392..b092fbb23f 100644 --- a/sdk/python/pulumi_gcp/compute/machine_image_iam_member.py +++ b/sdk/python/pulumi_gcp/compute/machine_image_iam_member.py @@ -222,120 +222,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - - * `compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - * `compute.MachineImageIamBinding`: 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 machineimage are preserved. - * `compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - - > **Note:** `compute.MachineImageIamPolicy` **cannot** be used in conjunction with `compute.MachineImageIamBinding` and `compute.MachineImageIamMember` or they will fight over what your policy should be. - - > **Note:** `compute.MachineImageIamBinding` resources **can be** used in conjunction with `compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - ## google\\_compute\\_machine\\_image\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/compute.admin", - members=["user:jane@example.com"], - )]) - policy = gcp.compute.MachineImageIamPolicy("policy", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/compute.admin", - members=["user:jane@example.com"], - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - )]) - policy = gcp.compute.MachineImageIamPolicy("policy", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## google\\_compute\\_machine\\_image\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.compute.MachineImageIamBinding("binding", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.compute.MachineImageIamBinding("binding", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - members=["user:jane@example.com"], - condition=gcp.compute.MachineImageIamBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## google\\_compute\\_machine\\_image\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.compute.MachineImageIamMember("member", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.compute.MachineImageIamMember("member", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - member="user:jane@example.com", - condition=gcp.compute.MachineImageIamMemberConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -378,120 +264,6 @@ def __init__(__self__, args: MachineImageIamMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - - * `compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - * `compute.MachineImageIamBinding`: 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 machineimage are preserved. - * `compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - - > **Note:** `compute.MachineImageIamPolicy` **cannot** be used in conjunction with `compute.MachineImageIamBinding` and `compute.MachineImageIamMember` or they will fight over what your policy should be. - - > **Note:** `compute.MachineImageIamBinding` resources **can be** used in conjunction with `compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - ## google\\_compute\\_machine\\_image\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/compute.admin", - members=["user:jane@example.com"], - )]) - policy = gcp.compute.MachineImageIamPolicy("policy", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/compute.admin", - members=["user:jane@example.com"], - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - )]) - policy = gcp.compute.MachineImageIamPolicy("policy", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## google\\_compute\\_machine\\_image\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.compute.MachineImageIamBinding("binding", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.compute.MachineImageIamBinding("binding", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - members=["user:jane@example.com"], - condition=gcp.compute.MachineImageIamBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## google\\_compute\\_machine\\_image\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.compute.MachineImageIamMember("member", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.compute.MachineImageIamMember("member", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - member="user:jane@example.com", - condition=gcp.compute.MachineImageIamMemberConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/compute/machine_image_iam_policy.py b/sdk/python/pulumi_gcp/compute/machine_image_iam_policy.py index 9017a78191..0a7cb62bb1 100644 --- a/sdk/python/pulumi_gcp/compute/machine_image_iam_policy.py +++ b/sdk/python/pulumi_gcp/compute/machine_image_iam_policy.py @@ -155,120 +155,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - - * `compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - * `compute.MachineImageIamBinding`: 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 machineimage are preserved. - * `compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - - > **Note:** `compute.MachineImageIamPolicy` **cannot** be used in conjunction with `compute.MachineImageIamBinding` and `compute.MachineImageIamMember` or they will fight over what your policy should be. - - > **Note:** `compute.MachineImageIamBinding` resources **can be** used in conjunction with `compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - ## google\\_compute\\_machine\\_image\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/compute.admin", - members=["user:jane@example.com"], - )]) - policy = gcp.compute.MachineImageIamPolicy("policy", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/compute.admin", - members=["user:jane@example.com"], - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - )]) - policy = gcp.compute.MachineImageIamPolicy("policy", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## google\\_compute\\_machine\\_image\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.compute.MachineImageIamBinding("binding", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.compute.MachineImageIamBinding("binding", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - members=["user:jane@example.com"], - condition=gcp.compute.MachineImageIamBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## google\\_compute\\_machine\\_image\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.compute.MachineImageIamMember("member", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.compute.MachineImageIamMember("member", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - member="user:jane@example.com", - condition=gcp.compute.MachineImageIamMemberConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -308,120 +194,6 @@ def __init__(__self__, args: MachineImageIamPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Compute Engine MachineImage. Each of these resources serves a different use case: - - * `compute.MachineImageIamPolicy`: Authoritative. Sets the IAM policy for the machineimage and replaces any existing policy already attached. - * `compute.MachineImageIamBinding`: 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 machineimage are preserved. - * `compute.MachineImageIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the machineimage are preserved. - - > **Note:** `compute.MachineImageIamPolicy` **cannot** be used in conjunction with `compute.MachineImageIamBinding` and `compute.MachineImageIamMember` or they will fight over what your policy should be. - - > **Note:** `compute.MachineImageIamBinding` resources **can be** used in conjunction with `compute.MachineImageIamMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** This resource supports IAM Conditions but they have some known limitations which can be found [here](https://cloud.google.com/iam/docs/conditions-overview#limitations). Please review this article if you are having issues with IAM Conditions. - ## google\\_compute\\_machine\\_image\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/compute.admin", - members=["user:jane@example.com"], - )]) - policy = gcp.compute.MachineImageIamPolicy("policy", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/compute.admin", - members=["user:jane@example.com"], - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - )]) - policy = gcp.compute.MachineImageIamPolicy("policy", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## google\\_compute\\_machine\\_image\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.compute.MachineImageIamBinding("binding", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.compute.MachineImageIamBinding("binding", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - members=["user:jane@example.com"], - condition=gcp.compute.MachineImageIamBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## google\\_compute\\_machine\\_image\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.compute.MachineImageIamMember("member", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.compute.MachineImageIamMember("member", - project=google_compute_machine_image["image"]["project"], - machine_image=google_compute_machine_image["image"]["name"], - role="roles/compute.admin", - member="user:jane@example.com", - condition=gcp.compute.MachineImageIamMemberConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/global/machineImages/{{name}} * {{project}}/{{name}} * {{name}} Any variables not passed in the import command will be taken from the provider configuration. Compute Engine machineimage IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/compute/node_group.py b/sdk/python/pulumi_gcp/compute/node_group.py index f517ed0633..827e1b73a5 100644 --- a/sdk/python/pulumi_gcp/compute/node_group.py +++ b/sdk/python/pulumi_gcp/compute/node_group.py @@ -24,6 +24,7 @@ def __init__(__self__, *, maintenance_window: Optional[pulumi.Input['NodeGroupMaintenanceWindowArgs']] = None, name: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, + share_settings: Optional[pulumi.Input['NodeGroupShareSettingsArgs']] = None, size: Optional[pulumi.Input[int]] = None, zone: Optional[pulumi.Input[str]] = None): """ @@ -40,6 +41,8 @@ def __init__(__self__, *, :param pulumi.Input[str] name: Name of 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. + :param pulumi.Input['NodeGroupShareSettingsArgs'] share_settings: Share settings for the node group. + Structure is documented below. :param pulumi.Input[int] size: The total number of nodes in the node group. One of `initial_size` or `size` must be specified. :param pulumi.Input[str] zone: Zone where this node group is located """ @@ -58,6 +61,8 @@ def __init__(__self__, *, pulumi.set(__self__, "name", name) if project is not None: pulumi.set(__self__, "project", project) + if share_settings is not None: + pulumi.set(__self__, "share_settings", share_settings) if size is not None: pulumi.set(__self__, "size", size) if zone is not None: @@ -163,6 +168,19 @@ def project(self) -> Optional[pulumi.Input[str]]: def project(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "project", value) + @property + @pulumi.getter(name="shareSettings") + def share_settings(self) -> Optional[pulumi.Input['NodeGroupShareSettingsArgs']]: + """ + Share settings for the node group. + Structure is documented below. + """ + return pulumi.get(self, "share_settings") + + @share_settings.setter + def share_settings(self, value: Optional[pulumi.Input['NodeGroupShareSettingsArgs']]): + pulumi.set(self, "share_settings", value) + @property @pulumi.getter def size(self) -> Optional[pulumi.Input[int]]: @@ -201,6 +219,7 @@ def __init__(__self__, *, node_template: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, self_link: Optional[pulumi.Input[str]] = None, + share_settings: Optional[pulumi.Input['NodeGroupShareSettingsArgs']] = None, size: Optional[pulumi.Input[int]] = None, zone: Optional[pulumi.Input[str]] = None): """ @@ -219,6 +238,8 @@ def __init__(__self__, *, :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] self_link: The URI of the created resource. + :param pulumi.Input['NodeGroupShareSettingsArgs'] share_settings: Share settings for the node group. + Structure is documented below. :param pulumi.Input[int] size: The total number of nodes in the node group. One of `initial_size` or `size` must be specified. :param pulumi.Input[str] zone: Zone where this node group is located """ @@ -242,6 +263,8 @@ def __init__(__self__, *, pulumi.set(__self__, "project", project) if self_link is not None: pulumi.set(__self__, "self_link", self_link) + if share_settings is not None: + pulumi.set(__self__, "share_settings", share_settings) if size is not None: pulumi.set(__self__, "size", size) if zone is not None: @@ -371,6 +394,19 @@ def self_link(self) -> Optional[pulumi.Input[str]]: def self_link(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "self_link", value) + @property + @pulumi.getter(name="shareSettings") + def share_settings(self) -> Optional[pulumi.Input['NodeGroupShareSettingsArgs']]: + """ + Share settings for the node group. + Structure is documented below. + """ + return pulumi.get(self, "share_settings") + + @share_settings.setter + def share_settings(self, value: Optional[pulumi.Input['NodeGroupShareSettingsArgs']]): + pulumi.set(self, "share_settings", value) + @property @pulumi.getter def size(self) -> Optional[pulumi.Input[int]]: @@ -409,23 +445,11 @@ def __init__(__self__, name: Optional[pulumi.Input[str]] = None, node_template: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, + share_settings: Optional[pulumi.Input[pulumi.InputType['NodeGroupShareSettingsArgs']]] = None, size: Optional[pulumi.Input[int]] = None, zone: Optional[pulumi.Input[str]] = None, __props__=None): """ - Represents a NodeGroup resource to manage a group of sole-tenant nodes. - - To get more information about NodeGroup, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups) - * How-to Guides - * [Sole-Tenant Nodes](https://cloud.google.com/compute/docs/nodes/) - - > **Warning:** Due to limitations of the API, this provider cannot update the - number of nodes in a node group and changes to node group size either - through provider config or through external changes will cause - the provider to delete and recreate the node group. - ## Example Usage ### Node Group Basic @@ -437,8 +461,8 @@ def __init__(__self__, region="us-central1", node_type="n1-node-96-624") nodes = gcp.compute.NodeGroup("nodes", - zone="us-central1-a", - description="example google_compute_node_group for the Google Provider", + zone="us-central1-f", + description="example google_compute_node_group for Terraform Google Provider", size=1, node_template=soletenant_tmpl.id) ``` @@ -452,8 +476,8 @@ def __init__(__self__, region="us-central1", node_type="n1-node-96-624") nodes = gcp.compute.NodeGroup("nodes", - zone="us-central1-a", - description="example google_compute_node_group for Google Provider", + zone="us-central1-f", + description="example google_compute_node_group for Terraform Google Provider", maintenance_policy="RESTART_IN_PLACE", maintenance_window=gcp.compute.NodeGroupMaintenanceWindowArgs( start_time="08:00", @@ -466,6 +490,31 @@ def __init__(__self__, max_nodes=10, )) ``` + ### Node Group Share Settings + + ```python + import pulumi + import pulumi_gcp as gcp + + guest_project = gcp.organizations.Project("guestProject", + project_id="project-id", + org_id="123456789") + soletenant_tmpl = gcp.compute.NodeTemplate("soletenant-tmpl", + region="us-central1", + node_type="n1-node-96-624") + nodes = gcp.compute.NodeGroup("nodes", + zone="us-central1-f", + description="example google_compute_node_group for Terraform Google Provider", + size=1, + node_template=soletenant_tmpl.id, + share_settings=gcp.compute.NodeGroupShareSettingsArgs( + share_type="SPECIFIC_PROJECTS", + project_maps=[gcp.compute.NodeGroupShareSettingsProjectMapArgs( + id=guest_project.project_id, + project_id=guest_project.project_id, + )], + )) + ``` ## Import @@ -501,6 +550,8 @@ def __init__(__self__, :param pulumi.Input[str] node_template: The URL of the node template to which this node group belongs. :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[pulumi.InputType['NodeGroupShareSettingsArgs']] share_settings: Share settings for the node group. + Structure is documented below. :param pulumi.Input[int] size: The total number of nodes in the node group. One of `initial_size` or `size` must be specified. :param pulumi.Input[str] zone: Zone where this node group is located """ @@ -511,19 +562,6 @@ def __init__(__self__, args: NodeGroupArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Represents a NodeGroup resource to manage a group of sole-tenant nodes. - - To get more information about NodeGroup, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/nodeGroups) - * How-to Guides - * [Sole-Tenant Nodes](https://cloud.google.com/compute/docs/nodes/) - - > **Warning:** Due to limitations of the API, this provider cannot update the - number of nodes in a node group and changes to node group size either - through provider config or through external changes will cause - the provider to delete and recreate the node group. - ## Example Usage ### Node Group Basic @@ -535,8 +573,8 @@ def __init__(__self__, region="us-central1", node_type="n1-node-96-624") nodes = gcp.compute.NodeGroup("nodes", - zone="us-central1-a", - description="example google_compute_node_group for the Google Provider", + zone="us-central1-f", + description="example google_compute_node_group for Terraform Google Provider", size=1, node_template=soletenant_tmpl.id) ``` @@ -550,8 +588,8 @@ def __init__(__self__, region="us-central1", node_type="n1-node-96-624") nodes = gcp.compute.NodeGroup("nodes", - zone="us-central1-a", - description="example google_compute_node_group for Google Provider", + zone="us-central1-f", + description="example google_compute_node_group for Terraform Google Provider", maintenance_policy="RESTART_IN_PLACE", maintenance_window=gcp.compute.NodeGroupMaintenanceWindowArgs( start_time="08:00", @@ -564,6 +602,31 @@ def __init__(__self__, max_nodes=10, )) ``` + ### Node Group Share Settings + + ```python + import pulumi + import pulumi_gcp as gcp + + guest_project = gcp.organizations.Project("guestProject", + project_id="project-id", + org_id="123456789") + soletenant_tmpl = gcp.compute.NodeTemplate("soletenant-tmpl", + region="us-central1", + node_type="n1-node-96-624") + nodes = gcp.compute.NodeGroup("nodes", + zone="us-central1-f", + description="example google_compute_node_group for Terraform Google Provider", + size=1, + node_template=soletenant_tmpl.id, + share_settings=gcp.compute.NodeGroupShareSettingsArgs( + share_type="SPECIFIC_PROJECTS", + project_maps=[gcp.compute.NodeGroupShareSettingsProjectMapArgs( + id=guest_project.project_id, + project_id=guest_project.project_id, + )], + )) + ``` ## Import @@ -608,6 +671,7 @@ def _internal_init(__self__, name: Optional[pulumi.Input[str]] = None, node_template: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, + share_settings: Optional[pulumi.Input[pulumi.InputType['NodeGroupShareSettingsArgs']]] = None, size: Optional[pulumi.Input[int]] = None, zone: Optional[pulumi.Input[str]] = None, __props__=None): @@ -629,6 +693,7 @@ def _internal_init(__self__, raise TypeError("Missing required property 'node_template'") __props__.__dict__["node_template"] = node_template __props__.__dict__["project"] = project + __props__.__dict__["share_settings"] = share_settings __props__.__dict__["size"] = size __props__.__dict__["zone"] = zone __props__.__dict__["creation_timestamp"] = None @@ -653,6 +718,7 @@ def get(resource_name: str, node_template: Optional[pulumi.Input[str]] = None, project: Optional[pulumi.Input[str]] = None, self_link: Optional[pulumi.Input[str]] = None, + share_settings: Optional[pulumi.Input[pulumi.InputType['NodeGroupShareSettingsArgs']]] = None, size: Optional[pulumi.Input[int]] = None, zone: Optional[pulumi.Input[str]] = None) -> 'NodeGroup': """ @@ -676,6 +742,8 @@ def get(resource_name: str, :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] self_link: The URI of the created resource. + :param pulumi.Input[pulumi.InputType['NodeGroupShareSettingsArgs']] share_settings: Share settings for the node group. + Structure is documented below. :param pulumi.Input[int] size: The total number of nodes in the node group. One of `initial_size` or `size` must be specified. :param pulumi.Input[str] zone: Zone where this node group is located """ @@ -693,6 +761,7 @@ def get(resource_name: str, __props__.__dict__["node_template"] = node_template __props__.__dict__["project"] = project __props__.__dict__["self_link"] = self_link + __props__.__dict__["share_settings"] = share_settings __props__.__dict__["size"] = size __props__.__dict__["zone"] = zone return NodeGroup(resource_name, opts=opts, __props__=__props__) @@ -781,6 +850,15 @@ def self_link(self) -> pulumi.Output[str]: """ return pulumi.get(self, "self_link") + @property + @pulumi.getter(name="shareSettings") + def share_settings(self) -> pulumi.Output['outputs.NodeGroupShareSettings']: + """ + Share settings for the node group. + Structure is documented below. + """ + return pulumi.get(self, "share_settings") + @property @pulumi.getter def size(self) -> pulumi.Output[int]: diff --git a/sdk/python/pulumi_gcp/compute/organization_security_policy.py b/sdk/python/pulumi_gcp/compute/organization_security_policy.py index 0d1889bd2e..167e5bb933 100644 --- a/sdk/python/pulumi_gcp/compute/organization_security_policy.py +++ b/sdk/python/pulumi_gcp/compute/organization_security_policy.py @@ -218,26 +218,7 @@ def __init__(__self__, type: Optional[pulumi.Input[str]] = None, __props__=None): """ - Organization security policies are used to control incoming/outgoing traffic. - - To get more information about OrganizationSecurityPolicy, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies) - * How-to Guides - * [Creating a firewall policy](https://cloud.google.com/vpc/docs/using-firewall-policies#create-policy) - ## Example Usage - ### Organization Security Policy Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - policy = gcp.compute.OrganizationSecurityPolicy("policy", - display_name="tf-test", - parent="organizations/123456789", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import @@ -270,26 +251,7 @@ def __init__(__self__, args: OrganizationSecurityPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Organization security policies are used to control incoming/outgoing traffic. - - To get more information about OrganizationSecurityPolicy, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies) - * How-to Guides - * [Creating a firewall policy](https://cloud.google.com/vpc/docs/using-firewall-policies#create-policy) - ## Example Usage - ### Organization Security Policy Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - policy = gcp.compute.OrganizationSecurityPolicy("policy", - display_name="tf-test", - parent="organizations/123456789", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/compute/organization_security_policy_association.py b/sdk/python/pulumi_gcp/compute/organization_security_policy_association.py index 22596bf1f2..88d24e0a2c 100644 --- a/sdk/python/pulumi_gcp/compute/organization_security_policy_association.py +++ b/sdk/python/pulumi_gcp/compute/organization_security_policy_association.py @@ -147,58 +147,7 @@ def __init__(__self__, policy_id: Optional[pulumi.Input[str]] = None, __props__=None): """ - An association for the OrganizationSecurityPolicy. - - To get more information about OrganizationSecurityPolicyAssociation, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addAssociation) - * How-to Guides - * [Associating a policy with the organization or folder](https://cloud.google.com/vpc/docs/using-firewall-policies#associate) - ## Example Usage - ### Organization Security Policy Association Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - security_policy_target = gcp.organizations.Folder("securityPolicyTarget", - display_name="tf-test-secpol", - parent="organizations/123456789", - opts=pulumi.ResourceOptions(provider=google_beta)) - policy_organization_security_policy = gcp.compute.OrganizationSecurityPolicy("policyOrganizationSecurityPolicy", - display_name="tf-test", - parent=security_policy_target.name, - opts=pulumi.ResourceOptions(provider=google_beta)) - policy_organization_security_policy_rule = gcp.compute.OrganizationSecurityPolicyRule("policyOrganizationSecurityPolicyRule", - policy_id=policy_organization_security_policy.id, - action="allow", - direction="INGRESS", - enable_logging=True, - match=gcp.compute.OrganizationSecurityPolicyRuleMatchArgs( - config=gcp.compute.OrganizationSecurityPolicyRuleMatchConfigArgs( - src_ip_ranges=[ - "192.168.0.0/16", - "10.0.0.0/8", - ], - layer4_configs=[ - gcp.compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs( - ip_protocol="tcp", - ports=["22"], - ), - gcp.compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs( - ip_protocol="icmp", - ), - ], - ), - ), - priority=100, - opts=pulumi.ResourceOptions(provider=google_beta)) - policy_organization_security_policy_association = gcp.compute.OrganizationSecurityPolicyAssociation("policyOrganizationSecurityPolicyAssociation", - attachment_id=policy_organization_security_policy.parent, - policy_id=policy_organization_security_policy.id, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import @@ -221,58 +170,7 @@ def __init__(__self__, args: OrganizationSecurityPolicyAssociationArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - An association for the OrganizationSecurityPolicy. - - To get more information about OrganizationSecurityPolicyAssociation, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addAssociation) - * How-to Guides - * [Associating a policy with the organization or folder](https://cloud.google.com/vpc/docs/using-firewall-policies#associate) - ## Example Usage - ### Organization Security Policy Association Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - security_policy_target = gcp.organizations.Folder("securityPolicyTarget", - display_name="tf-test-secpol", - parent="organizations/123456789", - opts=pulumi.ResourceOptions(provider=google_beta)) - policy_organization_security_policy = gcp.compute.OrganizationSecurityPolicy("policyOrganizationSecurityPolicy", - display_name="tf-test", - parent=security_policy_target.name, - opts=pulumi.ResourceOptions(provider=google_beta)) - policy_organization_security_policy_rule = gcp.compute.OrganizationSecurityPolicyRule("policyOrganizationSecurityPolicyRule", - policy_id=policy_organization_security_policy.id, - action="allow", - direction="INGRESS", - enable_logging=True, - match=gcp.compute.OrganizationSecurityPolicyRuleMatchArgs( - config=gcp.compute.OrganizationSecurityPolicyRuleMatchConfigArgs( - src_ip_ranges=[ - "192.168.0.0/16", - "10.0.0.0/8", - ], - layer4_configs=[ - gcp.compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs( - ip_protocol="tcp", - ports=["22"], - ), - gcp.compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs( - ip_protocol="icmp", - ), - ], - ), - ), - priority=100, - opts=pulumi.ResourceOptions(provider=google_beta)) - policy_organization_security_policy_association = gcp.compute.OrganizationSecurityPolicyAssociation("policyOrganizationSecurityPolicyAssociation", - attachment_id=policy_organization_security_policy.parent, - policy_id=policy_organization_security_policy.id, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/compute/organization_security_policy_rule.py b/sdk/python/pulumi_gcp/compute/organization_security_policy_rule.py index eef747187e..f51bd29b0d 100644 --- a/sdk/python/pulumi_gcp/compute/organization_security_policy_rule.py +++ b/sdk/python/pulumi_gcp/compute/organization_security_policy_rule.py @@ -414,50 +414,7 @@ def __init__(__self__, target_service_accounts: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, __props__=None): """ - A rule for the OrganizationSecurityPolicy. - - To get more information about OrganizationSecurityPolicyRule, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addRule) - * How-to Guides - * [Creating firewall rules](https://cloud.google.com/vpc/docs/using-firewall-policies#create-rules) - ## Example Usage - ### Organization Security Policy Rule Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - policy_organization_security_policy = gcp.compute.OrganizationSecurityPolicy("policyOrganizationSecurityPolicy", - display_name="tf-test", - parent="organizations/123456789", - opts=pulumi.ResourceOptions(provider=google_beta)) - policy_organization_security_policy_rule = gcp.compute.OrganizationSecurityPolicyRule("policyOrganizationSecurityPolicyRule", - policy_id=policy_organization_security_policy.id, - action="allow", - direction="INGRESS", - enable_logging=True, - match=gcp.compute.OrganizationSecurityPolicyRuleMatchArgs( - config=gcp.compute.OrganizationSecurityPolicyRuleMatchConfigArgs( - src_ip_ranges=[ - "192.168.0.0/16", - "10.0.0.0/8", - ], - layer4_configs=[ - gcp.compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs( - ip_protocol="tcp", - ports=["22"], - ), - gcp.compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs( - ip_protocol="icmp", - ), - ], - ), - ), - priority=100, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import @@ -500,50 +457,7 @@ def __init__(__self__, args: OrganizationSecurityPolicyRuleArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A rule for the OrganizationSecurityPolicy. - - To get more information about OrganizationSecurityPolicyRule, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/organizationSecurityPolicies/addRule) - * How-to Guides - * [Creating firewall rules](https://cloud.google.com/vpc/docs/using-firewall-policies#create-rules) - ## Example Usage - ### Organization Security Policy Rule Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - policy_organization_security_policy = gcp.compute.OrganizationSecurityPolicy("policyOrganizationSecurityPolicy", - display_name="tf-test", - parent="organizations/123456789", - opts=pulumi.ResourceOptions(provider=google_beta)) - policy_organization_security_policy_rule = gcp.compute.OrganizationSecurityPolicyRule("policyOrganizationSecurityPolicyRule", - policy_id=policy_organization_security_policy.id, - action="allow", - direction="INGRESS", - enable_logging=True, - match=gcp.compute.OrganizationSecurityPolicyRuleMatchArgs( - config=gcp.compute.OrganizationSecurityPolicyRuleMatchConfigArgs( - src_ip_ranges=[ - "192.168.0.0/16", - "10.0.0.0/8", - ], - layer4_configs=[ - gcp.compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs( - ip_protocol="tcp", - ports=["22"], - ), - gcp.compute.OrganizationSecurityPolicyRuleMatchConfigLayer4ConfigArgs( - ip_protocol="icmp", - ), - ], - ), - ), - priority=100, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/compute/outputs.py b/sdk/python/pulumi_gcp/compute/outputs.py index 6ca319d77e..b16ee34c22 100644 --- a/sdk/python/pulumi_gcp/compute/outputs.py +++ b/sdk/python/pulumi_gcp/compute/outputs.py @@ -47,6 +47,9 @@ 'BackendServiceIamBindingCondition', 'BackendServiceIamMemberCondition', 'BackendServiceIap', + 'BackendServiceLocalityLbPolicy', + 'BackendServiceLocalityLbPolicyCustomPolicy', + 'BackendServiceLocalityLbPolicyPolicy', 'BackendServiceLogConfig', 'BackendServiceOutlierDetection', 'BackendServiceOutlierDetectionBaseEjectionTime', @@ -184,6 +187,8 @@ 'NetworkFirewallPolicyRuleTargetSecureTag', 'NodeGroupAutoscalingPolicy', 'NodeGroupMaintenanceWindow', + 'NodeGroupShareSettings', + 'NodeGroupShareSettingsProjectMap', 'NodeTemplateNodeTypeFlexibility', 'NodeTemplateServerBinding', 'OrganizationSecurityPolicyRuleMatch', @@ -352,6 +357,7 @@ 'RouterStatusBestRouteResult', 'RouterStatusBestRoutesForRouterResult', 'SecurityPolicyAdaptiveProtectionConfig', + 'SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig', 'SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig', 'SecurityPolicyAdvancedOptionsConfig', 'SecurityPolicyAdvancedOptionsConfigJsonCustomConfig', @@ -486,6 +492,9 @@ 'GetBackendServiceConsistentHashHttpCookyResult', 'GetBackendServiceConsistentHashHttpCookyTtlResult', 'GetBackendServiceIapResult', + 'GetBackendServiceLocalityLbPolicyResult', + 'GetBackendServiceLocalityLbPolicyCustomPolicyResult', + 'GetBackendServiceLocalityLbPolicyPolicyResult', 'GetBackendServiceLogConfigResult', 'GetBackendServiceOutlierDetectionResult', 'GetBackendServiceOutlierDetectionBaseEjectionTimeResult', @@ -662,9 +671,6 @@ def __init__(__self__, *, :param str mode: Defines operating mode for this policy. Default value is `ON`. Possible values are `OFF`, `ONLY_UP`, and `ON`. - :param 'AutoscalarAutoscalingPolicyScaleDownControlArgs' scale_down_control: Defines scale down controls to reduce the risk of response latency - and outages due to abrupt scale-in events - Structure is documented below. :param 'AutoscalarAutoscalingPolicyScaleInControlArgs' scale_in_control: Defines scale in controls to reduce the risk of response latency and outages due to abrupt scale-in events Structure is documented below. @@ -770,11 +776,6 @@ def mode(self) -> Optional[str]: @property @pulumi.getter(name="scaleDownControl") def scale_down_control(self) -> Optional['outputs.AutoscalarAutoscalingPolicyScaleDownControl']: - """ - Defines scale down controls to reduce the risk of response latency - and outages due to abrupt scale-in events - Structure is documented below. - """ return pulumi.get(self, "scale_down_control") @property @@ -919,47 +920,6 @@ def __init__(__self__, *, :param str name: The identifier (type) of the Stackdriver Monitoring metric. The metric cannot have negative values. The metric must have a value type of INT64 or DOUBLE. - :param str filter: A filter string to be used as the filter string for - a Stackdriver Monitoring TimeSeries.list API call. - This filter is used to select a specific TimeSeries for - the purpose of autoscaling and to determine whether the metric - is exporting per-instance or per-group data. - You can only use the AND operator for joining selectors. - You can only use direct equality comparison operator (=) without - any functions for each selector. - You can specify the metric in both the filter string and in the - metric field. However, if specified in both places, the metric must - be identical. - The monitored resource type determines what kind of values are - expected for the metric. If it is a gce_instance, the autoscaler - expects the metric to include a separate TimeSeries for each - instance in a group. In such a case, you cannot filter on resource - labels. - If the resource type is any other value, the autoscaler expects - this metric to contain values that apply to the entire autoscaled - instance group and resource label filtering can be performed to - point autoscaler at the correct TimeSeries to scale upon. - This is called a per-group metric for the purpose of autoscaling. - If not specified, the type defaults to gce_instance. - You should provide a filter that is selective enough to pick just - one TimeSeries for the autoscaled group or for each of the instances - (if you are using gce_instance resource type). If multiple - TimeSeries are returned upon the query execution, the autoscaler - will sum their respective values to obtain its scaling value. - :param float single_instance_assignment: If scaling is based on a per-group metric value that represents the - total amount of work to be done or resource usage, set this value to - an amount assigned for a single instance of the scaled group. - The autoscaler will keep the number of instances proportional to the - value of this metric, the metric itself should not change value due - to group resizing. - For example, a good metric to use with the target is - `pubsub.googleapis.com/subscription/num_undelivered_messages` - or a custom metric exporting the total number of requests coming to - your instances. - A bad example would be a metric exporting an average or median - latency, since this value can't include a chunk assignable to a - single instance, it could be better used with utilization_target - instead. :param float target: The target value of the metric that autoscaler should maintain. This must be a positive value. A utilization metric scales number of virtual machines handling requests @@ -995,56 +955,11 @@ def name(self) -> str: @property @pulumi.getter def filter(self) -> Optional[str]: - """ - A filter string to be used as the filter string for - a Stackdriver Monitoring TimeSeries.list API call. - This filter is used to select a specific TimeSeries for - the purpose of autoscaling and to determine whether the metric - is exporting per-instance or per-group data. - You can only use the AND operator for joining selectors. - You can only use direct equality comparison operator (=) without - any functions for each selector. - You can specify the metric in both the filter string and in the - metric field. However, if specified in both places, the metric must - be identical. - The monitored resource type determines what kind of values are - expected for the metric. If it is a gce_instance, the autoscaler - expects the metric to include a separate TimeSeries for each - instance in a group. In such a case, you cannot filter on resource - labels. - If the resource type is any other value, the autoscaler expects - this metric to contain values that apply to the entire autoscaled - instance group and resource label filtering can be performed to - point autoscaler at the correct TimeSeries to scale upon. - This is called a per-group metric for the purpose of autoscaling. - If not specified, the type defaults to gce_instance. - You should provide a filter that is selective enough to pick just - one TimeSeries for the autoscaled group or for each of the instances - (if you are using gce_instance resource type). If multiple - TimeSeries are returned upon the query execution, the autoscaler - will sum their respective values to obtain its scaling value. - """ return pulumi.get(self, "filter") @property @pulumi.getter(name="singleInstanceAssignment") def single_instance_assignment(self) -> Optional[float]: - """ - If scaling is based on a per-group metric value that represents the - total amount of work to be done or resource usage, set this value to - an amount assigned for a single instance of the scaled group. - The autoscaler will keep the number of instances proportional to the - value of this metric, the metric itself should not change value due - to group resizing. - For example, a good metric to use with the target is - `pubsub.googleapis.com/subscription/num_undelivered_messages` - or a custom metric exporting the total number of requests coming to - your instances. - A bad example would be a metric exporting an average or median - latency, since this value can't include a chunk assignable to a - single instance, it could be better used with utilization_target - instead. - """ return pulumi.get(self, "single_instance_assignment") @property @@ -1432,9 +1347,6 @@ def __init__(__self__, *, :param str mode: Defines operating mode for this policy. Default value is `ON`. Possible values are `OFF`, `ONLY_UP`, and `ON`. - :param 'AutoscalerAutoscalingPolicyScaleDownControlArgs' scale_down_control: Defines scale down controls to reduce the risk of response latency - and outages due to abrupt scale-in events - Structure is documented below. :param 'AutoscalerAutoscalingPolicyScaleInControlArgs' scale_in_control: Defines scale in controls to reduce the risk of response latency and outages due to abrupt scale-in events Structure is documented below. @@ -1540,11 +1452,6 @@ def mode(self) -> Optional[str]: @property @pulumi.getter(name="scaleDownControl") def scale_down_control(self) -> Optional['outputs.AutoscalerAutoscalingPolicyScaleDownControl']: - """ - Defines scale down controls to reduce the risk of response latency - and outages due to abrupt scale-in events - Structure is documented below. - """ return pulumi.get(self, "scale_down_control") @property @@ -1689,47 +1596,6 @@ def __init__(__self__, *, :param str name: The identifier (type) of the Stackdriver Monitoring metric. The metric cannot have negative values. The metric must have a value type of INT64 or DOUBLE. - :param str filter: A filter string to be used as the filter string for - a Stackdriver Monitoring TimeSeries.list API call. - This filter is used to select a specific TimeSeries for - the purpose of autoscaling and to determine whether the metric - is exporting per-instance or per-group data. - You can only use the AND operator for joining selectors. - You can only use direct equality comparison operator (=) without - any functions for each selector. - You can specify the metric in both the filter string and in the - metric field. However, if specified in both places, the metric must - be identical. - The monitored resource type determines what kind of values are - expected for the metric. If it is a gce_instance, the autoscaler - expects the metric to include a separate TimeSeries for each - instance in a group. In such a case, you cannot filter on resource - labels. - If the resource type is any other value, the autoscaler expects - this metric to contain values that apply to the entire autoscaled - instance group and resource label filtering can be performed to - point autoscaler at the correct TimeSeries to scale upon. - This is called a per-group metric for the purpose of autoscaling. - If not specified, the type defaults to gce_instance. - You should provide a filter that is selective enough to pick just - one TimeSeries for the autoscaled group or for each of the instances - (if you are using gce_instance resource type). If multiple - TimeSeries are returned upon the query execution, the autoscaler - will sum their respective values to obtain its scaling value. - :param float single_instance_assignment: If scaling is based on a per-group metric value that represents the - total amount of work to be done or resource usage, set this value to - an amount assigned for a single instance of the scaled group. - The autoscaler will keep the number of instances proportional to the - value of this metric, the metric itself should not change value due - to group resizing. - For example, a good metric to use with the target is - `pubsub.googleapis.com/subscription/num_undelivered_messages` - or a custom metric exporting the total number of requests coming to - your instances. - A bad example would be a metric exporting an average or median - latency, since this value can't include a chunk assignable to a - single instance, it could be better used with utilization_target - instead. :param float target: The target value of the metric that autoscaler should maintain. This must be a positive value. A utilization metric scales number of virtual machines handling requests @@ -1765,56 +1631,11 @@ def name(self) -> str: @property @pulumi.getter def filter(self) -> Optional[str]: - """ - A filter string to be used as the filter string for - a Stackdriver Monitoring TimeSeries.list API call. - This filter is used to select a specific TimeSeries for - the purpose of autoscaling and to determine whether the metric - is exporting per-instance or per-group data. - You can only use the AND operator for joining selectors. - You can only use direct equality comparison operator (=) without - any functions for each selector. - You can specify the metric in both the filter string and in the - metric field. However, if specified in both places, the metric must - be identical. - The monitored resource type determines what kind of values are - expected for the metric. If it is a gce_instance, the autoscaler - expects the metric to include a separate TimeSeries for each - instance in a group. In such a case, you cannot filter on resource - labels. - If the resource type is any other value, the autoscaler expects - this metric to contain values that apply to the entire autoscaled - instance group and resource label filtering can be performed to - point autoscaler at the correct TimeSeries to scale upon. - This is called a per-group metric for the purpose of autoscaling. - If not specified, the type defaults to gce_instance. - You should provide a filter that is selective enough to pick just - one TimeSeries for the autoscaled group or for each of the instances - (if you are using gce_instance resource type). If multiple - TimeSeries are returned upon the query execution, the autoscaler - will sum their respective values to obtain its scaling value. - """ return pulumi.get(self, "filter") @property @pulumi.getter(name="singleInstanceAssignment") def single_instance_assignment(self) -> Optional[float]: - """ - If scaling is based on a per-group metric value that represents the - total amount of work to be done or resource usage, set this value to - an amount assigned for a single instance of the scaled group. - The autoscaler will keep the number of instances proportional to the - value of this metric, the metric itself should not change value due - to group resizing. - For example, a good metric to use with the target is - `pubsub.googleapis.com/subscription/num_undelivered_messages` - or a custom metric exporting the total number of requests coming to - your instances. - A bad example would be a metric exporting an average or median - latency, since this value can't include a chunk assignable to a - single instance, it could be better used with utilization_target - instead. - """ return pulumi.get(self, "single_instance_assignment") @property @@ -3183,8 +3004,6 @@ def __init__(__self__, *, max_requests_per_connection: Optional[int] = None, max_retries: Optional[int] = None): """ - :param 'BackendServiceCircuitBreakersConnectTimeoutArgs' connect_timeout: The timeout for new network connections to hosts. - Structure is documented below. :param int max_connections: The maximum number of connections to the backend cluster. Defaults to 1024. :param int max_pending_requests: The maximum number of pending requests to the backend cluster. @@ -3214,10 +3033,6 @@ def __init__(__self__, *, @property @pulumi.getter(name="connectTimeout") def connect_timeout(self) -> Optional['outputs.BackendServiceCircuitBreakersConnectTimeout']: - """ - The timeout for new network connections to hosts. - Structure is documented below. - """ return pulumi.get(self, "connect_timeout") @property @@ -3621,6 +3436,136 @@ def oauth2_client_secret_sha256(self) -> Optional[str]: return pulumi.get(self, "oauth2_client_secret_sha256") +@pulumi.output_type +class BackendServiceLocalityLbPolicy(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "customPolicy": + suggest = "custom_policy" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in BackendServiceLocalityLbPolicy. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + BackendServiceLocalityLbPolicy.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + BackendServiceLocalityLbPolicy.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + custom_policy: Optional['outputs.BackendServiceLocalityLbPolicyCustomPolicy'] = None, + policy: Optional['outputs.BackendServiceLocalityLbPolicyPolicy'] = None): + """ + :param 'BackendServiceLocalityLbPolicyCustomPolicyArgs' custom_policy: The configuration for a custom policy implemented by the user and + deployed with the client. + Structure is documented below. + :param 'BackendServiceLocalityLbPolicyPolicyArgs' policy: The configuration for a built-in load balancing policy. + Structure is documented below. + """ + if custom_policy is not None: + pulumi.set(__self__, "custom_policy", custom_policy) + if policy is not None: + pulumi.set(__self__, "policy", policy) + + @property + @pulumi.getter(name="customPolicy") + def custom_policy(self) -> Optional['outputs.BackendServiceLocalityLbPolicyCustomPolicy']: + """ + The configuration for a custom policy implemented by the user and + deployed with the client. + Structure is documented below. + """ + return pulumi.get(self, "custom_policy") + + @property + @pulumi.getter + def policy(self) -> Optional['outputs.BackendServiceLocalityLbPolicyPolicy']: + """ + The configuration for a built-in load balancing policy. + Structure is documented below. + """ + return pulumi.get(self, "policy") + + +@pulumi.output_type +class BackendServiceLocalityLbPolicyCustomPolicy(dict): + def __init__(__self__, *, + name: str, + data: Optional[str] = None): + """ + :param str name: Identifies the custom policy. + The value should match the type the custom implementation is registered + with on the gRPC clients. It should follow protocol buffer + message naming conventions and include the full path (e.g. + myorg.CustomLbPolicy). The maximum length is 256 characters. + Note that specifying the same custom policy more than once for a + backend is not a valid configuration and will be rejected. + :param str data: An optional, arbitrary JSON object with configuration data, understood + by a locally installed custom policy implementation. + """ + pulumi.set(__self__, "name", name) + if data is not None: + pulumi.set(__self__, "data", data) + + @property + @pulumi.getter + def name(self) -> str: + """ + Identifies the custom policy. + The value should match the type the custom implementation is registered + with on the gRPC clients. It should follow protocol buffer + message naming conventions and include the full path (e.g. + myorg.CustomLbPolicy). The maximum length is 256 characters. + Note that specifying the same custom policy more than once for a + backend is not a valid configuration and will be rejected. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def data(self) -> Optional[str]: + """ + An optional, arbitrary JSON object with configuration data, understood + by a locally installed custom policy implementation. + """ + return pulumi.get(self, "data") + + +@pulumi.output_type +class BackendServiceLocalityLbPolicyPolicy(dict): + def __init__(__self__, *, + name: str): + """ + :param str name: The name of a locality load balancer policy to be used. The value + should be one of the predefined ones as supported by localityLbPolicy, + although at the moment only ROUND_ROBIN is supported. + This field should only be populated when the customPolicy field is not + used. + Note that specifying the same policy more than once for a backend is + not a valid configuration and will be rejected. + The possible values are: + """ + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of a locality load balancer policy to be used. The value + should be one of the predefined ones as supported by localityLbPolicy, + although at the moment only ROUND_ROBIN is supported. + This field should only be populated when the customPolicy field is not + used. + Note that specifying the same policy more than once for a backend is + not a valid configuration and will be rejected. + The possible values are: + """ + return pulumi.get(self, "name") + + @pulumi.output_type class BackendServiceLogConfig(dict): @staticmethod @@ -6136,7 +6081,7 @@ def __init__(__self__, *, :param str device_name: Name with which the attached disk will be accessible under `/dev/disk/by-id/google-*` :param str disk_encryption_key_raw: A 256-bit [customer-supplied encryption key] - (), + (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. :param str kms_key_self_link: The self_link of the encryption key that is @@ -6181,7 +6126,7 @@ def device_name(self) -> Optional[str]: def disk_encryption_key_raw(self) -> Optional[str]: """ A 256-bit [customer-supplied encryption key] - (), + (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. """ @@ -6258,7 +6203,7 @@ def __init__(__self__, *, :param str device_name: Name with which attached disk will be accessible. On the instance, this device will be `/dev/disk/by-id/google-{{device_name}}`. :param str disk_encryption_key_raw: A 256-bit [customer-supplied encryption key] - (), + (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. @@ -6314,7 +6259,7 @@ def device_name(self) -> Optional[str]: def disk_encryption_key_raw(self) -> Optional[str]: """ A 256-bit [customer-supplied encryption key] - (), + (https://cloud.google.com/compute/docs/disks/customer-supplied-encryption), encoded in [RFC 4648 base64](https://tools.ietf.org/html/rfc4648#section-4) to encrypt this disk. Only one of `kms_key_self_link` and `disk_encryption_key_raw` may be set. @@ -9185,12 +9130,6 @@ def __init__(__self__, *, subnetwork: Optional[str] = None, subnetwork_project: Optional[str] = None): """ - :param Sequence['InstanceNetworkInterfaceAccessConfigArgs'] access_configs: Access configurations, i.e. IPs via which this - instance can be accessed via the Internet. Omit to ensure that the instance - is not accessible from the Internet. If omitted, ssh will not - work unless this provider can send traffic to the instance's network (e.g. via - tunnel or because it is running on another cloud instance on that network). - This block can be repeated multiple times. Structure documented below. :param Sequence['InstanceNetworkInterfaceAliasIpRangeArgs'] alias_ip_ranges: An array of alias IP ranges for this network interface. Can only be specified for network interfaces on subnet-mode networks. Structure documented below. @@ -9249,14 +9188,6 @@ def __init__(__self__, *, @property @pulumi.getter(name="accessConfigs") def access_configs(self) -> Optional[Sequence['outputs.InstanceNetworkInterfaceAccessConfig']]: - """ - Access configurations, i.e. IPs via which this - instance can be accessed via the Internet. Omit to ensure that the instance - is not accessible from the Internet. If omitted, ssh will not - work unless this provider can send traffic to the instance's network (e.g. via - tunnel or because it is running on another cloud instance on that network). - This block can be repeated multiple times. Structure documented below. - """ return pulumi.get(self, "access_configs") @property @@ -9750,7 +9681,7 @@ def __init__(__self__, *, :param bool preemptible: Specifies if the instance is preemptible. If this field is set to true, then `automatic_restart` must be set to false. Defaults to false. - :param str provisioning_model: Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, + :param str provisioning_model: Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, `preemptible` should be `true` and `auto_restart` should be `false`. For more info about `SPOT`, read [here](https://cloud.google.com/compute/docs/instances/spot) @@ -9839,7 +9770,7 @@ def preemptible(self) -> Optional[bool]: @pulumi.getter(name="provisioningModel") def provisioning_model(self) -> Optional[str]: """ - Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, + Describe the type of preemptible VM. This field accepts the value `STANDARD` or `SPOT`. If the value is `STANDARD`, there will be no discount. If this is set to `SPOT`, `preemptible` should be `true` and `auto_restart` should be `false`. For more info about `SPOT`, read [here](https://cloud.google.com/compute/docs/instances/spot) @@ -10681,20 +10612,12 @@ def __init__(__self__, *, subnetwork: Optional[str] = None, subnetwork_project: Optional[str] = None): """ - :param Sequence['InstanceTemplateNetworkInterfaceAccessConfigArgs'] access_configs: Access configurations, i.e. IPs via which this - instance can be accessed via the Internet. Omit to ensure that the instance - is not accessible from the Internet (this means that ssh provisioners will - not work unless you can send traffic to the instance's - network (e.g. via tunnel or because it is running on another cloud instance - on that network). This block can be repeated multiple times. Structure documented below. :param Sequence['InstanceTemplateNetworkInterfaceAliasIpRangeArgs'] alias_ip_ranges: An array of alias IP ranges for this network interface. Can only be specified for network interfaces on subnet-mode networks. Structure documented below. :param Sequence['InstanceTemplateNetworkInterfaceIpv6AccessConfigArgs'] ipv6_access_configs: An array of IPv6 access configurations for this interface. 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. - :param str name: The name of the instance template. If you leave - this blank, the provider will auto-generate a unique name. :param str network: The name or self_link of the network to attach this interface to. Use `network` attribute for Legacy or Auto subnetted networks and `subnetwork` for custom subnetted networks. @@ -10737,14 +10660,6 @@ def __init__(__self__, *, @property @pulumi.getter(name="accessConfigs") def access_configs(self) -> Optional[Sequence['outputs.InstanceTemplateNetworkInterfaceAccessConfig']]: - """ - Access configurations, i.e. IPs via which this - instance can be accessed via the Internet. Omit to ensure that the instance - is not accessible from the Internet (this means that ssh provisioners will - not work unless you can send traffic to the instance's - network (e.g. via tunnel or because it is running on another cloud instance - on that network). This block can be repeated multiple times. Structure documented below. - """ return pulumi.get(self, "access_configs") @property @@ -10775,10 +10690,6 @@ def ipv6_access_type(self) -> Optional[str]: @property @pulumi.getter def name(self) -> Optional[str]: - """ - The name of the instance template. If you leave - this blank, the provider will auto-generate a unique name. - """ return pulumi.get(self, "name") @property @@ -11198,7 +11109,6 @@ def __init__(__self__, *, automatically restarted if it is terminated by Compute Engine (not terminated by a user). This defaults to true. :param str instance_termination_action: Describe the type of termination action for `SPOT` VM. Can be `STOP` or `DELETE`. Read more on [here](https://cloud.google.com/compute/docs/instances/create-use-spot) - :param 'InstanceTemplateSchedulingMaxRunDurationArgs' max_run_duration: Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below. :param Sequence['InstanceTemplateSchedulingNodeAffinityArgs'] node_affinities: Specifies node affinities or anti-affinities to determine which sole-tenant nodes your instances and managed instance groups will use as host systems. Read more on sole-tenant node creation @@ -11252,9 +11162,6 @@ def instance_termination_action(self) -> Optional[str]: @property @pulumi.getter(name="maxRunDuration") def max_run_duration(self) -> Optional['outputs.InstanceTemplateSchedulingMaxRunDuration']: - """ - Beta - The duration of the instance. Instance will run and be terminated after then, the termination action could be defined in `instance_termination_action`. Only support `DELETE` `instance_termination_action` at this point. Structure is documented below. - """ return pulumi.get(self, "max_run_duration") @property @@ -12009,6 +11916,105 @@ def start_time(self) -> str: return pulumi.get(self, "start_time") +@pulumi.output_type +class NodeGroupShareSettings(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "shareType": + suggest = "share_type" + elif key == "projectMaps": + suggest = "project_maps" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in NodeGroupShareSettings. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + NodeGroupShareSettings.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + NodeGroupShareSettings.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + share_type: str, + project_maps: Optional[Sequence['outputs.NodeGroupShareSettingsProjectMap']] = None): + """ + :param str share_type: Node group sharing type. + Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + :param Sequence['NodeGroupShareSettingsProjectMapArgs'] project_maps: A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + Structure is documented below. + """ + pulumi.set(__self__, "share_type", share_type) + if project_maps is not None: + pulumi.set(__self__, "project_maps", project_maps) + + @property + @pulumi.getter(name="shareType") + def share_type(self) -> str: + """ + Node group sharing type. + Possible values are `ORGANIZATION`, `SPECIFIC_PROJECTS`, and `LOCAL`. + """ + return pulumi.get(self, "share_type") + + @property + @pulumi.getter(name="projectMaps") + def project_maps(self) -> Optional[Sequence['outputs.NodeGroupShareSettingsProjectMap']]: + """ + A map of project id and project config. This is only valid when shareType's value is SPECIFIC_PROJECTS. + Structure is documented below. + """ + return pulumi.get(self, "project_maps") + + +@pulumi.output_type +class NodeGroupShareSettingsProjectMap(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "projectId": + suggest = "project_id" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in NodeGroupShareSettingsProjectMap. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + NodeGroupShareSettingsProjectMap.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + NodeGroupShareSettingsProjectMap.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + id: str, + project_id: str): + """ + :param str id: The identifier for this object. Format specified above. + :param str project_id: The project id/number should be the same as the key of this project config in the project map. + """ + pulumi.set(__self__, "id", id) + pulumi.set(__self__, "project_id", project_id) + + @property + @pulumi.getter + def id(self) -> str: + """ + The identifier for this object. Format specified above. + """ + return pulumi.get(self, "id") + + @property + @pulumi.getter(name="projectId") + def project_id(self) -> str: + """ + The project id/number should be the same as the key of this project config in the project map. + """ + return pulumi.get(self, "project_id") + + @pulumi.output_type class NodeTemplateNodeTypeFlexibility(dict): @staticmethod @@ -12693,9 +12699,6 @@ def __init__(__self__, *, :param str mode: Defines operating mode for this policy. Default value is `ON`. Possible values are `OFF`, `ONLY_UP`, and `ON`. - :param 'RegionAutoscalerAutoscalingPolicyScaleDownControlArgs' scale_down_control: Defines scale down controls to reduce the risk of response latency - and outages due to abrupt scale-in events - Structure is documented below. :param 'RegionAutoscalerAutoscalingPolicyScaleInControlArgs' scale_in_control: Defines scale in controls to reduce the risk of response latency and outages due to abrupt scale-in events Structure is documented below. @@ -12801,11 +12804,6 @@ def mode(self) -> Optional[str]: @property @pulumi.getter(name="scaleDownControl") def scale_down_control(self) -> Optional['outputs.RegionAutoscalerAutoscalingPolicyScaleDownControl']: - """ - Defines scale down controls to reduce the risk of response latency - and outages due to abrupt scale-in events - Structure is documented below. - """ return pulumi.get(self, "scale_down_control") @property @@ -12950,47 +12948,6 @@ def __init__(__self__, *, :param str name: The identifier (type) of the Stackdriver Monitoring metric. The metric cannot have negative values. The metric must have a value type of INT64 or DOUBLE. - :param str filter: A filter string to be used as the filter string for - a Stackdriver Monitoring TimeSeries.list API call. - This filter is used to select a specific TimeSeries for - the purpose of autoscaling and to determine whether the metric - is exporting per-instance or per-group data. - You can only use the AND operator for joining selectors. - You can only use direct equality comparison operator (=) without - any functions for each selector. - You can specify the metric in both the filter string and in the - metric field. However, if specified in both places, the metric must - be identical. - The monitored resource type determines what kind of values are - expected for the metric. If it is a gce_instance, the autoscaler - expects the metric to include a separate TimeSeries for each - instance in a group. In such a case, you cannot filter on resource - labels. - If the resource type is any other value, the autoscaler expects - this metric to contain values that apply to the entire autoscaled - instance group and resource label filtering can be performed to - point autoscaler at the correct TimeSeries to scale upon. - This is called a per-group metric for the purpose of autoscaling. - If not specified, the type defaults to gce_instance. - You should provide a filter that is selective enough to pick just - one TimeSeries for the autoscaled group or for each of the instances - (if you are using gce_instance resource type). If multiple - TimeSeries are returned upon the query execution, the autoscaler - will sum their respective values to obtain its scaling value. - :param float single_instance_assignment: If scaling is based on a per-group metric value that represents the - total amount of work to be done or resource usage, set this value to - an amount assigned for a single instance of the scaled group. - The autoscaler will keep the number of instances proportional to the - value of this metric, the metric itself should not change value due - to group resizing. - For example, a good metric to use with the target is - `pubsub.googleapis.com/subscription/num_undelivered_messages` - or a custom metric exporting the total number of requests coming to - your instances. - A bad example would be a metric exporting an average or median - latency, since this value can't include a chunk assignable to a - single instance, it could be better used with utilization_target - instead. :param float target: The target value of the metric that autoscaler should maintain. This must be a positive value. A utilization metric scales number of virtual machines handling requests @@ -13026,56 +12983,11 @@ def name(self) -> str: @property @pulumi.getter def filter(self) -> Optional[str]: - """ - A filter string to be used as the filter string for - a Stackdriver Monitoring TimeSeries.list API call. - This filter is used to select a specific TimeSeries for - the purpose of autoscaling and to determine whether the metric - is exporting per-instance or per-group data. - You can only use the AND operator for joining selectors. - You can only use direct equality comparison operator (=) without - any functions for each selector. - You can specify the metric in both the filter string and in the - metric field. However, if specified in both places, the metric must - be identical. - The monitored resource type determines what kind of values are - expected for the metric. If it is a gce_instance, the autoscaler - expects the metric to include a separate TimeSeries for each - instance in a group. In such a case, you cannot filter on resource - labels. - If the resource type is any other value, the autoscaler expects - this metric to contain values that apply to the entire autoscaled - instance group and resource label filtering can be performed to - point autoscaler at the correct TimeSeries to scale upon. - This is called a per-group metric for the purpose of autoscaling. - If not specified, the type defaults to gce_instance. - You should provide a filter that is selective enough to pick just - one TimeSeries for the autoscaled group or for each of the instances - (if you are using gce_instance resource type). If multiple - TimeSeries are returned upon the query execution, the autoscaler - will sum their respective values to obtain its scaling value. - """ return pulumi.get(self, "filter") @property @pulumi.getter(name="singleInstanceAssignment") def single_instance_assignment(self) -> Optional[float]: - """ - If scaling is based on a per-group metric value that represents the - total amount of work to be done or resource usage, set this value to - an amount assigned for a single instance of the scaled group. - The autoscaler will keep the number of instances proportional to the - value of this metric, the metric itself should not change value due - to group resizing. - For example, a good metric to use with the target is - `pubsub.googleapis.com/subscription/num_undelivered_messages` - or a custom metric exporting the total number of requests coming to - your instances. - A bad example would be a metric exporting an average or median - latency, since this value can't include a chunk assignable to a - single instance, it could be better used with utilization_target - instead. - """ return pulumi.get(self, "single_instance_assignment") @property @@ -14009,8 +13921,6 @@ def __init__(__self__, *, """ :param int code: The HTTP status code to define a TTL against. Only HTTP status codes 300, 301, 308, 404, 405, 410, 421, 451 and 501 can be specified as values, and you cannot specify a status code more than once. - :param int ttl: The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. """ if code is not None: pulumi.set(__self__, "code", code) @@ -14029,10 +13939,6 @@ def code(self) -> Optional[int]: @property @pulumi.getter def ttl(self) -> Optional[int]: - """ - The TTL (in seconds) for which to cache responses with the corresponding status code. The maximum allowed value is 1800s - (30 minutes), noting that infrequently accessed objects may be evicted from the cache before the defined TTL. - """ return pulumi.get(self, "ttl") @@ -14073,8 +13979,6 @@ def __init__(__self__, *, max_requests_per_connection: Optional[int] = None, max_retries: Optional[int] = None): """ - :param 'RegionBackendServiceCircuitBreakersConnectTimeoutArgs' connect_timeout: The timeout for new network connections to hosts. - Structure is documented below. :param int max_connections: The maximum number of connections to the backend cluster. Defaults to 1024. :param int max_pending_requests: The maximum number of pending requests to the backend cluster. @@ -14104,10 +14008,6 @@ def __init__(__self__, *, @property @pulumi.getter(name="connectTimeout") def connect_timeout(self) -> Optional['outputs.RegionBackendServiceCircuitBreakersConnectTimeout']: - """ - The timeout for new network connections to hosts. - Structure is documented below. - """ return pulumi.get(self, "connect_timeout") @property @@ -15243,7 +15143,6 @@ def __init__(__self__, *, raw_key: Optional[str] = None, sha256: Optional[str] = None): """ - :param str kms_key_name: The name of the encryption key that is stored in Google Cloud KMS. :param str raw_key: Specifies a 256-bit customer-supplied encryption key, encoded in RFC 4648 base64 to either encrypt or decrypt this resource. :param str sha256: The RFC 4648 base64 encoded SHA-256 hash of the customer-supplied @@ -15259,9 +15158,6 @@ def __init__(__self__, *, @property @pulumi.getter(name="kmsKeyName") def kms_key_name(self) -> Optional[str]: - """ - The name of the encryption key that is stored in Google Cloud KMS. - """ return pulumi.get(self, "kms_key_name") @property @@ -24386,7 +24282,9 @@ class SecurityPolicyAdaptiveProtectionConfig(dict): @staticmethod def __key_warning(key: str): suggest = None - if key == "layer7DdosDefenseConfig": + if key == "autoDeployConfig": + suggest = "auto_deploy_config" + elif key == "layer7DdosDefenseConfig": suggest = "layer7_ddos_defense_config" if suggest: @@ -24401,13 +24299,25 @@ def get(self, key: str, default = None) -> Any: return super().get(key, default) def __init__(__self__, *, + auto_deploy_config: Optional['outputs.SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig'] = None, layer7_ddos_defense_config: Optional['outputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig'] = None): """ + :param 'SecurityPolicyAdaptiveProtectionConfigAutoDeployConfigArgs' auto_deploy_config: ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. :param 'SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfigArgs' layer7_ddos_defense_config: Configuration for [Google Cloud Armor Adaptive Protection Layer 7 DDoS Defense](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. """ + if auto_deploy_config is not None: + pulumi.set(__self__, "auto_deploy_config", auto_deploy_config) if layer7_ddos_defense_config is not None: pulumi.set(__self__, "layer7_ddos_defense_config", layer7_ddos_defense_config) + @property + @pulumi.getter(name="autoDeployConfig") + def auto_deploy_config(self) -> Optional['outputs.SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig']: + """ + ) Configuration for [Automatically deploy Adaptive Protection suggested rules](https://cloud.google.com/armor/docs/adaptive-protection-auto-deploy?hl=en). Structure is documented below. + """ + return pulumi.get(self, "auto_deploy_config") + @property @pulumi.getter(name="layer7DdosDefenseConfig") def layer7_ddos_defense_config(self) -> Optional['outputs.SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig']: @@ -24417,6 +24327,84 @@ def layer7_ddos_defense_config(self) -> Optional['outputs.SecurityPolicyAdaptive return pulumi.get(self, "layer7_ddos_defense_config") +@pulumi.output_type +class SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "confidenceThreshold": + suggest = "confidence_threshold" + elif key == "expirationSec": + suggest = "expiration_sec" + elif key == "impactedBaselineThreshold": + suggest = "impacted_baseline_threshold" + elif key == "loadThreshold": + suggest = "load_threshold" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + SecurityPolicyAdaptiveProtectionConfigAutoDeployConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + confidence_threshold: Optional[float] = None, + expiration_sec: Optional[int] = None, + impacted_baseline_threshold: Optional[float] = None, + load_threshold: Optional[float] = None): + """ + :param float confidence_threshold: Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + :param int expiration_sec: Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + :param float impacted_baseline_threshold: Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + :param float load_threshold: Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + """ + if confidence_threshold is not None: + pulumi.set(__self__, "confidence_threshold", confidence_threshold) + if expiration_sec is not None: + pulumi.set(__self__, "expiration_sec", expiration_sec) + if impacted_baseline_threshold is not None: + pulumi.set(__self__, "impacted_baseline_threshold", impacted_baseline_threshold) + if load_threshold is not None: + pulumi.set(__self__, "load_threshold", load_threshold) + + @property + @pulumi.getter(name="confidenceThreshold") + def confidence_threshold(self) -> Optional[float]: + """ + Rules are only automatically deployed for alerts on potential attacks with confidence scores greater than this threshold. + """ + return pulumi.get(self, "confidence_threshold") + + @property + @pulumi.getter(name="expirationSec") + def expiration_sec(self) -> Optional[int]: + """ + Google Cloud Armor stops applying the action in the automatically deployed rule to an identified attacker after this duration. The rule continues to operate against new requests. + """ + return pulumi.get(self, "expiration_sec") + + @property + @pulumi.getter(name="impactedBaselineThreshold") + def impacted_baseline_threshold(self) -> Optional[float]: + """ + Rules are only automatically deployed when the estimated impact to baseline traffic from the suggested mitigation is below this threshold. + """ + return pulumi.get(self, "impacted_baseline_threshold") + + @property + @pulumi.getter(name="loadThreshold") + def load_threshold(self) -> Optional[float]: + """ + Identifies new attackers only when the load to the backend service that is under attack exceeds this threshold. + """ + return pulumi.get(self, "load_threshold") + + @pulumi.output_type class SecurityPolicyAdaptiveProtectionConfigLayer7DdosDefenseConfig(dict): @staticmethod @@ -33374,6 +33362,68 @@ def oauth2_client_secret_sha256(self) -> str: return pulumi.get(self, "oauth2_client_secret_sha256") +@pulumi.output_type +class GetBackendServiceLocalityLbPolicyResult(dict): + def __init__(__self__, *, + custom_policies: Sequence['outputs.GetBackendServiceLocalityLbPolicyCustomPolicyResult'], + policies: Sequence['outputs.GetBackendServiceLocalityLbPolicyPolicyResult']): + pulumi.set(__self__, "custom_policies", custom_policies) + pulumi.set(__self__, "policies", policies) + + @property + @pulumi.getter(name="customPolicies") + def custom_policies(self) -> Sequence['outputs.GetBackendServiceLocalityLbPolicyCustomPolicyResult']: + return pulumi.get(self, "custom_policies") + + @property + @pulumi.getter + def policies(self) -> Sequence['outputs.GetBackendServiceLocalityLbPolicyPolicyResult']: + return pulumi.get(self, "policies") + + +@pulumi.output_type +class GetBackendServiceLocalityLbPolicyCustomPolicyResult(dict): + def __init__(__self__, *, + data: str, + name: str): + """ + :param str name: The name of the Backend Service. + """ + pulumi.set(__self__, "data", data) + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def data(self) -> str: + return pulumi.get(self, "data") + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the Backend Service. + """ + return pulumi.get(self, "name") + + +@pulumi.output_type +class GetBackendServiceLocalityLbPolicyPolicyResult(dict): + def __init__(__self__, *, + name: str): + """ + :param str name: The name of the Backend Service. + """ + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def name(self) -> str: + """ + The name of the Backend Service. + """ + return pulumi.get(self, "name") + + @pulumi.output_type class GetBackendServiceLogConfigResult(dict): def __init__(__self__, *, @@ -35544,12 +35594,6 @@ def __init__(__self__, *, subnetwork: str, subnetwork_project: str): """ - :param Sequence['GetInstanceTemplateNetworkInterfaceAccessConfigArgs'] access_configs: Access configurations, i.e. IPs via which this - instance can be accessed via the Internet. Omit to ensure that the instance - is not accessible from the Internet (this means that ssh provisioners will - not work unless you are running the prvovider can send traffic to the instance's - network (e.g. via tunnel or because it is running on another cloud instance - on that network). This block can be repeated multiple times. Structure documented below. :param Sequence['GetInstanceTemplateNetworkInterfaceAliasIpRangeArgs'] alias_ip_ranges: An array of alias IP ranges for this network interface. Can only be specified for network interfaces on subnet-mode networks. Structure documented below. @@ -35581,14 +35625,6 @@ def __init__(__self__, *, @property @pulumi.getter(name="accessConfigs") def access_configs(self) -> Sequence['outputs.GetInstanceTemplateNetworkInterfaceAccessConfigResult']: - """ - Access configurations, i.e. IPs via which this - instance can be accessed via the Internet. Omit to ensure that the instance - is not accessible from the Internet (this means that ssh provisioners will - not work unless you are running the prvovider can send traffic to the instance's - network (e.g. via tunnel or because it is running on another cloud instance - on that network). This block can be repeated multiple times. Structure documented below. - """ return pulumi.get(self, "access_configs") @property diff --git a/sdk/python/pulumi_gcp/compute/per_instance_config.py b/sdk/python/pulumi_gcp/compute/per_instance_config.py index 70b90837e0..8374664cc8 100644 --- a/sdk/python/pulumi_gcp/compute/per_instance_config.py +++ b/sdk/python/pulumi_gcp/compute/per_instance_config.py @@ -365,65 +365,6 @@ def __init__(__self__, * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs) ## Example Usage - ### Stateful Igm - - ```python - import pulumi - import pulumi_gcp as gcp - - my_image = gcp.compute.get_image(family="debian-11", - project="debian-cloud") - igm_basic = gcp.compute.InstanceTemplate("igm-basic", - machine_type="e2-medium", - can_ip_forward=False, - tags=[ - "foo", - "bar", - ], - disks=[gcp.compute.InstanceTemplateDiskArgs( - source_image=my_image.self_link, - auto_delete=True, - boot=True, - )], - network_interfaces=[gcp.compute.InstanceTemplateNetworkInterfaceArgs( - network="default", - )], - service_account=gcp.compute.InstanceTemplateServiceAccountArgs( - scopes=[ - "userinfo-email", - "compute-ro", - "storage-ro", - ], - )) - igm_no_tp = gcp.compute.InstanceGroupManager("igm-no-tp", - description="Test instance group manager", - versions=[gcp.compute.InstanceGroupManagerVersionArgs( - name="prod", - instance_template=igm_basic.self_link, - )], - base_instance_name="igm-no-tp", - zone="us-central1-c", - target_size=2) - default = gcp.compute.Disk("default", - type="pd-ssd", - zone=google_compute_instance_group_manager["igm"]["zone"], - image="debian-11-bullseye-v20220719", - physical_block_size_bytes=4096) - with_disk = gcp.compute.PerInstanceConfig("withDisk", - zone=google_compute_instance_group_manager["igm"]["zone"], - instance_group_manager=google_compute_instance_group_manager["igm"]["name"], - preserved_state=gcp.compute.PerInstanceConfigPreservedStateArgs( - metadata={ - "foo": "bar", - "instance_template": igm_basic.self_link, - }, - disks=[gcp.compute.PerInstanceConfigPreservedStateDiskArgs( - device_name="my-stateful-disk", - source=default.id, - mode="READ_ONLY", - )], - )) - ``` ## Import @@ -487,65 +428,6 @@ def __init__(__self__, * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs) ## Example Usage - ### Stateful Igm - - ```python - import pulumi - import pulumi_gcp as gcp - - my_image = gcp.compute.get_image(family="debian-11", - project="debian-cloud") - igm_basic = gcp.compute.InstanceTemplate("igm-basic", - machine_type="e2-medium", - can_ip_forward=False, - tags=[ - "foo", - "bar", - ], - disks=[gcp.compute.InstanceTemplateDiskArgs( - source_image=my_image.self_link, - auto_delete=True, - boot=True, - )], - network_interfaces=[gcp.compute.InstanceTemplateNetworkInterfaceArgs( - network="default", - )], - service_account=gcp.compute.InstanceTemplateServiceAccountArgs( - scopes=[ - "userinfo-email", - "compute-ro", - "storage-ro", - ], - )) - igm_no_tp = gcp.compute.InstanceGroupManager("igm-no-tp", - description="Test instance group manager", - versions=[gcp.compute.InstanceGroupManagerVersionArgs( - name="prod", - instance_template=igm_basic.self_link, - )], - base_instance_name="igm-no-tp", - zone="us-central1-c", - target_size=2) - default = gcp.compute.Disk("default", - type="pd-ssd", - zone=google_compute_instance_group_manager["igm"]["zone"], - image="debian-11-bullseye-v20220719", - physical_block_size_bytes=4096) - with_disk = gcp.compute.PerInstanceConfig("withDisk", - zone=google_compute_instance_group_manager["igm"]["zone"], - instance_group_manager=google_compute_instance_group_manager["igm"]["name"], - preserved_state=gcp.compute.PerInstanceConfigPreservedStateArgs( - metadata={ - "foo": "bar", - "instance_template": igm_basic.self_link, - }, - disks=[gcp.compute.PerInstanceConfigPreservedStateDiskArgs( - device_name="my-stateful-disk", - source=default.id, - mode="READ_ONLY", - )], - )) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/compute/project_metadata_item.py b/sdk/python/pulumi_gcp/compute/project_metadata_item.py index 6c3bd9b547..121785cb29 100644 --- a/sdk/python/pulumi_gcp/compute/project_metadata_item.py +++ b/sdk/python/pulumi_gcp/compute/project_metadata_item.py @@ -135,11 +135,6 @@ def __init__(__self__, value: Optional[pulumi.Input[str]] = None, __props__=None): """ - Manages a single key/value pair on metadata common to all instances for - a project in GCE. Using `compute.ProjectMetadataItem` lets you - manage a single key/value setting in the provider rather than the entire - project metadata map. - ## Example Usage ```python @@ -173,11 +168,6 @@ def __init__(__self__, args: ProjectMetadataItemArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Manages a single key/value pair on metadata common to all instances for - a project in GCE. Using `compute.ProjectMetadataItem` lets you - manage a single key/value setting in the provider rather than the entire - project metadata map. - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/compute/region_backend_service.py b/sdk/python/pulumi_gcp/compute/region_backend_service.py index 2f2fddcd6a..6c8c91c556 100644 --- a/sdk/python/pulumi_gcp/compute/region_backend_service.py +++ b/sdk/python/pulumi_gcp/compute/region_backend_service.py @@ -58,10 +58,8 @@ def __init__(__self__, *, Structure is documented below. :param pulumi.Input[int] connection_draining_timeout_sec: Time for which instance will be drained (not accept new connections, but still work to finish started). - :param pulumi.Input['RegionBackendServiceConnectionTrackingPolicyArgs'] connection_tracking_policy: Connection Tracking configuration for this BackendService. - This is available only for Layer 4 Internal Load Balancing and - Network Load Balancing. - Structure is documented below. + :param pulumi.Input['RegionBackendServiceConnectionTrackingPolicyArgs'] connection_tracking_policy: Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + and Network Load Balancing. :param pulumi.Input['RegionBackendServiceConsistentHashArgs'] consistent_hash: Consistent Hash-based load balancing can be used to provide soft session affinity based on HTTP headers, cookies or other properties. This load balancing policy is applicable only for HTTP connections. The affinity to a particular @@ -252,10 +250,8 @@ def connection_draining_timeout_sec(self, value: Optional[pulumi.Input[int]]): @pulumi.getter(name="connectionTrackingPolicy") def connection_tracking_policy(self) -> Optional[pulumi.Input['RegionBackendServiceConnectionTrackingPolicyArgs']]: """ - Connection Tracking configuration for this BackendService. - This is available only for Layer 4 Internal Load Balancing and - Network Load Balancing. - Structure is documented below. + Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + and Network Load Balancing. """ return pulumi.get(self, "connection_tracking_policy") @@ -585,10 +581,8 @@ def __init__(__self__, *, Structure is documented below. :param pulumi.Input[int] connection_draining_timeout_sec: Time for which instance will be drained (not accept new connections, but still work to finish started). - :param pulumi.Input['RegionBackendServiceConnectionTrackingPolicyArgs'] connection_tracking_policy: Connection Tracking configuration for this BackendService. - This is available only for Layer 4 Internal Load Balancing and - Network Load Balancing. - Structure is documented below. + :param pulumi.Input['RegionBackendServiceConnectionTrackingPolicyArgs'] connection_tracking_policy: Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + and Network Load Balancing. :param pulumi.Input['RegionBackendServiceConsistentHashArgs'] consistent_hash: Consistent Hash-based load balancing can be used to provide soft session affinity based on HTTP headers, cookies or other properties. This load balancing policy is applicable only for HTTP connections. The affinity to a particular @@ -789,10 +783,8 @@ def connection_draining_timeout_sec(self, value: Optional[pulumi.Input[int]]): @pulumi.getter(name="connectionTrackingPolicy") def connection_tracking_policy(self) -> Optional[pulumi.Input['RegionBackendServiceConnectionTrackingPolicyArgs']]: """ - Connection Tracking configuration for this BackendService. - This is available only for Layer 4 Internal Load Balancing and - Network Load Balancing. - Structure is documented below. + Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + and Network Load Balancing. """ return pulumi.get(self, "connection_tracking_policy") @@ -1182,10 +1174,8 @@ def __init__(__self__, Structure is documented below. :param pulumi.Input[int] connection_draining_timeout_sec: Time for which instance will be drained (not accept new connections, but still work to finish started). - :param pulumi.Input[pulumi.InputType['RegionBackendServiceConnectionTrackingPolicyArgs']] connection_tracking_policy: Connection Tracking configuration for this BackendService. - This is available only for Layer 4 Internal Load Balancing and - Network Load Balancing. - Structure is documented below. + :param pulumi.Input[pulumi.InputType['RegionBackendServiceConnectionTrackingPolicyArgs']] connection_tracking_policy: Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + and Network Load Balancing. :param pulumi.Input[pulumi.InputType['RegionBackendServiceConsistentHashArgs']] consistent_hash: Consistent Hash-based load balancing can be used to provide soft session affinity based on HTTP headers, cookies or other properties. This load balancing policy is applicable only for HTTP connections. The affinity to a particular @@ -1417,10 +1407,8 @@ def get(resource_name: str, Structure is documented below. :param pulumi.Input[int] connection_draining_timeout_sec: Time for which instance will be drained (not accept new connections, but still work to finish started). - :param pulumi.Input[pulumi.InputType['RegionBackendServiceConnectionTrackingPolicyArgs']] connection_tracking_policy: Connection Tracking configuration for this BackendService. - This is available only for Layer 4 Internal Load Balancing and - Network Load Balancing. - Structure is documented below. + :param pulumi.Input[pulumi.InputType['RegionBackendServiceConnectionTrackingPolicyArgs']] connection_tracking_policy: Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + and Network Load Balancing. :param pulumi.Input[pulumi.InputType['RegionBackendServiceConsistentHashArgs']] consistent_hash: Consistent Hash-based load balancing can be used to provide soft session affinity based on HTTP headers, cookies or other properties. This load balancing policy is applicable only for HTTP connections. The affinity to a particular @@ -1578,10 +1566,8 @@ def connection_draining_timeout_sec(self) -> pulumi.Output[Optional[int]]: @pulumi.getter(name="connectionTrackingPolicy") def connection_tracking_policy(self) -> pulumi.Output[Optional['outputs.RegionBackendServiceConnectionTrackingPolicy']]: """ - Connection Tracking configuration for this BackendService. - This is available only for Layer 4 Internal Load Balancing and - Network Load Balancing. - Structure is documented below. + Connection Tracking configuration for this BackendService. This is available only for Layer 4 Internal Load Balancing + and Network Load Balancing. """ return pulumi.get(self, "connection_tracking_policy") diff --git a/sdk/python/pulumi_gcp/compute/region_disk.py b/sdk/python/pulumi_gcp/compute/region_disk.py index c7215a4e93..48b2937c0d 100644 --- a/sdk/python/pulumi_gcp/compute/region_disk.py +++ b/sdk/python/pulumi_gcp/compute/region_disk.py @@ -813,31 +813,6 @@ def __init__(__self__, type: Optional[pulumi.Input[str]] = None, __props__=None): """ - Persistent disks are durable storage devices that function similarly to - the physical disks in a desktop or a server. Compute Engine manages the - hardware behind these devices to ensure data redundancy and optimize - performance for you. Persistent disks are available as either standard - hard disk drives (HDD) or solid-state drives (SSD). - - Persistent disks are located independently from your virtual machine - instances, so you can detach or move persistent disks to keep your data - even after you delete your instances. Persistent disk performance scales - automatically with size, so you can resize your existing persistent disks - or add more persistent disks to an instance to meet your performance and - storage space requirements. - - Add a persistent disk to your instance when you need reliable and - affordable storage with consistent performance characteristics. - - To get more information about RegionDisk, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionDisks) - * How-to Guides - * [Adding or Resizing Regional Persistent Disks](https://cloud.google.com/compute/docs/disks/regional-persistent-disk) - - > **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw - state as plain-text. - ## Example Usage ### Region Disk Basic @@ -949,31 +924,6 @@ def __init__(__self__, args: RegionDiskArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Persistent disks are durable storage devices that function similarly to - the physical disks in a desktop or a server. Compute Engine manages the - hardware behind these devices to ensure data redundancy and optimize - performance for you. Persistent disks are available as either standard - hard disk drives (HDD) or solid-state drives (SSD). - - Persistent disks are located independently from your virtual machine - instances, so you can detach or move persistent disks to keep your data - even after you delete your instances. Persistent disk performance scales - automatically with size, so you can resize your existing persistent disks - or add more persistent disks to an instance to meet your performance and - storage space requirements. - - Add a persistent disk to your instance when you need reliable and - affordable storage with consistent performance characteristics. - - To get more information about RegionDisk, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionDisks) - * How-to Guides - * [Adding or Resizing Regional Persistent Disks](https://cloud.google.com/compute/docs/disks/regional-persistent-disk) - - > **Warning:** All arguments including `disk_encryption_key.raw_key` will be stored in the raw - state as plain-text. - ## Example Usage ### Region Disk Basic diff --git a/sdk/python/pulumi_gcp/compute/region_disk_resource_policy_attachment.py b/sdk/python/pulumi_gcp/compute/region_disk_resource_policy_attachment.py index 7e447549f8..0223fceb99 100644 --- a/sdk/python/pulumi_gcp/compute/region_disk_resource_policy_attachment.py +++ b/sdk/python/pulumi_gcp/compute/region_disk_resource_policy_attachment.py @@ -173,11 +173,6 @@ def __init__(__self__, region: Optional[pulumi.Input[str]] = None, __props__=None): """ - Adds existing resource policies to a disk. You can only add one policy - which will be applied to this disk for scheduling snapshot creation. - - > **Note:** This resource does not support zonal disks (`compute.Disk`). For zonal disks, please refer to the `compute.DiskResourcePolicyAttachment` resource. - ## Example Usage ### Region Disk Resource Policy Attachment Basic @@ -255,11 +250,6 @@ def __init__(__self__, args: RegionDiskResourcePolicyAttachmentArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Adds existing resource policies to a disk. You can only add one policy - which will be applied to this disk for scheduling snapshot creation. - - > **Note:** This resource does not support zonal disks (`compute.Disk`). For zonal disks, please refer to the `compute.DiskResourcePolicyAttachment` resource. - ## Example Usage ### Region Disk Resource Policy Attachment Basic diff --git a/sdk/python/pulumi_gcp/compute/region_instance_group_manager.py b/sdk/python/pulumi_gcp/compute/region_instance_group_manager.py index 4f7092f418..94e05007fb 100644 --- a/sdk/python/pulumi_gcp/compute/region_instance_group_manager.py +++ b/sdk/python/pulumi_gcp/compute/region_instance_group_manager.py @@ -83,9 +83,8 @@ def __init__(__self__, *, instance group. This value should always be explicitly set unless this resource is attached to an autoscaler, in which case it should never be set. Defaults to `0`. :param pulumi.Input['RegionInstanceGroupManagerUpdatePolicyArgs'] update_policy: The update policy for this managed instance group. Structure is documented below. For more information, see the [official documentation](https://cloud.google.com/compute/docs/instance-groups/updating-managed-instance-groups) and [API](https://cloud.google.com/compute/docs/reference/rest/beta/regionInstanceGroupManagers/patch) - :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, the provider will - continue trying until it times out. + :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. :param pulumi.Input[str] wait_for_instances_status: When used with `wait_for_instances` it specifies the status to wait for. When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is set, it will wait for the version target to be reached and any per instance configs to be effective as well as all @@ -377,9 +376,8 @@ def update_policy(self, value: Optional[pulumi.Input['RegionInstanceGroupManager @pulumi.getter(name="waitForInstances") def wait_for_instances(self) -> Optional[pulumi.Input[bool]]: """ - Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, the provider will - continue trying until it times out. + Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. """ return pulumi.get(self, "wait_for_instances") @@ -481,9 +479,8 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input['RegionInstanceGroupManagerVersionArgs']]] versions: Application versions managed by this instance group. Each version deals with a specific instance template, allowing canary release scenarios. Structure is documented below. - :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, the provider will - continue trying until it times out. + :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. :param pulumi.Input[str] wait_for_instances_status: When used with `wait_for_instances` it specifies the status to wait for. When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is set, it will wait for the version target to be reached and any per instance configs to be effective as well as all @@ -833,9 +830,8 @@ def versions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['RegionIns @pulumi.getter(name="waitForInstances") def wait_for_instances(self) -> Optional[pulumi.Input[bool]]: """ - Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, the provider will - continue trying until it times out. + Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. """ return pulumi.get(self, "wait_for_instances") @@ -1020,9 +1016,8 @@ def __init__(__self__, :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerVersionArgs']]]] versions: Application versions managed by this instance group. Each version deals with a specific instance template, allowing canary release scenarios. Structure is documented below. - :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, the provider will - continue trying until it times out. + :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. :param pulumi.Input[str] wait_for_instances_status: When used with `wait_for_instances` it specifies the status to wait for. When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is set, it will wait for the version target to be reached and any per instance configs to be effective as well as all @@ -1284,9 +1279,8 @@ def get(resource_name: str, :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RegionInstanceGroupManagerVersionArgs']]]] versions: Application versions managed by this instance group. Each version deals with a specific instance template, allowing canary release scenarios. Structure is documented below. - :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, the provider will - continue trying until it times out. + :param pulumi.Input[bool] wait_for_instances: Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. :param pulumi.Input[str] wait_for_instances_status: When used with `wait_for_instances` it specifies the status to wait for. When `STABLE` is specified this resource will wait until the instances are stable before returning. When `UPDATED` is set, it will wait for the version target to be reached and any per instance configs to be effective as well as all @@ -1529,9 +1523,8 @@ def versions(self) -> pulumi.Output[Sequence['outputs.RegionInstanceGroupManager @pulumi.getter(name="waitForInstances") def wait_for_instances(self) -> pulumi.Output[Optional[bool]]: """ - Whether to wait for all instances to be created/updated before - returning. Note that if this is set to true and the operation does not succeed, the provider will - continue trying until it times out. + Whether to wait for all instances to be created/updated before returning. Note that if this is set to true and the + operation does not succeed, Terraform will continue trying until it times out. """ return pulumi.get(self, "wait_for_instances") diff --git a/sdk/python/pulumi_gcp/compute/region_network_endpoint_group.py b/sdk/python/pulumi_gcp/compute/region_network_endpoint_group.py index d205ca0384..3667ac1b5b 100644 --- a/sdk/python/pulumi_gcp/compute/region_network_endpoint_group.py +++ b/sdk/python/pulumi_gcp/compute/region_network_endpoint_group.py @@ -533,6 +533,10 @@ def __init__(__self__, """ A regional NEG that can support Serverless Products. + Recreating a region network endpoint group that's in use by another resource will give a + `resourceInUseByAnotherResource` error. Use `lifecycle.create_before_destroy` + to avoid this type of error. + To get more information about RegionNetworkEndpointGroup, see: * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/regionNetworkEndpointGroups) @@ -728,6 +732,10 @@ def __init__(__self__, """ A regional NEG that can support Serverless Products. + Recreating a region network endpoint group that's in use by another resource will give a + `resourceInUseByAnotherResource` error. Use `lifecycle.create_before_destroy` + to avoid this type of error. + To get more information about RegionNetworkEndpointGroup, see: * [API documentation](https://cloud.google.com/compute/docs/reference/rest/beta/regionNetworkEndpointGroups) diff --git a/sdk/python/pulumi_gcp/compute/region_per_instance_config.py b/sdk/python/pulumi_gcp/compute/region_per_instance_config.py index 7d575f5a14..e60627e2b3 100644 --- a/sdk/python/pulumi_gcp/compute/region_per_instance_config.py +++ b/sdk/python/pulumi_gcp/compute/region_per_instance_config.py @@ -366,70 +366,6 @@ def __init__(__self__, * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs) ## Example Usage - ### Stateful Rigm - - ```python - import pulumi - import pulumi_gcp as gcp - - my_image = gcp.compute.get_image(family="debian-11", - project="debian-cloud") - igm_basic = gcp.compute.InstanceTemplate("igm-basic", - machine_type="e2-medium", - can_ip_forward=False, - tags=[ - "foo", - "bar", - ], - disks=[gcp.compute.InstanceTemplateDiskArgs( - source_image=my_image.self_link, - auto_delete=True, - boot=True, - )], - network_interfaces=[gcp.compute.InstanceTemplateNetworkInterfaceArgs( - network="default", - )], - service_account=gcp.compute.InstanceTemplateServiceAccountArgs( - scopes=[ - "userinfo-email", - "compute-ro", - "storage-ro", - ], - )) - rigm = gcp.compute.RegionInstanceGroupManager("rigm", - description="Demo test instance group manager", - versions=[gcp.compute.RegionInstanceGroupManagerVersionArgs( - name="prod", - instance_template=igm_basic.self_link, - )], - update_policy=gcp.compute.RegionInstanceGroupManagerUpdatePolicyArgs( - type="OPPORTUNISTIC", - instance_redistribution_type="NONE", - minimal_action="RESTART", - ), - base_instance_name="rigm", - region="us-central1", - target_size=2) - default = gcp.compute.Disk("default", - type="pd-ssd", - zone="us-central1-a", - image="debian-11-bullseye-v20220719", - physical_block_size_bytes=4096) - with_disk = gcp.compute.RegionPerInstanceConfig("withDisk", - region=google_compute_region_instance_group_manager["igm"]["region"], - region_instance_group_manager=rigm.name, - preserved_state=gcp.compute.RegionPerInstanceConfigPreservedStateArgs( - metadata={ - "foo": "bar", - "instance_template": igm_basic.self_link, - }, - disks=[gcp.compute.RegionPerInstanceConfigPreservedStateDiskArgs( - device_name="my-stateful-disk", - source=default.id, - mode="READ_ONLY", - )], - )) - ``` ## Import @@ -494,70 +430,6 @@ def __init__(__self__, * [Official Documentation](https://cloud.google.com/compute/docs/instance-groups/stateful-migs#per-instance_configs) ## Example Usage - ### Stateful Rigm - - ```python - import pulumi - import pulumi_gcp as gcp - - my_image = gcp.compute.get_image(family="debian-11", - project="debian-cloud") - igm_basic = gcp.compute.InstanceTemplate("igm-basic", - machine_type="e2-medium", - can_ip_forward=False, - tags=[ - "foo", - "bar", - ], - disks=[gcp.compute.InstanceTemplateDiskArgs( - source_image=my_image.self_link, - auto_delete=True, - boot=True, - )], - network_interfaces=[gcp.compute.InstanceTemplateNetworkInterfaceArgs( - network="default", - )], - service_account=gcp.compute.InstanceTemplateServiceAccountArgs( - scopes=[ - "userinfo-email", - "compute-ro", - "storage-ro", - ], - )) - rigm = gcp.compute.RegionInstanceGroupManager("rigm", - description="Demo test instance group manager", - versions=[gcp.compute.RegionInstanceGroupManagerVersionArgs( - name="prod", - instance_template=igm_basic.self_link, - )], - update_policy=gcp.compute.RegionInstanceGroupManagerUpdatePolicyArgs( - type="OPPORTUNISTIC", - instance_redistribution_type="NONE", - minimal_action="RESTART", - ), - base_instance_name="rigm", - region="us-central1", - target_size=2) - default = gcp.compute.Disk("default", - type="pd-ssd", - zone="us-central1-a", - image="debian-11-bullseye-v20220719", - physical_block_size_bytes=4096) - with_disk = gcp.compute.RegionPerInstanceConfig("withDisk", - region=google_compute_region_instance_group_manager["igm"]["region"], - region_instance_group_manager=rigm.name, - preserved_state=gcp.compute.RegionPerInstanceConfigPreservedStateArgs( - metadata={ - "foo": "bar", - "instance_template": igm_basic.self_link, - }, - disks=[gcp.compute.RegionPerInstanceConfigPreservedStateDiskArgs( - device_name="my-stateful-disk", - source=default.id, - mode="READ_ONLY", - )], - )) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/compute/region_ssl_certificate.py b/sdk/python/pulumi_gcp/compute/region_ssl_certificate.py index 20ca029377..312e37cbe9 100644 --- a/sdk/python/pulumi_gcp/compute/region_ssl_certificate.py +++ b/sdk/python/pulumi_gcp/compute/region_ssl_certificate.py @@ -379,19 +379,6 @@ def __init__(__self__, region: Optional[pulumi.Input[str]] = None, __props__=None): """ - A RegionSslCertificate resource, used for HTTPS load balancing. This resource - provides a mechanism to upload an SSL key and certificate to - the load balancer to serve secure connections from the user. - - To get more information about RegionSslCertificate, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionSslCertificates) - * How-to Guides - * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates) - - > **Warning:** All arguments including `certificate` and `private_key` will be stored in the raw - state as plain-text. - ## Example Usage ### Region Ssl Certificate Basic @@ -484,19 +471,6 @@ def __init__(__self__, args: RegionSslCertificateArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A RegionSslCertificate resource, used for HTTPS load balancing. This resource - provides a mechanism to upload an SSL key and certificate to - the load balancer to serve secure connections from the user. - - To get more information about RegionSslCertificate, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/regionSslCertificates) - * How-to Guides - * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates) - - > **Warning:** All arguments including `certificate` and `private_key` will be stored in the raw - state as plain-text. - ## Example Usage ### Region Ssl Certificate Basic diff --git a/sdk/python/pulumi_gcp/compute/router_nat.py b/sdk/python/pulumi_gcp/compute/router_nat.py index 47395b893b..47f77428cf 100644 --- a/sdk/python/pulumi_gcp/compute/router_nat.py +++ b/sdk/python/pulumi_gcp/compute/router_nat.py @@ -33,6 +33,7 @@ def __init__(__self__, *, rules: Optional[pulumi.Input[Sequence[pulumi.Input['RouterNatRuleArgs']]]] = None, subnetworks: Optional[pulumi.Input[Sequence[pulumi.Input['RouterNatSubnetworkArgs']]]] = None, tcp_established_idle_timeout_sec: Optional[pulumi.Input[int]] = None, + tcp_time_wait_timeout_sec: Optional[pulumi.Input[int]] = None, tcp_transitory_idle_timeout_sec: Optional[pulumi.Input[int]] = None, udp_idle_timeout_sec: Optional[pulumi.Input[int]] = None): """ @@ -83,6 +84,8 @@ def __init__(__self__, *, Structure is documented below. :param pulumi.Input[int] tcp_established_idle_timeout_sec: Timeout (in seconds) for TCP established connections. Defaults to 1200s if not set. + :param pulumi.Input[int] tcp_time_wait_timeout_sec: Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + Defaults to 120s if not set. :param pulumi.Input[int] tcp_transitory_idle_timeout_sec: Timeout (in seconds) for TCP transitory connections. Defaults to 30s if not set. :param pulumi.Input[int] udp_idle_timeout_sec: Timeout (in seconds) for UDP connections. Defaults to 30s if not set. @@ -118,6 +121,8 @@ def __init__(__self__, *, pulumi.set(__self__, "subnetworks", subnetworks) if tcp_established_idle_timeout_sec is not None: pulumi.set(__self__, "tcp_established_idle_timeout_sec", tcp_established_idle_timeout_sec) + if tcp_time_wait_timeout_sec is not None: + pulumi.set(__self__, "tcp_time_wait_timeout_sec", tcp_time_wait_timeout_sec) if tcp_transitory_idle_timeout_sec is not None: pulumi.set(__self__, "tcp_transitory_idle_timeout_sec", tcp_transitory_idle_timeout_sec) if udp_idle_timeout_sec is not None: @@ -356,6 +361,19 @@ def tcp_established_idle_timeout_sec(self) -> Optional[pulumi.Input[int]]: def tcp_established_idle_timeout_sec(self, value: Optional[pulumi.Input[int]]): pulumi.set(self, "tcp_established_idle_timeout_sec", value) + @property + @pulumi.getter(name="tcpTimeWaitTimeoutSec") + def tcp_time_wait_timeout_sec(self) -> Optional[pulumi.Input[int]]: + """ + Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + Defaults to 120s if not set. + """ + return pulumi.get(self, "tcp_time_wait_timeout_sec") + + @tcp_time_wait_timeout_sec.setter + def tcp_time_wait_timeout_sec(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "tcp_time_wait_timeout_sec", value) + @property @pulumi.getter(name="tcpTransitoryIdleTimeoutSec") def tcp_transitory_idle_timeout_sec(self) -> Optional[pulumi.Input[int]]: @@ -402,6 +420,7 @@ def __init__(__self__, *, source_subnetwork_ip_ranges_to_nat: Optional[pulumi.Input[str]] = None, subnetworks: Optional[pulumi.Input[Sequence[pulumi.Input['RouterNatSubnetworkArgs']]]] = None, tcp_established_idle_timeout_sec: Optional[pulumi.Input[int]] = None, + tcp_time_wait_timeout_sec: Optional[pulumi.Input[int]] = None, tcp_transitory_idle_timeout_sec: Optional[pulumi.Input[int]] = None, udp_idle_timeout_sec: Optional[pulumi.Input[int]] = None): """ @@ -452,6 +471,8 @@ def __init__(__self__, *, Structure is documented below. :param pulumi.Input[int] tcp_established_idle_timeout_sec: Timeout (in seconds) for TCP established connections. Defaults to 1200s if not set. + :param pulumi.Input[int] tcp_time_wait_timeout_sec: Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + Defaults to 120s if not set. :param pulumi.Input[int] tcp_transitory_idle_timeout_sec: Timeout (in seconds) for TCP transitory connections. Defaults to 30s if not set. :param pulumi.Input[int] udp_idle_timeout_sec: Timeout (in seconds) for UDP connections. Defaults to 30s if not set. @@ -490,6 +511,8 @@ def __init__(__self__, *, pulumi.set(__self__, "subnetworks", subnetworks) if tcp_established_idle_timeout_sec is not None: pulumi.set(__self__, "tcp_established_idle_timeout_sec", tcp_established_idle_timeout_sec) + if tcp_time_wait_timeout_sec is not None: + pulumi.set(__self__, "tcp_time_wait_timeout_sec", tcp_time_wait_timeout_sec) if tcp_transitory_idle_timeout_sec is not None: pulumi.set(__self__, "tcp_transitory_idle_timeout_sec", tcp_transitory_idle_timeout_sec) if udp_idle_timeout_sec is not None: @@ -728,6 +751,19 @@ def tcp_established_idle_timeout_sec(self) -> Optional[pulumi.Input[int]]: def tcp_established_idle_timeout_sec(self, value: Optional[pulumi.Input[int]]): pulumi.set(self, "tcp_established_idle_timeout_sec", value) + @property + @pulumi.getter(name="tcpTimeWaitTimeoutSec") + def tcp_time_wait_timeout_sec(self) -> Optional[pulumi.Input[int]]: + """ + Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + Defaults to 120s if not set. + """ + return pulumi.get(self, "tcp_time_wait_timeout_sec") + + @tcp_time_wait_timeout_sec.setter + def tcp_time_wait_timeout_sec(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "tcp_time_wait_timeout_sec", value) + @property @pulumi.getter(name="tcpTransitoryIdleTimeoutSec") def tcp_transitory_idle_timeout_sec(self) -> Optional[pulumi.Input[int]]: @@ -776,6 +812,7 @@ def __init__(__self__, source_subnetwork_ip_ranges_to_nat: Optional[pulumi.Input[str]] = None, subnetworks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RouterNatSubnetworkArgs']]]]] = None, tcp_established_idle_timeout_sec: Optional[pulumi.Input[int]] = None, + tcp_time_wait_timeout_sec: Optional[pulumi.Input[int]] = None, tcp_transitory_idle_timeout_sec: Optional[pulumi.Input[int]] = None, udp_idle_timeout_sec: Optional[pulumi.Input[int]] = None, __props__=None): @@ -953,6 +990,8 @@ def __init__(__self__, Structure is documented below. :param pulumi.Input[int] tcp_established_idle_timeout_sec: Timeout (in seconds) for TCP established connections. Defaults to 1200s if not set. + :param pulumi.Input[int] tcp_time_wait_timeout_sec: Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + Defaults to 120s if not set. :param pulumi.Input[int] tcp_transitory_idle_timeout_sec: Timeout (in seconds) for TCP transitory connections. Defaults to 30s if not set. :param pulumi.Input[int] udp_idle_timeout_sec: Timeout (in seconds) for UDP connections. Defaults to 30s if not set. @@ -1121,6 +1160,7 @@ def _internal_init(__self__, source_subnetwork_ip_ranges_to_nat: Optional[pulumi.Input[str]] = None, subnetworks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RouterNatSubnetworkArgs']]]]] = None, tcp_established_idle_timeout_sec: Optional[pulumi.Input[int]] = None, + tcp_time_wait_timeout_sec: Optional[pulumi.Input[int]] = None, tcp_transitory_idle_timeout_sec: Optional[pulumi.Input[int]] = None, udp_idle_timeout_sec: Optional[pulumi.Input[int]] = None, __props__=None): @@ -1155,6 +1195,7 @@ def _internal_init(__self__, __props__.__dict__["source_subnetwork_ip_ranges_to_nat"] = source_subnetwork_ip_ranges_to_nat __props__.__dict__["subnetworks"] = subnetworks __props__.__dict__["tcp_established_idle_timeout_sec"] = tcp_established_idle_timeout_sec + __props__.__dict__["tcp_time_wait_timeout_sec"] = tcp_time_wait_timeout_sec __props__.__dict__["tcp_transitory_idle_timeout_sec"] = tcp_transitory_idle_timeout_sec __props__.__dict__["udp_idle_timeout_sec"] = udp_idle_timeout_sec super(RouterNat, __self__).__init__( @@ -1184,6 +1225,7 @@ def get(resource_name: str, source_subnetwork_ip_ranges_to_nat: Optional[pulumi.Input[str]] = None, subnetworks: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['RouterNatSubnetworkArgs']]]]] = None, tcp_established_idle_timeout_sec: Optional[pulumi.Input[int]] = None, + tcp_time_wait_timeout_sec: Optional[pulumi.Input[int]] = None, tcp_transitory_idle_timeout_sec: Optional[pulumi.Input[int]] = None, udp_idle_timeout_sec: Optional[pulumi.Input[int]] = None) -> 'RouterNat': """ @@ -1239,6 +1281,8 @@ def get(resource_name: str, Structure is documented below. :param pulumi.Input[int] tcp_established_idle_timeout_sec: Timeout (in seconds) for TCP established connections. Defaults to 1200s if not set. + :param pulumi.Input[int] tcp_time_wait_timeout_sec: Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + Defaults to 120s if not set. :param pulumi.Input[int] tcp_transitory_idle_timeout_sec: Timeout (in seconds) for TCP transitory connections. Defaults to 30s if not set. :param pulumi.Input[int] udp_idle_timeout_sec: Timeout (in seconds) for UDP connections. Defaults to 30s if not set. @@ -1264,6 +1308,7 @@ def get(resource_name: str, __props__.__dict__["source_subnetwork_ip_ranges_to_nat"] = source_subnetwork_ip_ranges_to_nat __props__.__dict__["subnetworks"] = subnetworks __props__.__dict__["tcp_established_idle_timeout_sec"] = tcp_established_idle_timeout_sec + __props__.__dict__["tcp_time_wait_timeout_sec"] = tcp_time_wait_timeout_sec __props__.__dict__["tcp_transitory_idle_timeout_sec"] = tcp_transitory_idle_timeout_sec __props__.__dict__["udp_idle_timeout_sec"] = udp_idle_timeout_sec return RouterNat(resource_name, opts=opts, __props__=__props__) @@ -1433,6 +1478,15 @@ def tcp_established_idle_timeout_sec(self) -> pulumi.Output[Optional[int]]: """ return pulumi.get(self, "tcp_established_idle_timeout_sec") + @property + @pulumi.getter(name="tcpTimeWaitTimeoutSec") + def tcp_time_wait_timeout_sec(self) -> pulumi.Output[Optional[int]]: + """ + Timeout (in seconds) for TCP connections that are in TIME_WAIT state. + Defaults to 120s if not set. + """ + return pulumi.get(self, "tcp_time_wait_timeout_sec") + @property @pulumi.getter(name="tcpTransitoryIdleTimeoutSec") def tcp_transitory_idle_timeout_sec(self) -> pulumi.Output[Optional[int]]: diff --git a/sdk/python/pulumi_gcp/compute/security_policy.py b/sdk/python/pulumi_gcp/compute/security_policy.py index f02eb5008f..35719a3624 100644 --- a/sdk/python/pulumi_gcp/compute/security_policy.py +++ b/sdk/python/pulumi_gcp/compute/security_policy.py @@ -198,7 +198,7 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input['SecurityPolicyRuleArgs']]] rules: The set of rules that belong to this policy. There must always be a default rule (rule with priority 2147483647 and match "\\*"). If no rules are provided when creating a security policy, a default rule with action "allow" will be added. Structure is documented below. - :param pulumi.Input[str] self_link: The URI of the created resourc + :param pulumi.Input[str] self_link: The URI of the created resource. :param pulumi.Input[str] type: The type indicates the intended use of the security policy. This field can be set only at resource creation time. * CLOUD_ARMOR - Cloud Armor backend security policies can be configured to filter incoming HTTP requests targeting backend services. They filter requests before they hit the origin servers. @@ -333,7 +333,7 @@ def rules(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['SecurityPoli @pulumi.getter(name="selfLink") def self_link(self) -> Optional[pulumi.Input[str]]: """ - The URI of the created resourc + The URI of the created resource. """ return pulumi.get(self, "self_link") @@ -376,12 +376,6 @@ def __init__(__self__, type: Optional[pulumi.Input[str]] = None, __props__=None): """ - A Security Policy defines an IP blacklist or whitelist that protects load balanced Google Cloud services by denying or permitting traffic from specified IP ranges. For more information - see the [official documentation](https://cloud.google.com/armor/docs/configure-security-policies) - and the [API](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies). - - Security Policy is used by google_compute_backend_service. - ## Example Usage ```python @@ -479,6 +473,22 @@ def __init__(__self__, ]) ``` + ## Import + + Security policies can be imported using any of the following formats + + ```sh + $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy projects/{{project}}/global/securityPolicies/{{name}} + ``` + + ```sh + $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{project}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{name}} + ``` + :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[pulumi.InputType['SecurityPolicyAdaptiveProtectionConfigArgs']] adaptive_protection_config: Configuration for [Google Cloud Armor Adaptive Protection](https://cloud.google.com/armor/docs/adaptive-protection-overview?hl=en). Structure is documented below. @@ -508,12 +518,6 @@ def __init__(__self__, args: Optional[SecurityPolicyArgs] = None, opts: Optional[pulumi.ResourceOptions] = None): """ - A Security Policy defines an IP blacklist or whitelist that protects load balanced Google Cloud services by denying or permitting traffic from specified IP ranges. For more information - see the [official documentation](https://cloud.google.com/armor/docs/configure-security-policies) - and the [API](https://cloud.google.com/compute/docs/reference/rest/beta/securityPolicies). - - Security Policy is used by google_compute_backend_service. - ## Example Usage ```python @@ -611,6 +615,22 @@ def __init__(__self__, ]) ``` + ## Import + + Security policies can be imported using any of the following formats + + ```sh + $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy projects/{{project}}/global/securityPolicies/{{name}} + ``` + + ```sh + $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{project}}/{{name}} + ``` + + ```sh + $ pulumi import gcp:compute/securityPolicy:SecurityPolicy policy {{name}} + ``` + :param str resource_name: The name of the resource. :param SecurityPolicyArgs args: The arguments to use to populate this resource's properties. :param pulumi.ResourceOptions opts: Options for the resource. @@ -692,7 +712,7 @@ def get(resource_name: str, :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['SecurityPolicyRuleArgs']]]] rules: The set of rules that belong to this policy. There must always be a default rule (rule with priority 2147483647 and match "\\*"). If no rules are provided when creating a security policy, a default rule with action "allow" will be added. Structure is documented below. - :param pulumi.Input[str] self_link: The URI of the created resourc + :param pulumi.Input[str] self_link: The URI of the created resource. :param pulumi.Input[str] type: The type indicates the intended use of the security policy. This field can be set only at resource creation time. * CLOUD_ARMOR - Cloud Armor backend security policies can be configured to filter incoming HTTP requests targeting backend services. They filter requests before they hit the origin servers. @@ -790,7 +810,7 @@ def rules(self) -> pulumi.Output[Sequence['outputs.SecurityPolicyRule']]: @pulumi.getter(name="selfLink") def self_link(self) -> pulumi.Output[str]: """ - The URI of the created resourc + The URI of the created resource. """ return pulumi.get(self, "self_link") diff --git a/sdk/python/pulumi_gcp/compute/security_scan_config.py b/sdk/python/pulumi_gcp/compute/security_scan_config.py index b2508ce80c..5e975a5006 100644 --- a/sdk/python/pulumi_gcp/compute/security_scan_config.py +++ b/sdk/python/pulumi_gcp/compute/security_scan_config.py @@ -426,16 +426,6 @@ def __init__(__self__, user_agent: Optional[pulumi.Input[str]] = None, __props__=None): """ - A ScanConfig resource contains the configurations to launch a scan. - - To get more information about ScanConfig, see: - - * [API documentation](https://cloud.google.com/security-scanner/docs/reference/rest/v1beta/projects.scanConfigs) - * How-to Guides - * [Using Cloud Security Scanner](https://cloud.google.com/security-scanner/docs/scanning) - - > **Warning:** All arguments including `authentication.google_account.password` and `authentication.custom_account.password` will be stored in the raw state as plain-text. - ## Example Usage ### Scan Config Basic @@ -445,7 +435,7 @@ def __init__(__self__, scanner_static_ip = gcp.compute.Address("scannerStaticIp", opts=pulumi.ResourceOptions(provider=google_beta)) scan_config = gcp.compute.SecurityScanConfig("scan-config", - display_name="scan-config", + display_name="terraform-scan-config", starting_urls=[scanner_static_ip.address.apply(lambda address: f"http://{address}")], target_platforms=["COMPUTE"], opts=pulumi.ResourceOptions(provider=google_beta)) @@ -498,16 +488,6 @@ def __init__(__self__, args: SecurityScanConfigArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A ScanConfig resource contains the configurations to launch a scan. - - To get more information about ScanConfig, see: - - * [API documentation](https://cloud.google.com/security-scanner/docs/reference/rest/v1beta/projects.scanConfigs) - * How-to Guides - * [Using Cloud Security Scanner](https://cloud.google.com/security-scanner/docs/scanning) - - > **Warning:** All arguments including `authentication.google_account.password` and `authentication.custom_account.password` will be stored in the raw state as plain-text. - ## Example Usage ### Scan Config Basic @@ -517,7 +497,7 @@ def __init__(__self__, scanner_static_ip = gcp.compute.Address("scannerStaticIp", opts=pulumi.ResourceOptions(provider=google_beta)) scan_config = gcp.compute.SecurityScanConfig("scan-config", - display_name="scan-config", + display_name="terraform-scan-config", starting_urls=[scanner_static_ip.address.apply(lambda address: f"http://{address}")], target_platforms=["COMPUTE"], opts=pulumi.ResourceOptions(provider=google_beta)) diff --git a/sdk/python/pulumi_gcp/compute/snapshot.py b/sdk/python/pulumi_gcp/compute/snapshot.py index ae736b4f98..3472042c3e 100644 --- a/sdk/python/pulumi_gcp/compute/snapshot.py +++ b/sdk/python/pulumi_gcp/compute/snapshot.py @@ -589,28 +589,6 @@ def __init__(__self__, zone: Optional[pulumi.Input[str]] = None, __props__=None): """ - Represents a Persistent Disk Snapshot resource. - - Use snapshots to back up data from your persistent disks. Snapshots are - different from public images and custom images, which are used primarily - to create instances or configure instance templates. Snapshots are useful - for periodic backup of the data on your persistent disks. You can create - snapshots from persistent disks even while they are attached to running - instances. - - Snapshots are incremental, so you can create regular snapshots on a - persistent disk faster and at a much lower cost than if you regularly - created a full image of the disk. - - To get more information about Snapshot, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/snapshots) - * How-to Guides - * [Official Documentation](https://cloud.google.com/compute/docs/disks/create-snapshots) - - > **Warning:** All arguments including `snapshot_encryption_key.raw_key` and `source_disk_encryption_key.raw_key` will be stored in the raw - state as plain-text. - ## Example Usage ### Snapshot Basic @@ -717,28 +695,6 @@ def __init__(__self__, args: SnapshotArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Represents a Persistent Disk Snapshot resource. - - Use snapshots to back up data from your persistent disks. Snapshots are - different from public images and custom images, which are used primarily - to create instances or configure instance templates. Snapshots are useful - for periodic backup of the data on your persistent disks. You can create - snapshots from persistent disks even while they are attached to running - instances. - - Snapshots are incremental, so you can create regular snapshots on a - persistent disk faster and at a much lower cost than if you regularly - created a full image of the disk. - - To get more information about Snapshot, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/snapshots) - * How-to Guides - * [Official Documentation](https://cloud.google.com/compute/docs/disks/create-snapshots) - - > **Warning:** All arguments including `snapshot_encryption_key.raw_key` and `source_disk_encryption_key.raw_key` will be stored in the raw - state as plain-text. - ## Example Usage ### Snapshot Basic diff --git a/sdk/python/pulumi_gcp/compute/ssl_certificate.py b/sdk/python/pulumi_gcp/compute/ssl_certificate.py index 684ae733b5..5c4b94b266 100644 --- a/sdk/python/pulumi_gcp/compute/ssl_certificate.py +++ b/sdk/python/pulumi_gcp/compute/ssl_certificate.py @@ -342,19 +342,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - An SslCertificate resource, used for HTTPS load balancing. This resource - provides a mechanism to upload an SSL key and certificate to - the load balancer to serve secure connections from the user. - - To get more information about SslCertificate, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/sslCertificates) - * How-to Guides - * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates) - - > **Warning:** All arguments including `certificate` and `private_key` will be stored in the raw - state as plain-text. - ## Example Usage ### Ssl Certificate Basic @@ -439,19 +426,6 @@ def __init__(__self__, args: SSLCertificateArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - An SslCertificate resource, used for HTTPS load balancing. This resource - provides a mechanism to upload an SSL key and certificate to - the load balancer to serve secure connections from the user. - - To get more information about SslCertificate, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/sslCertificates) - * How-to Guides - * [Official Documentation](https://cloud.google.com/load-balancing/docs/ssl-certificates) - - > **Warning:** All arguments including `certificate` and `private_key` will be stored in the raw - state as plain-text. - ## Example Usage ### Ssl Certificate Basic diff --git a/sdk/python/pulumi_gcp/compute/subnetwork.py b/sdk/python/pulumi_gcp/compute/subnetwork.py index ba5fc422b7..37f179c8aa 100644 --- a/sdk/python/pulumi_gcp/compute/subnetwork.py +++ b/sdk/python/pulumi_gcp/compute/subnetwork.py @@ -72,11 +72,12 @@ def __init__(__self__, *, for Internal HTTP(S) Load Balancing. A BACKUP subnetwork is one that is ready to be promoted to ACTIVE or is currently draining. Possible values are `ACTIVE` and `BACKUP`. - :param pulumi.Input[Sequence[pulumi.Input['SubnetworkSecondaryIpRangeArgs']]] secondary_ip_ranges: An array of configurations for secondary IP ranges for VM instances - contained in this subnetwork. The primary IP of such VM must belong - to the primary ipCidrRange of the subnetwork. The alias IPs may belong - to either primary or secondary ranges. - Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input['SubnetworkSecondaryIpRangeArgs']]] secondary_ip_ranges: An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + syntax: 'example=[]' For more details about this behavior, see [this + section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). :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` and `IPV4_IPV6`. @@ -284,11 +285,12 @@ def role(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="secondaryIpRanges") def secondary_ip_ranges(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['SubnetworkSecondaryIpRangeArgs']]]]: """ - An array of configurations for secondary IP ranges for VM instances - contained in this subnetwork. The primary IP of such VM must belong - to the primary ipCidrRange of the subnetwork. The alias IPs may belong - to either primary or secondary ranges. - Structure is documented below. + An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + syntax: 'example=[]' For more details about this behavior, see [this + section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). """ return pulumi.get(self, "secondary_ip_ranges") @@ -382,11 +384,12 @@ def __init__(__self__, *, for Internal HTTP(S) Load Balancing. A BACKUP subnetwork is one that is ready to be promoted to ACTIVE or is currently draining. Possible values are `ACTIVE` and `BACKUP`. - :param pulumi.Input[Sequence[pulumi.Input['SubnetworkSecondaryIpRangeArgs']]] secondary_ip_ranges: An array of configurations for secondary IP ranges for VM instances - contained in this subnetwork. The primary IP of such VM must belong - to the primary ipCidrRange of the subnetwork. The alias IPs may belong - to either primary or secondary ranges. - Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input['SubnetworkSecondaryIpRangeArgs']]] secondary_ip_ranges: An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + syntax: 'example=[]' For more details about this behavior, see [this + section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). :param pulumi.Input[str] self_link: The URI of the created resource. :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. @@ -673,11 +676,12 @@ def role(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="secondaryIpRanges") def secondary_ip_ranges(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['SubnetworkSecondaryIpRangeArgs']]]]: """ - An array of configurations for secondary IP ranges for VM instances - contained in this subnetwork. The primary IP of such VM must belong - to the primary ipCidrRange of the subnetwork. The alias IPs may belong - to either primary or secondary ranges. - Structure is documented below. + An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + syntax: 'example=[]' For more details about this behavior, see [this + section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). """ return pulumi.get(self, "secondary_ip_ranges") @@ -906,11 +910,12 @@ def __init__(__self__, for Internal HTTP(S) Load Balancing. A BACKUP subnetwork is one that is ready to be promoted to ACTIVE or is currently draining. Possible values are `ACTIVE` and `BACKUP`. - :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['SubnetworkSecondaryIpRangeArgs']]]] secondary_ip_ranges: An array of configurations for secondary IP ranges for VM instances - contained in this subnetwork. The primary IP of such VM must belong - to the primary ipCidrRange of the subnetwork. The alias IPs may belong - to either primary or secondary ranges. - Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['SubnetworkSecondaryIpRangeArgs']]]] secondary_ip_ranges: An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + syntax: 'example=[]' For more details about this behavior, see [this + section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). :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` and `IPV4_IPV6`. @@ -1198,11 +1203,12 @@ def get(resource_name: str, for Internal HTTP(S) Load Balancing. A BACKUP subnetwork is one that is ready to be promoted to ACTIVE or is currently draining. Possible values are `ACTIVE` and `BACKUP`. - :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['SubnetworkSecondaryIpRangeArgs']]]] secondary_ip_ranges: An array of configurations for secondary IP ranges for VM instances - contained in this subnetwork. The primary IP of such VM must belong - to the primary ipCidrRange of the subnetwork. The alias IPs may belong - to either primary or secondary ranges. - Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['SubnetworkSecondaryIpRangeArgs']]]] secondary_ip_ranges: An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + syntax: 'example=[]' For more details about this behavior, see [this + section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). :param pulumi.Input[str] self_link: The URI of the created resource. :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. @@ -1403,11 +1409,12 @@ def role(self) -> pulumi.Output[Optional[str]]: @pulumi.getter(name="secondaryIpRanges") def secondary_ip_ranges(self) -> pulumi.Output[Sequence['outputs.SubnetworkSecondaryIpRange']]: """ - An array of configurations for secondary IP ranges for VM instances - contained in this subnetwork. The primary IP of such VM must belong - to the primary ipCidrRange of the subnetwork. The alias IPs may belong - to either primary or secondary ranges. - Structure is documented below. + An array of configurations for secondary IP ranges for VM instances contained in this subnetwork. The primary IP of such + VM must belong to the primary ipCidrRange of the subnetwork. The alias IPs may belong to either primary or secondary + ranges. **Note**: This field uses [attr-as-block mode](https://www.terraform.io/docs/configuration/attr-as-blocks.html) + to avoid breaking users during the 0.12 upgrade. To explicitly send a list of zero objects you must use the following + syntax: 'example=[]' For more details about this behavior, see [this + section](https://www.terraform.io/docs/configuration/attr-as-blocks.html#defining-a-fixed-object-collection-value). """ return pulumi.get(self, "secondary_ip_ranges") diff --git a/sdk/python/pulumi_gcp/compute/target_instance.py b/sdk/python/pulumi_gcp/compute/target_instance.py index 897f126061..45eac12702 100644 --- a/sdk/python/pulumi_gcp/compute/target_instance.py +++ b/sdk/python/pulumi_gcp/compute/target_instance.py @@ -41,7 +41,8 @@ def __init__(__self__, *, Currently only NO_NAT (default value) is supported. Default value is `NO_NAT`. Possible values are `NO_NAT`. - :param pulumi.Input[str] network: The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + :param pulumi.Input[str] network: The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + the network that the default network interface belongs to. :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] zone: URL of the zone where the target instance resides. @@ -126,7 +127,8 @@ def nat_policy(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def network(self) -> Optional[pulumi.Input[str]]: """ - The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + the network that the default network interface belongs to. """ return pulumi.get(self, "network") @@ -193,7 +195,8 @@ def __init__(__self__, *, Currently only NO_NAT (default value) is supported. Default value is `NO_NAT`. Possible values are `NO_NAT`. - :param pulumi.Input[str] network: The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + :param pulumi.Input[str] network: The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + the network that the default network interface belongs to. :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] self_link: The URI of the created resource. @@ -296,7 +299,8 @@ def nat_policy(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def network(self) -> Optional[pulumi.Input[str]]: """ - The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + the network that the default network interface belongs to. """ return pulumi.get(self, "network") @@ -458,7 +462,8 @@ def __init__(__self__, Currently only NO_NAT (default value) is supported. Default value is `NO_NAT`. Possible values are `NO_NAT`. - :param pulumi.Input[str] network: The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + :param pulumi.Input[str] network: The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + the network that the default network interface belongs to. :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] zone: URL of the zone where the target instance resides. @@ -639,7 +644,8 @@ def get(resource_name: str, Currently only NO_NAT (default value) is supported. Default value is `NO_NAT`. Possible values are `NO_NAT`. - :param pulumi.Input[str] network: The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + :param pulumi.Input[str] network: The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + the network that the default network interface belongs to. :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] self_link: The URI of the created resource. @@ -718,7 +724,8 @@ def nat_policy(self) -> pulumi.Output[Optional[str]]: @pulumi.getter def network(self) -> pulumi.Output[Optional[str]]: """ - The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to the network that the default network interface belongs to. + The URL of the network this target instance uses to forward traffic. If not specified, the traffic will be forwarded to + the network that the default network interface belongs to. """ return pulumi.get(self, "network") diff --git a/sdk/python/pulumi_gcp/compute/target_pool.py b/sdk/python/pulumi_gcp/compute/target_pool.py index f9f7bb2894..7b254b75fe 100644 --- a/sdk/python/pulumi_gcp/compute/target_pool.py +++ b/sdk/python/pulumi_gcp/compute/target_pool.py @@ -32,11 +32,9 @@ def __init__(__self__, *, backup pool (which must also be set). :param pulumi.Input[str] health_checks: List of zero or one health check name or self_link. Only legacy `compute.HttpHealthCheck` is supported. - :param pulumi.Input[Sequence[pulumi.Input[str]]] instances: List of instances in the pool. They can be given as - URLs, or in the form of "zone/name". Note that the instances need not exist - at the time of target pool creation, so there is no need to use the - interpolation to create a dependency on the instances from the - target pool. + :param pulumi.Input[Sequence[pulumi.Input[str]]] instances: List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + dependency on the instances from the target pool. :param pulumi.Input[str] name: A unique name for the resource, required by GCE. Changing this forces a new resource to be created. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it @@ -121,11 +119,9 @@ def health_checks(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def instances(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: """ - List of instances in the pool. They can be given as - URLs, or in the form of "zone/name". Note that the instances need not exist - at the time of target pool creation, so there is no need to use the - interpolation to create a dependency on the instances from the - target pool. + List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + dependency on the instances from the target pool. """ return pulumi.get(self, "instances") @@ -209,11 +205,9 @@ def __init__(__self__, *, backup pool (which must also be set). :param pulumi.Input[str] health_checks: List of zero or one health check name or self_link. Only legacy `compute.HttpHealthCheck` is supported. - :param pulumi.Input[Sequence[pulumi.Input[str]]] instances: List of instances in the pool. They can be given as - URLs, or in the form of "zone/name". Note that the instances need not exist - at the time of target pool creation, so there is no need to use the - interpolation to create a dependency on the instances from the - target pool. + :param pulumi.Input[Sequence[pulumi.Input[str]]] instances: List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + dependency on the instances from the target pool. :param pulumi.Input[str] name: A unique name for the resource, required by GCE. Changing this forces a new resource to be created. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it @@ -301,11 +295,9 @@ def health_checks(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def instances(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: """ - List of instances in the pool. They can be given as - URLs, or in the form of "zone/name". Note that the instances need not exist - at the time of target pool creation, so there is no need to use the - interpolation to create a dependency on the instances from the - target pool. + List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + dependency on the instances from the target pool. """ return pulumi.get(self, "instances") @@ -430,11 +422,9 @@ def __init__(__self__, backup pool (which must also be set). :param pulumi.Input[str] health_checks: List of zero or one health check name or self_link. Only legacy `compute.HttpHealthCheck` is supported. - :param pulumi.Input[Sequence[pulumi.Input[str]]] instances: List of instances in the pool. They can be given as - URLs, or in the form of "zone/name". Note that the instances need not exist - at the time of target pool creation, so there is no need to use the - interpolation to create a dependency on the instances from the - target pool. + :param pulumi.Input[Sequence[pulumi.Input[str]]] instances: List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + dependency on the instances from the target pool. :param pulumi.Input[str] name: A unique name for the resource, required by GCE. Changing this forces a new resource to be created. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it @@ -555,11 +545,9 @@ def get(resource_name: str, backup pool (which must also be set). :param pulumi.Input[str] health_checks: List of zero or one health check name or self_link. Only legacy `compute.HttpHealthCheck` is supported. - :param pulumi.Input[Sequence[pulumi.Input[str]]] instances: List of instances in the pool. They can be given as - URLs, or in the form of "zone/name". Note that the instances need not exist - at the time of target pool creation, so there is no need to use the - interpolation to create a dependency on the instances from the - target pool. + :param pulumi.Input[Sequence[pulumi.Input[str]]] instances: List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + dependency on the instances from the target pool. :param pulumi.Input[str] name: A unique name for the resource, required by GCE. Changing this forces a new resource to be created. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. If it @@ -626,11 +614,9 @@ def health_checks(self) -> pulumi.Output[Optional[str]]: @pulumi.getter def instances(self) -> pulumi.Output[Sequence[str]]: """ - List of instances in the pool. They can be given as - URLs, or in the form of "zone/name". Note that the instances need not exist - at the time of target pool creation, so there is no need to use the - interpolation to create a dependency on the instances from the - target pool. + List of instances in the pool. They can be given as URLs, or in the form of "zone/name". Note that the instances need + not exist at the time of target pool creation, so there is no need to use the Terraform interpolators to create a + dependency on the instances from the target pool. """ return pulumi.get(self, "instances") diff --git a/sdk/python/pulumi_gcp/compute/vpn_tunnel.py b/sdk/python/pulumi_gcp/compute/vpn_tunnel.py index 5f0de8e7fb..c826187d80 100644 --- a/sdk/python/pulumi_gcp/compute/vpn_tunnel.py +++ b/sdk/python/pulumi_gcp/compute/vpn_tunnel.py @@ -782,18 +782,6 @@ def __init__(__self__, vpn_gateway_interface: Optional[pulumi.Input[int]] = None, __props__=None): """ - VPN tunnel resource. - - To get more information about VpnTunnel, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/vpnTunnels) - * How-to Guides - * [Cloud VPN Overview](https://cloud.google.com/vpn/docs/concepts/overview) - * [Networks and Tunnel Routing](https://cloud.google.com/vpn/docs/concepts/choosing-networks-routing) - - > **Warning:** All arguments including `shared_secret` will be stored in the raw - state as plain-text. - ## Example Usage ### Vpn Tunnel Basic @@ -951,18 +939,6 @@ def __init__(__self__, args: VPNTunnelArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - VPN tunnel resource. - - To get more information about VpnTunnel, see: - - * [API documentation](https://cloud.google.com/compute/docs/reference/rest/v1/vpnTunnels) - * How-to Guides - * [Cloud VPN Overview](https://cloud.google.com/vpn/docs/concepts/overview) - * [Networks and Tunnel Routing](https://cloud.google.com/vpn/docs/concepts/choosing-networks-routing) - - > **Warning:** All arguments including `shared_secret` will be stored in the raw - state as plain-text. - ## Example Usage ### Vpn Tunnel Basic diff --git a/sdk/python/pulumi_gcp/config/__init__.pyi b/sdk/python/pulumi_gcp/config/__init__.pyi index 4ffcc9ec0a..965ad8275c 100644 --- a/sdk/python/pulumi_gcp/config/__init__.pyi +++ b/sdk/python/pulumi_gcp/config/__init__.pyi @@ -84,6 +84,8 @@ cloudSchedulerCustomEndpoint: Optional[str] cloudTasksCustomEndpoint: Optional[str] +cloudbuildv2CustomEndpoint: Optional[str] + clouddeployCustomEndpoint: Optional[str] cloudfunctions2CustomEndpoint: Optional[str] @@ -130,8 +132,6 @@ dialogflowCustomEndpoint: Optional[str] dialogflowCxCustomEndpoint: Optional[str] -disableGooglePartnerName: Optional[bool] - dnsCustomEndpoint: Optional[str] documentAiCustomEndpoint: Optional[str] @@ -162,8 +162,6 @@ gkeHubCustomEndpoint: Optional[str] gkehubFeatureCustomEndpoint: Optional[str] -googlePartnerName: Optional[str] - healthcareCustomEndpoint: Optional[str] iam2CustomEndpoint: Optional[str] @@ -262,6 +260,8 @@ storageTransferCustomEndpoint: Optional[str] tagsCustomEndpoint: Optional[str] +tagsLocationCustomEndpoint: Optional[str] + tpuCustomEndpoint: Optional[str] userProjectOverride: Optional[bool] @@ -272,5 +272,7 @@ vpcAccessCustomEndpoint: Optional[str] workflowsCustomEndpoint: Optional[str] +workstationsCustomEndpoint: Optional[str] + zone: Optional[str] diff --git a/sdk/python/pulumi_gcp/config/vars.py b/sdk/python/pulumi_gcp/config/vars.py index 328f654b01..94b4d82b38 100644 --- a/sdk/python/pulumi_gcp/config/vars.py +++ b/sdk/python/pulumi_gcp/config/vars.py @@ -164,6 +164,10 @@ def cloud_scheduler_custom_endpoint(self) -> Optional[str]: def cloud_tasks_custom_endpoint(self) -> Optional[str]: return __config__.get('cloudTasksCustomEndpoint') + @property + def cloudbuildv2_custom_endpoint(self) -> Optional[str]: + return __config__.get('cloudbuildv2CustomEndpoint') + @property def clouddeploy_custom_endpoint(self) -> Optional[str]: return __config__.get('clouddeployCustomEndpoint') @@ -256,10 +260,6 @@ def dialogflow_custom_endpoint(self) -> Optional[str]: def dialogflow_cx_custom_endpoint(self) -> Optional[str]: return __config__.get('dialogflowCxCustomEndpoint') - @property - def disable_google_partner_name(self) -> Optional[bool]: - return __config__.get_bool('disableGooglePartnerName') - @property def dns_custom_endpoint(self) -> Optional[str]: return __config__.get('dnsCustomEndpoint') @@ -320,10 +320,6 @@ def gke_hub_custom_endpoint(self) -> Optional[str]: def gkehub_feature_custom_endpoint(self) -> Optional[str]: return __config__.get('gkehubFeatureCustomEndpoint') - @property - def google_partner_name(self) -> Optional[str]: - return __config__.get('googlePartnerName') - @property def healthcare_custom_endpoint(self) -> Optional[str]: return __config__.get('healthcareCustomEndpoint') @@ -520,6 +516,10 @@ def storage_transfer_custom_endpoint(self) -> Optional[str]: def tags_custom_endpoint(self) -> Optional[str]: return __config__.get('tagsCustomEndpoint') + @property + def tags_location_custom_endpoint(self) -> Optional[str]: + return __config__.get('tagsLocationCustomEndpoint') + @property def tpu_custom_endpoint(self) -> Optional[str]: return __config__.get('tpuCustomEndpoint') @@ -540,6 +540,10 @@ def vpc_access_custom_endpoint(self) -> Optional[str]: def workflows_custom_endpoint(self) -> Optional[str]: return __config__.get('workflowsCustomEndpoint') + @property + def workstations_custom_endpoint(self) -> Optional[str]: + return __config__.get('workstationsCustomEndpoint') + @property def zone(self) -> Optional[str]: return __config__.get('zone') or _utilities.get_env('GOOGLE_ZONE', 'GCLOUD_ZONE', 'CLOUDSDK_COMPUTE_ZONE') diff --git a/sdk/python/pulumi_gcp/container/_inputs.py b/sdk/python/pulumi_gcp/container/_inputs.py index 88637a160f..b60d7f8d57 100644 --- a/sdk/python/pulumi_gcp/container/_inputs.py +++ b/sdk/python/pulumi_gcp/container/_inputs.py @@ -2595,9 +2595,9 @@ def __init__(__self__, *, :param pulumi.Input['ClusterAddonsConfigHttpLoadBalancingArgs'] http_load_balancing: The status of the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP load balancers for services in a cluster. It is enabled by default; set `disabled = true` to disable. - :param pulumi.Input['ClusterAddonsConfigIstioConfigArgs'] istio_config: . + :param pulumi.Input['ClusterAddonsConfigIstioConfigArgs'] istio_config: ). Structure is documented below. - :param pulumi.Input['ClusterAddonsConfigKalmConfigArgs'] kalm_config: . + :param pulumi.Input['ClusterAddonsConfigKalmConfigArgs'] kalm_config: ). Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. :param pulumi.Input['ClusterAddonsConfigNetworkPolicyConfigArgs'] network_policy_config: Whether we should enable the network policy addon for the master. This must be enabled in order to enable network policy for the nodes. @@ -2742,7 +2742,7 @@ def http_load_balancing(self, value: Optional[pulumi.Input['ClusterAddonsConfigH @pulumi.getter(name="istioConfig") def istio_config(self) -> Optional[pulumi.Input['ClusterAddonsConfigIstioConfigArgs']]: """ - . + ). Structure is documented below. """ return pulumi.get(self, "istio_config") @@ -2755,7 +2755,7 @@ def istio_config(self, value: Optional[pulumi.Input['ClusterAddonsConfigIstioCon @pulumi.getter(name="kalmConfig") def kalm_config(self) -> Optional[pulumi.Input['ClusterAddonsConfigKalmConfigArgs']]: """ - . + ). Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. """ return pulumi.get(self, "kalm_config") @@ -3272,7 +3272,8 @@ def __init__(__self__, *, :param pulumi.Input[str] disk_type: Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd' or 'pd-balanced'). Defaults to `pd-standard` :param pulumi.Input[str] image_type: The default image type used by NAP once a new node pool is being created. Please note that according to the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#default-image-type) the value must be one of the [COS_CONTAINERD, COS, UBUNTU_CONTAINERD, UBUNTU]. __NOTE__ : COS AND UBUNTU are deprecated as of `GKE 1.24` :param pulumi.Input['ClusterClusterAutoscalingAutoProvisioningDefaultsManagementArgs'] management: NodeManagement configuration for this NodePool. Structure is documented below. - :param pulumi.Input[str] min_cpu_platform: Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the + :param pulumi.Input[str] min_cpu_platform: ) + Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such as "Intel Haswell" or "Intel Sandy Bridge". :param pulumi.Input[Sequence[pulumi.Input[str]]] oauth_scopes: Scopes that are used by NAP and GKE Autopilot when creating node pools. Use the "https://www.googleapis.com/auth/cloud-platform" scope to grant access to all APIs. It is recommended that you set `service_account` to a non-default service account and grant IAM roles to that service account for only the resources that it needs. @@ -3365,6 +3366,7 @@ def management(self, value: Optional[pulumi.Input['ClusterClusterAutoscalingAuto @pulumi.getter(name="minCpuPlatform") def min_cpu_platform(self) -> Optional[pulumi.Input[str]]: """ + ) Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such as "Intel Haswell" or "Intel Sandy Bridge". @@ -4634,7 +4636,7 @@ def __init__(__self__, *, taints: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodeConfigTaintArgs']]]] = None, workload_metadata_config: Optional[pulumi.Input['ClusterNodeConfigWorkloadMetadataConfigArgs']] = None): """ - :param pulumi.Input[str] boot_disk_kms_key: The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + :param pulumi.Input[str] boot_disk_kms_key: The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption :param pulumi.Input[int] disk_size_gb: Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. Defaults to 100GB. :param pulumi.Input[str] disk_type: Type of the disk attached to each node @@ -4646,8 +4648,6 @@ def __init__(__self__, *, A `machine_type` that has more than 16 GiB of memory is also recommended. GCFS must be enabled in order to use [image streaming](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming). Structure is documented below. - :param pulumi.Input[Sequence[pulumi.Input['ClusterNodeConfigGuestAcceleratorArgs']]] guest_accelerators: List of the type and count of accelerator cards attached to the instance. - Structure documented below. :param pulumi.Input['ClusterNodeConfigGvnicArgs'] gvnic: Google Virtual NIC (gVNIC) is a virtual network interface. Installing the gVNIC driver allows for more efficient traffic transmission across the Google network infrastructure. gVNIC is an alternative to the virtIO-based ethernet driver. GKE nodes must use a Container-Optimized OS node image. @@ -4668,11 +4668,6 @@ def __init__(__self__, *, :param pulumi.Input[str] machine_type: The name of a Google Compute Engine machine type. Defaults to `e2-medium`. To create a custom machine type, value should be set as specified [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] metadata: The metadata key/value pairs assigned to instances in - the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - `true` by the API; if `metadata` is set but that default value is not - included, the provider will attempt to unset the value. To avoid this, set the - value in your config. :param pulumi.Input[str] min_cpu_platform: Minimum CPU platform to be used by this instance. The instance may be scheduled on the specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such as `Intel Haswell`. See the @@ -4688,6 +4683,8 @@ def __init__(__self__, *, :param pulumi.Input['ClusterNodeConfigReservationAffinityArgs'] reservation_affinity: The configuration of the desired reservation which instances could take capacity from. Structure is documented below. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] resource_labels: The GCP labels (key/value pairs) to be applied to each node. Refer [here](https://cloud.google.com/kubernetes-engine/docs/how-to/creating-managing-labels) for how these labels are applied to clusters, node pools and nodes. + :param pulumi.Input['ClusterNodeConfigSandboxConfigArgs'] sandbox_config: ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + Structure is documented below. :param pulumi.Input[str] service_account: The service account to be used by the Node VMs. If not specified, the "default" service account is used. :param pulumi.Input['ClusterNodeConfigShieldedInstanceConfigArgs'] shielded_instance_config: Shielded Instance options. Structure is documented below. @@ -4696,14 +4693,6 @@ def __init__(__self__, *, for more information. Defaults to false. :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: The list of instance tags applied to all nodes. Tags are used to identify valid sources or targets for network firewalls. - :param pulumi.Input[Sequence[pulumi.Input['ClusterNodeConfigTaintArgs']]] taints: A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - to apply to nodes. GKE's API can only set this field on cluster creation. - However, GKE will add taints to your nodes if you enable certain features such - as GPUs. If this field is set, any diffs on this field will cause the provider to - recreate the underlying resource. Taint values can be updated safely in - Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - this field to manage taints. If you do, `lifecycle.ignore_changes` is - recommended. Structure is documented below. :param pulumi.Input['ClusterNodeConfigWorkloadMetadataConfigArgs'] workload_metadata_config: Metadata configuration to expose to workloads on the node pool. Structure is documented below. """ @@ -4768,7 +4757,7 @@ def __init__(__self__, *, @pulumi.getter(name="bootDiskKmsKey") def boot_disk_kms_key(self) -> Optional[pulumi.Input[str]]: """ - The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption """ return pulumi.get(self, "boot_disk_kms_key") @@ -4834,10 +4823,6 @@ def gcfs_config(self, value: Optional[pulumi.Input['ClusterNodeConfigGcfsConfigA @property @pulumi.getter(name="guestAccelerators") def guest_accelerators(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodeConfigGuestAcceleratorArgs']]]]: - """ - List of the type and count of accelerator cards attached to the instance. - Structure documented below. - """ return pulumi.get(self, "guest_accelerators") @guest_accelerators.setter @@ -4955,13 +4940,6 @@ def machine_type(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def metadata(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: - """ - The metadata key/value pairs assigned to instances in - the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - `true` by the API; if `metadata` is set but that default value is not - included, the provider will attempt to unset the value. To avoid this, set the - value in your config. - """ return pulumi.get(self, "metadata") @metadata.setter @@ -5052,6 +5030,10 @@ def resource_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input @property @pulumi.getter(name="sandboxConfig") def sandbox_config(self) -> Optional[pulumi.Input['ClusterNodeConfigSandboxConfigArgs']]: + """ + ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + Structure is documented below. + """ return pulumi.get(self, "sandbox_config") @sandbox_config.setter @@ -5113,16 +5095,6 @@ def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): @property @pulumi.getter def taints(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodeConfigTaintArgs']]]]: - """ - A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - to apply to nodes. GKE's API can only set this field on cluster creation. - However, GKE will add taints to your nodes if you enable certain features such - as GPUs. If this field is set, any diffs on this field will cause the provider to - recreate the underlying resource. Taint values can be updated safely in - Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - this field to manage taints. If you do, `lifecycle.ignore_changes` is - recommended. Structure is documented below. - """ return pulumi.get(self, "taints") @taints.setter @@ -5589,7 +5561,7 @@ def __init__(__self__, *, """ :param pulumi.Input[str] mode: How to expose the node metadata to the workload running on the node. Accepted values are: - * UNSPECIFIED: Not Set + * MODE_UNSPECIFIED: Not Set * GCE_METADATA: Expose all Compute Engine metadata to pods. * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. """ @@ -5601,7 +5573,7 @@ def mode(self) -> pulumi.Input[str]: """ How to expose the node metadata to the workload running on the node. Accepted values are: - * UNSPECIFIED: Not Set + * MODE_UNSPECIFIED: Not Set * GCE_METADATA: Expose all Compute Engine metadata to pods. * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. """ @@ -5640,13 +5612,6 @@ def __init__(__self__, *, :param pulumi.Input['ClusterNodePoolManagementArgs'] management: NodeManagement configuration for this NodePool. Structure is documented below. :param pulumi.Input[str] name: The name of the cluster, unique within the project and location. - :param pulumi.Input['ClusterNodePoolNetworkConfigArgs'] network_config: Configuration for - [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - :param pulumi.Input['ClusterNodePoolNodeConfigArgs'] node_config: Parameters used in creating the default node pool. - Generally, this field should not be used at the same time as a - `container.NodePool` or a `node_pool` block; this configuration - manages the default node pool, which isn't recommended to be used. - Structure is documented below. :param pulumi.Input[Sequence[pulumi.Input[str]]] node_locations: The list of zones in which the cluster's nodes are located. Nodes must be in the region of their regional cluster or in the same region as their cluster's zone for zonal clusters. If this is specified for @@ -5774,10 +5739,6 @@ def name_prefix(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter(name="networkConfig") def network_config(self) -> Optional[pulumi.Input['ClusterNodePoolNetworkConfigArgs']]: - """ - Configuration for - [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - """ return pulumi.get(self, "network_config") @network_config.setter @@ -5787,13 +5748,6 @@ def network_config(self, value: Optional[pulumi.Input['ClusterNodePoolNetworkCon @property @pulumi.getter(name="nodeConfig") def node_config(self) -> Optional[pulumi.Input['ClusterNodePoolNodeConfigArgs']]: - """ - Parameters used in creating the default node pool. - Generally, this field should not be used at the same time as a - `container.NodePool` or a `node_pool` block; this configuration - manages the default node pool, which isn't recommended to be used. - Structure is documented below. - """ return pulumi.get(self, "node_config") @node_config.setter @@ -6097,13 +6051,10 @@ def __init__(__self__, *, pod_ipv4_cidr_block: Optional[pulumi.Input[str]] = None, pod_range: Optional[pulumi.Input[str]] = None): """ - :param pulumi.Input[bool] create_pod_range: Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. :param pulumi.Input[bool] enable_private_nodes: Enables the private cluster feature, creating a private endpoint on the cluster. In a private cluster, nodes only have RFC 1918 private addresses and communicate with the master's private endpoint via private networking. - :param pulumi.Input[str] pod_ipv4_cidr_block: The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - :param pulumi.Input[str] pod_range: The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. """ if create_pod_range is not None: pulumi.set(__self__, "create_pod_range", create_pod_range) @@ -6117,9 +6068,6 @@ def __init__(__self__, *, @property @pulumi.getter(name="createPodRange") def create_pod_range(self) -> Optional[pulumi.Input[bool]]: - """ - Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. - """ return pulumi.get(self, "create_pod_range") @create_pod_range.setter @@ -6144,9 +6092,6 @@ def enable_private_nodes(self, value: Optional[pulumi.Input[bool]]): @property @pulumi.getter(name="podIpv4CidrBlock") def pod_ipv4_cidr_block(self) -> Optional[pulumi.Input[str]]: - """ - The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - """ return pulumi.get(self, "pod_ipv4_cidr_block") @pod_ipv4_cidr_block.setter @@ -6156,9 +6101,6 @@ def pod_ipv4_cidr_block(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter(name="podRange") def pod_range(self) -> Optional[pulumi.Input[str]]: - """ - The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. - """ return pulumi.get(self, "pod_range") @pod_range.setter @@ -6198,7 +6140,7 @@ def __init__(__self__, *, taints: Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodePoolNodeConfigTaintArgs']]]] = None, workload_metadata_config: Optional[pulumi.Input['ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs']] = None): """ - :param pulumi.Input[str] boot_disk_kms_key: The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + :param pulumi.Input[str] boot_disk_kms_key: The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption :param pulumi.Input[int] disk_size_gb: Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. Defaults to 100GB. :param pulumi.Input[str] disk_type: Type of the disk attached to each node @@ -6210,8 +6152,6 @@ def __init__(__self__, *, A `machine_type` that has more than 16 GiB of memory is also recommended. GCFS must be enabled in order to use [image streaming](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming). Structure is documented below. - :param pulumi.Input[Sequence[pulumi.Input['ClusterNodePoolNodeConfigGuestAcceleratorArgs']]] guest_accelerators: List of the type and count of accelerator cards attached to the instance. - Structure documented below. :param pulumi.Input['ClusterNodePoolNodeConfigGvnicArgs'] gvnic: Google Virtual NIC (gVNIC) is a virtual network interface. Installing the gVNIC driver allows for more efficient traffic transmission across the Google network infrastructure. gVNIC is an alternative to the virtIO-based ethernet driver. GKE nodes must use a Container-Optimized OS node image. @@ -6232,11 +6172,6 @@ def __init__(__self__, *, :param pulumi.Input[str] machine_type: The name of a Google Compute Engine machine type. Defaults to `e2-medium`. To create a custom machine type, value should be set as specified [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] metadata: The metadata key/value pairs assigned to instances in - the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - `true` by the API; if `metadata` is set but that default value is not - included, the provider will attempt to unset the value. To avoid this, set the - value in your config. :param pulumi.Input[str] min_cpu_platform: Minimum CPU platform to be used by this instance. The instance may be scheduled on the specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such as `Intel Haswell`. See the @@ -6252,6 +6187,8 @@ def __init__(__self__, *, :param pulumi.Input['ClusterNodePoolNodeConfigReservationAffinityArgs'] reservation_affinity: The configuration of the desired reservation which instances could take capacity from. Structure is documented below. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] resource_labels: The GCP labels (key/value pairs) to be applied to each node. Refer [here](https://cloud.google.com/kubernetes-engine/docs/how-to/creating-managing-labels) for how these labels are applied to clusters, node pools and nodes. + :param pulumi.Input['ClusterNodePoolNodeConfigSandboxConfigArgs'] sandbox_config: ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + Structure is documented below. :param pulumi.Input[str] service_account: The service account to be used by the Node VMs. If not specified, the "default" service account is used. :param pulumi.Input['ClusterNodePoolNodeConfigShieldedInstanceConfigArgs'] shielded_instance_config: Shielded Instance options. Structure is documented below. @@ -6260,14 +6197,6 @@ def __init__(__self__, *, for more information. Defaults to false. :param pulumi.Input[Sequence[pulumi.Input[str]]] tags: The list of instance tags applied to all nodes. Tags are used to identify valid sources or targets for network firewalls. - :param pulumi.Input[Sequence[pulumi.Input['ClusterNodePoolNodeConfigTaintArgs']]] taints: A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - to apply to nodes. GKE's API can only set this field on cluster creation. - However, GKE will add taints to your nodes if you enable certain features such - as GPUs. If this field is set, any diffs on this field will cause the provider to - recreate the underlying resource. Taint values can be updated safely in - Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - this field to manage taints. If you do, `lifecycle.ignore_changes` is - recommended. Structure is documented below. :param pulumi.Input['ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs'] workload_metadata_config: Metadata configuration to expose to workloads on the node pool. Structure is documented below. """ @@ -6332,7 +6261,7 @@ def __init__(__self__, *, @pulumi.getter(name="bootDiskKmsKey") def boot_disk_kms_key(self) -> Optional[pulumi.Input[str]]: """ - The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption """ return pulumi.get(self, "boot_disk_kms_key") @@ -6398,10 +6327,6 @@ def gcfs_config(self, value: Optional[pulumi.Input['ClusterNodePoolNodeConfigGcf @property @pulumi.getter(name="guestAccelerators") def guest_accelerators(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodePoolNodeConfigGuestAcceleratorArgs']]]]: - """ - List of the type and count of accelerator cards attached to the instance. - Structure documented below. - """ return pulumi.get(self, "guest_accelerators") @guest_accelerators.setter @@ -6519,13 +6444,6 @@ def machine_type(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def metadata(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: - """ - The metadata key/value pairs assigned to instances in - the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - `true` by the API; if `metadata` is set but that default value is not - included, the provider will attempt to unset the value. To avoid this, set the - value in your config. - """ return pulumi.get(self, "metadata") @metadata.setter @@ -6616,6 +6534,10 @@ def resource_labels(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input @property @pulumi.getter(name="sandboxConfig") def sandbox_config(self) -> Optional[pulumi.Input['ClusterNodePoolNodeConfigSandboxConfigArgs']]: + """ + ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + Structure is documented below. + """ return pulumi.get(self, "sandbox_config") @sandbox_config.setter @@ -6677,16 +6599,6 @@ def tags(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): @property @pulumi.getter def taints(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['ClusterNodePoolNodeConfigTaintArgs']]]]: - """ - A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - to apply to nodes. GKE's API can only set this field on cluster creation. - However, GKE will add taints to your nodes if you enable certain features such - as GPUs. If this field is set, any diffs on this field will cause the provider to - recreate the underlying resource. Taint values can be updated safely in - Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - this field to manage taints. If you do, `lifecycle.ignore_changes` is - recommended. Structure is documented below. - """ return pulumi.get(self, "taints") @taints.setter @@ -7153,7 +7065,7 @@ def __init__(__self__, *, """ :param pulumi.Input[str] mode: How to expose the node metadata to the workload running on the node. Accepted values are: - * UNSPECIFIED: Not Set + * MODE_UNSPECIFIED: Not Set * GCE_METADATA: Expose all Compute Engine metadata to pods. * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. """ @@ -7165,7 +7077,7 @@ def mode(self) -> pulumi.Input[str]: """ How to expose the node metadata to the workload running on the node. Accepted values are: - * UNSPECIFIED: Not Set + * MODE_UNSPECIFIED: Not Set * GCE_METADATA: Expose all Compute Engine metadata to pods. * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. """ @@ -7506,9 +7418,6 @@ def __init__(__self__, *, creating a private endpoint on the cluster. In a private cluster, nodes only have RFC 1918 private addresses and communicate with the master's private endpoint via private networking. - :param pulumi.Input['ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs'] master_global_access_config: Controls cluster master global - access settings. If unset, the provider will no longer manage this field and will - not modify the previously-set value. Structure is documented below. :param pulumi.Input[str] master_ipv4_cidr_block: The IP range in CIDR notation to use for the hosted master network. This range will be used for assigning private IP addresses to the cluster master(s) and the ILB VIP. This range must not overlap @@ -7571,11 +7480,6 @@ def enable_private_nodes(self, value: Optional[pulumi.Input[bool]]): @property @pulumi.getter(name="masterGlobalAccessConfig") def master_global_access_config(self) -> Optional[pulumi.Input['ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs']]: - """ - Controls cluster master global - access settings. If unset, the provider will no longer manage this field and will - not modify the previously-set value. Structure is documented below. - """ return pulumi.get(self, "master_global_access_config") @master_global_access_config.setter diff --git a/sdk/python/pulumi_gcp/container/attached_cluster.py b/sdk/python/pulumi_gcp/container/attached_cluster.py index cb57af8e98..59d96220c9 100644 --- a/sdk/python/pulumi_gcp/container/attached_cluster.py +++ b/sdk/python/pulumi_gcp/container/attached_cluster.py @@ -23,6 +23,7 @@ def __init__(__self__, *, platform_version: pulumi.Input[str], annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, authorization: Optional[pulumi.Input['AttachedClusterAuthorizationArgs']] = None, + deletion_policy: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, logging_config: Optional[pulumi.Input['AttachedClusterLoggingConfigArgs']] = None, monitoring_config: Optional[pulumi.Input['AttachedClusterMonitoringConfigArgs']] = None, @@ -54,6 +55,7 @@ def __init__(__self__, *, with dashes (-), underscores (_), dots (.), and alphanumerics between. :param pulumi.Input['AttachedClusterAuthorizationArgs'] authorization: Configuration related to the cluster RBAC settings. Structure is documented below. + :param pulumi.Input[str] deletion_policy: Policy to determine what flags to send on delete. :param pulumi.Input[str] description: A human readable description of this attached cluster. Cannot be longer than 255 UTF-8 encoded bytes. :param pulumi.Input['AttachedClusterLoggingConfigArgs'] logging_config: Logging configuration. @@ -73,6 +75,8 @@ def __init__(__self__, *, pulumi.set(__self__, "annotations", annotations) if authorization is not None: pulumi.set(__self__, "authorization", authorization) + if deletion_policy is not None: + pulumi.set(__self__, "deletion_policy", deletion_policy) if description is not None: pulumi.set(__self__, "description", description) if logging_config is not None: @@ -185,6 +189,18 @@ def authorization(self) -> Optional[pulumi.Input['AttachedClusterAuthorizationAr def authorization(self, value: Optional[pulumi.Input['AttachedClusterAuthorizationArgs']]): pulumi.set(self, "authorization", value) + @property + @pulumi.getter(name="deletionPolicy") + def deletion_policy(self) -> Optional[pulumi.Input[str]]: + """ + Policy to determine what flags to send on delete. + """ + 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 description(self) -> Optional[pulumi.Input[str]]: @@ -257,6 +273,7 @@ def __init__(__self__, *, authorization: Optional[pulumi.Input['AttachedClusterAuthorizationArgs']] = None, cluster_region: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, + deletion_policy: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, distribution: Optional[pulumi.Input[str]] = None, errors: Optional[pulumi.Input[Sequence[pulumi.Input['AttachedClusterErrorArgs']]]] = None, @@ -288,6 +305,7 @@ def __init__(__self__, *, For EKS clusters, this is an AWS region. For AKS clusters, this is an Azure region. :param pulumi.Input[str] create_time: Output only. The time at which this cluster was created. + :param pulumi.Input[str] deletion_policy: Policy to determine what flags to send on delete. :param pulumi.Input[str] description: A human readable description of this attached cluster. Cannot be longer than 255 UTF-8 encoded bytes. :param pulumi.Input[str] distribution: The Kubernetes distribution of the underlying attached cluster. Supported values: @@ -333,6 +351,8 @@ def __init__(__self__, *, pulumi.set(__self__, "cluster_region", cluster_region) if create_time is not None: pulumi.set(__self__, "create_time", create_time) + if deletion_policy is not None: + pulumi.set(__self__, "deletion_policy", deletion_policy) if description is not None: pulumi.set(__self__, "description", description) if distribution is not None: @@ -424,6 +444,18 @@ def create_time(self) -> Optional[pulumi.Input[str]]: def create_time(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "create_time", value) + @property + @pulumi.getter(name="deletionPolicy") + def deletion_policy(self) -> Optional[pulumi.Input[str]]: + """ + Policy to determine what flags to send on delete. + """ + 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 description(self) -> Optional[pulumi.Input[str]]: @@ -655,6 +687,7 @@ def __init__(__self__, opts: Optional[pulumi.ResourceOptions] = None, annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, authorization: Optional[pulumi.Input[pulumi.InputType['AttachedClusterAuthorizationArgs']]] = None, + deletion_policy: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, distribution: Optional[pulumi.Input[str]] = None, fleet: Optional[pulumi.Input[pulumi.InputType['AttachedClusterFleetArgs']]] = None, @@ -699,6 +732,29 @@ def __init__(__self__, project=f"projects/{project.number}", )) ``` + ### Container Attached Cluster Ignore Errors + + ```python + import pulumi + import pulumi_gcp as gcp + + project = gcp.organizations.get_project() + versions = gcp.container.get_attached_versions(location="us-west1", + project=project.project_id) + primary = gcp.container.AttachedCluster("primary", + location="us-west1", + project=project.project_id, + description="Test cluster", + distribution="aks", + oidc_config=gcp.container.AttachedClusterOidcConfigArgs( + issuer_url="https://oidc.issuer.url", + ), + platform_version=versions.valid_versions[0], + fleet=gcp.container.AttachedClusterFleetArgs( + project=f"projects/{project.number}", + ), + deletion_policy="DELETE_IGNORE_ERRORS") + ``` ## Import @@ -726,6 +782,7 @@ def __init__(__self__, with dashes (-), underscores (_), dots (.), and alphanumerics between. :param pulumi.Input[pulumi.InputType['AttachedClusterAuthorizationArgs']] authorization: Configuration related to the cluster RBAC settings. Structure is documented below. + :param pulumi.Input[str] deletion_policy: Policy to determine what flags to send on delete. :param pulumi.Input[str] description: A human readable description of this attached cluster. Cannot be longer than 255 UTF-8 encoded bytes. :param pulumi.Input[str] distribution: The Kubernetes distribution of the underlying attached cluster. Supported values: @@ -791,6 +848,29 @@ def __init__(__self__, project=f"projects/{project.number}", )) ``` + ### Container Attached Cluster Ignore Errors + + ```python + import pulumi + import pulumi_gcp as gcp + + project = gcp.organizations.get_project() + versions = gcp.container.get_attached_versions(location="us-west1", + project=project.project_id) + primary = gcp.container.AttachedCluster("primary", + location="us-west1", + project=project.project_id, + description="Test cluster", + distribution="aks", + oidc_config=gcp.container.AttachedClusterOidcConfigArgs( + issuer_url="https://oidc.issuer.url", + ), + platform_version=versions.valid_versions[0], + fleet=gcp.container.AttachedClusterFleetArgs( + project=f"projects/{project.number}", + ), + deletion_policy="DELETE_IGNORE_ERRORS") + ``` ## Import @@ -825,6 +905,7 @@ def _internal_init(__self__, opts: Optional[pulumi.ResourceOptions] = None, annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, authorization: Optional[pulumi.Input[pulumi.InputType['AttachedClusterAuthorizationArgs']]] = None, + deletion_policy: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, distribution: Optional[pulumi.Input[str]] = None, fleet: Optional[pulumi.Input[pulumi.InputType['AttachedClusterFleetArgs']]] = None, @@ -846,6 +927,7 @@ def _internal_init(__self__, __props__.__dict__["annotations"] = annotations __props__.__dict__["authorization"] = authorization + __props__.__dict__["deletion_policy"] = deletion_policy __props__.__dict__["description"] = description if distribution is None and not opts.urn: raise TypeError("Missing required property 'distribution'") @@ -889,6 +971,7 @@ def get(resource_name: str, authorization: Optional[pulumi.Input[pulumi.InputType['AttachedClusterAuthorizationArgs']]] = None, cluster_region: Optional[pulumi.Input[str]] = None, create_time: Optional[pulumi.Input[str]] = None, + deletion_policy: Optional[pulumi.Input[str]] = None, description: Optional[pulumi.Input[str]] = None, distribution: Optional[pulumi.Input[str]] = None, errors: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AttachedClusterErrorArgs']]]]] = None, @@ -925,6 +1008,7 @@ def get(resource_name: str, For EKS clusters, this is an AWS region. For AKS clusters, this is an Azure region. :param pulumi.Input[str] create_time: Output only. The time at which this cluster was created. + :param pulumi.Input[str] deletion_policy: Policy to determine what flags to send on delete. :param pulumi.Input[str] description: A human readable description of this attached cluster. Cannot be longer than 255 UTF-8 encoded bytes. :param pulumi.Input[str] distribution: The Kubernetes distribution of the underlying attached cluster. Supported values: @@ -970,6 +1054,7 @@ def get(resource_name: str, __props__.__dict__["authorization"] = authorization __props__.__dict__["cluster_region"] = cluster_region __props__.__dict__["create_time"] = create_time + __props__.__dict__["deletion_policy"] = deletion_policy __props__.__dict__["description"] = description __props__.__dict__["distribution"] = distribution __props__.__dict__["errors"] = errors @@ -1029,6 +1114,14 @@ def create_time(self) -> pulumi.Output[str]: """ return pulumi.get(self, "create_time") + @property + @pulumi.getter(name="deletionPolicy") + def deletion_policy(self) -> pulumi.Output[Optional[str]]: + """ + Policy to determine what flags to send on delete. + """ + return pulumi.get(self, "deletion_policy") + @property @pulumi.getter def description(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/container/cluster.py b/sdk/python/pulumi_gcp/container/cluster.py index dad8fff53c..7626f4e98f 100644 --- a/sdk/python/pulumi_gcp/container/cluster.py +++ b/sdk/python/pulumi_gcp/container/cluster.py @@ -94,7 +94,7 @@ def __init__(__self__, *, in this cluster in CIDR notation (e.g. `10.96.0.0/14`). Leave blank to have one automatically chosen or specify a `/14` block in `10.0.0.0/8`. This field will only work for routes-based clusters, where `ip_allocation_policy` is not defined. - :param pulumi.Input['ClusterClusterTelemetryArgs'] cluster_telemetry: Configuration for + :param pulumi.Input['ClusterClusterTelemetryArgs'] cluster_telemetry: ) Configuration for [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, Structure is documented below. :param pulumi.Input['ClusterConfidentialNodesArgs'] confidential_nodes: Configuration for [Confidential Nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/confidential-gke-nodes) feature. Structure is documented below documented below. @@ -121,7 +121,8 @@ def __init__(__self__, *, :param pulumi.Input[bool] enable_kubernetes_alpha: Whether to enable Kubernetes Alpha features for this cluster. Note that when this option is enabled, the cluster cannot be upgraded and will be automatically deleted after 30 days. - :param pulumi.Input[bool] enable_l4_ilb_subsetting: Whether L4ILB Subsetting is enabled for this cluster. + :param pulumi.Input[bool] enable_l4_ilb_subsetting: ) + Whether L4ILB Subsetting is enabled for this cluster. :param pulumi.Input[bool] enable_legacy_abac: Whether the ABAC authorizer is enabled for this cluster. When enabled, identities in the system, including service accounts, nodes, and controllers, will have statically granted permissions beyond those provided by the RBAC configuration or IAM. @@ -130,7 +131,7 @@ def __init__(__self__, *, :param pulumi.Input[bool] enable_tpu: Whether to enable Cloud TPU resources in this cluster. See the [official documentation](https://cloud.google.com/tpu/docs/kubernetes-engine-setup). :param pulumi.Input['ClusterGatewayApiConfigArgs'] gateway_api_config: Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. - :param pulumi.Input['ClusterIdentityServiceConfigArgs'] identity_service_config: . Structure is documented below. + :param pulumi.Input['ClusterIdentityServiceConfigArgs'] identity_service_config: ). Structure is documented below. :param pulumi.Input[int] initial_node_count: The number of nodes to create in this cluster's default node pool. In regional or multi-zonal clusters, this is the number of nodes per zone. Must be set if `node_pool` is not set. If you're using @@ -166,15 +167,9 @@ def __init__(__self__, *, the cluster node IPs, which GKE automatically whitelists). Structure is documented below. :param pulumi.Input['ClusterMeshCertificatesArgs'] mesh_certificates: Structure is documented below. - :param pulumi.Input[str] min_master_version: The minimum version of the master. GKE - will auto-update the master to new versions, so this does not guarantee the - current master version--use the read-only `master_version` field to obtain that. - If unset, the cluster's version will be set by GKE to the version of the most recent - official release (which is not necessarily the latest version). Most users will find - the `container.get_engine_versions` data source useful - it indicates which versions - are available. If you intend to specify versions manually, - [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - describe the various acceptable formats for this field. + :param pulumi.Input[str] min_master_version: The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + set by GKE to the version of the most recent official release (which is not necessarily the latest version). :param pulumi.Input['ClusterMonitoringConfigArgs'] monitoring_config: Monitoring configuration for the cluster. Structure is documented below. :param pulumi.Input[str] monitoring_service: The monitoring service that the cluster @@ -195,11 +190,7 @@ def __init__(__self__, *, :param pulumi.Input[str] networking_mode: Determines whether alias IPs or routes will be used for pod IPs in the cluster. Options are `VPC_NATIVE` or `ROUTES`. `VPC_NATIVE` enables [IP aliasing](https://cloud.google.com/kubernetes-engine/docs/how-to/ip-aliases), and requires the `ip_allocation_policy` block to be defined. By default, when this field is unspecified and no `ip_allocation_policy` blocks are set, GKE will create a `ROUTES`-based cluster. - :param pulumi.Input['ClusterNodeConfigArgs'] node_config: Parameters used in creating the default node pool. - Generally, this field should not be used at the same time as a - `container.NodePool` or a `node_pool` block; this configuration - manages the default node pool, which isn't recommended to be used. - Structure is documented below. + :param pulumi.Input['ClusterNodeConfigArgs'] node_config: The configuration of the nodepool :param pulumi.Input[Sequence[pulumi.Input[str]]] node_locations: The list of zones in which the cluster's nodes are located. Nodes must be in the region of their regional cluster or in the same region as their cluster's zone for zonal clusters. If this is specified for @@ -214,14 +205,12 @@ def __init__(__self__, *, cluster creation without deleting and recreating the entire cluster. Unless you absolutely need the ability to say "these are the _only_ node pools associated with this cluster", use the container.NodePool resource instead of this property. - :param pulumi.Input[str] node_version: The Kubernetes version on the nodes. Must either be unset - or set to the same value as `min_master_version` on create. Defaults to the default - version set by GKE which is not necessarily the latest version. This only affects - nodes in the default node pool. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions. - To update nodes in other node pools, use the `version` attribute on the node pool. + :param pulumi.Input[str] node_version: The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + use the version attribute on the node pool. :param pulumi.Input['ClusterNotificationConfigArgs'] notification_config: Configuration for the [cluster upgrade notifications](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-upgrade-notifications) feature. Structure is documented below. :param pulumi.Input['ClusterPodSecurityPolicyConfigArgs'] pod_security_policy_config: ) Configuration for the [PodSecurityPolicy](https://cloud.google.com/kubernetes-engine/docs/how-to/pod-security-policies) feature. @@ -231,15 +220,8 @@ def __init__(__self__, *, :param pulumi.Input[str] private_ipv6_google_access: The desired state of IPv6 connectivity to Google Services. By default, no private IPv6 access to or from Google Services (all access will be via IPv4). :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['ClusterReleaseChannelArgs'] release_channel: Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - feature, which provide more control over automatic upgrades of your GKE clusters. - When updating this field, GKE imposes specific version requirements. See - [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - for more details; the `container.get_engine_versions` datasource can provide - the default version for a channel. Note that removing the `release_channel` - field from your config will cause the provider to stop managing your cluster's - release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - channel. Structure is documented below. + :param pulumi.Input['ClusterReleaseChannelArgs'] release_channel: Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. :param pulumi.Input[bool] remove_default_node_pool: If `true`, deletes the default node pool upon cluster creation. If you're using `container.NodePool` resources with no default node pool, this should be set to `true`, alongside @@ -457,7 +439,7 @@ def cluster_ipv4_cidr(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="clusterTelemetry") def cluster_telemetry(self) -> Optional[pulumi.Input['ClusterClusterTelemetryArgs']]: """ - Configuration for + ) Configuration for [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, Structure is documented below. """ @@ -627,6 +609,7 @@ def enable_kubernetes_alpha(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="enableL4IlbSubsetting") def enable_l4_ilb_subsetting(self) -> Optional[pulumi.Input[bool]]: """ + ) Whether L4ILB Subsetting is enabled for this cluster. """ return pulumi.get(self, "enable_l4_ilb_subsetting") @@ -691,7 +674,7 @@ def gateway_api_config(self, value: Optional[pulumi.Input['ClusterGatewayApiConf @pulumi.getter(name="identityServiceConfig") def identity_service_config(self) -> Optional[pulumi.Input['ClusterIdentityServiceConfigArgs']]: """ - . Structure is documented below. + ). Structure is documented below. """ return pulumi.get(self, "identity_service_config") @@ -837,15 +820,9 @@ def mesh_certificates(self, value: Optional[pulumi.Input['ClusterMeshCertificate @pulumi.getter(name="minMasterVersion") def min_master_version(self) -> Optional[pulumi.Input[str]]: """ - The minimum version of the master. GKE - will auto-update the master to new versions, so this does not guarantee the - current master version--use the read-only `master_version` field to obtain that. - If unset, the cluster's version will be set by GKE to the version of the most recent - official release (which is not necessarily the latest version). Most users will find - the `container.get_engine_versions` data source useful - it indicates which versions - are available. If you intend to specify versions manually, - [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - describe the various acceptable formats for this field. + The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + set by GKE to the version of the most recent official release (which is not necessarily the latest version). """ return pulumi.get(self, "min_master_version") @@ -943,11 +920,7 @@ def networking_mode(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="nodeConfig") def node_config(self) -> Optional[pulumi.Input['ClusterNodeConfigArgs']]: """ - Parameters used in creating the default node pool. - Generally, this field should not be used at the same time as a - `container.NodePool` or a `node_pool` block; this configuration - manages the default node pool, which isn't recommended to be used. - Structure is documented below. + The configuration of the nodepool """ return pulumi.get(self, "node_config") @@ -1017,14 +990,12 @@ def node_pools(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['Cluster @pulumi.getter(name="nodeVersion") def node_version(self) -> Optional[pulumi.Input[str]]: """ - The Kubernetes version on the nodes. Must either be unset - or set to the same value as `min_master_version` on create. Defaults to the default - version set by GKE which is not necessarily the latest version. This only affects - nodes in the default node pool. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions. - To update nodes in other node pools, use the `version` attribute on the node pool. + The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + use the version attribute on the node pool. """ return pulumi.get(self, "node_version") @@ -1100,15 +1071,8 @@ def project(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="releaseChannel") def release_channel(self) -> Optional[pulumi.Input['ClusterReleaseChannelArgs']]: """ - Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - feature, which provide more control over automatic upgrades of your GKE clusters. - When updating this field, GKE imposes specific version requirements. See - [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - for more details; the `container.get_engine_versions` datasource can provide - the default version for a channel. Note that removing the `release_channel` - field from your config will cause the provider to stop managing your cluster's - release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - channel. Structure is documented below. + Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. """ return pulumi.get(self, "release_channel") @@ -1310,7 +1274,7 @@ def __init__(__self__, *, in this cluster in CIDR notation (e.g. `10.96.0.0/14`). Leave blank to have one automatically chosen or specify a `/14` block in `10.0.0.0/8`. This field will only work for routes-based clusters, where `ip_allocation_policy` is not defined. - :param pulumi.Input['ClusterClusterTelemetryArgs'] cluster_telemetry: Configuration for + :param pulumi.Input['ClusterClusterTelemetryArgs'] cluster_telemetry: ) Configuration for [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, Structure is documented below. :param pulumi.Input['ClusterConfidentialNodesArgs'] confidential_nodes: Configuration for [Confidential Nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/confidential-gke-nodes) feature. Structure is documented below documented below. @@ -1337,7 +1301,8 @@ def __init__(__self__, *, :param pulumi.Input[bool] enable_kubernetes_alpha: Whether to enable Kubernetes Alpha features for this cluster. Note that when this option is enabled, the cluster cannot be upgraded and will be automatically deleted after 30 days. - :param pulumi.Input[bool] enable_l4_ilb_subsetting: Whether L4ILB Subsetting is enabled for this cluster. + :param pulumi.Input[bool] enable_l4_ilb_subsetting: ) + Whether L4ILB Subsetting is enabled for this cluster. :param pulumi.Input[bool] enable_legacy_abac: Whether the ABAC authorizer is enabled for this cluster. When enabled, identities in the system, including service accounts, nodes, and controllers, will have statically granted permissions beyond those provided by the RBAC configuration or IAM. @@ -1347,7 +1312,7 @@ def __init__(__self__, *, See the [official documentation](https://cloud.google.com/tpu/docs/kubernetes-engine-setup). :param pulumi.Input[str] endpoint: The IP address of this cluster's Kubernetes master. :param pulumi.Input['ClusterGatewayApiConfigArgs'] gateway_api_config: Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. - :param pulumi.Input['ClusterIdentityServiceConfigArgs'] identity_service_config: . Structure is documented below. + :param pulumi.Input['ClusterIdentityServiceConfigArgs'] identity_service_config: ). Structure is documented below. :param pulumi.Input[int] initial_node_count: The number of nodes to create in this cluster's default node pool. In regional or multi-zonal clusters, this is the number of nodes per zone. Must be set if `node_pool` is not set. If you're using @@ -1387,15 +1352,9 @@ def __init__(__self__, *, be different than the `min_master_version` set in the config if the master has been updated by GKE. :param pulumi.Input['ClusterMeshCertificatesArgs'] mesh_certificates: Structure is documented below. - :param pulumi.Input[str] min_master_version: The minimum version of the master. GKE - will auto-update the master to new versions, so this does not guarantee the - current master version--use the read-only `master_version` field to obtain that. - If unset, the cluster's version will be set by GKE to the version of the most recent - official release (which is not necessarily the latest version). Most users will find - the `container.get_engine_versions` data source useful - it indicates which versions - are available. If you intend to specify versions manually, - [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - describe the various acceptable formats for this field. + :param pulumi.Input[str] min_master_version: The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + set by GKE to the version of the most recent official release (which is not necessarily the latest version). :param pulumi.Input['ClusterMonitoringConfigArgs'] monitoring_config: Monitoring configuration for the cluster. Structure is documented below. :param pulumi.Input[str] monitoring_service: The monitoring service that the cluster @@ -1416,11 +1375,7 @@ def __init__(__self__, *, :param pulumi.Input[str] networking_mode: Determines whether alias IPs or routes will be used for pod IPs in the cluster. Options are `VPC_NATIVE` or `ROUTES`. `VPC_NATIVE` enables [IP aliasing](https://cloud.google.com/kubernetes-engine/docs/how-to/ip-aliases), and requires the `ip_allocation_policy` block to be defined. By default, when this field is unspecified and no `ip_allocation_policy` blocks are set, GKE will create a `ROUTES`-based cluster. - :param pulumi.Input['ClusterNodeConfigArgs'] node_config: Parameters used in creating the default node pool. - Generally, this field should not be used at the same time as a - `container.NodePool` or a `node_pool` block; this configuration - manages the default node pool, which isn't recommended to be used. - Structure is documented below. + :param pulumi.Input['ClusterNodeConfigArgs'] node_config: The configuration of the nodepool :param pulumi.Input[Sequence[pulumi.Input[str]]] node_locations: The list of zones in which the cluster's nodes are located. Nodes must be in the region of their regional cluster or in the same region as their cluster's zone for zonal clusters. If this is specified for @@ -1435,14 +1390,12 @@ def __init__(__self__, *, cluster creation without deleting and recreating the entire cluster. Unless you absolutely need the ability to say "these are the _only_ node pools associated with this cluster", use the container.NodePool resource instead of this property. - :param pulumi.Input[str] node_version: The Kubernetes version on the nodes. Must either be unset - or set to the same value as `min_master_version` on create. Defaults to the default - version set by GKE which is not necessarily the latest version. This only affects - nodes in the default node pool. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions. - To update nodes in other node pools, use the `version` attribute on the node pool. + :param pulumi.Input[str] node_version: The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + use the version attribute on the node pool. :param pulumi.Input['ClusterNotificationConfigArgs'] notification_config: Configuration for the [cluster upgrade notifications](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-upgrade-notifications) feature. Structure is documented below. :param pulumi.Input['ClusterPodSecurityPolicyConfigArgs'] pod_security_policy_config: ) Configuration for the [PodSecurityPolicy](https://cloud.google.com/kubernetes-engine/docs/how-to/pod-security-policies) feature. @@ -1452,15 +1405,8 @@ def __init__(__self__, *, :param pulumi.Input[str] private_ipv6_google_access: The desired state of IPv6 connectivity to Google Services. By default, no private IPv6 access to or from Google Services (all access will be via IPv4). :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['ClusterReleaseChannelArgs'] release_channel: Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - feature, which provide more control over automatic upgrades of your GKE clusters. - When updating this field, GKE imposes specific version requirements. See - [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - for more details; the `container.get_engine_versions` datasource can provide - the default version for a channel. Note that removing the `release_channel` - field from your config will cause the provider to stop managing your cluster's - release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - channel. Structure is documented below. + :param pulumi.Input['ClusterReleaseChannelArgs'] release_channel: Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. :param pulumi.Input[bool] remove_default_node_pool: If `true`, deletes the default node pool upon cluster creation. If you're using `container.NodePool` resources with no default node pool, this should be set to `true`, alongside @@ -1700,7 +1646,7 @@ def cluster_ipv4_cidr(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="clusterTelemetry") def cluster_telemetry(self) -> Optional[pulumi.Input['ClusterClusterTelemetryArgs']]: """ - Configuration for + ) Configuration for [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, Structure is documented below. """ @@ -1870,6 +1816,7 @@ def enable_kubernetes_alpha(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="enableL4IlbSubsetting") def enable_l4_ilb_subsetting(self) -> Optional[pulumi.Input[bool]]: """ + ) Whether L4ILB Subsetting is enabled for this cluster. """ return pulumi.get(self, "enable_l4_ilb_subsetting") @@ -1946,7 +1893,7 @@ def gateway_api_config(self, value: Optional[pulumi.Input['ClusterGatewayApiConf @pulumi.getter(name="identityServiceConfig") def identity_service_config(self) -> Optional[pulumi.Input['ClusterIdentityServiceConfigArgs']]: """ - . Structure is documented below. + ). Structure is documented below. """ return pulumi.get(self, "identity_service_config") @@ -2118,15 +2065,9 @@ def mesh_certificates(self, value: Optional[pulumi.Input['ClusterMeshCertificate @pulumi.getter(name="minMasterVersion") def min_master_version(self) -> Optional[pulumi.Input[str]]: """ - The minimum version of the master. GKE - will auto-update the master to new versions, so this does not guarantee the - current master version--use the read-only `master_version` field to obtain that. - If unset, the cluster's version will be set by GKE to the version of the most recent - official release (which is not necessarily the latest version). Most users will find - the `container.get_engine_versions` data source useful - it indicates which versions - are available. If you intend to specify versions manually, - [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - describe the various acceptable formats for this field. + The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + set by GKE to the version of the most recent official release (which is not necessarily the latest version). """ return pulumi.get(self, "min_master_version") @@ -2224,11 +2165,7 @@ def networking_mode(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="nodeConfig") def node_config(self) -> Optional[pulumi.Input['ClusterNodeConfigArgs']]: """ - Parameters used in creating the default node pool. - Generally, this field should not be used at the same time as a - `container.NodePool` or a `node_pool` block; this configuration - manages the default node pool, which isn't recommended to be used. - Structure is documented below. + The configuration of the nodepool """ return pulumi.get(self, "node_config") @@ -2298,14 +2235,12 @@ def node_pools(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['Cluster @pulumi.getter(name="nodeVersion") def node_version(self) -> Optional[pulumi.Input[str]]: """ - The Kubernetes version on the nodes. Must either be unset - or set to the same value as `min_master_version` on create. Defaults to the default - version set by GKE which is not necessarily the latest version. This only affects - nodes in the default node pool. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions. - To update nodes in other node pools, use the `version` attribute on the node pool. + The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + use the version attribute on the node pool. """ return pulumi.get(self, "node_version") @@ -2390,15 +2325,8 @@ def project(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="releaseChannel") def release_channel(self) -> Optional[pulumi.Input['ClusterReleaseChannelArgs']]: """ - Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - feature, which provide more control over automatic upgrades of your GKE clusters. - When updating this field, GKE imposes specific version requirements. See - [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - for more details; the `container.get_engine_versions` datasource can provide - the default version for a channel. Note that removing the `release_channel` - field from your config will cause the provider to stop managing your cluster's - release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - channel. Structure is documented below. + Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. """ return pulumi.get(self, "release_channel") @@ -2620,14 +2548,6 @@ def __init__(__self__, workload_identity_config: Optional[pulumi.Input[pulumi.InputType['ClusterWorkloadIdentityConfigArgs']]] = None, __props__=None): """ - Manages a Google Kubernetes Engine (GKE) cluster. For more information see - [the official documentation](https://cloud.google.com/container-engine/docs/clusters) - and [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters). - - > **Warning:** All arguments and attributes, including basic auth username and - passwords as well as certificate outputs will be stored in the raw state as - plaintext. [Read more about secrets in state](https://www.pulumi.com/docs/intro/concepts/programming-model/#secrets). - ## Example Usage ### With A Separately Managed Node Pool (Recommended) @@ -2657,19 +2577,6 @@ def __init__(__self__, > **Note:** It is recommended that node pools be created and managed as separate resources as in the example above. This allows node pools to be added and removed without recreating the cluster. Node pools defined directly in the `container.Cluster` resource cannot be removed without re-creating the cluster. - ### Autopilot - - ```python - import pulumi - import pulumi_gcp as gcp - - default = gcp.service_account.Account("default", - account_id="service-account-id", - display_name="Service Account") - primary = gcp.container.Cluster("primary", - enable_autopilot=True, - location="us-central1-a") - ``` ## Import @@ -2687,7 +2594,7 @@ def __init__(__self__, $ pulumi import gcp:container/cluster:Cluster mycluster us-east1-a/my-cluster ``` - For example, the following fields will show diffs if set in config* `min_master_version` * `remove_default_node_pool` + For example, the following fields will show diffs if set in config- `min_master_version` - `remove_default_node_pool` :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. @@ -2707,7 +2614,7 @@ def __init__(__self__, in this cluster in CIDR notation (e.g. `10.96.0.0/14`). Leave blank to have one automatically chosen or specify a `/14` block in `10.0.0.0/8`. This field will only work for routes-based clusters, where `ip_allocation_policy` is not defined. - :param pulumi.Input[pulumi.InputType['ClusterClusterTelemetryArgs']] cluster_telemetry: Configuration for + :param pulumi.Input[pulumi.InputType['ClusterClusterTelemetryArgs']] cluster_telemetry: ) Configuration for [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, Structure is documented below. :param pulumi.Input[pulumi.InputType['ClusterConfidentialNodesArgs']] confidential_nodes: Configuration for [Confidential Nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/confidential-gke-nodes) feature. Structure is documented below documented below. @@ -2734,7 +2641,8 @@ def __init__(__self__, :param pulumi.Input[bool] enable_kubernetes_alpha: Whether to enable Kubernetes Alpha features for this cluster. Note that when this option is enabled, the cluster cannot be upgraded and will be automatically deleted after 30 days. - :param pulumi.Input[bool] enable_l4_ilb_subsetting: Whether L4ILB Subsetting is enabled for this cluster. + :param pulumi.Input[bool] enable_l4_ilb_subsetting: ) + Whether L4ILB Subsetting is enabled for this cluster. :param pulumi.Input[bool] enable_legacy_abac: Whether the ABAC authorizer is enabled for this cluster. When enabled, identities in the system, including service accounts, nodes, and controllers, will have statically granted permissions beyond those provided by the RBAC configuration or IAM. @@ -2743,7 +2651,7 @@ def __init__(__self__, :param pulumi.Input[bool] enable_tpu: Whether to enable Cloud TPU resources in this cluster. See the [official documentation](https://cloud.google.com/tpu/docs/kubernetes-engine-setup). :param pulumi.Input[pulumi.InputType['ClusterGatewayApiConfigArgs']] gateway_api_config: Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. - :param pulumi.Input[pulumi.InputType['ClusterIdentityServiceConfigArgs']] identity_service_config: . Structure is documented below. + :param pulumi.Input[pulumi.InputType['ClusterIdentityServiceConfigArgs']] identity_service_config: ). Structure is documented below. :param pulumi.Input[int] initial_node_count: The number of nodes to create in this cluster's default node pool. In regional or multi-zonal clusters, this is the number of nodes per zone. Must be set if `node_pool` is not set. If you're using @@ -2779,15 +2687,9 @@ def __init__(__self__, the cluster node IPs, which GKE automatically whitelists). Structure is documented below. :param pulumi.Input[pulumi.InputType['ClusterMeshCertificatesArgs']] mesh_certificates: Structure is documented below. - :param pulumi.Input[str] min_master_version: The minimum version of the master. GKE - will auto-update the master to new versions, so this does not guarantee the - current master version--use the read-only `master_version` field to obtain that. - If unset, the cluster's version will be set by GKE to the version of the most recent - official release (which is not necessarily the latest version). Most users will find - the `container.get_engine_versions` data source useful - it indicates which versions - are available. If you intend to specify versions manually, - [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - describe the various acceptable formats for this field. + :param pulumi.Input[str] min_master_version: The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + set by GKE to the version of the most recent official release (which is not necessarily the latest version). :param pulumi.Input[pulumi.InputType['ClusterMonitoringConfigArgs']] monitoring_config: Monitoring configuration for the cluster. Structure is documented below. :param pulumi.Input[str] monitoring_service: The monitoring service that the cluster @@ -2808,11 +2710,7 @@ def __init__(__self__, :param pulumi.Input[str] networking_mode: Determines whether alias IPs or routes will be used for pod IPs in the cluster. Options are `VPC_NATIVE` or `ROUTES`. `VPC_NATIVE` enables [IP aliasing](https://cloud.google.com/kubernetes-engine/docs/how-to/ip-aliases), and requires the `ip_allocation_policy` block to be defined. By default, when this field is unspecified and no `ip_allocation_policy` blocks are set, GKE will create a `ROUTES`-based cluster. - :param pulumi.Input[pulumi.InputType['ClusterNodeConfigArgs']] node_config: Parameters used in creating the default node pool. - Generally, this field should not be used at the same time as a - `container.NodePool` or a `node_pool` block; this configuration - manages the default node pool, which isn't recommended to be used. - Structure is documented below. + :param pulumi.Input[pulumi.InputType['ClusterNodeConfigArgs']] node_config: The configuration of the nodepool :param pulumi.Input[Sequence[pulumi.Input[str]]] node_locations: The list of zones in which the cluster's nodes are located. Nodes must be in the region of their regional cluster or in the same region as their cluster's zone for zonal clusters. If this is specified for @@ -2827,14 +2725,12 @@ def __init__(__self__, cluster creation without deleting and recreating the entire cluster. Unless you absolutely need the ability to say "these are the _only_ node pools associated with this cluster", use the container.NodePool resource instead of this property. - :param pulumi.Input[str] node_version: The Kubernetes version on the nodes. Must either be unset - or set to the same value as `min_master_version` on create. Defaults to the default - version set by GKE which is not necessarily the latest version. This only affects - nodes in the default node pool. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions. - To update nodes in other node pools, use the `version` attribute on the node pool. + :param pulumi.Input[str] node_version: The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + use the version attribute on the node pool. :param pulumi.Input[pulumi.InputType['ClusterNotificationConfigArgs']] notification_config: Configuration for the [cluster upgrade notifications](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-upgrade-notifications) feature. Structure is documented below. :param pulumi.Input[pulumi.InputType['ClusterPodSecurityPolicyConfigArgs']] pod_security_policy_config: ) Configuration for the [PodSecurityPolicy](https://cloud.google.com/kubernetes-engine/docs/how-to/pod-security-policies) feature. @@ -2844,15 +2740,8 @@ def __init__(__self__, :param pulumi.Input[str] private_ipv6_google_access: The desired state of IPv6 connectivity to Google Services. By default, no private IPv6 access to or from Google Services (all access will be via IPv4). :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[pulumi.InputType['ClusterReleaseChannelArgs']] release_channel: Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - feature, which provide more control over automatic upgrades of your GKE clusters. - When updating this field, GKE imposes specific version requirements. See - [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - for more details; the `container.get_engine_versions` datasource can provide - the default version for a channel. Note that removing the `release_channel` - field from your config will cause the provider to stop managing your cluster's - release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - channel. Structure is documented below. + :param pulumi.Input[pulumi.InputType['ClusterReleaseChannelArgs']] release_channel: Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. :param pulumi.Input[bool] remove_default_node_pool: If `true`, deletes the default node pool upon cluster creation. If you're using `container.NodePool` resources with no default node pool, this should be set to `true`, alongside @@ -2878,14 +2767,6 @@ def __init__(__self__, args: Optional[ClusterArgs] = None, opts: Optional[pulumi.ResourceOptions] = None): """ - Manages a Google Kubernetes Engine (GKE) cluster. For more information see - [the official documentation](https://cloud.google.com/container-engine/docs/clusters) - and [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters). - - > **Warning:** All arguments and attributes, including basic auth username and - passwords as well as certificate outputs will be stored in the raw state as - plaintext. [Read more about secrets in state](https://www.pulumi.com/docs/intro/concepts/programming-model/#secrets). - ## Example Usage ### With A Separately Managed Node Pool (Recommended) @@ -2915,19 +2796,6 @@ def __init__(__self__, > **Note:** It is recommended that node pools be created and managed as separate resources as in the example above. This allows node pools to be added and removed without recreating the cluster. Node pools defined directly in the `container.Cluster` resource cannot be removed without re-creating the cluster. - ### Autopilot - - ```python - import pulumi - import pulumi_gcp as gcp - - default = gcp.service_account.Account("default", - account_id="service-account-id", - display_name="Service Account") - primary = gcp.container.Cluster("primary", - enable_autopilot=True, - location="us-central1-a") - ``` ## Import @@ -2945,7 +2813,7 @@ def __init__(__self__, $ pulumi import gcp:container/cluster:Cluster mycluster us-east1-a/my-cluster ``` - For example, the following fields will show diffs if set in config* `min_master_version` * `remove_default_node_pool` + For example, the following fields will show diffs if set in config- `min_master_version` - `remove_default_node_pool` :param str resource_name: The name of the resource. :param ClusterArgs args: The arguments to use to populate this resource's properties. @@ -3201,7 +3069,7 @@ def get(resource_name: str, in this cluster in CIDR notation (e.g. `10.96.0.0/14`). Leave blank to have one automatically chosen or specify a `/14` block in `10.0.0.0/8`. This field will only work for routes-based clusters, where `ip_allocation_policy` is not defined. - :param pulumi.Input[pulumi.InputType['ClusterClusterTelemetryArgs']] cluster_telemetry: Configuration for + :param pulumi.Input[pulumi.InputType['ClusterClusterTelemetryArgs']] cluster_telemetry: ) Configuration for [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, Structure is documented below. :param pulumi.Input[pulumi.InputType['ClusterConfidentialNodesArgs']] confidential_nodes: Configuration for [Confidential Nodes](https://cloud.google.com/kubernetes-engine/docs/how-to/confidential-gke-nodes) feature. Structure is documented below documented below. @@ -3228,7 +3096,8 @@ def get(resource_name: str, :param pulumi.Input[bool] enable_kubernetes_alpha: Whether to enable Kubernetes Alpha features for this cluster. Note that when this option is enabled, the cluster cannot be upgraded and will be automatically deleted after 30 days. - :param pulumi.Input[bool] enable_l4_ilb_subsetting: Whether L4ILB Subsetting is enabled for this cluster. + :param pulumi.Input[bool] enable_l4_ilb_subsetting: ) + Whether L4ILB Subsetting is enabled for this cluster. :param pulumi.Input[bool] enable_legacy_abac: Whether the ABAC authorizer is enabled for this cluster. When enabled, identities in the system, including service accounts, nodes, and controllers, will have statically granted permissions beyond those provided by the RBAC configuration or IAM. @@ -3238,7 +3107,7 @@ def get(resource_name: str, See the [official documentation](https://cloud.google.com/tpu/docs/kubernetes-engine-setup). :param pulumi.Input[str] endpoint: The IP address of this cluster's Kubernetes master. :param pulumi.Input[pulumi.InputType['ClusterGatewayApiConfigArgs']] gateway_api_config: Configuration for [GKE Gateway API controller](https://cloud.google.com/kubernetes-engine/docs/concepts/gateway-api). Structure is documented below. - :param pulumi.Input[pulumi.InputType['ClusterIdentityServiceConfigArgs']] identity_service_config: . Structure is documented below. + :param pulumi.Input[pulumi.InputType['ClusterIdentityServiceConfigArgs']] identity_service_config: ). Structure is documented below. :param pulumi.Input[int] initial_node_count: The number of nodes to create in this cluster's default node pool. In regional or multi-zonal clusters, this is the number of nodes per zone. Must be set if `node_pool` is not set. If you're using @@ -3278,15 +3147,9 @@ def get(resource_name: str, be different than the `min_master_version` set in the config if the master has been updated by GKE. :param pulumi.Input[pulumi.InputType['ClusterMeshCertificatesArgs']] mesh_certificates: Structure is documented below. - :param pulumi.Input[str] min_master_version: The minimum version of the master. GKE - will auto-update the master to new versions, so this does not guarantee the - current master version--use the read-only `master_version` field to obtain that. - If unset, the cluster's version will be set by GKE to the version of the most recent - official release (which is not necessarily the latest version). Most users will find - the `container.get_engine_versions` data source useful - it indicates which versions - are available. If you intend to specify versions manually, - [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - describe the various acceptable formats for this field. + :param pulumi.Input[str] min_master_version: The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + set by GKE to the version of the most recent official release (which is not necessarily the latest version). :param pulumi.Input[pulumi.InputType['ClusterMonitoringConfigArgs']] monitoring_config: Monitoring configuration for the cluster. Structure is documented below. :param pulumi.Input[str] monitoring_service: The monitoring service that the cluster @@ -3307,11 +3170,7 @@ def get(resource_name: str, :param pulumi.Input[str] networking_mode: Determines whether alias IPs or routes will be used for pod IPs in the cluster. Options are `VPC_NATIVE` or `ROUTES`. `VPC_NATIVE` enables [IP aliasing](https://cloud.google.com/kubernetes-engine/docs/how-to/ip-aliases), and requires the `ip_allocation_policy` block to be defined. By default, when this field is unspecified and no `ip_allocation_policy` blocks are set, GKE will create a `ROUTES`-based cluster. - :param pulumi.Input[pulumi.InputType['ClusterNodeConfigArgs']] node_config: Parameters used in creating the default node pool. - Generally, this field should not be used at the same time as a - `container.NodePool` or a `node_pool` block; this configuration - manages the default node pool, which isn't recommended to be used. - Structure is documented below. + :param pulumi.Input[pulumi.InputType['ClusterNodeConfigArgs']] node_config: The configuration of the nodepool :param pulumi.Input[Sequence[pulumi.Input[str]]] node_locations: The list of zones in which the cluster's nodes are located. Nodes must be in the region of their regional cluster or in the same region as their cluster's zone for zonal clusters. If this is specified for @@ -3326,14 +3185,12 @@ def get(resource_name: str, cluster creation without deleting and recreating the entire cluster. Unless you absolutely need the ability to say "these are the _only_ node pools associated with this cluster", use the container.NodePool resource instead of this property. - :param pulumi.Input[str] node_version: The Kubernetes version on the nodes. Must either be unset - or set to the same value as `min_master_version` on create. Defaults to the default - version set by GKE which is not necessarily the latest version. This only affects - nodes in the default node pool. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions. - To update nodes in other node pools, use the `version` attribute on the node pool. + :param pulumi.Input[str] node_version: The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + use the version attribute on the node pool. :param pulumi.Input[pulumi.InputType['ClusterNotificationConfigArgs']] notification_config: Configuration for the [cluster upgrade notifications](https://cloud.google.com/kubernetes-engine/docs/how-to/cluster-upgrade-notifications) feature. Structure is documented below. :param pulumi.Input[pulumi.InputType['ClusterPodSecurityPolicyConfigArgs']] pod_security_policy_config: ) Configuration for the [PodSecurityPolicy](https://cloud.google.com/kubernetes-engine/docs/how-to/pod-security-policies) feature. @@ -3343,15 +3200,8 @@ def get(resource_name: str, :param pulumi.Input[str] private_ipv6_google_access: The desired state of IPv6 connectivity to Google Services. By default, no private IPv6 access to or from Google Services (all access will be via IPv4). :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[pulumi.InputType['ClusterReleaseChannelArgs']] release_channel: Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - feature, which provide more control over automatic upgrades of your GKE clusters. - When updating this field, GKE imposes specific version requirements. See - [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - for more details; the `container.get_engine_versions` datasource can provide - the default version for a channel. Note that removing the `release_channel` - field from your config will cause the provider to stop managing your cluster's - release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - channel. Structure is documented below. + :param pulumi.Input[pulumi.InputType['ClusterReleaseChannelArgs']] release_channel: Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. :param pulumi.Input[bool] remove_default_node_pool: If `true`, deletes the default node pool upon cluster creation. If you're using `container.NodePool` resources with no default node pool, this should be set to `true`, alongside @@ -3506,7 +3356,7 @@ def cluster_ipv4_cidr(self) -> pulumi.Output[str]: @pulumi.getter(name="clusterTelemetry") def cluster_telemetry(self) -> pulumi.Output['outputs.ClusterClusterTelemetry']: """ - Configuration for + ) Configuration for [ClusterTelemetry](https://cloud.google.com/monitoring/kubernetes-engine/installing#controlling_the_collection_of_application_logs) feature, Structure is documented below. """ @@ -3624,6 +3474,7 @@ def enable_kubernetes_alpha(self) -> pulumi.Output[Optional[bool]]: @pulumi.getter(name="enableL4IlbSubsetting") def enable_l4_ilb_subsetting(self) -> pulumi.Output[Optional[bool]]: """ + ) Whether L4ILB Subsetting is enabled for this cluster. """ return pulumi.get(self, "enable_l4_ilb_subsetting") @@ -3676,7 +3527,7 @@ def gateway_api_config(self) -> pulumi.Output[Optional['outputs.ClusterGatewayAp @pulumi.getter(name="identityServiceConfig") def identity_service_config(self) -> pulumi.Output['outputs.ClusterIdentityServiceConfig']: """ - . Structure is documented below. + ). Structure is documented below. """ return pulumi.get(self, "identity_service_config") @@ -3800,15 +3651,9 @@ def mesh_certificates(self) -> pulumi.Output['outputs.ClusterMeshCertificates']: @pulumi.getter(name="minMasterVersion") def min_master_version(self) -> pulumi.Output[Optional[str]]: """ - The minimum version of the master. GKE - will auto-update the master to new versions, so this does not guarantee the - current master version--use the read-only `master_version` field to obtain that. - If unset, the cluster's version will be set by GKE to the version of the most recent - official release (which is not necessarily the latest version). Most users will find - the `container.get_engine_versions` data source useful - it indicates which versions - are available. If you intend to specify versions manually, - [the docs](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#specifying_cluster_version) - describe the various acceptable formats for this field. + The minimum version of the master. GKE will auto-update the master to new versions, so this does not guarantee the + current master version--use the read-only master_version field to obtain that. If unset, the cluster's version will be + set by GKE to the version of the most recent official release (which is not necessarily the latest version). """ return pulumi.get(self, "min_master_version") @@ -3878,11 +3723,7 @@ def networking_mode(self) -> pulumi.Output[str]: @pulumi.getter(name="nodeConfig") def node_config(self) -> pulumi.Output['outputs.ClusterNodeConfig']: """ - Parameters used in creating the default node pool. - Generally, this field should not be used at the same time as a - `container.NodePool` or a `node_pool` block; this configuration - manages the default node pool, which isn't recommended to be used. - Structure is documented below. + The configuration of the nodepool """ return pulumi.get(self, "node_config") @@ -3932,14 +3773,12 @@ def node_pools(self) -> pulumi.Output[Sequence['outputs.ClusterNodePool']]: @pulumi.getter(name="nodeVersion") def node_version(self) -> pulumi.Output[str]: """ - The Kubernetes version on the nodes. Must either be unset - or set to the same value as `min_master_version` on create. Defaults to the default - version set by GKE which is not necessarily the latest version. This only affects - nodes in the default node pool. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions. - To update nodes in other node pools, use the `version` attribute on the node pool. + The Kubernetes version on the nodes. Must either be unset or set to the same value as min_master_version on create. + Defaults to the default version set by GKE which is not necessarily the latest version. This only affects nodes in the + default node pool. While a fuzzy version can be specified, it's recommended that you specify explicit versions as + Terraform will see spurious diffs when fuzzy versions are used. See the google_container_engine_versions data source's + version_prefix field to approximate fuzzy versions in a Terraform-compatible way. To update nodes in other node pools, + use the version attribute on the node pool. """ return pulumi.get(self, "node_version") @@ -3996,15 +3835,8 @@ def project(self) -> pulumi.Output[str]: @pulumi.getter(name="releaseChannel") def release_channel(self) -> pulumi.Output['outputs.ClusterReleaseChannel']: """ - Configuration options for the [Release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels) - feature, which provide more control over automatic upgrades of your GKE clusters. - When updating this field, GKE imposes specific version requirements. See - [Selecting a new release channel](https://cloud.google.com/kubernetes-engine/docs/concepts/release-channels#selecting_a_new_release_channel) - for more details; the `container.get_engine_versions` datasource can provide - the default version for a channel. Note that removing the `release_channel` - field from your config will cause the provider to stop managing your cluster's - release channel, but will not unenroll it. Instead, use the `"UNSPECIFIED"` - channel. Structure is documented below. + Configuration options for the Release channel feature, which provide more control over automatic upgrades of your GKE + clusters. Note that removing this field from your config will not unenroll it. Instead, use the "UNSPECIFIED" channel. """ return pulumi.get(self, "release_channel") diff --git a/sdk/python/pulumi_gcp/container/get_engine_versions.py b/sdk/python/pulumi_gcp/container/get_engine_versions.py index e0386b645d..df7250f290 100644 --- a/sdk/python/pulumi_gcp/container/get_engine_versions.py +++ b/sdk/python/pulumi_gcp/container/get_engine_versions.py @@ -175,12 +175,6 @@ def get_engine_versions(location: Optional[str] = None, specified, the provider-level zone must be set and is used instead. :param str project: ID of the project to list available cluster versions for. Should match the project the cluster will be deployed to. Defaults to the project that the provider is authenticated with. - :param str version_prefix: If provided, the provider will only return versions - that match the string prefix. For example, `1.11.` will match all `1.11` series - releases. Since this is just a string match, it's recommended that you append a - `.` after minor versions to ensure that prefixes such as `1.1` don't match - versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - for full details on how version strings are formatted. """ __args__ = dict() __args__['location'] = location @@ -224,11 +218,5 @@ def get_engine_versions_output(location: Optional[pulumi.Input[Optional[str]]] = specified, the provider-level zone must be set and is used instead. :param str project: ID of the project to list available cluster versions for. Should match the project the cluster will be deployed to. Defaults to the project that the provider is authenticated with. - :param str version_prefix: If provided, the provider will only return versions - that match the string prefix. For example, `1.11.` will match all `1.11` series - releases. Since this is just a string match, it's recommended that you append a - `.` after minor versions to ensure that prefixes such as `1.1` don't match - versions like `1.12.5-gke.10` accidentally. See [the docs on versioning schema](https://cloud.google.com/kubernetes-engine/versioning-and-upgrades#versioning_scheme) - for full details on how version strings are formatted. """ ... diff --git a/sdk/python/pulumi_gcp/container/node_pool.py b/sdk/python/pulumi_gcp/container/node_pool.py index 75f0a901c5..64c9a20335 100644 --- a/sdk/python/pulumi_gcp/container/node_pool.py +++ b/sdk/python/pulumi_gcp/container/node_pool.py @@ -37,13 +37,8 @@ def __init__(__self__, *, :param pulumi.Input[str] cluster: The cluster to create the node pool for. Cluster must be present in `location` provided for clusters. May be specified in the format `projects/{{project}}/locations/{{location}}/clusters/{{cluster}}` or as just the name of the cluster. :param pulumi.Input['NodePoolAutoscalingArgs'] autoscaling: Configuration required by cluster autoscaler to adjust the size of the node pool to the current cluster usage. Structure is documented below. - :param pulumi.Input[int] initial_node_count: The initial number of nodes for the pool. In - regional or multi-zonal clusters, this is the number of nodes per zone. Changing - this will force recreation of the resource. WARNING: Resizing your node pool manually - may change this value in your existing cluster, which will trigger destruction - and recreation on the next provider run (to rectify the discrepancy). If you don't - need this value, don't set it. If you do need it, you can use a lifecycle block to - ignore subsqeuent changes to this field. + :param pulumi.Input[int] initial_node_count: The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + Changing this will force recreation of the resource. :param pulumi.Input[str] location: The location (region or zone) of the cluster. :param pulumi.Input['NodePoolManagementArgs'] management: Node management configuration, wherein auto-repair and auto-upgrade is configured. Structure is documented below. @@ -52,8 +47,7 @@ def __init__(__self__, *, pools belonging to clusters that do not have IP Aliasing enabled. See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr) for more information. - :param pulumi.Input[str] name: The name of the node pool. If left blank, the provider will - auto-generate a unique name. + :param pulumi.Input[str] name: The name of the node pool. If left blank, Terraform will auto-generate a unique name. :param pulumi.Input[str] name_prefix: Creates a unique name for the node pool beginning with the specified prefix. Conflicts with `name`. :param pulumi.Input['NodePoolNetworkConfigArgs'] network_config: The network configuration of the pool. Such as @@ -73,12 +67,11 @@ def __init__(__self__, *, the provider-configured project will be used. :param pulumi.Input['NodePoolUpgradeSettingsArgs'] upgrade_settings: Specify node upgrade settings to change how GKE upgrades nodes. The maximum number of nodes upgraded simultaneously is limited to 20. Structure is documented below. - :param pulumi.Input[str] version: The Kubernetes version for the nodes in this pool. Note that if this field - and `auto_upgrade` are both specified, they will fight each other for what the node version should - be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + :param pulumi.Input[str] version: The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + versions in a Terraform-compatible way. """ pulumi.set(__self__, "cluster", cluster) if autoscaling is not None: @@ -141,13 +134,8 @@ def autoscaling(self, value: Optional[pulumi.Input['NodePoolAutoscalingArgs']]): @pulumi.getter(name="initialNodeCount") def initial_node_count(self) -> Optional[pulumi.Input[int]]: """ - The initial number of nodes for the pool. In - regional or multi-zonal clusters, this is the number of nodes per zone. Changing - this will force recreation of the resource. WARNING: Resizing your node pool manually - may change this value in your existing cluster, which will trigger destruction - and recreation on the next provider run (to rectify the discrepancy). If you don't - need this value, don't set it. If you do need it, you can use a lifecycle block to - ignore subsqeuent changes to this field. + The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + Changing this will force recreation of the resource. """ return pulumi.get(self, "initial_node_count") @@ -200,8 +188,7 @@ def max_pods_per_node(self, value: Optional[pulumi.Input[int]]): @pulumi.getter def name(self) -> Optional[pulumi.Input[str]]: """ - The name of the node pool. If left blank, the provider will - auto-generate a unique name. + The name of the node pool. If left blank, Terraform will auto-generate a unique name. """ return pulumi.get(self, "name") @@ -320,12 +307,11 @@ def upgrade_settings(self, value: Optional[pulumi.Input['NodePoolUpgradeSettings @pulumi.getter def version(self) -> Optional[pulumi.Input[str]]: """ - The Kubernetes version for the nodes in this pool. Note that if this field - and `auto_upgrade` are both specified, they will fight each other for what the node version should - be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + versions in a Terraform-compatible way. """ return pulumi.get(self, "version") @@ -361,13 +347,8 @@ def __init__(__self__, *, :param pulumi.Input['NodePoolAutoscalingArgs'] autoscaling: Configuration required by cluster autoscaler to adjust the size of the node pool to the current cluster usage. Structure is documented below. :param pulumi.Input[str] cluster: The cluster to create the node pool for. Cluster must be present in `location` provided for clusters. May be specified in the format `projects/{{project}}/locations/{{location}}/clusters/{{cluster}}` or as just the name of the cluster. - :param pulumi.Input[int] initial_node_count: The initial number of nodes for the pool. In - regional or multi-zonal clusters, this is the number of nodes per zone. Changing - this will force recreation of the resource. WARNING: Resizing your node pool manually - may change this value in your existing cluster, which will trigger destruction - and recreation on the next provider run (to rectify the discrepancy). If you don't - need this value, don't set it. If you do need it, you can use a lifecycle block to - ignore subsqeuent changes to this field. + :param pulumi.Input[int] initial_node_count: The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + Changing this will force recreation of the resource. :param pulumi.Input[Sequence[pulumi.Input[str]]] instance_group_urls: The resource URLs of the managed instance groups associated with this node pool. :param pulumi.Input[str] location: The location (region or zone) of the cluster. :param pulumi.Input[Sequence[pulumi.Input[str]]] managed_instance_group_urls: List of instance group URLs which have been assigned to this node pool. @@ -378,8 +359,7 @@ def __init__(__self__, *, pools belonging to clusters that do not have IP Aliasing enabled. See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr) for more information. - :param pulumi.Input[str] name: The name of the node pool. If left blank, the provider will - auto-generate a unique name. + :param pulumi.Input[str] name: The name of the node pool. If left blank, Terraform will auto-generate a unique name. :param pulumi.Input[str] name_prefix: Creates a unique name for the node pool beginning with the specified prefix. Conflicts with `name`. :param pulumi.Input['NodePoolNetworkConfigArgs'] network_config: The network configuration of the pool. Such as @@ -399,12 +379,11 @@ def __init__(__self__, *, the provider-configured project will be used. :param pulumi.Input['NodePoolUpgradeSettingsArgs'] upgrade_settings: Specify node upgrade settings to change how GKE upgrades nodes. The maximum number of nodes upgraded simultaneously is limited to 20. Structure is documented below. - :param pulumi.Input[str] version: The Kubernetes version for the nodes in this pool. Note that if this field - and `auto_upgrade` are both specified, they will fight each other for what the node version should - be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + :param pulumi.Input[str] version: The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + versions in a Terraform-compatible way. """ if autoscaling is not None: pulumi.set(__self__, "autoscaling", autoscaling) @@ -474,13 +453,8 @@ def cluster(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="initialNodeCount") def initial_node_count(self) -> Optional[pulumi.Input[int]]: """ - The initial number of nodes for the pool. In - regional or multi-zonal clusters, this is the number of nodes per zone. Changing - this will force recreation of the resource. WARNING: Resizing your node pool manually - may change this value in your existing cluster, which will trigger destruction - and recreation on the next provider run (to rectify the discrepancy). If you don't - need this value, don't set it. If you do need it, you can use a lifecycle block to - ignore subsqeuent changes to this field. + The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + Changing this will force recreation of the resource. """ return pulumi.get(self, "initial_node_count") @@ -557,8 +531,7 @@ def max_pods_per_node(self, value: Optional[pulumi.Input[int]]): @pulumi.getter def name(self) -> Optional[pulumi.Input[str]]: """ - The name of the node pool. If left blank, the provider will - auto-generate a unique name. + The name of the node pool. If left blank, Terraform will auto-generate a unique name. """ return pulumi.get(self, "name") @@ -686,12 +659,11 @@ def upgrade_settings(self, value: Optional[pulumi.Input['NodePoolUpgradeSettings @pulumi.getter def version(self) -> Optional[pulumi.Input[str]]: """ - The Kubernetes version for the nodes in this pool. Note that if this field - and `auto_upgrade` are both specified, they will fight each other for what the node version should - be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + versions in a Terraform-compatible way. """ return pulumi.get(self, "version") @@ -723,35 +695,6 @@ def __init__(__self__, version: Optional[pulumi.Input[str]] = None, __props__=None): """ - Manages a node pool in a Google Kubernetes Engine (GKE) cluster separately from - the cluster control plane. For more information see [the official documentation](https://cloud.google.com/container-engine/docs/node-pools) - and [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters.nodePools). - - ## Example Usage - ### Using A Separately Managed Node Pool (Recommended) - - ```python - import pulumi - import pulumi_gcp as gcp - - default = gcp.service_account.Account("default", - account_id="service-account-id", - display_name="Service Account") - primary = gcp.container.Cluster("primary", - location="us-central1", - remove_default_node_pool=True, - initial_node_count=1) - primary_preemptible_nodes = gcp.container.NodePool("primaryPreemptibleNodes", - cluster=primary.id, - node_count=1, - node_config=gcp.container.NodePoolNodeConfigArgs( - preemptible=True, - machine_type="e2-medium", - service_account=default.email, - oauth_scopes=["https://www.googleapis.com/auth/cloud-platform"], - )) - ``` - ## Import Node pools can be imported using the `project`, `location`, `cluster` and `name`. If the project is omitted, the project value in the provider configuration will be used. Examples @@ -769,13 +712,8 @@ def __init__(__self__, :param pulumi.Input[pulumi.InputType['NodePoolAutoscalingArgs']] autoscaling: Configuration required by cluster autoscaler to adjust the size of the node pool to the current cluster usage. Structure is documented below. :param pulumi.Input[str] cluster: The cluster to create the node pool for. Cluster must be present in `location` provided for clusters. May be specified in the format `projects/{{project}}/locations/{{location}}/clusters/{{cluster}}` or as just the name of the cluster. - :param pulumi.Input[int] initial_node_count: The initial number of nodes for the pool. In - regional or multi-zonal clusters, this is the number of nodes per zone. Changing - this will force recreation of the resource. WARNING: Resizing your node pool manually - may change this value in your existing cluster, which will trigger destruction - and recreation on the next provider run (to rectify the discrepancy). If you don't - need this value, don't set it. If you do need it, you can use a lifecycle block to - ignore subsqeuent changes to this field. + :param pulumi.Input[int] initial_node_count: The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + Changing this will force recreation of the resource. :param pulumi.Input[str] location: The location (region or zone) of the cluster. :param pulumi.Input[pulumi.InputType['NodePoolManagementArgs']] management: Node management configuration, wherein auto-repair and auto-upgrade is configured. Structure is documented below. @@ -784,8 +722,7 @@ def __init__(__self__, pools belonging to clusters that do not have IP Aliasing enabled. See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr) for more information. - :param pulumi.Input[str] name: The name of the node pool. If left blank, the provider will - auto-generate a unique name. + :param pulumi.Input[str] name: The name of the node pool. If left blank, Terraform will auto-generate a unique name. :param pulumi.Input[str] name_prefix: Creates a unique name for the node pool beginning with the specified prefix. Conflicts with `name`. :param pulumi.Input[pulumi.InputType['NodePoolNetworkConfigArgs']] network_config: The network configuration of the pool. Such as @@ -805,12 +742,11 @@ def __init__(__self__, the provider-configured project will be used. :param pulumi.Input[pulumi.InputType['NodePoolUpgradeSettingsArgs']] upgrade_settings: Specify node upgrade settings to change how GKE upgrades nodes. The maximum number of nodes upgraded simultaneously is limited to 20. Structure is documented below. - :param pulumi.Input[str] version: The Kubernetes version for the nodes in this pool. Note that if this field - and `auto_upgrade` are both specified, they will fight each other for what the node version should - be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + :param pulumi.Input[str] version: The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + versions in a Terraform-compatible way. """ ... @overload @@ -819,35 +755,6 @@ def __init__(__self__, args: NodePoolArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Manages a node pool in a Google Kubernetes Engine (GKE) cluster separately from - the cluster control plane. For more information see [the official documentation](https://cloud.google.com/container-engine/docs/node-pools) - and [the API reference](https://cloud.google.com/kubernetes-engine/docs/reference/rest/v1beta1/projects.locations.clusters.nodePools). - - ## Example Usage - ### Using A Separately Managed Node Pool (Recommended) - - ```python - import pulumi - import pulumi_gcp as gcp - - default = gcp.service_account.Account("default", - account_id="service-account-id", - display_name="Service Account") - primary = gcp.container.Cluster("primary", - location="us-central1", - remove_default_node_pool=True, - initial_node_count=1) - primary_preemptible_nodes = gcp.container.NodePool("primaryPreemptibleNodes", - cluster=primary.id, - node_count=1, - node_config=gcp.container.NodePoolNodeConfigArgs( - preemptible=True, - machine_type="e2-medium", - service_account=default.email, - oauth_scopes=["https://www.googleapis.com/auth/cloud-platform"], - )) - ``` - ## Import Node pools can be imported using the `project`, `location`, `cluster` and `name`. If the project is omitted, the project value in the provider configuration will be used. Examples @@ -960,13 +867,8 @@ def get(resource_name: str, :param pulumi.Input[pulumi.InputType['NodePoolAutoscalingArgs']] autoscaling: Configuration required by cluster autoscaler to adjust the size of the node pool to the current cluster usage. Structure is documented below. :param pulumi.Input[str] cluster: The cluster to create the node pool for. Cluster must be present in `location` provided for clusters. May be specified in the format `projects/{{project}}/locations/{{location}}/clusters/{{cluster}}` or as just the name of the cluster. - :param pulumi.Input[int] initial_node_count: The initial number of nodes for the pool. In - regional or multi-zonal clusters, this is the number of nodes per zone. Changing - this will force recreation of the resource. WARNING: Resizing your node pool manually - may change this value in your existing cluster, which will trigger destruction - and recreation on the next provider run (to rectify the discrepancy). If you don't - need this value, don't set it. If you do need it, you can use a lifecycle block to - ignore subsqeuent changes to this field. + :param pulumi.Input[int] initial_node_count: The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + Changing this will force recreation of the resource. :param pulumi.Input[Sequence[pulumi.Input[str]]] instance_group_urls: The resource URLs of the managed instance groups associated with this node pool. :param pulumi.Input[str] location: The location (region or zone) of the cluster. :param pulumi.Input[Sequence[pulumi.Input[str]]] managed_instance_group_urls: List of instance group URLs which have been assigned to this node pool. @@ -977,8 +879,7 @@ def get(resource_name: str, pools belonging to clusters that do not have IP Aliasing enabled. See the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/flexible-pod-cidr) for more information. - :param pulumi.Input[str] name: The name of the node pool. If left blank, the provider will - auto-generate a unique name. + :param pulumi.Input[str] name: The name of the node pool. If left blank, Terraform will auto-generate a unique name. :param pulumi.Input[str] name_prefix: Creates a unique name for the node pool beginning with the specified prefix. Conflicts with `name`. :param pulumi.Input[pulumi.InputType['NodePoolNetworkConfigArgs']] network_config: The network configuration of the pool. Such as @@ -998,12 +899,11 @@ def get(resource_name: str, the provider-configured project will be used. :param pulumi.Input[pulumi.InputType['NodePoolUpgradeSettingsArgs']] upgrade_settings: Specify node upgrade settings to change how GKE upgrades nodes. The maximum number of nodes upgraded simultaneously is limited to 20. Structure is documented below. - :param pulumi.Input[str] version: The Kubernetes version for the nodes in this pool. Note that if this field - and `auto_upgrade` are both specified, they will fight each other for what the node version should - be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + :param pulumi.Input[str] version: The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + versions in a Terraform-compatible way. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -1051,13 +951,8 @@ def cluster(self) -> pulumi.Output[str]: @pulumi.getter(name="initialNodeCount") def initial_node_count(self) -> pulumi.Output[int]: """ - The initial number of nodes for the pool. In - regional or multi-zonal clusters, this is the number of nodes per zone. Changing - this will force recreation of the resource. WARNING: Resizing your node pool manually - may change this value in your existing cluster, which will trigger destruction - and recreation on the next provider run (to rectify the discrepancy). If you don't - need this value, don't set it. If you do need it, you can use a lifecycle block to - ignore subsqeuent changes to this field. + The initial number of nodes for the pool. In regional or multi-zonal clusters, this is the number of nodes per zone. + Changing this will force recreation of the resource. """ return pulumi.get(self, "initial_node_count") @@ -1110,8 +1005,7 @@ def max_pods_per_node(self) -> pulumi.Output[int]: @pulumi.getter def name(self) -> pulumi.Output[str]: """ - The name of the node pool. If left blank, the provider will - auto-generate a unique name. + The name of the node pool. If left blank, Terraform will auto-generate a unique name. """ return pulumi.get(self, "name") @@ -1199,12 +1093,11 @@ def upgrade_settings(self) -> pulumi.Output['outputs.NodePoolUpgradeSettings']: @pulumi.getter def version(self) -> pulumi.Output[str]: """ - The Kubernetes version for the nodes in this pool. Note that if this field - and `auto_upgrade` are both specified, they will fight each other for what the node version should - be, so setting both is highly discouraged. While a fuzzy version can be specified, it's - recommended that you specify explicit versions as the provider will see spurious diffs - when fuzzy versions are used. See the `container.get_engine_versions` data source's - `version_prefix` field to approximate fuzzy versions in a provider-compatible way. + The Kubernetes version for the nodes in this pool. Note that if this field and auto_upgrade are both specified, they + will fight each other for what the node version should be, so setting both is highly discouraged. While a fuzzy version + can be specified, it's recommended that you specify explicit versions as Terraform will see spurious diffs when fuzzy + versions are used. See the google_container_engine_versions data source's version_prefix field to approximate fuzzy + versions in a Terraform-compatible way. """ return pulumi.get(self, "version") diff --git a/sdk/python/pulumi_gcp/container/outputs.py b/sdk/python/pulumi_gcp/container/outputs.py index 94a7aa2432..c552e07ac8 100644 --- a/sdk/python/pulumi_gcp/container/outputs.py +++ b/sdk/python/pulumi_gcp/container/outputs.py @@ -3077,9 +3077,9 @@ def __init__(__self__, *, :param 'ClusterAddonsConfigHttpLoadBalancingArgs' http_load_balancing: The status of the HTTP (L7) load balancing controller addon, which makes it easy to set up HTTP load balancers for services in a cluster. It is enabled by default; set `disabled = true` to disable. - :param 'ClusterAddonsConfigIstioConfigArgs' istio_config: . + :param 'ClusterAddonsConfigIstioConfigArgs' istio_config: ). Structure is documented below. - :param 'ClusterAddonsConfigKalmConfigArgs' kalm_config: . + :param 'ClusterAddonsConfigKalmConfigArgs' kalm_config: ). Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. :param 'ClusterAddonsConfigNetworkPolicyConfigArgs' network_policy_config: Whether we should enable the network policy addon for the master. This must be enabled in order to enable network policy for the nodes. @@ -3192,7 +3192,7 @@ def http_load_balancing(self) -> Optional['outputs.ClusterAddonsConfigHttpLoadBa @pulumi.getter(name="istioConfig") def istio_config(self) -> Optional['outputs.ClusterAddonsConfigIstioConfig']: """ - . + ). Structure is documented below. """ return pulumi.get(self, "istio_config") @@ -3201,7 +3201,7 @@ def istio_config(self) -> Optional['outputs.ClusterAddonsConfigIstioConfig']: @pulumi.getter(name="kalmConfig") def kalm_config(self) -> Optional['outputs.ClusterAddonsConfigKalmConfig']: """ - . + ). Configuration for the KALM addon, which manages the lifecycle of k8s. It is disabled by default; Set `enabled = true` to enable. """ return pulumi.get(self, "kalm_config") @@ -3732,7 +3732,8 @@ def __init__(__self__, *, :param str disk_type: Type of the disk attached to each node (e.g. 'pd-standard', 'pd-ssd' or 'pd-balanced'). Defaults to `pd-standard` :param str image_type: The default image type used by NAP once a new node pool is being created. Please note that according to the [official documentation](https://cloud.google.com/kubernetes-engine/docs/how-to/node-auto-provisioning#default-image-type) the value must be one of the [COS_CONTAINERD, COS, UBUNTU_CONTAINERD, UBUNTU]. __NOTE__ : COS AND UBUNTU are deprecated as of `GKE 1.24` :param 'ClusterClusterAutoscalingAutoProvisioningDefaultsManagementArgs' management: NodeManagement configuration for this NodePool. Structure is documented below. - :param str min_cpu_platform: Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the + :param str min_cpu_platform: ) + Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such as "Intel Haswell" or "Intel Sandy Bridge". :param Sequence[str] oauth_scopes: Scopes that are used by NAP and GKE Autopilot when creating node pools. Use the "https://www.googleapis.com/auth/cloud-platform" scope to grant access to all APIs. It is recommended that you set `service_account` to a non-default service account and grant IAM roles to that service account for only the resources that it needs. @@ -3805,6 +3806,7 @@ def management(self) -> Optional['outputs.ClusterClusterAutoscalingAutoProvision @pulumi.getter(name="minCpuPlatform") def min_cpu_platform(self) -> Optional[str]: """ + ) Minimum CPU platform to be used for NAP created node pools. The instance may be scheduled on the specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such as "Intel Haswell" or "Intel Sandy Bridge". @@ -5266,7 +5268,7 @@ def __init__(__self__, *, taints: Optional[Sequence['outputs.ClusterNodeConfigTaint']] = None, workload_metadata_config: Optional['outputs.ClusterNodeConfigWorkloadMetadataConfig'] = None): """ - :param str boot_disk_kms_key: The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + :param str boot_disk_kms_key: The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption :param int disk_size_gb: Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. Defaults to 100GB. :param str disk_type: Type of the disk attached to each node @@ -5278,8 +5280,6 @@ def __init__(__self__, *, A `machine_type` that has more than 16 GiB of memory is also recommended. GCFS must be enabled in order to use [image streaming](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming). Structure is documented below. - :param Sequence['ClusterNodeConfigGuestAcceleratorArgs'] guest_accelerators: List of the type and count of accelerator cards attached to the instance. - Structure documented below. :param 'ClusterNodeConfigGvnicArgs' gvnic: Google Virtual NIC (gVNIC) is a virtual network interface. Installing the gVNIC driver allows for more efficient traffic transmission across the Google network infrastructure. gVNIC is an alternative to the virtIO-based ethernet driver. GKE nodes must use a Container-Optimized OS node image. @@ -5300,11 +5300,6 @@ def __init__(__self__, *, :param str machine_type: The name of a Google Compute Engine machine type. Defaults to `e2-medium`. To create a custom machine type, value should be set as specified [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). - :param Mapping[str, str] metadata: The metadata key/value pairs assigned to instances in - the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - `true` by the API; if `metadata` is set but that default value is not - included, the provider will attempt to unset the value. To avoid this, set the - value in your config. :param str min_cpu_platform: Minimum CPU platform to be used by this instance. The instance may be scheduled on the specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such as `Intel Haswell`. See the @@ -5320,6 +5315,8 @@ def __init__(__self__, *, :param 'ClusterNodeConfigReservationAffinityArgs' reservation_affinity: The configuration of the desired reservation which instances could take capacity from. Structure is documented below. :param Mapping[str, str] resource_labels: The GCP labels (key/value pairs) to be applied to each node. Refer [here](https://cloud.google.com/kubernetes-engine/docs/how-to/creating-managing-labels) for how these labels are applied to clusters, node pools and nodes. + :param 'ClusterNodeConfigSandboxConfigArgs' sandbox_config: ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + Structure is documented below. :param str service_account: The service account to be used by the Node VMs. If not specified, the "default" service account is used. :param 'ClusterNodeConfigShieldedInstanceConfigArgs' shielded_instance_config: Shielded Instance options. Structure is documented below. @@ -5328,14 +5325,6 @@ def __init__(__self__, *, for more information. Defaults to false. :param Sequence[str] tags: The list of instance tags applied to all nodes. Tags are used to identify valid sources or targets for network firewalls. - :param Sequence['ClusterNodeConfigTaintArgs'] taints: A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - to apply to nodes. GKE's API can only set this field on cluster creation. - However, GKE will add taints to your nodes if you enable certain features such - as GPUs. If this field is set, any diffs on this field will cause the provider to - recreate the underlying resource. Taint values can be updated safely in - Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - this field to manage taints. If you do, `lifecycle.ignore_changes` is - recommended. Structure is documented below. :param 'ClusterNodeConfigWorkloadMetadataConfigArgs' workload_metadata_config: Metadata configuration to expose to workloads on the node pool. Structure is documented below. """ @@ -5400,7 +5389,7 @@ def __init__(__self__, *, @pulumi.getter(name="bootDiskKmsKey") def boot_disk_kms_key(self) -> Optional[str]: """ - The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption """ return pulumi.get(self, "boot_disk_kms_key") @@ -5446,10 +5435,6 @@ def gcfs_config(self) -> Optional['outputs.ClusterNodeConfigGcfsConfig']: @property @pulumi.getter(name="guestAccelerators") def guest_accelerators(self) -> Optional[Sequence['outputs.ClusterNodeConfigGuestAccelerator']]: - """ - List of the type and count of accelerator cards attached to the instance. - Structure documented below. - """ return pulumi.get(self, "guest_accelerators") @property @@ -5531,13 +5516,6 @@ def machine_type(self) -> Optional[str]: @property @pulumi.getter def metadata(self) -> Optional[Mapping[str, str]]: - """ - The metadata key/value pairs assigned to instances in - the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - `true` by the API; if `metadata` is set but that default value is not - included, the provider will attempt to unset the value. To avoid this, set the - value in your config. - """ return pulumi.get(self, "metadata") @property @@ -5600,6 +5578,10 @@ def resource_labels(self) -> Optional[Mapping[str, str]]: @property @pulumi.getter(name="sandboxConfig") def sandbox_config(self) -> Optional['outputs.ClusterNodeConfigSandboxConfig']: + """ + ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + Structure is documented below. + """ return pulumi.get(self, "sandbox_config") @property @@ -5641,16 +5623,6 @@ def tags(self) -> Optional[Sequence[str]]: @property @pulumi.getter def taints(self) -> Optional[Sequence['outputs.ClusterNodeConfigTaint']]: - """ - A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - to apply to nodes. GKE's API can only set this field on cluster creation. - However, GKE will add taints to your nodes if you enable certain features such - as GPUs. If this field is set, any diffs on this field will cause the provider to - recreate the underlying resource. Taint values can be updated safely in - Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - this field to manage taints. If you do, `lifecycle.ignore_changes` is - recommended. Structure is documented below. - """ return pulumi.get(self, "taints") @property @@ -6150,7 +6122,7 @@ def __init__(__self__, *, """ :param str mode: How to expose the node metadata to the workload running on the node. Accepted values are: - * UNSPECIFIED: Not Set + * MODE_UNSPECIFIED: Not Set * GCE_METADATA: Expose all Compute Engine metadata to pods. * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. """ @@ -6162,7 +6134,7 @@ def mode(self) -> str: """ How to expose the node metadata to the workload running on the node. Accepted values are: - * UNSPECIFIED: Not Set + * MODE_UNSPECIFIED: Not Set * GCE_METADATA: Expose all Compute Engine metadata to pods. * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. """ @@ -6234,13 +6206,6 @@ def __init__(__self__, *, :param 'ClusterNodePoolManagementArgs' management: NodeManagement configuration for this NodePool. Structure is documented below. :param str name: The name of the cluster, unique within the project and location. - :param 'ClusterNodePoolNetworkConfigArgs' network_config: Configuration for - [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - :param 'ClusterNodePoolNodeConfigArgs' node_config: Parameters used in creating the default node pool. - Generally, this field should not be used at the same time as a - `container.NodePool` or a `node_pool` block; this configuration - manages the default node pool, which isn't recommended to be used. - Structure is documented below. :param Sequence[str] node_locations: The list of zones in which the cluster's nodes are located. Nodes must be in the region of their regional cluster or in the same region as their cluster's zone for zonal clusters. If this is specified for @@ -6336,22 +6301,11 @@ def name_prefix(self) -> Optional[str]: @property @pulumi.getter(name="networkConfig") def network_config(self) -> Optional['outputs.ClusterNodePoolNetworkConfig']: - """ - Configuration for - [Adding Pod IP address ranges](https://cloud.google.com/kubernetes-engine/docs/how-to/multi-pod-cidr)) to the node pool. Structure is documented below - """ return pulumi.get(self, "network_config") @property @pulumi.getter(name="nodeConfig") def node_config(self) -> Optional['outputs.ClusterNodePoolNodeConfig']: - """ - Parameters used in creating the default node pool. - Generally, this field should not be used at the same time as a - `container.NodePool` or a `node_pool` block; this configuration - manages the default node pool, which isn't recommended to be used. - Structure is documented below. - """ return pulumi.get(self, "node_config") @property @@ -6699,13 +6653,10 @@ def __init__(__self__, *, pod_ipv4_cidr_block: Optional[str] = None, pod_range: Optional[str] = None): """ - :param bool create_pod_range: Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. :param bool enable_private_nodes: Enables the private cluster feature, creating a private endpoint on the cluster. In a private cluster, nodes only have RFC 1918 private addresses and communicate with the master's private endpoint via private networking. - :param str pod_ipv4_cidr_block: The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - :param str pod_range: The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. """ if create_pod_range is not None: pulumi.set(__self__, "create_pod_range", create_pod_range) @@ -6719,9 +6670,6 @@ def __init__(__self__, *, @property @pulumi.getter(name="createPodRange") def create_pod_range(self) -> Optional[bool]: - """ - Whether to create a new range for pod IPs in this node pool. Defaults are provided for `pod_range` and `pod_ipv4_cidr_block` if they are not specified. - """ return pulumi.get(self, "create_pod_range") @property @@ -6738,17 +6686,11 @@ def enable_private_nodes(self) -> Optional[bool]: @property @pulumi.getter(name="podIpv4CidrBlock") def pod_ipv4_cidr_block(self) -> Optional[str]: - """ - The IP address range for pod IPs in this node pool. Only applicable if createPodRange is true. Set to blank to have a range chosen with the default size. Set to /netmask (e.g. /14) to have a range chosen with a specific netmask. Set to a CIDR notation (e.g. 10.96.0.0/14) to pick a specific range to use. - """ return pulumi.get(self, "pod_ipv4_cidr_block") @property @pulumi.getter(name="podRange") def pod_range(self) -> Optional[str]: - """ - The ID of the secondary range for pod IPs. If `create_pod_range` is true, this ID is used for the new range. If `create_pod_range` is false, uses an existing secondary range with this ID. - """ return pulumi.get(self, "pod_range") @@ -6841,7 +6783,7 @@ def __init__(__self__, *, taints: Optional[Sequence['outputs.ClusterNodePoolNodeConfigTaint']] = None, workload_metadata_config: Optional['outputs.ClusterNodePoolNodeConfigWorkloadMetadataConfig'] = None): """ - :param str boot_disk_kms_key: The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + :param str boot_disk_kms_key: The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption :param int disk_size_gb: Size of the disk attached to each node, specified in GB. The smallest allowed disk size is 10GB. Defaults to 100GB. :param str disk_type: Type of the disk attached to each node @@ -6853,8 +6795,6 @@ def __init__(__self__, *, A `machine_type` that has more than 16 GiB of memory is also recommended. GCFS must be enabled in order to use [image streaming](https://cloud.google.com/kubernetes-engine/docs/how-to/image-streaming). Structure is documented below. - :param Sequence['ClusterNodePoolNodeConfigGuestAcceleratorArgs'] guest_accelerators: List of the type and count of accelerator cards attached to the instance. - Structure documented below. :param 'ClusterNodePoolNodeConfigGvnicArgs' gvnic: Google Virtual NIC (gVNIC) is a virtual network interface. Installing the gVNIC driver allows for more efficient traffic transmission across the Google network infrastructure. gVNIC is an alternative to the virtIO-based ethernet driver. GKE nodes must use a Container-Optimized OS node image. @@ -6875,11 +6815,6 @@ def __init__(__self__, *, :param str machine_type: The name of a Google Compute Engine machine type. Defaults to `e2-medium`. To create a custom machine type, value should be set as specified [here](https://cloud.google.com/compute/docs/reference/latest/instances#machineType). - :param Mapping[str, str] metadata: The metadata key/value pairs assigned to instances in - the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - `true` by the API; if `metadata` is set but that default value is not - included, the provider will attempt to unset the value. To avoid this, set the - value in your config. :param str min_cpu_platform: Minimum CPU platform to be used by this instance. The instance may be scheduled on the specified or newer CPU platform. Applicable values are the friendly names of CPU platforms, such as `Intel Haswell`. See the @@ -6895,6 +6830,8 @@ def __init__(__self__, *, :param 'ClusterNodePoolNodeConfigReservationAffinityArgs' reservation_affinity: The configuration of the desired reservation which instances could take capacity from. Structure is documented below. :param Mapping[str, str] resource_labels: The GCP labels (key/value pairs) to be applied to each node. Refer [here](https://cloud.google.com/kubernetes-engine/docs/how-to/creating-managing-labels) for how these labels are applied to clusters, node pools and nodes. + :param 'ClusterNodePoolNodeConfigSandboxConfigArgs' sandbox_config: ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + Structure is documented below. :param str service_account: The service account to be used by the Node VMs. If not specified, the "default" service account is used. :param 'ClusterNodePoolNodeConfigShieldedInstanceConfigArgs' shielded_instance_config: Shielded Instance options. Structure is documented below. @@ -6903,14 +6840,6 @@ def __init__(__self__, *, for more information. Defaults to false. :param Sequence[str] tags: The list of instance tags applied to all nodes. Tags are used to identify valid sources or targets for network firewalls. - :param Sequence['ClusterNodePoolNodeConfigTaintArgs'] taints: A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - to apply to nodes. GKE's API can only set this field on cluster creation. - However, GKE will add taints to your nodes if you enable certain features such - as GPUs. If this field is set, any diffs on this field will cause the provider to - recreate the underlying resource. Taint values can be updated safely in - Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - this field to manage taints. If you do, `lifecycle.ignore_changes` is - recommended. Structure is documented below. :param 'ClusterNodePoolNodeConfigWorkloadMetadataConfigArgs' workload_metadata_config: Metadata configuration to expose to workloads on the node pool. Structure is documented below. """ @@ -6975,7 +6904,7 @@ def __init__(__self__, *, @pulumi.getter(name="bootDiskKmsKey") def boot_disk_kms_key(self) -> Optional[str]: """ - The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: + The Customer Managed Encryption Key used to encrypt the boot disk attached to each node in the node pool. This should be of the form projects/[KEY_PROJECT_ID]/locations/[LOCATION]/keyRings/[RING_NAME]/cryptoKeys/[KEY_NAME]. For more information about protecting resources with Cloud KMS Keys please see: https://cloud.google.com/compute/docs/disks/customer-managed-encryption """ return pulumi.get(self, "boot_disk_kms_key") @@ -7021,10 +6950,6 @@ def gcfs_config(self) -> Optional['outputs.ClusterNodePoolNodeConfigGcfsConfig'] @property @pulumi.getter(name="guestAccelerators") def guest_accelerators(self) -> Optional[Sequence['outputs.ClusterNodePoolNodeConfigGuestAccelerator']]: - """ - List of the type and count of accelerator cards attached to the instance. - Structure documented below. - """ return pulumi.get(self, "guest_accelerators") @property @@ -7106,13 +7031,6 @@ def machine_type(self) -> Optional[str]: @property @pulumi.getter def metadata(self) -> Optional[Mapping[str, str]]: - """ - The metadata key/value pairs assigned to instances in - the cluster. From GKE `1.12` onwards, `disable-legacy-endpoints` is set to - `true` by the API; if `metadata` is set but that default value is not - included, the provider will attempt to unset the value. To avoid this, set the - value in your config. - """ return pulumi.get(self, "metadata") @property @@ -7175,6 +7093,10 @@ def resource_labels(self) -> Optional[Mapping[str, str]]: @property @pulumi.getter(name="sandboxConfig") def sandbox_config(self) -> Optional['outputs.ClusterNodePoolNodeConfigSandboxConfig']: + """ + ) [GKE Sandbox](https://cloud.google.com/kubernetes-engine/docs/how-to/sandbox-pods) configuration. When enabling this feature you must specify `image_type = "COS_CONTAINERD"` and `node_version = "1.12.7-gke.17"` or later to use it. + Structure is documented below. + """ return pulumi.get(self, "sandbox_config") @property @@ -7216,16 +7138,6 @@ def tags(self) -> Optional[Sequence[str]]: @property @pulumi.getter def taints(self) -> Optional[Sequence['outputs.ClusterNodePoolNodeConfigTaint']]: - """ - A list of [Kubernetes taints](https://kubernetes.io/docs/concepts/configuration/taint-and-toleration/) - to apply to nodes. GKE's API can only set this field on cluster creation. - However, GKE will add taints to your nodes if you enable certain features such - as GPUs. If this field is set, any diffs on this field will cause the provider to - recreate the underlying resource. Taint values can be updated safely in - Kubernetes (eg. through `kubectl`), and it's recommended that you do not use - this field to manage taints. If you do, `lifecycle.ignore_changes` is - recommended. Structure is documented below. - """ return pulumi.get(self, "taints") @property @@ -7725,7 +7637,7 @@ def __init__(__self__, *, """ :param str mode: How to expose the node metadata to the workload running on the node. Accepted values are: - * UNSPECIFIED: Not Set + * MODE_UNSPECIFIED: Not Set * GCE_METADATA: Expose all Compute Engine metadata to pods. * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. """ @@ -7737,7 +7649,7 @@ def mode(self) -> str: """ How to expose the node metadata to the workload running on the node. Accepted values are: - * UNSPECIFIED: Not Set + * MODE_UNSPECIFIED: Not Set * GCE_METADATA: Expose all Compute Engine metadata to pods. * GKE_METADATA: Run the GKE Metadata Server on this node. The GKE Metadata Server exposes a metadata API to workloads that is compatible with the V1 Compute Metadata APIs exposed by the Compute Engine and App Engine Metadata Servers. This feature can only be enabled if [workload identity](https://cloud.google.com/kubernetes-engine/docs/how-to/workload-identity) is enabled at the cluster level. """ @@ -8119,9 +8031,6 @@ def __init__(__self__, *, creating a private endpoint on the cluster. In a private cluster, nodes only have RFC 1918 private addresses and communicate with the master's private endpoint via private networking. - :param 'ClusterPrivateClusterConfigMasterGlobalAccessConfigArgs' master_global_access_config: Controls cluster master global - access settings. If unset, the provider will no longer manage this field and will - not modify the previously-set value. Structure is documented below. :param str master_ipv4_cidr_block: The IP range in CIDR notation to use for the hosted master network. This range will be used for assigning private IP addresses to the cluster master(s) and the ILB VIP. This range must not overlap @@ -8176,11 +8085,6 @@ def enable_private_nodes(self) -> Optional[bool]: @property @pulumi.getter(name="masterGlobalAccessConfig") def master_global_access_config(self) -> Optional['outputs.ClusterPrivateClusterConfigMasterGlobalAccessConfig']: - """ - Controls cluster master global - access settings. If unset, the provider will no longer manage this field and will - not modify the previously-set value. Structure is documented below. - """ return pulumi.get(self, "master_global_access_config") @property diff --git a/sdk/python/pulumi_gcp/datacatalog/entry_group.py b/sdk/python/pulumi_gcp/datacatalog/entry_group.py index 0fe1378416..70f465a646 100644 --- a/sdk/python/pulumi_gcp/datacatalog/entry_group.py +++ b/sdk/python/pulumi_gcp/datacatalog/entry_group.py @@ -246,8 +246,8 @@ def __init__(__self__, import pulumi_gcp as gcp basic_entry_group = gcp.datacatalog.EntryGroup("basicEntryGroup", - description="example entry group", - display_name="entry group", + description="entry group created by Terraform", + display_name="terraform entry group", entry_group_id="my_group") ``` @@ -300,8 +300,8 @@ def __init__(__self__, import pulumi_gcp as gcp basic_entry_group = gcp.datacatalog.EntryGroup("basicEntryGroup", - description="example entry group", - display_name="entry group", + description="entry group created by Terraform", + display_name="terraform entry group", entry_group_id="my_group") ``` diff --git a/sdk/python/pulumi_gcp/datacatalog/policy_tag.py b/sdk/python/pulumi_gcp/datacatalog/policy_tag.py index 473d70c887..469abbcef3 100644 --- a/sdk/python/pulumi_gcp/datacatalog/policy_tag.py +++ b/sdk/python/pulumi_gcp/datacatalog/policy_tag.py @@ -226,14 +226,6 @@ def __init__(__self__, taxonomy: Optional[pulumi.Input[str]] = None, __props__=None): """ - Denotes one policy tag in a taxonomy. - - To get more information about PolicyTag, see: - - * [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies.policyTags) - * How-to Guides - * [Official Documentation](https://cloud.google.com/data-catalog/docs) - ## Example Usage ### Data Catalog Taxonomies Policy Tag Basic @@ -314,14 +306,6 @@ def __init__(__self__, args: PolicyTagArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Denotes one policy tag in a taxonomy. - - To get more information about PolicyTag, see: - - * [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies.policyTags) - * How-to Guides - * [Official Documentation](https://cloud.google.com/data-catalog/docs) - ## Example Usage ### Data Catalog Taxonomies Policy Tag Basic diff --git a/sdk/python/pulumi_gcp/datacatalog/policy_tag_iam_binding.py b/sdk/python/pulumi_gcp/datacatalog/policy_tag_iam_binding.py index 18714bac52..30193597e0 100644 --- a/sdk/python/pulumi_gcp/datacatalog/policy_tag_iam_binding.py +++ b/sdk/python/pulumi_gcp/datacatalog/policy_tag_iam_binding.py @@ -173,58 +173,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - - * `datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - * `datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - * `datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - - > **Note:** `datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `datacatalog.PolicyTagIamBinding` and `datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - - > **Note:** `datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.datacatalog.PolicyTagIamPolicy("policy", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.datacatalog.PolicyTagIamBinding("binding", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.datacatalog.PolicyTagIamMember("member", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -263,58 +211,6 @@ def __init__(__self__, args: PolicyTagIamBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - - * `datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - * `datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - * `datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - - > **Note:** `datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `datacatalog.PolicyTagIamBinding` and `datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - - > **Note:** `datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.datacatalog.PolicyTagIamPolicy("policy", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.datacatalog.PolicyTagIamBinding("binding", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.datacatalog.PolicyTagIamMember("member", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/datacatalog/policy_tag_iam_member.py b/sdk/python/pulumi_gcp/datacatalog/policy_tag_iam_member.py index d623fd5247..36e27c0553 100644 --- a/sdk/python/pulumi_gcp/datacatalog/policy_tag_iam_member.py +++ b/sdk/python/pulumi_gcp/datacatalog/policy_tag_iam_member.py @@ -173,58 +173,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - - * `datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - * `datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - * `datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - - > **Note:** `datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `datacatalog.PolicyTagIamBinding` and `datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - - > **Note:** `datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.datacatalog.PolicyTagIamPolicy("policy", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.datacatalog.PolicyTagIamBinding("binding", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.datacatalog.PolicyTagIamMember("member", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -263,58 +211,6 @@ def __init__(__self__, args: PolicyTagIamMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - - * `datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - * `datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - * `datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - - > **Note:** `datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `datacatalog.PolicyTagIamBinding` and `datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - - > **Note:** `datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.datacatalog.PolicyTagIamPolicy("policy", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.datacatalog.PolicyTagIamBinding("binding", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.datacatalog.PolicyTagIamMember("member", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/datacatalog/policy_tag_iam_policy.py b/sdk/python/pulumi_gcp/datacatalog/policy_tag_iam_policy.py index 4ed2a597b1..911ce392e5 100644 --- a/sdk/python/pulumi_gcp/datacatalog/policy_tag_iam_policy.py +++ b/sdk/python/pulumi_gcp/datacatalog/policy_tag_iam_policy.py @@ -118,58 +118,6 @@ def __init__(__self__, policy_tag: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - - * `datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - * `datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - * `datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - - > **Note:** `datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `datacatalog.PolicyTagIamBinding` and `datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - - > **Note:** `datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.datacatalog.PolicyTagIamPolicy("policy", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.datacatalog.PolicyTagIamBinding("binding", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.datacatalog.PolicyTagIamMember("member", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -207,58 +155,6 @@ def __init__(__self__, args: PolicyTagIamPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Data catalog PolicyTag. Each of these resources serves a different use case: - - * `datacatalog.PolicyTagIamPolicy`: Authoritative. Sets the IAM policy for the policytag and replaces any existing policy already attached. - * `datacatalog.PolicyTagIamBinding`: 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 policytag are preserved. - * `datacatalog.PolicyTagIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the policytag are preserved. - - > **Note:** `datacatalog.PolicyTagIamPolicy` **cannot** be used in conjunction with `datacatalog.PolicyTagIamBinding` and `datacatalog.PolicyTagIamMember` or they will fight over what your policy should be. - - > **Note:** `datacatalog.PolicyTagIamBinding` resources **can be** used in conjunction with `datacatalog.PolicyTagIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.datacatalog.PolicyTagIamPolicy("policy", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.datacatalog.PolicyTagIamBinding("binding", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_policy\\_tag\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.datacatalog.PolicyTagIamMember("member", - policy_tag=google_data_catalog_policy_tag["basic_policy_tag"]["name"], - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* {{policy_tag}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog policytag IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/datacatalog/taxonomy.py b/sdk/python/pulumi_gcp/datacatalog/taxonomy.py index a3149dfed6..1523dbce15 100644 --- a/sdk/python/pulumi_gcp/datacatalog/taxonomy.py +++ b/sdk/python/pulumi_gcp/datacatalog/taxonomy.py @@ -248,14 +248,6 @@ def __init__(__self__, region: Optional[pulumi.Input[str]] = None, __props__=None): """ - A collection of policy tags that classify data along a common axis. - - To get more information about Taxonomy, see: - - * [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies) - * How-to Guides - * [Official Documentation](https://cloud.google.com/data-catalog/docs) - ## Example Usage ### Data Catalog Taxonomy Basic @@ -302,14 +294,6 @@ def __init__(__self__, args: TaxonomyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A collection of policy tags that classify data along a common axis. - - To get more information about Taxonomy, see: - - * [API documentation](https://cloud.google.com/data-catalog/docs/reference/rest/v1beta1/projects.locations.taxonomies) - * How-to Guides - * [Official Documentation](https://cloud.google.com/data-catalog/docs) - ## Example Usage ### Data Catalog Taxonomy Basic diff --git a/sdk/python/pulumi_gcp/datacatalog/taxonomy_iam_binding.py b/sdk/python/pulumi_gcp/datacatalog/taxonomy_iam_binding.py index d4e6aaf6cd..75c38dae6c 100644 --- a/sdk/python/pulumi_gcp/datacatalog/taxonomy_iam_binding.py +++ b/sdk/python/pulumi_gcp/datacatalog/taxonomy_iam_binding.py @@ -235,58 +235,6 @@ def __init__(__self__, taxonomy: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - - * `datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - * `datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - * `datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - - > **Note:** `datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `datacatalog.TaxonomyIamBinding` and `datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - - > **Note:** `datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.datacatalog.TaxonomyIamPolicy("policy", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.datacatalog.TaxonomyIamBinding("binding", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.datacatalog.TaxonomyIamMember("member", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -327,58 +275,6 @@ def __init__(__self__, args: TaxonomyIamBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - - * `datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - * `datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - * `datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - - > **Note:** `datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `datacatalog.TaxonomyIamBinding` and `datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - - > **Note:** `datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.datacatalog.TaxonomyIamPolicy("policy", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.datacatalog.TaxonomyIamBinding("binding", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.datacatalog.TaxonomyIamMember("member", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/datacatalog/taxonomy_iam_member.py b/sdk/python/pulumi_gcp/datacatalog/taxonomy_iam_member.py index 9d5ba5fb4a..336752f621 100644 --- a/sdk/python/pulumi_gcp/datacatalog/taxonomy_iam_member.py +++ b/sdk/python/pulumi_gcp/datacatalog/taxonomy_iam_member.py @@ -235,58 +235,6 @@ def __init__(__self__, taxonomy: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - - * `datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - * `datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - * `datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - - > **Note:** `datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `datacatalog.TaxonomyIamBinding` and `datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - - > **Note:** `datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.datacatalog.TaxonomyIamPolicy("policy", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.datacatalog.TaxonomyIamBinding("binding", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.datacatalog.TaxonomyIamMember("member", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -327,58 +275,6 @@ def __init__(__self__, args: TaxonomyIamMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - - * `datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - * `datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - * `datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - - > **Note:** `datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `datacatalog.TaxonomyIamBinding` and `datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - - > **Note:** `datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.datacatalog.TaxonomyIamPolicy("policy", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.datacatalog.TaxonomyIamBinding("binding", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.datacatalog.TaxonomyIamMember("member", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/datacatalog/taxonomy_iam_policy.py b/sdk/python/pulumi_gcp/datacatalog/taxonomy_iam_policy.py index e5d3c582bf..641ff99f23 100644 --- a/sdk/python/pulumi_gcp/datacatalog/taxonomy_iam_policy.py +++ b/sdk/python/pulumi_gcp/datacatalog/taxonomy_iam_policy.py @@ -180,58 +180,6 @@ def __init__(__self__, taxonomy: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - - * `datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - * `datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - * `datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - - > **Note:** `datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `datacatalog.TaxonomyIamBinding` and `datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - - > **Note:** `datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.datacatalog.TaxonomyIamPolicy("policy", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.datacatalog.TaxonomyIamBinding("binding", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.datacatalog.TaxonomyIamMember("member", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -271,58 +219,6 @@ def __init__(__self__, args: TaxonomyIamPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Data catalog Taxonomy. Each of these resources serves a different use case: - - * `datacatalog.TaxonomyIamPolicy`: Authoritative. Sets the IAM policy for the taxonomy and replaces any existing policy already attached. - * `datacatalog.TaxonomyIamBinding`: 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 taxonomy are preserved. - * `datacatalog.TaxonomyIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the taxonomy are preserved. - - > **Note:** `datacatalog.TaxonomyIamPolicy` **cannot** be used in conjunction with `datacatalog.TaxonomyIamBinding` and `datacatalog.TaxonomyIamMember` or they will fight over what your policy should be. - - > **Note:** `datacatalog.TaxonomyIamBinding` resources **can be** used in conjunction with `datacatalog.TaxonomyIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.datacatalog.TaxonomyIamPolicy("policy", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.datacatalog.TaxonomyIamBinding("binding", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_data\\_catalog\\_taxonomy\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.datacatalog.TaxonomyIamMember("member", - taxonomy=google_data_catalog_taxonomy["basic_taxonomy"]["name"], - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{region}}/taxonomies/{{taxonomy}} * {{project}}/{{region}}/{{taxonomy}} * {{region}}/{{taxonomy}} * {{taxonomy}} Any variables not passed in the import command will be taken from the provider configuration. Data catalog taxonomy IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/dataflow/flex_template_job.py b/sdk/python/pulumi_gcp/dataflow/flex_template_job.py index c621c17af5..166b0cb98e 100644 --- a/sdk/python/pulumi_gcp/dataflow/flex_template_job.py +++ b/sdk/python/pulumi_gcp/dataflow/flex_template_job.py @@ -28,14 +28,11 @@ def __init__(__self__, *, Template. :param pulumi.Input[Mapping[str, Any]] labels: User labels to be specified for the job. Keys and values should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - page. **Note**: This field is marked as deprecated as the API does not currently - support adding labels. + page. **NOTE**: Google-provided Dataflow templates often provide default labels that begin with `goog-dataflow-provided`. Unless explicitly set in config, these labels will be ignored to prevent diffs on re-apply. :param pulumi.Input[str] name: A unique name for the resource, required by Dataflow. - :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of - deletion during `pulumi destroy`. See above note. :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) such as `serviceAccount`, `workerMachineType`, etc can be specified here. @@ -81,8 +78,7 @@ def labels(self) -> Optional[pulumi.Input[Mapping[str, Any]]]: """ User labels to be specified for the job. Keys and values should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - page. **Note**: This field is marked as deprecated as the API does not currently - support adding labels. + page. **NOTE**: Google-provided Dataflow templates often provide default labels that begin with `goog-dataflow-provided`. Unless explicitly set in config, these labels will be ignored to prevent diffs on re-apply. @@ -108,10 +104,6 @@ def name(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter(name="onDelete") def on_delete(self) -> Optional[pulumi.Input[str]]: - """ - One of "drain" or "cancel". Specifies behavior of - deletion during `pulumi destroy`. See above note. - """ return pulumi.get(self, "on_delete") @on_delete.setter @@ -192,14 +184,11 @@ def __init__(__self__, *, :param pulumi.Input[str] job_id: The unique ID of this job. :param pulumi.Input[Mapping[str, Any]] labels: User labels to be specified for the job. Keys and values should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - page. **Note**: This field is marked as deprecated as the API does not currently - support adding labels. + page. **NOTE**: Google-provided Dataflow templates often provide default labels that begin with `goog-dataflow-provided`. Unless explicitly set in config, these labels will be ignored to prevent diffs on re-apply. :param pulumi.Input[str] name: A unique name for the resource, required by Dataflow. - :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of - deletion during `pulumi destroy`. See above note. :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) such as `serviceAccount`, `workerMachineType`, etc can be specified here. @@ -263,8 +252,7 @@ def labels(self) -> Optional[pulumi.Input[Mapping[str, Any]]]: """ User labels to be specified for the job. Keys and values should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - page. **Note**: This field is marked as deprecated as the API does not currently - support adding labels. + page. **NOTE**: Google-provided Dataflow templates often provide default labels that begin with `goog-dataflow-provided`. Unless explicitly set in config, these labels will be ignored to prevent diffs on re-apply. @@ -290,10 +278,6 @@ def name(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter(name="onDelete") def on_delete(self) -> Optional[pulumi.Input[str]]: - """ - One of "drain" or "cancel". Specifies behavior of - deletion during `pulumi destroy`. See above note. - """ return pulumi.get(self, "on_delete") @on_delete.setter @@ -391,14 +375,11 @@ def __init__(__self__, Template. :param pulumi.Input[Mapping[str, Any]] labels: User labels to be specified for the job. Keys and values should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - page. **Note**: This field is marked as deprecated as the API does not currently - support adding labels. + page. **NOTE**: Google-provided Dataflow templates often provide default labels that begin with `goog-dataflow-provided`. Unless explicitly set in config, these labels will be ignored to prevent diffs on re-apply. :param pulumi.Input[str] name: A unique name for the resource, required by Dataflow. - :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of - deletion during `pulumi destroy`. See above note. :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) such as `serviceAccount`, `workerMachineType`, etc can be specified here. @@ -496,14 +477,11 @@ def get(resource_name: str, :param pulumi.Input[str] job_id: The unique ID of this job. :param pulumi.Input[Mapping[str, Any]] labels: User labels to be specified for the job. Keys and values should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - page. **Note**: This field is marked as deprecated as the API does not currently - support adding labels. + page. **NOTE**: Google-provided Dataflow templates often provide default labels that begin with `goog-dataflow-provided`. Unless explicitly set in config, these labels will be ignored to prevent diffs on re-apply. :param pulumi.Input[str] name: A unique name for the resource, required by Dataflow. - :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of - deletion during `pulumi destroy`. See above note. :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as used in the template). Additional [pipeline options](https://cloud.google.com/dataflow/docs/guides/specifying-exec-params#setting-other-cloud-dataflow-pipeline-options) such as `serviceAccount`, `workerMachineType`, etc can be specified here. @@ -554,8 +532,7 @@ def labels(self) -> pulumi.Output[Optional[Mapping[str, Any]]]: """ User labels to be specified for the job. Keys and values should follow the restrictions specified in the [labeling restrictions](https://cloud.google.com/compute/docs/labeling-resources#restrictions) - page. **Note**: This field is marked as deprecated as the API does not currently - support adding labels. + page. **NOTE**: Google-provided Dataflow templates often provide default labels that begin with `goog-dataflow-provided`. Unless explicitly set in config, these labels will be ignored to prevent diffs on re-apply. @@ -573,10 +550,6 @@ def name(self) -> pulumi.Output[str]: @property @pulumi.getter(name="onDelete") def on_delete(self) -> pulumi.Output[Optional[str]]: - """ - One of "drain" or "cancel". Specifies behavior of - deletion during `pulumi destroy`. See above note. - """ return pulumi.get(self, "on_delete") @property diff --git a/sdk/python/pulumi_gcp/dataflow/job.py b/sdk/python/pulumi_gcp/dataflow/job.py index d3871bc9f1..982689048f 100644 --- a/sdk/python/pulumi_gcp/dataflow/job.py +++ b/sdk/python/pulumi_gcp/dataflow/job.py @@ -50,12 +50,14 @@ def __init__(__self__, *, :param pulumi.Input[int] max_workers: The number of workers permitted to work on the job. More workers may improve processing speed at additional cost. :param pulumi.Input[str] name: A unique name for the resource, required by Dataflow. :param pulumi.Input[str] network: The network to which VMs will be assigned. If it is not provided, "default" will be used. - :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as used in the template). :param pulumi.Input[str] project: The project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[str] region: The region in which the created job should run. :param pulumi.Input[str] service_account_email: The Service Account email used to create the job. - :param pulumi.Input[bool] skip_wait_on_job_termination: If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + :param pulumi.Input[bool] skip_wait_on_job_termination: If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + different, e.g. by embedding a release ID or by using a random_id. :param pulumi.Input[str] subnetwork: The subnetwork to which VMs will be assigned. Should be of the form "regions/REGION/subnetworks/SUBNETWORK". If the [subnetwork is located in a Shared VPC network](https://cloud.google.com/dataflow/docs/guides/specifying-networks#shared), you must use the complete URL. For example `"googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"` :param pulumi.Input[Mapping[str, Any]] transform_name_mapping: Only applicable when updating a pipeline. Map of transform name prefixes of the job to be replaced with the corresponding name prefixes of the new job. This field is not used outside of update. :param pulumi.Input[str] zone: The zone in which the created job should run. If it is not provided, the provider zone is used. @@ -238,7 +240,7 @@ def network(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="onDelete") def on_delete(self) -> Optional[pulumi.Input[str]]: """ - One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. """ return pulumi.get(self, "on_delete") @@ -298,7 +300,9 @@ def service_account_email(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="skipWaitOnJobTermination") def skip_wait_on_job_termination(self) -> Optional[pulumi.Input[bool]]: """ - If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + different, e.g. by embedding a release ID or by using a random_id. """ return pulumi.get(self, "skip_wait_on_job_termination") @@ -384,12 +388,14 @@ def __init__(__self__, *, :param pulumi.Input[int] max_workers: The number of workers permitted to work on the job. More workers may improve processing speed at additional cost. :param pulumi.Input[str] name: A unique name for the resource, required by Dataflow. :param pulumi.Input[str] network: The network to which VMs will be assigned. If it is not provided, "default" will be used. - :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as used in the template). :param pulumi.Input[str] project: The project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[str] region: The region in which the created job should run. :param pulumi.Input[str] service_account_email: The Service Account email used to create the job. - :param pulumi.Input[bool] skip_wait_on_job_termination: If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + :param pulumi.Input[bool] skip_wait_on_job_termination: If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + different, e.g. by embedding a release ID or by using a random_id. :param pulumi.Input[str] state: The current state of the resource, selected from the [JobState enum](https://cloud.google.com/dataflow/docs/reference/rest/v1b3/projects.jobs#Job.JobState) :param pulumi.Input[str] subnetwork: The subnetwork to which VMs will be assigned. Should be of the form "regions/REGION/subnetworks/SUBNETWORK". If the [subnetwork is located in a Shared VPC network](https://cloud.google.com/dataflow/docs/guides/specifying-networks#shared), you must use the complete URL. For example `"googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"` :param pulumi.Input[str] temp_gcs_location: A writeable location on GCS for the Dataflow job to dump its temporary data. @@ -572,7 +578,7 @@ def network(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="onDelete") def on_delete(self) -> Optional[pulumi.Input[str]]: """ - One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. """ return pulumi.get(self, "on_delete") @@ -632,7 +638,9 @@ def service_account_email(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="skipWaitOnJobTermination") def skip_wait_on_job_termination(self) -> Optional[pulumi.Input[bool]]: """ - If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + different, e.g. by embedding a release ID or by using a random_id. """ return pulumi.get(self, "skip_wait_on_job_termination") @@ -774,12 +782,14 @@ def __init__(__self__, :param pulumi.Input[int] max_workers: The number of workers permitted to work on the job. More workers may improve processing speed at additional cost. :param pulumi.Input[str] name: A unique name for the resource, required by Dataflow. :param pulumi.Input[str] network: The network to which VMs will be assigned. If it is not provided, "default" will be used. - :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as used in the template). :param pulumi.Input[str] project: The project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[str] region: The region in which the created job should run. :param pulumi.Input[str] service_account_email: The Service Account email used to create the job. - :param pulumi.Input[bool] skip_wait_on_job_termination: If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + :param pulumi.Input[bool] skip_wait_on_job_termination: If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + different, e.g. by embedding a release ID or by using a random_id. :param pulumi.Input[str] subnetwork: The subnetwork to which VMs will be assigned. Should be of the form "regions/REGION/subnetworks/SUBNETWORK". If the [subnetwork is located in a Shared VPC network](https://cloud.google.com/dataflow/docs/guides/specifying-networks#shared), you must use the complete URL. For example `"googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"` :param pulumi.Input[str] temp_gcs_location: A writeable location on GCS for the Dataflow job to dump its temporary data. :param pulumi.Input[str] template_gcs_path: The GCS path to the Dataflow job template. @@ -925,12 +935,14 @@ def get(resource_name: str, :param pulumi.Input[int] max_workers: The number of workers permitted to work on the job. More workers may improve processing speed at additional cost. :param pulumi.Input[str] name: A unique name for the resource, required by Dataflow. :param pulumi.Input[str] network: The network to which VMs will be assigned. If it is not provided, "default" will be used. - :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + :param pulumi.Input[str] on_delete: One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. :param pulumi.Input[Mapping[str, Any]] parameters: Key/Value pairs to be passed to the Dataflow job (as used in the template). :param pulumi.Input[str] project: The project in which the resource belongs. If it is not provided, the provider project is used. :param pulumi.Input[str] region: The region in which the created job should run. :param pulumi.Input[str] service_account_email: The Service Account email used to create the job. - :param pulumi.Input[bool] skip_wait_on_job_termination: If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + :param pulumi.Input[bool] skip_wait_on_job_termination: If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + different, e.g. by embedding a release ID or by using a random_id. :param pulumi.Input[str] state: The current state of the resource, selected from the [JobState enum](https://cloud.google.com/dataflow/docs/reference/rest/v1b3/projects.jobs#Job.JobState) :param pulumi.Input[str] subnetwork: The subnetwork to which VMs will be assigned. Should be of the form "regions/REGION/subnetworks/SUBNETWORK". If the [subnetwork is located in a Shared VPC network](https://cloud.google.com/dataflow/docs/guides/specifying-networks#shared), you must use the complete URL. For example `"googleapis.com/compute/v1/projects/PROJECT_ID/regions/REGION/subnetworks/SUBNET_NAME"` :param pulumi.Input[str] temp_gcs_location: A writeable location on GCS for the Dataflow job to dump its temporary data. @@ -1055,7 +1067,7 @@ def network(self) -> pulumi.Output[Optional[str]]: @pulumi.getter(name="onDelete") def on_delete(self) -> pulumi.Output[Optional[str]]: """ - One of "drain" or "cancel". Specifies behavior of deletion during `pulumi destroy`. See above note. + One of "drain" or "cancel". Specifies behavior of deletion during terraform destroy. """ return pulumi.get(self, "on_delete") @@ -1095,7 +1107,9 @@ def service_account_email(self) -> pulumi.Output[Optional[str]]: @pulumi.getter(name="skipWaitOnJobTermination") def skip_wait_on_job_termination(self) -> pulumi.Output[Optional[bool]]: """ - If set to `true`, Pulumi will treat `DRAINING` and `CANCELLING` as terminal states when deleting the resource, and will remove the resource from Pulumi state and move on. See above note. + If true, treat DRAINING and CANCELLING as terminal job states and do not wait for further changes before removing from + terraform state and moving on. WARNING: this will lead to job name conflicts if you do not ensure that the job names are + different, e.g. by embedding a release ID or by using a random_id. """ return pulumi.get(self, "skip_wait_on_job_termination") diff --git a/sdk/python/pulumi_gcp/datafusion/instance.py b/sdk/python/pulumi_gcp/datafusion/instance.py index 98e5c7aace..e4c39eb48a 100644 --- a/sdk/python/pulumi_gcp/datafusion/instance.py +++ b/sdk/python/pulumi_gcp/datafusion/instance.py @@ -38,12 +38,12 @@ def __init__(__self__, *, The set of arguments for constructing a Instance resource. :param pulumi.Input[str] type: Represents the type of Data Fusion instance. Each type is configured with the default settings for processing and memory. - * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines using point and click UI. However, there are certain limitations, such as fewer number of concurrent pipelines, no support for streaming pipelines, etc. - * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration pipelines at low cost. Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -114,12 +114,12 @@ def type(self) -> pulumi.Input[str]: """ Represents the type of Data Fusion instance. Each type is configured with the default settings for processing and memory. - * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines using point and click UI. However, there are certain limitations, such as fewer number of concurrent pipelines, no support for streaming pipelines, etc. - * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration pipelines at low cost. Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -404,22 +404,22 @@ def __init__(__self__, *, :param pulumi.Input[str] service_account: Deprecated. Use 'tenant_project_id' instead to extract the tenant project ID. :param pulumi.Input[str] service_endpoint: Endpoint on which the Data Fusion UI and REST APIs are accessible. :param pulumi.Input[str] state: The current state of this Data Fusion instance. - * CREATING: Instance is being created - * RUNNING: Instance is running and ready for requests - * FAILED: Instance creation failed - * DELETING: Instance is being deleted - * UPGRADING: Instance is being upgraded - * RESTARTING: Instance is being restarted + - CREATING: Instance is being created + - RUNNING: Instance is running and ready for requests + - FAILED: Instance creation failed + - DELETING: Instance is being deleted + - UPGRADING: Instance is being upgraded + - RESTARTING: Instance is being restarted :param pulumi.Input[str] state_message: Additional information about the current state of this Data Fusion instance if available. :param pulumi.Input[str] tenant_project_id: The name of the tenant project. :param pulumi.Input[str] type: Represents the type of Data Fusion instance. Each type is configured with the default settings for processing and memory. - * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines using point and click UI. However, there are certain limitations, such as fewer number of concurrent pipelines, no support for streaming pipelines, etc. - * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration pipelines at low cost. Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -751,12 +751,12 @@ def service_endpoint(self, value: Optional[pulumi.Input[str]]): def state(self) -> Optional[pulumi.Input[str]]: """ The current state of this Data Fusion instance. - * CREATING: Instance is being created - * RUNNING: Instance is running and ready for requests - * FAILED: Instance creation failed - * DELETING: Instance is being deleted - * UPGRADING: Instance is being upgraded - * RESTARTING: Instance is being restarted + - CREATING: Instance is being created + - RUNNING: Instance is running and ready for requests + - FAILED: Instance creation failed + - DELETING: Instance is being deleted + - UPGRADING: Instance is being upgraded + - RESTARTING: Instance is being restarted """ return pulumi.get(self, "state") @@ -794,12 +794,12 @@ def type(self) -> Optional[pulumi.Input[str]]: """ Represents the type of Data Fusion instance. Each type is configured with the default settings for processing and memory. - * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines using point and click UI. However, there are certain limitations, such as fewer number of concurrent pipelines, no support for streaming pipelines, etc. - * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration pipelines at low cost. Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -878,7 +878,7 @@ def __init__(__self__, * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * How-to Guides - * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * [Official Documentation](https://cloud.google.com/data-fusion/docs/) ## Example Usage ### Data Fusion Instance Basic @@ -1037,12 +1037,12 @@ def __init__(__self__, :param pulumi.Input[str] region: The region of the Data Fusion instance. :param pulumi.Input[str] type: Represents the type of Data Fusion instance. Each type is configured with the default settings for processing and memory. - * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines using point and click UI. However, there are certain limitations, such as fewer number of concurrent pipelines, no support for streaming pipelines, etc. - * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration pipelines at low cost. Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -1062,7 +1062,7 @@ def __init__(__self__, * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * How-to Guides - * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * [Official Documentation](https://cloud.google.com/data-fusion/docs/) ## Example Usage ### Data Fusion Instance Basic @@ -1341,22 +1341,22 @@ def get(resource_name: str, :param pulumi.Input[str] service_account: Deprecated. Use 'tenant_project_id' instead to extract the tenant project ID. :param pulumi.Input[str] service_endpoint: Endpoint on which the Data Fusion UI and REST APIs are accessible. :param pulumi.Input[str] state: The current state of this Data Fusion instance. - * CREATING: Instance is being created - * RUNNING: Instance is running and ready for requests - * FAILED: Instance creation failed - * DELETING: Instance is being deleted - * UPGRADING: Instance is being upgraded - * RESTARTING: Instance is being restarted + - CREATING: Instance is being created + - RUNNING: Instance is running and ready for requests + - FAILED: Instance creation failed + - DELETING: Instance is being deleted + - UPGRADING: Instance is being upgraded + - RESTARTING: Instance is being restarted :param pulumi.Input[str] state_message: Additional information about the current state of this Data Fusion instance if available. :param pulumi.Input[str] tenant_project_id: The name of the tenant project. :param pulumi.Input[str] type: Represents the type of Data Fusion instance. Each type is configured with the default settings for processing and memory. - * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines using point and click UI. However, there are certain limitations, such as fewer number of concurrent pipelines, no support for streaming pipelines, etc. - * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration pipelines at low cost. Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. @@ -1578,12 +1578,12 @@ def service_endpoint(self) -> pulumi.Output[str]: def state(self) -> pulumi.Output[str]: """ The current state of this Data Fusion instance. - * CREATING: Instance is being created - * RUNNING: Instance is running and ready for requests - * FAILED: Instance creation failed - * DELETING: Instance is being deleted - * UPGRADING: Instance is being upgraded - * RESTARTING: Instance is being restarted + - CREATING: Instance is being created + - RUNNING: Instance is running and ready for requests + - FAILED: Instance creation failed + - DELETING: Instance is being deleted + - UPGRADING: Instance is being upgraded + - RESTARTING: Instance is being restarted """ return pulumi.get(self, "state") @@ -1609,12 +1609,12 @@ def type(self) -> pulumi.Output[str]: """ Represents the type of Data Fusion instance. Each type is configured with the default settings for processing and memory. - * BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines + - BASIC: Basic Data Fusion instance. In Basic type, the user will be able to create data pipelines using point and click UI. However, there are certain limitations, such as fewer number of concurrent pipelines, no support for streaming pipelines, etc. - * ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features + - ENTERPRISE: Enterprise Data Fusion instance. In Enterprise type, the user will have more features available, such as support for streaming pipelines, higher number of concurrent pipelines, etc. - * DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but + - DEVELOPER: Developer Data Fusion instance. In Developer type, the user will have all features available but with restrictive capabilities. This is to help enterprises design and develop their data ingestion and integration pipelines at low cost. Possible values are `BASIC`, `ENTERPRISE`, and `DEVELOPER`. diff --git a/sdk/python/pulumi_gcp/dataloss/_inputs.py b/sdk/python/pulumi_gcp/dataloss/_inputs.py index 1c1ed3471a..9e37fe7e8d 100644 --- a/sdk/python/pulumi_gcp/dataloss/_inputs.py +++ b/sdk/python/pulumi_gcp/dataloss/_inputs.py @@ -138,6 +138,8 @@ 'PreventionJobTriggerInspectJobArgs', 'PreventionJobTriggerInspectJobActionArgs', 'PreventionJobTriggerInspectJobActionPubSubArgs', + 'PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs', + 'PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs', 'PreventionJobTriggerInspectJobActionSaveFindingsArgs', 'PreventionJobTriggerInspectJobActionSaveFindingsOutputConfigArgs', 'PreventionJobTriggerInspectJobActionSaveFindingsOutputConfigTableArgs', @@ -7030,15 +7032,23 @@ def storage_config(self, value: pulumi.Input['PreventionJobTriggerInspectJobStor class PreventionJobTriggerInspectJobActionArgs: def __init__(__self__, *, pub_sub: Optional[pulumi.Input['PreventionJobTriggerInspectJobActionPubSubArgs']] = None, + publish_findings_to_cloud_data_catalog: Optional[pulumi.Input['PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs']] = None, + publish_summary_to_cscc: Optional[pulumi.Input['PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs']] = None, save_findings: Optional[pulumi.Input['PreventionJobTriggerInspectJobActionSaveFindingsArgs']] = None): """ :param pulumi.Input['PreventionJobTriggerInspectJobActionPubSubArgs'] pub_sub: Publish a message into a given Pub/Sub topic when the job completes. Structure is documented below. - :param pulumi.Input['PreventionJobTriggerInspectJobActionSaveFindingsArgs'] save_findings: Schedule for triggered jobs + :param pulumi.Input['PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs'] publish_findings_to_cloud_data_catalog: Publish findings of a DlpJob to Data Catalog. + :param pulumi.Input['PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs'] publish_summary_to_cscc: Publish the result summary of a DlpJob to the Cloud Security Command Center. + :param pulumi.Input['PreventionJobTriggerInspectJobActionSaveFindingsArgs'] save_findings: If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk Structure is documented below. """ if pub_sub is not None: pulumi.set(__self__, "pub_sub", pub_sub) + if publish_findings_to_cloud_data_catalog is not None: + pulumi.set(__self__, "publish_findings_to_cloud_data_catalog", publish_findings_to_cloud_data_catalog) + if publish_summary_to_cscc is not None: + pulumi.set(__self__, "publish_summary_to_cscc", publish_summary_to_cscc) if save_findings is not None: pulumi.set(__self__, "save_findings", save_findings) @@ -7055,11 +7065,35 @@ def pub_sub(self) -> Optional[pulumi.Input['PreventionJobTriggerInspectJobAction def pub_sub(self, value: Optional[pulumi.Input['PreventionJobTriggerInspectJobActionPubSubArgs']]): pulumi.set(self, "pub_sub", value) + @property + @pulumi.getter(name="publishFindingsToCloudDataCatalog") + def publish_findings_to_cloud_data_catalog(self) -> Optional[pulumi.Input['PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs']]: + """ + Publish findings of a DlpJob to Data Catalog. + """ + return pulumi.get(self, "publish_findings_to_cloud_data_catalog") + + @publish_findings_to_cloud_data_catalog.setter + def publish_findings_to_cloud_data_catalog(self, value: Optional[pulumi.Input['PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs']]): + pulumi.set(self, "publish_findings_to_cloud_data_catalog", value) + + @property + @pulumi.getter(name="publishSummaryToCscc") + def publish_summary_to_cscc(self) -> Optional[pulumi.Input['PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs']]: + """ + Publish the result summary of a DlpJob to the Cloud Security Command Center. + """ + return pulumi.get(self, "publish_summary_to_cscc") + + @publish_summary_to_cscc.setter + def publish_summary_to_cscc(self, value: Optional[pulumi.Input['PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs']]): + pulumi.set(self, "publish_summary_to_cscc", value) + @property @pulumi.getter(name="saveFindings") def save_findings(self) -> Optional[pulumi.Input['PreventionJobTriggerInspectJobActionSaveFindingsArgs']]: """ - Schedule for triggered jobs + If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk Structure is documented below. """ return pulumi.get(self, "save_findings") @@ -7091,6 +7125,18 @@ def topic(self, value: pulumi.Input[str]): pulumi.set(self, "topic", value) +@pulumi.input_type +class PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs: + def __init__(__self__): + pass + + +@pulumi.input_type +class PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs: + def __init__(__self__): + pass + + @pulumi.input_type class PreventionJobTriggerInspectJobActionSaveFindingsArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/dataloss/outputs.py b/sdk/python/pulumi_gcp/dataloss/outputs.py index c0d162975b..965d4bb9d6 100644 --- a/sdk/python/pulumi_gcp/dataloss/outputs.py +++ b/sdk/python/pulumi_gcp/dataloss/outputs.py @@ -139,6 +139,8 @@ 'PreventionJobTriggerInspectJob', 'PreventionJobTriggerInspectJobAction', 'PreventionJobTriggerInspectJobActionPubSub', + 'PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog', + 'PreventionJobTriggerInspectJobActionPublishSummaryToCscc', 'PreventionJobTriggerInspectJobActionSaveFindings', 'PreventionJobTriggerInspectJobActionSaveFindingsOutputConfig', 'PreventionJobTriggerInspectJobActionSaveFindingsOutputConfigTable', @@ -6974,6 +6976,10 @@ def __key_warning(key: str): suggest = None if key == "pubSub": suggest = "pub_sub" + elif key == "publishFindingsToCloudDataCatalog": + suggest = "publish_findings_to_cloud_data_catalog" + elif key == "publishSummaryToCscc": + suggest = "publish_summary_to_cscc" elif key == "saveFindings": suggest = "save_findings" @@ -6990,15 +6996,23 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, pub_sub: Optional['outputs.PreventionJobTriggerInspectJobActionPubSub'] = None, + publish_findings_to_cloud_data_catalog: Optional['outputs.PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog'] = None, + publish_summary_to_cscc: Optional['outputs.PreventionJobTriggerInspectJobActionPublishSummaryToCscc'] = None, save_findings: Optional['outputs.PreventionJobTriggerInspectJobActionSaveFindings'] = None): """ :param 'PreventionJobTriggerInspectJobActionPubSubArgs' pub_sub: Publish a message into a given Pub/Sub topic when the job completes. Structure is documented below. - :param 'PreventionJobTriggerInspectJobActionSaveFindingsArgs' save_findings: Schedule for triggered jobs + :param 'PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalogArgs' publish_findings_to_cloud_data_catalog: Publish findings of a DlpJob to Data Catalog. + :param 'PreventionJobTriggerInspectJobActionPublishSummaryToCsccArgs' publish_summary_to_cscc: Publish the result summary of a DlpJob to the Cloud Security Command Center. + :param 'PreventionJobTriggerInspectJobActionSaveFindingsArgs' save_findings: If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk Structure is documented below. """ if pub_sub is not None: pulumi.set(__self__, "pub_sub", pub_sub) + if publish_findings_to_cloud_data_catalog is not None: + pulumi.set(__self__, "publish_findings_to_cloud_data_catalog", publish_findings_to_cloud_data_catalog) + if publish_summary_to_cscc is not None: + pulumi.set(__self__, "publish_summary_to_cscc", publish_summary_to_cscc) if save_findings is not None: pulumi.set(__self__, "save_findings", save_findings) @@ -7011,11 +7025,27 @@ def pub_sub(self) -> Optional['outputs.PreventionJobTriggerInspectJobActionPubSu """ return pulumi.get(self, "pub_sub") + @property + @pulumi.getter(name="publishFindingsToCloudDataCatalog") + def publish_findings_to_cloud_data_catalog(self) -> Optional['outputs.PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog']: + """ + Publish findings of a DlpJob to Data Catalog. + """ + return pulumi.get(self, "publish_findings_to_cloud_data_catalog") + + @property + @pulumi.getter(name="publishSummaryToCscc") + def publish_summary_to_cscc(self) -> Optional['outputs.PreventionJobTriggerInspectJobActionPublishSummaryToCscc']: + """ + Publish the result summary of a DlpJob to the Cloud Security Command Center. + """ + return pulumi.get(self, "publish_summary_to_cscc") + @property @pulumi.getter(name="saveFindings") def save_findings(self) -> Optional['outputs.PreventionJobTriggerInspectJobActionSaveFindings']: """ - Schedule for triggered jobs + If set, the detailed findings will be persisted to the specified OutputStorageConfig. Only a single instance of this action can be specified. Compatible with: Inspect, Risk Structure is documented below. """ return pulumi.get(self, "save_findings") @@ -7039,6 +7069,18 @@ def topic(self) -> str: return pulumi.get(self, "topic") +@pulumi.output_type +class PreventionJobTriggerInspectJobActionPublishFindingsToCloudDataCatalog(dict): + def __init__(__self__): + pass + + +@pulumi.output_type +class PreventionJobTriggerInspectJobActionPublishSummaryToCscc(dict): + def __init__(__self__): + pass + + @pulumi.output_type class PreventionJobTriggerInspectJobActionSaveFindings(dict): @staticmethod diff --git a/sdk/python/pulumi_gcp/dataproc/_inputs.py b/sdk/python/pulumi_gcp/dataproc/_inputs.py index 3be85b5cbf..757aaba01b 100644 --- a/sdk/python/pulumi_gcp/dataproc/_inputs.py +++ b/sdk/python/pulumi_gcp/dataproc/_inputs.py @@ -23,6 +23,8 @@ 'ClusterClusterConfigEncryptionConfigArgs', 'ClusterClusterConfigEndpointConfigArgs', 'ClusterClusterConfigGceClusterConfigArgs', + 'ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs', + 'ClusterClusterConfigGceClusterConfigReservationAffinityArgs', 'ClusterClusterConfigGceClusterConfigShieldedInstanceConfigArgs', 'ClusterClusterConfigInitializationActionArgs', 'ClusterClusterConfigLifecycleConfigArgs', @@ -1008,6 +1010,8 @@ def __init__(__self__, *, internal_ip_only: Optional[pulumi.Input[bool]] = None, metadata: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, network: Optional[pulumi.Input[str]] = None, + node_group_affinity: Optional[pulumi.Input['ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs']] = None, + reservation_affinity: Optional[pulumi.Input['ClusterClusterConfigGceClusterConfigReservationAffinityArgs']] = None, service_account: Optional[pulumi.Input[str]] = None, service_account_scopes: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, shielded_instance_config: Optional[pulumi.Input['ClusterClusterConfigGceClusterConfigShieldedInstanceConfigArgs']] = None, @@ -1025,6 +1029,8 @@ def __init__(__self__, *, :param pulumi.Input[str] network: The name or self_link of the Google Compute Engine network to the cluster will be part of. Conflicts with `subnetwork`. If neither is specified, this defaults to the "default" network. + :param pulumi.Input['ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs'] node_group_affinity: Node Group Affinity for sole-tenant clusters. + :param pulumi.Input['ClusterClusterConfigGceClusterConfigReservationAffinityArgs'] reservation_affinity: Reservation Affinity for consuming zonal reservation. :param pulumi.Input[str] service_account: The service account to be used by the Node VMs. If not specified, the "default" service account is used. :param pulumi.Input[Sequence[pulumi.Input[str]]] service_account_scopes: The set of Google API scopes @@ -1051,6 +1057,10 @@ def __init__(__self__, *, pulumi.set(__self__, "metadata", metadata) if network is not None: pulumi.set(__self__, "network", network) + if node_group_affinity is not None: + pulumi.set(__self__, "node_group_affinity", node_group_affinity) + if reservation_affinity is not None: + pulumi.set(__self__, "reservation_affinity", reservation_affinity) if service_account is not None: pulumi.set(__self__, "service_account", service_account) if service_account_scopes is not None: @@ -1107,6 +1117,30 @@ def network(self) -> Optional[pulumi.Input[str]]: def network(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "network", value) + @property + @pulumi.getter(name="nodeGroupAffinity") + def node_group_affinity(self) -> Optional[pulumi.Input['ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs']]: + """ + Node Group Affinity for sole-tenant clusters. + """ + return pulumi.get(self, "node_group_affinity") + + @node_group_affinity.setter + def node_group_affinity(self, value: Optional[pulumi.Input['ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs']]): + pulumi.set(self, "node_group_affinity", value) + + @property + @pulumi.getter(name="reservationAffinity") + def reservation_affinity(self) -> Optional[pulumi.Input['ClusterClusterConfigGceClusterConfigReservationAffinityArgs']]: + """ + Reservation Affinity for consuming zonal reservation. + """ + return pulumi.get(self, "reservation_affinity") + + @reservation_affinity.setter + def reservation_affinity(self, value: Optional[pulumi.Input['ClusterClusterConfigGceClusterConfigReservationAffinityArgs']]): + pulumi.set(self, "reservation_affinity", value) + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> Optional[pulumi.Input[str]]: @@ -1193,6 +1227,83 @@ def zone(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "zone", value) +@pulumi.input_type +class ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs: + def __init__(__self__, *, + node_group_uri: pulumi.Input[str]): + """ + :param pulumi.Input[str] node_group_uri: The URI of a sole-tenant node group resource that the cluster will be created on. + """ + pulumi.set(__self__, "node_group_uri", node_group_uri) + + @property + @pulumi.getter(name="nodeGroupUri") + def node_group_uri(self) -> pulumi.Input[str]: + """ + The URI of a sole-tenant node group resource that the cluster will be created on. + """ + return pulumi.get(self, "node_group_uri") + + @node_group_uri.setter + def node_group_uri(self, value: pulumi.Input[str]): + pulumi.set(self, "node_group_uri", value) + + +@pulumi.input_type +class ClusterClusterConfigGceClusterConfigReservationAffinityArgs: + def __init__(__self__, *, + consume_reservation_type: Optional[pulumi.Input[str]] = None, + key: Optional[pulumi.Input[str]] = None, + values: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None): + """ + :param pulumi.Input[str] consume_reservation_type: Corresponds to the type of reservation consumption. + :param pulumi.Input[str] key: Corresponds to the label key of reservation resource. + :param pulumi.Input[Sequence[pulumi.Input[str]]] values: Corresponds to the label values of reservation resource. + """ + if consume_reservation_type is not None: + pulumi.set(__self__, "consume_reservation_type", consume_reservation_type) + if key is not None: + pulumi.set(__self__, "key", key) + if values is not None: + pulumi.set(__self__, "values", values) + + @property + @pulumi.getter(name="consumeReservationType") + def consume_reservation_type(self) -> Optional[pulumi.Input[str]]: + """ + Corresponds to the type of reservation consumption. + """ + return pulumi.get(self, "consume_reservation_type") + + @consume_reservation_type.setter + def consume_reservation_type(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "consume_reservation_type", value) + + @property + @pulumi.getter + def key(self) -> Optional[pulumi.Input[str]]: + """ + Corresponds to the label key of reservation resource. + """ + return pulumi.get(self, "key") + + @key.setter + def key(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "key", value) + + @property + @pulumi.getter + def values(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + Corresponds to the label values of reservation resource. + """ + return pulumi.get(self, "values") + + @values.setter + def values(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "values", value) + + @pulumi.input_type class ClusterClusterConfigGceClusterConfigShieldedInstanceConfigArgs: def __init__(__self__, *, @@ -1640,6 +1751,7 @@ def __init__(__self__, *, * PREEMPTIBILITY_UNSPECIFIED * NON_PREEMPTIBLE * PREEMPTIBLE + * SPOT """ if disk_config is not None: pulumi.set(__self__, "disk_config", disk_config) @@ -1693,6 +1805,7 @@ def preemptibility(self) -> Optional[pulumi.Input[str]]: * PREEMPTIBILITY_UNSPECIFIED * NON_PREEMPTIBLE * PREEMPTIBLE + * SPOT """ return pulumi.get(self, "preemptibility") diff --git a/sdk/python/pulumi_gcp/dataproc/cluster_iam_binding.py b/sdk/python/pulumi_gcp/dataproc/cluster_iam_binding.py index a166f0c88c..57cbc124c8 100644 --- a/sdk/python/pulumi_gcp/dataproc/cluster_iam_binding.py +++ b/sdk/python/pulumi_gcp/dataproc/cluster_iam_binding.py @@ -28,10 +28,6 @@ def __init__(__self__, *, :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. - :param pulumi.Input[str] project: The project in which the cluster belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the cluster belongs. If it - is not provided, the provider will use a default. """ pulumi.set(__self__, "cluster", cluster) pulumi.set(__self__, "members", members) @@ -90,10 +86,6 @@ def condition(self, value: Optional[pulumi.Input['ClusterIAMBindingConditionArgs @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @project.setter @@ -103,10 +95,6 @@ def project(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: - """ - The region in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @region.setter @@ -128,10 +116,6 @@ def __init__(__self__, *, Input properties used for looking up and filtering ClusterIAMBinding resources. :param pulumi.Input[str] cluster: The name or relative resource id of the cluster to manage IAM policies for. :param pulumi.Input[str] etag: (Computed) The etag of the clusters's IAM policy. - :param pulumi.Input[str] project: The project in which the cluster belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the cluster belongs. If it - is not provided, the provider will use a default. :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -196,10 +180,6 @@ def members(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @project.setter @@ -209,10 +189,6 @@ def project(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: - """ - The region in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @region.setter @@ -321,10 +297,6 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] cluster: The name or relative resource id of the cluster to manage IAM policies for. - :param pulumi.Input[str] project: The project in which the cluster belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the cluster belongs. If it - is not provided, the provider will use a default. :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -476,10 +448,6 @@ def get(resource_name: str, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] cluster: The name or relative resource id of the cluster to manage IAM policies for. :param pulumi.Input[str] etag: (Computed) The etag of the clusters's IAM policy. - :param pulumi.Input[str] project: The project in which the cluster belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the cluster belongs. If it - is not provided, the provider will use a default. :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -526,19 +494,11 @@ def members(self) -> pulumi.Output[Sequence[str]]: @property @pulumi.getter def project(self) -> pulumi.Output[str]: - """ - The project in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @property @pulumi.getter def region(self) -> pulumi.Output[str]: - """ - The region in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @property diff --git a/sdk/python/pulumi_gcp/dataproc/cluster_iam_member.py b/sdk/python/pulumi_gcp/dataproc/cluster_iam_member.py index d8567a2a78..9a25149c47 100644 --- a/sdk/python/pulumi_gcp/dataproc/cluster_iam_member.py +++ b/sdk/python/pulumi_gcp/dataproc/cluster_iam_member.py @@ -28,10 +28,6 @@ def __init__(__self__, *, :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. - :param pulumi.Input[str] project: The project in which the cluster belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the cluster belongs. If it - is not provided, the provider will use a default. """ pulumi.set(__self__, "cluster", cluster) pulumi.set(__self__, "member", member) @@ -90,10 +86,6 @@ def condition(self, value: Optional[pulumi.Input['ClusterIAMMemberConditionArgs' @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @project.setter @@ -103,10 +95,6 @@ def project(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: - """ - The region in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @region.setter @@ -128,10 +116,6 @@ def __init__(__self__, *, Input properties used for looking up and filtering ClusterIAMMember resources. :param pulumi.Input[str] cluster: The name or relative resource id of the cluster to manage IAM policies for. :param pulumi.Input[str] etag: (Computed) The etag of the clusters's IAM policy. - :param pulumi.Input[str] project: The project in which the cluster belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the cluster belongs. If it - is not provided, the provider will use a default. :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -196,10 +180,6 @@ def member(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @project.setter @@ -209,10 +189,6 @@ def project(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: - """ - The region in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @region.setter @@ -321,10 +297,6 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] cluster: The name or relative resource id of the cluster to manage IAM policies for. - :param pulumi.Input[str] project: The project in which the cluster belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the cluster belongs. If it - is not provided, the provider will use a default. :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -476,10 +448,6 @@ def get(resource_name: str, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] cluster: The name or relative resource id of the cluster to manage IAM policies for. :param pulumi.Input[str] etag: (Computed) The etag of the clusters's IAM policy. - :param pulumi.Input[str] project: The project in which the cluster belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the cluster belongs. If it - is not provided, the provider will use a default. :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.ClusterIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -526,19 +494,11 @@ def member(self) -> pulumi.Output[str]: @property @pulumi.getter def project(self) -> pulumi.Output[str]: - """ - The project in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @property @pulumi.getter def region(self) -> pulumi.Output[str]: - """ - The region in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @property diff --git a/sdk/python/pulumi_gcp/dataproc/cluster_iam_policy.py b/sdk/python/pulumi_gcp/dataproc/cluster_iam_policy.py index 87791800dc..ba75016710 100644 --- a/sdk/python/pulumi_gcp/dataproc/cluster_iam_policy.py +++ b/sdk/python/pulumi_gcp/dataproc/cluster_iam_policy.py @@ -22,10 +22,6 @@ def __init__(__self__, *, The set of arguments for constructing a ClusterIAMPolicy resource. :param pulumi.Input[str] cluster: The name or relative resource id of the cluster to manage IAM policies for. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the cluster belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the cluster belongs. If it - is not provided, the provider will use a default. """ pulumi.set(__self__, "cluster", cluster) pulumi.set(__self__, "policy_data", policy_data) @@ -61,10 +57,6 @@ def policy_data(self, value: pulumi.Input[str]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @project.setter @@ -74,10 +66,6 @@ def project(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: - """ - The region in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @region.setter @@ -98,10 +86,6 @@ def __init__(__self__, *, :param pulumi.Input[str] cluster: The name or relative resource id of the cluster to manage IAM policies for. :param pulumi.Input[str] etag: (Computed) The etag of the clusters's IAM policy. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the cluster belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the cluster belongs. If it - is not provided, the provider will use a default. """ if cluster is not None: pulumi.set(__self__, "cluster", cluster) @@ -153,10 +137,6 @@ def policy_data(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @project.setter @@ -166,10 +146,6 @@ def project(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: - """ - The region in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @region.setter @@ -263,10 +239,6 @@ def __init__(__self__, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] cluster: The name or relative resource id of the cluster to manage IAM policies for. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the cluster belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the cluster belongs. If it - is not provided, the provider will use a default. """ ... @overload @@ -408,10 +380,6 @@ def get(resource_name: str, :param pulumi.Input[str] cluster: The name or relative resource id of the cluster to manage IAM policies for. :param pulumi.Input[str] etag: (Computed) The etag of the clusters's IAM policy. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the cluster belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the cluster belongs. If it - is not provided, the provider will use a default. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -451,18 +419,10 @@ def policy_data(self) -> pulumi.Output[str]: @property @pulumi.getter def project(self) -> pulumi.Output[str]: - """ - The project in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @property @pulumi.getter def region(self) -> pulumi.Output[str]: - """ - The region in which the cluster belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") diff --git a/sdk/python/pulumi_gcp/dataproc/job_iam_binding.py b/sdk/python/pulumi_gcp/dataproc/job_iam_binding.py index fe27b96056..11cf9fba3b 100644 --- a/sdk/python/pulumi_gcp/dataproc/job_iam_binding.py +++ b/sdk/python/pulumi_gcp/dataproc/job_iam_binding.py @@ -27,10 +27,6 @@ def __init__(__self__, *, :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. - :param pulumi.Input[str] project: The project in which the job belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the job belongs. If it - is not provided, the provider will use a default. """ pulumi.set(__self__, "job_id", job_id) pulumi.set(__self__, "members", members) @@ -86,10 +82,6 @@ def condition(self, value: Optional[pulumi.Input['JobIAMBindingConditionArgs']]) @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @project.setter @@ -99,10 +91,6 @@ def project(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: - """ - The region in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @region.setter @@ -123,10 +111,6 @@ def __init__(__self__, *, """ Input properties used for looking up and filtering JobIAMBinding resources. :param pulumi.Input[str] etag: (Computed) The etag of the jobs's IAM policy. - :param pulumi.Input[str] project: The project in which the job belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the job belongs. If it - is not provided, the provider will use a default. :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -188,10 +172,6 @@ def members(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @project.setter @@ -201,10 +181,6 @@ def project(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: - """ - The region in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @region.setter @@ -312,10 +288,6 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. - :param pulumi.Input[str] project: The project in which the job belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the job belongs. If it - is not provided, the provider will use a default. :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -466,10 +438,6 @@ def get(resource_name: str, :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] etag: (Computed) The etag of the jobs's IAM policy. - :param pulumi.Input[str] project: The project in which the job belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the job belongs. If it - is not provided, the provider will use a default. :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -513,19 +481,11 @@ def members(self) -> pulumi.Output[Sequence[str]]: @property @pulumi.getter def project(self) -> pulumi.Output[str]: - """ - The project in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @property @pulumi.getter def region(self) -> pulumi.Output[str]: - """ - The region in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @property diff --git a/sdk/python/pulumi_gcp/dataproc/job_iam_member.py b/sdk/python/pulumi_gcp/dataproc/job_iam_member.py index 4b40ca90da..343665207a 100644 --- a/sdk/python/pulumi_gcp/dataproc/job_iam_member.py +++ b/sdk/python/pulumi_gcp/dataproc/job_iam_member.py @@ -27,10 +27,6 @@ def __init__(__self__, *, :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. - :param pulumi.Input[str] project: The project in which the job belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the job belongs. If it - is not provided, the provider will use a default. """ pulumi.set(__self__, "job_id", job_id) pulumi.set(__self__, "member", member) @@ -86,10 +82,6 @@ def condition(self, value: Optional[pulumi.Input['JobIAMMemberConditionArgs']]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @project.setter @@ -99,10 +91,6 @@ def project(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: - """ - The region in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @region.setter @@ -123,10 +111,6 @@ def __init__(__self__, *, """ Input properties used for looking up and filtering JobIAMMember resources. :param pulumi.Input[str] etag: (Computed) The etag of the jobs's IAM policy. - :param pulumi.Input[str] project: The project in which the job belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the job belongs. If it - is not provided, the provider will use a default. :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -188,10 +172,6 @@ def member(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @project.setter @@ -201,10 +181,6 @@ def project(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: - """ - The region in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @region.setter @@ -312,10 +288,6 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. - :param pulumi.Input[str] project: The project in which the job belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the job belongs. If it - is not provided, the provider will use a default. :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -466,10 +438,6 @@ def get(resource_name: str, :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] etag: (Computed) The etag of the jobs's IAM policy. - :param pulumi.Input[str] project: The project in which the job belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the job belongs. If it - is not provided, the provider will use a default. :param pulumi.Input[str] role: The role that should be applied. Only one `dataproc.JobIAMBinding` can be used per role. Note that custom roles must be of the format `[projects|organizations]/{parent-name}/roles/{role-name}`. @@ -513,19 +481,11 @@ def member(self) -> pulumi.Output[str]: @property @pulumi.getter def project(self) -> pulumi.Output[str]: - """ - The project in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @property @pulumi.getter def region(self) -> pulumi.Output[str]: - """ - The region in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @property diff --git a/sdk/python/pulumi_gcp/dataproc/job_iam_policy.py b/sdk/python/pulumi_gcp/dataproc/job_iam_policy.py index 7fb0796052..0b43cd2baf 100644 --- a/sdk/python/pulumi_gcp/dataproc/job_iam_policy.py +++ b/sdk/python/pulumi_gcp/dataproc/job_iam_policy.py @@ -21,10 +21,6 @@ def __init__(__self__, *, """ The set of arguments for constructing a JobIAMPolicy resource. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the job belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the job belongs. If it - is not provided, the provider will use a default. """ pulumi.set(__self__, "job_id", job_id) pulumi.set(__self__, "policy_data", policy_data) @@ -57,10 +53,6 @@ def policy_data(self, value: pulumi.Input[str]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @project.setter @@ -70,10 +62,6 @@ def project(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: - """ - The region in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @region.setter @@ -93,10 +81,6 @@ def __init__(__self__, *, Input properties used for looking up and filtering JobIAMPolicy resources. :param pulumi.Input[str] etag: (Computed) The etag of the jobs's IAM policy. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the job belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the job belongs. If it - is not provided, the provider will use a default. """ if etag is not None: pulumi.set(__self__, "etag", etag) @@ -145,10 +129,6 @@ def policy_data(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def project(self) -> Optional[pulumi.Input[str]]: - """ - The project in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @project.setter @@ -158,10 +138,6 @@ def project(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def region(self) -> Optional[pulumi.Input[str]]: - """ - The region in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") @region.setter @@ -254,10 +230,6 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the job belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the job belongs. If it - is not provided, the provider will use a default. """ ... @overload @@ -398,10 +370,6 @@ def get(resource_name: str, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[str] etag: (Computed) The etag of the jobs's IAM policy. :param pulumi.Input[str] policy_data: The policy data generated by a `organizations.get_iam_policy` data source. - :param pulumi.Input[str] project: The project in which the job belongs. If it - is not provided, the provider will use a default. - :param pulumi.Input[str] region: The region in which the job belongs. If it - is not provided, the provider will use a default. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -438,18 +406,10 @@ def policy_data(self) -> pulumi.Output[str]: @property @pulumi.getter def project(self) -> pulumi.Output[str]: - """ - The project in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "project") @property @pulumi.getter def region(self) -> pulumi.Output[str]: - """ - The region in which the job belongs. If it - is not provided, the provider will use a default. - """ return pulumi.get(self, "region") diff --git a/sdk/python/pulumi_gcp/dataproc/outputs.py b/sdk/python/pulumi_gcp/dataproc/outputs.py index 7c88c562b9..5b62829009 100644 --- a/sdk/python/pulumi_gcp/dataproc/outputs.py +++ b/sdk/python/pulumi_gcp/dataproc/outputs.py @@ -24,6 +24,8 @@ 'ClusterClusterConfigEncryptionConfig', 'ClusterClusterConfigEndpointConfig', 'ClusterClusterConfigGceClusterConfig', + 'ClusterClusterConfigGceClusterConfigNodeGroupAffinity', + 'ClusterClusterConfigGceClusterConfigReservationAffinity', 'ClusterClusterConfigGceClusterConfigShieldedInstanceConfig', 'ClusterClusterConfigInitializationAction', 'ClusterClusterConfigLifecycleConfig', @@ -1041,6 +1043,10 @@ def __key_warning(key: str): suggest = None if key == "internalIpOnly": suggest = "internal_ip_only" + elif key == "nodeGroupAffinity": + suggest = "node_group_affinity" + elif key == "reservationAffinity": + suggest = "reservation_affinity" elif key == "serviceAccount": suggest = "service_account" elif key == "serviceAccountScopes": @@ -1063,6 +1069,8 @@ def __init__(__self__, *, internal_ip_only: Optional[bool] = None, metadata: Optional[Mapping[str, str]] = None, network: Optional[str] = None, + node_group_affinity: Optional['outputs.ClusterClusterConfigGceClusterConfigNodeGroupAffinity'] = None, + reservation_affinity: Optional['outputs.ClusterClusterConfigGceClusterConfigReservationAffinity'] = None, service_account: Optional[str] = None, service_account_scopes: Optional[Sequence[str]] = None, shielded_instance_config: Optional['outputs.ClusterClusterConfigGceClusterConfigShieldedInstanceConfig'] = None, @@ -1080,6 +1088,8 @@ def __init__(__self__, *, :param str network: The name or self_link of the Google Compute Engine network to the cluster will be part of. Conflicts with `subnetwork`. If neither is specified, this defaults to the "default" network. + :param 'ClusterClusterConfigGceClusterConfigNodeGroupAffinityArgs' node_group_affinity: Node Group Affinity for sole-tenant clusters. + :param 'ClusterClusterConfigGceClusterConfigReservationAffinityArgs' reservation_affinity: Reservation Affinity for consuming zonal reservation. :param str service_account: The service account to be used by the Node VMs. If not specified, the "default" service account is used. :param Sequence[str] service_account_scopes: The set of Google API scopes @@ -1106,6 +1116,10 @@ def __init__(__self__, *, pulumi.set(__self__, "metadata", metadata) if network is not None: pulumi.set(__self__, "network", network) + if node_group_affinity is not None: + pulumi.set(__self__, "node_group_affinity", node_group_affinity) + if reservation_affinity is not None: + pulumi.set(__self__, "reservation_affinity", reservation_affinity) if service_account is not None: pulumi.set(__self__, "service_account", service_account) if service_account_scopes is not None: @@ -1150,6 +1164,22 @@ def network(self) -> Optional[str]: """ return pulumi.get(self, "network") + @property + @pulumi.getter(name="nodeGroupAffinity") + def node_group_affinity(self) -> Optional['outputs.ClusterClusterConfigGceClusterConfigNodeGroupAffinity']: + """ + Node Group Affinity for sole-tenant clusters. + """ + return pulumi.get(self, "node_group_affinity") + + @property + @pulumi.getter(name="reservationAffinity") + def reservation_affinity(self) -> Optional['outputs.ClusterClusterConfigGceClusterConfigReservationAffinity']: + """ + Reservation Affinity for consuming zonal reservation. + """ + return pulumi.get(self, "reservation_affinity") + @property @pulumi.getter(name="serviceAccount") def service_account(self) -> Optional[str]: @@ -1212,6 +1242,101 @@ def zone(self) -> Optional[str]: return pulumi.get(self, "zone") +@pulumi.output_type +class ClusterClusterConfigGceClusterConfigNodeGroupAffinity(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "nodeGroupUri": + suggest = "node_group_uri" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClusterClusterConfigGceClusterConfigNodeGroupAffinity. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClusterClusterConfigGceClusterConfigNodeGroupAffinity.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClusterClusterConfigGceClusterConfigNodeGroupAffinity.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + node_group_uri: str): + """ + :param str node_group_uri: The URI of a sole-tenant node group resource that the cluster will be created on. + """ + pulumi.set(__self__, "node_group_uri", node_group_uri) + + @property + @pulumi.getter(name="nodeGroupUri") + def node_group_uri(self) -> str: + """ + The URI of a sole-tenant node group resource that the cluster will be created on. + """ + return pulumi.get(self, "node_group_uri") + + +@pulumi.output_type +class ClusterClusterConfigGceClusterConfigReservationAffinity(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "consumeReservationType": + suggest = "consume_reservation_type" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in ClusterClusterConfigGceClusterConfigReservationAffinity. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + ClusterClusterConfigGceClusterConfigReservationAffinity.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + ClusterClusterConfigGceClusterConfigReservationAffinity.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + consume_reservation_type: Optional[str] = None, + key: Optional[str] = None, + values: Optional[Sequence[str]] = None): + """ + :param str consume_reservation_type: Corresponds to the type of reservation consumption. + :param str key: Corresponds to the label key of reservation resource. + :param Sequence[str] values: Corresponds to the label values of reservation resource. + """ + if consume_reservation_type is not None: + pulumi.set(__self__, "consume_reservation_type", consume_reservation_type) + if key is not None: + pulumi.set(__self__, "key", key) + if values is not None: + pulumi.set(__self__, "values", values) + + @property + @pulumi.getter(name="consumeReservationType") + def consume_reservation_type(self) -> Optional[str]: + """ + Corresponds to the type of reservation consumption. + """ + return pulumi.get(self, "consume_reservation_type") + + @property + @pulumi.getter + def key(self) -> Optional[str]: + """ + Corresponds to the label key of reservation resource. + """ + return pulumi.get(self, "key") + + @property + @pulumi.getter + def values(self) -> Optional[Sequence[str]]: + """ + Corresponds to the label values of reservation resource. + """ + return pulumi.get(self, "values") + + @pulumi.output_type class ClusterClusterConfigGceClusterConfigShieldedInstanceConfig(dict): @staticmethod @@ -1739,6 +1864,7 @@ def __init__(__self__, *, * PREEMPTIBILITY_UNSPECIFIED * NON_PREEMPTIBLE * PREEMPTIBLE + * SPOT """ if disk_config is not None: pulumi.set(__self__, "disk_config", disk_config) @@ -1780,6 +1906,7 @@ def preemptibility(self) -> Optional[str]: * PREEMPTIBILITY_UNSPECIFIED * NON_PREEMPTIBLE * PREEMPTIBLE + * SPOT """ return pulumi.get(self, "preemptibility") diff --git a/sdk/python/pulumi_gcp/datastream/_inputs.py b/sdk/python/pulumi_gcp/datastream/_inputs.py index 573fcaff39..941ac73beb 100644 --- a/sdk/python/pulumi_gcp/datastream/_inputs.py +++ b/sdk/python/pulumi_gcp/datastream/_inputs.py @@ -1103,16 +1103,23 @@ def dataset_template(self, value: pulumi.Input['StreamDestinationConfigBigqueryD class StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs: def __init__(__self__, *, location: pulumi.Input[str], - dataset_id_prefix: Optional[pulumi.Input[str]] = None): + dataset_id_prefix: Optional[pulumi.Input[str]] = None, + kms_key_name: Optional[pulumi.Input[str]] = None): """ :param pulumi.Input[str] location: The geographic location where the dataset should reside. See https://cloud.google.com/bigquery/docs/locations for supported locations. :param pulumi.Input[str] dataset_id_prefix: If supplied, every created dataset will have its name prefixed by the provided value. The prefix and name will be separated by an underscore. i.e. _. + :param pulumi.Input[str] kms_key_name: Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + table. The BigQuery Service Account associated with your project requires access to this + encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. """ pulumi.set(__self__, "location", location) if dataset_id_prefix is not None: pulumi.set(__self__, "dataset_id_prefix", dataset_id_prefix) + if kms_key_name is not None: + pulumi.set(__self__, "kms_key_name", kms_key_name) @property @pulumi.getter @@ -1140,6 +1147,21 @@ def dataset_id_prefix(self) -> Optional[pulumi.Input[str]]: def dataset_id_prefix(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "dataset_id_prefix", value) + @property + @pulumi.getter(name="kmsKeyName") + def kms_key_name(self) -> Optional[pulumi.Input[str]]: + """ + Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + table. The BigQuery Service Account associated with your project requires access to this + encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + """ + 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) + @pulumi.input_type class StreamDestinationConfigGcsDestinationConfigArgs: diff --git a/sdk/python/pulumi_gcp/datastream/outputs.py b/sdk/python/pulumi_gcp/datastream/outputs.py index 1771d8dece..b1ee032d5a 100644 --- a/sdk/python/pulumi_gcp/datastream/outputs.py +++ b/sdk/python/pulumi_gcp/datastream/outputs.py @@ -1166,6 +1166,8 @@ def __key_warning(key: str): suggest = None if key == "datasetIdPrefix": suggest = "dataset_id_prefix" + elif key == "kmsKeyName": + suggest = "kms_key_name" if suggest: pulumi.log.warn(f"Key '{key}' not found in StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplate. Access the value via the '{suggest}' property getter instead.") @@ -1180,16 +1182,23 @@ def get(self, key: str, default = None) -> Any: def __init__(__self__, *, location: str, - dataset_id_prefix: Optional[str] = None): + dataset_id_prefix: Optional[str] = None, + kms_key_name: Optional[str] = None): """ :param str location: The geographic location where the dataset should reside. See https://cloud.google.com/bigquery/docs/locations for supported locations. :param str dataset_id_prefix: If supplied, every created dataset will have its name prefixed by the provided value. The prefix and name will be separated by an underscore. i.e. _. + :param str kms_key_name: Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + table. The BigQuery Service Account associated with your project requires access to this + encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. """ pulumi.set(__self__, "location", location) if dataset_id_prefix is not None: pulumi.set(__self__, "dataset_id_prefix", dataset_id_prefix) + if kms_key_name is not None: + pulumi.set(__self__, "kms_key_name", kms_key_name) @property @pulumi.getter @@ -1209,6 +1218,17 @@ def dataset_id_prefix(self) -> Optional[str]: """ return pulumi.get(self, "dataset_id_prefix") + @property + @pulumi.getter(name="kmsKeyName") + def kms_key_name(self) -> Optional[str]: + """ + Describes the Cloud KMS encryption key that will be used to protect destination BigQuery + table. The BigQuery Service Account associated with your project requires access to this + encryption key. i.e. projects/{project}/locations/{location}/keyRings/{key_ring}/cryptoKeys/{cryptoKey}. + See https://cloud.google.com/bigquery/docs/customer-managed-encryption for more information. + """ + return pulumi.get(self, "kms_key_name") + @pulumi.output_type class StreamDestinationConfigGcsDestinationConfig(dict): diff --git a/sdk/python/pulumi_gcp/datastream/stream.py b/sdk/python/pulumi_gcp/datastream/stream.py index e579def973..d85a4dec1c 100644 --- a/sdk/python/pulumi_gcp/datastream/stream.py +++ b/sdk/python/pulumi_gcp/datastream/stream.py @@ -23,6 +23,7 @@ def __init__(__self__, *, stream_id: pulumi.Input[str], backfill_all: Optional[pulumi.Input['StreamBackfillAllArgs']] = None, backfill_none: Optional[pulumi.Input['StreamBackfillNoneArgs']] = None, + customer_managed_encryption_key: Optional[pulumi.Input[str]] = None, desired_state: Optional[pulumi.Input[str]] = None, labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, project: Optional[pulumi.Input[str]] = None): @@ -38,6 +39,8 @@ def __init__(__self__, *, :param pulumi.Input['StreamBackfillAllArgs'] backfill_all: Backfill strategy to automatically backfill the Stream's objects. Specific objects can be excluded. Structure is documented below. :param pulumi.Input['StreamBackfillNoneArgs'] backfill_none: Backfill strategy to disable automatic backfill for the Stream's objects. + :param pulumi.Input[str] customer_managed_encryption_key: A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + will be encrypted using an internal Stream-specific encryption key provisioned through KMS. :param pulumi.Input[str] desired_state: Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Labels. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. @@ -52,6 +55,8 @@ def __init__(__self__, *, pulumi.set(__self__, "backfill_all", backfill_all) if backfill_none is not None: pulumi.set(__self__, "backfill_none", backfill_none) + if customer_managed_encryption_key is not None: + pulumi.set(__self__, "customer_managed_encryption_key", customer_managed_encryption_key) if desired_state is not None: pulumi.set(__self__, "desired_state", desired_state) if labels is not None: @@ -146,6 +151,19 @@ def backfill_none(self) -> Optional[pulumi.Input['StreamBackfillNoneArgs']]: def backfill_none(self, value: Optional[pulumi.Input['StreamBackfillNoneArgs']]): pulumi.set(self, "backfill_none", value) + @property + @pulumi.getter(name="customerManagedEncryptionKey") + def customer_managed_encryption_key(self) -> Optional[pulumi.Input[str]]: + """ + A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + """ + return pulumi.get(self, "customer_managed_encryption_key") + + @customer_managed_encryption_key.setter + def customer_managed_encryption_key(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "customer_managed_encryption_key", value) + @property @pulumi.getter(name="desiredState") def desired_state(self) -> Optional[pulumi.Input[str]]: @@ -189,6 +207,7 @@ class _StreamState: def __init__(__self__, *, backfill_all: Optional[pulumi.Input['StreamBackfillAllArgs']] = None, backfill_none: Optional[pulumi.Input['StreamBackfillNoneArgs']] = None, + customer_managed_encryption_key: Optional[pulumi.Input[str]] = None, desired_state: Optional[pulumi.Input[str]] = None, destination_config: Optional[pulumi.Input['StreamDestinationConfigArgs']] = None, display_name: Optional[pulumi.Input[str]] = None, @@ -204,6 +223,8 @@ def __init__(__self__, *, :param pulumi.Input['StreamBackfillAllArgs'] backfill_all: Backfill strategy to automatically backfill the Stream's objects. Specific objects can be excluded. Structure is documented below. :param pulumi.Input['StreamBackfillNoneArgs'] backfill_none: Backfill strategy to disable automatic backfill for the Stream's objects. + :param pulumi.Input[str] customer_managed_encryption_key: A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + will be encrypted using an internal Stream-specific encryption key provisioned through KMS. :param pulumi.Input[str] desired_state: Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. :param pulumi.Input['StreamDestinationConfigArgs'] destination_config: Destination connection profile configuration. Structure is documented below. @@ -222,6 +243,8 @@ def __init__(__self__, *, pulumi.set(__self__, "backfill_all", backfill_all) if backfill_none is not None: pulumi.set(__self__, "backfill_none", backfill_none) + if customer_managed_encryption_key is not None: + pulumi.set(__self__, "customer_managed_encryption_key", customer_managed_encryption_key) if desired_state is not None: pulumi.set(__self__, "desired_state", desired_state) if destination_config is not None: @@ -268,6 +291,19 @@ def backfill_none(self) -> Optional[pulumi.Input['StreamBackfillNoneArgs']]: def backfill_none(self, value: Optional[pulumi.Input['StreamBackfillNoneArgs']]): pulumi.set(self, "backfill_none", value) + @property + @pulumi.getter(name="customerManagedEncryptionKey") + def customer_managed_encryption_key(self) -> Optional[pulumi.Input[str]]: + """ + A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + """ + return pulumi.get(self, "customer_managed_encryption_key") + + @customer_managed_encryption_key.setter + def customer_managed_encryption_key(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "customer_managed_encryption_key", value) + @property @pulumi.getter(name="desiredState") def desired_state(self) -> Optional[pulumi.Input[str]]: @@ -399,6 +435,7 @@ def __init__(__self__, opts: Optional[pulumi.ResourceOptions] = None, backfill_all: Optional[pulumi.Input[pulumi.InputType['StreamBackfillAllArgs']]] = None, backfill_none: Optional[pulumi.Input[pulumi.InputType['StreamBackfillNoneArgs']]] = None, + customer_managed_encryption_key: Optional[pulumi.Input[str]] = None, desired_state: Optional[pulumi.Input[str]] = None, destination_config: Optional[pulumi.Input[pulumi.InputType['StreamDestinationConfigArgs']]] = None, display_name: Optional[pulumi.Input[str]] = None, @@ -488,6 +525,10 @@ def __init__(__self__, bucket=bucket.name, role="roles/storage.legacyBucketReader", member=f"serviceAccount:service-{project.number}@gcp-sa-datastream.iam.gserviceaccount.com") + key_user = gcp.kms.CryptoKeyIAMMember("keyUser", + crypto_key_id="kms-name", + role="roles/cloudkms.cryptoKeyEncrypterDecrypter", + member=f"serviceAccount:service-{project.number}@gcp-sa-datastream.iam.gserviceaccount.com") destination_connection_profile = gcp.datastream.ConnectionProfile("destinationConnectionProfile", display_name="Connection profile", location="us-central1", @@ -571,7 +612,96 @@ def __init__(__self__, )], )], ), + ), + customer_managed_encryption_key="kms-name", + opts=pulumi.ResourceOptions(depends_on=[key_user])) + ``` + ### Datastream Stream Bigquery + + ```python + import pulumi + import pulumi_gcp as gcp + import pulumi_random as random + + project = gcp.organizations.get_project() + instance = gcp.sql.DatabaseInstance("instance", + database_version="MYSQL_8_0", + region="us-central1", + settings=gcp.sql.DatabaseInstanceSettingsArgs( + tier="db-f1-micro", + backup_configuration=gcp.sql.DatabaseInstanceSettingsBackupConfigurationArgs( + enabled=True, + binary_log_enabled=True, + ), + ip_configuration=gcp.sql.DatabaseInstanceSettingsIpConfigurationArgs( + authorized_networks=[ + gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs( + value="34.71.242.81", + ), + gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs( + value="34.72.28.29", + ), + gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs( + value="34.67.6.157", + ), + gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs( + value="34.67.234.134", + ), + gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs( + value="34.72.239.218", + ), + ], + ), + ), + deletion_protection=True) + db = gcp.sql.Database("db", instance=instance.name) + pwd = random.RandomPassword("pwd", + length=16, + special=False) + user = gcp.sql.User("user", + instance=instance.name, + host="%", + password=pwd.result) + source_connection_profile = gcp.datastream.ConnectionProfile("sourceConnectionProfile", + display_name="Source connection profile", + location="us-central1", + connection_profile_id="source-profile", + mysql_profile=gcp.datastream.ConnectionProfileMysqlProfileArgs( + hostname=instance.public_ip_address, + username=user.name, + password=user.password, )) + bq_sa = gcp.bigquery.get_default_service_account() + bigquery_key_user = gcp.kms.CryptoKeyIAMMember("bigqueryKeyUser", + crypto_key_id="bigquery-kms-name", + role="roles/cloudkms.cryptoKeyEncrypterDecrypter", + member=f"serviceAccount:{bq_sa.email}") + destination_connection_profile = gcp.datastream.ConnectionProfile("destinationConnectionProfile", + display_name="Connection profile", + location="us-central1", + connection_profile_id="destination-profile", + bigquery_profile=gcp.datastream.ConnectionProfileBigqueryProfileArgs()) + default = gcp.datastream.Stream("default", + stream_id="my-stream", + location="us-central1", + display_name="my stream", + source_config=gcp.datastream.StreamSourceConfigArgs( + source_connection_profile=source_connection_profile.id, + mysql_source_config=gcp.datastream.StreamSourceConfigMysqlSourceConfigArgs(), + ), + destination_config=gcp.datastream.StreamDestinationConfigArgs( + destination_connection_profile=destination_connection_profile.id, + bigquery_destination_config=gcp.datastream.StreamDestinationConfigBigqueryDestinationConfigArgs( + source_hierarchy_datasets=gcp.datastream.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsArgs( + dataset_template=gcp.datastream.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs( + location="us-central1", + kms_key_name="bigquery-kms-name", + ), + ), + ), + ), + backfill_none=gcp.datastream.StreamBackfillNoneArgs(), + opts=pulumi.ResourceOptions(depends_on=[bigquery_key_user])) ``` ## Import @@ -595,6 +725,8 @@ def __init__(__self__, :param pulumi.Input[pulumi.InputType['StreamBackfillAllArgs']] backfill_all: Backfill strategy to automatically backfill the Stream's objects. Specific objects can be excluded. Structure is documented below. :param pulumi.Input[pulumi.InputType['StreamBackfillNoneArgs']] backfill_none: Backfill strategy to disable automatic backfill for the Stream's objects. + :param pulumi.Input[str] customer_managed_encryption_key: A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + will be encrypted using an internal Stream-specific encryption key provisioned through KMS. :param pulumi.Input[str] desired_state: Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. :param pulumi.Input[pulumi.InputType['StreamDestinationConfigArgs']] destination_config: Destination connection profile configuration. Structure is documented below. @@ -693,6 +825,10 @@ def __init__(__self__, bucket=bucket.name, role="roles/storage.legacyBucketReader", member=f"serviceAccount:service-{project.number}@gcp-sa-datastream.iam.gserviceaccount.com") + key_user = gcp.kms.CryptoKeyIAMMember("keyUser", + crypto_key_id="kms-name", + role="roles/cloudkms.cryptoKeyEncrypterDecrypter", + member=f"serviceAccount:service-{project.number}@gcp-sa-datastream.iam.gserviceaccount.com") destination_connection_profile = gcp.datastream.ConnectionProfile("destinationConnectionProfile", display_name="Connection profile", location="us-central1", @@ -776,7 +912,96 @@ def __init__(__self__, )], )], ), + ), + customer_managed_encryption_key="kms-name", + opts=pulumi.ResourceOptions(depends_on=[key_user])) + ``` + ### Datastream Stream Bigquery + + ```python + import pulumi + import pulumi_gcp as gcp + import pulumi_random as random + + project = gcp.organizations.get_project() + instance = gcp.sql.DatabaseInstance("instance", + database_version="MYSQL_8_0", + region="us-central1", + settings=gcp.sql.DatabaseInstanceSettingsArgs( + tier="db-f1-micro", + backup_configuration=gcp.sql.DatabaseInstanceSettingsBackupConfigurationArgs( + enabled=True, + binary_log_enabled=True, + ), + ip_configuration=gcp.sql.DatabaseInstanceSettingsIpConfigurationArgs( + authorized_networks=[ + gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs( + value="34.71.242.81", + ), + gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs( + value="34.72.28.29", + ), + gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs( + value="34.67.6.157", + ), + gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs( + value="34.67.234.134", + ), + gcp.sql.DatabaseInstanceSettingsIpConfigurationAuthorizedNetworkArgs( + value="34.72.239.218", + ), + ], + ), + ), + deletion_protection=True) + db = gcp.sql.Database("db", instance=instance.name) + pwd = random.RandomPassword("pwd", + length=16, + special=False) + user = gcp.sql.User("user", + instance=instance.name, + host="%", + password=pwd.result) + source_connection_profile = gcp.datastream.ConnectionProfile("sourceConnectionProfile", + display_name="Source connection profile", + location="us-central1", + connection_profile_id="source-profile", + mysql_profile=gcp.datastream.ConnectionProfileMysqlProfileArgs( + hostname=instance.public_ip_address, + username=user.name, + password=user.password, )) + bq_sa = gcp.bigquery.get_default_service_account() + bigquery_key_user = gcp.kms.CryptoKeyIAMMember("bigqueryKeyUser", + crypto_key_id="bigquery-kms-name", + role="roles/cloudkms.cryptoKeyEncrypterDecrypter", + member=f"serviceAccount:{bq_sa.email}") + destination_connection_profile = gcp.datastream.ConnectionProfile("destinationConnectionProfile", + display_name="Connection profile", + location="us-central1", + connection_profile_id="destination-profile", + bigquery_profile=gcp.datastream.ConnectionProfileBigqueryProfileArgs()) + default = gcp.datastream.Stream("default", + stream_id="my-stream", + location="us-central1", + display_name="my stream", + source_config=gcp.datastream.StreamSourceConfigArgs( + source_connection_profile=source_connection_profile.id, + mysql_source_config=gcp.datastream.StreamSourceConfigMysqlSourceConfigArgs(), + ), + destination_config=gcp.datastream.StreamDestinationConfigArgs( + destination_connection_profile=destination_connection_profile.id, + bigquery_destination_config=gcp.datastream.StreamDestinationConfigBigqueryDestinationConfigArgs( + source_hierarchy_datasets=gcp.datastream.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsArgs( + dataset_template=gcp.datastream.StreamDestinationConfigBigqueryDestinationConfigSourceHierarchyDatasetsDatasetTemplateArgs( + location="us-central1", + kms_key_name="bigquery-kms-name", + ), + ), + ), + ), + backfill_none=gcp.datastream.StreamBackfillNoneArgs(), + opts=pulumi.ResourceOptions(depends_on=[bigquery_key_user])) ``` ## Import @@ -812,6 +1037,7 @@ def _internal_init(__self__, opts: Optional[pulumi.ResourceOptions] = None, backfill_all: Optional[pulumi.Input[pulumi.InputType['StreamBackfillAllArgs']]] = None, backfill_none: Optional[pulumi.Input[pulumi.InputType['StreamBackfillNoneArgs']]] = None, + customer_managed_encryption_key: Optional[pulumi.Input[str]] = None, desired_state: Optional[pulumi.Input[str]] = None, destination_config: Optional[pulumi.Input[pulumi.InputType['StreamDestinationConfigArgs']]] = None, display_name: Optional[pulumi.Input[str]] = None, @@ -831,6 +1057,7 @@ def _internal_init(__self__, __props__.__dict__["backfill_all"] = backfill_all __props__.__dict__["backfill_none"] = backfill_none + __props__.__dict__["customer_managed_encryption_key"] = customer_managed_encryption_key __props__.__dict__["desired_state"] = desired_state if destination_config is None and not opts.urn: raise TypeError("Missing required property 'destination_config'") @@ -863,6 +1090,7 @@ def get(resource_name: str, opts: Optional[pulumi.ResourceOptions] = None, backfill_all: Optional[pulumi.Input[pulumi.InputType['StreamBackfillAllArgs']]] = None, backfill_none: Optional[pulumi.Input[pulumi.InputType['StreamBackfillNoneArgs']]] = None, + customer_managed_encryption_key: Optional[pulumi.Input[str]] = None, desired_state: Optional[pulumi.Input[str]] = None, destination_config: Optional[pulumi.Input[pulumi.InputType['StreamDestinationConfigArgs']]] = None, display_name: Optional[pulumi.Input[str]] = None, @@ -883,6 +1111,8 @@ def get(resource_name: str, :param pulumi.Input[pulumi.InputType['StreamBackfillAllArgs']] backfill_all: Backfill strategy to automatically backfill the Stream's objects. Specific objects can be excluded. Structure is documented below. :param pulumi.Input[pulumi.InputType['StreamBackfillNoneArgs']] backfill_none: Backfill strategy to disable automatic backfill for the Stream's objects. + :param pulumi.Input[str] customer_managed_encryption_key: A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + will be encrypted using an internal Stream-specific encryption key provisioned through KMS. :param pulumi.Input[str] desired_state: Desired state of the Stream. Set this field to `RUNNING` to start the stream, and `PAUSED` to pause the stream. :param pulumi.Input[pulumi.InputType['StreamDestinationConfigArgs']] destination_config: Destination connection profile configuration. Structure is documented below. @@ -903,6 +1133,7 @@ def get(resource_name: str, __props__.__dict__["backfill_all"] = backfill_all __props__.__dict__["backfill_none"] = backfill_none + __props__.__dict__["customer_managed_encryption_key"] = customer_managed_encryption_key __props__.__dict__["desired_state"] = desired_state __props__.__dict__["destination_config"] = destination_config __props__.__dict__["display_name"] = display_name @@ -932,6 +1163,15 @@ def backfill_none(self) -> pulumi.Output[Optional['outputs.StreamBackfillNone']] """ return pulumi.get(self, "backfill_none") + @property + @pulumi.getter(name="customerManagedEncryptionKey") + def customer_managed_encryption_key(self) -> pulumi.Output[Optional[str]]: + """ + A reference to a KMS encryption key. If provided, it will be used to encrypt the data. If left blank, data + will be encrypted using an internal Stream-specific encryption key provisioned through KMS. + """ + return pulumi.get(self, "customer_managed_encryption_key") + @property @pulumi.getter(name="desiredState") def desired_state(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/deploymentmanager/deployment.py b/sdk/python/pulumi_gcp/deploymentmanager/deployment.py index 04df246eff..eba3c3165a 100644 --- a/sdk/python/pulumi_gcp/deploymentmanager/deployment.py +++ b/sdk/python/pulumi_gcp/deploymentmanager/deployment.py @@ -48,14 +48,10 @@ def __init__(__self__, *, :param pulumi.Input[Sequence[pulumi.Input['DeploymentLabelArgs']]] labels: Key-value pairs to apply to this labels. Structure is documented below. :param pulumi.Input[str] name: Unique name for the deployment - :param pulumi.Input[bool] preview: If set to true, a deployment is created with "shell" resources - that are not actually instantiated. This allows you to preview a - deployment. It can be updated to false to actually deploy - with real resources. - ~>**NOTE:** Deployment Manager does not allow update - of a deployment in preview (unless updating to preview=false). Thus, - the provider will force-recreate deployments if either preview is updated - to true or if other fields are updated while preview is true. + :param pulumi.Input[bool] preview: If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + deployments if either preview is updated to true or if other fields are updated while preview is true. :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. """ @@ -167,14 +163,10 @@ def name(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def preview(self) -> Optional[pulumi.Input[bool]]: """ - If set to true, a deployment is created with "shell" resources - that are not actually instantiated. This allows you to preview a - deployment. It can be updated to false to actually deploy - with real resources. - ~>**NOTE:** Deployment Manager does not allow update - of a deployment in preview (unless updating to preview=false). Thus, - the provider will force-recreate deployments if either preview is updated - to true or if other fields are updated while preview is true. + If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + deployments if either preview is updated to true or if other fields are updated while preview is true. """ return pulumi.get(self, "preview") @@ -234,14 +226,10 @@ def __init__(__self__, *, :param pulumi.Input[str] manifest: Output only. URL of the manifest representing the last manifest that was successfully deployed. :param pulumi.Input[str] name: Unique name for the deployment - :param pulumi.Input[bool] preview: If set to true, a deployment is created with "shell" resources - that are not actually instantiated. This allows you to preview a - deployment. It can be updated to false to actually deploy - with real resources. - ~>**NOTE:** Deployment Manager does not allow update - of a deployment in preview (unless updating to preview=false). Thus, - the provider will force-recreate deployments if either preview is updated - to true or if other fields are updated while preview is true. + :param pulumi.Input[bool] preview: If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + deployments if either preview is updated to true or if other fields are updated while preview is true. :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] self_link: Output only. Server defined URL for the resource. @@ -375,14 +363,10 @@ def name(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def preview(self) -> Optional[pulumi.Input[bool]]: """ - If set to true, a deployment is created with "shell" resources - that are not actually instantiated. This allows you to preview a - deployment. It can be updated to false to actually deploy - with real resources. - ~>**NOTE:** Deployment Manager does not allow update - of a deployment in preview (unless updating to preview=false). Thus, - the provider will force-recreate deployments if either preview is updated - to true or if other fields are updated while preview is true. + If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + deployments if either preview is updated to true or if other fields are updated while preview is true. """ return pulumi.get(self, "preview") @@ -445,20 +429,6 @@ def __init__(__self__, target: Optional[pulumi.Input[pulumi.InputType['DeploymentTargetArgs']]] = None, __props__=None): """ - A collection of resources that are deployed and managed together using - a configuration file - - > **Warning:** This resource is intended only to manage a Deployment resource, - and attempts to manage the Deployment's resources in the provider as well - will likely result in errors or unexpected behavior as the two tools - fight over ownership. We strongly discourage doing so unless you are an - experienced user of both tools. - - In addition, due to limitations of the API, the provider will treat - deployments in preview as recreate-only for any update operation other - than actually deploying an in-preview deployment (i.e. `preview=true` to - `preview=false`). - ## Example Usage ### Deployment Manager Deployment Basic @@ -515,14 +485,10 @@ def __init__(__self__, :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['DeploymentLabelArgs']]]] labels: Key-value pairs to apply to this labels. Structure is documented below. :param pulumi.Input[str] name: Unique name for the deployment - :param pulumi.Input[bool] preview: If set to true, a deployment is created with "shell" resources - that are not actually instantiated. This allows you to preview a - deployment. It can be updated to false to actually deploy - with real resources. - ~>**NOTE:** Deployment Manager does not allow update - of a deployment in preview (unless updating to preview=false). Thus, - the provider will force-recreate deployments if either preview is updated - to true or if other fields are updated while preview is true. + :param pulumi.Input[bool] preview: If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + deployments if either preview is updated to true or if other fields are updated while preview is true. :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[pulumi.InputType['DeploymentTargetArgs']] target: Parameters that define your deployment, including the deployment @@ -536,20 +502,6 @@ def __init__(__self__, args: DeploymentArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A collection of resources that are deployed and managed together using - a configuration file - - > **Warning:** This resource is intended only to manage a Deployment resource, - and attempts to manage the Deployment's resources in the provider as well - will likely result in errors or unexpected behavior as the two tools - fight over ownership. We strongly discourage doing so unless you are an - experienced user of both tools. - - In addition, due to limitations of the API, the provider will treat - deployments in preview as recreate-only for any update operation other - than actually deploying an in-preview deployment (i.e. `preview=true` to - `preview=false`). - ## Example Usage ### Deployment Manager Deployment Basic @@ -680,14 +632,10 @@ def get(resource_name: str, :param pulumi.Input[str] manifest: Output only. URL of the manifest representing the last manifest that was successfully deployed. :param pulumi.Input[str] name: Unique name for the deployment - :param pulumi.Input[bool] preview: If set to true, a deployment is created with "shell" resources - that are not actually instantiated. This allows you to preview a - deployment. It can be updated to false to actually deploy - with real resources. - ~>**NOTE:** Deployment Manager does not allow update - of a deployment in preview (unless updating to preview=false). Thus, - the provider will force-recreate deployments if either preview is updated - to true or if other fields are updated while preview is true. + :param pulumi.Input[bool] preview: If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + deployments if either preview is updated to true or if other fields are updated while preview is true. :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] self_link: Output only. Server defined URL for the resource. @@ -787,14 +735,10 @@ def name(self) -> pulumi.Output[str]: @pulumi.getter def preview(self) -> pulumi.Output[Optional[bool]]: """ - If set to true, a deployment is created with "shell" resources - that are not actually instantiated. This allows you to preview a - deployment. It can be updated to false to actually deploy - with real resources. - ~>**NOTE:** Deployment Manager does not allow update - of a deployment in preview (unless updating to preview=false). Thus, - the provider will force-recreate deployments if either preview is updated - to true or if other fields are updated while preview is true. + If set to true, a deployment is created with "shell" resources that are not actually instantiated. This allows you to + preview a deployment. It can be updated to false to actually deploy with real resources. ~>**NOTE:** Deployment Manager + does not allow update of a deployment in preview (unless updating to preview=false). Thus, Terraform will force-recreate + deployments if either preview is updated to true or if other fields are updated while preview is true. """ return pulumi.get(self, "preview") diff --git a/sdk/python/pulumi_gcp/diagflow/agent.py b/sdk/python/pulumi_gcp/diagflow/agent.py index bf98186a35..c1fcfe3044 100644 --- a/sdk/python/pulumi_gcp/diagflow/agent.py +++ b/sdk/python/pulumi_gcp/diagflow/agent.py @@ -59,12 +59,11 @@ def __init__(__self__, *, :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]]] supported_language_codes: The list of all languages supported by this agent (except for the defaultLanguageCode). - :param pulumi.Input[str] tier: The agent tier. If not specified, TIER_STANDARD is assumed. - * TIER_STANDARD: Standard tier. - * TIER_ENTERPRISE: Enterprise tier (Essentials). - * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - the the provider state and Dialogflow if the agent tier is changed outside of the provider. + :param pulumi.Input[str] tier: The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + "TIER_ENTERPRISE_PLUS"] """ pulumi.set(__self__, "default_language_code", default_language_code) pulumi.set(__self__, "display_name", display_name) @@ -244,12 +243,11 @@ def supported_language_codes(self, value: Optional[pulumi.Input[Sequence[pulumi. @pulumi.getter def tier(self) -> Optional[pulumi.Input[str]]: """ - The agent tier. If not specified, TIER_STANDARD is assumed. - * TIER_STANDARD: Standard tier. - * TIER_ENTERPRISE: Enterprise tier (Essentials). - * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - the the provider state and Dialogflow if the agent tier is changed outside of the provider. + The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + "TIER_ENTERPRISE_PLUS"] """ return pulumi.get(self, "tier") @@ -307,12 +305,11 @@ def __init__(__self__, *, :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]]] supported_language_codes: The list of all languages supported by this agent (except for the defaultLanguageCode). - :param pulumi.Input[str] tier: The agent tier. If not specified, TIER_STANDARD is assumed. - * TIER_STANDARD: Standard tier. - * TIER_ENTERPRISE: Enterprise tier (Essentials). - * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - the the provider state and Dialogflow if the agent tier is changed outside of the provider. + :param pulumi.Input[str] tier: The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + "TIER_ENTERPRISE_PLUS"] :param pulumi.Input[str] time_zone: The time zone of this agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris. """ @@ -499,12 +496,11 @@ def supported_language_codes(self, value: Optional[pulumi.Input[Sequence[pulumi. @pulumi.getter def tier(self) -> Optional[pulumi.Input[str]]: """ - The agent tier. If not specified, TIER_STANDARD is assumed. - * TIER_STANDARD: Standard tier. - * TIER_ENTERPRISE: Enterprise tier (Essentials). - * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - the the provider state and Dialogflow if the agent tier is changed outside of the provider. + The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + "TIER_ENTERPRISE_PLUS"] """ return pulumi.get(self, "tier") @@ -620,12 +616,11 @@ def __init__(__self__, :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]]] supported_language_codes: The list of all languages supported by this agent (except for the defaultLanguageCode). - :param pulumi.Input[str] tier: The agent tier. If not specified, TIER_STANDARD is assumed. - * TIER_STANDARD: Standard tier. - * TIER_ENTERPRISE: Enterprise tier (Essentials). - * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - the the provider state and Dialogflow if the agent tier is changed outside of the provider. + :param pulumi.Input[str] tier: The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + "TIER_ENTERPRISE_PLUS"] :param pulumi.Input[str] time_zone: The time zone of this agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris. """ @@ -796,12 +791,11 @@ def get(resource_name: str, :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]]] supported_language_codes: The list of all languages supported by this agent (except for the defaultLanguageCode). - :param pulumi.Input[str] tier: The agent tier. If not specified, TIER_STANDARD is assumed. - * TIER_STANDARD: Standard tier. - * TIER_ENTERPRISE: Enterprise tier (Essentials). - * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - the the provider state and Dialogflow if the agent tier is changed outside of the provider. + :param pulumi.Input[str] tier: The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + "TIER_ENTERPRISE_PLUS"] :param pulumi.Input[str] time_zone: The time zone of this agent from the [time zone database](https://www.iana.org/time-zones), e.g., America/New_York, Europe/Paris. """ @@ -936,12 +930,11 @@ def supported_language_codes(self) -> pulumi.Output[Optional[Sequence[str]]]: @pulumi.getter def tier(self) -> pulumi.Output[Optional[str]]: """ - The agent tier. If not specified, TIER_STANDARD is assumed. - * TIER_STANDARD: Standard tier. - * TIER_ENTERPRISE: Enterprise tier (Essentials). - * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). - NOTE: Due to consistency issues, the provider will not read this field from the API. Drift is possible between - the the provider state and Dialogflow if the agent tier is changed outside of the provider. + The agent tier. If not specified, TIER_STANDARD is assumed. * TIER_STANDARD: Standard tier. * TIER_ENTERPRISE: + Enterprise tier (Essentials). * TIER_ENTERPRISE_PLUS: Enterprise tier (Plus). NOTE: Due to consistency issues, the + provider will not read this field from the API. Drift is possible between the Terraform state and Dialogflow if the + agent tier is changed outside of Terraform. Possible values: ["TIER_STANDARD", "TIER_ENTERPRISE", + "TIER_ENTERPRISE_PLUS"] """ return pulumi.get(self, "tier") diff --git a/sdk/python/pulumi_gcp/diagflow/intent.py b/sdk/python/pulumi_gcp/diagflow/intent.py index 1ff5fd3900..3e7d7275e8 100644 --- a/sdk/python/pulumi_gcp/diagflow/intent.py +++ b/sdk/python/pulumi_gcp/diagflow/intent.py @@ -580,46 +580,6 @@ def __init__(__self__, basic_intent = gcp.diagflow.Intent("basicIntent", display_name="basic-intent", opts=pulumi.ResourceOptions(depends_on=[basic_agent])) ``` - ### Dialogflow Intent Full - - ```python - import pulumi - import pulumi_gcp as gcp - - agent_project_project = gcp.organizations.Project("agentProjectProject", - project_id="tf-test-dialogflow", - org_id="123456789") - agent_project_service = gcp.projects.Service("agentProjectService", - project=agent_project_project.project_id, - service="dialogflow.googleapis.com", - disable_dependent_services=False) - dialogflow_service_account = gcp.service_account.Account("dialogflowServiceAccount", account_id="tf-test-dialogflow") - agent_create = gcp.projects.IAMMember("agentCreate", - project=agent_project_service.project, - role="roles/dialogflow.admin", - member=dialogflow_service_account.email.apply(lambda email: f"serviceAccount:{email}")) - basic_agent = gcp.diagflow.Agent("basicAgent", - project=agent_project_project.project_id, - display_name="example_agent", - default_language_code="en", - time_zone="America/New_York") - full_intent = gcp.diagflow.Intent("fullIntent", - project=agent_project_project.project_id, - display_name="full-intent", - webhook_state="WEBHOOK_STATE_ENABLED", - priority=1, - is_fallback=False, - ml_disabled=True, - action="some_action", - reset_contexts=True, - input_context_names=[agent_project_project.project_id.apply(lambda project_id: f"projects/{project_id}/agent/sessions/-/contexts/some_id")], - events=["some_event"], - default_response_platforms=[ - "FACEBOOK", - "SLACK", - ], - opts=pulumi.ResourceOptions(depends_on=[basic_agent])) - ``` ## Import @@ -691,46 +651,6 @@ def __init__(__self__, basic_intent = gcp.diagflow.Intent("basicIntent", display_name="basic-intent", opts=pulumi.ResourceOptions(depends_on=[basic_agent])) ``` - ### Dialogflow Intent Full - - ```python - import pulumi - import pulumi_gcp as gcp - - agent_project_project = gcp.organizations.Project("agentProjectProject", - project_id="tf-test-dialogflow", - org_id="123456789") - agent_project_service = gcp.projects.Service("agentProjectService", - project=agent_project_project.project_id, - service="dialogflow.googleapis.com", - disable_dependent_services=False) - dialogflow_service_account = gcp.service_account.Account("dialogflowServiceAccount", account_id="tf-test-dialogflow") - agent_create = gcp.projects.IAMMember("agentCreate", - project=agent_project_service.project, - role="roles/dialogflow.admin", - member=dialogflow_service_account.email.apply(lambda email: f"serviceAccount:{email}")) - basic_agent = gcp.diagflow.Agent("basicAgent", - project=agent_project_project.project_id, - display_name="example_agent", - default_language_code="en", - time_zone="America/New_York") - full_intent = gcp.diagflow.Intent("fullIntent", - project=agent_project_project.project_id, - display_name="full-intent", - webhook_state="WEBHOOK_STATE_ENABLED", - priority=1, - is_fallback=False, - ml_disabled=True, - action="some_action", - reset_contexts=True, - input_context_names=[agent_project_project.project_id.apply(lambda project_id: f"projects/{project_id}/agent/sessions/-/contexts/some_id")], - events=["some_event"], - default_response_platforms=[ - "FACEBOOK", - "SLACK", - ], - opts=pulumi.ResourceOptions(depends_on=[basic_agent])) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/dns/get_managed_zone.py b/sdk/python/pulumi_gcp/dns/get_managed_zone.py index 0d25f37599..8f87ae5f38 100644 --- a/sdk/python/pulumi_gcp/dns/get_managed_zone.py +++ b/sdk/python/pulumi_gcp/dns/get_managed_zone.py @@ -58,9 +58,6 @@ def description(self) -> str: @property @pulumi.getter(name="dnsName") def dns_name(self) -> str: - """ - The fully qualified DNS name of this zone, e.g. `example.io.`. - """ return pulumi.get(self, "dns_name") @property diff --git a/sdk/python/pulumi_gcp/dns/managed_zone.py b/sdk/python/pulumi_gcp/dns/managed_zone.py index a4e389c871..a213efbc96 100644 --- a/sdk/python/pulumi_gcp/dns/managed_zone.py +++ b/sdk/python/pulumi_gcp/dns/managed_zone.py @@ -35,7 +35,7 @@ def __init__(__self__, *, :param pulumi.Input[str] dns_name: The DNS name of this managed zone, for instance "example.com.". :param pulumi.Input['ManagedZoneCloudLoggingConfigArgs'] cloud_logging_config: Cloud logging configuration Structure is documented below. - :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Pulumi'. + :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Terraform'. :param pulumi.Input['ManagedZoneDnssecConfigArgs'] dnssec_config: DNSSEC configuration Structure is documented below. :param pulumi.Input[bool] force_destroy: Set this true to delete all records in the zone. @@ -54,11 +54,11 @@ def __init__(__self__, *, 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[bool] reverse_lookup: Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - lookup queries using automatically configured records for VPC resources. This only applies - to networks listed under `private_visibility_config`. - :param pulumi.Input['ManagedZoneServiceDirectoryConfigArgs'] service_directory_config: The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - Structure is documented below. + :param pulumi.Input[bool] reverse_lookup: Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + automatically configured records for VPC resources. This only applies to networks listed under + 'private_visibility_config'. + :param pulumi.Input['ManagedZoneServiceDirectoryConfigArgs'] service_directory_config: The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + information related to the namespace associated with the zone. :param pulumi.Input[str] visibility: The zone's visibility: public zones are exposed to the Internet, while private zones are visible only to Virtual Private Cloud resources. Default value is `public`. @@ -123,7 +123,7 @@ def cloud_logging_config(self, value: Optional[pulumi.Input['ManagedZoneCloudLog @pulumi.getter def description(self) -> Optional[pulumi.Input[str]]: """ - A textual description field. Defaults to 'Managed by Pulumi'. + A textual description field. Defaults to 'Managed by Terraform'. """ return pulumi.get(self, "description") @@ -241,9 +241,9 @@ def project(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="reverseLookup") def reverse_lookup(self) -> Optional[pulumi.Input[bool]]: """ - Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - lookup queries using automatically configured records for VPC resources. This only applies - to networks listed under `private_visibility_config`. + Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + automatically configured records for VPC resources. This only applies to networks listed under + 'private_visibility_config'. """ return pulumi.get(self, "reverse_lookup") @@ -255,8 +255,8 @@ def reverse_lookup(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="serviceDirectoryConfig") def service_directory_config(self) -> Optional[pulumi.Input['ManagedZoneServiceDirectoryConfigArgs']]: """ - The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - Structure is documented below. + The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + information related to the namespace associated with the zone. """ return pulumi.get(self, "service_directory_config") @@ -306,7 +306,7 @@ def __init__(__self__, *, Structure is documented below. :param pulumi.Input[str] creation_time: The time that this resource was created on the server. This is in RFC3339 text format. - :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Pulumi'. + :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Terraform'. :param pulumi.Input[str] dns_name: The DNS name of this managed zone, for instance "example.com.". :param pulumi.Input['ManagedZoneDnssecConfigArgs'] dnssec_config: DNSSEC configuration Structure is documented below. @@ -329,11 +329,11 @@ def __init__(__self__, *, 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[bool] reverse_lookup: Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - lookup queries using automatically configured records for VPC resources. This only applies - to networks listed under `private_visibility_config`. - :param pulumi.Input['ManagedZoneServiceDirectoryConfigArgs'] service_directory_config: The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - Structure is documented below. + :param pulumi.Input[bool] reverse_lookup: Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + automatically configured records for VPC resources. This only applies to networks listed under + 'private_visibility_config'. + :param pulumi.Input['ManagedZoneServiceDirectoryConfigArgs'] service_directory_config: The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + information related to the namespace associated with the zone. :param pulumi.Input[str] visibility: The zone's visibility: public zones are exposed to the Internet, while private zones are visible only to Virtual Private Cloud resources. Default value is `public`. @@ -406,7 +406,7 @@ def creation_time(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def description(self) -> Optional[pulumi.Input[str]]: """ - A textual description field. Defaults to 'Managed by Pulumi'. + A textual description field. Defaults to 'Managed by Terraform'. """ return pulumi.get(self, "description") @@ -561,9 +561,9 @@ def project(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="reverseLookup") def reverse_lookup(self) -> Optional[pulumi.Input[bool]]: """ - Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - lookup queries using automatically configured records for VPC resources. This only applies - to networks listed under `private_visibility_config`. + Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + automatically configured records for VPC resources. This only applies to networks listed under + 'private_visibility_config'. """ return pulumi.get(self, "reverse_lookup") @@ -575,8 +575,8 @@ def reverse_lookup(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="serviceDirectoryConfig") def service_directory_config(self) -> Optional[pulumi.Input['ManagedZoneServiceDirectoryConfigArgs']]: """ - The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - Structure is documented below. + The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + information related to the namespace associated with the zone. """ return pulumi.get(self, "service_directory_config") @@ -629,7 +629,7 @@ def __init__(__self__, * [API documentation](https://cloud.google.com/dns/api/v1/managedZones) * How-to Guides - * [Managing Zones](https://cloud.google.com/dns/zones/) + * [Managing Zones](https://cloud.google.com/dns/zones/) ## Example Usage ### Dns Managed Zone Basic @@ -637,10 +637,12 @@ def __init__(__self__, ```python import pulumi import pulumi_gcp as gcp + import pulumi_random as random + rnd = random.RandomId("rnd", byte_length=4) example_zone = gcp.dns.ManagedZone("example-zone", description="Example DNS zone", - dns_name="my-domain.com.", + dns_name=rnd.hex.apply(lambda hex: f"example-{hex}.com."), labels={ "foo": "bar", }) @@ -850,7 +852,7 @@ def __init__(__self__, :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[pulumi.InputType['ManagedZoneCloudLoggingConfigArgs']] cloud_logging_config: Cloud logging configuration Structure is documented below. - :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Pulumi'. + :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Terraform'. :param pulumi.Input[str] dns_name: The DNS name of this managed zone, for instance "example.com.". :param pulumi.Input[pulumi.InputType['ManagedZoneDnssecConfigArgs']] dnssec_config: DNSSEC configuration Structure is documented below. @@ -870,11 +872,11 @@ def __init__(__self__, 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[bool] reverse_lookup: Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - lookup queries using automatically configured records for VPC resources. This only applies - to networks listed under `private_visibility_config`. - :param pulumi.Input[pulumi.InputType['ManagedZoneServiceDirectoryConfigArgs']] service_directory_config: The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - Structure is documented below. + :param pulumi.Input[bool] reverse_lookup: Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + automatically configured records for VPC resources. This only applies to networks listed under + 'private_visibility_config'. + :param pulumi.Input[pulumi.InputType['ManagedZoneServiceDirectoryConfigArgs']] service_directory_config: The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + information related to the namespace associated with the zone. :param pulumi.Input[str] visibility: The zone's visibility: public zones are exposed to the Internet, while private zones are visible only to Virtual Private Cloud resources. Default value is `public`. @@ -895,7 +897,7 @@ def __init__(__self__, * [API documentation](https://cloud.google.com/dns/api/v1/managedZones) * How-to Guides - * [Managing Zones](https://cloud.google.com/dns/zones/) + * [Managing Zones](https://cloud.google.com/dns/zones/) ## Example Usage ### Dns Managed Zone Basic @@ -903,10 +905,12 @@ def __init__(__self__, ```python import pulumi import pulumi_gcp as gcp + import pulumi_random as random + rnd = random.RandomId("rnd", byte_length=4) example_zone = gcp.dns.ManagedZone("example-zone", description="Example DNS zone", - dns_name="my-domain.com.", + dns_name=rnd.hex.apply(lambda hex: f"example-{hex}.com."), labels={ "foo": "bar", }) @@ -1209,7 +1213,7 @@ def get(resource_name: str, Structure is documented below. :param pulumi.Input[str] creation_time: The time that this resource was created on the server. This is in RFC3339 text format. - :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Pulumi'. + :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Terraform'. :param pulumi.Input[str] dns_name: The DNS name of this managed zone, for instance "example.com.". :param pulumi.Input[pulumi.InputType['ManagedZoneDnssecConfigArgs']] dnssec_config: DNSSEC configuration Structure is documented below. @@ -1232,11 +1236,11 @@ def get(resource_name: str, 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[bool] reverse_lookup: Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - lookup queries using automatically configured records for VPC resources. This only applies - to networks listed under `private_visibility_config`. - :param pulumi.Input[pulumi.InputType['ManagedZoneServiceDirectoryConfigArgs']] service_directory_config: The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - Structure is documented below. + :param pulumi.Input[bool] reverse_lookup: Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + automatically configured records for VPC resources. This only applies to networks listed under + 'private_visibility_config'. + :param pulumi.Input[pulumi.InputType['ManagedZoneServiceDirectoryConfigArgs']] service_directory_config: The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + information related to the namespace associated with the zone. :param pulumi.Input[str] visibility: The zone's visibility: public zones are exposed to the Internet, while private zones are visible only to Virtual Private Cloud resources. Default value is `public`. @@ -1287,7 +1291,7 @@ def creation_time(self) -> pulumi.Output[str]: @pulumi.getter def description(self) -> pulumi.Output[str]: """ - A textual description field. Defaults to 'Managed by Pulumi'. + A textual description field. Defaults to 'Managed by Terraform'. """ return pulumi.get(self, "description") @@ -1394,9 +1398,9 @@ def project(self) -> pulumi.Output[str]: @pulumi.getter(name="reverseLookup") def reverse_lookup(self) -> pulumi.Output[Optional[bool]]: """ - Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse - lookup queries using automatically configured records for VPC resources. This only applies - to networks listed under `private_visibility_config`. + Specifies if this is a managed reverse lookup zone. If true, Cloud DNS will resolve reverse lookup queries using + automatically configured records for VPC resources. This only applies to networks listed under + 'private_visibility_config'. """ return pulumi.get(self, "reverse_lookup") @@ -1404,8 +1408,8 @@ def reverse_lookup(self) -> pulumi.Output[Optional[bool]]: @pulumi.getter(name="serviceDirectoryConfig") def service_directory_config(self) -> pulumi.Output[Optional['outputs.ManagedZoneServiceDirectoryConfig']]: """ - The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains information related to the namespace associated with the zone. - Structure is documented below. + The presence of this field indicates that this zone is backed by Service Directory. The value of this field contains + information related to the namespace associated with the zone. """ return pulumi.get(self, "service_directory_config") diff --git a/sdk/python/pulumi_gcp/dns/policy.py b/sdk/python/pulumi_gcp/dns/policy.py index 04dc139643..2d9fe6337d 100644 --- a/sdk/python/pulumi_gcp/dns/policy.py +++ b/sdk/python/pulumi_gcp/dns/policy.py @@ -29,7 +29,7 @@ def __init__(__self__, *, When specified, all DNS queries are forwarded to a name server that you choose. Names such as .internal are not available when an alternative name server is specified. Structure is documented below. - :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Pulumi'. + :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Terraform'. :param pulumi.Input[bool] enable_inbound_forwarding: Allows networks bound to this policy to receive DNS queries sent by VMs or applications over VPN connections. When enabled, a virtual IP address will be allocated from each of the sub-networks @@ -76,7 +76,7 @@ def alternative_name_server_config(self, value: Optional[pulumi.Input['PolicyAlt @pulumi.getter def description(self) -> Optional[pulumi.Input[str]]: """ - A textual description field. Defaults to 'Managed by Pulumi'. + A textual description field. Defaults to 'Managed by Terraform'. """ return pulumi.get(self, "description") @@ -167,7 +167,7 @@ def __init__(__self__, *, When specified, all DNS queries are forwarded to a name server that you choose. Names such as .internal are not available when an alternative name server is specified. Structure is documented below. - :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Pulumi'. + :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Terraform'. :param pulumi.Input[bool] enable_inbound_forwarding: Allows networks bound to this policy to receive DNS queries sent by VMs or applications over VPN connections. When enabled, a virtual IP address will be allocated from each of the sub-networks @@ -214,7 +214,7 @@ def alternative_name_server_config(self, value: Optional[pulumi.Input['PolicyAlt @pulumi.getter def description(self) -> Optional[pulumi.Input[str]]: """ - A textual description field. Defaults to 'Managed by Pulumi'. + A textual description field. Defaults to 'Managed by Terraform'. """ return pulumi.get(self, "description") @@ -367,7 +367,7 @@ def __init__(__self__, When specified, all DNS queries are forwarded to a name server that you choose. Names such as .internal are not available when an alternative name server is specified. Structure is documented below. - :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Pulumi'. + :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Terraform'. :param pulumi.Input[bool] enable_inbound_forwarding: Allows networks bound to this policy to receive DNS queries sent by VMs or applications over VPN connections. When enabled, a virtual IP address will be allocated from each of the sub-networks @@ -511,7 +511,7 @@ def get(resource_name: str, When specified, all DNS queries are forwarded to a name server that you choose. Names such as .internal are not available when an alternative name server is specified. Structure is documented below. - :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Pulumi'. + :param pulumi.Input[str] description: A textual description field. Defaults to 'Managed by Terraform'. :param pulumi.Input[bool] enable_inbound_forwarding: Allows networks bound to this policy to receive DNS queries sent by VMs or applications over VPN connections. When enabled, a virtual IP address will be allocated from each of the sub-networks @@ -552,7 +552,7 @@ def alternative_name_server_config(self) -> pulumi.Output[Optional['outputs.Poli @pulumi.getter def description(self) -> pulumi.Output[Optional[str]]: """ - A textual description field. Defaults to 'Managed by Pulumi'. + A textual description field. Defaults to 'Managed by Terraform'. """ return pulumi.get(self, "description") diff --git a/sdk/python/pulumi_gcp/firebase/get_web_app.py b/sdk/python/pulumi_gcp/firebase/get_web_app.py index 3564f73572..15c81d5287 100644 --- a/sdk/python/pulumi_gcp/firebase/get_web_app.py +++ b/sdk/python/pulumi_gcp/firebase/get_web_app.py @@ -109,8 +109,7 @@ def __await__(self): def get_web_app(app_id: Optional[str] = None, opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetWebAppResult: """ - A Google Cloud Firebase web application instance - + Use this data source to access information about an existing resource. :param str app_id: The app_ip of name of the Firebase webApp. """ @@ -133,8 +132,7 @@ def get_web_app(app_id: Optional[str] = None, def get_web_app_output(app_id: Optional[pulumi.Input[str]] = None, opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetWebAppResult]: """ - A Google Cloud Firebase web application instance - + Use this data source to access information about an existing resource. :param str app_id: The app_ip of name of the Firebase webApp. """ diff --git a/sdk/python/pulumi_gcp/firebase/get_web_app_config.py b/sdk/python/pulumi_gcp/firebase/get_web_app_config.py index aab8d189e4..c585197757 100644 --- a/sdk/python/pulumi_gcp/firebase/get_web_app_config.py +++ b/sdk/python/pulumi_gcp/firebase/get_web_app_config.py @@ -159,14 +159,7 @@ def get_web_app_config(project: Optional[str] = None, web_app_id: Optional[str] = None, opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetWebAppConfigResult: """ - A Google Cloud Firebase web application configuration - - To get more information about WebApp, see: - - * [API documentation](https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects.webApps) - * How-to Guides - * [Official Documentation](https://firebase.google.com/) - + Use this data source to access information about an existing resource. :param str project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. @@ -196,14 +189,7 @@ def get_web_app_config_output(project: Optional[pulumi.Input[Optional[str]]] = N web_app_id: Optional[pulumi.Input[str]] = None, opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetWebAppConfigResult]: """ - A Google Cloud Firebase web application configuration - - To get more information about WebApp, see: - - * [API documentation](https://firebase.google.com/docs/projects/api/reference/rest/v1beta1/projects.webApps) - * How-to Guides - * [Official Documentation](https://firebase.google.com/) - + Use this data source to access information about an existing resource. :param str project: The ID of the project in which the resource belongs. If it is not provided, the provider project is used. diff --git a/sdk/python/pulumi_gcp/firebase/project.py b/sdk/python/pulumi_gcp/firebase/project.py index 4f4bab7433..400418e38b 100644 --- a/sdk/python/pulumi_gcp/firebase/project.py +++ b/sdk/python/pulumi_gcp/firebase/project.py @@ -103,31 +103,7 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - A Google Cloud Firebase instance. This enables Firebase resources on a given google project. - Since a FirebaseProject is actually also a GCP Project, a FirebaseProject uses underlying GCP - identifiers (most importantly, the projectId) as its own for easy interop with GCP APIs. - Once Firebase has been added to a Google Project it cannot be removed. - - To get more information about Project, see: - - * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects) - * How-to Guides - * [Official Documentation](https://firebase.google.com/) - ## Example Usage - ### Firebase Project Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - default_project = gcp.organizations.Project("defaultProject", - project_id="tf-test", - org_id="123456789", - opts=pulumi.ResourceOptions(provider=google_beta)) - default_firebase_project_project = gcp.firebase.Project("defaultFirebase/projectProject", project=default_project.project_id, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import @@ -153,31 +129,7 @@ def __init__(__self__, args: Optional[ProjectArgs] = None, opts: Optional[pulumi.ResourceOptions] = None): """ - A Google Cloud Firebase instance. This enables Firebase resources on a given google project. - Since a FirebaseProject is actually also a GCP Project, a FirebaseProject uses underlying GCP - identifiers (most importantly, the projectId) as its own for easy interop with GCP APIs. - Once Firebase has been added to a Google Project it cannot be removed. - - To get more information about Project, see: - - * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects) - * How-to Guides - * [Official Documentation](https://firebase.google.com/) - ## Example Usage - ### Firebase Project Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - default_project = gcp.organizations.Project("defaultProject", - project_id="tf-test", - org_id="123456789", - opts=pulumi.ResourceOptions(provider=google_beta)) - default_firebase_project_project = gcp.firebase.Project("defaultFirebase/projectProject", project=default_project.project_id, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/firebase/project_location.py b/sdk/python/pulumi_gcp/firebase/project_location.py index c9fcbca92b..4d3aa79c71 100644 --- a/sdk/python/pulumi_gcp/firebase/project_location.py +++ b/sdk/python/pulumi_gcp/firebase/project_location.py @@ -107,39 +107,7 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - Sets the default Google Cloud Platform (GCP) resource location for the specified FirebaseProject. - This method creates an App Engine application with a default Cloud Storage bucket, located in the specified - locationId. This location must be one of the available GCP resource locations. - After the default GCP resource location is finalized, or if it was already set, it cannot be changed. - The default GCP resource location for the specified FirebaseProject might already be set because either the - GCP Project already has an App Engine application or defaultLocation.finalize was previously called with a - specified locationId. Any new calls to defaultLocation.finalize with a different specified locationId will - return a 409 error. - - To get more information about ProjectLocation, see: - - * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.defaultLocation/finalize) - * How-to Guides - * [Official Documentation](https://firebase.google.com/) - ## Example Usage - ### Firebase Project Location Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - default_project = gcp.organizations.Project("defaultProject", - project_id="tf-test", - org_id="123456789", - opts=pulumi.ResourceOptions(provider=google_beta)) - default_firebase_project_project = gcp.firebase.Project("defaultFirebase/projectProject", project=default_project.project_id, - opts=pulumi.ResourceOptions(provider=google_beta)) - basic = gcp.firebase.ProjectLocation("basic", - project=default_firebase / project_project["project"], - location_id="us-central", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import @@ -167,39 +135,7 @@ def __init__(__self__, args: ProjectLocationArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Sets the default Google Cloud Platform (GCP) resource location for the specified FirebaseProject. - This method creates an App Engine application with a default Cloud Storage bucket, located in the specified - locationId. This location must be one of the available GCP resource locations. - After the default GCP resource location is finalized, or if it was already set, it cannot be changed. - The default GCP resource location for the specified FirebaseProject might already be set because either the - GCP Project already has an App Engine application or defaultLocation.finalize was previously called with a - specified locationId. Any new calls to defaultLocation.finalize with a different specified locationId will - return a 409 error. - - To get more information about ProjectLocation, see: - - * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.defaultLocation/finalize) - * How-to Guides - * [Official Documentation](https://firebase.google.com/) - ## Example Usage - ### Firebase Project Location Basic - - ```python - import pulumi - import pulumi_gcp as gcp - - default_project = gcp.organizations.Project("defaultProject", - project_id="tf-test", - org_id="123456789", - opts=pulumi.ResourceOptions(provider=google_beta)) - default_firebase_project_project = gcp.firebase.Project("defaultFirebase/projectProject", project=default_project.project_id, - opts=pulumi.ResourceOptions(provider=google_beta)) - basic = gcp.firebase.ProjectLocation("basic", - project=default_firebase / project_project["project"], - location_id="us-central", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/firebase/web_app.py b/sdk/python/pulumi_gcp/firebase/web_app.py index c3935037bf..083915afa5 100644 --- a/sdk/python/pulumi_gcp/firebase/web_app.py +++ b/sdk/python/pulumi_gcp/firebase/web_app.py @@ -192,50 +192,7 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - A Google Cloud Firebase web application instance - - To get more information about WebApp, see: - - * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.webApps) - * How-to Guides - * [Official Documentation](https://firebase.google.com/) - ## Example Usage - ### Firebase Web App Basic - - ```python - import pulumi - import json - import pulumi_gcp as gcp - - default_project = gcp.organizations.Project("defaultProject", - project_id="tf-test", - org_id="123456789", - opts=pulumi.ResourceOptions(provider=google_beta)) - default_firebase_project_project = gcp.firebase.Project("defaultFirebase/projectProject", project=default_project.project_id, - opts=pulumi.ResourceOptions(provider=google_beta)) - basic_web_app = gcp.firebase.WebApp("basicWebApp", - project=default_project.project_id, - display_name="Display Name Basic", - deletion_policy="DELETE", - opts=pulumi.ResourceOptions(provider=google_beta, - depends_on=[default_firebase / project_project])) - basic_web_app_config = gcp.firebase.get_web_app_config_output(web_app_id=basic_web_app.app_id) - default_bucket = gcp.storage.Bucket("defaultBucket", location="US", - opts=pulumi.ResourceOptions(provider=google_beta)) - default_bucket_object = gcp.storage.BucketObject("defaultBucketObject", - bucket=default_bucket.name, - content=pulumi.Output.all(basic_web_app.app_id, basic_web_app_config, basic_web_app_config, (lambda v, def: v if v is not None else def)(basic_web_app_config["database_url"], ""), (lambda v, def: v if v is not None else def)(basic_web_app_config["storage_bucket"], ""), (lambda v, def: v if v is not None else def)(basic_web_app_config["messaging_sender_id"], ""), (lambda v, def: v if v is not None else def)(basic_web_app_config["measurement_id"], "")).apply(lambda app_id, basic_web_app_config, basic_web_app_config1, s, s1, s2, s3: json.dumps({ - "appId": app_id, - "apiKey": basic_web_app_config.api_key, - "authDomain": basic_web_app_config1.auth_domain, - "databaseURL": s, - "storageBucket": s1, - "messagingSenderId": s2, - "measurementId": s3, - })), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import @@ -268,50 +225,7 @@ def __init__(__self__, args: WebAppArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A Google Cloud Firebase web application instance - - To get more information about WebApp, see: - - * [API documentation](https://firebase.google.com/docs/reference/firebase-management/rest/v1beta1/projects.webApps) - * How-to Guides - * [Official Documentation](https://firebase.google.com/) - ## Example Usage - ### Firebase Web App Basic - - ```python - import pulumi - import json - import pulumi_gcp as gcp - - default_project = gcp.organizations.Project("defaultProject", - project_id="tf-test", - org_id="123456789", - opts=pulumi.ResourceOptions(provider=google_beta)) - default_firebase_project_project = gcp.firebase.Project("defaultFirebase/projectProject", project=default_project.project_id, - opts=pulumi.ResourceOptions(provider=google_beta)) - basic_web_app = gcp.firebase.WebApp("basicWebApp", - project=default_project.project_id, - display_name="Display Name Basic", - deletion_policy="DELETE", - opts=pulumi.ResourceOptions(provider=google_beta, - depends_on=[default_firebase / project_project])) - basic_web_app_config = gcp.firebase.get_web_app_config_output(web_app_id=basic_web_app.app_id) - default_bucket = gcp.storage.Bucket("defaultBucket", location="US", - opts=pulumi.ResourceOptions(provider=google_beta)) - default_bucket_object = gcp.storage.BucketObject("defaultBucketObject", - bucket=default_bucket.name, - content=pulumi.Output.all(basic_web_app.app_id, basic_web_app_config, basic_web_app_config, (lambda v, def: v if v is not None else def)(basic_web_app_config["database_url"], ""), (lambda v, def: v if v is not None else def)(basic_web_app_config["storage_bucket"], ""), (lambda v, def: v if v is not None else def)(basic_web_app_config["messaging_sender_id"], ""), (lambda v, def: v if v is not None else def)(basic_web_app_config["measurement_id"], "")).apply(lambda app_id, basic_web_app_config, basic_web_app_config1, s, s1, s2, s3: json.dumps({ - "appId": app_id, - "apiKey": basic_web_app_config.api_key, - "authDomain": basic_web_app_config1.auth_domain, - "databaseURL": s, - "storageBucket": s1, - "messagingSenderId": s2, - "measurementId": s3, - })), - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/firestore/document.py b/sdk/python/pulumi_gcp/firestore/document.py index 4d095e4c3e..e391bdc31f 100644 --- a/sdk/python/pulumi_gcp/firestore/document.py +++ b/sdk/python/pulumi_gcp/firestore/document.py @@ -290,7 +290,7 @@ def __init__(__self__, mydoc = gcp.firestore.Document("mydoc", collection="somenewcollection", - document_id="my-doc", + document_id="my-doc-%{random_suffix}", fields="{\\"something\\":{\\"mapValue\\":{\\"fields\\":{\\"akey\\":{\\"stringValue\\":\\"avalue\\"}}}}}", project="my-project-name") ``` @@ -302,7 +302,7 @@ def __init__(__self__, mydoc = gcp.firestore.Document("mydoc", collection="somenewcollection", - document_id="my-doc", + document_id="my-doc-%{random_suffix}", fields="{\\"something\\":{\\"mapValue\\":{\\"fields\\":{\\"akey\\":{\\"stringValue\\":\\"avalue\\"}}}}}", project="my-project-name") sub_document = gcp.firestore.Document("subDocument", @@ -365,7 +365,7 @@ def __init__(__self__, mydoc = gcp.firestore.Document("mydoc", collection="somenewcollection", - document_id="my-doc", + document_id="my-doc-%{random_suffix}", fields="{\\"something\\":{\\"mapValue\\":{\\"fields\\":{\\"akey\\":{\\"stringValue\\":\\"avalue\\"}}}}}", project="my-project-name") ``` @@ -377,7 +377,7 @@ def __init__(__self__, mydoc = gcp.firestore.Document("mydoc", collection="somenewcollection", - document_id="my-doc", + document_id="my-doc-%{random_suffix}", fields="{\\"something\\":{\\"mapValue\\":{\\"fields\\":{\\"akey\\":{\\"stringValue\\":\\"avalue\\"}}}}}", project="my-project-name") sub_document = gcp.firestore.Document("subDocument", diff --git a/sdk/python/pulumi_gcp/folder/_inputs.py b/sdk/python/pulumi_gcp/folder/_inputs.py index c5e513ed72..36d2cc5875 100644 --- a/sdk/python/pulumi_gcp/folder/_inputs.py +++ b/sdk/python/pulumi_gcp/folder/_inputs.py @@ -113,6 +113,11 @@ def __init__(__self__, *, expression: pulumi.Input[str], title: pulumi.Input[str], description: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] expression: Textual representation of an expression in Common Expression Language syntax. + :param pulumi.Input[str] title: A title for the expression, i.e. a short string describing its purpose. + :param pulumi.Input[str] description: An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + """ pulumi.set(__self__, "expression", expression) pulumi.set(__self__, "title", title) if description is not None: @@ -121,6 +126,9 @@ def __init__(__self__, *, @property @pulumi.getter def expression(self) -> pulumi.Input[str]: + """ + Textual representation of an expression in Common Expression Language syntax. + """ return pulumi.get(self, "expression") @expression.setter @@ -130,6 +138,9 @@ def expression(self, value: pulumi.Input[str]): @property @pulumi.getter def title(self) -> pulumi.Input[str]: + """ + A title for the expression, i.e. a short string describing its purpose. + """ return pulumi.get(self, "title") @title.setter @@ -139,6 +150,9 @@ def title(self, value: pulumi.Input[str]): @property @pulumi.getter def description(self) -> Optional[pulumi.Input[str]]: + """ + An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + """ return pulumi.get(self, "description") @description.setter diff --git a/sdk/python/pulumi_gcp/folder/iam_audit_config.py b/sdk/python/pulumi_gcp/folder/iam_audit_config.py index 67928d4786..0a812e5e5e 100644 --- a/sdk/python/pulumi_gcp/folder/iam_audit_config.py +++ b/sdk/python/pulumi_gcp/folder/iam_audit_config.py @@ -148,141 +148,6 @@ def __init__(__self__, service: Optional[pulumi.Input[str]] = None, __props__=None): """ - Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - - * `folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - * `folder.IAMBinding`: 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 folder are preserved. - * `folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - * `folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `folder.IAMPolicy` **cannot** be used in conjunction with `folder.IAMBinding`, `folder.IAMMember`, or `folder.IamAuditConfig` or they will fight over what your policy should be. - - > **Note:** `folder.IAMBinding` resources **can be** used in conjunction with `folder.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - - ## google\\_folder\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your folder - using this resource. Deleting a `folder.IAMPolicy` removes access - from anyone without permissions on its parent folder/organization. Proceed with caution. - It's not recommended to use `folder.IAMPolicy` with your provider folder - to avoid locking yourself out, and it should generally only be used with folders - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - folder = gcp.folder.IAMPolicy("folder", - folder="folders/1234567", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - folder = gcp.folder.IAMPolicy("folder", - folder="folders/1234567", - policy_data=admin.policy_data) - ``` - - ## google\\_folder\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMBinding("folder", - folder="folders/1234567", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMBinding("folder", - condition=gcp.folder.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - folder="folders/1234567", - members=["user:jane@example.com"], - role="roles/container.admin") - ``` - - ## google\\_folder\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMMember("folder", - folder="folders/1234567", - member="user:jane@example.com", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMMember("folder", - condition=gcp.folder.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - folder="folders/1234567", - member="user:jane@example.com", - role="roles/firebase.admin") - ``` - - ## google\\_folder\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IamAuditConfig("folder", - audit_log_configs=[ - gcp.folder.IamAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.folder.IamAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - folder="folders/1234567", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -336,141 +201,6 @@ def __init__(__self__, args: IamAuditConfigArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - - * `folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - * `folder.IAMBinding`: 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 folder are preserved. - * `folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - * `folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `folder.IAMPolicy` **cannot** be used in conjunction with `folder.IAMBinding`, `folder.IAMMember`, or `folder.IamAuditConfig` or they will fight over what your policy should be. - - > **Note:** `folder.IAMBinding` resources **can be** used in conjunction with `folder.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - - ## google\\_folder\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your folder - using this resource. Deleting a `folder.IAMPolicy` removes access - from anyone without permissions on its parent folder/organization. Proceed with caution. - It's not recommended to use `folder.IAMPolicy` with your provider folder - to avoid locking yourself out, and it should generally only be used with folders - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - folder = gcp.folder.IAMPolicy("folder", - folder="folders/1234567", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - folder = gcp.folder.IAMPolicy("folder", - folder="folders/1234567", - policy_data=admin.policy_data) - ``` - - ## google\\_folder\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMBinding("folder", - folder="folders/1234567", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMBinding("folder", - condition=gcp.folder.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - folder="folders/1234567", - members=["user:jane@example.com"], - role="roles/container.admin") - ``` - - ## google\\_folder\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMMember("folder", - folder="folders/1234567", - member="user:jane@example.com", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMMember("folder", - condition=gcp.folder.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - folder="folders/1234567", - member="user:jane@example.com", - role="roles/firebase.admin") - ``` - - ## google\\_folder\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IamAuditConfig("folder", - audit_log_configs=[ - gcp.folder.IamAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.folder.IamAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - folder="folders/1234567", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/folder/iam_binding.py b/sdk/python/pulumi_gcp/folder/iam_binding.py index 3875da9fed..3b7c29e71a 100644 --- a/sdk/python/pulumi_gcp/folder/iam_binding.py +++ b/sdk/python/pulumi_gcp/folder/iam_binding.py @@ -23,16 +23,11 @@ def __init__(__self__, *, """ The set of arguments for constructing a IAMBinding resource. :param pulumi.Input[str] folder: The resource name of the folder the policy is attached to. Its format is folders/{folder_id}. - :param pulumi.Input[Sequence[pulumi.Input[str]]] members: An array of identities that will be granted the privilege in the `role`. - Each entry can have one of the following values: - * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding :param pulumi.Input[str] role: The role that should be applied. Only one `folder.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. + :param pulumi.Input['IAMBindingConditionArgs'] condition: An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. """ pulumi.set(__self__, "folder", folder) pulumi.set(__self__, "members", members) @@ -55,15 +50,6 @@ def folder(self, value: pulumi.Input[str]): @property @pulumi.getter def members(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]: - """ - An array of identities that will be granted the privilege in the `role`. - Each entry can have one of the following values: - * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - """ return pulumi.get(self, "members") @members.setter @@ -76,7 +62,7 @@ def role(self) -> pulumi.Input[str]: """ The role that should be applied. Only one `folder.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. """ return pulumi.get(self, "role") @@ -87,6 +73,10 @@ def role(self, value: pulumi.Input[str]): @property @pulumi.getter def condition(self) -> Optional[pulumi.Input['IAMBindingConditionArgs']]: + """ + An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. + """ return pulumi.get(self, "condition") @condition.setter @@ -104,18 +94,13 @@ def __init__(__self__, *, role: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering IAMBinding resources. + :param pulumi.Input['IAMBindingConditionArgs'] condition: An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. :param pulumi.Input[str] etag: (Computed) The etag of the folder's IAM policy. :param pulumi.Input[str] folder: The resource name of the folder the policy is attached to. Its format is folders/{folder_id}. - :param pulumi.Input[Sequence[pulumi.Input[str]]] members: An array of identities that will be granted the privilege in the `role`. - Each entry can have one of the following values: - * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding :param pulumi.Input[str] role: The role that should be applied. Only one `folder.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. """ if condition is not None: pulumi.set(__self__, "condition", condition) @@ -131,6 +116,10 @@ def __init__(__self__, *, @property @pulumi.getter def condition(self) -> Optional[pulumi.Input['IAMBindingConditionArgs']]: + """ + An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. + """ return pulumi.get(self, "condition") @condition.setter @@ -164,15 +153,6 @@ def folder(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def members(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: - """ - An array of identities that will be granted the privilege in the `role`. - Each entry can have one of the following values: - * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - """ return pulumi.get(self, "members") @members.setter @@ -185,7 +165,7 @@ def role(self) -> Optional[pulumi.Input[str]]: """ The role that should be applied. Only one `folder.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. """ return pulumi.get(self, "role") @@ -205,59 +185,54 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Allows creation and management of a single binding within IAM policy for - an existing Google Cloud Platform folder. + ## Import - > **Note:** This resource _must not_ be used in conjunction with - `folder.IAMPolicy` or they will fight over what your policy - should be. + IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. - > **Note:** On create, this resource will overwrite members of any existing roles. - Use `pulumi import` and inspect the output to ensure - your existing members are preserved. + This member resource can be imported using the `folder`, role, and member e.g. - ## Example Usage + ```sh + $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder roles/viewer user:foo@example.com" + ``` + + IAM binding imports use space-delimited identifiers; the resource in question and the role. - ```python - import pulumi - import pulumi_gcp as gcp + This binding resource can be imported using the `folder` and role, e.g. - department1 = gcp.organizations.Folder("department1", - display_name="Department 1", - parent="organizations/1234567") - admin = gcp.folder.IAMBinding("admin", - folder=department1.name, - role="roles/editor", - members=["user:alice@gmail.com"]) + ```sh + $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder roles/viewer" ``` - ## Import + IAM policy imports use the identifier of the resource in question. - IAM binding imports use space-delimited identifiers; first the resource in question and then the role. + This policy resource can be imported using the `folder`. - These bindings can be imported using the `folder` and role, e.g. + ```sh + $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder folder + ``` + + IAM audit config imports use the identifier of the resource in question and the service, e.g. ```sh - $ pulumi import gcp:folder/iAMBinding:IAMBinding viewer "folder-name roles/viewer" + $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder foo.googleapis.com" ``` - -> **Custom Roles**If you're importing a IAM binding with a custom role, make sure to use the + -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the + + full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure - full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. + ```sh + $ pulumi import gcp:folder/iAMBinding:IAMBinding to include the title of condition, e.g. `google_folder_iam_binding.my_folder "folder roles/{{role_id}} condition-title"` + ``` :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[pulumi.InputType['IAMBindingConditionArgs']] condition: An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. :param pulumi.Input[str] folder: The resource name of the folder the policy is attached to. Its format is folders/{folder_id}. - :param pulumi.Input[Sequence[pulumi.Input[str]]] members: An array of identities that will be granted the privilege in the `role`. - Each entry can have one of the following values: - * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding :param pulumi.Input[str] role: The role that should be applied. Only one `folder.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. """ ... @overload @@ -266,45 +241,45 @@ def __init__(__self__, args: IAMBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Allows creation and management of a single binding within IAM policy for - an existing Google Cloud Platform folder. + ## Import - > **Note:** This resource _must not_ be used in conjunction with - `folder.IAMPolicy` or they will fight over what your policy - should be. + IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. - > **Note:** On create, this resource will overwrite members of any existing roles. - Use `pulumi import` and inspect the output to ensure - your existing members are preserved. + This member resource can be imported using the `folder`, role, and member e.g. - ## Example Usage + ```sh + $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder roles/viewer user:foo@example.com" + ``` - ```python - import pulumi - import pulumi_gcp as gcp + IAM binding imports use space-delimited identifiers; the resource in question and the role. - department1 = gcp.organizations.Folder("department1", - display_name="Department 1", - parent="organizations/1234567") - admin = gcp.folder.IAMBinding("admin", - folder=department1.name, - role="roles/editor", - members=["user:alice@gmail.com"]) + This binding resource can be imported using the `folder` and role, e.g. + + ```sh + $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder roles/viewer" ``` - ## Import + IAM policy imports use the identifier of the resource in question. + + This policy resource can be imported using the `folder`. - IAM binding imports use space-delimited identifiers; first the resource in question and then the role. + ```sh + $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder folder + ``` - These bindings can be imported using the `folder` and role, e.g. + IAM audit config imports use the identifier of the resource in question and the service, e.g. ```sh - $ pulumi import gcp:folder/iAMBinding:IAMBinding viewer "folder-name roles/viewer" + $ pulumi import gcp:folder/iAMBinding:IAMBinding my_folder "folder foo.googleapis.com" ``` - -> **Custom Roles**If you're importing a IAM binding with a custom role, make sure to use the + -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the + + full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure - full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. + ```sh + $ pulumi import gcp:folder/iAMBinding:IAMBinding to include the title of condition, e.g. `google_folder_iam_binding.my_folder "folder roles/{{role_id}} condition-title"` + ``` :param str resource_name: The name of the resource. :param IAMBindingArgs args: The arguments to use to populate this resource's properties. @@ -367,18 +342,13 @@ 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[pulumi.InputType['IAMBindingConditionArgs']] condition: An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. :param pulumi.Input[str] etag: (Computed) The etag of the folder's IAM policy. :param pulumi.Input[str] folder: The resource name of the folder the policy is attached to. Its format is folders/{folder_id}. - :param pulumi.Input[Sequence[pulumi.Input[str]]] members: An array of identities that will be granted the privilege in the `role`. - Each entry can have one of the following values: - * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding :param pulumi.Input[str] role: The role that should be applied. Only one `folder.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -394,6 +364,10 @@ def get(resource_name: str, @property @pulumi.getter def condition(self) -> pulumi.Output[Optional['outputs.IAMBindingCondition']]: + """ + An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. + """ return pulumi.get(self, "condition") @property @@ -415,15 +389,6 @@ def folder(self) -> pulumi.Output[str]: @property @pulumi.getter def members(self) -> pulumi.Output[Sequence[str]]: - """ - An array of identities that will be granted the privilege in the `role`. - Each entry can have one of the following values: - * **user:{emailid}**: An email address that is associated with a specific Google account. For example, alice@gmail.com. - * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. - * For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - """ return pulumi.get(self, "members") @property @@ -432,7 +397,7 @@ def role(self) -> pulumi.Output[str]: """ The role that should be applied. Only one `folder.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. """ return pulumi.get(self, "role") diff --git a/sdk/python/pulumi_gcp/folder/iam_member.py b/sdk/python/pulumi_gcp/folder/iam_member.py index 4832add54c..6d17ffe0c0 100644 --- a/sdk/python/pulumi_gcp/folder/iam_member.py +++ b/sdk/python/pulumi_gcp/folder/iam_member.py @@ -185,141 +185,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - - * `folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - * `folder.IAMBinding`: 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 folder are preserved. - * `folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - * `folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `folder.IAMPolicy` **cannot** be used in conjunction with `folder.IAMBinding`, `folder.IAMMember`, or `folder.IamAuditConfig` or they will fight over what your policy should be. - - > **Note:** `folder.IAMBinding` resources **can be** used in conjunction with `folder.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - - ## google\\_folder\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your folder - using this resource. Deleting a `folder.IAMPolicy` removes access - from anyone without permissions on its parent folder/organization. Proceed with caution. - It's not recommended to use `folder.IAMPolicy` with your provider folder - to avoid locking yourself out, and it should generally only be used with folders - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - folder = gcp.folder.IAMPolicy("folder", - folder="folders/1234567", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - folder = gcp.folder.IAMPolicy("folder", - folder="folders/1234567", - policy_data=admin.policy_data) - ``` - - ## google\\_folder\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMBinding("folder", - folder="folders/1234567", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMBinding("folder", - condition=gcp.folder.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - folder="folders/1234567", - members=["user:jane@example.com"], - role="roles/container.admin") - ``` - - ## google\\_folder\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMMember("folder", - folder="folders/1234567", - member="user:jane@example.com", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMMember("folder", - condition=gcp.folder.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - folder="folders/1234567", - member="user:jane@example.com", - role="roles/firebase.admin") - ``` - - ## google\\_folder\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IamAuditConfig("folder", - audit_log_configs=[ - gcp.folder.IamAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.folder.IamAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - folder="folders/1234567", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -376,141 +241,6 @@ def __init__(__self__, args: IAMMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - - * `folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - * `folder.IAMBinding`: 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 folder are preserved. - * `folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - * `folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `folder.IAMPolicy` **cannot** be used in conjunction with `folder.IAMBinding`, `folder.IAMMember`, or `folder.IamAuditConfig` or they will fight over what your policy should be. - - > **Note:** `folder.IAMBinding` resources **can be** used in conjunction with `folder.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - - ## google\\_folder\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your folder - using this resource. Deleting a `folder.IAMPolicy` removes access - from anyone without permissions on its parent folder/organization. Proceed with caution. - It's not recommended to use `folder.IAMPolicy` with your provider folder - to avoid locking yourself out, and it should generally only be used with folders - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - folder = gcp.folder.IAMPolicy("folder", - folder="folders/1234567", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - folder = gcp.folder.IAMPolicy("folder", - folder="folders/1234567", - policy_data=admin.policy_data) - ``` - - ## google\\_folder\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMBinding("folder", - folder="folders/1234567", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMBinding("folder", - condition=gcp.folder.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - folder="folders/1234567", - members=["user:jane@example.com"], - role="roles/container.admin") - ``` - - ## google\\_folder\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMMember("folder", - folder="folders/1234567", - member="user:jane@example.com", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMMember("folder", - condition=gcp.folder.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - folder="folders/1234567", - member="user:jane@example.com", - role="roles/firebase.admin") - ``` - - ## google\\_folder\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IamAuditConfig("folder", - audit_log_configs=[ - gcp.folder.IamAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.folder.IamAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - folder="folders/1234567", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/folder/iam_policy.py b/sdk/python/pulumi_gcp/folder/iam_policy.py index a59d018e6a..efa02cb58c 100644 --- a/sdk/python/pulumi_gcp/folder/iam_policy.py +++ b/sdk/python/pulumi_gcp/folder/iam_policy.py @@ -122,141 +122,6 @@ def __init__(__self__, policy_data: Optional[pulumi.Input[str]] = None, __props__=None): """ - Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - - * `folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - * `folder.IAMBinding`: 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 folder are preserved. - * `folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - * `folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `folder.IAMPolicy` **cannot** be used in conjunction with `folder.IAMBinding`, `folder.IAMMember`, or `folder.IamAuditConfig` or they will fight over what your policy should be. - - > **Note:** `folder.IAMBinding` resources **can be** used in conjunction with `folder.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - - ## google\\_folder\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your folder - using this resource. Deleting a `folder.IAMPolicy` removes access - from anyone without permissions on its parent folder/organization. Proceed with caution. - It's not recommended to use `folder.IAMPolicy` with your provider folder - to avoid locking yourself out, and it should generally only be used with folders - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - folder = gcp.folder.IAMPolicy("folder", - folder="folders/1234567", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - folder = gcp.folder.IAMPolicy("folder", - folder="folders/1234567", - policy_data=admin.policy_data) - ``` - - ## google\\_folder\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMBinding("folder", - folder="folders/1234567", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMBinding("folder", - condition=gcp.folder.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - folder="folders/1234567", - members=["user:jane@example.com"], - role="roles/container.admin") - ``` - - ## google\\_folder\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMMember("folder", - folder="folders/1234567", - member="user:jane@example.com", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMMember("folder", - condition=gcp.folder.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - folder="folders/1234567", - member="user:jane@example.com", - role="roles/firebase.admin") - ``` - - ## google\\_folder\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IamAuditConfig("folder", - audit_log_configs=[ - gcp.folder.IamAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.folder.IamAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - folder="folders/1234567", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -311,141 +176,6 @@ def __init__(__self__, args: IAMPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Four different resources help you manage your IAM policy for a folder. Each of these resources serves a different use case: - - * `folder.IAMPolicy`: Authoritative. Sets the IAM policy for the folder and replaces any existing policy already attached. - * `folder.IAMBinding`: 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 folder are preserved. - * `folder.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the folder are preserved. - * `folder.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `folder.IAMPolicy` **cannot** be used in conjunction with `folder.IAMBinding`, `folder.IAMMember`, or `folder.IamAuditConfig` or they will fight over what your policy should be. - - > **Note:** `folder.IAMBinding` resources **can be** used in conjunction with `folder.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning a 400 error code so please review these if you encounter errors with this resource. - - ## google\\_folder\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your folder - using this resource. Deleting a `folder.IAMPolicy` removes access - from anyone without permissions on its parent folder/organization. Proceed with caution. - It's not recommended to use `folder.IAMPolicy` with your provider folder - to avoid locking yourself out, and it should generally only be used with folders - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - folder = gcp.folder.IAMPolicy("folder", - folder="folders/1234567", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - folder = gcp.folder.IAMPolicy("folder", - folder="folders/1234567", - policy_data=admin.policy_data) - ``` - - ## google\\_folder\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMBinding("folder", - folder="folders/1234567", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMBinding("folder", - condition=gcp.folder.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - folder="folders/1234567", - members=["user:jane@example.com"], - role="roles/container.admin") - ``` - - ## google\\_folder\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMMember("folder", - folder="folders/1234567", - member="user:jane@example.com", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IAMMember("folder", - condition=gcp.folder.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - folder="folders/1234567", - member="user:jane@example.com", - role="roles/firebase.admin") - ``` - - ## google\\_folder\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - folder = gcp.folder.IamAuditConfig("folder", - audit_log_configs=[ - gcp.folder.IamAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.folder.IamAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - folder="folders/1234567", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/folder/outputs.py b/sdk/python/pulumi_gcp/folder/outputs.py index caf1e56833..fa2de51515 100644 --- a/sdk/python/pulumi_gcp/folder/outputs.py +++ b/sdk/python/pulumi_gcp/folder/outputs.py @@ -130,6 +130,11 @@ def __init__(__self__, *, expression: str, title: str, description: Optional[str] = None): + """ + :param str expression: Textual representation of an expression in Common Expression Language syntax. + :param str title: A title for the expression, i.e. a short string describing its purpose. + :param str description: An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + """ pulumi.set(__self__, "expression", expression) pulumi.set(__self__, "title", title) if description is not None: @@ -138,16 +143,25 @@ def __init__(__self__, *, @property @pulumi.getter def expression(self) -> str: + """ + Textual representation of an expression in Common Expression Language syntax. + """ return pulumi.get(self, "expression") @property @pulumi.getter def title(self) -> str: + """ + A title for the expression, i.e. a short string describing its purpose. + """ return pulumi.get(self, "title") @property @pulumi.getter def description(self) -> Optional[str]: + """ + An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + """ return pulumi.get(self, "description") diff --git a/sdk/python/pulumi_gcp/healthcare/dataset_iam_binding.py b/sdk/python/pulumi_gcp/healthcare/dataset_iam_binding.py index 9b6e147cb1..c609a92fb3 100644 --- a/sdk/python/pulumi_gcp/healthcare/dataset_iam_binding.py +++ b/sdk/python/pulumi_gcp/healthcare/dataset_iam_binding.py @@ -185,55 +185,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - - * `healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - * `healthcare.DatasetIamBinding`: 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 dataset are preserved. - * `healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - - > **Note:** `healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `healthcare.DatasetIamBinding` and `healthcare.DatasetIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.DatasetIamBinding` resources **can be** used in conjunction with `healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_dataset\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - dataset = gcp.healthcare.DatasetIamPolicy("dataset", - dataset_id="your-dataset-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_dataset\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - dataset = gcp.healthcare.DatasetIamBinding("dataset", - dataset_id="your-dataset-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_dataset\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - dataset = gcp.healthcare.DatasetIamMember("dataset", - dataset_id="your-dataset-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -281,55 +232,6 @@ def __init__(__self__, args: DatasetIamBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - - * `healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - * `healthcare.DatasetIamBinding`: 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 dataset are preserved. - * `healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - - > **Note:** `healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `healthcare.DatasetIamBinding` and `healthcare.DatasetIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.DatasetIamBinding` resources **can be** used in conjunction with `healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_dataset\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - dataset = gcp.healthcare.DatasetIamPolicy("dataset", - dataset_id="your-dataset-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_dataset\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - dataset = gcp.healthcare.DatasetIamBinding("dataset", - dataset_id="your-dataset-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_dataset\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - dataset = gcp.healthcare.DatasetIamMember("dataset", - dataset_id="your-dataset-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/healthcare/dataset_iam_member.py b/sdk/python/pulumi_gcp/healthcare/dataset_iam_member.py index 9078e36c29..bed63bcdc9 100644 --- a/sdk/python/pulumi_gcp/healthcare/dataset_iam_member.py +++ b/sdk/python/pulumi_gcp/healthcare/dataset_iam_member.py @@ -185,55 +185,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - - * `healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - * `healthcare.DatasetIamBinding`: 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 dataset are preserved. - * `healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - - > **Note:** `healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `healthcare.DatasetIamBinding` and `healthcare.DatasetIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.DatasetIamBinding` resources **can be** used in conjunction with `healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_dataset\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - dataset = gcp.healthcare.DatasetIamPolicy("dataset", - dataset_id="your-dataset-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_dataset\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - dataset = gcp.healthcare.DatasetIamBinding("dataset", - dataset_id="your-dataset-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_dataset\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - dataset = gcp.healthcare.DatasetIamMember("dataset", - dataset_id="your-dataset-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -281,55 +232,6 @@ def __init__(__self__, args: DatasetIamMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - - * `healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - * `healthcare.DatasetIamBinding`: 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 dataset are preserved. - * `healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - - > **Note:** `healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `healthcare.DatasetIamBinding` and `healthcare.DatasetIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.DatasetIamBinding` resources **can be** used in conjunction with `healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_dataset\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - dataset = gcp.healthcare.DatasetIamPolicy("dataset", - dataset_id="your-dataset-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_dataset\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - dataset = gcp.healthcare.DatasetIamBinding("dataset", - dataset_id="your-dataset-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_dataset\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - dataset = gcp.healthcare.DatasetIamMember("dataset", - dataset_id="your-dataset-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/healthcare/dataset_iam_policy.py b/sdk/python/pulumi_gcp/healthcare/dataset_iam_policy.py index 3f0dc3245c..83337fa592 100644 --- a/sdk/python/pulumi_gcp/healthcare/dataset_iam_policy.py +++ b/sdk/python/pulumi_gcp/healthcare/dataset_iam_policy.py @@ -130,55 +130,6 @@ def __init__(__self__, policy_data: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - - * `healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - * `healthcare.DatasetIamBinding`: 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 dataset are preserved. - * `healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - - > **Note:** `healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `healthcare.DatasetIamBinding` and `healthcare.DatasetIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.DatasetIamBinding` resources **can be** used in conjunction with `healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_dataset\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - dataset = gcp.healthcare.DatasetIamPolicy("dataset", - dataset_id="your-dataset-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_dataset\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - dataset = gcp.healthcare.DatasetIamBinding("dataset", - dataset_id="your-dataset-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_dataset\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - dataset = gcp.healthcare.DatasetIamMember("dataset", - dataset_id="your-dataset-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -225,55 +176,6 @@ def __init__(__self__, args: DatasetIamPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Healthcare dataset. Each of these resources serves a different use case: - - * `healthcare.DatasetIamPolicy`: Authoritative. Sets the IAM policy for the dataset and replaces any existing policy already attached. - * `healthcare.DatasetIamBinding`: 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 dataset are preserved. - * `healthcare.DatasetIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the dataset are preserved. - - > **Note:** `healthcare.DatasetIamPolicy` **cannot** be used in conjunction with `healthcare.DatasetIamBinding` and `healthcare.DatasetIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.DatasetIamBinding` resources **can be** used in conjunction with `healthcare.DatasetIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_dataset\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - dataset = gcp.healthcare.DatasetIamPolicy("dataset", - dataset_id="your-dataset-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_dataset\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - dataset = gcp.healthcare.DatasetIamBinding("dataset", - dataset_id="your-dataset-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_dataset\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - dataset = gcp.healthcare.DatasetIamMember("dataset", - dataset_id="your-dataset-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/healthcare/dicom_store.py b/sdk/python/pulumi_gcp/healthcare/dicom_store.py index 3109644ed9..e54e7e5302 100644 --- a/sdk/python/pulumi_gcp/healthcare/dicom_store.py +++ b/sdk/python/pulumi_gcp/healthcare/dicom_store.py @@ -37,9 +37,9 @@ def __init__(__self__, *, ** Changing this property may recreate the Dicom store (removing all data) ** :param pulumi.Input['DicomStoreNotificationConfigArgs'] notification_config: A nested object resource Structure is documented below. - :param pulumi.Input[Sequence[pulumi.Input['DicomStoreStreamConfigArgs']]] stream_configs: To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input['DicomStoreStreamConfigArgs']]] stream_configs: To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + tables in a BigQuery dataset. """ pulumi.set(__self__, "dataset", dataset) if labels is not None: @@ -113,9 +113,9 @@ def notification_config(self, value: Optional[pulumi.Input['DicomStoreNotificati @pulumi.getter(name="streamConfigs") def stream_configs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['DicomStoreStreamConfigArgs']]]]: """ - To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - Structure is documented below. + To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + tables in a BigQuery dataset. """ return pulumi.get(self, "stream_configs") @@ -150,9 +150,9 @@ def __init__(__self__, *, :param pulumi.Input['DicomStoreNotificationConfigArgs'] notification_config: A nested object resource Structure is documented below. :param pulumi.Input[str] self_link: The fully qualified name of this dataset - :param pulumi.Input[Sequence[pulumi.Input['DicomStoreStreamConfigArgs']]] stream_configs: To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input['DicomStoreStreamConfigArgs']]] stream_configs: To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + tables in a BigQuery dataset. """ if dataset is not None: pulumi.set(__self__, "dataset", dataset) @@ -241,9 +241,9 @@ def self_link(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="streamConfigs") def stream_configs(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['DicomStoreStreamConfigArgs']]]]: """ - To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - Structure is documented below. + To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + tables in a BigQuery dataset. """ return pulumi.get(self, "stream_configs") @@ -356,9 +356,9 @@ def __init__(__self__, ** Changing this property may recreate the Dicom store (removing all data) ** :param pulumi.Input[pulumi.InputType['DicomStoreNotificationConfigArgs']] notification_config: A nested object resource Structure is documented below. - :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['DicomStoreStreamConfigArgs']]]] stream_configs: To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['DicomStoreStreamConfigArgs']]]] stream_configs: To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + tables in a BigQuery dataset. """ ... @overload @@ -518,9 +518,9 @@ def get(resource_name: str, :param pulumi.Input[pulumi.InputType['DicomStoreNotificationConfigArgs']] notification_config: A nested object resource Structure is documented below. :param pulumi.Input[str] self_link: The fully qualified name of this dataset - :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['DicomStoreStreamConfigArgs']]]] stream_configs: To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['DicomStoreStreamConfigArgs']]]] stream_configs: To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + tables in a BigQuery dataset. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -588,9 +588,9 @@ def self_link(self) -> pulumi.Output[str]: @pulumi.getter(name="streamConfigs") def stream_configs(self) -> pulumi.Output[Optional[Sequence['outputs.DicomStoreStreamConfig']]]: """ - To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. - streamConfigs is an array, so you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery tables in a BigQuery dataset. - Structure is documented below. + To enable streaming to BigQuery, configure the streamConfigs object in your DICOM store. streamConfigs is an array, so + you can specify multiple BigQuery destinations. You can stream metadata from a single DICOM store to up to five BigQuery + tables in a BigQuery dataset. """ return pulumi.get(self, "stream_configs") diff --git a/sdk/python/pulumi_gcp/healthcare/dicom_store_iam_binding.py b/sdk/python/pulumi_gcp/healthcare/dicom_store_iam_binding.py index 10d124eba0..0c67732228 100644 --- a/sdk/python/pulumi_gcp/healthcare/dicom_store_iam_binding.py +++ b/sdk/python/pulumi_gcp/healthcare/dicom_store_iam_binding.py @@ -185,55 +185,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - - * `healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - * `healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - * `healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - - > **Note:** `healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `healthcare.DicomStoreIamBinding` and `healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - dicom_store = gcp.healthcare.DicomStoreIamPolicy("dicomStore", - dicom_store_id="your-dicom-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - dicom_store = gcp.healthcare.DicomStoreIamBinding("dicomStore", - dicom_store_id="your-dicom-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - dicom_store = gcp.healthcare.DicomStoreIamMember("dicomStore", - dicom_store_id="your-dicom-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -277,55 +228,6 @@ def __init__(__self__, args: DicomStoreIamBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - - * `healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - * `healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - * `healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - - > **Note:** `healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `healthcare.DicomStoreIamBinding` and `healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - dicom_store = gcp.healthcare.DicomStoreIamPolicy("dicomStore", - dicom_store_id="your-dicom-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - dicom_store = gcp.healthcare.DicomStoreIamBinding("dicomStore", - dicom_store_id="your-dicom-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - dicom_store = gcp.healthcare.DicomStoreIamMember("dicomStore", - dicom_store_id="your-dicom-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/healthcare/dicom_store_iam_member.py b/sdk/python/pulumi_gcp/healthcare/dicom_store_iam_member.py index 93e37040ee..8ad56db366 100644 --- a/sdk/python/pulumi_gcp/healthcare/dicom_store_iam_member.py +++ b/sdk/python/pulumi_gcp/healthcare/dicom_store_iam_member.py @@ -185,55 +185,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - - * `healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - * `healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - * `healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - - > **Note:** `healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `healthcare.DicomStoreIamBinding` and `healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - dicom_store = gcp.healthcare.DicomStoreIamPolicy("dicomStore", - dicom_store_id="your-dicom-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - dicom_store = gcp.healthcare.DicomStoreIamBinding("dicomStore", - dicom_store_id="your-dicom-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - dicom_store = gcp.healthcare.DicomStoreIamMember("dicomStore", - dicom_store_id="your-dicom-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -277,55 +228,6 @@ def __init__(__self__, args: DicomStoreIamMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - - * `healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - * `healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - * `healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - - > **Note:** `healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `healthcare.DicomStoreIamBinding` and `healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - dicom_store = gcp.healthcare.DicomStoreIamPolicy("dicomStore", - dicom_store_id="your-dicom-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - dicom_store = gcp.healthcare.DicomStoreIamBinding("dicomStore", - dicom_store_id="your-dicom-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - dicom_store = gcp.healthcare.DicomStoreIamMember("dicomStore", - dicom_store_id="your-dicom-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/healthcare/dicom_store_iam_policy.py b/sdk/python/pulumi_gcp/healthcare/dicom_store_iam_policy.py index ffdea69bce..9ea87f2a03 100644 --- a/sdk/python/pulumi_gcp/healthcare/dicom_store_iam_policy.py +++ b/sdk/python/pulumi_gcp/healthcare/dicom_store_iam_policy.py @@ -130,55 +130,6 @@ def __init__(__self__, policy_data: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - - * `healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - * `healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - * `healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - - > **Note:** `healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `healthcare.DicomStoreIamBinding` and `healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - dicom_store = gcp.healthcare.DicomStoreIamPolicy("dicomStore", - dicom_store_id="your-dicom-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - dicom_store = gcp.healthcare.DicomStoreIamBinding("dicomStore", - dicom_store_id="your-dicom-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - dicom_store = gcp.healthcare.DicomStoreIamMember("dicomStore", - dicom_store_id="your-dicom-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -221,55 +172,6 @@ def __init__(__self__, args: DicomStoreIamPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Healthcare DICOM store. Each of these resources serves a different use case: - - * `healthcare.DicomStoreIamPolicy`: Authoritative. Sets the IAM policy for the DICOM store and replaces any existing policy already attached. - * `healthcare.DicomStoreIamBinding`: 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 DICOM store are preserved. - * `healthcare.DicomStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the DICOM store are preserved. - - > **Note:** `healthcare.DicomStoreIamPolicy` **cannot** be used in conjunction with `healthcare.DicomStoreIamBinding` and `healthcare.DicomStoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.DicomStoreIamBinding` resources **can be** used in conjunction with `healthcare.DicomStoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - dicom_store = gcp.healthcare.DicomStoreIamPolicy("dicomStore", - dicom_store_id="your-dicom-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - dicom_store = gcp.healthcare.DicomStoreIamBinding("dicomStore", - dicom_store_id="your-dicom-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_dicom\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - dicom_store = gcp.healthcare.DicomStoreIamMember("dicomStore", - dicom_store_id="your-dicom-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/healthcare/fhir_store.py b/sdk/python/pulumi_gcp/healthcare/fhir_store.py index a34a4f71e4..88ec98b407 100644 --- a/sdk/python/pulumi_gcp/healthcare/fhir_store.py +++ b/sdk/python/pulumi_gcp/healthcare/fhir_store.py @@ -604,6 +604,15 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp + project = gcp.organizations.get_project() + bigquery_editor = gcp.projects.IAMMember("bigqueryEditor", + project=project.project_id, + role="roles/bigquery.dataEditor", + member=f"serviceAccount:service-{project.number}@gcp-sa-healthcare.iam.gserviceaccount.com") + bigquery_job_user = gcp.projects.IAMMember("bigqueryJobUser", + project=project.project_id, + role="roles/bigquery.jobUser", + member=f"serviceAccount:service-{project.number}@gcp-sa-healthcare.iam.gserviceaccount.com") dataset = gcp.healthcare.Dataset("dataset", location="us-central1") bq_dataset = gcp.bigquery.Dataset("bqDataset", dataset_id="bq_example_dataset", @@ -629,7 +638,11 @@ def __init__(__self__, recursive_structure_depth=3, ), ), - )]) + )], + opts=pulumi.ResourceOptions(depends_on=[ + bigquery_editor, + bigquery_job_user, + ])) topic = gcp.pubsub.Topic("topic") ``` ### Healthcare Fhir Store Notification Config @@ -765,6 +778,15 @@ def __init__(__self__, import pulumi import pulumi_gcp as gcp + project = gcp.organizations.get_project() + bigquery_editor = gcp.projects.IAMMember("bigqueryEditor", + project=project.project_id, + role="roles/bigquery.dataEditor", + member=f"serviceAccount:service-{project.number}@gcp-sa-healthcare.iam.gserviceaccount.com") + bigquery_job_user = gcp.projects.IAMMember("bigqueryJobUser", + project=project.project_id, + role="roles/bigquery.jobUser", + member=f"serviceAccount:service-{project.number}@gcp-sa-healthcare.iam.gserviceaccount.com") dataset = gcp.healthcare.Dataset("dataset", location="us-central1") bq_dataset = gcp.bigquery.Dataset("bqDataset", dataset_id="bq_example_dataset", @@ -790,7 +812,11 @@ def __init__(__self__, recursive_structure_depth=3, ), ), - )]) + )], + opts=pulumi.ResourceOptions(depends_on=[ + bigquery_editor, + bigquery_job_user, + ])) topic = gcp.pubsub.Topic("topic") ``` ### Healthcare Fhir Store Notification Config diff --git a/sdk/python/pulumi_gcp/healthcare/fhir_store_iam_binding.py b/sdk/python/pulumi_gcp/healthcare/fhir_store_iam_binding.py index cc5fc6cff3..0a07d99a28 100644 --- a/sdk/python/pulumi_gcp/healthcare/fhir_store_iam_binding.py +++ b/sdk/python/pulumi_gcp/healthcare/fhir_store_iam_binding.py @@ -185,55 +185,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - - * `healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - * `healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - * `healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - - > **Note:** `healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `healthcare.FhirStoreIamBinding` and `healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - fhir_store = gcp.healthcare.FhirStoreIamPolicy("fhirStore", - fhir_store_id="your-fhir-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - fhir_store = gcp.healthcare.FhirStoreIamBinding("fhirStore", - fhir_store_id="your-fhir-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - fhir_store = gcp.healthcare.FhirStoreIamMember("fhirStore", - fhir_store_id="your-fhir-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -277,55 +228,6 @@ def __init__(__self__, args: FhirStoreIamBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - - * `healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - * `healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - * `healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - - > **Note:** `healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `healthcare.FhirStoreIamBinding` and `healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - fhir_store = gcp.healthcare.FhirStoreIamPolicy("fhirStore", - fhir_store_id="your-fhir-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - fhir_store = gcp.healthcare.FhirStoreIamBinding("fhirStore", - fhir_store_id="your-fhir-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - fhir_store = gcp.healthcare.FhirStoreIamMember("fhirStore", - fhir_store_id="your-fhir-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/healthcare/fhir_store_iam_member.py b/sdk/python/pulumi_gcp/healthcare/fhir_store_iam_member.py index 1051496d83..1846d9bb9d 100644 --- a/sdk/python/pulumi_gcp/healthcare/fhir_store_iam_member.py +++ b/sdk/python/pulumi_gcp/healthcare/fhir_store_iam_member.py @@ -185,55 +185,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - - * `healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - * `healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - * `healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - - > **Note:** `healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `healthcare.FhirStoreIamBinding` and `healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - fhir_store = gcp.healthcare.FhirStoreIamPolicy("fhirStore", - fhir_store_id="your-fhir-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - fhir_store = gcp.healthcare.FhirStoreIamBinding("fhirStore", - fhir_store_id="your-fhir-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - fhir_store = gcp.healthcare.FhirStoreIamMember("fhirStore", - fhir_store_id="your-fhir-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -277,55 +228,6 @@ def __init__(__self__, args: FhirStoreIamMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - - * `healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - * `healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - * `healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - - > **Note:** `healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `healthcare.FhirStoreIamBinding` and `healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - fhir_store = gcp.healthcare.FhirStoreIamPolicy("fhirStore", - fhir_store_id="your-fhir-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - fhir_store = gcp.healthcare.FhirStoreIamBinding("fhirStore", - fhir_store_id="your-fhir-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - fhir_store = gcp.healthcare.FhirStoreIamMember("fhirStore", - fhir_store_id="your-fhir-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/healthcare/fhir_store_iam_policy.py b/sdk/python/pulumi_gcp/healthcare/fhir_store_iam_policy.py index c84bee1f68..3afa16bd90 100644 --- a/sdk/python/pulumi_gcp/healthcare/fhir_store_iam_policy.py +++ b/sdk/python/pulumi_gcp/healthcare/fhir_store_iam_policy.py @@ -130,55 +130,6 @@ def __init__(__self__, policy_data: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - - * `healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - * `healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - * `healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - - > **Note:** `healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `healthcare.FhirStoreIamBinding` and `healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - fhir_store = gcp.healthcare.FhirStoreIamPolicy("fhirStore", - fhir_store_id="your-fhir-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - fhir_store = gcp.healthcare.FhirStoreIamBinding("fhirStore", - fhir_store_id="your-fhir-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - fhir_store = gcp.healthcare.FhirStoreIamMember("fhirStore", - fhir_store_id="your-fhir-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -221,55 +172,6 @@ def __init__(__self__, args: FhirStoreIamPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Healthcare FHIR store. Each of these resources serves a different use case: - - * `healthcare.FhirStoreIamPolicy`: Authoritative. Sets the IAM policy for the FHIR store and replaces any existing policy already attached. - * `healthcare.FhirStoreIamBinding`: 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 FHIR store are preserved. - * `healthcare.FhirStoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the FHIR store are preserved. - - > **Note:** `healthcare.FhirStoreIamPolicy` **cannot** be used in conjunction with `healthcare.FhirStoreIamBinding` and `healthcare.FhirStoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.FhirStoreIamBinding` resources **can be** used in conjunction with `healthcare.FhirStoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - fhir_store = gcp.healthcare.FhirStoreIamPolicy("fhirStore", - fhir_store_id="your-fhir-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - fhir_store = gcp.healthcare.FhirStoreIamBinding("fhirStore", - fhir_store_id="your-fhir-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_fhir\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - fhir_store = gcp.healthcare.FhirStoreIamMember("fhirStore", - fhir_store_id="your-fhir-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/healthcare/hl7_store_iam_binding.py b/sdk/python/pulumi_gcp/healthcare/hl7_store_iam_binding.py index 4e92c06ac3..dbf9fdff62 100644 --- a/sdk/python/pulumi_gcp/healthcare/hl7_store_iam_binding.py +++ b/sdk/python/pulumi_gcp/healthcare/hl7_store_iam_binding.py @@ -185,55 +185,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - - * `healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - * `healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - * `healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - - > **Note:** `healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `healthcare.Hl7StoreIamBinding` and `healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - hl7_v2_store = gcp.healthcare.Hl7StoreIamPolicy("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - hl7_v2_store = gcp.healthcare.Hl7StoreIamBinding("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - hl7_v2_store = gcp.healthcare.Hl7StoreIamMember("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -277,55 +228,6 @@ def __init__(__self__, args: Hl7StoreIamBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - - * `healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - * `healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - * `healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - - > **Note:** `healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `healthcare.Hl7StoreIamBinding` and `healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - hl7_v2_store = gcp.healthcare.Hl7StoreIamPolicy("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - hl7_v2_store = gcp.healthcare.Hl7StoreIamBinding("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - hl7_v2_store = gcp.healthcare.Hl7StoreIamMember("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/healthcare/hl7_store_iam_member.py b/sdk/python/pulumi_gcp/healthcare/hl7_store_iam_member.py index 9576a75a91..4a3a5d5cdc 100644 --- a/sdk/python/pulumi_gcp/healthcare/hl7_store_iam_member.py +++ b/sdk/python/pulumi_gcp/healthcare/hl7_store_iam_member.py @@ -185,55 +185,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - - * `healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - * `healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - * `healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - - > **Note:** `healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `healthcare.Hl7StoreIamBinding` and `healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - hl7_v2_store = gcp.healthcare.Hl7StoreIamPolicy("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - hl7_v2_store = gcp.healthcare.Hl7StoreIamBinding("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - hl7_v2_store = gcp.healthcare.Hl7StoreIamMember("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -277,55 +228,6 @@ def __init__(__self__, args: Hl7StoreIamMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - - * `healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - * `healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - * `healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - - > **Note:** `healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `healthcare.Hl7StoreIamBinding` and `healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - hl7_v2_store = gcp.healthcare.Hl7StoreIamPolicy("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - hl7_v2_store = gcp.healthcare.Hl7StoreIamBinding("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - hl7_v2_store = gcp.healthcare.Hl7StoreIamMember("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/healthcare/hl7_store_iam_policy.py b/sdk/python/pulumi_gcp/healthcare/hl7_store_iam_policy.py index 54ab99320f..3e969ce2ed 100644 --- a/sdk/python/pulumi_gcp/healthcare/hl7_store_iam_policy.py +++ b/sdk/python/pulumi_gcp/healthcare/hl7_store_iam_policy.py @@ -130,55 +130,6 @@ def __init__(__self__, policy_data: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - - * `healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - * `healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - * `healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - - > **Note:** `healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `healthcare.Hl7StoreIamBinding` and `healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - hl7_v2_store = gcp.healthcare.Hl7StoreIamPolicy("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - hl7_v2_store = gcp.healthcare.Hl7StoreIamBinding("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - hl7_v2_store = gcp.healthcare.Hl7StoreIamMember("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -221,55 +172,6 @@ def __init__(__self__, args: Hl7StoreIamPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Healthcare HL7v2 store. Each of these resources serves a different use case: - - * `healthcare.Hl7StoreIamPolicy`: Authoritative. Sets the IAM policy for the HL7v2 store and replaces any existing policy already attached. - * `healthcare.Hl7StoreIamBinding`: 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 HL7v2 store are preserved. - * `healthcare.Hl7StoreIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the HL7v2 store are preserved. - - > **Note:** `healthcare.Hl7StoreIamPolicy` **cannot** be used in conjunction with `healthcare.Hl7StoreIamBinding` and `healthcare.Hl7StoreIamMember` or they will fight over what your policy should be. - - > **Note:** `healthcare.Hl7StoreIamBinding` resources **can be** used in conjunction with `healthcare.Hl7StoreIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - hl7_v2_store = gcp.healthcare.Hl7StoreIamPolicy("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - policy_data=admin.policy_data) - ``` - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - hl7_v2_store = gcp.healthcare.Hl7StoreIamBinding("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - members=["user:jane@example.com"], - role="roles/editor") - ``` - - ## google\\_healthcare\\_hl7\\_v2\\_store\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - hl7_v2_store = gcp.healthcare.Hl7StoreIamMember("hl7V2Store", - hl7_v2_store_id="your-hl7-v2-store-id", - member="user:jane@example.com", - role="roles/editor") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/iam/__init__.py b/sdk/python/pulumi_gcp/iam/__init__.py index f490b0d53c..8b66624a82 100644 --- a/sdk/python/pulumi_gcp/iam/__init__.py +++ b/sdk/python/pulumi_gcp/iam/__init__.py @@ -5,6 +5,7 @@ from .. import _utilities import typing # Export this package's modules as members: +from .access_boundary_policy import * from .deny_policy import * from .get_rule import * from .get_testable_permissions import * diff --git a/sdk/python/pulumi_gcp/iam/_inputs.py b/sdk/python/pulumi_gcp/iam/_inputs.py index 2208ccee1f..7f06b5dc92 100644 --- a/sdk/python/pulumi_gcp/iam/_inputs.py +++ b/sdk/python/pulumi_gcp/iam/_inputs.py @@ -10,6 +10,9 @@ from .. import _utilities __all__ = [ + 'AccessBoundaryPolicyRuleArgs', + 'AccessBoundaryPolicyRuleAccessBoundaryRuleArgs', + 'AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs', 'DenyPolicyRuleArgs', 'DenyPolicyRuleDenyRuleArgs', 'DenyPolicyRuleDenyRuleDenialConditionArgs', @@ -19,6 +22,180 @@ 'WorkloadIdentityPoolProviderOidcArgs', ] +@pulumi.input_type +class AccessBoundaryPolicyRuleArgs: + def __init__(__self__, *, + access_boundary_rule: Optional[pulumi.Input['AccessBoundaryPolicyRuleAccessBoundaryRuleArgs']] = None, + description: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input['AccessBoundaryPolicyRuleAccessBoundaryRuleArgs'] access_boundary_rule: An access boundary rule in an IAM policy. + Structure is documented below. + :param pulumi.Input[str] description: The description of the rule. + """ + if access_boundary_rule is not None: + pulumi.set(__self__, "access_boundary_rule", access_boundary_rule) + if description is not None: + pulumi.set(__self__, "description", description) + + @property + @pulumi.getter(name="accessBoundaryRule") + def access_boundary_rule(self) -> Optional[pulumi.Input['AccessBoundaryPolicyRuleAccessBoundaryRuleArgs']]: + """ + An access boundary rule in an IAM policy. + Structure is documented below. + """ + return pulumi.get(self, "access_boundary_rule") + + @access_boundary_rule.setter + def access_boundary_rule(self, value: Optional[pulumi.Input['AccessBoundaryPolicyRuleAccessBoundaryRuleArgs']]): + pulumi.set(self, "access_boundary_rule", value) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + """ + The description of the rule. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + +@pulumi.input_type +class AccessBoundaryPolicyRuleAccessBoundaryRuleArgs: + def __init__(__self__, *, + availability_condition: Optional[pulumi.Input['AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs']] = None, + available_permissions: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, + available_resource: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input['AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs'] availability_condition: The availability condition further constrains the access allowed by the access boundary rule. + Structure is documented below. + :param pulumi.Input[Sequence[pulumi.Input[str]]] available_permissions: A list of permissions that may be allowed for use on the specified resource. + :param pulumi.Input[str] available_resource: The full resource name of a Google Cloud resource entity. + """ + if availability_condition is not None: + pulumi.set(__self__, "availability_condition", availability_condition) + if available_permissions is not None: + pulumi.set(__self__, "available_permissions", available_permissions) + if available_resource is not None: + pulumi.set(__self__, "available_resource", available_resource) + + @property + @pulumi.getter(name="availabilityCondition") + def availability_condition(self) -> Optional[pulumi.Input['AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs']]: + """ + The availability condition further constrains the access allowed by the access boundary rule. + Structure is documented below. + """ + return pulumi.get(self, "availability_condition") + + @availability_condition.setter + def availability_condition(self, value: Optional[pulumi.Input['AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs']]): + pulumi.set(self, "availability_condition", value) + + @property + @pulumi.getter(name="availablePermissions") + def available_permissions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: + """ + A list of permissions that may be allowed for use on the specified resource. + """ + return pulumi.get(self, "available_permissions") + + @available_permissions.setter + def available_permissions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): + pulumi.set(self, "available_permissions", value) + + @property + @pulumi.getter(name="availableResource") + def available_resource(self) -> Optional[pulumi.Input[str]]: + """ + The full resource name of a Google Cloud resource entity. + """ + return pulumi.get(self, "available_resource") + + @available_resource.setter + def available_resource(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "available_resource", value) + + +@pulumi.input_type +class AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs: + def __init__(__self__, *, + expression: pulumi.Input[str], + description: Optional[pulumi.Input[str]] = None, + location: Optional[pulumi.Input[str]] = None, + title: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] expression: Textual representation of an expression in Common Expression Language syntax. + :param pulumi.Input[str] description: Description of the expression. This is a longer text which describes the expression, + e.g. when hovered over it in a UI. + :param pulumi.Input[str] location: String indicating the location of the expression for error reporting, + e.g. a file name and a position in the file. + :param pulumi.Input[str] title: Title for the expression, i.e. a short string describing its purpose. + This can be used e.g. in UIs which allow to enter the expression. + """ + pulumi.set(__self__, "expression", expression) + if description is not None: + pulumi.set(__self__, "description", description) + if location is not None: + pulumi.set(__self__, "location", location) + if title is not None: + pulumi.set(__self__, "title", title) + + @property + @pulumi.getter + def expression(self) -> pulumi.Input[str]: + """ + Textual representation of an expression in Common Expression Language syntax. + """ + return pulumi.get(self, "expression") + + @expression.setter + def expression(self, value: pulumi.Input[str]): + pulumi.set(self, "expression", value) + + @property + @pulumi.getter + def description(self) -> Optional[pulumi.Input[str]]: + """ + Description of the expression. This is a longer text which describes the expression, + e.g. when hovered over it in a UI. + """ + return pulumi.get(self, "description") + + @description.setter + def description(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "description", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + String indicating the location of the expression for error reporting, + e.g. a file name and a position in the file. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def title(self) -> Optional[pulumi.Input[str]]: + """ + Title for the expression, i.e. a short string describing its purpose. + This can be used e.g. in UIs which allow to enter the expression. + """ + return pulumi.get(self, "title") + + @title.setter + def title(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "title", value) + + @pulumi.input_type class DenyPolicyRuleArgs: def __init__(__self__, *, diff --git a/sdk/python/pulumi_gcp/iam/access_boundary_policy.py b/sdk/python/pulumi_gcp/iam/access_boundary_policy.py new file mode 100644 index 0000000000..9edd9811c4 --- /dev/null +++ b/sdk/python/pulumi_gcp/iam/access_boundary_policy.py @@ -0,0 +1,349 @@ +# 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 pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['AccessBoundaryPolicyArgs', 'AccessBoundaryPolicy'] + +@pulumi.input_type +class AccessBoundaryPolicyArgs: + def __init__(__self__, *, + parent: pulumi.Input[str], + rules: pulumi.Input[Sequence[pulumi.Input['AccessBoundaryPolicyRuleArgs']]], + display_name: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a AccessBoundaryPolicy resource. + :param pulumi.Input[str] parent: The attachment point is identified by its URL-encoded full resource name. + :param pulumi.Input[Sequence[pulumi.Input['AccessBoundaryPolicyRuleArgs']]] rules: Rules to be applied. + Structure is documented below. + :param pulumi.Input[str] display_name: The display name of the rule. + :param pulumi.Input[str] name: The name of the policy. + """ + pulumi.set(__self__, "parent", parent) + pulumi.set(__self__, "rules", rules) + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + if name is not None: + pulumi.set(__self__, "name", name) + + @property + @pulumi.getter + def parent(self) -> pulumi.Input[str]: + """ + The attachment point is identified by its URL-encoded full resource name. + """ + return pulumi.get(self, "parent") + + @parent.setter + def parent(self, value: pulumi.Input[str]): + pulumi.set(self, "parent", value) + + @property + @pulumi.getter + def rules(self) -> pulumi.Input[Sequence[pulumi.Input['AccessBoundaryPolicyRuleArgs']]]: + """ + Rules to be applied. + Structure is documented below. + """ + return pulumi.get(self, "rules") + + @rules.setter + def rules(self, value: pulumi.Input[Sequence[pulumi.Input['AccessBoundaryPolicyRuleArgs']]]): + pulumi.set(self, "rules", value) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[pulumi.Input[str]]: + """ + The display name of the rule. + """ + 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 name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the policy. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + +@pulumi.input_type +class _AccessBoundaryPolicyState: + def __init__(__self__, *, + display_name: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parent: Optional[pulumi.Input[str]] = None, + rules: Optional[pulumi.Input[Sequence[pulumi.Input['AccessBoundaryPolicyRuleArgs']]]] = None): + """ + Input properties used for looking up and filtering AccessBoundaryPolicy resources. + :param pulumi.Input[str] display_name: The display name of the rule. + :param pulumi.Input[str] etag: The hash of the resource. Used internally during updates. + :param pulumi.Input[str] name: The name of the policy. + :param pulumi.Input[str] parent: The attachment point is identified by its URL-encoded full resource name. + :param pulumi.Input[Sequence[pulumi.Input['AccessBoundaryPolicyRuleArgs']]] rules: Rules to be applied. + Structure is documented below. + """ + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + if etag is not None: + pulumi.set(__self__, "etag", etag) + if name is not None: + pulumi.set(__self__, "name", name) + if parent is not None: + pulumi.set(__self__, "parent", parent) + if rules is not None: + pulumi.set(__self__, "rules", rules) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[pulumi.Input[str]]: + """ + The display name of the rule. + """ + 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 hash of the resource. Used internally during updates. + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the policy. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def parent(self) -> Optional[pulumi.Input[str]]: + """ + The attachment point is identified by its URL-encoded full resource name. + """ + return pulumi.get(self, "parent") + + @parent.setter + def parent(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "parent", value) + + @property + @pulumi.getter + def rules(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['AccessBoundaryPolicyRuleArgs']]]]: + """ + Rules to be applied. + Structure is documented below. + """ + return pulumi.get(self, "rules") + + @rules.setter + def rules(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['AccessBoundaryPolicyRuleArgs']]]]): + pulumi.set(self, "rules", value) + + +class AccessBoundaryPolicy(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + display_name: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parent: Optional[pulumi.Input[str]] = None, + rules: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AccessBoundaryPolicyRuleArgs']]]]] = None, + __props__=None): + """ + Represents a collection of access boundary policies to apply to a given resource. + **NOTE**: This is a private feature and users should contact GCP support + if they would like to test it. + + ## Example Usage + + ## Import + + AccessBoundaryPolicy can be imported using any of these accepted formats + + ```sh + $ pulumi import gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy default {{parent}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] display_name: The display name of the rule. + :param pulumi.Input[str] name: The name of the policy. + :param pulumi.Input[str] parent: The attachment point is identified by its URL-encoded full resource name. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AccessBoundaryPolicyRuleArgs']]]] rules: Rules to be applied. + Structure is documented below. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: AccessBoundaryPolicyArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + Represents a collection of access boundary policies to apply to a given resource. + **NOTE**: This is a private feature and users should contact GCP support + if they would like to test it. + + ## Example Usage + + ## Import + + AccessBoundaryPolicy can be imported using any of these accepted formats + + ```sh + $ pulumi import gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy default {{parent}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param AccessBoundaryPolicyArgs 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(AccessBoundaryPolicyArgs, 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, + display_name: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parent: Optional[pulumi.Input[str]] = None, + rules: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AccessBoundaryPolicyRuleArgs']]]]] = 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__ = AccessBoundaryPolicyArgs.__new__(AccessBoundaryPolicyArgs) + + __props__.__dict__["display_name"] = display_name + __props__.__dict__["name"] = name + if parent is None and not opts.urn: + raise TypeError("Missing required property 'parent'") + __props__.__dict__["parent"] = parent + if rules is None and not opts.urn: + raise TypeError("Missing required property 'rules'") + __props__.__dict__["rules"] = rules + __props__.__dict__["etag"] = None + super(AccessBoundaryPolicy, __self__).__init__( + 'gcp:iam/accessBoundaryPolicy:AccessBoundaryPolicy', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + display_name: Optional[pulumi.Input[str]] = None, + etag: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parent: Optional[pulumi.Input[str]] = None, + rules: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AccessBoundaryPolicyRuleArgs']]]]] = None) -> 'AccessBoundaryPolicy': + """ + Get an existing AccessBoundaryPolicy 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] display_name: The display name of the rule. + :param pulumi.Input[str] etag: The hash of the resource. Used internally during updates. + :param pulumi.Input[str] name: The name of the policy. + :param pulumi.Input[str] parent: The attachment point is identified by its URL-encoded full resource name. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['AccessBoundaryPolicyRuleArgs']]]] rules: Rules to be applied. + Structure is documented below. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _AccessBoundaryPolicyState.__new__(_AccessBoundaryPolicyState) + + __props__.__dict__["display_name"] = display_name + __props__.__dict__["etag"] = etag + __props__.__dict__["name"] = name + __props__.__dict__["parent"] = parent + __props__.__dict__["rules"] = rules + return AccessBoundaryPolicy(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> pulumi.Output[Optional[str]]: + """ + The display name of the rule. + """ + return pulumi.get(self, "display_name") + + @property + @pulumi.getter + def etag(self) -> pulumi.Output[str]: + """ + The hash of the resource. Used internally during updates. + """ + return pulumi.get(self, "etag") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The name of the policy. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def parent(self) -> pulumi.Output[str]: + """ + The attachment point is identified by its URL-encoded full resource name. + """ + return pulumi.get(self, "parent") + + @property + @pulumi.getter + def rules(self) -> pulumi.Output[Sequence['outputs.AccessBoundaryPolicyRule']]: + """ + Rules to be applied. + Structure is documented below. + """ + return pulumi.get(self, "rules") + diff --git a/sdk/python/pulumi_gcp/iam/get_workload_identity_pool.py b/sdk/python/pulumi_gcp/iam/get_workload_identity_pool.py index e187e36532..aef7aa7654 100644 --- a/sdk/python/pulumi_gcp/iam/get_workload_identity_pool.py +++ b/sdk/python/pulumi_gcp/iam/get_workload_identity_pool.py @@ -111,8 +111,6 @@ def get_workload_identity_pool(project: Optional[str] = None, workload_identity_pool_id: Optional[str] = None, opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetWorkloadIdentityPoolResult: """ - Get a IAM workload identity pool from Google Cloud by its id. - > **Note:** The following resource requires the Beta IAM role `roles/iam.workloadIdentityPoolAdmin` in order to succeed. `OWNER` and `EDITOR` roles do not include the necessary permissions. ## Example Usage ```python @@ -150,8 +148,6 @@ def get_workload_identity_pool_output(project: Optional[pulumi.Input[Optional[st workload_identity_pool_id: Optional[pulumi.Input[str]] = None, opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetWorkloadIdentityPoolResult]: """ - Get a IAM workload identity pool from Google Cloud by its id. - > **Note:** The following resource requires the Beta IAM role `roles/iam.workloadIdentityPoolAdmin` in order to succeed. `OWNER` and `EDITOR` roles do not include the necessary permissions. ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/iam/get_workload_identity_pool_provider.py b/sdk/python/pulumi_gcp/iam/get_workload_identity_pool_provider.py index 0bf4543303..0e9b87eb43 100644 --- a/sdk/python/pulumi_gcp/iam/get_workload_identity_pool_provider.py +++ b/sdk/python/pulumi_gcp/iam/get_workload_identity_pool_provider.py @@ -158,8 +158,6 @@ def get_workload_identity_pool_provider(project: Optional[str] = None, workload_identity_pool_provider_id: Optional[str] = None, opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetWorkloadIdentityPoolProviderResult: """ - Get a IAM workload identity provider from Google Cloud by its id. - ## Example Usage ```python @@ -207,8 +205,6 @@ def get_workload_identity_pool_provider_output(project: Optional[pulumi.Input[Op workload_identity_pool_provider_id: Optional[pulumi.Input[str]] = None, opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetWorkloadIdentityPoolProviderResult]: """ - Get a IAM workload identity provider from Google Cloud by its id. - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/iam/outputs.py b/sdk/python/pulumi_gcp/iam/outputs.py index 3a5921ef89..bd14d66c69 100644 --- a/sdk/python/pulumi_gcp/iam/outputs.py +++ b/sdk/python/pulumi_gcp/iam/outputs.py @@ -11,6 +11,9 @@ from . import outputs __all__ = [ + 'AccessBoundaryPolicyRule', + 'AccessBoundaryPolicyRuleAccessBoundaryRule', + 'AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition', 'DenyPolicyRule', 'DenyPolicyRuleDenyRule', 'DenyPolicyRuleDenyRuleDenialCondition', @@ -23,6 +26,182 @@ 'GetWorkloadIdentityPoolProviderOidcResult', ] +@pulumi.output_type +class AccessBoundaryPolicyRule(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "accessBoundaryRule": + suggest = "access_boundary_rule" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in AccessBoundaryPolicyRule. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + AccessBoundaryPolicyRule.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + AccessBoundaryPolicyRule.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + access_boundary_rule: Optional['outputs.AccessBoundaryPolicyRuleAccessBoundaryRule'] = None, + description: Optional[str] = None): + """ + :param 'AccessBoundaryPolicyRuleAccessBoundaryRuleArgs' access_boundary_rule: An access boundary rule in an IAM policy. + Structure is documented below. + :param str description: The description of the rule. + """ + if access_boundary_rule is not None: + pulumi.set(__self__, "access_boundary_rule", access_boundary_rule) + if description is not None: + pulumi.set(__self__, "description", description) + + @property + @pulumi.getter(name="accessBoundaryRule") + def access_boundary_rule(self) -> Optional['outputs.AccessBoundaryPolicyRuleAccessBoundaryRule']: + """ + An access boundary rule in an IAM policy. + Structure is documented below. + """ + return pulumi.get(self, "access_boundary_rule") + + @property + @pulumi.getter + def description(self) -> Optional[str]: + """ + The description of the rule. + """ + return pulumi.get(self, "description") + + +@pulumi.output_type +class AccessBoundaryPolicyRuleAccessBoundaryRule(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "availabilityCondition": + suggest = "availability_condition" + elif key == "availablePermissions": + suggest = "available_permissions" + elif key == "availableResource": + suggest = "available_resource" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in AccessBoundaryPolicyRuleAccessBoundaryRule. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + AccessBoundaryPolicyRuleAccessBoundaryRule.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + AccessBoundaryPolicyRuleAccessBoundaryRule.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + availability_condition: Optional['outputs.AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition'] = None, + available_permissions: Optional[Sequence[str]] = None, + available_resource: Optional[str] = None): + """ + :param 'AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityConditionArgs' availability_condition: The availability condition further constrains the access allowed by the access boundary rule. + Structure is documented below. + :param Sequence[str] available_permissions: A list of permissions that may be allowed for use on the specified resource. + :param str available_resource: The full resource name of a Google Cloud resource entity. + """ + if availability_condition is not None: + pulumi.set(__self__, "availability_condition", availability_condition) + if available_permissions is not None: + pulumi.set(__self__, "available_permissions", available_permissions) + if available_resource is not None: + pulumi.set(__self__, "available_resource", available_resource) + + @property + @pulumi.getter(name="availabilityCondition") + def availability_condition(self) -> Optional['outputs.AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition']: + """ + The availability condition further constrains the access allowed by the access boundary rule. + Structure is documented below. + """ + return pulumi.get(self, "availability_condition") + + @property + @pulumi.getter(name="availablePermissions") + def available_permissions(self) -> Optional[Sequence[str]]: + """ + A list of permissions that may be allowed for use on the specified resource. + """ + return pulumi.get(self, "available_permissions") + + @property + @pulumi.getter(name="availableResource") + def available_resource(self) -> Optional[str]: + """ + The full resource name of a Google Cloud resource entity. + """ + return pulumi.get(self, "available_resource") + + +@pulumi.output_type +class AccessBoundaryPolicyRuleAccessBoundaryRuleAvailabilityCondition(dict): + def __init__(__self__, *, + expression: str, + description: Optional[str] = None, + location: Optional[str] = None, + title: Optional[str] = None): + """ + :param str expression: Textual representation of an expression in Common Expression Language syntax. + :param str description: Description of the expression. This is a longer text which describes the expression, + e.g. when hovered over it in a UI. + :param str location: String indicating the location of the expression for error reporting, + e.g. a file name and a position in the file. + :param str title: Title for the expression, i.e. a short string describing its purpose. + This can be used e.g. in UIs which allow to enter the expression. + """ + pulumi.set(__self__, "expression", expression) + if description is not None: + pulumi.set(__self__, "description", description) + if location is not None: + pulumi.set(__self__, "location", location) + if title is not None: + pulumi.set(__self__, "title", title) + + @property + @pulumi.getter + def expression(self) -> str: + """ + Textual representation of an expression in Common Expression Language syntax. + """ + return pulumi.get(self, "expression") + + @property + @pulumi.getter + def description(self) -> Optional[str]: + """ + Description of the expression. This is a longer text which describes the expression, + e.g. when hovered over it in a UI. + """ + return pulumi.get(self, "description") + + @property + @pulumi.getter + def location(self) -> Optional[str]: + """ + String indicating the location of the expression for error reporting, + e.g. a file name and a position in the file. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def title(self) -> Optional[str]: + """ + Title for the expression, i.e. a short string describing its purpose. + This can be used e.g. in UIs which allow to enter the expression. + """ + return pulumi.get(self, "title") + + @pulumi.output_type class DenyPolicyRule(dict): @staticmethod diff --git a/sdk/python/pulumi_gcp/iam/workforce_pool_provider.py b/sdk/python/pulumi_gcp/iam/workforce_pool_provider.py index 92e0068057..e63cc08547 100644 --- a/sdk/python/pulumi_gcp/iam/workforce_pool_provider.py +++ b/sdk/python/pulumi_gcp/iam/workforce_pool_provider.py @@ -695,7 +695,7 @@ def __init__(__self__, "google.subject": "assertion.sub", }, oidc=gcp.iam.WorkforcePoolProviderOidcArgs( - issuer_uri="https://accounts.google.com", + issuer_uri="https://accounts.thirdparty.com", client_id="client-id", )) ``` @@ -717,7 +717,7 @@ def __init__(__self__, "google.subject": "assertion.sub", }, oidc=gcp.iam.WorkforcePoolProviderOidcArgs( - issuer_uri="https://accounts.google.com", + issuer_uri="https://accounts.thirdparty.com", client_id="client-id", ), display_name="Display name", @@ -887,7 +887,7 @@ def __init__(__self__, "google.subject": "assertion.sub", }, oidc=gcp.iam.WorkforcePoolProviderOidcArgs( - issuer_uri="https://accounts.google.com", + issuer_uri="https://accounts.thirdparty.com", client_id="client-id", )) ``` @@ -909,7 +909,7 @@ def __init__(__self__, "google.subject": "assertion.sub", }, oidc=gcp.iam.WorkforcePoolProviderOidcArgs( - issuer_uri="https://accounts.google.com", + issuer_uri="https://accounts.thirdparty.com", client_id="client-id", ), display_name="Display name", diff --git a/sdk/python/pulumi_gcp/iap/brand.py b/sdk/python/pulumi_gcp/iap/brand.py index 465b32a537..9a51de82dd 100644 --- a/sdk/python/pulumi_gcp/iap/brand.py +++ b/sdk/python/pulumi_gcp/iap/brand.py @@ -189,39 +189,7 @@ def __init__(__self__, support_email: Optional[pulumi.Input[str]] = None, __props__=None): """ - OAuth brand data. Only "Organization Internal" brands can be created - programmatically via API. To convert it into an external brands - please use the GCP Console. - - > **Note:** Brands can only be created once for a Google Cloud - project and the underlying Google API doesn't not support DELETE or PATCH methods. - Destroying a provider-managed Brand will remove it from state - but *will not delete it from Google Cloud.* - - To get more information about Brand, see: - - * [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands) - * How-to Guides - * [Setting up IAP Brand](https://cloud.google.com/iap/docs/tutorial-gce#set_up_iap) - ## Example Usage - ### Iap Brand - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.Project("project", - project_id="tf-test", - org_id="123456789") - project_service = gcp.projects.Service("projectService", - project=project.project_id, - service="iap.googleapis.com") - project_brand = gcp.iap.Brand("projectBrand", - support_email="support@example.com", - application_title="Cloud IAP protected Application", - project=project_service.project) - ``` ## Import @@ -257,39 +225,7 @@ def __init__(__self__, args: BrandArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - OAuth brand data. Only "Organization Internal" brands can be created - programmatically via API. To convert it into an external brands - please use the GCP Console. - - > **Note:** Brands can only be created once for a Google Cloud - project and the underlying Google API doesn't not support DELETE or PATCH methods. - Destroying a provider-managed Brand will remove it from state - but *will not delete it from Google Cloud.* - - To get more information about Brand, see: - - * [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands) - * How-to Guides - * [Setting up IAP Brand](https://cloud.google.com/iap/docs/tutorial-gce#set_up_iap) - ## Example Usage - ### Iap Brand - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.Project("project", - project_id="tf-test", - org_id="123456789") - project_service = gcp.projects.Service("projectService", - project=project.project_id, - service="iap.googleapis.com") - project_brand = gcp.iap.Brand("projectBrand", - support_email="support@example.com", - application_title="Cloud IAP protected Application", - project=project_service.project) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/iap/client.py b/sdk/python/pulumi_gcp/iap/client.py index 74e156f372..e0cc128160 100644 --- a/sdk/python/pulumi_gcp/iap/client.py +++ b/sdk/python/pulumi_gcp/iap/client.py @@ -140,42 +140,7 @@ def __init__(__self__, display_name: Optional[pulumi.Input[str]] = None, __props__=None): """ - Contains the data that describes an Identity Aware Proxy owned client. - - > **Note:** Only internal org clients can be created via declarative tools. External clients must be - manually created via the GCP console. This restriction is due to the existing APIs and not lack of support - in this tool. - - To get more information about Client, see: - - * [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands.identityAwareProxyClients) - * How-to Guides - * [Setting up IAP Client](https://cloud.google.com/iap/docs/authentication-howto) - - > **Warning:** All arguments including `secret` will be stored in the raw - state as plain-text. - ## Example Usage - ### Iap Client - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.Project("project", - project_id="tf-test", - org_id="123456789") - project_service = gcp.projects.Service("projectService", - project=project.project_id, - service="iap.googleapis.com") - project_brand = gcp.iap.Brand("projectBrand", - support_email="support@example.com", - application_title="Cloud IAP protected Application", - project=project_service.project) - project_client = gcp.iap.Client("projectClient", - display_name="Test Client", - brand=project_brand.name) - ``` ## Import @@ -203,42 +168,7 @@ def __init__(__self__, args: ClientArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Contains the data that describes an Identity Aware Proxy owned client. - - > **Note:** Only internal org clients can be created via declarative tools. External clients must be - manually created via the GCP console. This restriction is due to the existing APIs and not lack of support - in this tool. - - To get more information about Client, see: - - * [API documentation](https://cloud.google.com/iap/docs/reference/rest/v1/projects.brands.identityAwareProxyClients) - * How-to Guides - * [Setting up IAP Client](https://cloud.google.com/iap/docs/authentication-howto) - - > **Warning:** All arguments including `secret` will be stored in the raw - state as plain-text. - ## Example Usage - ### Iap Client - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.organizations.Project("project", - project_id="tf-test", - org_id="123456789") - project_service = gcp.projects.Service("projectService", - project=project.project_id, - service="iap.googleapis.com") - project_brand = gcp.iap.Brand("projectBrand", - support_email="support@example.com", - application_title="Cloud IAP protected Application", - project=project_service.project) - project_client = gcp.iap.Client("projectClient", - display_name="Test Client", - brand=project_brand.name) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/kms/crypto_key.py b/sdk/python/pulumi_gcp/kms/crypto_key.py index dfe3be0ef6..26a0e62618 100644 --- a/sdk/python/pulumi_gcp/kms/crypto_key.py +++ b/sdk/python/pulumi_gcp/kms/crypto_key.py @@ -376,22 +376,6 @@ def __init__(__self__, version_template: Optional[pulumi.Input[pulumi.InputType['CryptoKeyVersionTemplateArgs']]] = None, __props__=None): """ - A `CryptoKey` represents a logical key that can be used for cryptographic operations. - - > **Note:** CryptoKeys cannot be deleted from Google Cloud Platform. - Destroying a provider-managed CryptoKey will remove it from state - and delete all CryptoKeyVersions, rendering the key unusable, but *will - not delete the resource from the project.* When the provider destroys these keys, - any data previously encrypted with these keys will be irrecoverable. - For this reason, it is strongly recommended that you add lifecycle hooks - to the resource to prevent accidental destruction. - - To get more information about CryptoKey, see: - - * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys) - * How-to Guides - * [Creating a key](https://cloud.google.com/kms/docs/creating-keys#create_a_key) - ## Example Usage ### Kms Crypto Key Basic @@ -461,22 +445,6 @@ def __init__(__self__, args: CryptoKeyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A `CryptoKey` represents a logical key that can be used for cryptographic operations. - - > **Note:** CryptoKeys cannot be deleted from Google Cloud Platform. - Destroying a provider-managed CryptoKey will remove it from state - and delete all CryptoKeyVersions, rendering the key unusable, but *will - not delete the resource from the project.* When the provider destroys these keys, - any data previously encrypted with these keys will be irrecoverable. - For this reason, it is strongly recommended that you add lifecycle hooks - to the resource to prevent accidental destruction. - - To get more information about CryptoKey, see: - - * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys) - * How-to Guides - * [Creating a key](https://cloud.google.com/kms/docs/creating-keys#create_a_key) - ## Example Usage ### Kms Crypto Key Basic diff --git a/sdk/python/pulumi_gcp/kms/crypto_key_iam_binding.py b/sdk/python/pulumi_gcp/kms/crypto_key_iam_binding.py index eafd21ec44..ed9fa6e7e6 100644 --- a/sdk/python/pulumi_gcp/kms/crypto_key_iam_binding.py +++ b/sdk/python/pulumi_gcp/kms/crypto_key_iam_binding.py @@ -193,104 +193,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - - * `kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - * `kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - * `kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - - > **Note:** `kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `kms.CryptoKeyIAMBinding` and `kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - - > **Note:** `kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - key = gcp.kms.CryptoKey("key", - key_ring=keyring.id, - rotation_period="100000s") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"], - )]) - crypto_key = gcp.kms.CryptoKeyIAMPolicy("cryptoKey", - crypto_key_id=key.id, - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/cloudkms.cryptoKeyEncrypter", - )]) - ``` - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMBinding("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"]) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMBinding("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"], - condition=gcp.kms.CryptoKeyIAMBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - )) - ``` - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMMember("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - member="user:jane@example.com") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMMember("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - member="user:jane@example.com", - condition=gcp.kms.CryptoKeyIAMMemberConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - )) - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -335,104 +237,6 @@ def __init__(__self__, args: CryptoKeyIAMBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - - * `kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - * `kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - * `kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - - > **Note:** `kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `kms.CryptoKeyIAMBinding` and `kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - - > **Note:** `kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - key = gcp.kms.CryptoKey("key", - key_ring=keyring.id, - rotation_period="100000s") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"], - )]) - crypto_key = gcp.kms.CryptoKeyIAMPolicy("cryptoKey", - crypto_key_id=key.id, - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/cloudkms.cryptoKeyEncrypter", - )]) - ``` - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMBinding("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"]) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMBinding("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"], - condition=gcp.kms.CryptoKeyIAMBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - )) - ``` - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMMember("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - member="user:jane@example.com") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMMember("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - member="user:jane@example.com", - condition=gcp.kms.CryptoKeyIAMMemberConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - )) - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/kms/crypto_key_iam_member.py b/sdk/python/pulumi_gcp/kms/crypto_key_iam_member.py index 3a7470734f..1f9eb32f9b 100644 --- a/sdk/python/pulumi_gcp/kms/crypto_key_iam_member.py +++ b/sdk/python/pulumi_gcp/kms/crypto_key_iam_member.py @@ -193,104 +193,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - - * `kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - * `kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - * `kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - - > **Note:** `kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `kms.CryptoKeyIAMBinding` and `kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - - > **Note:** `kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - key = gcp.kms.CryptoKey("key", - key_ring=keyring.id, - rotation_period="100000s") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"], - )]) - crypto_key = gcp.kms.CryptoKeyIAMPolicy("cryptoKey", - crypto_key_id=key.id, - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/cloudkms.cryptoKeyEncrypter", - )]) - ``` - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMBinding("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"]) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMBinding("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"], - condition=gcp.kms.CryptoKeyIAMBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - )) - ``` - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMMember("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - member="user:jane@example.com") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMMember("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - member="user:jane@example.com", - condition=gcp.kms.CryptoKeyIAMMemberConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - )) - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -335,104 +237,6 @@ def __init__(__self__, args: CryptoKeyIAMMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - - * `kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - * `kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - * `kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - - > **Note:** `kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `kms.CryptoKeyIAMBinding` and `kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - - > **Note:** `kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - key = gcp.kms.CryptoKey("key", - key_ring=keyring.id, - rotation_period="100000s") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"], - )]) - crypto_key = gcp.kms.CryptoKeyIAMPolicy("cryptoKey", - crypto_key_id=key.id, - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/cloudkms.cryptoKeyEncrypter", - )]) - ``` - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMBinding("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"]) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMBinding("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"], - condition=gcp.kms.CryptoKeyIAMBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - )) - ``` - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMMember("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - member="user:jane@example.com") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMMember("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - member="user:jane@example.com", - condition=gcp.kms.CryptoKeyIAMMemberConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - )) - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/kms/crypto_key_iam_policy.py b/sdk/python/pulumi_gcp/kms/crypto_key_iam_policy.py index bc88029899..fe4e429aa0 100644 --- a/sdk/python/pulumi_gcp/kms/crypto_key_iam_policy.py +++ b/sdk/python/pulumi_gcp/kms/crypto_key_iam_policy.py @@ -130,104 +130,6 @@ def __init__(__self__, policy_data: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - - * `kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - * `kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - * `kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - - > **Note:** `kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `kms.CryptoKeyIAMBinding` and `kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - - > **Note:** `kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - key = gcp.kms.CryptoKey("key", - key_ring=keyring.id, - rotation_period="100000s") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"], - )]) - crypto_key = gcp.kms.CryptoKeyIAMPolicy("cryptoKey", - crypto_key_id=key.id, - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/cloudkms.cryptoKeyEncrypter", - )]) - ``` - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMBinding("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"]) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMBinding("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"], - condition=gcp.kms.CryptoKeyIAMBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - )) - ``` - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMMember("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - member="user:jane@example.com") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMMember("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - member="user:jane@example.com", - condition=gcp.kms.CryptoKeyIAMMemberConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - )) - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -270,104 +172,6 @@ def __init__(__self__, args: CryptoKeyIAMPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for KMS crypto key. Each of these resources serves a different use case: - - * `kms.CryptoKeyIAMPolicy`: Authoritative. Sets the IAM policy for the crypto key and replaces any existing policy already attached. - * `kms.CryptoKeyIAMBinding`: 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 crypto key are preserved. - * `kms.CryptoKeyIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the crypto key are preserved. - - > **Note:** `kms.CryptoKeyIAMPolicy` **cannot** be used in conjunction with `kms.CryptoKeyIAMBinding` and `kms.CryptoKeyIAMMember` or they will fight over what your policy should be. - - > **Note:** `kms.CryptoKeyIAMBinding` resources **can be** used in conjunction with `kms.CryptoKeyIAMMember` resources **only if** they do not grant privilege to the same role. - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - key = gcp.kms.CryptoKey("key", - key_ring=keyring.id, - rotation_period="100000s") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"], - )]) - crypto_key = gcp.kms.CryptoKeyIAMPolicy("cryptoKey", - crypto_key_id=key.id, - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/cloudkms.cryptoKeyEncrypter", - )]) - ``` - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMBinding("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"]) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMBinding("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - members=["user:jane@example.com"], - condition=gcp.kms.CryptoKeyIAMBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - )) - ``` - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMMember("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - member="user:jane@example.com") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - crypto_key = gcp.kms.CryptoKeyIAMMember("cryptoKey", - crypto_key_id=google_kms_crypto_key["key"]["id"], - role="roles/cloudkms.cryptoKeyEncrypter", - member="user:jane@example.com", - condition=gcp.kms.CryptoKeyIAMMemberConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - )) - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/kms/key_ring.py b/sdk/python/pulumi_gcp/kms/key_ring.py index a7c159478f..87253aaab2 100644 --- a/sdk/python/pulumi_gcp/kms/key_ring.py +++ b/sdk/python/pulumi_gcp/kms/key_ring.py @@ -140,18 +140,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - A `KeyRing` is a toplevel logical grouping of `CryptoKeys`. - - > **Note:** KeyRings cannot be deleted from Google Cloud Platform. - Destroying a provider-managed KeyRing will remove it from state but - *will not delete the resource from the project.* - - To get more information about KeyRing, see: - - * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings) - * How-to Guides - * [Creating a key ring](https://cloud.google.com/kms/docs/creating-keys#create_a_key_ring) - ## Example Usage ### Kms Key Ring Basic @@ -193,18 +181,6 @@ def __init__(__self__, args: KeyRingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A `KeyRing` is a toplevel logical grouping of `CryptoKeys`. - - > **Note:** KeyRings cannot be deleted from Google Cloud Platform. - Destroying a provider-managed KeyRing will remove it from state but - *will not delete the resource from the project.* - - To get more information about KeyRing, see: - - * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings) - * How-to Guides - * [Creating a key ring](https://cloud.google.com/kms/docs/creating-keys#create_a_key_ring) - ## Example Usage ### Kms Key Ring Basic diff --git a/sdk/python/pulumi_gcp/kms/key_ring_iam_binding.py b/sdk/python/pulumi_gcp/kms/key_ring_iam_binding.py index d699204997..db02f0e2cb 100644 --- a/sdk/python/pulumi_gcp/kms/key_ring_iam_binding.py +++ b/sdk/python/pulumi_gcp/kms/key_ring_iam_binding.py @@ -197,111 +197,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - - * `kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - * `kms.KeyRingIAMBinding`: 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 key ring are preserved. - * `kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - - > **Note:** `kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `kms.KeyRingIAMBinding` and `kms.KeyRingIAMMember` or they will fight over what your policy should be. - - > **Note:** `kms.KeyRingIAMBinding` resources **can be** used in conjunction with `kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_kms\\_key\\_ring\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - key_ring = gcp.kms.KeyRingIAMPolicy("keyRing", - key_ring_id=keyring.id, - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - )]) - key_ring = gcp.kms.KeyRingIAMPolicy("keyRing", - key_ring_id=keyring.id, - policy_data=admin.policy_data) - ``` - - ## google\\_kms\\_key\\_ring\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMBinding("keyRing", - key_ring_id="your-key-ring-id", - members=["user:jane@example.com"], - role="roles/cloudkms.admin") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMBinding("keyRing", - condition=gcp.kms.KeyRingIAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - key_ring_id="your-key-ring-id", - members=["user:jane@example.com"], - role="roles/cloudkms.admin") - ``` - - ## google\\_kms\\_key\\_ring\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMMember("keyRing", - key_ring_id="your-key-ring-id", - member="user:jane@example.com", - role="roles/cloudkms.admin") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMMember("keyRing", - condition=gcp.kms.KeyRingIAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - key_ring_id="your-key-ring-id", - member="user:jane@example.com", - role="roles/cloudkms.admin") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -347,111 +242,6 @@ def __init__(__self__, args: KeyRingIAMBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - - * `kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - * `kms.KeyRingIAMBinding`: 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 key ring are preserved. - * `kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - - > **Note:** `kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `kms.KeyRingIAMBinding` and `kms.KeyRingIAMMember` or they will fight over what your policy should be. - - > **Note:** `kms.KeyRingIAMBinding` resources **can be** used in conjunction with `kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_kms\\_key\\_ring\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - key_ring = gcp.kms.KeyRingIAMPolicy("keyRing", - key_ring_id=keyring.id, - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - )]) - key_ring = gcp.kms.KeyRingIAMPolicy("keyRing", - key_ring_id=keyring.id, - policy_data=admin.policy_data) - ``` - - ## google\\_kms\\_key\\_ring\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMBinding("keyRing", - key_ring_id="your-key-ring-id", - members=["user:jane@example.com"], - role="roles/cloudkms.admin") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMBinding("keyRing", - condition=gcp.kms.KeyRingIAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - key_ring_id="your-key-ring-id", - members=["user:jane@example.com"], - role="roles/cloudkms.admin") - ``` - - ## google\\_kms\\_key\\_ring\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMMember("keyRing", - key_ring_id="your-key-ring-id", - member="user:jane@example.com", - role="roles/cloudkms.admin") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMMember("keyRing", - condition=gcp.kms.KeyRingIAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - key_ring_id="your-key-ring-id", - member="user:jane@example.com", - role="roles/cloudkms.admin") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/kms/key_ring_iam_member.py b/sdk/python/pulumi_gcp/kms/key_ring_iam_member.py index d1720b56d9..481ec1546e 100644 --- a/sdk/python/pulumi_gcp/kms/key_ring_iam_member.py +++ b/sdk/python/pulumi_gcp/kms/key_ring_iam_member.py @@ -197,111 +197,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - - * `kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - * `kms.KeyRingIAMBinding`: 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 key ring are preserved. - * `kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - - > **Note:** `kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `kms.KeyRingIAMBinding` and `kms.KeyRingIAMMember` or they will fight over what your policy should be. - - > **Note:** `kms.KeyRingIAMBinding` resources **can be** used in conjunction with `kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_kms\\_key\\_ring\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - key_ring = gcp.kms.KeyRingIAMPolicy("keyRing", - key_ring_id=keyring.id, - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - )]) - key_ring = gcp.kms.KeyRingIAMPolicy("keyRing", - key_ring_id=keyring.id, - policy_data=admin.policy_data) - ``` - - ## google\\_kms\\_key\\_ring\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMBinding("keyRing", - key_ring_id="your-key-ring-id", - members=["user:jane@example.com"], - role="roles/cloudkms.admin") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMBinding("keyRing", - condition=gcp.kms.KeyRingIAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - key_ring_id="your-key-ring-id", - members=["user:jane@example.com"], - role="roles/cloudkms.admin") - ``` - - ## google\\_kms\\_key\\_ring\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMMember("keyRing", - key_ring_id="your-key-ring-id", - member="user:jane@example.com", - role="roles/cloudkms.admin") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMMember("keyRing", - condition=gcp.kms.KeyRingIAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - key_ring_id="your-key-ring-id", - member="user:jane@example.com", - role="roles/cloudkms.admin") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -347,111 +242,6 @@ def __init__(__self__, args: KeyRingIAMMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - - * `kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - * `kms.KeyRingIAMBinding`: 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 key ring are preserved. - * `kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - - > **Note:** `kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `kms.KeyRingIAMBinding` and `kms.KeyRingIAMMember` or they will fight over what your policy should be. - - > **Note:** `kms.KeyRingIAMBinding` resources **can be** used in conjunction with `kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_kms\\_key\\_ring\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - key_ring = gcp.kms.KeyRingIAMPolicy("keyRing", - key_ring_id=keyring.id, - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - )]) - key_ring = gcp.kms.KeyRingIAMPolicy("keyRing", - key_ring_id=keyring.id, - policy_data=admin.policy_data) - ``` - - ## google\\_kms\\_key\\_ring\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMBinding("keyRing", - key_ring_id="your-key-ring-id", - members=["user:jane@example.com"], - role="roles/cloudkms.admin") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMBinding("keyRing", - condition=gcp.kms.KeyRingIAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - key_ring_id="your-key-ring-id", - members=["user:jane@example.com"], - role="roles/cloudkms.admin") - ``` - - ## google\\_kms\\_key\\_ring\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMMember("keyRing", - key_ring_id="your-key-ring-id", - member="user:jane@example.com", - role="roles/cloudkms.admin") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMMember("keyRing", - condition=gcp.kms.KeyRingIAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - key_ring_id="your-key-ring-id", - member="user:jane@example.com", - role="roles/cloudkms.admin") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/kms/key_ring_iam_policy.py b/sdk/python/pulumi_gcp/kms/key_ring_iam_policy.py index 3a3e4fb7b8..39c3268a84 100644 --- a/sdk/python/pulumi_gcp/kms/key_ring_iam_policy.py +++ b/sdk/python/pulumi_gcp/kms/key_ring_iam_policy.py @@ -130,111 +130,6 @@ def __init__(__self__, policy_data: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - - * `kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - * `kms.KeyRingIAMBinding`: 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 key ring are preserved. - * `kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - - > **Note:** `kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `kms.KeyRingIAMBinding` and `kms.KeyRingIAMMember` or they will fight over what your policy should be. - - > **Note:** `kms.KeyRingIAMBinding` resources **can be** used in conjunction with `kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_kms\\_key\\_ring\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - key_ring = gcp.kms.KeyRingIAMPolicy("keyRing", - key_ring_id=keyring.id, - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - )]) - key_ring = gcp.kms.KeyRingIAMPolicy("keyRing", - key_ring_id=keyring.id, - policy_data=admin.policy_data) - ``` - - ## google\\_kms\\_key\\_ring\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMBinding("keyRing", - key_ring_id="your-key-ring-id", - members=["user:jane@example.com"], - role="roles/cloudkms.admin") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMBinding("keyRing", - condition=gcp.kms.KeyRingIAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - key_ring_id="your-key-ring-id", - members=["user:jane@example.com"], - role="roles/cloudkms.admin") - ``` - - ## google\\_kms\\_key\\_ring\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMMember("keyRing", - key_ring_id="your-key-ring-id", - member="user:jane@example.com", - role="roles/cloudkms.admin") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMMember("keyRing", - condition=gcp.kms.KeyRingIAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - key_ring_id="your-key-ring-id", - member="user:jane@example.com", - role="roles/cloudkms.admin") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -277,111 +172,6 @@ def __init__(__self__, args: KeyRingIAMPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for KMS key ring. Each of these resources serves a different use case: - - * `kms.KeyRingIAMPolicy`: Authoritative. Sets the IAM policy for the key ring and replaces any existing policy already attached. - * `kms.KeyRingIAMBinding`: 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 key ring are preserved. - * `kms.KeyRingIAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the key ring are preserved. - - > **Note:** `kms.KeyRingIAMPolicy` **cannot** be used in conjunction with `kms.KeyRingIAMBinding` and `kms.KeyRingIAMMember` or they will fight over what your policy should be. - - > **Note:** `kms.KeyRingIAMBinding` resources **can be** used in conjunction with `kms.KeyRingIAMMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_kms\\_key\\_ring\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - key_ring = gcp.kms.KeyRingIAMPolicy("keyRing", - key_ring_id=keyring.id, - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - keyring = gcp.kms.KeyRing("keyring", location="global") - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - title="expires_after_2019_12_31", - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - ), - )]) - key_ring = gcp.kms.KeyRingIAMPolicy("keyRing", - key_ring_id=keyring.id, - policy_data=admin.policy_data) - ``` - - ## google\\_kms\\_key\\_ring\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMBinding("keyRing", - key_ring_id="your-key-ring-id", - members=["user:jane@example.com"], - role="roles/cloudkms.admin") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMBinding("keyRing", - condition=gcp.kms.KeyRingIAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - key_ring_id="your-key-ring-id", - members=["user:jane@example.com"], - role="roles/cloudkms.admin") - ``` - - ## google\\_kms\\_key\\_ring\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMMember("keyRing", - key_ring_id="your-key-ring-id", - member="user:jane@example.com", - role="roles/cloudkms.admin") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - key_ring = gcp.kms.KeyRingIAMMember("keyRing", - condition=gcp.kms.KeyRingIAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - key_ring_id="your-key-ring-id", - member="user:jane@example.com", - role="roles/cloudkms.admin") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/kms/key_ring_import_job.py b/sdk/python/pulumi_gcp/kms/key_ring_import_job.py index 9c10eb638c..30aa70b5cd 100644 --- a/sdk/python/pulumi_gcp/kms/key_ring_import_job.py +++ b/sdk/python/pulumi_gcp/kms/key_ring_import_job.py @@ -270,21 +270,6 @@ def __init__(__self__, protection_level: Optional[pulumi.Input[str]] = None, __props__=None): """ - A `KeyRingImportJob` can be used to create `CryptoKeys` and `CryptoKeyVersions` using pre-existing - key material, generated outside of Cloud KMS. A `KeyRingImportJob` expires 3 days after it is created. - Once expired, Cloud KMS will no longer be able to import or unwrap any key material that - was wrapped with the `KeyRingImportJob`'s public key. - - > **Note:** KeyRingImportJobs cannot be deleted from Google Cloud Platform. - Destroying a provider-managed KeyRingImportJob will remove it from state but - *will not delete the resource from the project.* - - To get more information about KeyRingImportJob, see: - - * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.importJobs) - * How-to Guides - * [Importing a key](https://cloud.google.com/kms/docs/importing-a-key) - ## Example Usage ## Import @@ -313,21 +298,6 @@ def __init__(__self__, args: KeyRingImportJobArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A `KeyRingImportJob` can be used to create `CryptoKeys` and `CryptoKeyVersions` using pre-existing - key material, generated outside of Cloud KMS. A `KeyRingImportJob` expires 3 days after it is created. - Once expired, Cloud KMS will no longer be able to import or unwrap any key material that - was wrapped with the `KeyRingImportJob`'s public key. - - > **Note:** KeyRingImportJobs cannot be deleted from Google Cloud Platform. - Destroying a provider-managed KeyRingImportJob will remove it from state but - *will not delete the resource from the project.* - - To get more information about KeyRingImportJob, see: - - * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.importJobs) - * How-to Guides - * [Importing a key](https://cloud.google.com/kms/docs/importing-a-key) - ## Example Usage ## Import diff --git a/sdk/python/pulumi_gcp/kms/secret_ciphertext.py b/sdk/python/pulumi_gcp/kms/secret_ciphertext.py index 54371b107f..fe82c002d3 100644 --- a/sdk/python/pulumi_gcp/kms/secret_ciphertext.py +++ b/sdk/python/pulumi_gcp/kms/secret_ciphertext.py @@ -159,21 +159,6 @@ def __init__(__self__, plaintext: Optional[pulumi.Input[str]] = None, __props__=None): """ - Encrypts secret data with Google Cloud KMS and provides access to the ciphertext. - - > **NOTE:** Using this resource will allow you to conceal secret data within your - resource definitions, but it does not take care of protecting that data in the - logging output, plan output, or state output. Please take care to secure your secret - data outside of resource definitions. - - To get more information about SecretCiphertext, see: - - * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt) - * How-to Guides - * [Encrypting and decrypting data with a symmetric key](https://cloud.google.com/kms/docs/encrypt-decrypt) - - > **Warning:** All arguments including `plaintext` and `additional_authenticated_data` will be stored in the raw state as plain-text. - ## Example Usage ### Kms Secret Ciphertext Basic @@ -225,21 +210,6 @@ def __init__(__self__, args: SecretCiphertextArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Encrypts secret data with Google Cloud KMS and provides access to the ciphertext. - - > **NOTE:** Using this resource will allow you to conceal secret data within your - resource definitions, but it does not take care of protecting that data in the - logging output, plan output, or state output. Please take care to secure your secret - data outside of resource definitions. - - To get more information about SecretCiphertext, see: - - * [API documentation](https://cloud.google.com/kms/docs/reference/rest/v1/projects.locations.keyRings.cryptoKeys/encrypt) - * How-to Guides - * [Encrypting and decrypting data with a symmetric key](https://cloud.google.com/kms/docs/encrypt-decrypt) - - > **Warning:** All arguments including `plaintext` and `additional_authenticated_data` will be stored in the raw state as plain-text. - ## Example Usage ### Kms Secret Ciphertext Basic diff --git a/sdk/python/pulumi_gcp/logging/billing_account_bucket_config.py b/sdk/python/pulumi_gcp/logging/billing_account_bucket_config.py index cea4e1020f..b633743a08 100644 --- a/sdk/python/pulumi_gcp/logging/billing_account_bucket_config.py +++ b/sdk/python/pulumi_gcp/logging/billing_account_bucket_config.py @@ -271,12 +271,6 @@ def __init__(__self__, retention_days: Optional[pulumi.Input[int]] = None, __props__=None): """ - Manages a billing account level logging bucket config. For more information see - [the official logging documentation](https://cloud.google.com/logging/docs/) and - [Storing Logs](https://cloud.google.com/logging/docs/storage). - - > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - ## Example Usage ```python @@ -317,12 +311,6 @@ def __init__(__self__, args: BillingAccountBucketConfigArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Manages a billing account level logging bucket config. For more information see - [the official logging documentation](https://cloud.google.com/logging/docs/) and - [Storing Logs](https://cloud.google.com/logging/docs/storage). - - > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/logging/billing_account_sink.py b/sdk/python/pulumi_gcp/logging/billing_account_sink.py index 0b3f78f6f6..c6bfeccfab 100644 --- a/sdk/python/pulumi_gcp/logging/billing_account_sink.py +++ b/sdk/python/pulumi_gcp/logging/billing_account_sink.py @@ -328,15 +328,6 @@ def __init__(__self__, name: Optional[pulumi.Input[str]] = None, __props__=None): """ - * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/billingAccounts.sinks) - * How-to Guides - * [Exporting Logs](https://cloud.google.com/logging/docs/export) - - > **Note** You must have the "Logs Configuration Writer" IAM role (`roles/logging.configWriter`) - [granted on the billing account](https://cloud.google.com/billing/reference/rest/v1/billingAccounts/getIamPolicy) to - the credentials used with this provider. [IAM roles granted on a billing account](https://cloud.google.com/billing/docs/how-to/billing-access) are separate from the - typical IAM roles granted on a project. - ## Example Usage ```python @@ -383,15 +374,6 @@ def __init__(__self__, args: BillingAccountSinkArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/billingAccounts.sinks) - * How-to Guides - * [Exporting Logs](https://cloud.google.com/logging/docs/export) - - > **Note** You must have the "Logs Configuration Writer" IAM role (`roles/logging.configWriter`) - [granted on the billing account](https://cloud.google.com/billing/reference/rest/v1/billingAccounts/getIamPolicy) to - the credentials used with this provider. [IAM roles granted on a billing account](https://cloud.google.com/billing/docs/how-to/billing-access) are separate from the - typical IAM roles granted on a project. - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/logging/folder_bucket_config.py b/sdk/python/pulumi_gcp/logging/folder_bucket_config.py index e1ee03a0e2..11040b7e3f 100644 --- a/sdk/python/pulumi_gcp/logging/folder_bucket_config.py +++ b/sdk/python/pulumi_gcp/logging/folder_bucket_config.py @@ -271,12 +271,6 @@ def __init__(__self__, retention_days: Optional[pulumi.Input[int]] = None, __props__=None): """ - Manages a folder-level logging bucket config. For more information see - [the official logging documentation](https://cloud.google.com/logging/docs/) and - [Storing Logs](https://cloud.google.com/logging/docs/storage). - - > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - ## Example Usage ```python @@ -319,12 +313,6 @@ def __init__(__self__, args: FolderBucketConfigArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Manages a folder-level logging bucket config. For more information see - [the official logging documentation](https://cloud.google.com/logging/docs/) and - [Storing Logs](https://cloud.google.com/logging/docs/storage). - - > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/logging/folder_exclusion.py b/sdk/python/pulumi_gcp/logging/folder_exclusion.py index 9b7bc06417..9396020d9d 100644 --- a/sdk/python/pulumi_gcp/logging/folder_exclusion.py +++ b/sdk/python/pulumi_gcp/logging/folder_exclusion.py @@ -213,14 +213,6 @@ def __init__(__self__, name: Optional[pulumi.Input[str]] = None, __props__=None): """ - Manages a folder-level logging exclusion. For more information see: - - * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/folders.exclusions) - * How-to Guides - * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - - > You can specify exclusions for log sinks created by the provider by using the exclusions field of `logging.FolderSink` - ## Example Usage ```python @@ -263,14 +255,6 @@ def __init__(__self__, args: FolderExclusionArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Manages a folder-level logging exclusion. For more information see: - - * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/folders.exclusions) - * How-to Guides - * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - - > You can specify exclusions for log sinks created by the provider by using the exclusions field of `logging.FolderSink` - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/logging/organization_bucket_config.py b/sdk/python/pulumi_gcp/logging/organization_bucket_config.py index cafeb2e423..f3d6431e7a 100644 --- a/sdk/python/pulumi_gcp/logging/organization_bucket_config.py +++ b/sdk/python/pulumi_gcp/logging/organization_bucket_config.py @@ -271,12 +271,6 @@ def __init__(__self__, retention_days: Optional[pulumi.Input[int]] = None, __props__=None): """ - Manages a organization-level logging bucket config. For more information see - [the official logging documentation](https://cloud.google.com/logging/docs/) and - [Storing Logs](https://cloud.google.com/logging/docs/storage). - - > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - ## Example Usage ```python @@ -317,12 +311,6 @@ def __init__(__self__, args: OrganizationBucketConfigArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Manages a organization-level logging bucket config. For more information see - [the official logging documentation](https://cloud.google.com/logging/docs/) and - [Storing Logs](https://cloud.google.com/logging/docs/storage). - - > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/logging/organization_exclusion.py b/sdk/python/pulumi_gcp/logging/organization_exclusion.py index 76caca8c3b..98424ce777 100644 --- a/sdk/python/pulumi_gcp/logging/organization_exclusion.py +++ b/sdk/python/pulumi_gcp/logging/organization_exclusion.py @@ -209,14 +209,6 @@ def __init__(__self__, org_id: Optional[pulumi.Input[str]] = None, __props__=None): """ - Manages an organization-level logging exclusion. For more information see: - - * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/organizations.exclusions) - * How-to Guides - * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - - > You can specify exclusions for log sinks created by the provider by using the exclusions field of `logging.OrganizationSink` - ## Example Usage ```python @@ -255,14 +247,6 @@ def __init__(__self__, args: OrganizationExclusionArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Manages an organization-level logging exclusion. For more information see: - - * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/organizations.exclusions) - * How-to Guides - * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - - > You can specify exclusions for log sinks created by the provider by using the exclusions field of `logging.OrganizationSink` - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/logging/project_bucket_config.py b/sdk/python/pulumi_gcp/logging/project_bucket_config.py index 602e776989..c153eedfce 100644 --- a/sdk/python/pulumi_gcp/logging/project_bucket_config.py +++ b/sdk/python/pulumi_gcp/logging/project_bucket_config.py @@ -263,12 +263,6 @@ def __init__(__self__, retention_days: Optional[pulumi.Input[int]] = None, __props__=None): """ - Manages a project-level logging bucket config. For more information see - [the official logging documentation](https://cloud.google.com/logging/docs/) and - [Storing Logs](https://cloud.google.com/logging/docs/storage). - - > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - ## Example Usage ```python @@ -348,12 +342,6 @@ def __init__(__self__, args: ProjectBucketConfigArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Manages a project-level logging bucket config. For more information see - [the official logging documentation](https://cloud.google.com/logging/docs/) and - [Storing Logs](https://cloud.google.com/logging/docs/storage). - - > **Note:** Logging buckets are automatically created for a given folder, project, organization, billingAccount and cannot be deleted. Creating a resource of this type will acquire and update the resource that already exists at the desired location. These buckets cannot be removed so deleting this resource will remove the bucket config from your state but will leave the logging bucket unchanged. The buckets that are currently automatically created are "_Default" and "_Required". - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/logging/project_exclusion.py b/sdk/python/pulumi_gcp/logging/project_exclusion.py index 457764d062..a603af2593 100644 --- a/sdk/python/pulumi_gcp/logging/project_exclusion.py +++ b/sdk/python/pulumi_gcp/logging/project_exclusion.py @@ -214,14 +214,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - Manages a project-level logging exclusion. For more information see: - - * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.exclusions) - * How-to Guides - * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - - > You can specify exclusions for log sinks created by the provider by using the exclusions field of `logging.ProjectSink` - ## Example Usage ```python @@ -260,14 +252,6 @@ def __init__(__self__, args: ProjectExclusionArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Manages a project-level logging exclusion. For more information see: - - * [API documentation](https://cloud.google.com/logging/docs/reference/v2/rest/v2/projects.exclusions) - * How-to Guides - * [Excluding Logs](https://cloud.google.com/logging/docs/exclusions) - - > You can specify exclusions for log sinks created by the provider by using the exclusions field of `logging.ProjectSink` - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/monitoring/notification_channel.py b/sdk/python/pulumi_gcp/monitoring/notification_channel.py index 48429bc14c..50a04aafdb 100644 --- a/sdk/python/pulumi_gcp/monitoring/notification_channel.py +++ b/sdk/python/pulumi_gcp/monitoring/notification_channel.py @@ -36,12 +36,10 @@ def __init__(__self__, *, to remove the channel). If false, channels that are still referenced by an existing alerting policy will fail to be deleted in a delete operation. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Configuration fields that define the channel and its behavior. The - permissible and required labels are specified in the - NotificationChannelDescriptor corresponding to the type field. - Labels with sensitive data are obfuscated by the API and therefore the provider cannot - determine if there are upstream changes to these fields. They can also be configured via - the sensitive_labels block, but cannot be configured in both places. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + sensitive_labels block, but cannot be configured in both places. :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['NotificationChannelSensitiveLabelsArgs'] sensitive_labels: Different notification type behaviors are configured primarily using the the `labels` field on this @@ -139,12 +137,10 @@ def force_delete(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: """ - Configuration fields that define the channel and its behavior. The - permissible and required labels are specified in the - NotificationChannelDescriptor corresponding to the type field. - Labels with sensitive data are obfuscated by the API and therefore the provider cannot - determine if there are upstream changes to these fields. They can also be configured via - the sensitive_labels block, but cannot be configured in both places. + Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + sensitive_labels block, but cannot be configured in both places. """ return pulumi.get(self, "labels") @@ -220,12 +216,10 @@ def __init__(__self__, *, to remove the channel). If false, channels that are still referenced by an existing alerting policy will fail to be deleted in a delete operation. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Configuration fields that define the channel and its behavior. The - permissible and required labels are specified in the - NotificationChannelDescriptor corresponding to the type field. - Labels with sensitive data are obfuscated by the API and therefore the provider cannot - determine if there are upstream changes to these fields. They can also be configured via - the sensitive_labels block, but cannot be configured in both places. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + sensitive_labels block, but cannot be configured in both places. :param pulumi.Input[str] name: The full REST resource name for this channel. The syntax is: projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID] The [CHANNEL_ID] is automatically assigned by the server on creation. @@ -321,12 +315,10 @@ def force_delete(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: """ - Configuration fields that define the channel and its behavior. The - permissible and required labels are specified in the - NotificationChannelDescriptor corresponding to the type field. - Labels with sensitive data are obfuscated by the API and therefore the provider cannot - determine if there are upstream changes to these fields. They can also be configured via - the sensitive_labels block, but cannot be configured in both places. + Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + sensitive_labels block, but cannot be configured in both places. """ return pulumi.get(self, "labels") @@ -432,33 +424,6 @@ def __init__(__self__, user_labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, __props__=None): """ - A NotificationChannel is a medium through which an alert is delivered - when a policy violation is detected. Examples of channels include email, SMS, - and third-party messaging applications. Fields containing sensitive information - like authentication tokens or contact info are only partially populated on retrieval. - - Notification Channels are designed to be flexible and are made up of a supported `type` - and labels to configure that channel. Each `type` has specific labels that need to be - present for that channel to be correctly configured. The labels that are required to be - present for one channel `type` are often different than those required for another. - Due to these loose constraints it's often best to set up a channel through the UI - and import it to the provider when setting up a brand new channel type to determine which - labels are required. - - A list of supported channels per project the `list` endpoint can be - accessed programmatically or through the api explorer at https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannelDescriptors/list . - This provides the channel type and all of the required labels that must be passed. - - To get more information about NotificationChannel, see: - - * [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannels) - * How-to Guides - * [Notification Options](https://cloud.google.com/monitoring/support/notification-options) - * [Monitoring API Documentation](https://cloud.google.com/monitoring/api/v3/) - - > **Warning:** All arguments including `sensitive_labels.auth_token`, `sensitive_labels.password`, and `sensitive_labels.service_key` will be stored in the raw - state as plain-text. - ## Example Usage ### Notification Channel Basic @@ -509,12 +474,10 @@ def __init__(__self__, to remove the channel). If false, channels that are still referenced by an existing alerting policy will fail to be deleted in a delete operation. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Configuration fields that define the channel and its behavior. The - permissible and required labels are specified in the - NotificationChannelDescriptor corresponding to the type field. - Labels with sensitive data are obfuscated by the API and therefore the provider cannot - determine if there are upstream changes to these fields. They can also be configured via - the sensitive_labels block, but cannot be configured in both places. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + sensitive_labels block, but cannot be configured in both places. :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[pulumi.InputType['NotificationChannelSensitiveLabelsArgs']] sensitive_labels: Different notification type behaviors are configured primarily using the the `labels` field on this @@ -534,33 +497,6 @@ def __init__(__self__, args: NotificationChannelArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A NotificationChannel is a medium through which an alert is delivered - when a policy violation is detected. Examples of channels include email, SMS, - and third-party messaging applications. Fields containing sensitive information - like authentication tokens or contact info are only partially populated on retrieval. - - Notification Channels are designed to be flexible and are made up of a supported `type` - and labels to configure that channel. Each `type` has specific labels that need to be - present for that channel to be correctly configured. The labels that are required to be - present for one channel `type` are often different than those required for another. - Due to these loose constraints it's often best to set up a channel through the UI - and import it to the provider when setting up a brand new channel type to determine which - labels are required. - - A list of supported channels per project the `list` endpoint can be - accessed programmatically or through the api explorer at https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannelDescriptors/list . - This provides the channel type and all of the required labels that must be passed. - - To get more information about NotificationChannel, see: - - * [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.notificationChannels) - * How-to Guides - * [Notification Options](https://cloud.google.com/monitoring/support/notification-options) - * [Monitoring API Documentation](https://cloud.google.com/monitoring/api/v3/) - - > **Warning:** All arguments including `sensitive_labels.auth_token`, `sensitive_labels.password`, and `sensitive_labels.service_key` will be stored in the raw - state as plain-text. - ## Example Usage ### Notification Channel Basic @@ -683,12 +619,10 @@ def get(resource_name: str, to remove the channel). If false, channels that are still referenced by an existing alerting policy will fail to be deleted in a delete operation. - :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Configuration fields that define the channel and its behavior. The - permissible and required labels are specified in the - NotificationChannelDescriptor corresponding to the type field. - Labels with sensitive data are obfuscated by the API and therefore the provider cannot - determine if there are upstream changes to these fields. They can also be configured via - the sensitive_labels block, but cannot be configured in both places. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + sensitive_labels block, but cannot be configured in both places. :param pulumi.Input[str] name: The full REST resource name for this channel. The syntax is: projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID] The [CHANNEL_ID] is automatically assigned by the server on creation. @@ -762,12 +696,10 @@ def force_delete(self) -> pulumi.Output[Optional[bool]]: @pulumi.getter def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: """ - Configuration fields that define the channel and its behavior. The - permissible and required labels are specified in the - NotificationChannelDescriptor corresponding to the type field. - Labels with sensitive data are obfuscated by the API and therefore the provider cannot - determine if there are upstream changes to these fields. They can also be configured via - the sensitive_labels block, but cannot be configured in both places. + Configuration fields that define the channel and its behavior. The permissible and required labels are specified in the + NotificationChannelDescriptor corresponding to the type field. Labels with sensitive data are obfuscated by the API and + therefore Terraform cannot determine if there are upstream changes to these fields. They can also be configured via the + sensitive_labels block, but cannot be configured in both places. """ return pulumi.get(self, "labels") diff --git a/sdk/python/pulumi_gcp/monitoring/slo.py b/sdk/python/pulumi_gcp/monitoring/slo.py index 5d9cd26868..a7490fbafc 100644 --- a/sdk/python/pulumi_gcp/monitoring/slo.py +++ b/sdk/python/pulumi_gcp/monitoring/slo.py @@ -561,7 +561,7 @@ def __init__(__self__, appeng_slo = gcp.monitoring.Slo("appengSlo", service=default.service_id, slo_id="ae-slo", - display_name="Test SLO for App Engine", + display_name="Terraform Test SLO for App Engine", goal=0.9, calendar_period="DAY", basic_sli=gcp.monitoring.SloBasicSliArgs( @@ -586,7 +586,7 @@ def __init__(__self__, request_based_slo = gcp.monitoring.Slo("requestBasedSlo", service=customsrv.service_id, slo_id="consumed-api-slo", - display_name="Test SLO with request based SLI (good total ratio)", + display_name="Terraform Test SLO with request based SLI (good total ratio)", goal=0.9, rolling_period_days=30, request_based_sli=gcp.monitoring.SloRequestBasedSliArgs( @@ -684,7 +684,7 @@ def __init__(__self__, appeng_slo = gcp.monitoring.Slo("appengSlo", service=default.service_id, slo_id="ae-slo", - display_name="Test SLO for App Engine", + display_name="Terraform Test SLO for App Engine", goal=0.9, calendar_period="DAY", basic_sli=gcp.monitoring.SloBasicSliArgs( @@ -709,7 +709,7 @@ def __init__(__self__, request_based_slo = gcp.monitoring.Slo("requestBasedSlo", service=customsrv.service_id, slo_id="consumed-api-slo", - display_name="Test SLO with request based SLI (good total ratio)", + display_name="Terraform Test SLO with request based SLI (good total ratio)", goal=0.9, rolling_period_days=30, request_based_sli=gcp.monitoring.SloRequestBasedSliArgs( diff --git a/sdk/python/pulumi_gcp/monitoring/uptime_check_config.py b/sdk/python/pulumi_gcp/monitoring/uptime_check_config.py index cd3ae84bc6..0730450482 100644 --- a/sdk/python/pulumi_gcp/monitoring/uptime_check_config.py +++ b/sdk/python/pulumi_gcp/monitoring/uptime_check_config.py @@ -457,17 +457,6 @@ def __init__(__self__, timeout: Optional[pulumi.Input[str]] = None, __props__=None): """ - This message configures which resources and services to monitor for availability. - - To get more information about UptimeCheckConfig, see: - - * [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.uptimeCheckConfigs) - * How-to Guides - * [Official Documentation](https://cloud.google.com/monitoring/uptime-checks/) - - > **Warning:** All arguments including `http_check.auth_info.password` will be stored in the raw - state as plain-text. - ## Example Usage ### Uptime Check Config Http @@ -634,17 +623,6 @@ def __init__(__self__, args: UptimeCheckConfigArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - This message configures which resources and services to monitor for availability. - - To get more information about UptimeCheckConfig, see: - - * [API documentation](https://cloud.google.com/monitoring/api/ref_v3/rest/v3/projects.uptimeCheckConfigs) - * How-to Guides - * [Official Documentation](https://cloud.google.com/monitoring/uptime-checks/) - - > **Warning:** All arguments including `http_check.auth_info.password` will be stored in the raw - state as plain-text. - ## Example Usage ### Uptime Check Config Http diff --git a/sdk/python/pulumi_gcp/notebooks/instance.py b/sdk/python/pulumi_gcp/notebooks/instance.py index 63e8fbe3c2..dcae9feb25 100644 --- a/sdk/python/pulumi_gcp/notebooks/instance.py +++ b/sdk/python/pulumi_gcp/notebooks/instance.py @@ -1320,6 +1320,7 @@ def __init__(__self__, machine_type="e2-medium", metadata={ "proxy-mode": "service_account", + "terraform": "true", }) ``` ### Notebook Instance Basic Gpu @@ -1368,6 +1369,9 @@ def __init__(__self__, subnet=my_subnetwork.id, labels={ "k": "val", + }, + metadata={ + "terraform": "true", }) ``` @@ -1510,6 +1514,7 @@ def __init__(__self__, machine_type="e2-medium", metadata={ "proxy-mode": "service_account", + "terraform": "true", }) ``` ### Notebook Instance Basic Gpu @@ -1558,6 +1563,9 @@ def __init__(__self__, subnet=my_subnetwork.id, labels={ "k": "val", + }, + metadata={ + "terraform": "true", }) ``` diff --git a/sdk/python/pulumi_gcp/organizations/_inputs.py b/sdk/python/pulumi_gcp/organizations/_inputs.py index a131776ebc..ac694b51a8 100644 --- a/sdk/python/pulumi_gcp/organizations/_inputs.py +++ b/sdk/python/pulumi_gcp/organizations/_inputs.py @@ -93,6 +93,11 @@ def __init__(__self__, *, expression: pulumi.Input[str], title: pulumi.Input[str], description: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[str] expression: Textual representation of an expression in Common Expression Language syntax. + :param pulumi.Input[str] title: A title for the expression, i.e. a short string describing its purpose. + :param pulumi.Input[str] description: An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + """ pulumi.set(__self__, "expression", expression) pulumi.set(__self__, "title", title) if description is not None: @@ -101,6 +106,9 @@ def __init__(__self__, *, @property @pulumi.getter def expression(self) -> pulumi.Input[str]: + """ + Textual representation of an expression in Common Expression Language syntax. + """ return pulumi.get(self, "expression") @expression.setter @@ -110,6 +118,9 @@ def expression(self, value: pulumi.Input[str]): @property @pulumi.getter def title(self) -> pulumi.Input[str]: + """ + A title for the expression, i.e. a short string describing its purpose. + """ return pulumi.get(self, "title") @title.setter @@ -119,6 +130,9 @@ def title(self, value: pulumi.Input[str]): @property @pulumi.getter def description(self) -> Optional[pulumi.Input[str]]: + """ + An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + """ return pulumi.get(self, "description") @description.setter @@ -186,12 +200,7 @@ def __init__(__self__, *, exempted_members: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None): """ :param pulumi.Input[str] log_type: Permission type for which logging is to be configured. Must be one of `DATA_READ`, `DATA_WRITE`, or `ADMIN_READ`. - :param pulumi.Input[Sequence[pulumi.Input[str]]] exempted_members: Identities that do not cause logging for this type of permission. - Each entry can have one of the following values: - * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + :param pulumi.Input[Sequence[pulumi.Input[str]]] exempted_members: Identities that do not cause logging for this type of permission. The format is the same as that for `members`. """ pulumi.set(__self__, "log_type", log_type) if exempted_members is not None: @@ -213,12 +222,7 @@ def log_type(self, value: pulumi.Input[str]): @pulumi.getter(name="exemptedMembers") def exempted_members(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: """ - Identities that do not cause logging for this type of permission. - Each entry can have one of the following values: - * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + Identities that do not cause logging for this type of permission. The format is the same as that for `members`. """ return pulumi.get(self, "exempted_members") diff --git a/sdk/python/pulumi_gcp/organizations/folder.py b/sdk/python/pulumi_gcp/organizations/folder.py index 6334b21794..b8cd6eac8d 100644 --- a/sdk/python/pulumi_gcp/organizations/folder.py +++ b/sdk/python/pulumi_gcp/organizations/folder.py @@ -172,20 +172,6 @@ def __init__(__self__, parent: Optional[pulumi.Input[str]] = None, __props__=None): """ - Allows management of a Google Cloud Platform folder. For more information see - [the official documentation](https://cloud.google.com/resource-manager/docs/creating-managing-folders) - and - [API](https://cloud.google.com/resource-manager/reference/rest/v2/folders). - - A folder can contain projects, other folders, or a combination of both. You can use folders to group projects under an organization in a hierarchy. For example, your organization might contain multiple departments, each with its own set of Cloud Platform resources. Folders allows you to group these resources on a per-department basis. Folders are used to group resources that share common IAM policies. - - Folders created live inside an Organization. See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - - The service account used to run the provider when creating a `organizations.Folder` - resource must have `roles/resourcemanager.folderCreator`. See the - [Access Control for Folders Using IAM](https://cloud.google.com/resource-manager/docs/access-control-folders) - doc for more information. - ## Example Usage ```python @@ -228,20 +214,6 @@ def __init__(__self__, args: FolderArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Allows management of a Google Cloud Platform folder. For more information see - [the official documentation](https://cloud.google.com/resource-manager/docs/creating-managing-folders) - and - [API](https://cloud.google.com/resource-manager/reference/rest/v2/folders). - - A folder can contain projects, other folders, or a combination of both. You can use folders to group projects under an organization in a hierarchy. For example, your organization might contain multiple departments, each with its own set of Cloud Platform resources. Folders allows you to group these resources on a per-department basis. Folders are used to group resources that share common IAM policies. - - Folders created live inside an Organization. See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - - The service account used to run the provider when creating a `organizations.Folder` - resource must have `roles/resourcemanager.folderCreator`. See the - [Access Control for Folders Using IAM](https://cloud.google.com/resource-manager/docs/access-control-folders) - doc for more information. - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/organizations/iam_audit_config.py b/sdk/python/pulumi_gcp/organizations/iam_audit_config.py index feff69cafd..a5accba3d1 100644 --- a/sdk/python/pulumi_gcp/organizations/iam_audit_config.py +++ b/sdk/python/pulumi_gcp/organizations/iam_audit_config.py @@ -22,7 +22,9 @@ def __init__(__self__, *, """ The set of arguments for constructing a IamAuditConfig resource. :param pulumi.Input[Sequence[pulumi.Input['IamAuditConfigAuditLogConfigArgs']]] audit_log_configs: The configuration for logging of each type of permission. This can be specified multiple times. Structure is documented below. - :param pulumi.Input[str] org_id: The numeric ID of the organization in which you want to manage the audit logging config. + :param pulumi.Input[str] org_id: The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. :param pulumi.Input[str] service: Service which will be enabled for audit logging. The special value `allServices` covers all services. Note that if there are google\\_organization\\_iam\\_audit\\_config resources covering both `allServices` and a specific service then the union of the two AuditConfigs is used for that service: the `log_types` specified in each `audit_log_config` are enabled, and the `exempted_members` in each `audit_log_config` are exempted. """ pulumi.set(__self__, "audit_log_configs", audit_log_configs) @@ -45,7 +47,9 @@ def audit_log_configs(self, value: pulumi.Input[Sequence[pulumi.Input['IamAuditC @pulumi.getter(name="orgId") def org_id(self) -> pulumi.Input[str]: """ - The numeric ID of the organization in which you want to manage the audit logging config. + The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. """ return pulumi.get(self, "org_id") @@ -76,8 +80,10 @@ def __init__(__self__, *, """ Input properties used for looking up and filtering IamAuditConfig resources. :param pulumi.Input[Sequence[pulumi.Input['IamAuditConfigAuditLogConfigArgs']]] audit_log_configs: The configuration for logging of each type of permission. This can be specified multiple times. Structure is documented below. - :param pulumi.Input[str] etag: The etag of iam policy - :param pulumi.Input[str] org_id: The numeric ID of the organization in which you want to manage the audit logging config. + :param pulumi.Input[str] etag: (Computed) The etag of the organization's IAM policy. + :param pulumi.Input[str] org_id: The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. :param pulumi.Input[str] service: Service which will be enabled for audit logging. The special value `allServices` covers all services. Note that if there are google\\_organization\\_iam\\_audit\\_config resources covering both `allServices` and a specific service then the union of the two AuditConfigs is used for that service: the `log_types` specified in each `audit_log_config` are enabled, and the `exempted_members` in each `audit_log_config` are exempted. """ if audit_log_configs is not None: @@ -105,7 +111,7 @@ def audit_log_configs(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[' @pulumi.getter def etag(self) -> Optional[pulumi.Input[str]]: """ - The etag of iam policy + (Computed) The etag of the organization's IAM policy. """ return pulumi.get(self, "etag") @@ -117,7 +123,9 @@ def etag(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="orgId") def org_id(self) -> Optional[pulumi.Input[str]]: """ - The numeric ID of the organization in which you want to manage the audit logging config. + The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. """ return pulumi.get(self, "org_id") @@ -148,35 +156,52 @@ def __init__(__self__, service: Optional[pulumi.Input[str]] = None, __props__=None): """ - Allows management of audit logging config for a given service for a Google Cloud Platform Organization. + ## Import - ## Example Usage + IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. - ```python - import pulumi - import pulumi_gcp as gcp + This member resource can be imported using the `org_id`, role, and member e.g. - config = gcp.organizations.IamAuditConfig("config", - audit_log_configs=[gcp.organizations.IamAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - )], - org_id="your-organization-id", - service="allServices") + ```sh + $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-orgid roles/viewer user:foo@example.com" ``` - ## Import + IAM binding imports use space-delimited identifiers; the resource in question and the role. + + This binding resource can be imported using the `org_id` and role, e.g. + + ```sh + $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-org-id roles/viewer" + ``` + + IAM policy imports use the identifier of the resource in question. + + This policy resource can be imported using the `org_id`. + + ```sh + $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization your-org-id + ``` + + IAM audit config imports use the identifier of the resource in question and the service, e.g. + + ```sh + $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-organization-id foo.googleapis.com" + ``` + + -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the - IAM audit config imports use the identifier of the resource in question and the service, e.g. + full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure ```sh - $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig config "your-organization-id foo.googleapis.com" + $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig to include the title of condition, e.g. `google_organization_iam_binding.my_organization "your-org-id roles/{{role_id}} condition-title"` ``` :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['IamAuditConfigAuditLogConfigArgs']]]] audit_log_configs: The configuration for logging of each type of permission. This can be specified multiple times. Structure is documented below. - :param pulumi.Input[str] org_id: The numeric ID of the organization in which you want to manage the audit logging config. + :param pulumi.Input[str] org_id: The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. :param pulumi.Input[str] service: Service which will be enabled for audit logging. The special value `allServices` covers all services. Note that if there are google\\_organization\\_iam\\_audit\\_config resources covering both `allServices` and a specific service then the union of the two AuditConfigs is used for that service: the `log_types` specified in each `audit_log_config` are enabled, and the `exempted_members` in each `audit_log_config` are exempted. """ ... @@ -186,29 +211,44 @@ def __init__(__self__, args: IamAuditConfigArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Allows management of audit logging config for a given service for a Google Cloud Platform Organization. + ## Import - ## Example Usage + IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. - ```python - import pulumi - import pulumi_gcp as gcp + This member resource can be imported using the `org_id`, role, and member e.g. - config = gcp.organizations.IamAuditConfig("config", - audit_log_configs=[gcp.organizations.IamAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - )], - org_id="your-organization-id", - service="allServices") + ```sh + $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-orgid roles/viewer user:foo@example.com" ``` - ## Import + IAM binding imports use space-delimited identifiers; the resource in question and the role. + + This binding resource can be imported using the `org_id` and role, e.g. + + ```sh + $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-org-id roles/viewer" + ``` + + IAM policy imports use the identifier of the resource in question. + + This policy resource can be imported using the `org_id`. + + ```sh + $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization your-org-id + ``` + + IAM audit config imports use the identifier of the resource in question and the service, e.g. + + ```sh + $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig my_organization "your-organization-id foo.googleapis.com" + ``` + + -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the - IAM audit config imports use the identifier of the resource in question and the service, e.g. + full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure ```sh - $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig config "your-organization-id foo.googleapis.com" + $ pulumi import gcp:organizations/iamAuditConfig:IamAuditConfig to include the title of condition, e.g. `google_organization_iam_binding.my_organization "your-org-id roles/{{role_id}} condition-title"` ``` :param str resource_name: The name of the resource. @@ -270,8 +310,10 @@ def get(resource_name: str, :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['IamAuditConfigAuditLogConfigArgs']]]] audit_log_configs: The configuration for logging of each type of permission. This can be specified multiple times. Structure is documented below. - :param pulumi.Input[str] etag: The etag of iam policy - :param pulumi.Input[str] org_id: The numeric ID of the organization in which you want to manage the audit logging config. + :param pulumi.Input[str] etag: (Computed) The etag of the organization's IAM policy. + :param pulumi.Input[str] org_id: The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. :param pulumi.Input[str] service: Service which will be enabled for audit logging. The special value `allServices` covers all services. Note that if there are google\\_organization\\_iam\\_audit\\_config resources covering both `allServices` and a specific service then the union of the two AuditConfigs is used for that service: the `log_types` specified in each `audit_log_config` are enabled, and the `exempted_members` in each `audit_log_config` are exempted. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -296,7 +338,7 @@ def audit_log_configs(self) -> pulumi.Output[Sequence['outputs.IamAuditConfigAud @pulumi.getter def etag(self) -> pulumi.Output[str]: """ - The etag of iam policy + (Computed) The etag of the organization's IAM policy. """ return pulumi.get(self, "etag") @@ -304,7 +346,9 @@ def etag(self) -> pulumi.Output[str]: @pulumi.getter(name="orgId") def org_id(self) -> pulumi.Output[str]: """ - The numeric ID of the organization in which you want to manage the audit logging config. + The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. """ return pulumi.get(self, "org_id") diff --git a/sdk/python/pulumi_gcp/organizations/iam_binding.py b/sdk/python/pulumi_gcp/organizations/iam_binding.py index 8e88b5189e..ca27ef85ae 100644 --- a/sdk/python/pulumi_gcp/organizations/iam_binding.py +++ b/sdk/python/pulumi_gcp/organizations/iam_binding.py @@ -22,11 +22,14 @@ def __init__(__self__, *, condition: Optional[pulumi.Input['IAMBindingConditionArgs']] = None): """ The set of arguments for constructing a IAMBinding resource. - :param pulumi.Input[Sequence[pulumi.Input[str]]] members: A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - :param pulumi.Input[str] org_id: The numeric ID of the organization in which you want to create a custom role. + :param pulumi.Input[str] org_id: The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. :param pulumi.Input[str] role: The role that should be applied. Only one `organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. + :param pulumi.Input['IAMBindingConditionArgs'] condition: An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. """ pulumi.set(__self__, "members", members) pulumi.set(__self__, "org_id", org_id) @@ -37,9 +40,6 @@ def __init__(__self__, *, @property @pulumi.getter def members(self) -> pulumi.Input[Sequence[pulumi.Input[str]]]: - """ - A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - """ return pulumi.get(self, "members") @members.setter @@ -50,7 +50,9 @@ def members(self, value: pulumi.Input[Sequence[pulumi.Input[str]]]): @pulumi.getter(name="orgId") def org_id(self) -> pulumi.Input[str]: """ - The numeric ID of the organization in which you want to create a custom role. + The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. """ return pulumi.get(self, "org_id") @@ -64,7 +66,7 @@ def role(self) -> pulumi.Input[str]: """ The role that should be applied. Only one `organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. """ return pulumi.get(self, "role") @@ -75,6 +77,10 @@ def role(self, value: pulumi.Input[str]): @property @pulumi.getter def condition(self) -> Optional[pulumi.Input['IAMBindingConditionArgs']]: + """ + An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. + """ return pulumi.get(self, "condition") @condition.setter @@ -92,12 +98,15 @@ def __init__(__self__, *, role: Optional[pulumi.Input[str]] = None): """ Input properties used for looking up and filtering IAMBinding resources. + :param pulumi.Input['IAMBindingConditionArgs'] condition: An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. :param pulumi.Input[str] etag: (Computed) The etag of the organization's IAM policy. - :param pulumi.Input[Sequence[pulumi.Input[str]]] members: A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - :param pulumi.Input[str] org_id: The numeric ID of the organization in which you want to create a custom role. + :param pulumi.Input[str] org_id: The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. :param pulumi.Input[str] role: The role that should be applied. Only one `organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. """ if condition is not None: pulumi.set(__self__, "condition", condition) @@ -113,6 +122,10 @@ def __init__(__self__, *, @property @pulumi.getter def condition(self) -> Optional[pulumi.Input['IAMBindingConditionArgs']]: + """ + An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. + """ return pulumi.get(self, "condition") @condition.setter @@ -134,9 +147,6 @@ def etag(self, value: Optional[pulumi.Input[str]]): @property @pulumi.getter def members(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]: - """ - A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - """ return pulumi.get(self, "members") @members.setter @@ -147,7 +157,9 @@ def members(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): @pulumi.getter(name="orgId") def org_id(self) -> Optional[pulumi.Input[str]]: """ - The numeric ID of the organization in which you want to create a custom role. + The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. """ return pulumi.get(self, "org_id") @@ -161,7 +173,7 @@ def role(self) -> Optional[pulumi.Input[str]]: """ The role that should be applied. Only one `organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. """ return pulumi.get(self, "role") @@ -181,50 +193,56 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Allows creation and management of a single binding within IAM policy for - an existing Google Cloud Platform Organization. + ## Import - > **Note:** This resource __must not__ be used in conjunction with - `organizations.IAMMember` for the __same role__ or they will fight over - what your policy should be. + IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. - > **Note:** On create, this resource will overwrite members of any existing roles. - Use `pulumi import` and inspect the `output to ensure - your existing members are preserved. + This member resource can be imported using the `org_id`, role, and member e.g. - ## Example Usage + ```sh + $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-orgid roles/viewer user:foo@example.com" + ``` + + IAM binding imports use space-delimited identifiers; the resource in question and the role. - ```python - import pulumi - import pulumi_gcp as gcp + This binding resource can be imported using the `org_id` and role, e.g. - binding = gcp.organizations.IAMBinding("binding", - members=["user:alice@gmail.com"], - org_id="123456789", - role="roles/browser") + ```sh + $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-org-id roles/viewer" ``` - ## Import + IAM policy imports use the identifier of the resource in question. - IAM binding imports use space-delimited identifiers; first the resource in question and then the role. + This policy resource can be imported using the `org_id`. - These bindings can be imported using the `org_id` and role, e.g. + ```sh + $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization your-org-id + ``` + + IAM audit config imports use the identifier of the resource in question and the service, e.g. ```sh - $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_org "your-org-id roles/viewer" + $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-organization-id foo.googleapis.com" ``` -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the - full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. + full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure + + ```sh + $ pulumi import gcp:organizations/iAMBinding:IAMBinding to include the title of condition, e.g. `google_organization_iam_binding.my_organization "your-org-id roles/{{role_id}} condition-title"` + ``` :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. - :param pulumi.Input[Sequence[pulumi.Input[str]]] members: A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - :param pulumi.Input[str] org_id: The numeric ID of the organization in which you want to create a custom role. + :param pulumi.Input[pulumi.InputType['IAMBindingConditionArgs']] condition: An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. + :param pulumi.Input[str] org_id: The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. :param pulumi.Input[str] role: The role that should be applied. Only one `organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. """ ... @overload @@ -233,42 +251,45 @@ def __init__(__self__, args: IAMBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Allows creation and management of a single binding within IAM policy for - an existing Google Cloud Platform Organization. + ## Import - > **Note:** This resource __must not__ be used in conjunction with - `organizations.IAMMember` for the __same role__ or they will fight over - what your policy should be. + IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. - > **Note:** On create, this resource will overwrite members of any existing roles. - Use `pulumi import` and inspect the `output to ensure - your existing members are preserved. + This member resource can be imported using the `org_id`, role, and member e.g. - ## Example Usage + ```sh + $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-orgid roles/viewer user:foo@example.com" + ``` - ```python - import pulumi - import pulumi_gcp as gcp + IAM binding imports use space-delimited identifiers; the resource in question and the role. - binding = gcp.organizations.IAMBinding("binding", - members=["user:alice@gmail.com"], - org_id="123456789", - role="roles/browser") + This binding resource can be imported using the `org_id` and role, e.g. + + ```sh + $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-org-id roles/viewer" ``` - ## Import + IAM policy imports use the identifier of the resource in question. + + This policy resource can be imported using the `org_id`. - IAM binding imports use space-delimited identifiers; first the resource in question and then the role. + ```sh + $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization your-org-id + ``` - These bindings can be imported using the `org_id` and role, e.g. + IAM audit config imports use the identifier of the resource in question and the service, e.g. ```sh - $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_org "your-org-id roles/viewer" + $ pulumi import gcp:organizations/iAMBinding:IAMBinding my_organization "your-organization-id foo.googleapis.com" ``` -> **Custom Roles**If you're importing a IAM resource with a custom role, make sure to use the - full name of the custom role, e.g. `[projects/my-project|organizations/my-org]/roles/my-custom-role`. + full name of the custom role, e.g. `organizations/{{org_id}}/roles/{{role_id}}`. -> **Conditional IAM Bindings**If you're importing a IAM binding with a condition block, make sure + + ```sh + $ pulumi import gcp:organizations/iAMBinding:IAMBinding to include the title of condition, e.g. `google_organization_iam_binding.my_organization "your-org-id roles/{{role_id}} condition-title"` + ``` :param str resource_name: The name of the resource. :param IAMBindingArgs args: The arguments to use to populate this resource's properties. @@ -331,12 +352,15 @@ 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[pulumi.InputType['IAMBindingConditionArgs']] condition: An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. :param pulumi.Input[str] etag: (Computed) The etag of the organization's IAM policy. - :param pulumi.Input[Sequence[pulumi.Input[str]]] members: A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - :param pulumi.Input[str] org_id: The numeric ID of the organization in which you want to create a custom role. + :param pulumi.Input[str] org_id: The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. :param pulumi.Input[str] role: The role that should be applied. Only one `organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -352,6 +376,10 @@ def get(resource_name: str, @property @pulumi.getter def condition(self) -> pulumi.Output[Optional['outputs.IAMBindingCondition']]: + """ + An [IAM Condition](https://cloud.google.com/iam/docs/conditions-overview) for a given binding. + Structure is documented below. + """ return pulumi.get(self, "condition") @property @@ -365,16 +393,15 @@ def etag(self) -> pulumi.Output[str]: @property @pulumi.getter def members(self) -> pulumi.Output[Sequence[str]]: - """ - A list of users that the role should apply to. For more details on format and restrictions see https://cloud.google.com/billing/reference/rest/v1/Policy#Binding - """ return pulumi.get(self, "members") @property @pulumi.getter(name="orgId") def org_id(self) -> pulumi.Output[str]: """ - The numeric ID of the organization in which you want to create a custom role. + The organization ID. If not specified for `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig`, uses the ID of the organization configured with the provider. + Required for `organizations.IAMPolicy` - you must explicitly set the organization, and it + will not be inferred from the provider. """ return pulumi.get(self, "org_id") @@ -384,7 +411,7 @@ def role(self) -> pulumi.Output[str]: """ The role that should be applied. Only one `organizations.IAMBinding` can be used per role. Note that custom roles must be of the format - `[projects|organizations]/{parent-name}/roles/{role-name}`. + `organizations/{{org_id}}/roles/{{role_id}}`. """ return pulumi.get(self, "role") diff --git a/sdk/python/pulumi_gcp/organizations/iam_custom_role.py b/sdk/python/pulumi_gcp/organizations/iam_custom_role.py index e46f1ce1a3..430db9a465 100644 --- a/sdk/python/pulumi_gcp/organizations/iam_custom_role.py +++ b/sdk/python/pulumi_gcp/organizations/iam_custom_role.py @@ -268,18 +268,6 @@ def __init__(__self__, title: Optional[pulumi.Input[str]] = None, __props__=None): """ - Allows management of a customized Cloud IAM organization role. For more information see - [the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles) - and - [API](https://cloud.google.com/iam/reference/rest/v1/organizations.roles). - - > **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise - from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the - same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted - after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is - made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all - by the provider, and new roles cannot share that name. - ## Example Usage This snippet creates a customized IAM organization role. @@ -326,18 +314,6 @@ def __init__(__self__, args: IAMCustomRoleArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Allows management of a customized Cloud IAM organization role. For more information see - [the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles) - and - [API](https://cloud.google.com/iam/reference/rest/v1/organizations.roles). - - > **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise - from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the - same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted - after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is - made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all - by the provider, and new roles cannot share that name. - ## Example Usage This snippet creates a customized IAM organization role. diff --git a/sdk/python/pulumi_gcp/organizations/iam_member.py b/sdk/python/pulumi_gcp/organizations/iam_member.py index 6378a1d0db..9d2879d059 100644 --- a/sdk/python/pulumi_gcp/organizations/iam_member.py +++ b/sdk/python/pulumi_gcp/organizations/iam_member.py @@ -193,144 +193,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case: - - * `organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached. - * `organizations.IAMBinding`: 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 organization are preserved. - * `organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved. - * `organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `organizations.IAMPolicy` **cannot** be used in conjunction with `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig` or they will fight over what your policy should be. - - > **Note:** `organizations.IAMBinding` resources **can be** used in conjunction with `organizations.IAMMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_organization\\_iam\\_policy - - !> **Warning:** New organizations have several default policies which will, - without extreme caution, be **overwritten** by use of this resource. - The safest alternative is to use multiple `organizations.IAMBinding` - resources. This resource makes it easy to remove your own access to - an organization, which will require a call to Google Support to have - fixed, and can take multiple days to resolve. - - In general, this resource should only be used with organizations - fully managed by this provider.I f you do use this resource, - the best way to be sure that you are not making dangerous changes is to start - by **importing** your existing policy, and examining the diff very closely. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - organization = gcp.organizations.IAMPolicy("organization", - org_id="your-organization-id", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/editor", - )]) - organization = gcp.organizations.IAMPolicy("organization", - org_id="your-organization-id", - policy_data=admin.policy_data) - ``` - - ## google\\_organization\\_iam\\_binding - - > **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization. - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMBinding("organization", - members=["user:jane@example.com"], - org_id="your-organization-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMBinding("organization", - condition=gcp.organizations.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - org_id="your-organization-id", - role="roles/editor") - ``` - - ## google\\_organization\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMMember("organization", - member="user:jane@example.com", - org_id="your-organization-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMMember("organization", - condition=gcp.organizations.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - member="user:jane@example.com", - org_id="your-organization-id", - role="roles/editor") - ``` - - ## google\\_organization\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IamAuditConfig("organization", - audit_log_configs=[ - gcp.organizations.IamAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.organizations.IamAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - org_id="your-organization-id", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -389,144 +251,6 @@ def __init__(__self__, args: IAMMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case: - - * `organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached. - * `organizations.IAMBinding`: 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 organization are preserved. - * `organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved. - * `organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `organizations.IAMPolicy` **cannot** be used in conjunction with `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig` or they will fight over what your policy should be. - - > **Note:** `organizations.IAMBinding` resources **can be** used in conjunction with `organizations.IAMMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_organization\\_iam\\_policy - - !> **Warning:** New organizations have several default policies which will, - without extreme caution, be **overwritten** by use of this resource. - The safest alternative is to use multiple `organizations.IAMBinding` - resources. This resource makes it easy to remove your own access to - an organization, which will require a call to Google Support to have - fixed, and can take multiple days to resolve. - - In general, this resource should only be used with organizations - fully managed by this provider.I f you do use this resource, - the best way to be sure that you are not making dangerous changes is to start - by **importing** your existing policy, and examining the diff very closely. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - organization = gcp.organizations.IAMPolicy("organization", - org_id="your-organization-id", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/editor", - )]) - organization = gcp.organizations.IAMPolicy("organization", - org_id="your-organization-id", - policy_data=admin.policy_data) - ``` - - ## google\\_organization\\_iam\\_binding - - > **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization. - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMBinding("organization", - members=["user:jane@example.com"], - org_id="your-organization-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMBinding("organization", - condition=gcp.organizations.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - org_id="your-organization-id", - role="roles/editor") - ``` - - ## google\\_organization\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMMember("organization", - member="user:jane@example.com", - org_id="your-organization-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMMember("organization", - condition=gcp.organizations.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - member="user:jane@example.com", - org_id="your-organization-id", - role="roles/editor") - ``` - - ## google\\_organization\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IamAuditConfig("organization", - audit_log_configs=[ - gcp.organizations.IamAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.organizations.IamAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - org_id="your-organization-id", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/organizations/iam_policy.py b/sdk/python/pulumi_gcp/organizations/iam_policy.py index 916ab5b1f2..696e0b0e3b 100644 --- a/sdk/python/pulumi_gcp/organizations/iam_policy.py +++ b/sdk/python/pulumi_gcp/organizations/iam_policy.py @@ -130,144 +130,6 @@ def __init__(__self__, policy_data: Optional[pulumi.Input[str]] = None, __props__=None): """ - Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case: - - * `organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached. - * `organizations.IAMBinding`: 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 organization are preserved. - * `organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved. - * `organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `organizations.IAMPolicy` **cannot** be used in conjunction with `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig` or they will fight over what your policy should be. - - > **Note:** `organizations.IAMBinding` resources **can be** used in conjunction with `organizations.IAMMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_organization\\_iam\\_policy - - !> **Warning:** New organizations have several default policies which will, - without extreme caution, be **overwritten** by use of this resource. - The safest alternative is to use multiple `organizations.IAMBinding` - resources. This resource makes it easy to remove your own access to - an organization, which will require a call to Google Support to have - fixed, and can take multiple days to resolve. - - In general, this resource should only be used with organizations - fully managed by this provider.I f you do use this resource, - the best way to be sure that you are not making dangerous changes is to start - by **importing** your existing policy, and examining the diff very closely. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - organization = gcp.organizations.IAMPolicy("organization", - org_id="your-organization-id", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/editor", - )]) - organization = gcp.organizations.IAMPolicy("organization", - org_id="your-organization-id", - policy_data=admin.policy_data) - ``` - - ## google\\_organization\\_iam\\_binding - - > **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization. - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMBinding("organization", - members=["user:jane@example.com"], - org_id="your-organization-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMBinding("organization", - condition=gcp.organizations.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - org_id="your-organization-id", - role="roles/editor") - ``` - - ## google\\_organization\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMMember("organization", - member="user:jane@example.com", - org_id="your-organization-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMMember("organization", - condition=gcp.organizations.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - member="user:jane@example.com", - org_id="your-organization-id", - role="roles/editor") - ``` - - ## google\\_organization\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IamAuditConfig("organization", - audit_log_configs=[ - gcp.organizations.IamAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.organizations.IamAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - org_id="your-organization-id", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -324,144 +186,6 @@ def __init__(__self__, args: IAMPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Four different resources help you manage your IAM policy for a organization. Each of these resources serves a different use case: - - * `organizations.IAMPolicy`: Authoritative. Sets the IAM policy for the organization and replaces any existing policy already attached. - * `organizations.IAMBinding`: 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 organization are preserved. - * `organizations.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the organization are preserved. - * `organizations.IamAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `organizations.IAMPolicy` **cannot** be used in conjunction with `organizations.IAMBinding`, `organizations.IAMMember`, or `organizations.IamAuditConfig` or they will fight over what your policy should be. - - > **Note:** `organizations.IAMBinding` resources **can be** used in conjunction with `organizations.IAMMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_organization\\_iam\\_policy - - !> **Warning:** New organizations have several default policies which will, - without extreme caution, be **overwritten** by use of this resource. - The safest alternative is to use multiple `organizations.IAMBinding` - resources. This resource makes it easy to remove your own access to - an organization, which will require a call to Google Support to have - fixed, and can take multiple days to resolve. - - In general, this resource should only be used with organizations - fully managed by this provider.I f you do use this resource, - the best way to be sure that you are not making dangerous changes is to start - by **importing** your existing policy, and examining the diff very closely. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - organization = gcp.organizations.IAMPolicy("organization", - org_id="your-organization-id", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/editor", - )]) - organization = gcp.organizations.IAMPolicy("organization", - org_id="your-organization-id", - policy_data=admin.policy_data) - ``` - - ## google\\_organization\\_iam\\_binding - - > **Note:** If `role` is set to `roles/owner` and you don't specify a user or service account you have access to in `members`, you can lock yourself out of your organization. - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMBinding("organization", - members=["user:jane@example.com"], - org_id="your-organization-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMBinding("organization", - condition=gcp.organizations.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - org_id="your-organization-id", - role="roles/editor") - ``` - - ## google\\_organization\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMMember("organization", - member="user:jane@example.com", - org_id="your-organization-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IAMMember("organization", - condition=gcp.organizations.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - member="user:jane@example.com", - org_id="your-organization-id", - role="roles/editor") - ``` - - ## google\\_organization\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - organization = gcp.organizations.IamAuditConfig("organization", - audit_log_configs=[ - gcp.organizations.IamAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.organizations.IamAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - org_id="your-organization-id", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/organizations/outputs.py b/sdk/python/pulumi_gcp/organizations/outputs.py index 9c5ef54e37..d486b6acb4 100644 --- a/sdk/python/pulumi_gcp/organizations/outputs.py +++ b/sdk/python/pulumi_gcp/organizations/outputs.py @@ -106,6 +106,11 @@ def __init__(__self__, *, expression: str, title: str, description: Optional[str] = None): + """ + :param str expression: Textual representation of an expression in Common Expression Language syntax. + :param str title: A title for the expression, i.e. a short string describing its purpose. + :param str description: An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + """ pulumi.set(__self__, "expression", expression) pulumi.set(__self__, "title", title) if description is not None: @@ -114,16 +119,25 @@ def __init__(__self__, *, @property @pulumi.getter def expression(self) -> str: + """ + Textual representation of an expression in Common Expression Language syntax. + """ return pulumi.get(self, "expression") @property @pulumi.getter def title(self) -> str: + """ + A title for the expression, i.e. a short string describing its purpose. + """ return pulumi.get(self, "title") @property @pulumi.getter def description(self) -> Optional[str]: + """ + An optional description of the expression. This is a longer text which describes the expression, e.g. when hovered over it in a UI. + """ return pulumi.get(self, "description") @@ -194,12 +208,7 @@ def __init__(__self__, *, exempted_members: Optional[Sequence[str]] = None): """ :param str log_type: Permission type for which logging is to be configured. Must be one of `DATA_READ`, `DATA_WRITE`, or `ADMIN_READ`. - :param Sequence[str] exempted_members: Identities that do not cause logging for this type of permission. - Each entry can have one of the following values: - * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + :param Sequence[str] exempted_members: Identities that do not cause logging for this type of permission. The format is the same as that for `members`. """ pulumi.set(__self__, "log_type", log_type) if exempted_members is not None: @@ -217,12 +226,7 @@ def log_type(self) -> str: @pulumi.getter(name="exemptedMembers") def exempted_members(self) -> Optional[Sequence[str]]: """ - Identities that do not cause logging for this type of permission. - Each entry can have one of the following values: - * **user:{emailid}**: An email address that represents a specific Google account. For example, alice@gmail.com or joe@example.com. - * **serviceAccount:{emailid}**: An email address that represents a service account. For example, my-other-app@appspot.gserviceaccount.com. - * **group:{emailid}**: An email address that represents a Google group. For example, admins@example.com. - * **domain:{domain}**: A G Suite domain (primary, instead of alias) name that represents all the users of that domain. For example, google.com or example.com. + Identities that do not cause logging for this type of permission. The format is the same as that for `members`. """ return pulumi.get(self, "exempted_members") diff --git a/sdk/python/pulumi_gcp/organizations/project.py b/sdk/python/pulumi_gcp/organizations/project.py index 56f335fcd3..8cd748e3ef 100644 --- a/sdk/python/pulumi_gcp/organizations/project.py +++ b/sdk/python/pulumi_gcp/organizations/project.py @@ -25,15 +25,12 @@ def __init__(__self__, *, """ The set of arguments for constructing a Project resource. :param pulumi.Input[str] project_id: The project ID. Changing this forces a new project to be created. - :param pulumi.Input[bool] auto_create_network: Create the 'default' network automatically. Default `true`. - If set to `false`, the default network will be deleted. Note that, for quota purposes, you - will still need to have 1 network slot available to create the project successfully, even if - you set `auto_create_network` to `false`, since the network will exist momentarily. - :param pulumi.Input[str] billing_account: The alphanumeric ID of the billing account this project - belongs to. The user or service account performing this operation with the provider - must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - for more details. + :param pulumi.Input[bool] auto_create_network: Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + if you set auto_create_network to false, since the network will exist momentarily. + :param pulumi.Input[str] billing_account: The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + See Google Cloud Billing API Access Control for more details. :param pulumi.Input[str] folder_id: The numeric ID of the folder this project should be created under. Only one of `org_id` or `folder_id` may be specified. If the `folder_id` is specified, then the project is @@ -47,8 +44,7 @@ def __init__(__self__, *, specified then the project is created at the top level. Changing this forces the project to be migrated to the newly specified organization. - :param pulumi.Input[bool] skip_delete: If true, the resource can be deleted - without deleting the Project via the Google API. + :param pulumi.Input[bool] skip_delete: If true, the Terraform resource can be deleted without deleting the Project via the Google API. """ pulumi.set(__self__, "project_id", project_id) if auto_create_network is not None: @@ -82,10 +78,9 @@ def project_id(self, value: pulumi.Input[str]): @pulumi.getter(name="autoCreateNetwork") def auto_create_network(self) -> Optional[pulumi.Input[bool]]: """ - Create the 'default' network automatically. Default `true`. - If set to `false`, the default network will be deleted. Note that, for quota purposes, you - will still need to have 1 network slot available to create the project successfully, even if - you set `auto_create_network` to `false`, since the network will exist momentarily. + Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + if you set auto_create_network to false, since the network will exist momentarily. """ return pulumi.get(self, "auto_create_network") @@ -97,11 +92,9 @@ def auto_create_network(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="billingAccount") def billing_account(self) -> Optional[pulumi.Input[str]]: """ - The alphanumeric ID of the billing account this project - belongs to. The user or service account performing this operation with the provider - must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - for more details. + The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + See Google Cloud Billing API Access Control for more details. """ return pulumi.get(self, "billing_account") @@ -170,8 +163,7 @@ def org_id(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="skipDelete") def skip_delete(self) -> Optional[pulumi.Input[bool]]: """ - If true, the resource can be deleted - without deleting the Project via the Google API. + If true, the Terraform resource can be deleted without deleting the Project via the Google API. """ return pulumi.get(self, "skip_delete") @@ -194,15 +186,12 @@ def __init__(__self__, *, skip_delete: Optional[pulumi.Input[bool]] = None): """ Input properties used for looking up and filtering Project resources. - :param pulumi.Input[bool] auto_create_network: Create the 'default' network automatically. Default `true`. - If set to `false`, the default network will be deleted. Note that, for quota purposes, you - will still need to have 1 network slot available to create the project successfully, even if - you set `auto_create_network` to `false`, since the network will exist momentarily. - :param pulumi.Input[str] billing_account: The alphanumeric ID of the billing account this project - belongs to. The user or service account performing this operation with the provider - must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - for more details. + :param pulumi.Input[bool] auto_create_network: Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + if you set auto_create_network to false, since the network will exist momentarily. + :param pulumi.Input[str] billing_account: The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + See Google Cloud Billing API Access Control for more details. :param pulumi.Input[str] folder_id: The numeric ID of the folder this project should be created under. Only one of `org_id` or `folder_id` may be specified. If the `folder_id` is specified, then the project is @@ -218,8 +207,7 @@ def __init__(__self__, *, this forces the project to be migrated to the newly specified organization. :param pulumi.Input[str] project_id: The project ID. Changing this forces a new project to be created. - :param pulumi.Input[bool] skip_delete: If true, the resource can be deleted - without deleting the Project via the Google API. + :param pulumi.Input[bool] skip_delete: If true, the Terraform resource can be deleted without deleting the Project via the Google API. """ if auto_create_network is not None: pulumi.set(__self__, "auto_create_network", auto_create_network) @@ -244,10 +232,9 @@ def __init__(__self__, *, @pulumi.getter(name="autoCreateNetwork") def auto_create_network(self) -> Optional[pulumi.Input[bool]]: """ - Create the 'default' network automatically. Default `true`. - If set to `false`, the default network will be deleted. Note that, for quota purposes, you - will still need to have 1 network slot available to create the project successfully, even if - you set `auto_create_network` to `false`, since the network will exist momentarily. + Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + if you set auto_create_network to false, since the network will exist momentarily. """ return pulumi.get(self, "auto_create_network") @@ -259,11 +246,9 @@ def auto_create_network(self, value: Optional[pulumi.Input[bool]]): @pulumi.getter(name="billingAccount") def billing_account(self) -> Optional[pulumi.Input[str]]: """ - The alphanumeric ID of the billing account this project - belongs to. The user or service account performing this operation with the provider - must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - for more details. + The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + See Google Cloud Billing API Access Control for more details. """ return pulumi.get(self, "billing_account") @@ -356,8 +341,7 @@ def project_id(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="skipDelete") def skip_delete(self) -> Optional[pulumi.Input[bool]]: """ - If true, the resource can be deleted - without deleting the Project via the Google API. + If true, the Terraform resource can be deleted without deleting the Project via the Google API. """ return pulumi.get(self, "skip_delete") @@ -381,24 +365,6 @@ def __init__(__self__, skip_delete: Optional[pulumi.Input[bool]] = None, __props__=None): """ - Allows creation and management of a Google Cloud Platform project. - - Projects created with this resource must be associated with an Organization. - See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - - The user or service account that is running this provider when creating a `organizations.Project` - resource must have `roles/resourcemanager.projectCreator` on the specified organization. See the - [Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org) - doc for more information. - - > This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account. - - To get more information about projects, see: - - * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects) - * How-to Guides - * [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects) - ## Example Usage ```python @@ -434,15 +400,12 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. - :param pulumi.Input[bool] auto_create_network: Create the 'default' network automatically. Default `true`. - If set to `false`, the default network will be deleted. Note that, for quota purposes, you - will still need to have 1 network slot available to create the project successfully, even if - you set `auto_create_network` to `false`, since the network will exist momentarily. - :param pulumi.Input[str] billing_account: The alphanumeric ID of the billing account this project - belongs to. The user or service account performing this operation with the provider - must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - for more details. + :param pulumi.Input[bool] auto_create_network: Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + if you set auto_create_network to false, since the network will exist momentarily. + :param pulumi.Input[str] billing_account: The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + See Google Cloud Billing API Access Control for more details. :param pulumi.Input[str] folder_id: The numeric ID of the folder this project should be created under. Only one of `org_id` or `folder_id` may be specified. If the `folder_id` is specified, then the project is @@ -457,8 +420,7 @@ def __init__(__self__, this forces the project to be migrated to the newly specified organization. :param pulumi.Input[str] project_id: The project ID. Changing this forces a new project to be created. - :param pulumi.Input[bool] skip_delete: If true, the resource can be deleted - without deleting the Project via the Google API. + :param pulumi.Input[bool] skip_delete: If true, the Terraform resource can be deleted without deleting the Project via the Google API. """ ... @overload @@ -467,24 +429,6 @@ def __init__(__self__, args: ProjectArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Allows creation and management of a Google Cloud Platform project. - - Projects created with this resource must be associated with an Organization. - See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - - The user or service account that is running this provider when creating a `organizations.Project` - resource must have `roles/resourcemanager.projectCreator` on the specified organization. See the - [Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org) - doc for more information. - - > This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account. - - To get more information about projects, see: - - * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects) - * How-to Guides - * [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects) - ## Example Usage ```python @@ -587,15 +531,12 @@ 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[bool] auto_create_network: Create the 'default' network automatically. Default `true`. - If set to `false`, the default network will be deleted. Note that, for quota purposes, you - will still need to have 1 network slot available to create the project successfully, even if - you set `auto_create_network` to `false`, since the network will exist momentarily. - :param pulumi.Input[str] billing_account: The alphanumeric ID of the billing account this project - belongs to. The user or service account performing this operation with the provider - must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - for more details. + :param pulumi.Input[bool] auto_create_network: Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + if you set auto_create_network to false, since the network will exist momentarily. + :param pulumi.Input[str] billing_account: The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + See Google Cloud Billing API Access Control for more details. :param pulumi.Input[str] folder_id: The numeric ID of the folder this project should be created under. Only one of `org_id` or `folder_id` may be specified. If the `folder_id` is specified, then the project is @@ -611,8 +552,7 @@ def get(resource_name: str, this forces the project to be migrated to the newly specified organization. :param pulumi.Input[str] project_id: The project ID. Changing this forces a new project to be created. - :param pulumi.Input[bool] skip_delete: If true, the resource can be deleted - without deleting the Project via the Google API. + :param pulumi.Input[bool] skip_delete: If true, the Terraform resource can be deleted without deleting the Project via the Google API. """ opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) @@ -633,10 +573,9 @@ def get(resource_name: str, @pulumi.getter(name="autoCreateNetwork") def auto_create_network(self) -> pulumi.Output[Optional[bool]]: """ - Create the 'default' network automatically. Default `true`. - If set to `false`, the default network will be deleted. Note that, for quota purposes, you - will still need to have 1 network slot available to create the project successfully, even if - you set `auto_create_network` to `false`, since the network will exist momentarily. + Create the 'default' network automatically. Default true. If set to false, the default network will be deleted. Note + that, for quota purposes, you will still need to have 1 network slot available to create the project successfully, even + if you set auto_create_network to false, since the network will exist momentarily. """ return pulumi.get(self, "auto_create_network") @@ -644,11 +583,9 @@ def auto_create_network(self) -> pulumi.Output[Optional[bool]]: @pulumi.getter(name="billingAccount") def billing_account(self) -> pulumi.Output[Optional[str]]: """ - The alphanumeric ID of the billing account this project - belongs to. The user or service account performing this operation with the provider - must have at mininum Billing Account User privileges (`roles/billing.user`) on the billing account. - See [Google Cloud Billing API Access Control](https://cloud.google.com/billing/docs/how-to/billing-access) - for more details. + The alphanumeric ID of the billing account this project belongs to. The user or service account performing this + operation with Terraform must have Billing Account Administrator privileges (roles/billing.admin) in the organization. + See Google Cloud Billing API Access Control for more details. """ return pulumi.get(self, "billing_account") @@ -713,8 +650,7 @@ def project_id(self) -> pulumi.Output[str]: @pulumi.getter(name="skipDelete") def skip_delete(self) -> pulumi.Output[bool]: """ - If true, the resource can be deleted - without deleting the Project via the Google API. + If true, the Terraform resource can be deleted without deleting the Project via the Google API. """ return pulumi.get(self, "skip_delete") diff --git a/sdk/python/pulumi_gcp/osconfig/guest_policies.py b/sdk/python/pulumi_gcp/osconfig/guest_policies.py index 6adcdf9650..0e4e610261 100644 --- a/sdk/python/pulumi_gcp/osconfig/guest_policies.py +++ b/sdk/python/pulumi_gcp/osconfig/guest_policies.py @@ -438,16 +438,6 @@ def __init__(__self__, recipes: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['GuestPoliciesRecipeArgs']]]]] = None, __props__=None): """ - An OS Config resource representing a guest configuration policy. These policies represent - the desired state for VM instance guest environments including packages to install or remove, - package repository configurations, and software to install. - - To get more information about GuestPolicies, see: - - * [API documentation](https://cloud.google.com/compute/docs/osconfig/rest) - * How-to Guides - * [Official Documentation](https://cloud.google.com/compute/docs/os-config-management) - ## Example Usage ### Os Config Guest Policies Basic @@ -636,16 +626,6 @@ def __init__(__self__, args: GuestPoliciesArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - An OS Config resource representing a guest configuration policy. These policies represent - the desired state for VM instance guest environments including packages to install or remove, - package repository configurations, and software to install. - - To get more information about GuestPolicies, see: - - * [API documentation](https://cloud.google.com/compute/docs/osconfig/rest) - * How-to Guides - * [Official Documentation](https://cloud.google.com/compute/docs/os-config-management) - ## Example Usage ### Os Config Guest Policies Basic diff --git a/sdk/python/pulumi_gcp/projects/iam_audit_config.py b/sdk/python/pulumi_gcp/projects/iam_audit_config.py index 3c0a94da80..407f874900 100644 --- a/sdk/python/pulumi_gcp/projects/iam_audit_config.py +++ b/sdk/python/pulumi_gcp/projects/iam_audit_config.py @@ -152,141 +152,6 @@ def __init__(__self__, service: Optional[pulumi.Input[str]] = None, __props__=None): """ - Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - - * `projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * `projects.IAMBinding`: 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 project are preserved. - * `projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * `projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `projects.IAMPolicy` **cannot** be used in conjunction with `projects.IAMBinding`, `projects.IAMMember`, or `projects.IAMAuditConfig` or they will fight over what your policy should be. - - > **Note:** `projects.IAMBinding` resources **can be** used in conjunction with `projects.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - - ## google\\_project\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your project - using this resource. Deleting a `projects.IAMPolicy` removes access - from anyone without organization-level access to the project. Proceed with caution. - It's not recommended to use `projects.IAMPolicy` with your provider project - to avoid locking yourself out, and it should generally only be used with projects - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - project = gcp.projects.IAMPolicy("project", - project="your-project-id", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - project = gcp.projects.IAMPolicy("project", - policy_data=admin.policy_data, - project="your-project-id") - ``` - - ## google\\_project\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - members=["user:jane@example.com"], - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - condition=gcp.projects.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - project="your-project-id", - role="roles/container.admin") - ``` - - ## google\\_project\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - member="user:jane@example.com", - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - condition=gcp.projects.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - member="user:jane@example.com", - project="your-project-id", - role="roles/firebase.admin") - ``` - - ## google\\_project\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMAuditConfig("project", - audit_log_configs=[ - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - project="your-project-id", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -341,141 +206,6 @@ def __init__(__self__, args: IAMAuditConfigArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - - * `projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * `projects.IAMBinding`: 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 project are preserved. - * `projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * `projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `projects.IAMPolicy` **cannot** be used in conjunction with `projects.IAMBinding`, `projects.IAMMember`, or `projects.IAMAuditConfig` or they will fight over what your policy should be. - - > **Note:** `projects.IAMBinding` resources **can be** used in conjunction with `projects.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - - ## google\\_project\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your project - using this resource. Deleting a `projects.IAMPolicy` removes access - from anyone without organization-level access to the project. Proceed with caution. - It's not recommended to use `projects.IAMPolicy` with your provider project - to avoid locking yourself out, and it should generally only be used with projects - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - project = gcp.projects.IAMPolicy("project", - project="your-project-id", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - project = gcp.projects.IAMPolicy("project", - policy_data=admin.policy_data, - project="your-project-id") - ``` - - ## google\\_project\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - members=["user:jane@example.com"], - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - condition=gcp.projects.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - project="your-project-id", - role="roles/container.admin") - ``` - - ## google\\_project\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - member="user:jane@example.com", - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - condition=gcp.projects.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - member="user:jane@example.com", - project="your-project-id", - role="roles/firebase.admin") - ``` - - ## google\\_project\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMAuditConfig("project", - audit_log_configs=[ - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - project="your-project-id", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/projects/iam_binding.py b/sdk/python/pulumi_gcp/projects/iam_binding.py index 8294c276dc..90fe2610df 100644 --- a/sdk/python/pulumi_gcp/projects/iam_binding.py +++ b/sdk/python/pulumi_gcp/projects/iam_binding.py @@ -189,141 +189,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - - * `projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * `projects.IAMBinding`: 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 project are preserved. - * `projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * `projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `projects.IAMPolicy` **cannot** be used in conjunction with `projects.IAMBinding`, `projects.IAMMember`, or `projects.IAMAuditConfig` or they will fight over what your policy should be. - - > **Note:** `projects.IAMBinding` resources **can be** used in conjunction with `projects.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - - ## google\\_project\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your project - using this resource. Deleting a `projects.IAMPolicy` removes access - from anyone without organization-level access to the project. Proceed with caution. - It's not recommended to use `projects.IAMPolicy` with your provider project - to avoid locking yourself out, and it should generally only be used with projects - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - project = gcp.projects.IAMPolicy("project", - project="your-project-id", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - project = gcp.projects.IAMPolicy("project", - policy_data=admin.policy_data, - project="your-project-id") - ``` - - ## google\\_project\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - members=["user:jane@example.com"], - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - condition=gcp.projects.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - project="your-project-id", - role="roles/container.admin") - ``` - - ## google\\_project\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - member="user:jane@example.com", - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - condition=gcp.projects.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - member="user:jane@example.com", - project="your-project-id", - role="roles/firebase.admin") - ``` - - ## google\\_project\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMAuditConfig("project", - audit_log_configs=[ - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - project="your-project-id", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -381,141 +246,6 @@ def __init__(__self__, args: IAMBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - - * `projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * `projects.IAMBinding`: 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 project are preserved. - * `projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * `projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `projects.IAMPolicy` **cannot** be used in conjunction with `projects.IAMBinding`, `projects.IAMMember`, or `projects.IAMAuditConfig` or they will fight over what your policy should be. - - > **Note:** `projects.IAMBinding` resources **can be** used in conjunction with `projects.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - - ## google\\_project\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your project - using this resource. Deleting a `projects.IAMPolicy` removes access - from anyone without organization-level access to the project. Proceed with caution. - It's not recommended to use `projects.IAMPolicy` with your provider project - to avoid locking yourself out, and it should generally only be used with projects - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - project = gcp.projects.IAMPolicy("project", - project="your-project-id", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - project = gcp.projects.IAMPolicy("project", - policy_data=admin.policy_data, - project="your-project-id") - ``` - - ## google\\_project\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - members=["user:jane@example.com"], - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - condition=gcp.projects.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - project="your-project-id", - role="roles/container.admin") - ``` - - ## google\\_project\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - member="user:jane@example.com", - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - condition=gcp.projects.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - member="user:jane@example.com", - project="your-project-id", - role="roles/firebase.admin") - ``` - - ## google\\_project\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMAuditConfig("project", - audit_log_configs=[ - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - project="your-project-id", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/projects/iam_custom_role.py b/sdk/python/pulumi_gcp/projects/iam_custom_role.py index 0b015ccb31..234f141a95 100644 --- a/sdk/python/pulumi_gcp/projects/iam_custom_role.py +++ b/sdk/python/pulumi_gcp/projects/iam_custom_role.py @@ -273,18 +273,6 @@ def __init__(__self__, title: Optional[pulumi.Input[str]] = None, __props__=None): """ - Allows management of a customized Cloud IAM project role. For more information see - [the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles) - and - [API](https://cloud.google.com/iam/reference/rest/v1/projects.roles). - - > **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise - from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the - same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted - after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is - made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all - by the provider, and new roles cannot share that name. - ## Example Usage This snippet creates a customized IAM role. @@ -339,18 +327,6 @@ def __init__(__self__, args: IAMCustomRoleArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Allows management of a customized Cloud IAM project role. For more information see - [the official documentation](https://cloud.google.com/iam/docs/understanding-custom-roles) - and - [API](https://cloud.google.com/iam/reference/rest/v1/projects.roles). - - > **Warning:** Note that custom roles in GCP have the concept of a soft-delete. There are two issues that may arise - from this and how roles are propagated. 1) creating a role may involve undeleting and then updating a role with the - same name, possibly causing confusing behavior between undelete and update. 2) A deleted role is permanently deleted - after 7 days, but it can take up to 30 more days (i.e. between 7 and 37 days after deletion) before the role name is - made available again. This means a deleted role that has been deleted for more than 7 days cannot be changed at all - by the provider, and new roles cannot share that name. - ## Example Usage This snippet creates a customized IAM role. diff --git a/sdk/python/pulumi_gcp/projects/iam_member.py b/sdk/python/pulumi_gcp/projects/iam_member.py index 637f0d3631..6df94f8b66 100644 --- a/sdk/python/pulumi_gcp/projects/iam_member.py +++ b/sdk/python/pulumi_gcp/projects/iam_member.py @@ -189,141 +189,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - - * `projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * `projects.IAMBinding`: 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 project are preserved. - * `projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * `projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `projects.IAMPolicy` **cannot** be used in conjunction with `projects.IAMBinding`, `projects.IAMMember`, or `projects.IAMAuditConfig` or they will fight over what your policy should be. - - > **Note:** `projects.IAMBinding` resources **can be** used in conjunction with `projects.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - - ## google\\_project\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your project - using this resource. Deleting a `projects.IAMPolicy` removes access - from anyone without organization-level access to the project. Proceed with caution. - It's not recommended to use `projects.IAMPolicy` with your provider project - to avoid locking yourself out, and it should generally only be used with projects - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - project = gcp.projects.IAMPolicy("project", - project="your-project-id", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - project = gcp.projects.IAMPolicy("project", - policy_data=admin.policy_data, - project="your-project-id") - ``` - - ## google\\_project\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - members=["user:jane@example.com"], - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - condition=gcp.projects.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - project="your-project-id", - role="roles/container.admin") - ``` - - ## google\\_project\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - member="user:jane@example.com", - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - condition=gcp.projects.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - member="user:jane@example.com", - project="your-project-id", - role="roles/firebase.admin") - ``` - - ## google\\_project\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMAuditConfig("project", - audit_log_configs=[ - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - project="your-project-id", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -381,141 +246,6 @@ def __init__(__self__, args: IAMMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - - * `projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * `projects.IAMBinding`: 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 project are preserved. - * `projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * `projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `projects.IAMPolicy` **cannot** be used in conjunction with `projects.IAMBinding`, `projects.IAMMember`, or `projects.IAMAuditConfig` or they will fight over what your policy should be. - - > **Note:** `projects.IAMBinding` resources **can be** used in conjunction with `projects.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - - ## google\\_project\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your project - using this resource. Deleting a `projects.IAMPolicy` removes access - from anyone without organization-level access to the project. Proceed with caution. - It's not recommended to use `projects.IAMPolicy` with your provider project - to avoid locking yourself out, and it should generally only be used with projects - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - project = gcp.projects.IAMPolicy("project", - project="your-project-id", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - project = gcp.projects.IAMPolicy("project", - policy_data=admin.policy_data, - project="your-project-id") - ``` - - ## google\\_project\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - members=["user:jane@example.com"], - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - condition=gcp.projects.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - project="your-project-id", - role="roles/container.admin") - ``` - - ## google\\_project\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - member="user:jane@example.com", - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - condition=gcp.projects.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - member="user:jane@example.com", - project="your-project-id", - role="roles/firebase.admin") - ``` - - ## google\\_project\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMAuditConfig("project", - audit_log_configs=[ - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - project="your-project-id", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/projects/iam_policy.py b/sdk/python/pulumi_gcp/projects/iam_policy.py index 752cf550d6..84580e8b98 100644 --- a/sdk/python/pulumi_gcp/projects/iam_policy.py +++ b/sdk/python/pulumi_gcp/projects/iam_policy.py @@ -126,141 +126,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - - * `projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * `projects.IAMBinding`: 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 project are preserved. - * `projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * `projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `projects.IAMPolicy` **cannot** be used in conjunction with `projects.IAMBinding`, `projects.IAMMember`, or `projects.IAMAuditConfig` or they will fight over what your policy should be. - - > **Note:** `projects.IAMBinding` resources **can be** used in conjunction with `projects.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - - ## google\\_project\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your project - using this resource. Deleting a `projects.IAMPolicy` removes access - from anyone without organization-level access to the project. Proceed with caution. - It's not recommended to use `projects.IAMPolicy` with your provider project - to avoid locking yourself out, and it should generally only be used with projects - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - project = gcp.projects.IAMPolicy("project", - project="your-project-id", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - project = gcp.projects.IAMPolicy("project", - policy_data=admin.policy_data, - project="your-project-id") - ``` - - ## google\\_project\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - members=["user:jane@example.com"], - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - condition=gcp.projects.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - project="your-project-id", - role="roles/container.admin") - ``` - - ## google\\_project\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - member="user:jane@example.com", - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - condition=gcp.projects.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - member="user:jane@example.com", - project="your-project-id", - role="roles/firebase.admin") - ``` - - ## google\\_project\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMAuditConfig("project", - audit_log_configs=[ - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - project="your-project-id", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. @@ -316,141 +181,6 @@ def __init__(__self__, args: IAMPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Four different resources help you manage your IAM policy for a project. Each of these resources serves a different use case: - - * `projects.IAMPolicy`: Authoritative. Sets the IAM policy for the project and replaces any existing policy already attached. - * `projects.IAMBinding`: 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 project are preserved. - * `projects.IAMMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the project are preserved. - * `projects.IAMAuditConfig`: Authoritative for a given service. Updates the IAM policy to enable audit logging for the given service. - - > **Note:** `projects.IAMPolicy` **cannot** be used in conjunction with `projects.IAMBinding`, `projects.IAMMember`, or `projects.IAMAuditConfig` or they will fight over what your policy should be. - - > **Note:** `projects.IAMBinding` resources **can be** used in conjunction with `projects.IAMMember` resources **only if** they do not grant privilege to the same role. - - > **Note:** The underlying API method `projects.setIamPolicy` has a lot of constraints which are documented [here](https://cloud.google.com/resource-manager/reference/rest/v1/projects/setIamPolicy). In addition to these constraints, - IAM Conditions cannot be used with Basic Roles such as Owner. Violating these constraints will result in the API returning 400 error code so please review these if you encounter errors with this resource. - - ## google\\_project\\_iam\\_policy - - !> **Be careful!** You can accidentally lock yourself out of your project - using this resource. Deleting a `projects.IAMPolicy` removes access - from anyone without organization-level access to the project. Proceed with caution. - It's not recommended to use `projects.IAMPolicy` with your provider project - to avoid locking yourself out, and it should generally only be used with projects - fully managed by this provider. If you do use this resource, it is recommended to **import** the policy before - applying the change. - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/editor", - members=["user:jane@example.com"], - )]) - project = gcp.projects.IAMPolicy("project", - project="your-project-id", - policy_data=admin.policy_data) - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - condition=gcp.organizations.GetIAMPolicyBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - role="roles/compute.admin", - )]) - project = gcp.projects.IAMPolicy("project", - policy_data=admin.policy_data, - project="your-project-id") - ``` - - ## google\\_project\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - members=["user:jane@example.com"], - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMBinding("project", - condition=gcp.projects.IAMBindingConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - members=["user:jane@example.com"], - project="your-project-id", - role="roles/container.admin") - ``` - - ## google\\_project\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - member="user:jane@example.com", - project="your-project-id", - role="roles/editor") - ``` - - With IAM Conditions: - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMMember("project", - condition=gcp.projects.IAMMemberConditionArgs( - description="Expiring at midnight of 2019-12-31", - expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", - title="expires_after_2019_12_31", - ), - member="user:jane@example.com", - project="your-project-id", - role="roles/firebase.admin") - ``` - - ## google\\_project\\_iam\\_audit\\_config - - ```python - import pulumi - import pulumi_gcp as gcp - - project = gcp.projects.IAMAuditConfig("project", - audit_log_configs=[ - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - log_type="ADMIN_READ", - ), - gcp.projects.IAMAuditConfigAuditLogConfigArgs( - exempted_members=["user:joebloggs@hashicorp.com"], - log_type="DATA_READ", - ), - ], - project="your-project-id", - service="allServices") - ``` - ## Import IAM member imports use space-delimited identifiers; the resource in question, the role, and the account. diff --git a/sdk/python/pulumi_gcp/projects/service.py b/sdk/python/pulumi_gcp/projects/service.py index a266e08616..61ba949a90 100644 --- a/sdk/python/pulumi_gcp/projects/service.py +++ b/sdk/python/pulumi_gcp/projects/service.py @@ -25,7 +25,6 @@ def __init__(__self__, *, and which depend on this service should also be disabled when this service is destroyed. If `false` or unset, an error will be generated if any enabled services depend on this service when destroying it. - :param pulumi.Input[bool] disable_on_destroy: If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. :param pulumi.Input[str] project: The project ID. If not provided, the provider project is used. """ @@ -67,9 +66,6 @@ def disable_dependent_services(self, value: Optional[pulumi.Input[bool]]): @property @pulumi.getter(name="disableOnDestroy") def disable_on_destroy(self) -> Optional[pulumi.Input[bool]]: - """ - If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - """ return pulumi.get(self, "disable_on_destroy") @disable_on_destroy.setter @@ -103,7 +99,6 @@ def __init__(__self__, *, and which depend on this service should also be disabled when this service is destroyed. If `false` or unset, an error will be generated if any enabled services depend on this service when destroying it. - :param pulumi.Input[bool] disable_on_destroy: If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. :param pulumi.Input[str] project: The project ID. If not provided, the provider project is used. :param pulumi.Input[str] service: The service to enable. @@ -135,9 +130,6 @@ def disable_dependent_services(self, value: Optional[pulumi.Input[bool]]): @property @pulumi.getter(name="disableOnDestroy") def disable_on_destroy(self) -> Optional[pulumi.Input[bool]]: - """ - If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - """ return pulumi.get(self, "disable_on_destroy") @disable_on_destroy.setter @@ -223,7 +215,6 @@ def __init__(__self__, and which depend on this service should also be disabled when this service is destroyed. If `false` or unset, an error will be generated if any enabled services depend on this service when destroying it. - :param pulumi.Input[bool] disable_on_destroy: If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. :param pulumi.Input[str] project: The project ID. If not provided, the provider project is used. :param pulumi.Input[str] service: The service to enable. @@ -330,7 +321,6 @@ def get(resource_name: str, and which depend on this service should also be disabled when this service is destroyed. If `false` or unset, an error will be generated if any enabled services depend on this service when destroying it. - :param pulumi.Input[bool] disable_on_destroy: If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. :param pulumi.Input[str] project: The project ID. If not provided, the provider project is used. :param pulumi.Input[str] service: The service to enable. @@ -359,9 +349,6 @@ def disable_dependent_services(self) -> pulumi.Output[Optional[bool]]: @property @pulumi.getter(name="disableOnDestroy") def disable_on_destroy(self) -> pulumi.Output[Optional[bool]]: - """ - If true, disable the service when the resource is destroyed. Defaults to true. May be useful in the event that a project is long-lived but the infrastructure running in that project changes frequently. - """ return pulumi.get(self, "disable_on_destroy") @property diff --git a/sdk/python/pulumi_gcp/projects/service_identity.py b/sdk/python/pulumi_gcp/projects/service_identity.py index 6aa6bf923d..2c33ccf455 100644 --- a/sdk/python/pulumi_gcp/projects/service_identity.py +++ b/sdk/python/pulumi_gcp/projects/service_identity.py @@ -136,19 +136,6 @@ def __init__(__self__, service: Optional[pulumi.Input[str]] = None, __props__=None): """ - Generate service identity for a service. - - > **Note:** Once created, this resource cannot be updated or destroyed. These - actions are a no-op. - - > **Note:** This resource can be used to retrieve the emails of the [Google-managed service accounts](https://cloud.google.com/iam/docs/service-agents) - of the APIs that Google has configured with a Service Identity. You can run `gcloud beta services identity create --service SERVICE_NAME.googleapis.com` to - verify if an API supports this. - - To get more information about Service Identity, see: - - * [API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services/generateServiceIdentity) - ## Example Usage ### Service Identity Basic @@ -185,19 +172,6 @@ def __init__(__self__, args: ServiceIdentityArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Generate service identity for a service. - - > **Note:** Once created, this resource cannot be updated or destroyed. These - actions are a no-op. - - > **Note:** This resource can be used to retrieve the emails of the [Google-managed service accounts](https://cloud.google.com/iam/docs/service-agents) - of the APIs that Google has configured with a Service Identity. You can run `gcloud beta services identity create --service SERVICE_NAME.googleapis.com` to - verify if an API supports this. - - To get more information about Service Identity, see: - - * [API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services/generateServiceIdentity) - ## Example Usage ### Service Identity Basic diff --git a/sdk/python/pulumi_gcp/projects/usage_export_bucket.py b/sdk/python/pulumi_gcp/projects/usage_export_bucket.py index db612d6c8e..acbdab9fb3 100644 --- a/sdk/python/pulumi_gcp/projects/usage_export_bucket.py +++ b/sdk/python/pulumi_gcp/projects/usage_export_bucket.py @@ -132,24 +132,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - Allows creation and management of a Google Cloud Platform project. - - Projects created with this resource must be associated with an Organization. - See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - - The user or service account that is running this provider when creating a `organizations.Project` - resource must have `roles/resourcemanager.projectCreator` on the specified organization. See the - [Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org) - doc for more information. - - > This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account. - - To get more information about projects, see: - - * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects) - * How-to Guides - * [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects) - ## Example Usage ```python @@ -196,24 +178,6 @@ def __init__(__self__, args: UsageExportBucketArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Allows creation and management of a Google Cloud Platform project. - - Projects created with this resource must be associated with an Organization. - See the [Organization documentation](https://cloud.google.com/resource-manager/docs/quickstarts) for more details. - - The user or service account that is running this provider when creating a `organizations.Project` - resource must have `roles/resourcemanager.projectCreator` on the specified organization. See the - [Access Control for Organizations Using IAM](https://cloud.google.com/resource-manager/docs/access-control-org) - doc for more information. - - > This resource reads the specified billing account on every provider apply and plan operation so you must have permissions on the specified billing account. - - To get more information about projects, see: - - * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v1/projects) - * How-to Guides - * [Creating and managing projects](https://cloud.google.com/resource-manager/docs/creating-managing-projects) - ## Example Usage ```python diff --git a/sdk/python/pulumi_gcp/provider.py b/sdk/python/pulumi_gcp/provider.py index 4241dbd2de..c625fdb7bd 100644 --- a/sdk/python/pulumi_gcp/provider.py +++ b/sdk/python/pulumi_gcp/provider.py @@ -52,6 +52,7 @@ def __init__(__self__, *, cloud_run_v2_custom_endpoint: Optional[pulumi.Input[str]] = None, cloud_scheduler_custom_endpoint: Optional[pulumi.Input[str]] = None, cloud_tasks_custom_endpoint: Optional[pulumi.Input[str]] = None, + cloudbuildv2_custom_endpoint: Optional[pulumi.Input[str]] = None, clouddeploy_custom_endpoint: Optional[pulumi.Input[str]] = None, cloudfunctions2_custom_endpoint: Optional[pulumi.Input[str]] = None, composer_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -75,7 +76,6 @@ def __init__(__self__, *, deployment_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, dialogflow_custom_endpoint: Optional[pulumi.Input[str]] = None, dialogflow_cx_custom_endpoint: Optional[pulumi.Input[str]] = None, - disable_google_partner_name: Optional[pulumi.Input[bool]] = None, dns_custom_endpoint: Optional[pulumi.Input[str]] = None, document_ai_custom_endpoint: Optional[pulumi.Input[str]] = None, essential_contacts_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -91,7 +91,6 @@ def __init__(__self__, *, gke_backup_custom_endpoint: Optional[pulumi.Input[str]] = None, gke_hub_custom_endpoint: Optional[pulumi.Input[str]] = None, gkehub_feature_custom_endpoint: Optional[pulumi.Input[str]] = None, - google_partner_name: Optional[pulumi.Input[str]] = None, healthcare_custom_endpoint: Optional[pulumi.Input[str]] = None, iam2_custom_endpoint: Optional[pulumi.Input[str]] = None, iam_beta_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -141,11 +140,13 @@ def __init__(__self__, *, storage_custom_endpoint: Optional[pulumi.Input[str]] = None, storage_transfer_custom_endpoint: Optional[pulumi.Input[str]] = None, tags_custom_endpoint: Optional[pulumi.Input[str]] = None, + tags_location_custom_endpoint: Optional[pulumi.Input[str]] = None, tpu_custom_endpoint: Optional[pulumi.Input[str]] = None, user_project_override: Optional[pulumi.Input[bool]] = None, vertex_ai_custom_endpoint: Optional[pulumi.Input[str]] = None, vpc_access_custom_endpoint: Optional[pulumi.Input[str]] = None, workflows_custom_endpoint: Optional[pulumi.Input[str]] = None, + workstations_custom_endpoint: Optional[pulumi.Input[str]] = None, zone: Optional[pulumi.Input[str]] = None): """ The set of arguments for constructing a Provider resource. @@ -224,6 +225,8 @@ def __init__(__self__, *, pulumi.set(__self__, "cloud_scheduler_custom_endpoint", cloud_scheduler_custom_endpoint) if cloud_tasks_custom_endpoint is not None: pulumi.set(__self__, "cloud_tasks_custom_endpoint", cloud_tasks_custom_endpoint) + if cloudbuildv2_custom_endpoint is not None: + pulumi.set(__self__, "cloudbuildv2_custom_endpoint", cloudbuildv2_custom_endpoint) if clouddeploy_custom_endpoint is not None: pulumi.set(__self__, "clouddeploy_custom_endpoint", clouddeploy_custom_endpoint) if cloudfunctions2_custom_endpoint is not None: @@ -270,8 +273,6 @@ def __init__(__self__, *, pulumi.set(__self__, "dialogflow_custom_endpoint", dialogflow_custom_endpoint) if dialogflow_cx_custom_endpoint is not None: pulumi.set(__self__, "dialogflow_cx_custom_endpoint", dialogflow_cx_custom_endpoint) - if disable_google_partner_name is not None: - pulumi.set(__self__, "disable_google_partner_name", disable_google_partner_name) if dns_custom_endpoint is not None: pulumi.set(__self__, "dns_custom_endpoint", dns_custom_endpoint) if document_ai_custom_endpoint is not None: @@ -302,8 +303,6 @@ def __init__(__self__, *, pulumi.set(__self__, "gke_hub_custom_endpoint", gke_hub_custom_endpoint) if gkehub_feature_custom_endpoint is not None: pulumi.set(__self__, "gkehub_feature_custom_endpoint", gkehub_feature_custom_endpoint) - if google_partner_name is not None: - pulumi.set(__self__, "google_partner_name", google_partner_name) if healthcare_custom_endpoint is not None: pulumi.set(__self__, "healthcare_custom_endpoint", healthcare_custom_endpoint) if iam2_custom_endpoint is not None: @@ -406,6 +405,8 @@ def __init__(__self__, *, pulumi.set(__self__, "storage_transfer_custom_endpoint", storage_transfer_custom_endpoint) if tags_custom_endpoint is not None: pulumi.set(__self__, "tags_custom_endpoint", tags_custom_endpoint) + if tags_location_custom_endpoint is not None: + pulumi.set(__self__, "tags_location_custom_endpoint", tags_location_custom_endpoint) if tpu_custom_endpoint is not None: pulumi.set(__self__, "tpu_custom_endpoint", tpu_custom_endpoint) if user_project_override is not None: @@ -416,6 +417,8 @@ def __init__(__self__, *, pulumi.set(__self__, "vpc_access_custom_endpoint", vpc_access_custom_endpoint) if workflows_custom_endpoint is not None: pulumi.set(__self__, "workflows_custom_endpoint", workflows_custom_endpoint) + if workstations_custom_endpoint is not None: + pulumi.set(__self__, "workstations_custom_endpoint", workstations_custom_endpoint) if zone is None: zone = _utilities.get_env('GOOGLE_ZONE', 'GCLOUD_ZONE', 'CLOUDSDK_COMPUTE_ZONE') if zone is not None: @@ -754,6 +757,15 @@ def cloud_tasks_custom_endpoint(self) -> Optional[pulumi.Input[str]]: def cloud_tasks_custom_endpoint(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "cloud_tasks_custom_endpoint", value) + @property + @pulumi.getter(name="cloudbuildv2CustomEndpoint") + def cloudbuildv2_custom_endpoint(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "cloudbuildv2_custom_endpoint") + + @cloudbuildv2_custom_endpoint.setter + def cloudbuildv2_custom_endpoint(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "cloudbuildv2_custom_endpoint", value) + @property @pulumi.getter(name="clouddeployCustomEndpoint") def clouddeploy_custom_endpoint(self) -> Optional[pulumi.Input[str]]: @@ -961,15 +973,6 @@ def dialogflow_cx_custom_endpoint(self) -> Optional[pulumi.Input[str]]: def dialogflow_cx_custom_endpoint(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "dialogflow_cx_custom_endpoint", value) - @property - @pulumi.getter(name="disableGooglePartnerName") - def disable_google_partner_name(self) -> Optional[pulumi.Input[bool]]: - return pulumi.get(self, "disable_google_partner_name") - - @disable_google_partner_name.setter - def disable_google_partner_name(self, value: Optional[pulumi.Input[bool]]): - pulumi.set(self, "disable_google_partner_name", value) - @property @pulumi.getter(name="dnsCustomEndpoint") def dns_custom_endpoint(self) -> Optional[pulumi.Input[str]]: @@ -1105,15 +1108,6 @@ def gkehub_feature_custom_endpoint(self) -> Optional[pulumi.Input[str]]: def gkehub_feature_custom_endpoint(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "gkehub_feature_custom_endpoint", value) - @property - @pulumi.getter(name="googlePartnerName") - def google_partner_name(self) -> Optional[pulumi.Input[str]]: - return pulumi.get(self, "google_partner_name") - - @google_partner_name.setter - def google_partner_name(self, value: Optional[pulumi.Input[str]]): - pulumi.set(self, "google_partner_name", value) - @property @pulumi.getter(name="healthcareCustomEndpoint") def healthcare_custom_endpoint(self) -> Optional[pulumi.Input[str]]: @@ -1555,6 +1549,15 @@ def tags_custom_endpoint(self) -> Optional[pulumi.Input[str]]: def tags_custom_endpoint(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "tags_custom_endpoint", value) + @property + @pulumi.getter(name="tagsLocationCustomEndpoint") + def tags_location_custom_endpoint(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "tags_location_custom_endpoint") + + @tags_location_custom_endpoint.setter + def tags_location_custom_endpoint(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "tags_location_custom_endpoint", value) + @property @pulumi.getter(name="tpuCustomEndpoint") def tpu_custom_endpoint(self) -> Optional[pulumi.Input[str]]: @@ -1600,6 +1603,15 @@ def workflows_custom_endpoint(self) -> Optional[pulumi.Input[str]]: def workflows_custom_endpoint(self, value: Optional[pulumi.Input[str]]): pulumi.set(self, "workflows_custom_endpoint", value) + @property + @pulumi.getter(name="workstationsCustomEndpoint") + def workstations_custom_endpoint(self) -> Optional[pulumi.Input[str]]: + return pulumi.get(self, "workstations_custom_endpoint") + + @workstations_custom_endpoint.setter + def workstations_custom_endpoint(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "workstations_custom_endpoint", value) + @property @pulumi.getter def zone(self) -> Optional[pulumi.Input[str]]: @@ -1652,6 +1664,7 @@ def __init__(__self__, cloud_run_v2_custom_endpoint: Optional[pulumi.Input[str]] = None, cloud_scheduler_custom_endpoint: Optional[pulumi.Input[str]] = None, cloud_tasks_custom_endpoint: Optional[pulumi.Input[str]] = None, + cloudbuildv2_custom_endpoint: Optional[pulumi.Input[str]] = None, clouddeploy_custom_endpoint: Optional[pulumi.Input[str]] = None, cloudfunctions2_custom_endpoint: Optional[pulumi.Input[str]] = None, composer_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -1675,7 +1688,6 @@ def __init__(__self__, deployment_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, dialogflow_custom_endpoint: Optional[pulumi.Input[str]] = None, dialogflow_cx_custom_endpoint: Optional[pulumi.Input[str]] = None, - disable_google_partner_name: Optional[pulumi.Input[bool]] = None, dns_custom_endpoint: Optional[pulumi.Input[str]] = None, document_ai_custom_endpoint: Optional[pulumi.Input[str]] = None, essential_contacts_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -1691,7 +1703,6 @@ def __init__(__self__, gke_backup_custom_endpoint: Optional[pulumi.Input[str]] = None, gke_hub_custom_endpoint: Optional[pulumi.Input[str]] = None, gkehub_feature_custom_endpoint: Optional[pulumi.Input[str]] = None, - google_partner_name: Optional[pulumi.Input[str]] = None, healthcare_custom_endpoint: Optional[pulumi.Input[str]] = None, iam2_custom_endpoint: Optional[pulumi.Input[str]] = None, iam_beta_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -1741,11 +1752,13 @@ def __init__(__self__, storage_custom_endpoint: Optional[pulumi.Input[str]] = None, storage_transfer_custom_endpoint: Optional[pulumi.Input[str]] = None, tags_custom_endpoint: Optional[pulumi.Input[str]] = None, + tags_location_custom_endpoint: Optional[pulumi.Input[str]] = None, tpu_custom_endpoint: Optional[pulumi.Input[str]] = None, user_project_override: Optional[pulumi.Input[bool]] = None, vertex_ai_custom_endpoint: Optional[pulumi.Input[str]] = None, vpc_access_custom_endpoint: Optional[pulumi.Input[str]] = None, workflows_custom_endpoint: Optional[pulumi.Input[str]] = None, + workstations_custom_endpoint: Optional[pulumi.Input[str]] = None, zone: Optional[pulumi.Input[str]] = None, __props__=None): """ @@ -1821,6 +1834,7 @@ def _internal_init(__self__, cloud_run_v2_custom_endpoint: Optional[pulumi.Input[str]] = None, cloud_scheduler_custom_endpoint: Optional[pulumi.Input[str]] = None, cloud_tasks_custom_endpoint: Optional[pulumi.Input[str]] = None, + cloudbuildv2_custom_endpoint: Optional[pulumi.Input[str]] = None, clouddeploy_custom_endpoint: Optional[pulumi.Input[str]] = None, cloudfunctions2_custom_endpoint: Optional[pulumi.Input[str]] = None, composer_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -1844,7 +1858,6 @@ def _internal_init(__self__, deployment_manager_custom_endpoint: Optional[pulumi.Input[str]] = None, dialogflow_custom_endpoint: Optional[pulumi.Input[str]] = None, dialogflow_cx_custom_endpoint: Optional[pulumi.Input[str]] = None, - disable_google_partner_name: Optional[pulumi.Input[bool]] = None, dns_custom_endpoint: Optional[pulumi.Input[str]] = None, document_ai_custom_endpoint: Optional[pulumi.Input[str]] = None, essential_contacts_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -1860,7 +1873,6 @@ def _internal_init(__self__, gke_backup_custom_endpoint: Optional[pulumi.Input[str]] = None, gke_hub_custom_endpoint: Optional[pulumi.Input[str]] = None, gkehub_feature_custom_endpoint: Optional[pulumi.Input[str]] = None, - google_partner_name: Optional[pulumi.Input[str]] = None, healthcare_custom_endpoint: Optional[pulumi.Input[str]] = None, iam2_custom_endpoint: Optional[pulumi.Input[str]] = None, iam_beta_custom_endpoint: Optional[pulumi.Input[str]] = None, @@ -1910,11 +1922,13 @@ def _internal_init(__self__, storage_custom_endpoint: Optional[pulumi.Input[str]] = None, storage_transfer_custom_endpoint: Optional[pulumi.Input[str]] = None, tags_custom_endpoint: Optional[pulumi.Input[str]] = None, + tags_location_custom_endpoint: Optional[pulumi.Input[str]] = None, tpu_custom_endpoint: Optional[pulumi.Input[str]] = None, user_project_override: Optional[pulumi.Input[bool]] = None, vertex_ai_custom_endpoint: Optional[pulumi.Input[str]] = None, vpc_access_custom_endpoint: Optional[pulumi.Input[str]] = None, workflows_custom_endpoint: Optional[pulumi.Input[str]] = None, + workstations_custom_endpoint: Optional[pulumi.Input[str]] = None, zone: Optional[pulumi.Input[str]] = None, __props__=None): opts = pulumi.ResourceOptions.merge(_utilities.get_resource_opts_defaults(), opts) @@ -1962,6 +1976,7 @@ def _internal_init(__self__, __props__.__dict__["cloud_run_v2_custom_endpoint"] = cloud_run_v2_custom_endpoint __props__.__dict__["cloud_scheduler_custom_endpoint"] = cloud_scheduler_custom_endpoint __props__.__dict__["cloud_tasks_custom_endpoint"] = cloud_tasks_custom_endpoint + __props__.__dict__["cloudbuildv2_custom_endpoint"] = cloudbuildv2_custom_endpoint __props__.__dict__["clouddeploy_custom_endpoint"] = clouddeploy_custom_endpoint __props__.__dict__["cloudfunctions2_custom_endpoint"] = cloudfunctions2_custom_endpoint __props__.__dict__["composer_custom_endpoint"] = composer_custom_endpoint @@ -1985,7 +2000,6 @@ def _internal_init(__self__, __props__.__dict__["deployment_manager_custom_endpoint"] = deployment_manager_custom_endpoint __props__.__dict__["dialogflow_custom_endpoint"] = dialogflow_custom_endpoint __props__.__dict__["dialogflow_cx_custom_endpoint"] = dialogflow_cx_custom_endpoint - __props__.__dict__["disable_google_partner_name"] = pulumi.Output.from_input(disable_google_partner_name).apply(pulumi.runtime.to_json) if disable_google_partner_name is not None else None __props__.__dict__["dns_custom_endpoint"] = dns_custom_endpoint __props__.__dict__["document_ai_custom_endpoint"] = document_ai_custom_endpoint __props__.__dict__["essential_contacts_custom_endpoint"] = essential_contacts_custom_endpoint @@ -2001,7 +2015,6 @@ def _internal_init(__self__, __props__.__dict__["gke_backup_custom_endpoint"] = gke_backup_custom_endpoint __props__.__dict__["gke_hub_custom_endpoint"] = gke_hub_custom_endpoint __props__.__dict__["gkehub_feature_custom_endpoint"] = gkehub_feature_custom_endpoint - __props__.__dict__["google_partner_name"] = google_partner_name __props__.__dict__["healthcare_custom_endpoint"] = healthcare_custom_endpoint __props__.__dict__["iam2_custom_endpoint"] = iam2_custom_endpoint __props__.__dict__["iam_beta_custom_endpoint"] = iam_beta_custom_endpoint @@ -2055,11 +2068,13 @@ def _internal_init(__self__, __props__.__dict__["storage_custom_endpoint"] = storage_custom_endpoint __props__.__dict__["storage_transfer_custom_endpoint"] = storage_transfer_custom_endpoint __props__.__dict__["tags_custom_endpoint"] = tags_custom_endpoint + __props__.__dict__["tags_location_custom_endpoint"] = tags_location_custom_endpoint __props__.__dict__["tpu_custom_endpoint"] = tpu_custom_endpoint __props__.__dict__["user_project_override"] = pulumi.Output.from_input(user_project_override).apply(pulumi.runtime.to_json) if user_project_override is not None else None __props__.__dict__["vertex_ai_custom_endpoint"] = vertex_ai_custom_endpoint __props__.__dict__["vpc_access_custom_endpoint"] = vpc_access_custom_endpoint __props__.__dict__["workflows_custom_endpoint"] = workflows_custom_endpoint + __props__.__dict__["workstations_custom_endpoint"] = workstations_custom_endpoint if zone is None: zone = _utilities.get_env('GOOGLE_ZONE', 'GCLOUD_ZONE', 'CLOUDSDK_COMPUTE_ZONE') __props__.__dict__["zone"] = zone @@ -2249,6 +2264,11 @@ def cloud_scheduler_custom_endpoint(self) -> pulumi.Output[Optional[str]]: def cloud_tasks_custom_endpoint(self) -> pulumi.Output[Optional[str]]: return pulumi.get(self, "cloud_tasks_custom_endpoint") + @property + @pulumi.getter(name="cloudbuildv2CustomEndpoint") + def cloudbuildv2_custom_endpoint(self) -> pulumi.Output[Optional[str]]: + return pulumi.get(self, "cloudbuildv2_custom_endpoint") + @property @pulumi.getter(name="clouddeployCustomEndpoint") def clouddeploy_custom_endpoint(self) -> pulumi.Output[Optional[str]]: @@ -2439,11 +2459,6 @@ def gke_hub_custom_endpoint(self) -> pulumi.Output[Optional[str]]: def gkehub_feature_custom_endpoint(self) -> pulumi.Output[Optional[str]]: return pulumi.get(self, "gkehub_feature_custom_endpoint") - @property - @pulumi.getter(name="googlePartnerName") - def google_partner_name(self) -> pulumi.Output[Optional[str]]: - return pulumi.get(self, "google_partner_name") - @property @pulumi.getter(name="healthcareCustomEndpoint") def healthcare_custom_endpoint(self) -> pulumi.Output[Optional[str]]: @@ -2679,6 +2694,11 @@ def storage_transfer_custom_endpoint(self) -> pulumi.Output[Optional[str]]: def tags_custom_endpoint(self) -> pulumi.Output[Optional[str]]: return pulumi.get(self, "tags_custom_endpoint") + @property + @pulumi.getter(name="tagsLocationCustomEndpoint") + def tags_location_custom_endpoint(self) -> pulumi.Output[Optional[str]]: + return pulumi.get(self, "tags_location_custom_endpoint") + @property @pulumi.getter(name="tpuCustomEndpoint") def tpu_custom_endpoint(self) -> pulumi.Output[Optional[str]]: @@ -2699,6 +2719,11 @@ def vpc_access_custom_endpoint(self) -> pulumi.Output[Optional[str]]: def workflows_custom_endpoint(self) -> pulumi.Output[Optional[str]]: return pulumi.get(self, "workflows_custom_endpoint") + @property + @pulumi.getter(name="workstationsCustomEndpoint") + def workstations_custom_endpoint(self) -> pulumi.Output[Optional[str]]: + return pulumi.get(self, "workstations_custom_endpoint") + @property @pulumi.getter def zone(self) -> pulumi.Output[Optional[str]]: diff --git a/sdk/python/pulumi_gcp/redis/_inputs.py b/sdk/python/pulumi_gcp/redis/_inputs.py index 4e15f1e70c..0e84b05b44 100644 --- a/sdk/python/pulumi_gcp/redis/_inputs.py +++ b/sdk/python/pulumi_gcp/redis/_inputs.py @@ -390,7 +390,7 @@ def __init__(__self__, *, - ONE_HOUR: Snapshot every 1 hour. - SIX_HOURS: Snapshot every 6 hours. - TWELVE_HOURS: Snapshot every 12 hours. - - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + - TWENTY_FOUR_HOURS: Snapshot every 24 hours. Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. :param pulumi.Input[str] rdb_snapshot_start_time: Optional. Date and time that the first snapshot was/will be attempted, and to which future snapshots will be aligned. If not provided, @@ -446,7 +446,7 @@ def rdb_snapshot_period(self) -> Optional[pulumi.Input[str]]: - ONE_HOUR: Snapshot every 1 hour. - SIX_HOURS: Snapshot every 6 hours. - TWELVE_HOURS: Snapshot every 12 hours. - - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + - TWENTY_FOUR_HOURS: Snapshot every 24 hours. Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. """ return pulumi.get(self, "rdb_snapshot_period") diff --git a/sdk/python/pulumi_gcp/redis/instance.py b/sdk/python/pulumi_gcp/redis/instance.py index a5ebfa7464..3b82408ffd 100644 --- a/sdk/python/pulumi_gcp/redis/instance.py +++ b/sdk/python/pulumi_gcp/redis/instance.py @@ -1195,7 +1195,7 @@ def __init__(__self__, alternative_location_id="us-central1-f", authorized_network=redis_network.id, redis_version="REDIS_4_0", - display_name="Test Instance", + display_name="Terraform Test Instance", reserved_ip_range="192.168.0.0/29", labels={ "my_key": "my_val", @@ -1253,7 +1253,7 @@ def __init__(__self__, authorized_network=redis_network.id, connect_mode="PRIVATE_SERVICE_ACCESS", redis_version="REDIS_4_0", - display_name="Test Instance", + display_name="Terraform Test Instance", opts=pulumi.ResourceOptions(depends_on=[private_service_connection])) ``` ### Redis Instance Mrr @@ -1433,7 +1433,7 @@ def __init__(__self__, alternative_location_id="us-central1-f", authorized_network=redis_network.id, redis_version="REDIS_4_0", - display_name="Test Instance", + display_name="Terraform Test Instance", reserved_ip_range="192.168.0.0/29", labels={ "my_key": "my_val", @@ -1491,7 +1491,7 @@ def __init__(__self__, authorized_network=redis_network.id, connect_mode="PRIVATE_SERVICE_ACCESS", redis_version="REDIS_4_0", - display_name="Test Instance", + display_name="Terraform Test Instance", opts=pulumi.ResourceOptions(depends_on=[private_service_connection])) ``` ### Redis Instance Mrr diff --git a/sdk/python/pulumi_gcp/redis/outputs.py b/sdk/python/pulumi_gcp/redis/outputs.py index 411456f4f9..f0c7e450b2 100644 --- a/sdk/python/pulumi_gcp/redis/outputs.py +++ b/sdk/python/pulumi_gcp/redis/outputs.py @@ -416,7 +416,7 @@ def __init__(__self__, *, - ONE_HOUR: Snapshot every 1 hour. - SIX_HOURS: Snapshot every 6 hours. - TWELVE_HOURS: Snapshot every 12 hours. - - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + - TWENTY_FOUR_HOURS: Snapshot every 24 hours. Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. :param str rdb_snapshot_start_time: Optional. Date and time that the first snapshot was/will be attempted, and to which future snapshots will be aligned. If not provided, @@ -464,7 +464,7 @@ def rdb_snapshot_period(self) -> Optional[str]: - ONE_HOUR: Snapshot every 1 hour. - SIX_HOURS: Snapshot every 6 hours. - TWELVE_HOURS: Snapshot every 12 hours. - - TWENTY_FOUR_HOURS: Snapshot every 24 horus. + - TWENTY_FOUR_HOURS: Snapshot every 24 hours. Possible values are `ONE_HOUR`, `SIX_HOURS`, `TWELVE_HOURS`, and `TWENTY_FOUR_HOURS`. """ return pulumi.get(self, "rdb_snapshot_period") diff --git a/sdk/python/pulumi_gcp/secretmanager/__init__.py b/sdk/python/pulumi_gcp/secretmanager/__init__.py index ff7790f58c..acc4f8fb0a 100644 --- a/sdk/python/pulumi_gcp/secretmanager/__init__.py +++ b/sdk/python/pulumi_gcp/secretmanager/__init__.py @@ -7,6 +7,7 @@ # Export this package's modules as members: from .get_secret import * from .get_secret_version import * +from .get_secret_version_access import * from .secret import * from .secret_iam_binding import * from .secret_iam_member import * diff --git a/sdk/python/pulumi_gcp/secretmanager/get_secret_version_access.py b/sdk/python/pulumi_gcp/secretmanager/get_secret_version_access.py new file mode 100644 index 0000000000..d3e9313aaf --- /dev/null +++ b/sdk/python/pulumi_gcp/secretmanager/get_secret_version_access.py @@ -0,0 +1,162 @@ +# 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 pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities + +__all__ = [ + 'GetSecretVersionAccessResult', + 'AwaitableGetSecretVersionAccessResult', + 'get_secret_version_access', + 'get_secret_version_access_output', +] + +@pulumi.output_type +class GetSecretVersionAccessResult: + """ + A collection of values returned by getSecretVersionAccess. + """ + def __init__(__self__, id=None, name=None, project=None, secret=None, secret_data=None, version=None): + if id and not isinstance(id, str): + raise TypeError("Expected argument 'id' to be a str") + pulumi.set(__self__, "id", id) + if name and not isinstance(name, str): + raise TypeError("Expected argument 'name' to be a str") + pulumi.set(__self__, "name", name) + if project and not isinstance(project, str): + raise TypeError("Expected argument 'project' to be a str") + pulumi.set(__self__, "project", project) + if secret and not isinstance(secret, str): + raise TypeError("Expected argument 'secret' to be a str") + pulumi.set(__self__, "secret", secret) + if secret_data and not isinstance(secret_data, str): + raise TypeError("Expected argument 'secret_data' to be a str") + pulumi.set(__self__, "secret_data", secret_data) + if version and not isinstance(version, str): + raise TypeError("Expected argument 'version' to be a str") + pulumi.set(__self__, "version", version) + + @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 name(self) -> str: + """ + The resource name of the SecretVersion. Format: + `projects/{{project}}/secrets/{{secret_id}}/versions/{{version}}` + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def project(self) -> str: + return pulumi.get(self, "project") + + @property + @pulumi.getter + def secret(self) -> str: + return pulumi.get(self, "secret") + + @property + @pulumi.getter(name="secretData") + def secret_data(self) -> str: + """ + The secret data. No larger than 64KiB. + """ + return pulumi.get(self, "secret_data") + + @property + @pulumi.getter + def version(self) -> str: + return pulumi.get(self, "version") + + +class AwaitableGetSecretVersionAccessResult(GetSecretVersionAccessResult): + # pylint: disable=using-constant-test + def __await__(self): + if False: + yield self + return GetSecretVersionAccessResult( + id=self.id, + name=self.name, + project=self.project, + secret=self.secret, + secret_data=self.secret_data, + version=self.version) + + +def get_secret_version_access(project: Optional[str] = None, + secret: Optional[str] = None, + version: Optional[str] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetSecretVersionAccessResult: + """ + Get a payload of Secret Manager secret's version. It only requires the [Secret Manager Secret Accessor](https://cloud.google.com/secret-manager/docs/access-control#secretmanager.secretAccessor) role. For more information see the [official documentation](https://cloud.google.com/secret-manager/docs/) and [API](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets.versions/access). + + ## Example Usage + + ```python + import pulumi + import pulumi_gcp as gcp + + basic = gcp.secretmanager.get_secret_version_access(secret="my-secret") + ``` + + + :param str project: The project to get the secret version for. If it + is not provided, the provider project is used. + :param str secret: The secret to get the secret version for. + :param str version: The version of the secret to get. If it + is not provided, the latest version is retrieved. + """ + __args__ = dict() + __args__['project'] = project + __args__['secret'] = secret + __args__['version'] = version + opts = pulumi.InvokeOptions.merge(_utilities.get_invoke_opts_defaults(), opts) + __ret__ = pulumi.runtime.invoke('gcp:secretmanager/getSecretVersionAccess:getSecretVersionAccess', __args__, opts=opts, typ=GetSecretVersionAccessResult).value + + return AwaitableGetSecretVersionAccessResult( + id=__ret__.id, + name=__ret__.name, + project=__ret__.project, + secret=__ret__.secret, + secret_data=__ret__.secret_data, + version=__ret__.version) + + +@_utilities.lift_output_func(get_secret_version_access) +def get_secret_version_access_output(project: Optional[pulumi.Input[Optional[str]]] = None, + secret: Optional[pulumi.Input[str]] = None, + version: Optional[pulumi.Input[Optional[str]]] = None, + opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetSecretVersionAccessResult]: + """ + Get a payload of Secret Manager secret's version. It only requires the [Secret Manager Secret Accessor](https://cloud.google.com/secret-manager/docs/access-control#secretmanager.secretAccessor) role. For more information see the [official documentation](https://cloud.google.com/secret-manager/docs/) and [API](https://cloud.google.com/secret-manager/docs/reference/rest/v1/projects.secrets.versions/access). + + ## Example Usage + + ```python + import pulumi + import pulumi_gcp as gcp + + basic = gcp.secretmanager.get_secret_version_access(secret="my-secret") + ``` + + + :param str project: The project to get the secret version for. If it + is not provided, the provider project is used. + :param str secret: The secret to get the secret version for. + :param str version: The version of the secret to get. If it + is not provided, the latest version is retrieved. + """ + ... diff --git a/sdk/python/pulumi_gcp/secretmanager/secret_version.py b/sdk/python/pulumi_gcp/secretmanager/secret_version.py index 5b2e6a3132..ebe95af637 100644 --- a/sdk/python/pulumi_gcp/secretmanager/secret_version.py +++ b/sdk/python/pulumi_gcp/secretmanager/secret_version.py @@ -201,11 +201,6 @@ def __init__(__self__, secret_data: Optional[pulumi.Input[str]] = None, __props__=None): """ - A secret version resource. - - > **Warning:** All arguments including `payload.secret_data` will be stored in the raw - state as plain-text. - ## Example Usage ### Secret Version Basic @@ -248,11 +243,6 @@ def __init__(__self__, args: SecretVersionArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A secret version resource. - - > **Warning:** All arguments including `payload.secret_data` will be stored in the raw - state as plain-text. - ## Example Usage ### Secret Version Basic diff --git a/sdk/python/pulumi_gcp/securitycenter/instance_iam_binding.py b/sdk/python/pulumi_gcp/securitycenter/instance_iam_binding.py index 33ad280c00..30090b0419 100644 --- a/sdk/python/pulumi_gcp/securitycenter/instance_iam_binding.py +++ b/sdk/python/pulumi_gcp/securitycenter/instance_iam_binding.py @@ -230,7 +230,7 @@ def __init__(__self__, * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * How-to Guides - * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * [Official Documentation](https://cloud.google.com/data-fusion/docs/) ## Example Usage ### Data Fusion Instance Basic @@ -383,7 +383,7 @@ def __init__(__self__, * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * How-to Guides - * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * [Official Documentation](https://cloud.google.com/data-fusion/docs/) ## Example Usage ### Data Fusion Instance Basic diff --git a/sdk/python/pulumi_gcp/securitycenter/instance_iam_member.py b/sdk/python/pulumi_gcp/securitycenter/instance_iam_member.py index 56132dad23..76237e2d8e 100644 --- a/sdk/python/pulumi_gcp/securitycenter/instance_iam_member.py +++ b/sdk/python/pulumi_gcp/securitycenter/instance_iam_member.py @@ -230,7 +230,7 @@ def __init__(__self__, * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * How-to Guides - * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * [Official Documentation](https://cloud.google.com/data-fusion/docs/) ## Example Usage ### Data Fusion Instance Basic @@ -383,7 +383,7 @@ def __init__(__self__, * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * How-to Guides - * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * [Official Documentation](https://cloud.google.com/data-fusion/docs/) ## Example Usage ### Data Fusion Instance Basic diff --git a/sdk/python/pulumi_gcp/securitycenter/instance_iam_policy.py b/sdk/python/pulumi_gcp/securitycenter/instance_iam_policy.py index 4bdad870a7..c2f5cecd54 100644 --- a/sdk/python/pulumi_gcp/securitycenter/instance_iam_policy.py +++ b/sdk/python/pulumi_gcp/securitycenter/instance_iam_policy.py @@ -179,7 +179,7 @@ def __init__(__self__, * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * How-to Guides - * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * [Official Documentation](https://cloud.google.com/data-fusion/docs/) ## Example Usage ### Data Fusion Instance Basic @@ -332,7 +332,7 @@ def __init__(__self__, * [API documentation](https://cloud.google.com/data-fusion/docs/reference/rest/v1beta1/projects.locations.instances) * How-to Guides - * [Official Documentation](https://cloud.google.com/data-fusion/docs/) + * [Official Documentation](https://cloud.google.com/data-fusion/docs/) ## Example Usage ### Data Fusion Instance Basic diff --git a/sdk/python/pulumi_gcp/serviceaccount/account.py b/sdk/python/pulumi_gcp/serviceaccount/account.py index 5e27abc1f3..961f23005e 100644 --- a/sdk/python/pulumi_gcp/serviceaccount/account.py +++ b/sdk/python/pulumi_gcp/serviceaccount/account.py @@ -294,18 +294,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - Allows management of a Google Cloud service account. - - * [API documentation](https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts) - * How-to Guides - * [Official Documentation](https://cloud.google.com/compute/docs/access/service-accounts) - - > **Warning:** If you delete and recreate a service account, you must reapply any IAM roles that it had before. - - > Creation of service accounts is eventually consistent, and that can lead to - errors when you try to apply ACLs to service accounts immediately after - creation. - ## Example Usage This snippet creates a service account in a project. @@ -349,18 +337,6 @@ def __init__(__self__, args: AccountArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Allows management of a Google Cloud service account. - - * [API documentation](https://cloud.google.com/iam/reference/rest/v1/projects.serviceAccounts) - * How-to Guides - * [Official Documentation](https://cloud.google.com/compute/docs/access/service-accounts) - - > **Warning:** If you delete and recreate a service account, you must reapply any IAM roles that it had before. - - > Creation of service accounts is eventually consistent, and that can lead to - errors when you try to apply ACLs to service accounts immediately after - creation. - ## Example Usage This snippet creates a service account in a project. diff --git a/sdk/python/pulumi_gcp/serviceaccount/get_account_id_token.py b/sdk/python/pulumi_gcp/serviceaccount/get_account_id_token.py index 304760cd5b..3fa8e75014 100644 --- a/sdk/python/pulumi_gcp/serviceaccount/get_account_id_token.py +++ b/sdk/python/pulumi_gcp/serviceaccount/get_account_id_token.py @@ -98,22 +98,7 @@ def get_account_id_token(delegates: Optional[Sequence[str]] = None, target_service_account: Optional[str] = None, opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetAccountIdTokenResult: """ - This data source provides a Google OpenID Connect (`oidc`) `id_token`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)). - - For more information see - [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken). - - ## Example Usage - - ### ServiceAccount JSON Credential File. - `service_account.get_account_id_token` will use the configured provider credentials - - ### Service Account Impersonation. - `service_account.get_account_access_token` will use background impersonated credentials provided by `service_account.get_account_access_token`. - - Note: to use the following, you must grant `target_service_account` the - `roles/iam.serviceAccountTokenCreator` role on itself. - + Use this data source to access information about an existing resource. :param Sequence[str] delegates: Delegate chain of approvals needed to perform full impersonation. Specify the fully qualified service account name. Used only when using impersonation mode. :param bool include_email: Include the verified email in the claim. Used only when using impersonation mode. @@ -144,22 +129,7 @@ def get_account_id_token_output(delegates: Optional[pulumi.Input[Optional[Sequen target_service_account: Optional[pulumi.Input[Optional[str]]] = None, opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetAccountIdTokenResult]: """ - This data source provides a Google OpenID Connect (`oidc`) `id_token`. Tokens issued from this data source are typically used to call external services that accept OIDC tokens for authentication (e.g. [Google Cloud Run](https://cloud.google.com/run/docs/authenticating/service-to-service)). - - For more information see - [OpenID Connect](https://openid.net/specs/openid-connect-core-1_0.html#IDToken). - - ## Example Usage - - ### ServiceAccount JSON Credential File. - `service_account.get_account_id_token` will use the configured provider credentials - - ### Service Account Impersonation. - `service_account.get_account_access_token` will use background impersonated credentials provided by `service_account.get_account_access_token`. - - Note: to use the following, you must grant `target_service_account` the - `roles/iam.serviceAccountTokenCreator` role on itself. - + Use this data source to access information about an existing resource. :param Sequence[str] delegates: Delegate chain of approvals needed to perform full impersonation. Specify the fully qualified service account name. Used only when using impersonation mode. :param bool include_email: Include the verified email in the claim. Used only when using impersonation mode. diff --git a/sdk/python/pulumi_gcp/serviceaccount/iam_binding.py b/sdk/python/pulumi_gcp/serviceaccount/iam_binding.py index ce0852878c..c5fd5e3afa 100644 --- a/sdk/python/pulumi_gcp/serviceaccount/iam_binding.py +++ b/sdk/python/pulumi_gcp/serviceaccount/iam_binding.py @@ -197,8 +197,7 @@ def __init__(__self__, > **Note:** `serviceAccount.IAMBinding` resources **can be** used in conjunction with `serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. - ## Example Usage - ### Service Account IAM Policy + ## google\\_service\\_account\\_iam\\_policy ```python import pulumi @@ -215,7 +214,8 @@ def __init__(__self__, service_account_id=sa.name, policy_data=admin.policy_data) ``` - ### Service Account IAM Binding + + ## google\\_service\\_account\\_iam\\_binding ```python import pulumi @@ -229,7 +229,8 @@ def __init__(__self__, role="roles/iam.serviceAccountUser", members=["user:jane@example.com"]) ``` - ### Service Account IAM Binding With IAM Conditions: + + With IAM Conditions: ```python import pulumi @@ -248,7 +249,8 @@ def __init__(__self__, expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", )) ``` - ### Service Account IAM Member + + ## google\\_service\\_account\\_iam\\_member ```python import pulumi @@ -268,7 +270,8 @@ def __init__(__self__, role="roles/iam.serviceAccountUser", member=sa.email.apply(lambda email: f"serviceAccount:{email}")) ``` - ### Service Account IAM Member With IAM Conditions: + + With IAM Conditions: ```python import pulumi @@ -342,8 +345,7 @@ def __init__(__self__, > **Note:** `serviceAccount.IAMBinding` resources **can be** used in conjunction with `serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. - ## Example Usage - ### Service Account IAM Policy + ## google\\_service\\_account\\_iam\\_policy ```python import pulumi @@ -360,7 +362,8 @@ def __init__(__self__, service_account_id=sa.name, policy_data=admin.policy_data) ``` - ### Service Account IAM Binding + + ## google\\_service\\_account\\_iam\\_binding ```python import pulumi @@ -374,7 +377,8 @@ def __init__(__self__, role="roles/iam.serviceAccountUser", members=["user:jane@example.com"]) ``` - ### Service Account IAM Binding With IAM Conditions: + + With IAM Conditions: ```python import pulumi @@ -393,7 +397,8 @@ def __init__(__self__, expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", )) ``` - ### Service Account IAM Member + + ## google\\_service\\_account\\_iam\\_member ```python import pulumi @@ -413,7 +418,8 @@ def __init__(__self__, role="roles/iam.serviceAccountUser", member=sa.email.apply(lambda email: f"serviceAccount:{email}")) ``` - ### Service Account IAM Member With IAM Conditions: + + With IAM Conditions: ```python import pulumi diff --git a/sdk/python/pulumi_gcp/serviceaccount/iam_member.py b/sdk/python/pulumi_gcp/serviceaccount/iam_member.py index 9becdaba5d..b187f0438b 100644 --- a/sdk/python/pulumi_gcp/serviceaccount/iam_member.py +++ b/sdk/python/pulumi_gcp/serviceaccount/iam_member.py @@ -197,8 +197,7 @@ def __init__(__self__, > **Note:** `serviceAccount.IAMBinding` resources **can be** used in conjunction with `serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. - ## Example Usage - ### Service Account IAM Policy + ## google\\_service\\_account\\_iam\\_policy ```python import pulumi @@ -215,7 +214,8 @@ def __init__(__self__, service_account_id=sa.name, policy_data=admin.policy_data) ``` - ### Service Account IAM Binding + + ## google\\_service\\_account\\_iam\\_binding ```python import pulumi @@ -229,7 +229,8 @@ def __init__(__self__, role="roles/iam.serviceAccountUser", members=["user:jane@example.com"]) ``` - ### Service Account IAM Binding With IAM Conditions: + + With IAM Conditions: ```python import pulumi @@ -248,7 +249,8 @@ def __init__(__self__, expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", )) ``` - ### Service Account IAM Member + + ## google\\_service\\_account\\_iam\\_member ```python import pulumi @@ -268,7 +270,8 @@ def __init__(__self__, role="roles/iam.serviceAccountUser", member=sa.email.apply(lambda email: f"serviceAccount:{email}")) ``` - ### Service Account IAM Member With IAM Conditions: + + With IAM Conditions: ```python import pulumi @@ -342,8 +345,7 @@ def __init__(__self__, > **Note:** `serviceAccount.IAMBinding` resources **can be** used in conjunction with `serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. - ## Example Usage - ### Service Account IAM Policy + ## google\\_service\\_account\\_iam\\_policy ```python import pulumi @@ -360,7 +362,8 @@ def __init__(__self__, service_account_id=sa.name, policy_data=admin.policy_data) ``` - ### Service Account IAM Binding + + ## google\\_service\\_account\\_iam\\_binding ```python import pulumi @@ -374,7 +377,8 @@ def __init__(__self__, role="roles/iam.serviceAccountUser", members=["user:jane@example.com"]) ``` - ### Service Account IAM Binding With IAM Conditions: + + With IAM Conditions: ```python import pulumi @@ -393,7 +397,8 @@ def __init__(__self__, expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", )) ``` - ### Service Account IAM Member + + ## google\\_service\\_account\\_iam\\_member ```python import pulumi @@ -413,7 +418,8 @@ def __init__(__self__, role="roles/iam.serviceAccountUser", member=sa.email.apply(lambda email: f"serviceAccount:{email}")) ``` - ### Service Account IAM Member With IAM Conditions: + + With IAM Conditions: ```python import pulumi diff --git a/sdk/python/pulumi_gcp/serviceaccount/iam_policy.py b/sdk/python/pulumi_gcp/serviceaccount/iam_policy.py index 412c975014..1aeac8d316 100644 --- a/sdk/python/pulumi_gcp/serviceaccount/iam_policy.py +++ b/sdk/python/pulumi_gcp/serviceaccount/iam_policy.py @@ -130,8 +130,7 @@ def __init__(__self__, > **Note:** `serviceAccount.IAMBinding` resources **can be** used in conjunction with `serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. - ## Example Usage - ### Service Account IAM Policy + ## google\\_service\\_account\\_iam\\_policy ```python import pulumi @@ -148,7 +147,8 @@ def __init__(__self__, service_account_id=sa.name, policy_data=admin.policy_data) ``` - ### Service Account IAM Binding + + ## google\\_service\\_account\\_iam\\_binding ```python import pulumi @@ -162,7 +162,8 @@ def __init__(__self__, role="roles/iam.serviceAccountUser", members=["user:jane@example.com"]) ``` - ### Service Account IAM Binding With IAM Conditions: + + With IAM Conditions: ```python import pulumi @@ -181,7 +182,8 @@ def __init__(__self__, expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", )) ``` - ### Service Account IAM Member + + ## google\\_service\\_account\\_iam\\_member ```python import pulumi @@ -201,7 +203,8 @@ def __init__(__self__, role="roles/iam.serviceAccountUser", member=sa.email.apply(lambda email: f"serviceAccount:{email}")) ``` - ### Service Account IAM Member With IAM Conditions: + + With IAM Conditions: ```python import pulumi @@ -272,8 +275,7 @@ def __init__(__self__, > **Note:** `serviceAccount.IAMBinding` resources **can be** used in conjunction with `serviceAccount.IAMMember` resources **only if** they do not grant privilege to the same role. - ## Example Usage - ### Service Account IAM Policy + ## google\\_service\\_account\\_iam\\_policy ```python import pulumi @@ -290,7 +292,8 @@ def __init__(__self__, service_account_id=sa.name, policy_data=admin.policy_data) ``` - ### Service Account IAM Binding + + ## google\\_service\\_account\\_iam\\_binding ```python import pulumi @@ -304,7 +307,8 @@ def __init__(__self__, role="roles/iam.serviceAccountUser", members=["user:jane@example.com"]) ``` - ### Service Account IAM Binding With IAM Conditions: + + With IAM Conditions: ```python import pulumi @@ -323,7 +327,8 @@ def __init__(__self__, expression="request.time < timestamp(\\"2020-01-01T00:00:00Z\\")", )) ``` - ### Service Account IAM Member + + ## google\\_service\\_account\\_iam\\_member ```python import pulumi @@ -343,7 +348,8 @@ def __init__(__self__, role="roles/iam.serviceAccountUser", member=sa.email.apply(lambda email: f"serviceAccount:{email}")) ``` - ### Service Account IAM Member With IAM Conditions: + + With IAM Conditions: ```python import pulumi diff --git a/sdk/python/pulumi_gcp/servicedirectory/endpoint.py b/sdk/python/pulumi_gcp/servicedirectory/endpoint.py index 7b46e6eb34..312c67adf7 100644 --- a/sdk/python/pulumi_gcp/servicedirectory/endpoint.py +++ b/sdk/python/pulumi_gcp/servicedirectory/endpoint.py @@ -268,14 +268,6 @@ def __init__(__self__, service: Optional[pulumi.Input[str]] = None, __props__=None): """ - An individual endpoint that provides a service. - - To get more information about Endpoint, see: - - * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services.endpoints) - * How-to Guides - * [Configuring an endpoint](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_an_endpoint) - ## Example Usage ### Service Directory Endpoint Basic @@ -368,14 +360,6 @@ def __init__(__self__, args: EndpointArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - An individual endpoint that provides a service. - - To get more information about Endpoint, see: - - * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services.endpoints) - * How-to Guides - * [Configuring an endpoint](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_an_endpoint) - ## Example Usage ### Service Directory Endpoint Basic diff --git a/sdk/python/pulumi_gcp/servicedirectory/namespace.py b/sdk/python/pulumi_gcp/servicedirectory/namespace.py index ddf4c44f2a..249faa5961 100644 --- a/sdk/python/pulumi_gcp/servicedirectory/namespace.py +++ b/sdk/python/pulumi_gcp/servicedirectory/namespace.py @@ -206,15 +206,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - A container for `services`. Namespaces allow administrators to group services - together and define permissions for a collection of services. - - To get more information about Namespace, see: - - * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces) - * How-to Guides - * [Configuring a namespace](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_namespace) - ## Example Usage ### Service Directory Namespace Basic @@ -268,15 +259,6 @@ def __init__(__self__, args: NamespaceArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A container for `services`. Namespaces allow administrators to group services - together and define permissions for a collection of services. - - To get more information about Namespace, see: - - * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces) - * How-to Guides - * [Configuring a namespace](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_namespace) - ## Example Usage ### Service Directory Namespace Basic diff --git a/sdk/python/pulumi_gcp/servicedirectory/namespace_iam_binding.py b/sdk/python/pulumi_gcp/servicedirectory/namespace_iam_binding.py index 6803e71ba9..41155b93e5 100644 --- a/sdk/python/pulumi_gcp/servicedirectory/namespace_iam_binding.py +++ b/sdk/python/pulumi_gcp/servicedirectory/namespace_iam_binding.py @@ -174,54 +174,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - - * `servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - * `servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - * `servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - - > **Note:** `servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `servicedirectory.NamespaceIamBinding` and `servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - - > **Note:** `servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_service\\_directory\\_namespace\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.servicedirectory.NamespaceIamPolicy("policy", policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_namespace\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.servicedirectory.NamespaceIamBinding("binding", - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_namespace\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.servicedirectory.NamespaceIamMember("member", - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -260,54 +212,6 @@ def __init__(__self__, args: NamespaceIamBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - - * `servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - * `servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - * `servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - - > **Note:** `servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `servicedirectory.NamespaceIamBinding` and `servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - - > **Note:** `servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_service\\_directory\\_namespace\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.servicedirectory.NamespaceIamPolicy("policy", policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_namespace\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.servicedirectory.NamespaceIamBinding("binding", - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_namespace\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.servicedirectory.NamespaceIamMember("member", - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/servicedirectory/namespace_iam_member.py b/sdk/python/pulumi_gcp/servicedirectory/namespace_iam_member.py index 30e55cda27..32701b8749 100644 --- a/sdk/python/pulumi_gcp/servicedirectory/namespace_iam_member.py +++ b/sdk/python/pulumi_gcp/servicedirectory/namespace_iam_member.py @@ -174,54 +174,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - - * `servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - * `servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - * `servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - - > **Note:** `servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `servicedirectory.NamespaceIamBinding` and `servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - - > **Note:** `servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_service\\_directory\\_namespace\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.servicedirectory.NamespaceIamPolicy("policy", policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_namespace\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.servicedirectory.NamespaceIamBinding("binding", - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_namespace\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.servicedirectory.NamespaceIamMember("member", - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -260,54 +212,6 @@ def __init__(__self__, args: NamespaceIamMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - - * `servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - * `servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - * `servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - - > **Note:** `servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `servicedirectory.NamespaceIamBinding` and `servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - - > **Note:** `servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_service\\_directory\\_namespace\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.servicedirectory.NamespaceIamPolicy("policy", policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_namespace\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.servicedirectory.NamespaceIamBinding("binding", - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_namespace\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.servicedirectory.NamespaceIamMember("member", - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/servicedirectory/namespace_iam_policy.py b/sdk/python/pulumi_gcp/servicedirectory/namespace_iam_policy.py index 75d7c9445a..00812bc8ae 100644 --- a/sdk/python/pulumi_gcp/servicedirectory/namespace_iam_policy.py +++ b/sdk/python/pulumi_gcp/servicedirectory/namespace_iam_policy.py @@ -119,54 +119,6 @@ def __init__(__self__, policy_data: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - - * `servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - * `servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - * `servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - - > **Note:** `servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `servicedirectory.NamespaceIamBinding` and `servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - - > **Note:** `servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_service\\_directory\\_namespace\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.servicedirectory.NamespaceIamPolicy("policy", policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_namespace\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.servicedirectory.NamespaceIamBinding("binding", - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_namespace\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.servicedirectory.NamespaceIamMember("member", - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -204,54 +156,6 @@ def __init__(__self__, args: NamespaceIamPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Service Directory Namespace. Each of these resources serves a different use case: - - * `servicedirectory.NamespaceIamPolicy`: Authoritative. Sets the IAM policy for the namespace and replaces any existing policy already attached. - * `servicedirectory.NamespaceIamBinding`: 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 namespace are preserved. - * `servicedirectory.NamespaceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the namespace are preserved. - - > **Note:** `servicedirectory.NamespaceIamPolicy` **cannot** be used in conjunction with `servicedirectory.NamespaceIamBinding` and `servicedirectory.NamespaceIamMember` or they will fight over what your policy should be. - - > **Note:** `servicedirectory.NamespaceIamBinding` resources **can be** used in conjunction with `servicedirectory.NamespaceIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_service\\_directory\\_namespace\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.servicedirectory.NamespaceIamPolicy("policy", policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_namespace\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.servicedirectory.NamespaceIamBinding("binding", - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_namespace\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.servicedirectory.NamespaceIamMember("member", - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}} * {{project}}/{{location}}/{{namespace_id}} * {{location}}/{{namespace_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory namespace IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/servicedirectory/service.py b/sdk/python/pulumi_gcp/servicedirectory/service.py index ba9f90e05e..0aaf25b63c 100644 --- a/sdk/python/pulumi_gcp/servicedirectory/service.py +++ b/sdk/python/pulumi_gcp/servicedirectory/service.py @@ -165,14 +165,6 @@ def __init__(__self__, service_id: Optional[pulumi.Input[str]] = None, __props__=None): """ - An individual service. A service contains a name and optional metadata. - - To get more information about Service, see: - - * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services) - * How-to Guides - * [Configuring a service](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_service) - ## Example Usage ### Service Directory Service Basic @@ -227,14 +219,6 @@ def __init__(__self__, args: ServiceArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - An individual service. A service contains a name and optional metadata. - - To get more information about Service, see: - - * [API documentation](https://cloud.google.com/service-directory/docs/reference/rest/v1beta1/projects.locations.namespaces.services) - * How-to Guides - * [Configuring a service](https://cloud.google.com/service-directory/docs/configuring-service-directory#configuring_a_service) - ## Example Usage ### Service Directory Service Basic diff --git a/sdk/python/pulumi_gcp/servicedirectory/service_iam_binding.py b/sdk/python/pulumi_gcp/servicedirectory/service_iam_binding.py index 2d121dd3a8..49c69128e5 100644 --- a/sdk/python/pulumi_gcp/servicedirectory/service_iam_binding.py +++ b/sdk/python/pulumi_gcp/servicedirectory/service_iam_binding.py @@ -174,54 +174,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - - * `servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - * `servicedirectory.ServiceIamBinding`: 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 service are preserved. - * `servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - - > **Note:** `servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `servicedirectory.ServiceIamBinding` and `servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - - > **Note:** `servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_service\\_directory\\_service\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.servicedirectory.ServiceIamPolicy("policy", policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_service\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.servicedirectory.ServiceIamBinding("binding", - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_service\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.servicedirectory.ServiceIamMember("member", - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -260,54 +212,6 @@ def __init__(__self__, args: ServiceIamBindingArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - - * `servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - * `servicedirectory.ServiceIamBinding`: 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 service are preserved. - * `servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - - > **Note:** `servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `servicedirectory.ServiceIamBinding` and `servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - - > **Note:** `servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_service\\_directory\\_service\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.servicedirectory.ServiceIamPolicy("policy", policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_service\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.servicedirectory.ServiceIamBinding("binding", - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_service\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.servicedirectory.ServiceIamMember("member", - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/servicedirectory/service_iam_member.py b/sdk/python/pulumi_gcp/servicedirectory/service_iam_member.py index da07391701..99d2092547 100644 --- a/sdk/python/pulumi_gcp/servicedirectory/service_iam_member.py +++ b/sdk/python/pulumi_gcp/servicedirectory/service_iam_member.py @@ -174,54 +174,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - - * `servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - * `servicedirectory.ServiceIamBinding`: 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 service are preserved. - * `servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - - > **Note:** `servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `servicedirectory.ServiceIamBinding` and `servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - - > **Note:** `servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_service\\_directory\\_service\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.servicedirectory.ServiceIamPolicy("policy", policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_service\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.servicedirectory.ServiceIamBinding("binding", - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_service\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.servicedirectory.ServiceIamMember("member", - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -260,54 +212,6 @@ def __init__(__self__, args: ServiceIamMemberArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - - * `servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - * `servicedirectory.ServiceIamBinding`: 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 service are preserved. - * `servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - - > **Note:** `servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `servicedirectory.ServiceIamBinding` and `servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - - > **Note:** `servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_service\\_directory\\_service\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.servicedirectory.ServiceIamPolicy("policy", policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_service\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.servicedirectory.ServiceIamBinding("binding", - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_service\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.servicedirectory.ServiceIamMember("member", - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/servicedirectory/service_iam_policy.py b/sdk/python/pulumi_gcp/servicedirectory/service_iam_policy.py index 040d2c1b85..668ce24a7a 100644 --- a/sdk/python/pulumi_gcp/servicedirectory/service_iam_policy.py +++ b/sdk/python/pulumi_gcp/servicedirectory/service_iam_policy.py @@ -119,54 +119,6 @@ def __init__(__self__, policy_data: Optional[pulumi.Input[str]] = None, __props__=None): """ - Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - - * `servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - * `servicedirectory.ServiceIamBinding`: 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 service are preserved. - * `servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - - > **Note:** `servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `servicedirectory.ServiceIamBinding` and `servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - - > **Note:** `servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_service\\_directory\\_service\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.servicedirectory.ServiceIamPolicy("policy", policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_service\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.servicedirectory.ServiceIamBinding("binding", - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_service\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.servicedirectory.ServiceIamMember("member", - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. @@ -204,54 +156,6 @@ def __init__(__self__, args: ServiceIamPolicyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Three different resources help you manage your IAM policy for Service Directory Service. Each of these resources serves a different use case: - - * `servicedirectory.ServiceIamPolicy`: Authoritative. Sets the IAM policy for the service and replaces any existing policy already attached. - * `servicedirectory.ServiceIamBinding`: 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 service are preserved. - * `servicedirectory.ServiceIamMember`: Non-authoritative. Updates the IAM policy to grant a role to a new member. Other members for the role for the service are preserved. - - > **Note:** `servicedirectory.ServiceIamPolicy` **cannot** be used in conjunction with `servicedirectory.ServiceIamBinding` and `servicedirectory.ServiceIamMember` or they will fight over what your policy should be. - - > **Note:** `servicedirectory.ServiceIamBinding` resources **can be** used in conjunction with `servicedirectory.ServiceIamMember` resources **only if** they do not grant privilege to the same role. - - ## google\\_service\\_directory\\_service\\_iam\\_policy - - ```python - import pulumi - import pulumi_gcp as gcp - - admin = gcp.organizations.get_iam_policy(bindings=[gcp.organizations.GetIAMPolicyBindingArgs( - role="roles/viewer", - members=["user:jane@example.com"], - )]) - policy = gcp.servicedirectory.ServiceIamPolicy("policy", policy_data=admin.policy_data, - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_service\\_iam\\_binding - - ```python - import pulumi - import pulumi_gcp as gcp - - binding = gcp.servicedirectory.ServiceIamBinding("binding", - role="roles/viewer", - members=["user:jane@example.com"], - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - - ## google\\_service\\_directory\\_service\\_iam\\_member - - ```python - import pulumi - import pulumi_gcp as gcp - - member = gcp.servicedirectory.ServiceIamMember("member", - role="roles/viewer", - member="user:jane@example.com", - opts=pulumi.ResourceOptions(provider=google_beta)) - ``` - ## Import For all import syntaxes, the "resource in question" can take any of the following forms* projects/{{project}}/locations/{{location}}/namespaces/{{namespace_id}}/services/{{service_id}} * {{project}}/{{location}}/{{namespace_id}}/{{service_id}} * {{location}}/{{namespace_id}}/{{service_id}} Any variables not passed in the import command will be taken from the provider configuration. Service Directory service IAM resources can be imported using the resource identifiers, role, and member. IAM member imports use space-delimited identifiersthe resource in question, the role, and the member identity, e.g. diff --git a/sdk/python/pulumi_gcp/serviceusage/consumer_quota_override.py b/sdk/python/pulumi_gcp/serviceusage/consumer_quota_override.py index ad12b3d25e..19a68bd853 100644 --- a/sdk/python/pulumi_gcp/serviceusage/consumer_quota_override.py +++ b/sdk/python/pulumi_gcp/serviceusage/consumer_quota_override.py @@ -293,16 +293,6 @@ def __init__(__self__, service: Optional[pulumi.Input[str]] = None, __props__=None): """ - A consumer override is applied to the consumer on its own authority to limit its own quota usage. - Consumer overrides cannot be used to grant more quota than would be allowed by admin overrides, - producer overrides, or the default limit of the service. - - To get more information about ConsumerQuotaOverride, see: - - * How-to Guides - * [Getting Started](https://cloud.google.com/service-usage/docs/getting-started) - * [REST API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services.consumerQuotaMetrics.limits.consumerOverrides) - ## Example Usage ## Import @@ -342,16 +332,6 @@ def __init__(__self__, args: ConsumerQuotaOverrideArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A consumer override is applied to the consumer on its own authority to limit its own quota usage. - Consumer overrides cannot be used to grant more quota than would be allowed by admin overrides, - producer overrides, or the default limit of the service. - - To get more information about ConsumerQuotaOverride, see: - - * How-to Guides - * [Getting Started](https://cloud.google.com/service-usage/docs/getting-started) - * [REST API documentation](https://cloud.google.com/service-usage/docs/reference/rest/v1beta1/services.consumerQuotaMetrics.limits.consumerOverrides) - ## Example Usage ## Import diff --git a/sdk/python/pulumi_gcp/spanner/database.py b/sdk/python/pulumi_gcp/spanner/database.py index 1173221989..6475865e59 100644 --- a/sdk/python/pulumi_gcp/spanner/database.py +++ b/sdk/python/pulumi_gcp/spanner/database.py @@ -34,8 +34,8 @@ def __init__(__self__, *, database. Statements can create tables, indexes, etc. These statements execute atomically with the creation of the database: if there is an error in any statement, the database is not created. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` that would delete the instance will fail. + :param pulumi.Input[bool] deletion_protection: Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + 'terraform destroy' or 'terraform apply' that would delete the instance will fail. :param pulumi.Input['DatabaseEncryptionConfigArgs'] encryption_config: Encryption configuration for the database Structure is documented below. :param pulumi.Input[str] name: A unique identifier for the database, which cannot be changed after @@ -109,8 +109,8 @@ def ddls(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> Optional[pulumi.Input[bool]]: """ - Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` that would delete the instance will fail. + Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + 'terraform destroy' or 'terraform apply' that would delete the instance will fail. """ return pulumi.get(self, "deletion_protection") @@ -195,8 +195,8 @@ def __init__(__self__, *, database. Statements can create tables, indexes, etc. These statements execute atomically with the creation of the database: if there is an error in any statement, the database is not created. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` that would delete the instance will fail. + :param pulumi.Input[bool] deletion_protection: Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + 'terraform destroy' or 'terraform apply' that would delete the instance will fail. :param pulumi.Input['DatabaseEncryptionConfigArgs'] encryption_config: Encryption configuration for the database Structure is documented below. :param pulumi.Input[str] instance: The instance to create the database on. @@ -263,8 +263,8 @@ def ddls(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]]): @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> Optional[pulumi.Input[bool]]: """ - Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` that would delete the instance will fail. + Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + 'terraform destroy' or 'terraform apply' that would delete the instance will fail. """ return pulumi.get(self, "deletion_protection") @@ -367,16 +367,6 @@ def __init__(__self__, version_retention_period: Optional[pulumi.Input[str]] = None, __props__=None): """ - A Cloud Spanner Database which is hosted on a Spanner instance. - - To get more information about Database, see: - - * [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instances.databases) - * How-to Guides - * [Official Documentation](https://cloud.google.com/spanner/) - - > **Warning:** It is strongly recommended to set `lifecycle { prevent_destroy = true }` on databases in order to prevent accidental data loss. - ## Example Usage ### Spanner Database Basic @@ -427,8 +417,8 @@ def __init__(__self__, database. Statements can create tables, indexes, etc. These statements execute atomically with the creation of the database: if there is an error in any statement, the database is not created. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` that would delete the instance will fail. + :param pulumi.Input[bool] deletion_protection: Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + 'terraform destroy' or 'terraform apply' that would delete the instance will fail. :param pulumi.Input[pulumi.InputType['DatabaseEncryptionConfigArgs']] encryption_config: Encryption configuration for the database Structure is documented below. :param pulumi.Input[str] instance: The instance to create the database on. @@ -449,16 +439,6 @@ def __init__(__self__, args: DatabaseArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A Cloud Spanner Database which is hosted on a Spanner instance. - - To get more information about Database, see: - - * [API documentation](https://cloud.google.com/spanner/docs/reference/rest/v1/projects.instances.databases) - * How-to Guides - * [Official Documentation](https://cloud.google.com/spanner/) - - > **Warning:** It is strongly recommended to set `lifecycle { prevent_destroy = true }` on databases in order to prevent accidental data loss. - ## Example Usage ### Spanner Database Basic @@ -576,8 +556,8 @@ def get(resource_name: str, database. Statements can create tables, indexes, etc. These statements execute atomically with the creation of the database: if there is an error in any statement, the database is not created. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` that would delete the instance will fail. + :param pulumi.Input[bool] deletion_protection: Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + 'terraform destroy' or 'terraform apply' that would delete the instance will fail. :param pulumi.Input[pulumi.InputType['DatabaseEncryptionConfigArgs']] encryption_config: Encryption configuration for the database Structure is documented below. :param pulumi.Input[str] instance: The instance to create the database on. @@ -632,8 +612,8 @@ def ddls(self) -> pulumi.Output[Optional[Sequence[str]]]: @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> pulumi.Output[Optional[bool]]: """ - Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` that would delete the instance will fail. + Whether or not to allow Terraform to destroy the instance. Unless this field is set to false in Terraform state, a + 'terraform destroy' or 'terraform apply' that would delete the instance will fail. """ return pulumi.get(self, "deletion_protection") diff --git a/sdk/python/pulumi_gcp/sql/database_instance.py b/sdk/python/pulumi_gcp/sql/database_instance.py index da0c598644..b26a34ea30 100644 --- a/sdk/python/pulumi_gcp/sql/database_instance.py +++ b/sdk/python/pulumi_gcp/sql/database_instance.py @@ -40,38 +40,21 @@ def __init__(__self__, *, `SQLSERVER_2019_WEB`. [Database Version Policies](https://cloud.google.com/sql/docs/db-versions) includes an up-to-date reference of supported versions. - :param pulumi.Input['DatabaseInstanceCloneArgs'] clone: The context needed to create this instance as a clone of another instance. When this field is set during - resource creation, this provider will attempt to clone another instance as indicated in the context. The - configuration is detailed below. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. - :param pulumi.Input[str] encryption_key_name: The full path to the encryption key used for the CMEK disk encryption. Setting - up disk encryption currently requires manual steps outside of this provider. - The provided key must be in the same region as the SQL instance. In order - to use this feature, a special kind of service account must be created and - granted permission on this key. This step can currently only be done - manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). + :param pulumi.Input['DatabaseInstanceCloneArgs'] clone: Configuration for creating a new instance as a clone of another instance. + :param pulumi.Input[bool] deletion_protection: Used to block Terraform from deleting a SQL Instance. Defaults to true. :param pulumi.Input[str] maintenance_version: The current software version on the instance. This attribute can not be set during creation. Refer to `available_maintenance_versions` attribute to see what `maintenance_version` are available for upgrade. When this attribute gets updated, it will cause an instance restart. Setting a `maintenance_version` value that is older than the current one on the instance will be ignored. :param pulumi.Input[str] master_instance_name: The name of the existing instance that will act as the master in the replication setup. Note, this requires the master to have `binary_log_enabled` set, as well as existing backups. - :param pulumi.Input[str] name: The name of the instance. If the name is left - blank, the provider will randomly generate one when the instance is first - created. This is done because after a name is used, it cannot be reused for - up to [one week](https://cloud.google.com/sql/docs/delete-instance). + :param pulumi.Input[str] name: The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + created. This is done because after a name is used, it cannot be reused for up to one week. :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] region: The region the instance will sit in. If a region is not provided in the resource definition, the provider region will be used instead. :param pulumi.Input['DatabaseInstanceReplicaConfigurationArgs'] replica_configuration: The configuration for replication. The configuration is detailed below. Valid only for MySQL instances. - :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 - block during resource creation/update will trigger the restore action after the resource is created/updated. - :param pulumi.Input[str] root_password: Initial root password. Required for MS SQL Server. + :param pulumi.Input[str] root_password: Initial root password. Can be updated. Required for MS SQL Server. :param pulumi.Input['DatabaseInstanceSettingsArgs'] settings: The settings to use for the database. The configuration is detailed below. Required if `clone` is not set. """ @@ -125,9 +108,7 @@ def database_version(self, value: pulumi.Input[str]): @pulumi.getter def clone(self) -> Optional[pulumi.Input['DatabaseInstanceCloneArgs']]: """ - The context needed to create this instance as a clone of another instance. When this field is set during - resource creation, this provider will attempt to clone another instance as indicated in the context. The - configuration is detailed below. + Configuration for creating a new instance as a clone of another instance. """ return pulumi.get(self, "clone") @@ -139,8 +120,7 @@ def clone(self, value: Optional[pulumi.Input['DatabaseInstanceCloneArgs']]): @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> Optional[pulumi.Input[bool]]: """ - Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + Used to block Terraform from deleting a SQL Instance. Defaults to true. """ return pulumi.get(self, "deletion_protection") @@ -151,16 +131,6 @@ def deletion_protection(self, value: Optional[pulumi.Input[bool]]): @property @pulumi.getter(name="encryptionKeyName") def encryption_key_name(self) -> Optional[pulumi.Input[str]]: - """ - The full path to the encryption key used for the CMEK disk encryption. Setting - up disk encryption currently requires manual steps outside of this provider. - The provided key must be in the same region as the SQL instance. In order - to use this feature, a special kind of service account must be created and - granted permission on this key. This step can currently only be done - manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - """ return pulumi.get(self, "encryption_key_name") @encryption_key_name.setter @@ -197,10 +167,8 @@ def master_instance_name(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def name(self) -> Optional[pulumi.Input[str]]: """ - The name of the instance. If the name is left - blank, the provider will randomly generate one when the instance is first - created. This is done because after a name is used, it cannot be reused for - up to [one week](https://cloud.google.com/sql/docs/delete-instance). + The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + created. This is done because after a name is used, it cannot be reused for up to one week. """ return pulumi.get(self, "name") @@ -250,12 +218,6 @@ def replica_configuration(self, value: Optional[pulumi.Input['DatabaseInstanceRe @property @pulumi.getter(name="restoreBackupContext") def restore_backup_context(self) -> Optional[pulumi.Input['DatabaseInstanceRestoreBackupContextArgs']]: - """ - 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 - block during resource creation/update will trigger the restore action after the resource is created/updated. - """ return pulumi.get(self, "restore_backup_context") @restore_backup_context.setter @@ -266,7 +228,7 @@ def restore_backup_context(self, value: Optional[pulumi.Input['DatabaseInstanceR @pulumi.getter(name="rootPassword") def root_password(self) -> Optional[pulumi.Input[str]]: """ - Initial root password. Required for MS SQL Server. + Initial root password. Can be updated. Required for MS SQL Server. """ return pulumi.get(self, "root_password") @@ -317,9 +279,7 @@ def __init__(__self__, *, """ Input properties used for looking up and filtering DatabaseInstance resources. :param pulumi.Input[Sequence[pulumi.Input[str]]] available_maintenance_versions: The list of all maintenance versions applicable on the instance. - :param pulumi.Input['DatabaseInstanceCloneArgs'] clone: The context needed to create this instance as a clone of another instance. When this field is set during - resource creation, this provider will attempt to clone another instance as indicated in the context. The - configuration is detailed below. + :param pulumi.Input['DatabaseInstanceCloneArgs'] clone: Configuration for creating a new instance as a clone of another instance. :param pulumi.Input[str] connection_name: The connection name of the instance to be used in connection strings. For example, when connecting with [Cloud SQL Proxy](https://cloud.google.com/sql/docs/mysql/connect-admin-proxy). :param pulumi.Input[str] database_version: The MySQL, PostgreSQL or @@ -331,39 +291,27 @@ def __init__(__self__, *, `SQLSERVER_2019_WEB`. [Database Version Policies](https://cloud.google.com/sql/docs/db-versions) includes an up-to-date reference of supported versions. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. - :param pulumi.Input[str] encryption_key_name: The full path to the encryption key used for the CMEK disk encryption. Setting - up disk encryption currently requires manual steps outside of this provider. - The provided key must be in the same region as the SQL instance. In order - to use this feature, a special kind of service account must be created and - granted permission on this key. This step can currently only be done - manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - :param pulumi.Input[str] first_ip_address: The first IPv4 address of any type assigned. + :param pulumi.Input[bool] deletion_protection: Used to block Terraform from deleting a SQL Instance. Defaults to true. + :param pulumi.Input[str] first_ip_address: The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + output when the resource is configured with a count. :param pulumi.Input[str] instance_type: The type of the instance. The supported values are `SQL_INSTANCE_TYPE_UNSPECIFIED`, `CLOUD_SQL_INSTANCE`, `ON_PREMISES_INSTANCE` and `READ_REPLICA_INSTANCE`. :param pulumi.Input[str] maintenance_version: The current software version on the instance. This attribute can not be set during creation. Refer to `available_maintenance_versions` attribute to see what `maintenance_version` are available for upgrade. When this attribute gets updated, it will cause an instance restart. Setting a `maintenance_version` value that is older than the current one on the instance will be ignored. :param pulumi.Input[str] master_instance_name: The name of the existing instance that will act as the master in the replication setup. Note, this requires the master to have `binary_log_enabled` set, as well as existing backups. - :param pulumi.Input[str] name: The name of the instance. If the name is left - blank, the provider will randomly generate one when the instance is first - created. This is done because after a name is used, it cannot be reused for - up to [one week](https://cloud.google.com/sql/docs/delete-instance). - :param pulumi.Input[str] private_ip_address: The first private (`PRIVATE`) IPv4 address assigned. + :param pulumi.Input[str] name: The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + created. This is done because after a name is used, it cannot be reused for up to one week. + :param pulumi.Input[str] private_ip_address: IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + access an IP of a specific type without performing filtering in a Terraform config. :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] public_ip_address: The first public (`PRIMARY`) IPv4 address assigned. + :param pulumi.Input[str] public_ip_address: IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + access an IP of a specific type without performing filtering in a Terraform config. :param pulumi.Input[str] region: The region the instance will sit in. If a region is not provided in the resource definition, the provider region will be used instead. :param pulumi.Input['DatabaseInstanceReplicaConfigurationArgs'] replica_configuration: The configuration for replication. The configuration is detailed below. Valid only for MySQL instances. - :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 - block during resource creation/update will trigger the restore action after the resource is created/updated. - :param pulumi.Input[str] root_password: Initial root password. Required for MS SQL Server. + :param pulumi.Input[str] root_password: Initial root password. Can be updated. Required for MS SQL Server. :param pulumi.Input[str] self_link: The URI of the created resource. :param pulumi.Input[str] service_account_email_address: The service account email address assigned to the instance. @@ -433,9 +381,7 @@ def available_maintenance_versions(self, value: Optional[pulumi.Input[Sequence[p @pulumi.getter def clone(self) -> Optional[pulumi.Input['DatabaseInstanceCloneArgs']]: """ - The context needed to create this instance as a clone of another instance. When this field is set during - resource creation, this provider will attempt to clone another instance as indicated in the context. The - configuration is detailed below. + Configuration for creating a new instance as a clone of another instance. """ return pulumi.get(self, "clone") @@ -480,8 +426,7 @@ def database_version(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> Optional[pulumi.Input[bool]]: """ - Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + Used to block Terraform from deleting a SQL Instance. Defaults to true. """ return pulumi.get(self, "deletion_protection") @@ -492,16 +437,6 @@ def deletion_protection(self, value: Optional[pulumi.Input[bool]]): @property @pulumi.getter(name="encryptionKeyName") def encryption_key_name(self) -> Optional[pulumi.Input[str]]: - """ - The full path to the encryption key used for the CMEK disk encryption. Setting - up disk encryption currently requires manual steps outside of this provider. - The provided key must be in the same region as the SQL instance. In order - to use this feature, a special kind of service account must be created and - granted permission on this key. This step can currently only be done - manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - """ return pulumi.get(self, "encryption_key_name") @encryption_key_name.setter @@ -512,7 +447,8 @@ def encryption_key_name(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="firstIpAddress") def first_ip_address(self) -> Optional[pulumi.Input[str]]: """ - The first IPv4 address of any type assigned. + The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + output when the resource is configured with a count. """ return pulumi.get(self, "first_ip_address") @@ -571,10 +507,8 @@ def master_instance_name(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def name(self) -> Optional[pulumi.Input[str]]: """ - The name of the instance. If the name is left - blank, the provider will randomly generate one when the instance is first - created. This is done because after a name is used, it cannot be reused for - up to [one week](https://cloud.google.com/sql/docs/delete-instance). + The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + created. This is done because after a name is used, it cannot be reused for up to one week. """ return pulumi.get(self, "name") @@ -586,7 +520,8 @@ def name(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="privateIpAddress") def private_ip_address(self) -> Optional[pulumi.Input[str]]: """ - The first private (`PRIVATE`) IPv4 address assigned. + IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + access an IP of a specific type without performing filtering in a Terraform config. """ return pulumi.get(self, "private_ip_address") @@ -611,7 +546,8 @@ def project(self, value: Optional[pulumi.Input[str]]): @pulumi.getter(name="publicIpAddress") def public_ip_address(self) -> Optional[pulumi.Input[str]]: """ - The first public (`PRIMARY`) IPv4 address assigned. + IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + access an IP of a specific type without performing filtering in a Terraform config. """ return pulumi.get(self, "public_ip_address") @@ -648,12 +584,6 @@ def replica_configuration(self, value: Optional[pulumi.Input['DatabaseInstanceRe @property @pulumi.getter(name="restoreBackupContext") def restore_backup_context(self) -> Optional[pulumi.Input['DatabaseInstanceRestoreBackupContextArgs']]: - """ - 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 - block during resource creation/update will trigger the restore action after the resource is created/updated. - """ return pulumi.get(self, "restore_backup_context") @restore_backup_context.setter @@ -664,7 +594,7 @@ def restore_backup_context(self, value: Optional[pulumi.Input['DatabaseInstanceR @pulumi.getter(name="rootPassword") def root_password(self) -> Optional[pulumi.Input[str]]: """ - Initial root password. Required for MS SQL Server. + Initial root password. Can be updated. Required for MS SQL Server. """ return pulumi.get(self, "root_password") @@ -740,18 +670,6 @@ def __init__(__self__, settings: Optional[pulumi.Input[pulumi.InputType['DatabaseInstanceSettingsArgs']]] = None, __props__=None): """ - Creates a new Google SQL Database Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), - or the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/instances). - - > **NOTE on `sql.DatabaseInstance`:** - Second-generation instances include a - default 'root'@'%' user with no password. This user will be deleted by the provider on - instance creation. You should use `sql.User` to define a custom user with - a restricted host and strong password. - - > **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false` - (and run `pulumi update` to write the field to state) in order to destroy an instance. - It is recommended to not set this field (or set it to true) until you're ready to destroy the instance and its databases. - ## Example Usage ### SQL Second Generation Instance @@ -821,9 +739,7 @@ def __init__(__self__, :param str resource_name: The name of the resource. :param pulumi.ResourceOptions opts: Options for the resource. - :param pulumi.Input[pulumi.InputType['DatabaseInstanceCloneArgs']] clone: The context needed to create this instance as a clone of another instance. When this field is set during - resource creation, this provider will attempt to clone another instance as indicated in the context. The - configuration is detailed below. + :param pulumi.Input[pulumi.InputType['DatabaseInstanceCloneArgs']] clone: Configuration for creating a new instance as a clone of another instance. :param pulumi.Input[str] database_version: The MySQL, PostgreSQL or SQL Server version to use. Supported values include `MYSQL_5_6`, `MYSQL_5_7`, `MYSQL_8_0`, `POSTGRES_9_6`,`POSTGRES_10`, `POSTGRES_11`, @@ -833,35 +749,20 @@ def __init__(__self__, `SQLSERVER_2019_WEB`. [Database Version Policies](https://cloud.google.com/sql/docs/db-versions) includes an up-to-date reference of supported versions. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. - :param pulumi.Input[str] encryption_key_name: The full path to the encryption key used for the CMEK disk encryption. Setting - up disk encryption currently requires manual steps outside of this provider. - The provided key must be in the same region as the SQL instance. In order - to use this feature, a special kind of service account must be created and - granted permission on this key. This step can currently only be done - manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). + :param pulumi.Input[bool] deletion_protection: Used to block Terraform from deleting a SQL Instance. Defaults to true. :param pulumi.Input[str] maintenance_version: The current software version on the instance. This attribute can not be set during creation. Refer to `available_maintenance_versions` attribute to see what `maintenance_version` are available for upgrade. When this attribute gets updated, it will cause an instance restart. Setting a `maintenance_version` value that is older than the current one on the instance will be ignored. :param pulumi.Input[str] master_instance_name: The name of the existing instance that will act as the master in the replication setup. Note, this requires the master to have `binary_log_enabled` set, as well as existing backups. - :param pulumi.Input[str] name: The name of the instance. If the name is left - blank, the provider will randomly generate one when the instance is first - created. This is done because after a name is used, it cannot be reused for - up to [one week](https://cloud.google.com/sql/docs/delete-instance). + :param pulumi.Input[str] name: The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + created. This is done because after a name is used, it cannot be reused for up to one week. :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] region: The region the instance will sit in. If a region is not provided in the resource definition, the provider region will be used instead. :param pulumi.Input[pulumi.InputType['DatabaseInstanceReplicaConfigurationArgs']] replica_configuration: The configuration for replication. The configuration is detailed below. Valid only for MySQL instances. - :param pulumi.Input[pulumi.InputType['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 - block during resource creation/update will trigger the restore action after the resource is created/updated. - :param pulumi.Input[str] root_password: Initial root password. Required for MS SQL Server. + :param pulumi.Input[str] root_password: Initial root password. Can be updated. Required for MS SQL Server. :param pulumi.Input[pulumi.InputType['DatabaseInstanceSettingsArgs']] settings: The settings to use for the database. The configuration is detailed below. Required if `clone` is not set. """ @@ -872,18 +773,6 @@ def __init__(__self__, args: DatabaseInstanceArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Creates a new Google SQL Database Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), - or the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/instances). - - > **NOTE on `sql.DatabaseInstance`:** - Second-generation instances include a - default 'root'@'%' user with no password. This user will be deleted by the provider on - instance creation. You should use `sql.User` to define a custom user with - a restricted host and strong password. - - > **Note**: On newer versions of the provider, you must explicitly set `deletion_protection=false` - (and run `pulumi update` to write the field to state) in order to destroy an instance. - It is recommended to not set this field (or set it to true) until you're ready to destroy the instance and its databases. - ## Example Usage ### SQL Second Generation Instance @@ -1056,9 +945,7 @@ def get(resource_name: str, :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. :param pulumi.ResourceOptions opts: Options for the resource. :param pulumi.Input[Sequence[pulumi.Input[str]]] available_maintenance_versions: The list of all maintenance versions applicable on the instance. - :param pulumi.Input[pulumi.InputType['DatabaseInstanceCloneArgs']] clone: The context needed to create this instance as a clone of another instance. When this field is set during - resource creation, this provider will attempt to clone another instance as indicated in the context. The - configuration is detailed below. + :param pulumi.Input[pulumi.InputType['DatabaseInstanceCloneArgs']] clone: Configuration for creating a new instance as a clone of another instance. :param pulumi.Input[str] connection_name: The connection name of the instance to be used in connection strings. For example, when connecting with [Cloud SQL Proxy](https://cloud.google.com/sql/docs/mysql/connect-admin-proxy). :param pulumi.Input[str] database_version: The MySQL, PostgreSQL or @@ -1070,39 +957,27 @@ def get(resource_name: str, `SQLSERVER_2019_WEB`. [Database Version Policies](https://cloud.google.com/sql/docs/db-versions) includes an up-to-date reference of supported versions. - :param pulumi.Input[bool] deletion_protection: Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. - :param pulumi.Input[str] encryption_key_name: The full path to the encryption key used for the CMEK disk encryption. Setting - up disk encryption currently requires manual steps outside of this provider. - The provided key must be in the same region as the SQL instance. In order - to use this feature, a special kind of service account must be created and - granted permission on this key. This step can currently only be done - manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - :param pulumi.Input[str] first_ip_address: The first IPv4 address of any type assigned. + :param pulumi.Input[bool] deletion_protection: Used to block Terraform from deleting a SQL Instance. Defaults to true. + :param pulumi.Input[str] first_ip_address: The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + output when the resource is configured with a count. :param pulumi.Input[str] instance_type: The type of the instance. The supported values are `SQL_INSTANCE_TYPE_UNSPECIFIED`, `CLOUD_SQL_INSTANCE`, `ON_PREMISES_INSTANCE` and `READ_REPLICA_INSTANCE`. :param pulumi.Input[str] maintenance_version: The current software version on the instance. This attribute can not be set during creation. Refer to `available_maintenance_versions` attribute to see what `maintenance_version` are available for upgrade. When this attribute gets updated, it will cause an instance restart. Setting a `maintenance_version` value that is older than the current one on the instance will be ignored. :param pulumi.Input[str] master_instance_name: The name of the existing instance that will act as the master in the replication setup. Note, this requires the master to have `binary_log_enabled` set, as well as existing backups. - :param pulumi.Input[str] name: The name of the instance. If the name is left - blank, the provider will randomly generate one when the instance is first - created. This is done because after a name is used, it cannot be reused for - up to [one week](https://cloud.google.com/sql/docs/delete-instance). - :param pulumi.Input[str] private_ip_address: The first private (`PRIVATE`) IPv4 address assigned. + :param pulumi.Input[str] name: The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + created. This is done because after a name is used, it cannot be reused for up to one week. + :param pulumi.Input[str] private_ip_address: IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + access an IP of a specific type without performing filtering in a Terraform config. :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] public_ip_address: The first public (`PRIMARY`) IPv4 address assigned. + :param pulumi.Input[str] public_ip_address: IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + access an IP of a specific type without performing filtering in a Terraform config. :param pulumi.Input[str] region: The region the instance will sit in. If a region is not provided in the resource definition, the provider region will be used instead. :param pulumi.Input[pulumi.InputType['DatabaseInstanceReplicaConfigurationArgs']] replica_configuration: The configuration for replication. The configuration is detailed below. Valid only for MySQL instances. - :param pulumi.Input[pulumi.InputType['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 - block during resource creation/update will trigger the restore action after the resource is created/updated. - :param pulumi.Input[str] root_password: Initial root password. Required for MS SQL Server. + :param pulumi.Input[str] root_password: Initial root password. Can be updated. Required for MS SQL Server. :param pulumi.Input[str] self_link: The URI of the created resource. :param pulumi.Input[str] service_account_email_address: The service account email address assigned to the instance. @@ -1150,9 +1025,7 @@ def available_maintenance_versions(self) -> pulumi.Output[Sequence[str]]: @pulumi.getter def clone(self) -> pulumi.Output[Optional['outputs.DatabaseInstanceClone']]: """ - The context needed to create this instance as a clone of another instance. When this field is set during - resource creation, this provider will attempt to clone another instance as indicated in the context. The - configuration is detailed below. + Configuration for creating a new instance as a clone of another instance. """ return pulumi.get(self, "clone") @@ -1185,31 +1058,21 @@ def database_version(self) -> pulumi.Output[str]: @pulumi.getter(name="deletionProtection") def deletion_protection(self) -> pulumi.Output[Optional[bool]]: """ - Whether or not to allow the provider to destroy the instance. Unless this field is set to false - in state, a `destroy` or `update` command that deletes the instance will fail. Defaults to `true`. + Used to block Terraform from deleting a SQL Instance. Defaults to true. """ return pulumi.get(self, "deletion_protection") @property @pulumi.getter(name="encryptionKeyName") def encryption_key_name(self) -> pulumi.Output[str]: - """ - The full path to the encryption key used for the CMEK disk encryption. Setting - up disk encryption currently requires manual steps outside of this provider. - The provided key must be in the same region as the SQL instance. In order - to use this feature, a special kind of service account must be created and - granted permission on this key. This step can currently only be done - manually, please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#service-account). - That service account needs the `Cloud KMS > Cloud KMS CryptoKey Encrypter/Decrypter` role on your - key - please see [this step](https://cloud.google.com/sql/docs/mysql/configure-cmek#grantkey). - """ return pulumi.get(self, "encryption_key_name") @property @pulumi.getter(name="firstIpAddress") def first_ip_address(self) -> pulumi.Output[str]: """ - The first IPv4 address of any type assigned. + The first IPv4 address of any type assigned. This is to support accessing the first address in the list in a terraform + output when the resource is configured with a count. """ return pulumi.get(self, "first_ip_address") @@ -1248,10 +1111,8 @@ def master_instance_name(self) -> pulumi.Output[str]: @pulumi.getter def name(self) -> pulumi.Output[str]: """ - The name of the instance. If the name is left - blank, the provider will randomly generate one when the instance is first - created. This is done because after a name is used, it cannot be reused for - up to [one week](https://cloud.google.com/sql/docs/delete-instance). + The name of the instance. If the name is left blank, Terraform will randomly generate one when the instance is first + created. This is done because after a name is used, it cannot be reused for up to one week. """ return pulumi.get(self, "name") @@ -1259,7 +1120,8 @@ def name(self) -> pulumi.Output[str]: @pulumi.getter(name="privateIpAddress") def private_ip_address(self) -> pulumi.Output[str]: """ - The first private (`PRIVATE`) IPv4 address assigned. + IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + access an IP of a specific type without performing filtering in a Terraform config. """ return pulumi.get(self, "private_ip_address") @@ -1276,7 +1138,8 @@ def project(self) -> pulumi.Output[str]: @pulumi.getter(name="publicIpAddress") def public_ip_address(self) -> pulumi.Output[str]: """ - The first public (`PRIMARY`) IPv4 address assigned. + IPv4 address assigned. This is a workaround for an issue fixed in Terraform 0.12 but also provides a convenient way to + access an IP of a specific type without performing filtering in a Terraform config. """ return pulumi.get(self, "public_ip_address") @@ -1301,19 +1164,13 @@ def replica_configuration(self) -> pulumi.Output['outputs.DatabaseInstanceReplic @property @pulumi.getter(name="restoreBackupContext") def restore_backup_context(self) -> pulumi.Output[Optional['outputs.DatabaseInstanceRestoreBackupContext']]: - """ - 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 - block during resource creation/update will trigger the restore action after the resource is created/updated. - """ return pulumi.get(self, "restore_backup_context") @property @pulumi.getter(name="rootPassword") def root_password(self) -> pulumi.Output[Optional[str]]: """ - Initial root password. Required for MS SQL Server. + Initial root password. Can be updated. Required for MS SQL Server. """ return pulumi.get(self, "root_password") diff --git a/sdk/python/pulumi_gcp/sql/source_representation_instance.py b/sdk/python/pulumi_gcp/sql/source_representation_instance.py index d49b69d7c4..a02a5e3008 100644 --- a/sdk/python/pulumi_gcp/sql/source_representation_instance.py +++ b/sdk/python/pulumi_gcp/sql/source_representation_instance.py @@ -37,6 +37,7 @@ def __init__(__self__, *, :param pulumi.Input[str] dump_file_path: A file in the bucket that contains the data from the external server. :param pulumi.Input[str] name: The name of the source representation instance. Use any valid Cloud SQL instance name. :param pulumi.Input[str] password: The password for the replication user account. + **Note**: This property is sensitive and will not be displayed in the plan. :param pulumi.Input[int] port: The externally accessible port for the source database server. Defaults to 3306. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. @@ -158,6 +159,7 @@ def name(self, value: Optional[pulumi.Input[str]]): def password(self) -> Optional[pulumi.Input[str]]: """ The password for the replication user account. + **Note**: This property is sensitive and will not be displayed in the plan. """ return pulumi.get(self, "password") @@ -243,6 +245,7 @@ def __init__(__self__, *, :param pulumi.Input[str] host: The externally accessible IPv4 address for the source database server. :param pulumi.Input[str] name: The name of the source representation instance. Use any valid Cloud SQL instance name. :param pulumi.Input[str] password: The password for the replication user account. + **Note**: This property is sensitive and will not be displayed in the plan. :param pulumi.Input[int] port: The externally accessible port for the source database server. Defaults to 3306. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. @@ -366,6 +369,7 @@ def name(self, value: Optional[pulumi.Input[str]]): def password(self) -> Optional[pulumi.Input[str]]: """ The password for the replication user account. + **Note**: This property is sensitive and will not be displayed in the plan. """ return pulumi.get(self, "password") @@ -444,12 +448,6 @@ def __init__(__self__, username: Optional[pulumi.Input[str]] = None, __props__=None): """ - A source representation instance is a Cloud SQL instance that represents - the source database server to the Cloud SQL replica. It is visible in the - Cloud Console and appears the same as a regular Cloud SQL instance, but it - contains no data, requires no configuration or maintenance, and does not - affect billing. You cannot update the source representation instance. - ## Example Usage ### Sql Source Representation Instance Basic @@ -459,9 +457,12 @@ def __init__(__self__, instance = gcp.sql.SourceRepresentationInstance("instance", database_version="MYSQL_8_0", + dump_file_path="gs://replica-bucket/source-database.sql.gz", host="10.20.30.40", + password="password-for-the-user", port=3306, - region="us-central1") + region="us-central1", + username="some-user") ``` ## Import @@ -491,6 +492,7 @@ def __init__(__self__, :param pulumi.Input[str] host: The externally accessible IPv4 address for the source database server. :param pulumi.Input[str] name: The name of the source representation instance. Use any valid Cloud SQL instance name. :param pulumi.Input[str] password: The password for the replication user account. + **Note**: This property is sensitive and will not be displayed in the plan. :param pulumi.Input[int] port: The externally accessible port for the source database server. Defaults to 3306. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. @@ -506,12 +508,6 @@ def __init__(__self__, args: SourceRepresentationInstanceArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - A source representation instance is a Cloud SQL instance that represents - the source database server to the Cloud SQL replica. It is visible in the - Cloud Console and appears the same as a regular Cloud SQL instance, but it - contains no data, requires no configuration or maintenance, and does not - affect billing. You cannot update the source representation instance. - ## Example Usage ### Sql Source Representation Instance Basic @@ -521,9 +517,12 @@ def __init__(__self__, instance = gcp.sql.SourceRepresentationInstance("instance", database_version="MYSQL_8_0", + dump_file_path="gs://replica-bucket/source-database.sql.gz", host="10.20.30.40", + password="password-for-the-user", port=3306, - region="us-central1") + region="us-central1", + username="some-user") ``` ## Import @@ -589,11 +588,13 @@ def _internal_init(__self__, raise TypeError("Missing required property 'host'") __props__.__dict__["host"] = host __props__.__dict__["name"] = name - __props__.__dict__["password"] = password + __props__.__dict__["password"] = None if password is None else pulumi.Output.secret(password) __props__.__dict__["port"] = port __props__.__dict__["project"] = project __props__.__dict__["region"] = region __props__.__dict__["username"] = username + secret_opts = pulumi.ResourceOptions(additional_secret_outputs=["password"]) + opts = pulumi.ResourceOptions.merge(opts, secret_opts) super(SourceRepresentationInstance, __self__).__init__( 'gcp:sql/sourceRepresentationInstance:SourceRepresentationInstance', resource_name, @@ -632,6 +633,7 @@ def get(resource_name: str, :param pulumi.Input[str] host: The externally accessible IPv4 address for the source database server. :param pulumi.Input[str] name: The name of the source representation instance. Use any valid Cloud SQL instance name. :param pulumi.Input[str] password: The password for the replication user account. + **Note**: This property is sensitive and will not be displayed in the plan. :param pulumi.Input[int] port: The externally accessible port for the source database server. Defaults to 3306. :param pulumi.Input[str] project: The ID of the project in which the resource belongs. @@ -720,6 +722,7 @@ def name(self) -> pulumi.Output[str]: def password(self) -> pulumi.Output[Optional[str]]: """ The password for the replication user account. + **Note**: This property is sensitive and will not be displayed in the plan. """ return pulumi.get(self, "password") diff --git a/sdk/python/pulumi_gcp/sql/ssl_cert.py b/sdk/python/pulumi_gcp/sql/ssl_cert.py index 87a3b16e91..ea3cd147ee 100644 --- a/sdk/python/pulumi_gcp/sql/ssl_cert.py +++ b/sdk/python/pulumi_gcp/sql/ssl_cert.py @@ -259,10 +259,6 @@ def __init__(__self__, project: Optional[pulumi.Input[str]] = None, __props__=None): """ - Creates a new Google SQL SSL Cert on a Google SQL Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/sslCerts). - - > **Note:** All arguments including the private key will be stored in the raw state as plain-text - ## Example Usage Example creating a SQL Client Certificate. @@ -303,10 +299,6 @@ def __init__(__self__, args: SslCertArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Creates a new Google SQL SSL Cert on a Google SQL Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/mysql/admin-api/v1beta4/sslCerts). - - > **Note:** All arguments including the private key will be stored in the raw state as plain-text - ## Example Usage Example creating a SQL Client Certificate. diff --git a/sdk/python/pulumi_gcp/sql/user.py b/sdk/python/pulumi_gcp/sql/user.py index c054967a42..d8f8cd2fde 100644 --- a/sdk/python/pulumi_gcp/sql/user.py +++ b/sdk/python/pulumi_gcp/sql/user.py @@ -351,10 +351,6 @@ def __init__(__self__, type: Optional[pulumi.Input[str]] = None, __props__=None): """ - Creates a new Google SQL User on a Google SQL User Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/users). - - > **Note:** All arguments including the username and password will be stored in the raw state as plain-text. - ## Example Usage Example creating a SQL User. @@ -441,10 +437,6 @@ def __init__(__self__, args: UserArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Creates a new Google SQL User on a Google SQL User Instance. For more information, see the [official documentation](https://cloud.google.com/sql/), or the [JSON API](https://cloud.google.com/sql/docs/admin-api/v1beta4/users). - - > **Note:** All arguments including the username and password will be stored in the raw state as plain-text. - ## Example Usage Example creating a SQL User. diff --git a/sdk/python/pulumi_gcp/storage/bucket.py b/sdk/python/pulumi_gcp/storage/bucket.py index 22a4b7a940..4a036597ec 100644 --- a/sdk/python/pulumi_gcp/storage/bucket.py +++ b/sdk/python/pulumi_gcp/storage/bucket.py @@ -43,9 +43,8 @@ def __init__(__self__, *, :param pulumi.Input['BucketCustomPlacementConfigArgs'] custom_placement_config: The bucket's custom location configuration, which specifies the individual regions that comprise a dual-region bucket. If the bucket is designated a single or multi-region, the parameters are empty. Structure is documented below. :param pulumi.Input[bool] default_event_based_hold: Whether or not to automatically apply an eventBasedHold to new objects added to the bucket. :param pulumi.Input['BucketEncryptionArgs'] encryption: The bucket's encryption configuration. Structure is documented below. - :param pulumi.Input[bool] force_destroy: When deleting a bucket, this - boolean option will delete all contained objects. If you try to delete a - bucket that contains objects, the provider will fail that run. + :param pulumi.Input[bool] force_destroy: When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + contains objects, Terraform will fail that run. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: A map of key/value label pairs to assign to the bucket. :param pulumi.Input[Sequence[pulumi.Input['BucketLifecycleRuleArgs']]] lifecycle_rules: The bucket's [Lifecycle Rules](https://cloud.google.com/storage/docs/lifecycle#configuration) configuration. Multiple blocks of this type are permitted. Structure is documented below. :param pulumi.Input['BucketLoggingArgs'] logging: The bucket's [Access & Storage Logs](https://cloud.google.com/storage/docs/access-logs) configuration. Structure is documented below. @@ -174,9 +173,8 @@ def encryption(self, value: Optional[pulumi.Input['BucketEncryptionArgs']]): @pulumi.getter(name="forceDestroy") def force_destroy(self) -> Optional[pulumi.Input[bool]]: """ - When deleting a bucket, this - boolean option will delete all contained objects. If you try to delete a - bucket that contains objects, the provider will fail that run. + When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + contains objects, Terraform will fail that run. """ return pulumi.get(self, "force_destroy") @@ -361,9 +359,8 @@ def __init__(__self__, *, :param pulumi.Input['BucketCustomPlacementConfigArgs'] custom_placement_config: The bucket's custom location configuration, which specifies the individual regions that comprise a dual-region bucket. If the bucket is designated a single or multi-region, the parameters are empty. Structure is documented below. :param pulumi.Input[bool] default_event_based_hold: Whether or not to automatically apply an eventBasedHold to new objects added to the bucket. :param pulumi.Input['BucketEncryptionArgs'] encryption: The bucket's encryption configuration. Structure is documented below. - :param pulumi.Input[bool] force_destroy: When deleting a bucket, this - boolean option will delete all contained objects. If you try to delete a - bucket that contains objects, the provider will fail that run. + :param pulumi.Input[bool] force_destroy: When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + contains objects, Terraform will fail that run. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: A map of key/value label pairs to assign to the bucket. :param pulumi.Input[Sequence[pulumi.Input['BucketLifecycleRuleArgs']]] lifecycle_rules: The bucket's [Lifecycle Rules](https://cloud.google.com/storage/docs/lifecycle#configuration) configuration. Multiple blocks of this type are permitted. Structure is documented below. :param pulumi.Input[str] location: The [GCS location](https://cloud.google.com/storage/docs/bucket-locations). @@ -488,9 +485,8 @@ def encryption(self, value: Optional[pulumi.Input['BucketEncryptionArgs']]): @pulumi.getter(name="forceDestroy") def force_destroy(self) -> Optional[pulumi.Input[bool]]: """ - When deleting a bucket, this - boolean option will delete all contained objects. If you try to delete a - bucket that contains objects, the provider will fail that run. + When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + contains objects, Terraform will fail that run. """ return pulumi.get(self, "force_destroy") @@ -808,9 +804,8 @@ def __init__(__self__, :param pulumi.Input[pulumi.InputType['BucketCustomPlacementConfigArgs']] custom_placement_config: The bucket's custom location configuration, which specifies the individual regions that comprise a dual-region bucket. If the bucket is designated a single or multi-region, the parameters are empty. Structure is documented below. :param pulumi.Input[bool] default_event_based_hold: Whether or not to automatically apply an eventBasedHold to new objects added to the bucket. :param pulumi.Input[pulumi.InputType['BucketEncryptionArgs']] encryption: The bucket's encryption configuration. Structure is documented below. - :param pulumi.Input[bool] force_destroy: When deleting a bucket, this - boolean option will delete all contained objects. If you try to delete a - bucket that contains objects, the provider will fail that run. + :param pulumi.Input[bool] force_destroy: When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + contains objects, Terraform will fail that run. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: A map of key/value label pairs to assign to the bucket. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['BucketLifecycleRuleArgs']]]] lifecycle_rules: The bucket's [Lifecycle Rules](https://cloud.google.com/storage/docs/lifecycle#configuration) configuration. Multiple blocks of this type are permitted. Structure is documented below. :param pulumi.Input[str] location: The [GCS location](https://cloud.google.com/storage/docs/bucket-locations). @@ -1037,9 +1032,8 @@ def get(resource_name: str, :param pulumi.Input[pulumi.InputType['BucketCustomPlacementConfigArgs']] custom_placement_config: The bucket's custom location configuration, which specifies the individual regions that comprise a dual-region bucket. If the bucket is designated a single or multi-region, the parameters are empty. Structure is documented below. :param pulumi.Input[bool] default_event_based_hold: Whether or not to automatically apply an eventBasedHold to new objects added to the bucket. :param pulumi.Input[pulumi.InputType['BucketEncryptionArgs']] encryption: The bucket's encryption configuration. Structure is documented below. - :param pulumi.Input[bool] force_destroy: When deleting a bucket, this - boolean option will delete all contained objects. If you try to delete a - bucket that contains objects, the provider will fail that run. + :param pulumi.Input[bool] force_destroy: When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + contains objects, Terraform will fail that run. :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: A map of key/value label pairs to assign to the bucket. :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['BucketLifecycleRuleArgs']]]] lifecycle_rules: The bucket's [Lifecycle Rules](https://cloud.google.com/storage/docs/lifecycle#configuration) configuration. Multiple blocks of this type are permitted. Structure is documented below. :param pulumi.Input[str] location: The [GCS location](https://cloud.google.com/storage/docs/bucket-locations). @@ -1128,9 +1122,8 @@ def encryption(self) -> pulumi.Output[Optional['outputs.BucketEncryption']]: @pulumi.getter(name="forceDestroy") def force_destroy(self) -> pulumi.Output[Optional[bool]]: """ - When deleting a bucket, this - boolean option will delete all contained objects. If you try to delete a - bucket that contains objects, the provider will fail that run. + When deleting a bucket, this boolean option will delete all contained objects. If you try to delete a bucket that + contains objects, Terraform will fail that run. """ return pulumi.get(self, "force_destroy") diff --git a/sdk/python/pulumi_gcp/storage/bucket_access_control.py b/sdk/python/pulumi_gcp/storage/bucket_access_control.py index e093724c8f..5597264b05 100644 --- a/sdk/python/pulumi_gcp/storage/bucket_access_control.py +++ b/sdk/python/pulumi_gcp/storage/bucket_access_control.py @@ -223,29 +223,6 @@ def __init__(__self__, role: Optional[pulumi.Input[str]] = None, __props__=None): """ - Bucket ACLs can be managed authoritatively using the - `storage_bucket_acl` resource. Do not use these two resources in conjunction to manage the same bucket. - - The BucketAccessControls resource manages the Access Control List - (ACLs) for a single entity/role pairing on a bucket. ACLs let you specify who - has access to your data and to what extent. - - There are three roles that can be assigned to an entity: - - READERs can get the bucket, though no acl property will be returned, and - list the bucket's objects. WRITERs are READERs, and they can insert - objects into the bucket and delete the bucket's objects. OWNERs are - WRITERs, and they can get the acl property of a bucket, update a bucket, - and call all BucketAccessControls methods on the bucket. For more - information, see Access Control, with the caveat that this API uses - READER, WRITER, and OWNER instead of READ, WRITE, and FULL_CONTROL. - - To get more information about BucketAccessControl, see: - - * [API documentation](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls) - * How-to Guides - * [Official Documentation](https://cloud.google.com/storage/docs/access-control/lists) - ## Example Usage ### Storage Bucket Access Control Public Bucket @@ -296,29 +273,6 @@ def __init__(__self__, args: BucketAccessControlArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Bucket ACLs can be managed authoritatively using the - `storage_bucket_acl` resource. Do not use these two resources in conjunction to manage the same bucket. - - The BucketAccessControls resource manages the Access Control List - (ACLs) for a single entity/role pairing on a bucket. ACLs let you specify who - has access to your data and to what extent. - - There are three roles that can be assigned to an entity: - - READERs can get the bucket, though no acl property will be returned, and - list the bucket's objects. WRITERs are READERs, and they can insert - objects into the bucket and delete the bucket's objects. OWNERs are - WRITERs, and they can get the acl property of a bucket, update a bucket, - and call all BucketAccessControls methods on the bucket. For more - information, see Access Control, with the caveat that this API uses - READER, WRITER, and OWNER instead of READ, WRITE, and FULL_CONTROL. - - To get more information about BucketAccessControl, see: - - * [API documentation](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls) - * How-to Guides - * [Official Documentation](https://cloud.google.com/storage/docs/access-control/lists) - ## Example Usage ### Storage Bucket Access Control Public Bucket diff --git a/sdk/python/pulumi_gcp/storage/bucket_acl.py b/sdk/python/pulumi_gcp/storage/bucket_acl.py index d9ce84dbda..a4bbe2bec4 100644 --- a/sdk/python/pulumi_gcp/storage/bucket_acl.py +++ b/sdk/python/pulumi_gcp/storage/bucket_acl.py @@ -165,17 +165,6 @@ def __init__(__self__, role_entities: Optional[pulumi.Input[Sequence[pulumi.Input[str]]]] = None, __props__=None): """ - Authoritatively manages a bucket's ACLs in Google cloud storage service (GCS). For more information see - [the official documentation](https://cloud.google.com/storage/docs/access-control/lists) - and - [API](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls). - - Bucket ACLs can be managed non authoritatively using the `storage_bucket_access_control` resource. Do not use these two resources in conjunction to manage the same bucket. - - Permissions can be granted either by ACLs or Cloud IAM policies. In general, permissions granted by Cloud IAM policies do not appear in ACLs, and permissions granted by ACLs do not appear in Cloud IAM policies. The only exception is for ACLs applied directly on a bucket and certain bucket-level Cloud IAM policies, as described in [Cloud IAM relation to ACLs](https://cloud.google.com/storage/docs/access-control/iam#acls). - - **NOTE** This resource will not remove the `project-owners-` entity from the `OWNER` role. - ## Example Usage Example creating an ACL on a bucket with one owner, and one reader. @@ -211,17 +200,6 @@ def __init__(__self__, args: BucketACLArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - Authoritatively manages a bucket's ACLs in Google cloud storage service (GCS). For more information see - [the official documentation](https://cloud.google.com/storage/docs/access-control/lists) - and - [API](https://cloud.google.com/storage/docs/json_api/v1/bucketAccessControls). - - Bucket ACLs can be managed non authoritatively using the `storage_bucket_access_control` resource. Do not use these two resources in conjunction to manage the same bucket. - - Permissions can be granted either by ACLs or Cloud IAM policies. In general, permissions granted by Cloud IAM policies do not appear in ACLs, and permissions granted by ACLs do not appear in Cloud IAM policies. The only exception is for ACLs applied directly on a bucket and certain bucket-level Cloud IAM policies, as described in [Cloud IAM relation to ACLs](https://cloud.google.com/storage/docs/access-control/iam#acls). - - **NOTE** This resource will not remove the `project-owners-` entity from the `OWNER` role. - ## Example Usage Example creating an ACL on a bucket with one owner, and one reader. diff --git a/sdk/python/pulumi_gcp/storage/bucket_object.py b/sdk/python/pulumi_gcp/storage/bucket_object.py index fa03a0a7c4..ac495e1c7b 100644 --- a/sdk/python/pulumi_gcp/storage/bucket_object.py +++ b/sdk/python/pulumi_gcp/storage/bucket_object.py @@ -37,7 +37,7 @@ def __init__(__self__, *, :param pulumi.Input[str] bucket: The name of the containing bucket. :param pulumi.Input[str] cache_control: [Cache-Control](https://tools.ietf.org/html/rfc7234#section-5.2) directive to specify caching behavior of object data. If omitted and object is accessible to all anonymous users, the default will be public, max-age=3600 - :param pulumi.Input[str] content: Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + :param pulumi.Input[str] content: Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). :param pulumi.Input[str] content_disposition: [Content-Disposition](https://tools.ietf.org/html/rfc6266) of the object data. :param pulumi.Input[str] content_encoding: [Content-Encoding](https://tools.ietf.org/html/rfc7231#section-3.1.2.2) of the object data. :param pulumi.Input[str] content_language: [Content-Language](https://tools.ietf.org/html/rfc7231#section-3.1.3.2) of the object data. @@ -116,7 +116,7 @@ def cache_control(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def content(self) -> Optional[pulumi.Input[str]]: """ - Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). """ return pulumi.get(self, "content") @@ -311,7 +311,7 @@ def __init__(__self__, *, :param pulumi.Input[str] bucket: The name of the containing bucket. :param pulumi.Input[str] cache_control: [Cache-Control](https://tools.ietf.org/html/rfc7234#section-5.2) directive to specify caching behavior of object data. If omitted and object is accessible to all anonymous users, the default will be public, max-age=3600 - :param pulumi.Input[str] content: Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + :param pulumi.Input[str] content: Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). :param pulumi.Input[str] content_disposition: [Content-Disposition](https://tools.ietf.org/html/rfc6266) of the object data. :param pulumi.Input[str] content_encoding: [Content-Encoding](https://tools.ietf.org/html/rfc7231#section-3.1.2.2) of the object data. :param pulumi.Input[str] content_language: [Content-Language](https://tools.ietf.org/html/rfc7231#section-3.1.3.2) of the object data. @@ -407,7 +407,7 @@ def cache_control(self, value: Optional[pulumi.Input[str]]): @pulumi.getter def content(self) -> Optional[pulumi.Input[str]]: """ - Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). """ return pulumi.get(self, "content") @@ -686,7 +686,7 @@ def __init__(__self__, :param pulumi.Input[str] bucket: The name of the containing bucket. :param pulumi.Input[str] cache_control: [Cache-Control](https://tools.ietf.org/html/rfc7234#section-5.2) directive to specify caching behavior of object data. If omitted and object is accessible to all anonymous users, the default will be public, max-age=3600 - :param pulumi.Input[str] content: Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + :param pulumi.Input[str] content: Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). :param pulumi.Input[str] content_disposition: [Content-Disposition](https://tools.ietf.org/html/rfc6266) of the object data. :param pulumi.Input[str] content_encoding: [Content-Encoding](https://tools.ietf.org/html/rfc7231#section-3.1.2.2) of the object data. :param pulumi.Input[str] content_language: [Content-Language](https://tools.ietf.org/html/rfc7231#section-3.1.3.2) of the object data. @@ -841,7 +841,7 @@ def get(resource_name: str, :param pulumi.Input[str] bucket: The name of the containing bucket. :param pulumi.Input[str] cache_control: [Cache-Control](https://tools.ietf.org/html/rfc7234#section-5.2) directive to specify caching behavior of object data. If omitted and object is accessible to all anonymous users, the default will be public, max-age=3600 - :param pulumi.Input[str] content: Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + :param pulumi.Input[str] content: Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). :param pulumi.Input[str] content_disposition: [Content-Disposition](https://tools.ietf.org/html/rfc6266) of the object data. :param pulumi.Input[str] content_encoding: [Content-Encoding](https://tools.ietf.org/html/rfc7231#section-3.1.2.2) of the object data. :param pulumi.Input[str] content_language: [Content-Language](https://tools.ietf.org/html/rfc7231#section-3.1.3.2) of the object data. @@ -913,7 +913,7 @@ def cache_control(self) -> pulumi.Output[Optional[str]]: @pulumi.getter def content(self) -> pulumi.Output[Optional[str]]: """ - Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. + Data as `string` to be uploaded. Must be defined if `source` is not. **Note**: The `content` field is marked as sensitive. To view the raw contents of the object, please define an [output](https://www.terraform.io/docs/configuration/outputs.html). """ return pulumi.get(self, "content") diff --git a/sdk/python/pulumi_gcp/storage/get_project_service_account.py b/sdk/python/pulumi_gcp/storage/get_project_service_account.py index 0cd14f29d5..e523e81308 100644 --- a/sdk/python/pulumi_gcp/storage/get_project_service_account.py +++ b/sdk/python/pulumi_gcp/storage/get_project_service_account.py @@ -91,39 +91,6 @@ def get_project_service_account(project: Optional[str] = None, user_project: Optional[str] = None, opts: Optional[pulumi.InvokeOptions] = None) -> AwaitableGetProjectServiceAccountResult: """ - Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts). - - For each Google Cloud project, Google maintains a unique service account which - is used as the identity for various Google Cloud Storage operations, including - operations involving - [customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys) - and those involving - [storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification). - This automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use - these customer-managed resources. - - The service account has a well-known, documented naming format which is parameterised on the numeric Google project ID. - However, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which - presuppose its existence. - These actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the - service account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys - on the bucket creation page. - - Use of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations - which demand its existence, such as specifying it in Cloud IAM policy. - Always prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause - provider update errors in cases where the service account does not yet exist. - - > When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources, - you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource. - Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a - bucket configuration, otherwise the API calls will fail. - You may need to use `depends_on` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it. - See the examples here and in the `storage.Notification` resource. - - For more information see - [the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount). - ## Example Usage ### Pub/Sub Notifications @@ -180,39 +147,6 @@ def get_project_service_account_output(project: Optional[pulumi.Input[Optional[s user_project: Optional[pulumi.Input[Optional[str]]] = None, opts: Optional[pulumi.InvokeOptions] = None) -> pulumi.Output[GetProjectServiceAccountResult]: """ - Get the email address of a project's unique [automatic Google Cloud Storage service account](https://cloud.google.com/storage/docs/projects#service-accounts). - - For each Google Cloud project, Google maintains a unique service account which - is used as the identity for various Google Cloud Storage operations, including - operations involving - [customer-managed encryption keys](https://cloud.google.com/storage/docs/encryption/customer-managed-keys) - and those involving - [storage notifications to pub/sub](https://cloud.google.com/storage/docs/gsutil/commands/notification). - This automatic Google service account requires access to the relevant Cloud KMS keys or pub/sub topics, respectively, in order for Cloud Storage to use - these customer-managed resources. - - The service account has a well-known, documented naming format which is parameterised on the numeric Google project ID. - However, as noted in [the docs](https://cloud.google.com/storage/docs/projects#service-accounts), it is only created when certain relevant actions occur which - presuppose its existence. - These actions include calling a [Cloud Storage API endpoint](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount/get) to yield the - service account's identity, or performing some operations in the UI which must use the service account's identity, such as attempting to list Cloud KMS keys - on the bucket creation page. - - Use of this data source calls the relevant API endpoint to obtain the service account's identity and thus ensures it exists prior to any API operations - which demand its existence, such as specifying it in Cloud IAM policy. - Always prefer to use this data source over interpolating the project ID into the well-known format for this service account, as the latter approach may cause - provider update errors in cases where the service account does not yet exist. - - > When you write provider code which uses features depending on this service account *and* your provider code adds the service account in IAM policy on other resources, - you must take care for race conditions between the establishment of the IAM policy and creation of the relevant Cloud Storage resource. - Cloud Storage APIs will require permissions on resources such as pub/sub topics or Cloud KMS keys to exist *before* the attempt to utilise them in a - bucket configuration, otherwise the API calls will fail. - You may need to use `depends_on` to create an explicit dependency between the IAM policy resource and the Cloud Storage resource which depends on it. - See the examples here and in the `storage.Notification` resource. - - For more information see - [the API reference](https://cloud.google.com/storage/docs/json_api/v1/projects/serviceAccount). - ## Example Usage ### Pub/Sub Notifications diff --git a/sdk/python/pulumi_gcp/storage/hmac_key.py b/sdk/python/pulumi_gcp/storage/hmac_key.py index 0bedde2bf2..d80c773d99 100644 --- a/sdk/python/pulumi_gcp/storage/hmac_key.py +++ b/sdk/python/pulumi_gcp/storage/hmac_key.py @@ -210,22 +210,6 @@ def __init__(__self__, state: Optional[pulumi.Input[str]] = None, __props__=None): """ - The hmacKeys resource represents an HMAC key within Cloud Storage. The resource - consists of a secret and HMAC key metadata. HMAC keys can be used as credentials - for service accounts. - - To get more information about HmacKey, see: - - * [API documentation](https://cloud.google.com/storage/docs/json_api/v1/projects/hmacKeys) - * How-to Guides - * [Official Documentation](https://cloud.google.com/storage/docs/authentication/managing-hmackeys) - - > **Warning:** All arguments including the `secret` value will be stored in the raw - state as plain-text. On import, the `secret` value will not be retrieved. - - > **Warning:** All arguments including `secret` will be stored in the raw - state as plain-text. - ## Example Usage ### Storage Hmac Key @@ -235,7 +219,7 @@ def __init__(__self__, # Create a new service account service_account = gcp.service_account.Account("serviceAccount", account_id="my-svc-acc") - #Create the HMAC key for the associated service account + #Create the HMAC key for the associated service account key = gcp.storage.HmacKey("key", service_account_email=service_account.email) ``` @@ -271,22 +255,6 @@ def __init__(__self__, args: HmacKeyArgs, opts: Optional[pulumi.ResourceOptions] = None): """ - The hmacKeys resource represents an HMAC key within Cloud Storage. The resource - consists of a secret and HMAC key metadata. HMAC keys can be used as credentials - for service accounts. - - To get more information about HmacKey, see: - - * [API documentation](https://cloud.google.com/storage/docs/json_api/v1/projects/hmacKeys) - * How-to Guides - * [Official Documentation](https://cloud.google.com/storage/docs/authentication/managing-hmackeys) - - > **Warning:** All arguments including the `secret` value will be stored in the raw - state as plain-text. On import, the `secret` value will not be retrieved. - - > **Warning:** All arguments including `secret` will be stored in the raw - state as plain-text. - ## Example Usage ### Storage Hmac Key @@ -296,7 +264,7 @@ def __init__(__self__, # Create a new service account service_account = gcp.service_account.Account("serviceAccount", account_id="my-svc-acc") - #Create the HMAC key for the associated service account + #Create the HMAC key for the associated service account key = gcp.storage.HmacKey("key", service_account_email=service_account.email) ``` diff --git a/sdk/python/pulumi_gcp/tags/__init__.py b/sdk/python/pulumi_gcp/tags/__init__.py index 207963d8ea..e4f785fa2c 100644 --- a/sdk/python/pulumi_gcp/tags/__init__.py +++ b/sdk/python/pulumi_gcp/tags/__init__.py @@ -7,6 +7,7 @@ # Export this package's modules as members: from .get_tag_key import * from .get_tag_value import * +from .location_tag_binding import * from .tag_binding import * from .tag_key import * from .tag_key_iam_binding import * diff --git a/sdk/python/pulumi_gcp/tags/location_tag_binding.py b/sdk/python/pulumi_gcp/tags/location_tag_binding.py new file mode 100644 index 0000000000..f92d9edd8a --- /dev/null +++ b/sdk/python/pulumi_gcp/tags/location_tag_binding.py @@ -0,0 +1,363 @@ +# 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 pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities + +__all__ = ['LocationTagBindingArgs', 'LocationTagBinding'] + +@pulumi.input_type +class LocationTagBindingArgs: + def __init__(__self__, *, + parent: pulumi.Input[str], + tag_value: pulumi.Input[str], + location: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a LocationTagBinding resource. + :param pulumi.Input[str] parent: The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + :param pulumi.Input[str] tag_value: The TagValue of the TagBinding. Must be of the form tagValues/456. + :param pulumi.Input[str] location: Location of the resource. + """ + pulumi.set(__self__, "parent", parent) + pulumi.set(__self__, "tag_value", tag_value) + if location is not None: + pulumi.set(__self__, "location", location) + + @property + @pulumi.getter + def parent(self) -> pulumi.Input[str]: + """ + The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + """ + return pulumi.get(self, "parent") + + @parent.setter + def parent(self, value: pulumi.Input[str]): + pulumi.set(self, "parent", value) + + @property + @pulumi.getter(name="tagValue") + def tag_value(self) -> pulumi.Input[str]: + """ + The TagValue of the TagBinding. Must be of the form tagValues/456. + """ + return pulumi.get(self, "tag_value") + + @tag_value.setter + def tag_value(self, value: pulumi.Input[str]): + pulumi.set(self, "tag_value", value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + Location of the resource. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + +@pulumi.input_type +class _LocationTagBindingState: + def __init__(__self__, *, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parent: Optional[pulumi.Input[str]] = None, + tag_value: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering LocationTagBinding resources. + :param pulumi.Input[str] location: Location of the resource. + :param pulumi.Input[str] name: The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + :param pulumi.Input[str] parent: The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + :param pulumi.Input[str] tag_value: The TagValue of the TagBinding. Must be of the form tagValues/456. + """ + if location is not None: + pulumi.set(__self__, "location", location) + if name is not None: + pulumi.set(__self__, "name", name) + if parent is not None: + pulumi.set(__self__, "parent", parent) + if tag_value is not None: + pulumi.set(__self__, "tag_value", tag_value) + + @property + @pulumi.getter + def location(self) -> Optional[pulumi.Input[str]]: + """ + Location of the 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 generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def parent(self) -> Optional[pulumi.Input[str]]: + """ + The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + """ + return pulumi.get(self, "parent") + + @parent.setter + def parent(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "parent", value) + + @property + @pulumi.getter(name="tagValue") + def tag_value(self) -> Optional[pulumi.Input[str]]: + """ + The TagValue of the TagBinding. Must be of the form tagValues/456. + """ + return pulumi.get(self, "tag_value") + + @tag_value.setter + def tag_value(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "tag_value", value) + + +class LocationTagBinding(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + location: Optional[pulumi.Input[str]] = None, + parent: Optional[pulumi.Input[str]] = None, + tag_value: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## subcategory: "Tags" + + page_title: "Google: tags.LocationTagBinding" + description: |- + A LocationTagBinding represents a connection between a TagValue and a Regional cloud resources. + --- + + # google\\_tags\\_location\\_tag\\_binding + + A TagBinding represents a connection between a TagValue and a Regional cloud resource (currently project, folder, or organization). Once a TagBinding is created, the TagValue is applied to all the descendants of the cloud resource. + + To get more information about TagBinding, see: + + * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v3/tagBindings) + * How-to Guides + * [Official Documentation](https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing) + + ## Example Usage + ### Location Tag Binding Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + project = gcp.organizations.Project("project", + org_id="123456789", + project_id="project_id") + key = gcp.tags.TagKey("key", + description="For keyname resources.", + parent="organizations/123456789", + short_name="keyname") + value = gcp.tags.TagValue("value", + description="For valuename resources.", + parent=key.name.apply(lambda name: f"tagKeys/{name}"), + short_name="valuename") + binding = gcp.tags.LocationTagBinding("binding", + location="us-central1", + parent=project.number.apply(lambda number: f"//run.googleapis.com/projects/{number}/locations/{google_cloud_run_service['default']['location']}/services/{google_cloud_run_service['default']['name']}"), + tag_value=value.name.apply(lambda name: f"tagValues/{name}")) + ``` + + ## Import + + TagBinding can be imported using any of these accepted formats + + ```sh + $ pulumi import gcp:tags/locationTagBinding:LocationTagBinding default {{location}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[str] location: Location of the resource. + :param pulumi.Input[str] parent: The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + :param pulumi.Input[str] tag_value: The TagValue of the TagBinding. Must be of the form tagValues/456. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: LocationTagBindingArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## subcategory: "Tags" + + page_title: "Google: tags.LocationTagBinding" + description: |- + A LocationTagBinding represents a connection between a TagValue and a Regional cloud resources. + --- + + # google\\_tags\\_location\\_tag\\_binding + + A TagBinding represents a connection between a TagValue and a Regional cloud resource (currently project, folder, or organization). Once a TagBinding is created, the TagValue is applied to all the descendants of the cloud resource. + + To get more information about TagBinding, see: + + * [API documentation](https://cloud.google.com/resource-manager/reference/rest/v3/tagBindings) + * How-to Guides + * [Official Documentation](https://cloud.google.com/resource-manager/docs/tags/tags-creating-and-managing) + + ## Example Usage + ### Location Tag Binding Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + project = gcp.organizations.Project("project", + org_id="123456789", + project_id="project_id") + key = gcp.tags.TagKey("key", + description="For keyname resources.", + parent="organizations/123456789", + short_name="keyname") + value = gcp.tags.TagValue("value", + description="For valuename resources.", + parent=key.name.apply(lambda name: f"tagKeys/{name}"), + short_name="valuename") + binding = gcp.tags.LocationTagBinding("binding", + location="us-central1", + parent=project.number.apply(lambda number: f"//run.googleapis.com/projects/{number}/locations/{google_cloud_run_service['default']['location']}/services/{google_cloud_run_service['default']['name']}"), + tag_value=value.name.apply(lambda name: f"tagValues/{name}")) + ``` + + ## Import + + TagBinding can be imported using any of these accepted formats + + ```sh + $ pulumi import gcp:tags/locationTagBinding:LocationTagBinding default {{location}}/{{name}} + ``` + + :param str resource_name: The name of the resource. + :param LocationTagBindingArgs 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(LocationTagBindingArgs, 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, + location: Optional[pulumi.Input[str]] = None, + parent: Optional[pulumi.Input[str]] = None, + tag_value: 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__ = LocationTagBindingArgs.__new__(LocationTagBindingArgs) + + __props__.__dict__["location"] = location + if parent is None and not opts.urn: + raise TypeError("Missing required property 'parent'") + __props__.__dict__["parent"] = parent + if tag_value is None and not opts.urn: + raise TypeError("Missing required property 'tag_value'") + __props__.__dict__["tag_value"] = tag_value + __props__.__dict__["name"] = None + super(LocationTagBinding, __self__).__init__( + 'gcp:tags/locationTagBinding:LocationTagBinding', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + location: Optional[pulumi.Input[str]] = None, + name: Optional[pulumi.Input[str]] = None, + parent: Optional[pulumi.Input[str]] = None, + tag_value: Optional[pulumi.Input[str]] = None) -> 'LocationTagBinding': + """ + Get an existing LocationTagBinding 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] location: Location of the resource. + :param pulumi.Input[str] name: The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + :param pulumi.Input[str] parent: The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + :param pulumi.Input[str] tag_value: The TagValue of the TagBinding. Must be of the form tagValues/456. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _LocationTagBindingState.__new__(_LocationTagBindingState) + + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["parent"] = parent + __props__.__dict__["tag_value"] = tag_value + return LocationTagBinding(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def location(self) -> pulumi.Output[Optional[str]]: + """ + Location of the resource. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The generated id for the TagBinding. This is a string of the form: `tagBindings/{parent}/{tag-value-name}` + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def parent(self) -> pulumi.Output[str]: + """ + The full resource name of the resource the TagValue is bound to. E.g. //cloudresourcemanager.googleapis.com/projects/123 + """ + return pulumi.get(self, "parent") + + @property + @pulumi.getter(name="tagValue") + def tag_value(self) -> pulumi.Output[str]: + """ + The TagValue of the TagBinding. Must be of the form tagValues/456. + """ + return pulumi.get(self, "tag_value") + diff --git a/sdk/python/pulumi_gcp/tpu/node.py b/sdk/python/pulumi_gcp/tpu/node.py index 89576c3e18..ca9d2955e1 100644 --- a/sdk/python/pulumi_gcp/tpu/node.py +++ b/sdk/python/pulumi_gcp/tpu/node.py @@ -523,37 +523,6 @@ def __init__(__self__, tensorflow_version=available.versions[0], cidr_block="10.2.0.0/29") ``` - ### TPU Node Full - - ```python - import pulumi - import pulumi_gcp as gcp - - available = gcp.tpu.get_tensorflow_versions() - network = gcp.compute.get_network(name="default") - service_range = gcp.compute.GlobalAddress("serviceRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=network.id) - private_service_connection = gcp.servicenetworking.Connection("privateServiceConnection", - network=network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[service_range.name]) - tpu = gcp.tpu.Node("tpu", - zone="us-central1-b", - accelerator_type="v3-8", - tensorflow_version=available.versions[0], - description="Google Provider test TPU", - use_service_networking=True, - network=private_service_connection.network, - labels={ - "foo": "bar", - }, - scheduling_config=gcp.tpu.NodeSchedulingConfigArgs( - preemptible=True, - )) - ``` ## Import @@ -633,37 +602,6 @@ def __init__(__self__, tensorflow_version=available.versions[0], cidr_block="10.2.0.0/29") ``` - ### TPU Node Full - - ```python - import pulumi - import pulumi_gcp as gcp - - available = gcp.tpu.get_tensorflow_versions() - network = gcp.compute.get_network(name="default") - service_range = gcp.compute.GlobalAddress("serviceRange", - purpose="VPC_PEERING", - address_type="INTERNAL", - prefix_length=16, - network=network.id) - private_service_connection = gcp.servicenetworking.Connection("privateServiceConnection", - network=network.id, - service="servicenetworking.googleapis.com", - reserved_peering_ranges=[service_range.name]) - tpu = gcp.tpu.Node("tpu", - zone="us-central1-b", - accelerator_type="v3-8", - tensorflow_version=available.versions[0], - description="Google Provider test TPU", - use_service_networking=True, - network=private_service_connection.network, - labels={ - "foo": "bar", - }, - scheduling_config=gcp.tpu.NodeSchedulingConfigArgs( - preemptible=True, - )) - ``` ## Import diff --git a/sdk/python/pulumi_gcp/workstations/__init__.py b/sdk/python/pulumi_gcp/workstations/__init__.py new file mode 100644 index 0000000000..ba6aeddbad --- /dev/null +++ b/sdk/python/pulumi_gcp/workstations/__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 .workstation_cluster import * +from ._inputs import * +from . import outputs diff --git a/sdk/python/pulumi_gcp/workstations/_inputs.py b/sdk/python/pulumi_gcp/workstations/_inputs.py new file mode 100644 index 0000000000..5f7e9d1d02 --- /dev/null +++ b/sdk/python/pulumi_gcp/workstations/_inputs.py @@ -0,0 +1,133 @@ +# 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 pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities + +__all__ = [ + 'WorkstationClusterConditionArgs', + 'WorkstationClusterPrivateClusterConfigArgs', +] + +@pulumi.input_type +class WorkstationClusterConditionArgs: + def __init__(__self__, *, + code: Optional[pulumi.Input[int]] = None, + details: Optional[pulumi.Input[Sequence[pulumi.Input[Mapping[str, Any]]]]] = None, + message: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[int] code: The status code, which should be an enum value of google.rpc.Code. + :param pulumi.Input[Sequence[pulumi.Input[Mapping[str, Any]]]] details: A list of messages that carry the error details. + :param pulumi.Input[str] message: Human readable message indicating details about the current status. + """ + if code is not None: + pulumi.set(__self__, "code", code) + if details is not None: + pulumi.set(__self__, "details", details) + if message is not None: + pulumi.set(__self__, "message", message) + + @property + @pulumi.getter + def code(self) -> Optional[pulumi.Input[int]]: + """ + The status code, which should be an enum value of google.rpc.Code. + """ + return pulumi.get(self, "code") + + @code.setter + def code(self, value: Optional[pulumi.Input[int]]): + pulumi.set(self, "code", value) + + @property + @pulumi.getter + def details(self) -> Optional[pulumi.Input[Sequence[pulumi.Input[Mapping[str, Any]]]]]: + """ + A list of messages that carry the error details. + """ + return pulumi.get(self, "details") + + @details.setter + def details(self, value: Optional[pulumi.Input[Sequence[pulumi.Input[Mapping[str, Any]]]]]): + pulumi.set(self, "details", value) + + @property + @pulumi.getter + def message(self) -> Optional[pulumi.Input[str]]: + """ + Human readable message indicating details about the current status. + """ + return pulumi.get(self, "message") + + @message.setter + def message(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "message", value) + + +@pulumi.input_type +class WorkstationClusterPrivateClusterConfigArgs: + def __init__(__self__, *, + enable_private_endpoint: pulumi.Input[bool], + cluster_hostname: Optional[pulumi.Input[str]] = None, + service_attachment_uri: Optional[pulumi.Input[str]] = None): + """ + :param pulumi.Input[bool] enable_private_endpoint: Whether Workstations endpoint is private. + :param pulumi.Input[str] cluster_hostname: Hostname for the workstation cluster. + This field will be populated only when private endpoint is enabled. + To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + :param pulumi.Input[str] service_attachment_uri: Service attachment URI for the workstation cluster. + The service attachemnt is created when private endpoint is enabled. + To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + """ + pulumi.set(__self__, "enable_private_endpoint", enable_private_endpoint) + if cluster_hostname is not None: + pulumi.set(__self__, "cluster_hostname", cluster_hostname) + if service_attachment_uri is not None: + pulumi.set(__self__, "service_attachment_uri", service_attachment_uri) + + @property + @pulumi.getter(name="enablePrivateEndpoint") + def enable_private_endpoint(self) -> pulumi.Input[bool]: + """ + Whether Workstations endpoint is private. + """ + return pulumi.get(self, "enable_private_endpoint") + + @enable_private_endpoint.setter + def enable_private_endpoint(self, value: pulumi.Input[bool]): + pulumi.set(self, "enable_private_endpoint", value) + + @property + @pulumi.getter(name="clusterHostname") + def cluster_hostname(self) -> Optional[pulumi.Input[str]]: + """ + Hostname for the workstation cluster. + This field will be populated only when private endpoint is enabled. + To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + """ + return pulumi.get(self, "cluster_hostname") + + @cluster_hostname.setter + def cluster_hostname(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "cluster_hostname", value) + + @property + @pulumi.getter(name="serviceAttachmentUri") + def service_attachment_uri(self) -> Optional[pulumi.Input[str]]: + """ + Service attachment URI for the workstation cluster. + The service attachemnt is created when private endpoint is enabled. + To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + """ + return pulumi.get(self, "service_attachment_uri") + + @service_attachment_uri.setter + def service_attachment_uri(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "service_attachment_uri", value) + + diff --git a/sdk/python/pulumi_gcp/workstations/outputs.py b/sdk/python/pulumi_gcp/workstations/outputs.py new file mode 100644 index 0000000000..f8d3dd4fa5 --- /dev/null +++ b/sdk/python/pulumi_gcp/workstations/outputs.py @@ -0,0 +1,130 @@ +# coding=utf-8 +# *** WARNING: this file was generated by the Pulumi Terraform Bridge (tfgen) Tool. *** +# *** Do not edit by hand unless you're certain you know what you are doing! *** + +import copy +import warnings +import pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities + +__all__ = [ + 'WorkstationClusterCondition', + 'WorkstationClusterPrivateClusterConfig', +] + +@pulumi.output_type +class WorkstationClusterCondition(dict): + def __init__(__self__, *, + code: Optional[int] = None, + details: Optional[Sequence[Mapping[str, Any]]] = None, + message: Optional[str] = None): + """ + :param int code: The status code, which should be an enum value of google.rpc.Code. + :param Sequence[Mapping[str, Any]] details: A list of messages that carry the error details. + :param str message: Human readable message indicating details about the current status. + """ + if code is not None: + pulumi.set(__self__, "code", code) + if details is not None: + pulumi.set(__self__, "details", details) + if message is not None: + pulumi.set(__self__, "message", message) + + @property + @pulumi.getter + def code(self) -> Optional[int]: + """ + The status code, which should be an enum value of google.rpc.Code. + """ + return pulumi.get(self, "code") + + @property + @pulumi.getter + def details(self) -> Optional[Sequence[Mapping[str, Any]]]: + """ + A list of messages that carry the error details. + """ + return pulumi.get(self, "details") + + @property + @pulumi.getter + def message(self) -> Optional[str]: + """ + Human readable message indicating details about the current status. + """ + return pulumi.get(self, "message") + + +@pulumi.output_type +class WorkstationClusterPrivateClusterConfig(dict): + @staticmethod + def __key_warning(key: str): + suggest = None + if key == "enablePrivateEndpoint": + suggest = "enable_private_endpoint" + elif key == "clusterHostname": + suggest = "cluster_hostname" + elif key == "serviceAttachmentUri": + suggest = "service_attachment_uri" + + if suggest: + pulumi.log.warn(f"Key '{key}' not found in WorkstationClusterPrivateClusterConfig. Access the value via the '{suggest}' property getter instead.") + + def __getitem__(self, key: str) -> Any: + WorkstationClusterPrivateClusterConfig.__key_warning(key) + return super().__getitem__(key) + + def get(self, key: str, default = None) -> Any: + WorkstationClusterPrivateClusterConfig.__key_warning(key) + return super().get(key, default) + + def __init__(__self__, *, + enable_private_endpoint: bool, + cluster_hostname: Optional[str] = None, + service_attachment_uri: Optional[str] = None): + """ + :param bool enable_private_endpoint: Whether Workstations endpoint is private. + :param str cluster_hostname: Hostname for the workstation cluster. + This field will be populated only when private endpoint is enabled. + To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + :param str service_attachment_uri: Service attachment URI for the workstation cluster. + The service attachemnt is created when private endpoint is enabled. + To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + """ + pulumi.set(__self__, "enable_private_endpoint", enable_private_endpoint) + if cluster_hostname is not None: + pulumi.set(__self__, "cluster_hostname", cluster_hostname) + if service_attachment_uri is not None: + pulumi.set(__self__, "service_attachment_uri", service_attachment_uri) + + @property + @pulumi.getter(name="enablePrivateEndpoint") + def enable_private_endpoint(self) -> bool: + """ + Whether Workstations endpoint is private. + """ + return pulumi.get(self, "enable_private_endpoint") + + @property + @pulumi.getter(name="clusterHostname") + def cluster_hostname(self) -> Optional[str]: + """ + Hostname for the workstation cluster. + This field will be populated only when private endpoint is enabled. + To access workstations in the cluster, create a new DNS zone mapping this domain name to an internal IP address and a forwarding rule mapping that address to the service attachment. + """ + return pulumi.get(self, "cluster_hostname") + + @property + @pulumi.getter(name="serviceAttachmentUri") + def service_attachment_uri(self) -> Optional[str]: + """ + Service attachment URI for the workstation cluster. + The service attachemnt is created when private endpoint is enabled. + To access workstations in the cluster, configure access to the managed service using (Private Service Connect)[https://cloud.google.com/vpc/docs/configure-private-service-connect-services]. + """ + return pulumi.get(self, "service_attachment_uri") + + diff --git a/sdk/python/pulumi_gcp/workstations/workstation_cluster.py b/sdk/python/pulumi_gcp/workstations/workstation_cluster.py new file mode 100644 index 0000000000..6b7bc14010 --- /dev/null +++ b/sdk/python/pulumi_gcp/workstations/workstation_cluster.py @@ -0,0 +1,888 @@ +# 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 pulumi +import pulumi.runtime +from typing import Any, Mapping, Optional, Sequence, Union, overload +from .. import _utilities +from . import outputs +from ._inputs import * + +__all__ = ['WorkstationClusterArgs', 'WorkstationCluster'] + +@pulumi.input_type +class WorkstationClusterArgs: + def __init__(__self__, *, + network: pulumi.Input[str], + subnetwork: pulumi.Input[str], + workstation_cluster_id: pulumi.Input[str], + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + display_name: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + private_cluster_config: Optional[pulumi.Input['WorkstationClusterPrivateClusterConfigArgs']] = None, + project: Optional[pulumi.Input[str]] = None): + """ + The set of arguments for constructing a WorkstationCluster resource. + :param pulumi.Input[str] network: The relative resource name of the VPC network on which the instance can be accessed. + It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + :param pulumi.Input[str] subnetwork: Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + Must be part of the subnetwork specified for this cluster. + :param pulumi.Input[str] workstation_cluster_id: The ID of the workstation cluster. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Client-specified annotations. This is distinct from labels. + :param pulumi.Input[str] display_name: Human-readable name for this resource. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + :param pulumi.Input[str] location: The location where the workstation cluster should reside. + :param pulumi.Input['WorkstationClusterPrivateClusterConfigArgs'] private_cluster_config: Configuration for private cluster. + 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. + """ + pulumi.set(__self__, "network", network) + pulumi.set(__self__, "subnetwork", subnetwork) + pulumi.set(__self__, "workstation_cluster_id", workstation_cluster_id) + if annotations is not None: + pulumi.set(__self__, "annotations", annotations) + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + if labels is not None: + pulumi.set(__self__, "labels", labels) + if location is not None: + pulumi.set(__self__, "location", location) + if private_cluster_config is not None: + pulumi.set(__self__, "private_cluster_config", private_cluster_config) + if project is not None: + pulumi.set(__self__, "project", project) + + @property + @pulumi.getter + def network(self) -> pulumi.Input[str]: + """ + The relative resource name of the VPC network on which the instance can be accessed. + It is specified in the following form: "projects/{projectNumber}/global/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 + def subnetwork(self) -> pulumi.Input[str]: + """ + Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + Must be part of the subnetwork specified for this cluster. + """ + return pulumi.get(self, "subnetwork") + + @subnetwork.setter + def subnetwork(self, value: pulumi.Input[str]): + pulumi.set(self, "subnetwork", value) + + @property + @pulumi.getter(name="workstationClusterId") + def workstation_cluster_id(self) -> pulumi.Input[str]: + """ + The ID of the workstation cluster. + """ + return pulumi.get(self, "workstation_cluster_id") + + @workstation_cluster_id.setter + def workstation_cluster_id(self, value: pulumi.Input[str]): + pulumi.set(self, "workstation_cluster_id", value) + + @property + @pulumi.getter + def annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Client-specified annotations. This is distinct from labels. + """ + return pulumi.get(self, "annotations") + + @annotations.setter + def annotations(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "annotations", value) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[pulumi.Input[str]]: + """ + Human-readable name for this resource. + """ + 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 labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + """ + 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 where the workstation cluster should reside. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter(name="privateClusterConfig") + def private_cluster_config(self) -> Optional[pulumi.Input['WorkstationClusterPrivateClusterConfigArgs']]: + """ + Configuration for private cluster. + Structure is documented below. + """ + return pulumi.get(self, "private_cluster_config") + + @private_cluster_config.setter + def private_cluster_config(self, value: Optional[pulumi.Input['WorkstationClusterPrivateClusterConfigArgs']]): + pulumi.set(self, "private_cluster_config", 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 _WorkstationClusterState: + def __init__(__self__, *, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + conditions: Optional[pulumi.Input[Sequence[pulumi.Input['WorkstationClusterConditionArgs']]]] = None, + create_time: Optional[pulumi.Input[str]] = None, + degraded: Optional[pulumi.Input[bool]] = None, + display_name: Optional[pulumi.Input[str]] = None, + etag: 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, + network: Optional[pulumi.Input[str]] = None, + private_cluster_config: Optional[pulumi.Input['WorkstationClusterPrivateClusterConfigArgs']] = None, + project: Optional[pulumi.Input[str]] = None, + subnetwork: Optional[pulumi.Input[str]] = None, + uid: Optional[pulumi.Input[str]] = None, + workstation_cluster_id: Optional[pulumi.Input[str]] = None): + """ + Input properties used for looking up and filtering WorkstationCluster resources. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Client-specified annotations. This is distinct from labels. + :param pulumi.Input[Sequence[pulumi.Input['WorkstationClusterConditionArgs']]] conditions: Status conditions describing the current resource state. + Structure is documented below. + :param pulumi.Input[str] create_time: Time the Instance was created in UTC. + :param pulumi.Input[bool] degraded: Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + Details can be found in the conditions field. + :param pulumi.Input[str] display_name: Human-readable name for this resource. + :param pulumi.Input[str] etag: Checksum computed by the server. + May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + :param pulumi.Input[str] location: The location where the workstation cluster should reside. + :param pulumi.Input[str] name: The name of the cluster resource. + :param pulumi.Input[str] network: The relative resource name of the VPC network on which the instance can be accessed. + It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + :param pulumi.Input['WorkstationClusterPrivateClusterConfigArgs'] private_cluster_config: Configuration for private cluster. + 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[str] subnetwork: Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + Must be part of the subnetwork specified for this cluster. + :param pulumi.Input[str] uid: The system-generated UID of the resource. + :param pulumi.Input[str] workstation_cluster_id: The ID of the workstation cluster. + """ + if annotations is not None: + pulumi.set(__self__, "annotations", annotations) + if conditions is not None: + pulumi.set(__self__, "conditions", conditions) + if create_time is not None: + pulumi.set(__self__, "create_time", create_time) + if degraded is not None: + pulumi.set(__self__, "degraded", degraded) + if display_name is not None: + pulumi.set(__self__, "display_name", display_name) + if etag is not None: + pulumi.set(__self__, "etag", etag) + 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 network is not None: + pulumi.set(__self__, "network", network) + if private_cluster_config is not None: + pulumi.set(__self__, "private_cluster_config", private_cluster_config) + if project is not None: + pulumi.set(__self__, "project", project) + if subnetwork is not None: + pulumi.set(__self__, "subnetwork", subnetwork) + if uid is not None: + pulumi.set(__self__, "uid", uid) + if workstation_cluster_id is not None: + pulumi.set(__self__, "workstation_cluster_id", workstation_cluster_id) + + @property + @pulumi.getter + def annotations(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Client-specified annotations. This is distinct from labels. + """ + return pulumi.get(self, "annotations") + + @annotations.setter + def annotations(self, value: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]): + pulumi.set(self, "annotations", value) + + @property + @pulumi.getter + def conditions(self) -> Optional[pulumi.Input[Sequence[pulumi.Input['WorkstationClusterConditionArgs']]]]: + """ + Status conditions describing the current resource state. + Structure is documented below. + """ + return pulumi.get(self, "conditions") + + @conditions.setter + def conditions(self, value: Optional[pulumi.Input[Sequence[pulumi.Input['WorkstationClusterConditionArgs']]]]): + pulumi.set(self, "conditions", value) + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> Optional[pulumi.Input[str]]: + """ + Time the Instance was created in UTC. + """ + 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 degraded(self) -> Optional[pulumi.Input[bool]]: + """ + Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + Details can be found in the conditions field. + """ + return pulumi.get(self, "degraded") + + @degraded.setter + def degraded(self, value: Optional[pulumi.Input[bool]]): + pulumi.set(self, "degraded", value) + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> Optional[pulumi.Input[str]]: + """ + Human-readable name for this resource. + """ + 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]]: + """ + Checksum computed by the server. + May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + """ + return pulumi.get(self, "etag") + + @etag.setter + def etag(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "etag", value) + + @property + @pulumi.getter + def labels(self) -> Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]]: + """ + Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + """ + 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 where the workstation cluster should reside. + """ + return pulumi.get(self, "location") + + @location.setter + def location(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "location", value) + + @property + @pulumi.getter + def name(self) -> Optional[pulumi.Input[str]]: + """ + The name of the cluster resource. + """ + return pulumi.get(self, "name") + + @name.setter + def name(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "name", value) + + @property + @pulumi.getter + def network(self) -> Optional[pulumi.Input[str]]: + """ + The relative resource name of the VPC network on which the instance can be accessed. + It is specified in the following form: "projects/{projectNumber}/global/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(name="privateClusterConfig") + def private_cluster_config(self) -> Optional[pulumi.Input['WorkstationClusterPrivateClusterConfigArgs']]: + """ + Configuration for private cluster. + Structure is documented below. + """ + return pulumi.get(self, "private_cluster_config") + + @private_cluster_config.setter + def private_cluster_config(self, value: Optional[pulumi.Input['WorkstationClusterPrivateClusterConfigArgs']]): + pulumi.set(self, "private_cluster_config", 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 subnetwork(self) -> Optional[pulumi.Input[str]]: + """ + Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + Must be part of the subnetwork specified for this cluster. + """ + return pulumi.get(self, "subnetwork") + + @subnetwork.setter + def subnetwork(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "subnetwork", value) + + @property + @pulumi.getter + def uid(self) -> Optional[pulumi.Input[str]]: + """ + The system-generated UID of the resource. + """ + return pulumi.get(self, "uid") + + @uid.setter + def uid(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "uid", value) + + @property + @pulumi.getter(name="workstationClusterId") + def workstation_cluster_id(self) -> Optional[pulumi.Input[str]]: + """ + The ID of the workstation cluster. + """ + return pulumi.get(self, "workstation_cluster_id") + + @workstation_cluster_id.setter + def workstation_cluster_id(self, value: Optional[pulumi.Input[str]]): + pulumi.set(self, "workstation_cluster_id", value) + + +class WorkstationCluster(pulumi.CustomResource): + @overload + def __init__(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + display_name: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + network: Optional[pulumi.Input[str]] = None, + private_cluster_config: Optional[pulumi.Input[pulumi.InputType['WorkstationClusterPrivateClusterConfigArgs']]] = None, + project: Optional[pulumi.Input[str]] = None, + subnetwork: Optional[pulumi.Input[str]] = None, + workstation_cluster_id: Optional[pulumi.Input[str]] = None, + __props__=None): + """ + ## Example Usage + ### Workstation Cluster Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + default_network = gcp.compute.Network("defaultNetwork", auto_create_subnetworks=False, + opts=pulumi.ResourceOptions(provider=google_beta)) + default_subnetwork = gcp.compute.Subnetwork("defaultSubnetwork", + ip_cidr_range="10.0.0.0/24", + region="us-central1", + network=default_network.name, + opts=pulumi.ResourceOptions(provider=google_beta)) + default_workstation_cluster = gcp.workstations.WorkstationCluster("defaultWorkstationCluster", + workstation_cluster_id="workstation-cluster", + network=default_network.id, + subnetwork=default_subnetwork.id, + location="us-central1", + labels={ + "label": "key", + }, + annotations={ + "label-one": "value-one", + }, + opts=pulumi.ResourceOptions(provider=google_beta)) + project = gcp.organizations.get_project() + ``` + ### Workstation Cluster Private + + ```python + import pulumi + import pulumi_gcp as gcp + + default_network = gcp.compute.Network("defaultNetwork", auto_create_subnetworks=False, + opts=pulumi.ResourceOptions(provider=google_beta)) + default_subnetwork = gcp.compute.Subnetwork("defaultSubnetwork", + ip_cidr_range="10.0.0.0/24", + region="us-central1", + network=default_network.name, + opts=pulumi.ResourceOptions(provider=google_beta)) + default_workstation_cluster = gcp.workstations.WorkstationCluster("defaultWorkstationCluster", + workstation_cluster_id="workstation-cluster-private", + network=default_network.id, + subnetwork=default_subnetwork.id, + location="us-central1", + private_cluster_config=gcp.workstations.WorkstationClusterPrivateClusterConfigArgs( + enable_private_endpoint=True, + ), + labels={ + "label": "key", + }, + annotations={ + "label-one": "value-one", + }, + opts=pulumi.ResourceOptions(provider=google_beta)) + project = gcp.organizations.get_project() + ``` + + ## Import + + WorkstationCluster can be imported using any of these accepted formats + + ```sh + $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}} + ``` + + ```sh + $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{project}}/{{location}}/{{workstation_cluster_id}} + ``` + + ```sh + $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{location}}/{{workstation_cluster_id}} + ``` + + ```sh + $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{workstation_cluster_id}} + ``` + + :param str resource_name: The name of the resource. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Client-specified annotations. This is distinct from labels. + :param pulumi.Input[str] display_name: Human-readable name for this resource. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + :param pulumi.Input[str] location: The location where the workstation cluster should reside. + :param pulumi.Input[str] network: The relative resource name of the VPC network on which the instance can be accessed. + It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + :param pulumi.Input[pulumi.InputType['WorkstationClusterPrivateClusterConfigArgs']] private_cluster_config: Configuration for private cluster. + 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[str] subnetwork: Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + Must be part of the subnetwork specified for this cluster. + :param pulumi.Input[str] workstation_cluster_id: The ID of the workstation cluster. + """ + ... + @overload + def __init__(__self__, + resource_name: str, + args: WorkstationClusterArgs, + opts: Optional[pulumi.ResourceOptions] = None): + """ + ## Example Usage + ### Workstation Cluster Basic + + ```python + import pulumi + import pulumi_gcp as gcp + + default_network = gcp.compute.Network("defaultNetwork", auto_create_subnetworks=False, + opts=pulumi.ResourceOptions(provider=google_beta)) + default_subnetwork = gcp.compute.Subnetwork("defaultSubnetwork", + ip_cidr_range="10.0.0.0/24", + region="us-central1", + network=default_network.name, + opts=pulumi.ResourceOptions(provider=google_beta)) + default_workstation_cluster = gcp.workstations.WorkstationCluster("defaultWorkstationCluster", + workstation_cluster_id="workstation-cluster", + network=default_network.id, + subnetwork=default_subnetwork.id, + location="us-central1", + labels={ + "label": "key", + }, + annotations={ + "label-one": "value-one", + }, + opts=pulumi.ResourceOptions(provider=google_beta)) + project = gcp.organizations.get_project() + ``` + ### Workstation Cluster Private + + ```python + import pulumi + import pulumi_gcp as gcp + + default_network = gcp.compute.Network("defaultNetwork", auto_create_subnetworks=False, + opts=pulumi.ResourceOptions(provider=google_beta)) + default_subnetwork = gcp.compute.Subnetwork("defaultSubnetwork", + ip_cidr_range="10.0.0.0/24", + region="us-central1", + network=default_network.name, + opts=pulumi.ResourceOptions(provider=google_beta)) + default_workstation_cluster = gcp.workstations.WorkstationCluster("defaultWorkstationCluster", + workstation_cluster_id="workstation-cluster-private", + network=default_network.id, + subnetwork=default_subnetwork.id, + location="us-central1", + private_cluster_config=gcp.workstations.WorkstationClusterPrivateClusterConfigArgs( + enable_private_endpoint=True, + ), + labels={ + "label": "key", + }, + annotations={ + "label-one": "value-one", + }, + opts=pulumi.ResourceOptions(provider=google_beta)) + project = gcp.organizations.get_project() + ``` + + ## Import + + WorkstationCluster can be imported using any of these accepted formats + + ```sh + $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default projects/{{project}}/locations/{{location}}/workstationClusters/{{workstation_cluster_id}} + ``` + + ```sh + $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{project}}/{{location}}/{{workstation_cluster_id}} + ``` + + ```sh + $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{location}}/{{workstation_cluster_id}} + ``` + + ```sh + $ pulumi import gcp:workstations/workstationCluster:WorkstationCluster default {{workstation_cluster_id}} + ``` + + :param str resource_name: The name of the resource. + :param WorkstationClusterArgs 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(WorkstationClusterArgs, pulumi.ResourceOptions, *args, **kwargs) + if resource_args is not None: + __self__._internal_init(resource_name, opts, **resource_args.__dict__) + else: + __self__._internal_init(resource_name, *args, **kwargs) + + def _internal_init(__self__, + resource_name: str, + opts: Optional[pulumi.ResourceOptions] = None, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + display_name: Optional[pulumi.Input[str]] = None, + labels: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + location: Optional[pulumi.Input[str]] = None, + network: Optional[pulumi.Input[str]] = None, + private_cluster_config: Optional[pulumi.Input[pulumi.InputType['WorkstationClusterPrivateClusterConfigArgs']]] = None, + project: Optional[pulumi.Input[str]] = None, + subnetwork: Optional[pulumi.Input[str]] = None, + workstation_cluster_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__ = WorkstationClusterArgs.__new__(WorkstationClusterArgs) + + __props__.__dict__["annotations"] = annotations + __props__.__dict__["display_name"] = display_name + __props__.__dict__["labels"] = labels + __props__.__dict__["location"] = location + if network is None and not opts.urn: + raise TypeError("Missing required property 'network'") + __props__.__dict__["network"] = network + __props__.__dict__["private_cluster_config"] = private_cluster_config + __props__.__dict__["project"] = project + if subnetwork is None and not opts.urn: + raise TypeError("Missing required property 'subnetwork'") + __props__.__dict__["subnetwork"] = subnetwork + if workstation_cluster_id is None and not opts.urn: + raise TypeError("Missing required property 'workstation_cluster_id'") + __props__.__dict__["workstation_cluster_id"] = workstation_cluster_id + __props__.__dict__["conditions"] = None + __props__.__dict__["create_time"] = None + __props__.__dict__["degraded"] = None + __props__.__dict__["etag"] = None + __props__.__dict__["name"] = None + __props__.__dict__["uid"] = None + super(WorkstationCluster, __self__).__init__( + 'gcp:workstations/workstationCluster:WorkstationCluster', + resource_name, + __props__, + opts) + + @staticmethod + def get(resource_name: str, + id: pulumi.Input[str], + opts: Optional[pulumi.ResourceOptions] = None, + annotations: Optional[pulumi.Input[Mapping[str, pulumi.Input[str]]]] = None, + conditions: Optional[pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['WorkstationClusterConditionArgs']]]]] = None, + create_time: Optional[pulumi.Input[str]] = None, + degraded: Optional[pulumi.Input[bool]] = None, + display_name: Optional[pulumi.Input[str]] = None, + etag: 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, + network: Optional[pulumi.Input[str]] = None, + private_cluster_config: Optional[pulumi.Input[pulumi.InputType['WorkstationClusterPrivateClusterConfigArgs']]] = None, + project: Optional[pulumi.Input[str]] = None, + subnetwork: Optional[pulumi.Input[str]] = None, + uid: Optional[pulumi.Input[str]] = None, + workstation_cluster_id: Optional[pulumi.Input[str]] = None) -> 'WorkstationCluster': + """ + Get an existing WorkstationCluster resource's state with the given name, id, and optional extra + properties used to qualify the lookup. + + :param str resource_name: The unique name of the resulting resource. + :param pulumi.Input[str] id: The unique provider ID of the resource to lookup. + :param pulumi.ResourceOptions opts: Options for the resource. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] annotations: Client-specified annotations. This is distinct from labels. + :param pulumi.Input[Sequence[pulumi.Input[pulumi.InputType['WorkstationClusterConditionArgs']]]] conditions: Status conditions describing the current resource state. + Structure is documented below. + :param pulumi.Input[str] create_time: Time the Instance was created in UTC. + :param pulumi.Input[bool] degraded: Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + Details can be found in the conditions field. + :param pulumi.Input[str] display_name: Human-readable name for this resource. + :param pulumi.Input[str] etag: Checksum computed by the server. + May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + :param pulumi.Input[Mapping[str, pulumi.Input[str]]] labels: Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + :param pulumi.Input[str] location: The location where the workstation cluster should reside. + :param pulumi.Input[str] name: The name of the cluster resource. + :param pulumi.Input[str] network: The relative resource name of the VPC network on which the instance can be accessed. + It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + :param pulumi.Input[pulumi.InputType['WorkstationClusterPrivateClusterConfigArgs']] private_cluster_config: Configuration for private cluster. + 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[str] subnetwork: Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + Must be part of the subnetwork specified for this cluster. + :param pulumi.Input[str] uid: The system-generated UID of the resource. + :param pulumi.Input[str] workstation_cluster_id: The ID of the workstation cluster. + """ + opts = pulumi.ResourceOptions.merge(opts, pulumi.ResourceOptions(id=id)) + + __props__ = _WorkstationClusterState.__new__(_WorkstationClusterState) + + __props__.__dict__["annotations"] = annotations + __props__.__dict__["conditions"] = conditions + __props__.__dict__["create_time"] = create_time + __props__.__dict__["degraded"] = degraded + __props__.__dict__["display_name"] = display_name + __props__.__dict__["etag"] = etag + __props__.__dict__["labels"] = labels + __props__.__dict__["location"] = location + __props__.__dict__["name"] = name + __props__.__dict__["network"] = network + __props__.__dict__["private_cluster_config"] = private_cluster_config + __props__.__dict__["project"] = project + __props__.__dict__["subnetwork"] = subnetwork + __props__.__dict__["uid"] = uid + __props__.__dict__["workstation_cluster_id"] = workstation_cluster_id + return WorkstationCluster(resource_name, opts=opts, __props__=__props__) + + @property + @pulumi.getter + def annotations(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + Client-specified annotations. This is distinct from labels. + """ + return pulumi.get(self, "annotations") + + @property + @pulumi.getter + def conditions(self) -> pulumi.Output[Sequence['outputs.WorkstationClusterCondition']]: + """ + Status conditions describing the current resource state. + Structure is documented below. + """ + return pulumi.get(self, "conditions") + + @property + @pulumi.getter(name="createTime") + def create_time(self) -> pulumi.Output[str]: + """ + Time the Instance was created in UTC. + """ + return pulumi.get(self, "create_time") + + @property + @pulumi.getter + def degraded(self) -> pulumi.Output[bool]: + """ + Whether this resource is in degraded mode, in which case it may require user action to restore full functionality. + Details can be found in the conditions field. + """ + return pulumi.get(self, "degraded") + + @property + @pulumi.getter(name="displayName") + def display_name(self) -> pulumi.Output[Optional[str]]: + """ + Human-readable name for this resource. + """ + return pulumi.get(self, "display_name") + + @property + @pulumi.getter + def etag(self) -> pulumi.Output[str]: + """ + Checksum computed by the server. + May be sent on update and delete requests to ensure that the client has an up-to-date value before proceeding. + """ + return pulumi.get(self, "etag") + + @property + @pulumi.getter + def labels(self) -> pulumi.Output[Optional[Mapping[str, str]]]: + """ + Client-specified labels that are applied to the resource and that are also propagated to the underlying Compute Engine resources. + """ + return pulumi.get(self, "labels") + + @property + @pulumi.getter + def location(self) -> pulumi.Output[Optional[str]]: + """ + The location where the workstation cluster should reside. + """ + return pulumi.get(self, "location") + + @property + @pulumi.getter + def name(self) -> pulumi.Output[str]: + """ + The name of the cluster resource. + """ + return pulumi.get(self, "name") + + @property + @pulumi.getter + def network(self) -> pulumi.Output[str]: + """ + The relative resource name of the VPC network on which the instance can be accessed. + It is specified in the following form: "projects/{projectNumber}/global/networks/{network_id}". + """ + return pulumi.get(self, "network") + + @property + @pulumi.getter(name="privateClusterConfig") + def private_cluster_config(self) -> pulumi.Output[Optional['outputs.WorkstationClusterPrivateClusterConfig']]: + """ + Configuration for private cluster. + Structure is documented below. + """ + return pulumi.get(self, "private_cluster_config") + + @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 subnetwork(self) -> pulumi.Output[str]: + """ + Name of the Compute Engine subnetwork in which instances associated with this cluster will be created. + Must be part of the subnetwork specified for this cluster. + """ + return pulumi.get(self, "subnetwork") + + @property + @pulumi.getter + def uid(self) -> pulumi.Output[str]: + """ + The system-generated UID of the resource. + """ + return pulumi.get(self, "uid") + + @property + @pulumi.getter(name="workstationClusterId") + def workstation_cluster_id(self) -> pulumi.Output[str]: + """ + The ID of the workstation cluster. + """ + return pulumi.get(self, "workstation_cluster_id") +